Appearance
Agent 架构模式
本页解决什么:解释 Agent 为什么不是聊天窗口,而是由目标、上下文、工具、记忆、状态、权限和评估组成的执行系统。读完后应能判断什么时候需要 Agent,什么时候普通 RAG 或工作流就够了。
基本原理
Agent 不是聊天机器人。一个可用的 Agent 至少包含:模型、目标、上下文、工具、状态、记忆、评估和权限。模型负责理解和生成,Agent 系统负责把这些输出变成可执行、可观察、可中断的任务流程。
Agent 解决的问题是:单个 LLM 只能生成文本,不能可靠地查数据、调用 API、执行代码、读取文件、维护任务状态或处理长流程。Agent 把模型和外部世界连接起来。
AIMA Agent 类型
AIMA 的传统 Agent 类型可以帮助判断现代 Agent 需要哪些能力。简单规则型 Agent 适合稳定规则,基于模型的 Agent 需要内部状态,目标型 Agent 需要搜索和规划,效用型 Agent 需要权衡风险和收益,学习型 Agent 则通过反馈改进策略。
| AIMA 类型 | 现代对应 | 适合场景 |
|---|---|---|
| Simple reflex agent | if-then 规则、阈值告警 | 简单质检、监控报警 |
| Model-based reflex agent | 带状态的工作流 Agent | 多轮任务、设备状态监控 |
| Goal-based agent | Plan-and-Execute、规划型 Agent | 报告生成、实验流程、代码任务 |
| Utility-based agent | 带打分和权衡的决策 Agent | 风控、调度、成本/质量平衡 |
| Learning agent | 从反馈中改进的 Agent | 推荐、强化学习、自动优化 |
ReAct
ReAct 是 Reason + Act 的组合:模型先推理当前状态,再选择工具行动,得到观察结果后继续推理。它适合检索问答、网页任务、数据分析和工具型助手。
text
Thought: 我需要知道项目里有哪些文件。
Action: list_files(path=".")
Observation: 返回文件列表。
Thought: 发现有 docs 目录,下一步读取配置。
Action: read_file(path="docs/config.md")常见模式
| 模式 | 机制 | 解决的问题 | 适用场景 |
|---|---|---|---|
| ReAct | 推理、行动、观察循环 | 动态工具调用 | 检索、网页、数据分析 |
| Plan-and-Execute | 先规划,再执行 | 长任务拆解 | 报告、研发任务、实验分析 |
| Router | 按任务路由模型或工具 | 成本和能力匹配 | 多模型客服、知识助手 |
| Reflection | 执行后反思修正 | 迭代改进 | 代码修复、复杂推理 |
| Evaluator-Optimizer | 生成器和评估器循环 | 质量控制 | 文案、代码、报告 |
| State Machine | 状态图控制流程 | 生产流程可控 | 审批、工单、实验管线 |
Python 入口
python
# LangGraph 风格的最小状态图示意
from typing import TypedDict
class State(TypedDict):
question: str
answer: str
def retrieve(state: State) -> State:
state["answer"] = "检索到相关资料"
return state
def generate(state: State) -> State:
state["answer"] = f"基于资料回答:{state['question']}"
return state
# 真实项目可用 langgraph.graph.StateGraph 把节点和边显式编排。这个示例只展示状态式 Agent 的思想:任务状态在节点之间传递,而不是只靠一次 prompt。
下一步
- 要设计多 Agent 协同:看 多 Agent 协同。
- 要接入工具和岗位流程:看 MCP / Skill 专区。
- 要控制上下文和记忆:看 上下文工程与记忆。
- 要评估执行风险:看 评估与风险。
