从源码拆解AI Agent与普通聊天机器人的本质区别
✅ 5分钟理解AI Agent到底是什么✅ 看懂Agent与ChatGPT的3个核心区别✅ 用100行代码实现一个能干活的AI✅ 运行你的第一个Agent程序AI Agent = 大语言模型的"大脑" + 工具的"手脚" + 自主决策的能力组成部分作用类比🧠 大语言模型思考、规划、决策人的大脑🛠️ 工具系统执行具体操作人的手脚🔄 反馈循环根据结果调整策略人的学习能力✅AI Agent = 大
AI Agent实战系列·第1篇
从源码拆解Agent与普通聊天机器人的本质区别
写在前面
本文你将收获:
- ✅ 5分钟理解AI Agent到底是什么
- ✅ 看懂Agent与ChatGPT的3个核心区别
- ✅ 用100行代码实现一个能干活的AI
- ✅ 运行你的第一个Agent程序
一、一个真实的场景
想象一下,你现在需要完成这样一个任务:
“帮我分析一下昨天的销售数据,计算总营收,找出销量最高的3个产品,然后给老板发个邮件汇报。”
用ChatGPT怎么做?
你可能需要这样操作:
- 手动打开Excel,导出数据
- 复制数据到ChatGPT,让它分析
- ChatGPT给你结果
- 你再手动整理格式
- 打开邮箱,粘贴内容
- 检查格式,发送邮件
整个过程需要人工参与6个步骤。
用AI Agent怎么做?
你:帮我分析昨天的销售数据并发邮件给老板
Agent:收到!让我来处理
→ 正在读取数据库...
→ 正在分析数据...
→ 计算完成:总营收 ¥125,340
→ 销量Top3:产品A、产品B、产品C
→ 正在生成邮件...
→ 邮件已发送!
整个过程全自动,你只需要一句话。
这就是AI Agent的魔力 —— 它不仅会"想",还会"做"。
二、什么是AI Agent?
2.1 一句话定义
AI Agent = 大语言模型的"大脑" + 工具的"手脚" + 自主决策的能力
让我们拆解一下:
| 组成部分 | 作用 | 类比 |
|---|---|---|
| 🧠 大语言模型 | 思考、规划、决策 | 人的大脑 |
| 🛠️ 工具系统 | 执行具体操作 | 人的手脚 |
| 🔄 反馈循环 | 根据结果调整策略 | 人的学习能力 |
2.2 用代码理解
一个最简单的Agent长这样:
def simple_agent(task):
while not task_completed:
# 1. 思考:下一步做什么?
thought = llm.think(task)
# 2. 行动:使用工具执行
result = use_tool(thought.action)
# 3. 反馈:根据结果继续思考
task = update_task(result)
return final_result
核心是这个循环:想 → 做 → 看结果 → 再想 → 再做…
这和人类解决问题的方式一模一样!
三、Agent vs ChatGPT:三个本质区别
很多人会困惑:ChatGPT不就是AI吗?Agent和它有什么不同?
区别1️⃣:被动 vs 主动
ChatGPT(被动响应):
你:帮我查一下明天的天气
ChatGPT:抱歉,我无法访问实时信息...
Agent(主动执行):
你:帮我查一下明天的天气
Agent:
→ 调用天气API...
→ 明天北京:晴,15-25℃
→ 建议穿薄外套
区别2️⃣:单轮 vs 多轮推理
ChatGPT: 一问一答,每次对话相对独立
Agent: 像下棋一样,会提前规划多步:
任务:订一张去上海的机票
Agent的思考过程:
第1步:先查我的日程,看什么时候有空
第2步:搜索那天的航班信息
第3步:比较价格和时间
第4步:选择最优方案
第5步:调用订票API
第6步:发送确认邮件
区别3️⃣:纯文本 vs 真实世界交互
| 能力 | ChatGPT | AI Agent |
|---|---|---|
| 读取文件 | ❌ | ✅ |
| 操作数据库 | ❌ | ✅ |
| 发送邮件 | ❌ | ✅ |
| 调用API | ❌ | ✅ |
| 生成图片 | ❌ | ✅ |
| 控制软件 | ❌ | ✅ |
💡 关键洞察: ChatGPT是"大脑",Agent是"大脑+身体"。
四、Agent的工作原理:感知-决策-执行循环
所有的AI Agent,无论多复杂,都遵循这个基本循环:
┌─────────────────────────────────────┐
│ │
│ 1. 感知 (Perception) │
│ ↓ │
│ 2. 决策 (Decision) │
│ ↓ │
│ 3. 执行 (Action) │
│ ↓ │
│ 4. 观察结果 (Observation) │
│ ↓ │
└─────┘ (循环回到第1步) │
实际例子解析
任务: “帮我计算 (123 + 456) × 789”
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【第1轮】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💭 Agent思考:
"我需要先计算123+456,然后再乘以789"
🔧 Agent行动:
使用计算器工具
calculator(123 + 456)
👀 观察结果:
"计算结果是 579"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【第2轮】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💭 Agent思考:
"现在我需要用579乘以789"
🔧 Agent行动:
calculator(579 × 789)
👀 观察结果:
"计算结果是 456,831"
✅ 任务完成!最终答案:456,831
看到了吗?Agent会自己拆解任务,一步步执行,直到完成目标。
五、动手实践:100行代码实现你的第一个Agent
理论说再多不如实际跑一遍。现在我们来实现一个真正能用的Agent。
5.1 准备工作
# 安装依赖
pip install openai
# 设置API Key
import openai
openai.api_key = "你的OpenAI密钥"
5.2 完整代码
"""
一个100行的最小Agent实现
功能:可以使用计算器和搜索工具
"""
import openai
import re
class MinimalAgent:
def __init__(self, tools):
self.tools = {t["name"]: t["func"] for t in tools}
self.history = []
def run(self, task, max_steps=10):
"""执行任务"""
print(f"\n{'='*50}")
print(f"🎯 任务: {task}")
print(f"{'='*50}\n")
# 初始化对话
self.history = [
{"role": "system", "content": self._system_prompt()},
{"role": "user", "content": task}
]
# 主循环
for step in range(1, max_steps + 1):
print(f"【第{step}轮】")
# 1. 让LLM思考
response = self._call_llm()
print(f"💭 思考: {response}\n")
# 2. 检查是否完成
if "FINISH:" in response:
answer = response.split("FINISH:")[1].strip()
print(f"✅ 完成!答案: {answer}")
return answer
# 3. 解析并执行工具
tool_name, args = self._parse_action(response)
if tool_name:
result = self._execute_tool(tool_name, args)
print(f"🔧 使用工具: {tool_name}({args})")
print(f"📊 结果: {result}\n")
# 4. 将结果反馈给LLM
self.history.append({"role": "assistant", "content": response})
self.history.append({"role": "user", "content": f"观察: {result}"})
return "任务未完成"
def _call_llm(self):
"""调用大语言模型"""
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=self.history,
temperature=0
)
return response.choices[0].message.content
def _parse_action(self, response):
"""解析工具调用"""
# 匹配格式: USE_TOOL: tool_name(arguments)
match = re.search(r"USE_TOOL:\s*(\w+)\((.*?)\)", response)
if match:
return match.group(1), match.group(2)
return None, None
def _execute_tool(self, tool_name, args):
"""执行工具"""
if tool_name in self.tools:
return self.tools[tool_name](args)
return f"错误: 工具 {tool_name} 不存在"
def _system_prompt(self):
"""系统提示词"""
tool_desc = "\n".join([
f"- {name}" for name in self.tools.keys()
])
return f"""你是一个AI助手,可以使用以下工具:
{tool_desc}
使用工具的格式:
USE_TOOL: tool_name(arguments)
完成任务后的格式:
FINISH: 你的最终答案
一步步思考,清晰说明你的推理过程。"""
# ========== 定义工具 ==========
def calculator(expression):
"""计算器工具"""
try:
result = eval(expression)
return str(result)
except:
return "计算错误"
def search(query):
"""搜索工具(模拟)"""
# 实际应该调用搜索API
return f"关于'{query}'的搜索结果:[模拟数据]"
# ========== 使用示例 ==========
if __name__ == "__main__":
# 创建Agent
agent = MinimalAgent(tools=[
{"name": "calculator", "func": calculator},
{"name": "search", "func": search}
])
# 执行任务
result = agent.run("计算 (25 + 75) × 4 的结果")
print(f"\n{'='*50}")
print(f"最终结果: {result}")
print(f"{'='*50}")
5.3 运行效果
==================================================
🎯 任务: 计算 (25 + 75) × 4 的结果
==================================================
【第1轮】
💭 思考: 我需要先计算 25 + 75,然后将结果乘以 4
🔧 使用工具: calculator(25 + 75)
📊 结果: 100
【第2轮】
💭 思考: 现在我需要将 100 乘以 4
🔧 使用工具: calculator(100 * 4)
📊 结果: 400
【第3轮】
💭 思考: 计算完成
FINISH: 400
✅ 完成!答案: 400
==================================================
最终结果: 400
==================================================
六、代码解析:Agent的4个关键部分
1. 系统提示词(System Prompt)
def _system_prompt(self):
return f"""你是一个AI助手,可以使用以下工具:
{tool_desc}
使用工具的格式:
USE_TOOL: tool_name(arguments)
"""
💡 这是Agent的"使用说明书",告诉LLM它有什么能力、怎么使用。
2. 主循环
for step in range(1, max_steps + 1):
response = self._call_llm() # 思考
tool_name, args = self._parse_action(response) # 解析
result = self._execute_tool(tool_name, args) # 执行
# 反馈给LLM继续思考
💡 这是Agent的"心跳",不断循环直到任务完成。
3. 工具解析
def _parse_action(self, response):
match = re.search(r"USE_TOOL:\s*(\w+)\((.*?)\)", response)
if match:
return match.group(1), match.group(2)
💡 这是Agent的"翻译器",把LLM的想法转换成实际操作。
4. 历史记录
self.history.append({"role": "assistant", "content": response})
self.history.append({"role": "user", "content": f"观察: {result}"})
💡 这是Agent的"记忆",记住之前做了什么、结果如何。
七、试试更复杂的任务
现在我们让Agent处理一个更实际的问题:
agent.run("""
今天是2024年1月15日,请帮我:
1. 计算距离春节(2月10日)还有多少天
2. 搜索一下春节旅游推荐
""")
Agent会这样工作:
【第1轮】
💭 思考: 需要计算1月15日到2月10日的天数
1月剩余:31-15=16天
2月到10日:10天
总计:16+10=26天
🔧 使用工具: calculator(31 - 15 + 10)
📊 结果: 26
【第2轮】
💭 思考: 现在搜索春节旅游推荐
🔧 使用工具: search(2024春节旅游推荐)
📊 结果: 关于'2024春节旅游推荐'的搜索结果...
【第3轮】
💭 思考: 已经完成两个任务
FINISH:
距离春节还有26天
春节旅游推荐:[搜索结果]
看到了吗?Agent自己拆解任务、分步执行、整合结果。
八、现在你可以做什么?
💪 立即尝试
- 复制上面的代码,在本地运行
- 修改任务,看Agent怎么处理
- 添加新工具,比如:
def read_file(filename): with open(filename) as f: return f.read()
🎯 练习题
尝试让你的Agent完成这些任务:
- ✅ 简单:计算一个复杂的数学表达式
- ✅ 中等:读取一个文本文件并统计字数
- ✅ 困难:分析CSV文件并生成报表
📚 下期预告
下一篇我们将深入探讨:
- ReAct模式的论文原理
- LangChain、AutoGPT如何实现ReAct
- 更强大的Prompt工程技巧
- 处理复杂任务的策略
总结
✅ AI Agent = 大脑(LLM)+ 手脚(工具)+ 循环(反馈)
✅ 核心工作流程:感知 → 决策 → 执行 → 观察 → 循环
✅ 100行代码就能实现一个可用的Agent
✅ Prompt是Agent的"操作系统"
💡 核心洞察: Agent的强大不在于模型本身,而在于"思考-行动-反馈"的循环机制。
如果这篇文章对你有帮助:
- 👍 点个赞,让更多人看到
- 🔖 收藏起来,方便随时查阅
- 📤 转发给需要的朋友
留言区见!
你在学习AI Agent过程中遇到了什么问题?欢迎留言讨论!
更多推荐


所有评论(0)