AI 智能体(Agent)完全入门指南
·
🤖 AI 智能体(Agent)完全入门指南
一、从最简单的概念开始
1.1 什么是智能体(Agent)?
用一句大白话说:智能体 = 一个能自己思考、自己决定下一步做什么的 AI 程序。
我们来做一个对比:
| 普通 ChatGPT 对话 | 智能体(Agent) | |
|---|---|---|
| 交互方式 | 你问一句,它答一句 | 你给一个目标,它自己拆解、执行 |
| 能否使用工具 | ❌ 不能(纯文本) | ✅ 能搜索、写代码、调API |
| 有没有记忆 | 仅当前对话 | 可以有长期记忆 |
| 能否自主决策 | ❌ 被动回答 | ✅ 主动规划下一步 |
1.2 一个生活化的比喻 🍳
想象你请了一个私人管家:
你说:"帮我安排一次周末北京两日游" 管家的思考过程: 1. 🤔 思考:需要查天气、查景点、查酒店、查交通 2. 🔍 行动:先查周末北京天气 → 晴天 25°C 3. 🤔 思考:天气不错,适合户外景点 4. 🔍 行动:搜索热门户外景点 → 故宫、颐和园... 5. 🤔 思考:需要订酒店 6. 🔍 行动:在平台上搜索并预订酒店 7. 📋 输出:完整的两日游行程单
这个管家,就是一个 Agent!
二、智能体的核心架构 🧠
2.1 Agent 的四大核心组件
┌─────────────────────────────────────────────┐ │ Agent 智能体 │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 🧠 大脑 │ │ 🛠️ 技能 │ │ 💾 记忆 │ │ │ │ (LLM) │ │(Skills) │ │(Memory) │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ │ │ │ └────────┬───┘────────────┘ │ │ │ │ │ ┌──────▼──────┐ │ │ │ 📋 规划能力 │ │ │ │ (Planning) │ │ │ └─────────────┘ │ └─────────────────────────────────────────────┘
| 组件 | 作用 | 类比 |
|---|---|---|
| 🧠 LLM(大脑) | 理解、推理、决策 | 管家的大脑 |
| 🛠️ Skills/Tools(技能/工具) | 执行具体操作 | 管家会用的各种工具 |
| 💾 Memory(记忆) | 记住历史信息 | 管家的笔记本 |
| 📋 Planning(规划) | 拆解任务、制定计划 | 管家的规划能力 |
三、Skills(技能)详解 🛠️
3.1 什么是 Skill?
Skill = Agent 能调用的一个具体能力/工具
就像一个人可以有很多技能:会做饭、会开车、会写代码。Agent 的 Skill 就是它能做的具体事情。
3.2 常见的 Skill 类型
# 伪代码展示 Skill 的概念 # Skill 1: 搜索引擎 def web_search(query: str) -> str: """在互联网上搜索信息""" return search_engine.search(query) # Skill 2: 执行代码 def run_code(code: str) -> str: """执行 Python 代码并返回结果""" return execute(code) # Skill 3: 读写文件 def read_file(path: str) -> str: """读取文件内容""" return open(path).read() # Skill 4: 发送邮件 def send_email(to: str, subject: str, body: str) -> bool: """发送邮件""" return email_client.send(to, subject, body) # Skill 5: 数据库查询 def query_database(sql: str) -> list: """执行 SQL 查询""" return db.execute(sql)
3.3 Skill 是怎么被调用的?
这就是著名的 ReAct(Reasoning + Acting) 模式:
用户: "帮我查一下特斯拉今天的股价,然后算一下如果买100股要多少钱"
Agent 思考过程:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🤔 Thought 1: 我需要先查特斯拉的股价
🔧 Action 1: web_search("特斯拉 今日股价")
📊 Result 1: 特斯拉(TSLA) 当前股价: $248.50
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🤔 Thought 2: 股价是 $248.50,我需要计算 100 股的总价
🔧 Action 2: run_code("print(248.50 * 100)")
📊 Result 2: 24850.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🤔 Thought 3: 我已经有了所有信息,可以回答了
💬 Answer: 特斯拉今日股价 $248.50,买100股需要 $24,850。
四、Function Calling —— Skill 的底层机制 📞
4.1 LLM 是怎么知道该调用什么工具的?
核心机制叫 Function Calling。我们告诉 LLM 有哪些工具可用,LLM 自己决定调不调、怎么调。
import openai
# 第一步:定义你的工具(Skills)
tools = [
{
"type": "function",
"function": {
"name": "get_weather", # 工具名称
"description": "查询某个城市的天气", # 描述(LLM靠这个理解工具用途)
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,如:北京"
}
},
"required": ["city"]
}
}
}
]
# 第二步:把工具列表一起发给 LLM
response = openai.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
tools=tools # 告诉LLM你有这些工具
)
# 第三步:LLM 会返回它想调用的函数和参数
# response 类似:
# {
# "tool_calls": [{
# "function": {
# "name": "get_weather",
# "arguments": '{"city": "北京"}'
# }
# }]
# }
# 第四步:你在代码里真正执行这个函数,把结果返回给 LLM
# 第五步:LLM 根据结果生成最终回答
流程图:
用户提问 ──→ LLM + 工具描述 ──→ LLM决定调用哪个工具 │ ▼ 最终回答 ◀── LLM整合结果 ◀── 你的代码执行工具并返回结果
五、记忆系统(Memory)💾
5.1 三种记忆类型
┌─────────────────────────────────────────────────────┐ │ 记忆系统 │ │ │ │ 📝 短期记忆 💿 长期记忆 🔗 工作记忆 │ │ (Short-term) (Long-term) (Working) │ │ │ │ 当前对话的 跨对话持久化的 当前任务正在 │ │ 上下文信息 知识和经验 处理的信息 │ │ │ │ 实现:对话历史 实现:向量数据库 实现:暂存区 │ │ 如 message list 如 ChromaDB 如 scratchpad │ └─────────────────────────────────────────────────────┘
5.2 简单示例
# 短期记忆:就是对话历史
short_term_memory = [
{"role": "user", "content": "我叫小明"},
{"role": "assistant", "content": "你好小明!"},
{"role": "user", "content": "我刚才说我叫什么?"},
# Agent 可以回看上面的对话 → "你叫小明"
]
# 长期记忆:通常用向量数据库存储
# 比如用户上个月说过 "我喜欢吃川菜"
# Agent 下次推荐餐厅时可以检索到这个偏好
六、规划能力(Planning)📋
6.1 常见的规划策略
┌──────────────────────────────────────────────┐ │ 规划策略 │ ├──────────────────────────────────────────────┤ │ │ │ 1️⃣ ReAct(边想边做) │ │ 思考 → 行动 → 观察 → 思考 → 行动 → ... │ │ 特点:一步一步来,灵活应变 │ │ │ │ 2️⃣ Plan-and-Execute(先规划后执行) │ │ 先列出完整计划 → 逐步执行 → 必要时调整 │ │ 特点:有全局视野,适合复杂任务 │ │ │ │ 3️⃣ Reflexion(反思型) │ │ 执行 → 检查结果 → 反思不足 → 改进重试 │ │ 特点:能从错误中学习 │ │ │ └──────────────────────────────────────────────┘
七、主流框架详解 🏗️
现在进入重点——主流框架!我按从简单到复杂的顺序介绍。
7.1 🦜 LangChain — 最经典的入门框架
定位:AI 应用开发的"瑞士军刀",功能最全面
核心概念图:
LangChain 生态 ├── 🔗 Chains(链) —— 把多个步骤串起来 ├── 🤖 Agents(智能体) —— 让 LLM 自主决策调用工具 ├── 🛠️ Tools(工具) —— 搜索、计算、API调用等 ├── 💾 Memory(记忆) —— 对话历史、长期记忆 ├── 📄 Retrievers(检索器)—— RAG 检索增强生成 └── 📤 Output Parsers —— 结构化输出
入门示例:创建一个能搜索的 Agent
# pip install langchain langchain-openai langchain-community
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.tools import DuckDuckGoSearchRun
# 1. 准备 LLM
llm = ChatOpenAI(model="gpt-4", temperature=0)
# 2. 准备工具
search = DuckDuckGoSearchRun()
tools = [search]
# 3. 准备提示词
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有用的助手,可以搜索互联网获取信息。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}") # Agent 的工作记忆
])
# 4. 创建 Agent
agent = create_tool_calling_agent(llm, tools, prompt)
# 5. 创建执行器(负责循环执行 思考→行动→观察)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 6. 运行!
result = agent_executor.invoke({"input": "2024年诺贝尔物理学奖颁给了谁?"})
print(result["output"])
运行效果(verbose=True 能看到思考过程):
> Entering new AgentExecutor chain... Thought: 我需要搜索一下这个信息 Action: duckduckgo_search Action Input: "2024 Nobel Prize Physics winner" Observation: The 2024 Nobel Prize in Physics was awarded to John Hopfield and Geoffrey Hinton... Thought: 我现在知道答案了 Final Answer: 2024年诺贝尔物理学奖授予了 John Hopfield 和 Geoffrey Hinton, 以表彰他们在机器学习领域的基础性发现... > Finished chain.
LangChain 优缺点:
| ✅ 优点 | ❌ 缺点 |
|---|---|
| 生态最丰富,集成最多 | 抽象层过多,代码有时很绕 |
| 文档全面,社区活跃 | 版本更新快,API经常变 |
| 适合快速原型 | 复杂场景下调试困难 |
7.2 🧩 LangGraph — 复杂工作流的利器
定位:LangChain 团队出品,用图(Graph)来编排复杂的 Agent 工作流
为什么需要 LangGraph?
简单任务 → LangChain 的线性 Chain 就够了 A → B → C → 结束 复杂任务 → 需要循环、分支、并行、人工介入 A → B → 判断 → 成功 → D → 结束 → 失败 → C → 回到B重试 → 不确定 → 等人工确认 → ...
核心概念:
LangGraph 三要素: ├── 📍 Nodes(节点) —— 每个节点是一个处理步骤 ├── ➡️ Edges(边) —— 节点之间的连接/流转规则 └── 📦 State(状态) —— 在节点间传递的共享数据
示例:一个带"反思"能力的写作 Agent
# pip install langgraph langchain-openai
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, START, END
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4")
# 1. 定义状态(节点间共享的数据)
class State(TypedDict):
topic: str # 写作主题
draft: str # 草稿
feedback: str # 反馈意见
final_article: str # 最终文章
revision_count: int # 修改次数
# 2. 定义节点(每个节点是一个函数)
def write_draft(state: State) -> dict:
"""写初稿"""
response = llm.invoke(f"请写一篇关于'{state['topic']}'的短文")
return {"draft": response.content, "revision_count": state.get("revision_count", 0)}
def review(state: State) -> dict:
"""审稿,给出改进建议"""
response = llm.invoke(
f"请审阅以下文章并给出具体改进建议:\n\n{state['draft']}"
)
return {"feedback": response.content}
def revise(state: State) -> dict:
"""根据反馈修改"""
response = llm.invoke(
f"原文:\n{state['draft']}\n\n修改建议:\n{state['feedback']}\n\n请修改文章"
)
return {
"draft": response.content,
"revision_count": state["revision_count"] + 1
}
def finalize(state: State) -> dict:
"""定稿"""
return {"final_article": state["draft"]}
# 3. 定义路由(判断下一步去哪)
def should_revise(state: State) -> str:
if state["revision_count"] >= 2: # 最多修改2次
return "finalize"
return "revise"
# 4. 构建图
graph = StateGraph(State)
# 添加节点
graph.add_node("write", write_draft)
graph.add_node("review", review)
graph.add_node("revise", revise)
graph.add_node("finalize", finalize)
# 添加边(流转规则)
graph.add_edge(START, "write") # 开始 → 写草稿
graph.add_edge("write", "review") # 写草稿 → 审稿
graph.add_conditional_edges( # 审稿后 → 条件判断
"review",
should_revise,
{"revise": "revise", "finalize": "finalize"}
)
graph.add_edge("revise", "review") # 修改后 → 再审稿(循环!)
graph.add_edge("finalize", END) # 定稿 → 结束
# 5. 编译并运行
app = graph.compile()
result = app.invoke({"topic": "人工智能的未来", "revision_count": 0})
print(result["final_article"])
流程可视化:
START → [写草稿] → [审稿] → 需要修改? ──是──→ [修改] ──→ [审稿](循环) │ 否(或已改2次) │ ▼ [定稿] → END
7.3 🚀 CrewAI — 多智能体协作框架
定位:让多个 Agent 像一个团队一样协作完成任务
核心思想:模拟一个真实团队
CrewAI 核心概念: ├── 👤 Agent(智能体) —— 团队中的每个"人",有角色和技能 ├── 📋 Task(任务) —— 需要完成的具体工作 ├── 👥 Crew(团队) —— 一群Agent组成的团队 └── 🔄 Process(流程) —— 团队的协作方式(顺序/层级)
示例:一个"内容创作团队"
# pip install crewai crewai-tools from crewai import Agent, Task, Crew, Process from crewai_tools import SerperDevTool search_tool = SerperDevTool() # 搜索工具 # ======== 定义团队成员 ======== # 成员1:研究员 researcher = Agent( role="资深研究员", goal="深入研究给定主题,找到最新、最准确的信息", backstory="你是一位经验丰富的研究员,擅长从海量信息中提取关键洞察。", tools=[search_tool], verbose=True ) # 成员2:作家 writer = Agent( role="内容作家", goal="基于研究结果,撰写引人入胜的文章", backstory="你是一位才华横溢的作家,擅长将复杂话题写得通俗易懂。", verbose=True ) # 成员3:编辑 editor = Agent( role="总编辑", goal="审阅文章,确保质量和准确性", backstory="你是一位严格的编辑,有20年出版经验。", verbose=True ) # ======== 定义任务 ======== research_task = Task( description="研究'2024年AI Agent发展趋势',收集关键数据和观点", expected_output="一份包含关键发现的研究报告", agent=researcher # 分配给研究员 ) writing_task = Task( description="基于研究报告,写一篇1500字的深度文章", expected_output="一篇结构清晰、内容丰富的文章", agent=writer, # 分配给作家 context=[research_task] # 依赖研究任务的输出 ) editing_task = Task( description="审阅并优化文章,确保事实准确、逻辑通顺", expected_output="最终定稿的文章", agent=editor, context=[writing_task] ) # ======== 组建团队 ======== crew = Crew( agents=[researcher, writer, editor], tasks=[research_task, writing_task, editing_task], process=Process.sequential, # 顺序执行:研究 → 写作 → 编辑 verbose=True ) # ======== 开干! ======== result = crew.kickoff() print(result)
执行流程:
🔬 研究员开始工作... ├── 搜索 "AI Agent 2024 trends" ├── 搜索 "AI Agent frameworks comparison" └── 输出:研究报告 ✅ 📝 作家开始工作...(接收研究报告) ├── 阅读研究报告 ├── 构思文章结构 └── 输出:1500字文章 ✅ ✏️ 编辑开始工作...(接收文章) ├── 审查事实准确性 ├── 优化语言表达 └── 输出:最终定稿 ✅
7.4 📊 框架全面对比
复杂度 ──────────────────────→ 简单 复杂 单Agent: LangChain ────→ LangGraph │ 多Agent: CrewAI ─────┤ │ 企业级: AutoGen ──────┘ ┌─────────────────────────────────────────────────────┐ │ 框架 适合场景 学习曲线 Stars │ ├─────────────────────────────────────────────────────┤ │ LangChain 通用AI应用开发 ⭐⭐⭐ 95k+ │ │ LangGraph 复杂工作流/状态管理 ⭐⭐⭐⭐ 8k+ │ │ CrewAI 多Agent角色扮演协作 ⭐⭐ 25k+ │ │ AutoGen 多Agent对话/研究 ⭐⭐⭐⭐ 35k+ │ │ Dify 低代码/可视化搭建 ⭐ 55k+ │ │ Coze 零代码/快速搭建 ⭐ - │ └─────────────────────────────────────────────────────┘
7.5 🔬 AutoGen(微软)— 多智能体对话
定位:通过 Agent 之间的多轮对话来协作解决问题
# pip install autogen-agentchat
from autogen import AssistantAgent, UserProxyAgent
# 创建一个AI助手
assistant = AssistantAgent(
name="AI助手",
llm_config={"model": "gpt-4"}
)
# 创建一个代理用户(可以自动执行代码)
user_proxy = UserProxyAgent(
name="用户代理",
human_input_mode="NEVER", # 不需要人工输入
code_execution_config={"work_dir": "coding"} # 可以执行代码
)
# 发起对话 —— 两个Agent会自动来回对话直到完成
user_proxy.initiate_chat(
assistant,
message="用Python画一个2024年各季度GDP增长率的折线图"
)
# AI助手会写代码 → 用户代理自动执行 → 如果报错 → AI助手修改 → 再执行...
7.6 🎨 Dify — 低代码可视化平台
定位:不太想写代码?拖拽式搭建 Agent 和 AI 工作流
Dify 的特点: ┌─────────────────────────────────────────┐ │ 🖱️ 可视化拖拽编排工作流 │ │ 📊 内置 RAG 知识库管理 │ │ 🔌 丰富的模型接入(OpenAI/Claude/本地) │ │ 📈 内置监控和日志 │ │ 🐳 支持 Docker 私有化部署 │ └─────────────────────────────────────────┘ 适合: ✅ 快速搭建原型 ✅ 非技术人员使用 ✅ 企业内部AI应用
八、学习路线图 🗺️
阶段一:打基础(1-2周) ━━━━━━━━━━━━━━━━━━━━ 📖 理解 LLM 基本原理 📖 学会调用 OpenAI API 📖 理解 Prompt Engineering 🔨 实践:写一个简单的对话机器人 阶段二:入门 Agent(2-3周) ━━━━━━━━━━━━━━━━━━━━━━━ 📖 理解 Function Calling 📖 理解 ReAct 模式 📖 学习 LangChain 基础 🔨 实践:做一个能搜索+计算的 Agent 阶段三:进阶(3-4周) ━━━━━━━━━━━━━━━━━━━━ 📖 学习 LangGraph 构建复杂工作流 📖 学习 RAG(检索增强生成) 📖 理解记忆系统 🔨 实践:做一个能查询知识库的客服 Agent 阶段四:高级(4-6周) ━━━━━━━━━━━━━━━━━━━━ 📖 学习多 Agent 协作(CrewAI / AutoGen) 📖 学习 Agent 评估和优化 📖 学习部署和监控 🔨 实践:做一个多Agent协作的完整项目
九、一个完整的实战示例 🎯
最后,我们用最少的代码做一个"个人研究助手":
"""
个人研究助手 Agent
功能:搜索信息 + 执行代码 + 综合分析
"""
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_core.tools import tool
from langchain.memory import ConversationBufferMemory
# ====== 1. 定义工具/技能 ======
@tool
def calculate(expression: str) -> str:
"""计算数学表达式。输入一个Python数学表达式字符串。"""
try:
result = eval(expression) # 生产环境请用安全的沙箱
return str(result)
except Exception as e:
return f"计算错误: {e}"
@tool
def search_web(query: str) -> str:
"""在互联网上搜索信息。输入搜索关键词。"""
search = DuckDuckGoSearchRun()
return search.run(query)
tools = [calculate, search_web]
# ====== 2. 设置 LLM ======
llm = ChatOpenAI(model="gpt-4", temperature=0)
# ====== 3. 设置记忆 ======
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# ====== 4. 设置提示词 ======
prompt = ChatPromptTemplate.from_messages([
("system", """你是一个专业的研究助手。你可以:
1. 搜索互联网获取最新信息
2. 进行数学计算
请用中文回答,条理清晰,注明信息来源。"""),
MessagesPlaceholder(variable_name="chat_history"),
("human", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
])
# ====== 5. 组装 Agent ======
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory,
verbose=True, # 显示思考过程
max_iterations=5 # 最多执行5轮
)
# ====== 6. 交互式对话 ======
print("🤖 研究助手已就绪!输入 'quit' 退出。\n")
while True:
user_input = input("你: ")
if user_input.lower() == 'quit':
break
response = agent_executor.invoke({"input": user_input})
print(f"\n🤖 助手: {response['output']}\n")
十、总结 ✨
┌──────────────────────────────────────────────┐ │ 核心知识点总结 │ ├──────────────────────────────────────────────┤ │ │ │ 🤖 Agent = LLM + Tools + Memory + Planning │ │ │ │ 🛠️ Skills/Tools = Agent 能调用的具体能力 │ │ │ │ 📞 Function Calling = LLM 调用工具的机制 │ │ │ │ 🔄 ReAct = 思考→行动→观察 的循环模式 │ │ │ │ 🏗️ 框架选择: │ │ 简单任务 → LangChain │ │ 复杂流程 → LangGraph │ │ 多Agent → CrewAI / AutoGen │ │ 低代码 → Dify / Coze │ │ │ └──────────────────────────────────────────────┘
💡 最重要的建议:从最简单的 Function Calling 开始动手,然后逐步尝试各个框架。理论看再多,不如写一个能跑的 Agent 收获大。
更多推荐

所有评论(0)