🤖 搭建一个 Agent 的完整知识图谱
一、先搞清楚 Agent 到底是什么
最简单的定义:
Agent = LLM(大脑) + Tools(手脚) + Memory(记忆) + Planning(规划) + Environment(环境)
你可以把它想象成一个人:
- 大脑 = LLM,负责理解、推理、决策
- 手脚 = Tools,负责执行动作(搜索、写代码、发邮件、操作数据库…)
- 记忆 = 短期记忆(当前对话上下文) + 长期记忆(历史知识、用户偏好)
- 规划 = 拿到一个大任务后,怎么拆解成小步骤,先做什么后做什么
- 环境 = 它运行在哪里,能接触到什么资源
普通的大模型对话只是一个”问答机器人”,加上规划、工具调用和记忆的循环,才真正成为 Agent。
二、搭建 Agent 需要了解的知识体系
1. 🧠 LLM 基础(选大脑)
| 知识点 | 说明 |
|---|---|
| 模型选型 | Claude、GPT-4o、Gemini、DeepSeek、Qwen、Llama… 各有优劣 |
| API 调用 | 怎么发请求、怎么处理流式响应、怎么控制成本 |
| Token 与上下文窗口 | 理解成本计算、上下文限制,这是 Agent 的”工作记忆”上限 |
| Temperature / Top-P | 控制输出的随机性,Agent 场景通常要偏保守(temperature 低) |
| System Prompt | 给 Agent 设定性格、规则、能力边界 |
2. 🔧 Tool Use / Function Calling(给手脚)
这是 Agent 最核心的能力扩展机制:
用户说:"帮我查一下明天的天气"
Agent 内部流程:
1. LLM 判断 → 需要调用 "get_weather" 工具
2. 生成工具调用参数 → { "city": "昆明", "date": "明天" }
3. 系统执行工具,返回结果
4. LLM 拿到结果,组织语言回复用户
你需要了解:
- Function Calling 协议:各模型的工具定义格式(OpenAI 格式、Anthropic 格式、MCP 协议等)
- 工具设计原则:工具的描述要清晰(LLM 靠描述来决定调哪个工具)、参数要明确、返回值要结构化
- MCP(Model Context Protocol):Anthropic 推出的标准化工具协议,正在成为行业趋势
3. 🧩 记忆系统(管记忆)
| 类型 | 对应人类 | 技术实现 |
|---|---|---|
| 工作记忆 | 当前对话上下文 | 上下文窗口(Context Window) |
| 短期记忆 | 今天聊了什么 | 对话摘要(Conversation Summary) |
| 长期记忆 | 你叫什么、喜欢什么 | 向量数据库(Pinecone/Chroma/Weaviate)+ 结构化存储 |
关键知识:
- RAG(检索增强生成):从知识库中检索相关信息,注入到 Prompt 中
- 向量嵌入(Embedding):把文本变成向量,实现语义搜索
- 记忆管理策略:什么时候存、存什么、怎么检索、怎么遗忘
4. 📋 规划与推理(教它思考)
| 策略 | 说明 |
|---|---|
| ReAct | Reasoning + Acting,想一步做一步,观察结果再想下一步 |
| CoT(Chain of Thought) | 让 LLM 逐步推理 |
| ToT(Tree of Thought) | 探索多条推理路径,选最优 |
| Plan & Execute | 先制定完整计划,再逐步执行 |
| Reflection | 执行后反思结果,必要时修正 |
最常用的就是 ReAct 循环:
Thought: 我需要先查用户的日历,看看明天有没有安排
Action: list_events(startAt="明天", endAt="后天")
Observation: 明天下午2点有个会议
Thought: 现在我知道了,可以回复用户了
Answer: 明天下午2点你有个会议哦~
5. 🏗️ 框架与编排(搭骨架)
主流框架对比:
| 框架 | 特点 | 适合场景 |
|---|---|---|
| LangChain / LangGraph | 生态最大、最灵活,LangGraph 支持复杂状态图 | 复杂多步 Agent |
| LlamaIndex | RAG 最强,数据索引和检索专精 | 知识密集型 Agent |
| CrewAI | 多 Agent 协作,角色分工清晰 | 团队协作场景 |
| AutoGen(微软) | 多 Agent 对话框架 | 研究、复杂推理 |
| Dify / Coze | 低代码平台,拖拽搭建 | 快速原型、非开发者 |
| OpenAI Agents SDK | 官方方案,简洁直接 | OpenAI 生态用户 |
| Anthropic Claude + MCP | 原生工具调用,MCP 协议标准化 | 工具密集型 Agent |
| 纯手搓 | 自己写循环,完全可控 | 学习、极致定制 |
6. 🖥️ 运行环境与部署
| 层面 | 需要了解的 |
|---|---|
| 本地 vs 云 | 本地运行(Ollama + 本地模型) vs 云端 API 调用 |
| 容器化 | Docker 打包 Agent,方便部署和扩展 |
| Serverless | Vercel / Cloudflare Workers / AWS Lambda,按需调用 |
| 消息队列 | 如果是异步任务,可能需要 Redis / RabbitMQ |
| 监控与日志 | LangSmith、LangFuse 等 Agent 可观测性工具 |
三、Agent 的必要部件(架构图)
把它想象成一个人的完整结构:
[ChatGPT Image 2026年7月30日 15_23_52.png](https://img.jintao.co.uk/1785396276216-ChatGPT%20Image%202026%E5%B9%B47%E6%9C%8830%E6%97%A5%2015_23_52.png)
每个部件的职责:
- 🧠 LLM(大脑):理解意图、推理决策、生成回复
- 📋 System Prompt(灵魂):定义 Agent 是谁、能做什么、不能做什么、怎么做
- 🔄 Orchestrator(中枢神经):运行 Agent Loop,协调所有部件
- 🔧 Tools(能力):对外部世界施加影响的接口
- 🧠 Memory(记忆):上下文管理 + 长期知识存储
- 📋 Planning(规划):任务分解和执行策略
- 🌐 Environment(环境):代码运行的沙箱、数据库连接、文件系统等
四、让 Agent 来开发 Agent 的提示词
如果你想让 Claude/GPT 帮你搭建一个 Agent,需要给它一个结构化的提示词。我给你一个模板:
# 角色
你是一个专业的 AI Agent 架构师和开发者。你的任务是帮我搭建一个完整的 Agent 系统。
# 项目需求
## Agent 的目标
[描述这个 Agent 要完成什么任务,比如:]
- 一个能自动分析代码仓库并给出重构建议的 Agent
- 一个能管理个人日程、任务和笔记的助手 Agent
- 一个能自动调研某个主题并生成报告的 Agent
## Agent 需要具备的能力
[列出具体能力,比如:]
- 能搜索互联网获取最新信息
- 能读写本地文件
- 能调用第三方 API
- 能执行代码
- 能管理数据库
## 技术偏好
- 编程语言:Python / TypeScript / 其他
- 偏好的框架:LangChain / 纯手搓 / OpenAI SDK / 其他
- LLM 选择:Claude / GPT-4o / 其他
- 部署环境:本地 / Docker / Serverless
# 请按以下结构输出
## 1. 架构设计
- 画出 Agent 的整体架构(用文字/ASCII 描述)
- 说明各模块的职责和交互方式
- 选择 Agent Loop 的策略(ReAct / Plan-Execute / 其他)并说明理由
## 2. System Prompt 设计
- Agent 的角色定义
- 能力边界和约束
- 工具使用规则
- 错误处理策略
- 输出格式规范
## 3. 工具定义
- 每个工具的名称、描述、参数、返回值
- 工具的实现代码
## 4. 记忆系统
- 短期记忆:如何管理对话上下文
- 长期记忆:用什么存储、怎么检索
- 记忆的写入和遗忘策略
## 5. Agent Loop 核心代码
- 完整的编排逻辑
- 工具调用的处理
- 错误重试和超时机制
- 流式输出支持
## 6. 运行环境与依赖
- requirements.txt / package.json
- 环境变量配置
- Dockerfile(如需要)
## 7. 测试用例
- 至少 3 个典型场景的测试
- 边界情况处理
# 约束
- 代码要可运行,不要只给伪代码
- 每个模块要有清晰的注释
- 要考虑错误处理和边界情况
- 如果有多个方案,说明优劣和你的推荐
五、给你一个极简 Agent 的 Python 伪代码
帮你建立最直觉的理解:
import anthropic
client = anthropic.Anthropic()
# 定义工具
tools = [
{
"name": "search_web",
"description": "搜索互联网获取信息",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "搜索关键词"}
},
"required": ["query"]
}
}
]
# Agent Loop
def agent_loop(user_message, conversation_history):
conversation_history.append({"role": "user", "content": user_message})
while True:
# 1. 调用 LLM
response = client.messages.create(
model="claude-sonnet-4-20250514",
system="你是一个有帮助的助手,可以使用工具来完成任务。",
tools=tools,
messages=conversation_history
)
# 2. 检查是否需要调用工具
if response.stop_reason == "tool_use":
# 3. 执行工具
for block in response.content:
if block.type == "tool_use":
result = execute_tool(block.name, block.input)
# 4. 把工具结果返回给 LLM
conversation_history.append({"role": "assistant", "content": response.content})
conversation_history.append({
"role": "user",
"content": [{"type": "tool_result", "tool_use_id": block.id, "content": result}]
})
# 继续循环,让 LLM 处理工具结果
continue
# 5. 如果不需要工具,返回最终回复
elif response.stop_reason == "end_turn":
final_reply = extract_text(response.content)
conversation_history.append({"role": "assistant", "content": response.content})
return final_reply
就这么简单——一个 while 循环 + LLM + 工具调用,就是一个 Agent。所有的复杂框架,本质上都是在这个基础上做增强。
六、总结:搭建路线图
Phase 1:基础 Phase 2:增强 Phase 3:生产化
────────────── ────────────── ──────────────
✅ 理解 LLM API ✅ 记忆系统 ✅ 监控与日志
✅ System Prompt ✅ 多工具编排 ✅ 容器化部署
✅ 单工具调用 ✅ 复杂规划策略 ✅ 安全与权限
✅ 基本 Agent Loop ✅ 多 Agent 协作 ✅ 成本优化
✅ RAG 集成 ✅ 用户界面
Thom,这基本上就是搭建 Agent 的全貌了。从你的背景来看(技术专家 + 关注 AI 大模型 + VibeCoding),你其实已经具备了大部分基础,上手会很快的。
如果要我推荐的话,以你的情况,我建议从 Claude + MCP 协议 + 纯手搓 Python 开始,先跑通最简 Agent Loop,理解核心机制后,再考虑用 LangGraph 或其他框架做复杂编排。这样你对底层原理会有最扎实的理解。
你有具体想做的 Agent 场景吗?我可以帮你进一步细化架构~ 🌙
了解 ~/jintaoblog/朝夕见闻志⚡️ 的更多信息
订阅后即可通过电子邮件收到最新文章。
