👨 作者简介:大家好,我是唐璜Taro,全栈 领域创作者
✒️ 个人主页 :唐璜Taro
🚀 支持我:点赞👍+📝 评论 + ⭐️收藏
RAG 让大模型读懂你的数据,而 Agent 让大模型自主完成任务。它是 AI 应用的终极形态------模型不再是问答机器,而是能思考、规划、使用工具的智能体。
一、什么是 Agent?

1.1 从对话到行动
普通 LLM: 用户提问 → 模型回答(一问一答)
RAG: 用户提问 → 检索资料 → 模型基于资料回答
Agent: 用户提问 → 思考 → 选择工具 → 执行 → 观察结果 → 再思考 → ... → 最终回答
Agent 的核心能力:
- 思考(Reasoning):拆解问题,制定计划
- 行动(Action):调用工具、API、数据库
- 观察(Observation):获取工具执行结果
- 反思(Reflection):评估结果,决定下一步
1.2 Agent 的组成要素
┌─────────────────────────────────────┐
│ Agent │
│ │
│ ┌──────┐ ┌──────┐ ┌──────────┐ │
│ │ LLM │ │ 工具 │ │ 记忆 │ │
│ │ 大脑 │ │ 双手 │ │ 经验 │ │
│ └──────┘ └──────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────┐ │
│ │ 规划能力 │ │
│ │ ReAct / Plan-and-Execute │ │
│ └──────────────────────────────┘ │
└─────────────────────────────────────┘
| 要素 | 作用 | 举例 |
|---|---|---|
| LLM(大脑) | 理解任务、推理决策 | DeepSeek、GPT-4o、Claude |
| 工具(双手) | 执行具体操作 | 搜索、计算、读写文件、调用 API |
| 记忆(经验) | 保留上下文和历史 | 对话记录、长期知识 |
| 规划(策略) | 拆解任务、制定步骤 | ReAct、Plan-and-Execute |
1.3 Agent vs RAG vs 微调
| 方案 | 核心能力 | 适用场景 | 局限 |
|---|---|---|---|
| RAG | 检索增强生成 | 知识问答、文档查询 | 只能回答,不能行动 |
| 微调 | 模型内化特定知识 | 特定风格/格式输出 | 不能实时更新 |
| Agent | 自主规划和执行 | 复杂多步骤任务 | 实现复杂、成本高 |
最佳实践:Agent + RAG 结合,让 Agent 具备知识检索能力。
二、Agent 核心原理
2.1 ReAct 框架
ReAct(Reasoning + Acting)是最经典的 Agent 模式:
Thought: 我需要先搜索今天的天气
Action: search("北京今天天气")
Observation: 北京今天晴,最高温度 28°C
Thought: 我已经知道天气了,可以直接回答
Final Answer: 北京今天晴天,最高温度 28°C,适合出行。
每一循环包含四步:
- Thought --- 思考下一步该做什么
- Action --- 选择并调用工具
- Observation --- 获取工具返回结果
- 循环或结束 --- 根据结果决定继续还是回答
2.2 Function Calling 机制
大模型本身不能执行代码,Function Calling 是桥梁:
用户:"帮我查一下北京天气"
↓ 模型分析后决定调用
{
"name": "get_weather",
"arguments": {
"city": "北京"
}
}
↓ 程序执行函数,返回结果
"北京今天晴,28°C"
↓ 模型基于结果生成回答
"北京今天天气晴朗,最高温度 28°C。"
关键点 :模型只负责决定调用什么函数、传什么参数,实际执行是程序做的。
2.3 Plan-and-Execute 模式
复杂任务需要先规划再执行:
用户:"帮我写一份竞品分析报告"
Plan:
1. 搜索竞品信息
2. 分析竞品功能特点
3. 整理对比表格
4. 撰写分析报告
5. 输出最终文档
Execute:
→ 执行步骤 1(搜索)→ 完成
→ 执行步骤 2(分析)→ 完成
→ 执行步骤 3(整理)→ 完成
→ 执行步骤 4(撰写)→ 完成
→ 执行步骤 5(输出)→ 完成
Result: 生成完整的竞品分析报告
三、技术栈选型
3.1 Agent 框架对比
| 框架 | 开发者 | 特点 | 适合场景 | 学习成本 |
|---|---|---|---|---|
| LangChain | LangChain | 生态最大,工具丰富 | 入门学习、快速原型 | 中 |
| LangGraph | LangChain | 图状流程,状态机 | 复杂多步 Agent | 高 |
| CrewAI | CrewAI | 多 Agent 协作 | 多角色团队模拟 | 中 |
| AutoGen | 微软 | 多 Agent 对话 | 研究探索 | 高 |
| Dify | Dify | 低代码,可视化 | 快速落地、非技术人员 | 低 |
| Coze | 字节 | 低代码,集成生态 | 快速搭建 Bot | 低 |
3.2 大模型选型
| 模型 | Function Calling | 中文能力 | 价格 | 推荐 |
|---|---|---|---|---|
| DeepSeek-V3 | 支持 | 优秀 | 便宜 | 入门首选 |
| GPT-4o | 优秀 | 好 | 中等 | 效果最好 |
| Claude Sonnet | 优秀 | 好 | 中等 | 长文本强 |
| Qwen-Max | 支持 | 优秀 | 便宜 | 国产替代 |
| 本地模型 | 部分支持 | 参差不齐 | 免费 | 隐私场景 |
3.3 工具生态
常用工具类型:
| 类型 | 工具 | 说明 |
|---|---|---|
| 搜索 | Tavily、SerpAPI、Bing | 互联网搜索 |
| 计算 | Python REPL、Calculator | 数学计算、代码执行 |
| 数据库 | SQLDatabase、MongoDB | 数据查询 |
| 文件 | FileReader、FileWriter | 读写文件 |
| API | Requests、HTTP Client | 调用任意 API |
| 代码 | Code Interpreter | 执行 Python 代码 |
四、环境准备
4.1 安装依赖
bash
conda create -n agent python=3.10 -y
conda activate agent
pip install langchain langchain-openai langchain-community
pip install langgraph # 复杂 Agent 流程
pip install tavily-python # 搜索工具
pip install python-dotenv # 环境变量管理
4.2 配置环境变量
创建 .env 文件:
env
DEEPSEEK_API_KEY=your-api-key
DEEPSEEK_BASE_URL=https://api.deepseek.com
TAVILY_API_KEY=your-tavily-key
4.3 基础 LLM 初始化
python
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
llm = ChatOpenAI(
model="deepseek-chat",
openai_api_key=os.getenv("DEEPSEEK_API_KEY"),
openai_api_base=os.getenv("DEEPSEEK_BASE_URL"),
temperature=0
)
五、实战一:单 Agent 基础
5.1 定义工具
python
from langchain.tools import tool
import math
@tool
def calculator(expression: str) -> str:
"""数学计算器,支持基本运算和数学函数。输入如:2+3*4 或 sqrt(144)"""
try:
# 安全的数学求值
allowed_names = {
"abs": abs, "round": round,
"sqrt": math.sqrt, "pow": pow,
"sin": math.sin, "cos": math.cos,
"pi": math.pi, "e": math.e,
}
result = eval(expression, {"__builtins__": {}}, allowed_names)
return str(result)
except Exception as e:
return f"计算错误:{e}"
@tool
def get_current_time() -> str:
"""获取当前时间"""
from datetime import datetime
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@tool
def text_length(text: str) -> str:
"""计算文本的字符数和词数"""
char_count = len(text)
word_count = len(text.split())
return f"字符数:{char_count},词数:{word_count}"
tools = [calculator, get_current_time, text_length]
5.2 创建 Agent
python
from langchain.agents import AgentExecutor, create_react_agent
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("""
你是一个智能助手,可以使用以下工具:
{tools}
工具名称:{tool_names}
请严格按以下格式回答(每步只能做一件事):
Question: 用户的问题
Thought: 我需要思考怎么回答
Action: 工具名称(只能从 [{tool_names}] 中选择)
Action Input: 工具的输入参数
Observation: 工具返回的结果
Thought: 我现在可以回答了
Final Answer: 给用户的最终回答
注意:
- 如果不需要工具,可以直接给出 Final Answer
- Action 只能使用上面列出的工具名称
- 每次只能调用一个工具
开始!
Question: {input}
Thought: {agent_scratchpad}""")
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=5,
handle_parsing_errors=True
)
5.3 运行测试
python
# 测试 1:数学计算
result = executor.invoke({"input": "帮我算一下 (15 + 27) * 3 等于多少?"})
print("回答:", result["output"])
# 测试 2:获取时间
result = executor.invoke({"input": "现在几点了?"})
print("回答:", result["output"])
# 测试 3:多工具协作
result = executor.invoke({"input": "现在几点了?另外帮我算一下 2 的 10 次方"})
print("回答:", result["output"])
运行效果:
> Entering new AgentExecutor chain...
Thought: 用户问了两个问题:1) 现在几点 2) 2的10次方。我先获取时间。
Action: get_current_time
Action Input:
Observation: 2026-05-20 14:30:25
Thought: 时间已获取,现在计算 2 的 10 次方。
Action: calculator
Action Input: pow(2, 10)
Observation: 1024.0
Thought: 两个问题都已得到答案,可以给出最终回答。
Final Answer: 现在是 2026 年 5 月 20 日 14:30:25。2 的 10 次方等于 1024。
六、实战二:带搜索能力的 Agent
6.1 集成搜索工具
python
from langchain_community.tools.tavily_search import TavilySearchResults
# 需要先注册 Tavily 获取 API Key(免费额度 1000 次/月)
search = TavilySearchResults(max_results=3)
tools = [search, calculator, get_current_time]
6.2 运行搜索 Agent
python
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = executor.invoke({
"input": "今天北京天气怎么样?如果温度超过 30 度,帮我算一下开空调 8 小时大概多少度电(1.5匹空调)"
})
print(result["output"])
Agent 会自动:
- 调用搜索工具查询北京天气
- 读取温度数据
- 如果超过 30 度,调用计算器计算耗电量
- 综合给出回答
七、实战三:LangGraph 复杂 Agent
LangGraph 用图(Graph)定义 Agent 流程,适合复杂场景。
7.1 安装
bash
pip install langgraph
7.2 基础 LangGraph Agent
python
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySaver
from langchain_openai import ChatOpenAI
from langchain.tools import tool
@tool
def search(query: str) -> str:
"""搜索互联网信息"""
# 接入真实搜索 API
return f"搜索结果:关于 '{query}' 的最新信息..."
@tool
def calculator(expression: str) -> str:
"""数学计算器"""
return str(eval(expression))
# 创建 Agent(LangGraph 简化版)
agent = create_react_agent(
model=llm,
tools=[search, calculator],
)
# 运行
result = agent.invoke({
"messages": [("user", "帮我搜索一下 2026 年 AI 行业的最新动态")]
})
7.3 带记忆的多轮对话
python
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySaver
# 添加记忆
memory = MemorySaver()
agent = create_react_agent(
model=llm,
tools=[search, calculator],
checkpointer=memory
)
# 多轮对话(通过 thread_id 区分会话)
config = {"configurable": {"thread_id": "user-123"}}
# 第一轮
result1 = agent.invoke(
{"messages": [("user", "我叫小明,帮我搜索 AI Agent 的最新进展")]},
config=config
)
# 第二轮(Agent 能记住"小明")
result2 = agent.invoke(
{"messages": [("user", "总结一下刚才搜索的内容")]},
config=config
)
八、实战四:Multi-Agent 多智能体协作
8.1 CrewAI 多 Agent 示例
bash
pip install crewai crewai-tools
python
from crewai import Agent, Task, Crew
# 定义 Agent(角色)
researcher = Agent(
role="研究员",
goal="搜索并整理关于 {topic} 的最新信息",
backstory="你是一位资深的技术研究员,擅长信息搜集和整理。",
verbose=True,
llm=llm
)
writer = Agent(
role="技术作家",
goal="基于研究结果撰写一篇通俗易懂的技术博客",
backstory="你是一位技术博客作者,擅长将复杂技术用简单语言解释。",
verbose=True,
llm=llm
)
reviewer = Agent(
role="审稿人",
goal="审查文章的准确性和可读性,提出修改建议",
backstory="你是一位严谨的技术编辑,对细节要求很高。",
verbose=True,
llm=llm
)
# 定义任务
research_task = Task(
description="搜索 {topic} 的最新进展、核心技术和应用场景",
expected_output="一份结构化的研究报告,包含:核心概念、最新进展、应用场景、代表性项目",
agent=researcher
)
writing_task = Task(
description="基于研究报告撰写一篇 2000 字的技术博客",
expected_output="一篇结构清晰、语言通俗的技术博客文章",
agent=writer
)
review_task = Task(
description="审查文章,检查事实准确性、逻辑连贯性和语言表达",
expected_output="审查意见和修改建议",
agent=reviewer
)
# 组建团队
crew = Crew(
agents=[researcher, writer, reviewer],
tasks=[research_task, writing_task, review_task],
verbose=True
)
# 执行
result = crew.kickoff(inputs={"topic": "AI Agent 智能体"})
print(result)
8.2 工作流程
研究员 Agent
↓ 搜索整理信息
研究报告
↓
技术作家 Agent
↓ 基于报告撰写博客
博客初稿
↓
审稿人 Agent
↓ 审查并提出修改意见
最终输出:审查意见 + 修改建议
九、实战五:Dify 低代码搭建(零代码方案)
不想写代码?用 Dify 可视化搭建 Agent。
9.1 部署 Dify
bash
# Docker 一键部署
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d
访问 http://localhost:3000 即可使用。
9.2 搭建步骤
- 创建应用 → 选择"Agent"类型
- 配置模型 → 添加 DeepSeek API Key
- 添加工具 → 搜索、计算、知识库等
- 编写提示词 → 定义 Agent 角色和行为
- 测试运行 → 在对话框中测试
- 发布上线 → 生成 API 或嵌入网页
9.3 Dify 适用场景
| 场景 | 做法 |
|---|---|
| 客服 Bot | Agent + 知识库(RAG) + 工单工具 |
| 数据分析 | Agent + SQL 查询 + 图表生成 |
| 内容创作 | Agent + 搜索 + 写作模板 |
| 办公助手 | Agent + 日历 + 邮件 + 文档 |
十、MCP 协议:Agent 工具的统一标准
10.1 什么是 MCP
MCP(Model Context Protocol)是 Anthropic 推出的开放协议,目标是统一 Agent 工具的接入标准。
之前:每个框架定义自己的工具格式,互不兼容
MCP 之后:统一协议,工具一次开发,所有框架通用
10.2 MCP 架构
Agent(客户端)
↓ MCP 协议
MCP Server(工具服务)
├── 搜索服务
├── 数据库服务
├── 文件服务
└── 自定义服务
10.3 MCP Server 示例
python
# pip install mcp
from mcp.server import Server
from mcp.types import Tool, TextContent
server = Server("my-tools")
@server.list_tools()
async def list_tools():
return [
Tool(
name="get_weather",
description="获取指定城市的天气",
inputSchema={
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
)
]
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "get_weather":
city = arguments["city"]
return [TextContent(type="text", text=f"{city}今天晴,28°C")]
十一、Agent 调优技巧
11.1 Prompt 优化
| 技巧 | 说明 | 示例 |
|---|---|---|
| 角色定义 | 明确 Agent 的身份和能力边界 | "你是一个专业的数据分析助手" |
| 工具说明 | 清晰描述每个工具的用途和参数 | "搜索工具:输入关键词,返回网页摘要" |
| 输出格式 | 规定回答的结构 | "用 Markdown 格式,包含标题和列表" |
| 约束条件 | 限制 Agent 行为 | "不要编造数据,不确定时说不知道" |
11.2 常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| Agent 死循环 | 工具返回结果不好,反复重试 | 设置 max_iterations、优化工具返回 |
| 选错工具 | 工具描述不清晰 | 改善工具的 description |
| 回答太长 | 没有限制输出长度 | 在 Prompt 中要求简洁回答 |
| 成本太高 | 调用次数过多 | 减少工具数量、优化 Prompt |
11.3 成本控制
python
# 限制迭代次数
executor = AgentExecutor(
agent=agent,
tools=tools,
max_iterations=5, # 最多循环 5 次
max_execution_time=30, # 最多执行 30 秒
early_stopping_method="generate" # 超限时生成当前结果
)
十二、学习路线总结
第 1 周:理解 Agent 概念 + ReAct 原理
↓
第 2 周:Function Calling / Tool Use 基础
↓
第 3 周:LangChain 单 Agent 实战(带 1-2 个工具)
↓
第 4 周:RAG + Agent 结合(知识增强 Agent)
↓
第 5 周:LangGraph 复杂流程 Agent
↓
第 6 周:Multi-Agent 多智能体协作
↓
第 7-8 周:项目实战 + 优化调优
推荐学习资源
| 资源 | 类型 | 说明 |
|---|---|---|
| LangChain 官方文档 | 文档 | 最权威的参考资料 |
| LangChain Academy | 课程 | 免费官方课程 |
| Dify 官方文档 | 文档 | 低代码方案参考 |
| DeepSeek API 文档 | 文档 | 国产模型接入 |
| CrewAI 文档 | 文档 | Multi-Agent 学习 |
十三、总结
Agent 是 AI 应用的高级形态,核心公式:
Agent = LLM(大脑) + Tools(双手) + Memory(记忆) + Planning(规划)
入门建议:
- 先跑通单 Agent + 1 个工具的最小 demo
- 理解 ReAct 循环的工作原理
- 逐步添加更多工具和复杂流程
- 最终尝试 Multi-Agent 和生产级部署
Agent 的本质是让大模型从"能说"变成"能做"。掌握它,你就掌握了 AI 应用开发的核心技能。