Agent 开发核心概念
一、Agent 的本质
Agent = LLM(大脑推理)+ 工具(外部能力)+ 记忆(历史经验)+ 行动循环(自主迭代)
普通 LLM:输入 → 输出,单次交互,无法自主执行多步骤任务
Agent: 输入 → 思考 → 行动 → 观察 → 评估 → 思考 → 行动 … 循环,直至任务完成
核心特征:自主闭环、主动执行、持续反思二、完整架构(7层)
- 感知层:接收多模态输入(文本 / 图片 / 文件 / 数据流)
- 记忆层:存取会话上下文、长期知识库、历史行动记录
- 规划层:任务拆解、推理决策、制定行动方案
- 工具层:管理工具清单,由 LLM 决定调用哪个工具
- 执行层:执行函数 / 接口调用,获取外部返回结果
- 评估层:自检任务进度、校验结果、判断是否继续循环、运行监控
- 输出层:整合全部信息,生成面向用户的最终回答
三、推理模式
ReAct(最主流)
Thought(思考)→ Action(行动)→ Observation(观察结果)→ 继续思考…Chain of Thought(CoT)
复杂问题拆步骤推理:"首先…其次…因此…"Plan & Execute
先制定完整计划 → 再逐步执行(适合写报告、长流程任务)Self-Reflection(自我反思)
生成答案 → 自检"这样对吗?" → 发现问题 → 修正(适合高精度场景)四、工具调用
① 定义工具(名称 + 描述 + 参数)
② LLM 读取工具列表,自主决定调哪个
③ 执行工具,拿到结果
④ 结果塞回上下文,继续推理常见工具类型:
搜索类:网络搜索、数据库查询、文档检索
操作类:读写文件、发邮件、调 API
计算类:执行代码、数学计算
感知类:读图片、解析 PDFLLM 调用工具时返回的 JSON:
json
{"tool": "search_web", "args": {"query": "2024年GDP数据"}}现代 Agent 支持并行工具调用:一次推理同时调多个工具,再汇总结果(大幅提速)。
工具的 description 写得好不好,直接决定模型会不会用对。
五、记忆系统
| 类型 | 存在哪 | 特点 |
|---|---|---|
| 短期记忆 | 上下文窗口 | 对话历史,窗口满了就丢 |
| 长期记忆 | 向量数据库 / 文件 | 永久保存,按需检索 |
| 实体记忆 | 结构化存储 | 记住关键信息("张三是VIP客户") |
六、RAG(检索增强生成)
解决:模型不知道你的私有数据(法律文档、内部资料)
离线:文档 → 切块 → 向量化 → 存入向量数据库
在线:用户提问 → 向量化 → 检索相关片段 → 塞进上下文 → LLM 回答法律场景:把法条、判例、合同模板存进向量库,问什么检索什么,回答有据可查。
为什么切块:整文档太大塞不进上下文,小块才能精准匹配问题(通常 300~500 字/块)。
七、多 Agent
单 Agent 搞不定的复杂任务,拆分给多个专职 Agent:
主控 Agent(分解任务)
├─ 研究 Agent(搜集信息)
├─ 分析 Agent(处理数据)
└─ 报告 Agent(生成输出)八、关键工程问题
| 问题 | 解法 |
|---|---|
| 上下文超长 | 滚动截断 / 摘要压缩旧消息 |
| 工具调用失败 | 捕获异常 → 重试 / 换备选工具 |
| 无限循环 | 设最大步数上限(max_steps=20) |
| 成本失控 | 限 Token 预算 + 记录每次消耗 |
| 危险操作 | Human-in-loop:暂停等人确认再继续 |
Agent 不能单步调试,追踪工具(LangSmith / Langfuse)是定位问题的唯一方式。
九、Prompt Engineering(系统提示词)
系统提示词决定 Agent 的一切行为:
- 角色定位(你是谁)
- 能力边界(你能做什么)
- 行为规范(遇到 X 情况怎么做)
- 工具使用规则(什么时候用哪个工具)
- 输出格式(怎么回答)系统提示词 = Agent 的灵魂,写好它比写代码更重要。
十、测试评估
| 层级 | 测什么 | 怎么测 |
|---|---|---|
| 单元测试 | 工具函数 | 普通代码测试 |
| 集成测试 | 完整循环 | 跑真实用例 |
| Evals | 回答质量 | 语义正确?有无幻觉? |
| 追踪 | 每步行为 | LangSmith / Langfuse |
| 回归测试 | 改 Prompt 后老问题还对吗 | 自动化跑用例集 |
十一、完整流程
用户输入
↓ 感知
系统提示词 + 记忆检索 + 对话历史
↓ 规划(ReAct)
需要工具?
├─ 是 → 调工具 → 拿结果 → 回到规划
└─ 否 → 生成回答
↓ 评估
质量 OK?
├─ 是 → 输出给用户
└─ 否 → 自我反思 → 修正 → 再输出
↓
存入记忆 + 写入追踪日志实现路径(由简到难)
1. 工具调用(Function Calling)← 从这里开始
2. 加入 RAG(接入文档知识库)
3. 加入记忆(多轮对话持久化)
4. 测试评估(保证质量)
5. 多 Agent(复杂任务协作)