跳到主要内容

Agent 状态机、记忆和工具权限

🤖 Agent 是能自主規划、调用工具、持续记忆并完成项目级任务的 LLM 系统。设计的核心是可靠性、可观测性和安全边界。

Agent 工作循环

目标 → 规划 → 工具调用 → 观察结果 → 更新记忆 → 重新规划(循环直到任务完成)

主流架构模式

模式说明适用场景
ReAct思考-行动交替一般任务,易解释
Plan & Execute先全局规划再执行项目级任务
ReWOO预先规划工具调用图减少中间 LLM 调用
LLM×LLM多 Agent 协作复杂工作流

状态管理

什么需要状态?

LLM 本身无状态,多轮对话和长运行任务需要外部状态存储。

状态类型

class AgentState:
messages: list[Message] # 对话历史
plan: list[str] # 当前执行计划
tool_results: dict # 工具调用结果
iteration: int # 循环计数(防止无限循环)
status: Literal["running", "done", "error"]

状态持久化方案

  • 内存:单局、短任务
  • Redis:分布式、会话级共享
  • 数据库:长期持久化和审计

记忆系统

四类记忆

类型内容存储具体例子
工作记忆当前任务上下文内存已调用的工具和结果
封锁记忆压缩后的长期信息KV 存储上次会话摘要
语义记忆用户偏好、事实向量库用户嗜好 → RAG 召回
程序记忆已学会的技能工具/代码分析数据的 Python 脚本

记忆压缩策略

  • 渐进摘要:每 N 轮对话摘要一次
  • 中间邏出:保留头尾,序列压缩中间
  • 向量召回:过长记忆存入向量库,按需召回

工具权限控制

最小权限原则

# 工具应式需要最小权限
tools = [
read_file, # 只读
search_web, # 只读
# write_file, # 写入,需确认才开放
# delete_file, # 删除,需确认才开放
]

確认机制(Human-in-the-Loop)

# 高风险操作需要人类批准
@requires_approval
def send_email(to: str, body: str): ...

@requires_approval
def delete_database(table: str): ...

资源限制

资源限制方式
Token 预算每次调用记录消耗,超限就停
工具调用次数max_iterations 防止无限循环
时间限制timeout 高于阈值则中断
并发工具调用限制最大并行数

多 Agent 协作

# Orchestrator 分配任务给专业 Agent
orchestrator → code_agent (写代码)
orchestrator → search_agent (检索信息)
orchestrator → verify_agent (验证结果)

设计原则

  • 每个 Agent 有清晰的职责边界
  • 共享状态用结构化消息传递
  • 中心化日志和错误处理

常见问题

  • 无限循环:设置 max_iterations,超出即退出
  • 工具权限过大导致安全事故:遵循最小权限原则
  • 记忆上下文过长:实时压缩,不要将全部历史塩入 Prompt