📌 前置说明:本系列共 8 章,建议按顺序阅读。
📖 系列导航:
第一章:AI Agent 是什么?一文讲清楚核心概念与架构 第三章:主流 AI Agent 框架对比:LangChain、AutoGPT、AutoGen、LlamaIndex 第四章:动手实现你的第一个 AI Agent(附完整代码) 第五章:AI Agent 的工具调用与工具设计 第六章:多智能体(Multi-Agent)系统架构详解 第七章:AI Agent 记忆系统:从短期到长期记忆的设计与实现 第八章:AI Agent 项目实战:构建企业级智能助手
前言
上一章我们介绍了 AI Agent 的基本概念与整体架构。这一章我们来深入剖析 AI Agent 的技术原理,搞清楚一个 Agent 到底是怎么"思考"和"行动"的。
核心公式镇楼:
AI Agent = 大模型(Brain)+ 规划(Planning)+ 记忆(Memory)+ 工具(Tools)本文将逐一拆解这四个模块的工作机制。
一、大模型(LLM):Agent 的核心大脑
1.1 为什么 LLM 是 Agent 的基础?
AI Agent 的能力边界,在很大程度上由底层 LLM 决定。一个 Agent 的:
理解能力 → 取决于 LLM 的语言理解 推理能力 → 取决于 LLM 的推理水平 规划能力 → 取决于 LLM 的规划与拆解能力 工具调用能力 → 取决于 LLM 的 Function Calling 能力
1.2 LLM 在 Agent 中的角色
LLM 在 Agent 中承担三大核心职责:
① 推理引擎(Reasoning Engine)
# Agent 内部,LLM 每次推理的简化流程def agent_loop(user_goal, llm, tools, memory):context = memory.get_recent_context()system_prompt = build_system_prompt(goal=user_goal, tools=tools)while not task_complete:# 1. 推理:LLM 分析当前状态,决定下一步thought = llm.reason(system_prompt + context)# 2. 行动:如果需要执行,调用工具if thought.requires_action:result = tools.execute(thought.action)context += result # 将结果加入上下文# 3. 检查:是否达成目标if thought.is_complete:return thought.response
② 工具选择器(Tool Selector) LLM 根据任务上下文,从众多可用工具中选择最合适的一个。
③ 响应生成器(Response Generator) 将 Agent 的行动结果整理成人类可读的回复。
1.3 模型选型建议
二、规划模块(Planning):让 Agent 学会"做事"
2.1 思维链(Chain of Thought, CoT)
思维链由 Google 在 2022 年提出,核心思想是:让模型"说出思考过程",而不仅仅是给答案。
❌ 没有 CoT:问:一共有15个球,扔掉3个,又买了6个,现在有几个球?答:18个。✅ 有 CoT:问:一共有15个球,扔掉3个,又买了6个,现在有几个球?答:第一步:开始有15个球第二步:扔掉3个,15 - 3 = 12个第三步:又买了6个,12 + 6 = 18个最终答案:18个
在 Agent 中,CoT 的意义在于:让 Agent 展示推理过程,便于人类监督和纠正。
2.2 ReAct 范式(Reasoning + Acting)
ReAct(Synergizing Reasoning, Acting, and Planning)是当前最主流的 Agent 推理框架:
ReAct 循环:Reasoning(推理)→ Acting(行动)→ Observing(观察)→ Reasoning(推理)→ ...
一个具体例子:
用户:把 projects 文件夹里的 PDF 报告汇总成一个文件Reasoning:用户需要我先看看 projects 文件夹里有哪些 PDF 文件Acting:调用 list_files 工具,路径 = projects/Observing:返回 [report1.pdf, report2.pdf, notes.pdf]Reasoning:好的,找到了3个PDF文件,现在需要逐个读取内容Acting:调用 read_pdf 工具读取 report1.pdf...(重复读取每个文件)Reasoning:所有内容都读取完毕,现在需要合并并生成最终文件Acting:调用 merge_pdfs 工具,合并三个文件Observing:合并成功,生成 summary_report.pdfReasoning:任务完成,向用户报告结果
ReAct 的关键优势是:每一轮推理都有行动支撑,每个行动都基于推理结论,避免了 LLM"胡说八道"的问题。
2.3 思维树(Tree of Thoughts, ToT)
思维树让 Agent 在做重大决策时,探索多条路径,选择最优方案:
用户问题│┌────────┴────────┐方案A 方案B┌───┴───┐ ┌───┴───┐更好 一般 更好 一般↓ ↓继续优化 继续优化↓ ↓最终方案 最终方案
ToT 适用于:需要探索、试错和回溯的复杂任务,比如:
复杂代码编写(多种实现路径) 研究性任务(多种研究方向) 策略类游戏(多种打法)
2.4 自我反思(Self-Reflection)
自我反思是 Agent 自我纠错的关键能力:
class SelfReflection:def __init__(self, llm):self.llm = llmdef evaluate_result(self, original_goal, action_result):prompt = f"""你刚刚执行了一个行动,请评估结果:目标:{original_goal}行动结果:{action_result}请回答:1. 这个结果是否达成了目标?2. 如果没有,问题出在哪里?3. 下一步应该怎么调整?"""return self.llm.generate(prompt)
有了自我反思,Agent 能够:
发现执行错误并回滚 识别不完整的工作并补充 根据反馈调整策略
三、记忆系统(Memory):Agent 的"记忆宫殿"
3.1 三层记忆架构
┌─────────────────────────────────────────────────┐│ 长期记忆(Long-term Memory) ││ ┌───────────────────────────────────────────┐ ││ │ 工作记忆(Working Memory) │ ││ │ ┌─────────────────────────────────────┐ │ ││ │ │ 感知记忆(Perceptual) │ │ ││ │ └─────────────────────────────────────┘ │ ││ └───────────────────────────────────────────┘ │└─────────────────────────────────────────────────┘
3.2 感知记忆(Perceptual Memory)
感知记忆处理 Agent 的即时输入:
用户的当前消息 视觉输入(截图、图片) 语音输入(语音转文字)
3.3 工作记忆(Working Memory)
工作记忆存储当前任务执行过程中的所有中间状态:
# 工作记忆示例working_memory = {"current_task": "整理周报并发送邮件","completed_steps": ["✅ 读取了 week_report.txt","✅ 提取了关键数据:销售额+23%,新增用户1200","✅ 生成了摘要文本"],"current_step": "正在调用邮件发送工具","context": {"user_email": "team@company.com","sender_preference": "正式语气"}}
注意:工作记忆受限于 LLM 的上下文窗口大小,目前主流模型在 32K-200K tokens 之间。
3.4 长期记忆(Long-term Memory)
长期记忆让 Agent 跨会话积累知识,核心实现方式是 向量数据库:
# 长期记忆的写入流程def store_long_term_memory(agent_id, content, vector_store):# 1. 将文本内容向量化(使用 Embedding 模型)vector = embedding_model.encode(content)# 2. 存入向量数据库(支持语义检索)vector_store.add(id=f"{agent_id}_{timestamp}",vector=vector,text=content,metadata={"agent_id": agent_id, "timestamp": timestamp})# 长期记忆的检索流程def retrieve_relevant_memory(query, vector_store, top_k=5):# 1. 将查询向量化query_vector = embedding_model.encode(query)# 2. 语义相似度检索results = vector_store.search(query_vector, top_k=top_k)# 3. 返回最相关的记忆return results
主流向量数据库对比:
| Pinecone | ||
| Chroma | ||
| Weaviate | ||
| Milvus | ||
| FAISS |
3.5 RAG 与 Agent 的结合
RAG(Retrieval-Augmented Generation,检索增强生成)是目前将知识库与 Agent 结合的主流方式:
用户问题 → 检索相关知识 → 将知识注入 Prompt → LLM 生成回答def rag_agent(query, vector_store, llm):# Step 1: 检索相关知识relevant_docs = vector_store.search(query, top_k=3)# Step 2: 构建增强后的 Promptcontext = "\n".join([doc.text for doc in relevant_docs])enhanced_prompt = f"""根据以下知识回答问题:{context}问题:{query}"""# Step 3: LLM 生成回答answer = llm.generate(enhanced_prompt)return answer
四、工具系统(Tools):Agent 行动的"四肢"
4.1 什么是 Function Calling?
Function Calling(函数调用)是 LLM 与外部工具交互的核心能力。它让 LLM 能够:
- 识别何时需要调用工具
- 提取正确的参数
- 理解工具返回的结果
4.2 Function Calling 的工作原理
# 定义工具tools = [{"type": "function","function": {"name": "get_weather","description": "获取指定城市的天气信息","parameters": {"type": "object","properties": {"city": {"type": "string","description": "城市名称,如北京、上海"},"unit": {"type": "string","enum": ["celsius", "fahrenheit"],"description": "温度单位"}},"required": ["city"]}}}]# LLM 返回调用指令response = openai.ChatCompletion.create(model="gpt-4o",messages=[{"role": "user", "content": "北京今天多少度?"}],tools=tools)# LLM 返回的函数调用tool_call = response.choices[0].message.tool_calls[0]print(tool_call)# Output:# {# "id": "call_xxx",# "type": "function",# "function": {# "name": "get_weather",# "arguments": "{\"city\": \"北京\"}"# }# }
4.3 常见工具类型
| 搜索工具 | ||
| 代码执行 | ||
| 文件操作 | ||
| API 调用 | ||
| 数据库 | ||
| 浏览器操作 | ||
| 邮件 | ||
| 日历 |
4.4 工具选择策略
当 Agent 有多个工具可用时,需要策略选择:
def select_tool(task_description, available_tools, llm):"""让 LLM 根据任务描述选择最合适的工具"""prompt = f"""可用的工具列表:{available_tools}当前任务:{task_description}请从上述工具中选择最合适的1-2个工具(如果需要多个)。直接输出工具名称列表,格式:[tool1, tool2]"""return llm.generate(prompt)
五、四大组件的协同工作
用一个完整的例子来看四个组件如何协同:
用户:帮我分析一下 AAPL 股票本周表现,并生成一份报告发给我邮箱┌─────────────────────────────────────────────────────────┐│ Agent 工作流程 │├─────────────────────────────────────────────────────────┤│ ││ 【Brain - LLM】 ││ 理解任务 → "用户需要股票分析报告并发送邮件" ││ ││ 【Planning】 ││ 规划步骤: ││ 1. 搜索 AAPL 股票本周行情 ││ 2. 获取财务数据和新闻 ││ 3. 分析涨跌原因 ││ 4. 生成报告 ││ 5. 发送邮件 ││ ││ 【Tools】 ││ → 调用 web_search 工具搜索股票数据 ││ → 调用 financial_api 获取行情数据 ││ → 调用 email.send 发送报告 ││ ││ 【Memory】 ││ → 记录:用户偏好"正式语气"、邮箱地址 ││ → 记录:本次任务结果,供下次参考 ││ │└─────────────────────────────────────────────────────────┘
六、技术原理小结
| LLM | ||
| 规划 | ||
| 记忆 | ||
| 工具 |
七、下一步预告
下一章我们将进入框架对比实战环节,详解:
LangChain、AutoGPT、AutoGen、LlamaIndex 各自的特点 不同场景下如何选择合适的框架 国产 Agent 开发平台的推荐
💬 写在最后:原理看完,下一章我们直接上手写代码!如果觉得有帮助,欢迎收藏关注本系列。
相关资源:
🔥 全系列目录:AI Agent 从入门到精通(持续更新 🚀 第三章:主流 AI Agent 框架对比与选型指南 🛠️ 第四章:动手实现你的第一个 AI Agent
夜雨聆风