这是我学习 AI Agent 开发第二周的实战记录。第一周做了一个能自动判断意图的智能体(RAG+SQL+计算器),这周给它加上了规划能力、联网搜索、多轮记忆、自我纠错,最后封装成 HTTP 服务。
一、第一周的短板
| 问题 | 表现 |
|---|---|
| 只能单步 | “对比2024和2025年销量”需要硬编码 |
| 没记忆 | 问完“2024年销量”,再问“那2025年呢?”它不知道“那”指什么 |
| 不会纠错 | SQL写错了直接报错 |
| 只能本地 | 别人没法调用 |
这周全解决了。
最终效果:
| 用户问题 | 智能体行为 | 回答 |
|---|---|---|
| 笔记本2024年总销量? | 规划→执行SQL | 95台 |
| 那2025年呢? | 结合历史→执行SQL | 137台,增长42台 |
| 今天广州天气? | 联网搜索 | 大雨,18℃~27℃ |
| 笔记本和平板哪个2025年销量高? | 拆两步→分别查→对比 | 笔记本137台,平板105台 |
| 查一下不存在的表 | 执行SQL→检测语法错误→重新规划 | 当前数据库只有sales表 |
二、技术栈(新增)
| 工具 | 用途 |
|---|---|
| Tavily | 联网搜索API |
| FastAPI + Uvicorn | HTTP服务封装 |
| SQLite | 记忆数据库(存对话历史) |
三、核心架构:规划-执行-总结
用户问题
↓
规划节点(LLM拆解任务,选择工具)
↓
执行节点(循环调用工具)← 工具注册表
↓
反思节点(检查结果)→ 有问题就重试/重新规划
↓
总结节点(LLM生成答案)← 加载历史记忆
↓
最终答案
四、七项核心能力
1. 规划模式(让LLM自己拆任务)
用户问“笔记本和平板哪个2025年销量高”,LLM自动输出:
{"plan": [
{"tool": "sql", "query": "SELECT SUM(quantity) FROM sales WHERE product_name='笔记本' AND year=2025"},
{"tool": "sql", "query": "SELECT SUM(quantity) FROM sales WHERE product_name='平板' AND year=2025"}
]}
不用写一行if-else。
2. 联网搜索(Tavily)
def search_tool(query):
response = tavily.search(query=query, search_depth="basic", max_results=3)
return format_results(response["results"])
注册到工具表即可。
3. 反思机制(自我纠错)
执行完一步,让LLM检查结果质量。有问题就标记 need_retry=True。
4. 记忆能力(多轮对话)
用SQLite存对话历史:
save_to_memory(session_id, "user", question)
save_to_memory(session_id, "assistant", answer)
规划节点和总结节点都会加载最近5轮对话。
5. 错误分类(不同错误不同处理)
| 错误类型 | 处理策略 |
|---|---|
| SQL语法错误 | 重新生成SQL |
| 网络超时 | 自动重试 |
| 表不存在 | 跳过 |
| 搜索无结果 | 换关键词重试 |
6. 工具注册表(加工具不改核心代码)
registry = ToolRegistry()
registry.register("sql", "查询销售数据库", sql_tool)
registry.register("search", "联网搜索", search_tool)
# 加新工具一行代码
registry.register("calculator", "数学计算", calc_tool)
7. FastAPI封装(服务化)
@app.post("/ask")
def ask(question: QuestionRequest):
return run_agent(question.question)
启动后访问 http://127.0.0.1:8000/docs 即可测试。
五、运行效果
cd week2
python agent_with_error_classification.py
输出:
六、踩坑记录
| 问题 | 解决 |
|---|---|
| PowerShell运行py文件报错 | 用 python .\文件名.py |
| API Key读不到 | .env放对目录,变量名大写 |
| 工具名大小写不匹配 | 统一用小写 |
| SQL语法错误 | 反思节点+重新规划 |
七、代码仓库
week2/
├── planning_agent.py # 规划模式
├── agent_with_search.py # 联网搜索
├── agent_with_reflection.py # 反思机制
├── agent_with_memory.py # 记忆能力
├── agent_with_tool_registry.py # 工具注册表
├── agent_with_error_classification.py # 错误分类(完整版)
└── fastapi_service.py # FastAPI封装
八、下一步
- 多智能体协作
- 部署到云服务器
- 前端界面
上一篇:从零实现一个多工具智能体:RAG + SQL + 计算器
本文首发掘金,同步CSDN。