Page QiView

LLM Agent 的工具调用、规划与记忆:可执行架构

LLM Agent 的工具调用、规划与记忆:可执行架构

1. 三件事必须联动设计

很多 Agent 失败并非模型不够强,而是三件事割裂:

  1. 工具调用策略(Tool Use)。
  2. 任务规划策略(Planning)。
  3. 记忆管理策略(Memory)。

可把 Agent 抽象为:

$$ Agent = f(Policy_{tool},\ Policy_{plan},\ Memory_{short/long}) $$

2. 工具调用:从“能调”到“调得对”

核心问题:

  1. 是否需要调用工具。
  2. 调哪个工具。
  3. 何时停止调用。

一个简单决策规则:当内部置信度低于阈值且外部工具可显著降低不确定性时,触发调用。

3. 规划:反应式与分层式

  1. 反应式(ReAct):边想边做,适合短任务。
  2. 分层规划(Hierarchical):先全局计划,再子任务执行,适合复杂工作流。
  3. 约束规划:把预算、时延、合规限制写入计划器目标函数。

建议:对长度 >3 步、存在外部依赖的任务优先使用分层规划。

4. 记忆:短期工作记忆 + 长期语义记忆

  1. 短期记忆:当前会话上下文、临时中间态。
  2. 长期记忆:跨任务偏好、历史事实、稳定知识。

长期记忆要解决三件事:写入策略、检索策略、遗忘策略。
没有遗忘机制会快速污染系统。

5. 一个可实现目标函数

$$ \max \ \mathbb{E}[U] = \mathbb{E}[Q] - \alpha,\text{Cost}_{tool} - \beta,\text{Latency} - \gamma,\text{Risk} $$

其中 $Q$ 是任务质量,成本包含 API、token、检索延迟。

6. Python 极简执行循环

class AgentRuntime:
	def __init__(self, planner, tools, memory):
		self.planner = planner
		self.tools = tools
		self.memory = memory

	def run(self, task: str):
		plan = self.planner.make_plan(task, self.memory.read_short())
		for step in plan:
			if step["type"] == "tool":
				result = self.tools.call(step["name"], step["args"])
				self.memory.write_short({"step": step, "result": result})
			else:
				self.memory.write_short({"reasoning": step["content"]})
		answer = self.planner.summarize(self.memory.read_short())
		self.memory.write_long(task, answer)
		return answer

7. 常见失败模式

  1. 工具雪崩:低价值工具被连环调用。
  2. 计划漂移:目标被中间步骤替代。
  3. 记忆污染:错误事实写入长期记忆并反复召回。

8. 工程落地建议

  1. 给每个工具配置“调用预算上限”和“失败回退策略”。
  2. 对计划器输出做静态检查:是否可执行、是否越权。
  3. 对长期记忆启用置信度与时间衰减,低置信条目自动降权。
  4. 把关键指标接入监控:成功率、平均调用数、延迟、违规率。

工具、规划、记忆三者闭环后,Agent 才能从 demo 走向生产。