22-从第一性原理理解AI-Agent-模型工具记忆和规划
·
从第一性原理理解 AI Agent:模型、工具、记忆和规划
系列:Python + FastAPI 大模型应用基础(第 22 篇)
1. Agent 的最小定义
Agent(智能体)不是“更会聊天的模型”。从第一性原理看,它是一个闭环控制程序:
读取目标和状态 → 选择下一动作 → 执行动作 → 观察结果
→ 更新状态 → 达到终止条件
其中模型负责不确定的推理与选择,程序负责确定性的状态、权限、执行和停止。
2. 四个组件
- 模型:提出下一步动作;
- 工具:查询或改变外部世界;
- 记忆:保存当前任务需要的状态;
- 规划:决定动作顺序和终止条件。
记忆不是越多越好,工具也不是越多越强。额外能力会增加 Token、误调用和攻击面。
3. 一个不依赖框架的最小 Agent
from dataclasses import dataclass, field
from typing import Literal, Protocol
@dataclass(frozen=True)
class Action:
kind: Literal["search", "finish"]
argument: str
class Planner(Protocol):
def next_action(self, goal: str, observations: tuple[str, ...]) -> Action:
"""模型适配器只需实现这个接口。"""
@dataclass
class AgentState:
goal: str
observations: list[str] = field(default_factory=list)
step: int = 0
class AgentRunner:
def __init__(self, planner: Planner, max_steps: int = 4) -> None:
if max_steps <= 0:
raise ValueError("max_steps 必须大于 0")
self.planner = planner
self.max_steps = max_steps
def run(self, goal: str) -> str:
state = AgentState(goal=goal)
while state.step < self.max_steps:
action = self.planner.next_action(
state.goal,
tuple(state.observations),
)
state.step += 1
if action.kind == "finish":
return action.argument
if action.kind == "search":
# 示例使用受控本地工具,生产中还需权限、超时和审计
state.observations.append(search_knowledge(action.argument))
continue
raise ValueError("规划器返回了未知动作")
raise RuntimeError("Agent 超过最大步骤数")
def search_knowledge(query: str) -> str:
data = {"退款期限": "演示资料:退款期限需以订单政策为准。"}
return data.get(query, "未找到资料")
4. 用 Fake Planner 验证闭环
class FakePlanner:
"""确定性规划器用于验证状态循环,不代表真实模型。"""
def next_action(self, goal: str, observations: tuple[str, ...]) -> Action:
if not observations:
return Action("search", "退款期限")
return Action("finish", f"根据工具结果:{observations[-1]}")
def test_agent_loop() -> None:
answer = AgentRunner(FakePlanner(), max_steps=2).run("退款期限是什么?")
assert "根据工具结果" in answer
assert "演示资料" in answer
Fake Planner 的意义是把框架控制流与模型效果分离。接入真实模型后,还需要契约测试和线上评测。
5. 终止条件比“规划能力”更重要
生产 Agent 至少需要:
- 最大步骤数;
- 总超时时间;
- Token 或费用预算;
- 同一工具重复次数限制;
- 写操作次数限制;
- 用户取消和人工接管;
- 明确成功、失败和部分成功状态。
没有终止条件的循环会造成费用失控,也可能重复执行有副作用的操作。
6. 对抗性审查
- 模型不能直接修改 Agent 状态中的身份和权限;
- 观察结果可能含恶意指令,仍按不可信数据处理;
- 记忆只保存当前任务必需内容,并设置过期时间;
- 每一步记录输入摘要、动作、耗时和结果状态;
- 写工具使用幂等键;
- 高风险任务优先改为确定性工作流。
7. 总结
Agent 的价值是让模型参与“下一步做什么”,风险也来自这种自由度。可靠 Agent 必须由代码限定状态、动作空间和停止条件。
更多推荐



所有评论(0)