引言
2024年,AI Agent成为了技术圈最火的话题。从AutoGPT到BabyAGI,从LangChain到CrewAI,各种Agent框架层出不穷。但很多开发者只是跑了个Demo,并没有真正理解Agent的工作原理。
本文将从零开始,手把手教你搭建一个真正能自动完成任务的AI Agent,包含完整的代码实现和踩坑经验。
一、什么是AI Agent
1.1 Agent的核心概念
AI Agent是一个能够自主感知环境、做出决策、执行动作的智能程序。与传统的ChatGPT对话不同,Agent具有以下特征:
- 自主性:无需人工干预,自动完成目标
- 感知能力:能够获取外部信息(搜索、API调用)
- 记忆能力:记住之前的操作和结果
- 规划能力:将大目标拆解为小步骤
- 工具使用:调用外部工具完成任务
1.2 Agent vs 普通LLM对话
维度 | 普通LLM对话 | AI Agent |
交互方式 | 一问一答 | 自主多步执行 |
记忆能力 | 上下文窗口内 | 长期记忆+短期记忆 |
工具使用 | 不能 | 可调用搜索/代码/API |
目标导向 | 被动回答 | 主动规划执行 |
错误恢复 | 无法自动修复 | 自我反思+重试 |
二、Agent架构设计
2.1 ReAct架构
ReAct(Reasoning + Acting)是目前最流行的Agent架构,核心思路是:思考-行动-观察的循环。
# ReAct Agent 核心循环
while not task_completed:
# 1. 思考(Reasoning)
thought = llm.think(current_state, goal)
# 2. 行动(Acting)
action = llm.choose_action(thought)
result = tool.execute(action)
# 3. 观察(Observation)
observation = parse_result(result)
memory.add(thought, action, observation)
# 4. 判断是否完成
task_completed = llm.is_completed(goal, observation)
2.2 记忆系统设计
Agent的记忆分为三层:
记忆类型 | 存储内容 | 实现方式 | 容量 |
短期记忆 | 当前对话上下文 | LLM Context Window | 4K-128K tokens |
工作记忆 | 当前任务的中间结果 | 内存字典/列表 | 无限制 |
长期记忆 | 历史经验、知识 | 向量数据库 | 无限制 |
2.3 工具系统设计
Agent的能力取决于它能使用什么工具。以下是常用工具:
工具类型 | 功能 | 适用场景 |
Web搜索 | 获取最新信息 | 调研、事实核查 |
代码执行 | 运行Python代码 | 计算、数据分析 |
文件读写 | 操作本地文件 | 文档处理、代码修改 |
API调用 | 调用外部服务 | 发送邮件、数据库查询 |
浏览器 | 自动化网页操作 | 信息采集、表单填写 |
三、从零实现一个Agent
3.1 最简Agent实现
下面是一个最简的ReAct Agent实现,仅用100行Python代码:
import json
from openai import OpenAI
class SimpleAgent:
def __init__(self, api_key, model="gpt-4"):
self.client = OpenAI(api_key=api_key)
self.model = model
self.memory = [] # 工作记忆
self.tools = {} # 工具注册表
def register_tool(self, name, func, description):
self.tools[name] = {"func": func, "desc": description}
def run(self, task, max_steps=10):
self.memory.append({"role": "user", "content": task})
for step in range(max_steps):
# 1. LLM思考并决策
response = self.client.chat.completions.create(
model=self.model,
messages=self.memory,
tools=self._get_tool_schemas()
)
msg = response.choices[0].message
self.memory.append(msg)
# 2. 如果LLM要调用工具
if msg.tool_calls:
for tool_call in msg.tool_calls:
result = self._execute_tool(tool_call)
self.memory.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": str(result)
})
else:
# 3. LLM给出最终回答
return msg.content
return "Agent reached max steps without completing task."
def _execute_tool(self, tool_call):
name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
func = self.tools[name]["func"]
return func(**args)
def _get_tool_schemas(self):
# 返回OpenAI function calling格式
return [{"type": "function", "function": {
"name": name, "description": t["desc"],
"parameters": {"type": "object", "properties": {}}
}} for name, t in self.tools.items()]
3.2 添加工具
给Agent注册工具,让它具备实际能力:
# 注册搜索工具
def web_search(query: str) -> str:
import requests
resp = requests.get(f"https://api.search.brave.com/res/v1/web/search?q={query}")
return resp.json()["web"]["results"][0]["description"]
# 注册计算工具
def calculate(expression: str) -> str:
return str(eval(expression))
# 注册文件读写工具
def read_file(filepath: str) -> str:
with open(filepath, 'r') as f:
return f.read()
def write_file(filepath: str, content: str) -> str:
with open(filepath, 'w') as f:
f.write(content)
return f"Written {len(content)} chars to {filepath}"
# 组装Agent
agent = SimpleAgent(api_key="your-key")
agent.register_tool("web_search", web_search, "Search the web for information")
agent.register_tool("calculate", calculate, "Evaluate a math expression")
agent.register_tool("read_file", read_file, "Read a local file")
agent.register_tool("write_file", write_file, "Write content to a local file")
# 运行
result = agent.run("帮我调研2024年最流行的5个AI Agent框架,并写一份对比报告保存到report.md")
print(result)
四、主流Agent框架对比
4.1 框架选型
框架 | 语言 | 特点 | 适用场景 | 推荐指数 |
LangChain | Python/JS | 生态最全,文档丰富 | 通用Agent开发 | 5星 |
CrewAI | Python | 多Agent协作,角色扮演 | 团队协作任务 | 4星 |
AutoGen | Python | 微软出品,多Agent对话 | 代码生成 | 4星 |
Dify | Python | 低代码,可视化 | 快速搭建 | 4星 |
OpenAI Assistants | API | 官方,最简单 | 简单Agent | 3星 |
Phidata | Python | 轻量,内置工具 | 快速原型 | 4星 |
4.2 如何选择
选框架的核心原则:
- 新手入门:OpenAI Assistants API(最简单)
- 通用开发:LangChain(生态最全)
- 团队协作:CrewAI(多角色协作)
- 快速搭建:Dify(低代码)
- 追求轻量:Phidata(最简洁)
五、工业场景Agent应用
5.1 智能运维Agent
场景:7x24小时自动监控设备状态,发现异常自动诊断并通知工程师。
- 感知:实时采集PLC/SCADA数据
- 推理:判断是否异常(Isolation Forest + LLM分析)
- 行动:自动生成工单、推送通知、建议维修方案
5.2 质量分析Agent
场景:自动分析SPC数据,发现异常趋势,给出改进建议。
- 感知:从MES/QMS获取质量数据
- 推理:计算CpK、检测趋势、识别根因
- 行动:生成质量报告、推送预警、建议参数调整
5.3 工艺优化Agent
场景:自动优化生产参数,持续提升良率。
- 感知:采集工艺参数和产品数据
- 推理:建立代理模型、优化参数组合
- 行动:推荐优化方案、A/B测试、效果验证
5.4 知识管理Agent
场景:工程师提问,Agent自动检索知识库并回答。
- 感知:理解用户问题(LLM)
- 推理:检索相关知识(RAG)
- 行动:生成准确答案、引用来源
六、踩坑经验
6.1 常见陷阱
陷阱 | 表现 | 解决方案 |
死循环 | Agent反复调用同一工具 | 设置最大步数、去重检测 |
幻觉 | Agent编造不存在的信息 | 要求引用来源、事实核查 |
工具依赖 | Agent过度使用工具 | 限制工具调用次数 |
上下文溢出 | 记忆过长导致遗忘 | 摘要压缩、分层记忆 |
成本失控 | API调用费用过高 | 设置token预算、使用缓存 |
6.2 优化技巧
- 使用更小的模型做简单判断(GPT-3.5),大模型做复杂推理(GPT-4)
- 对工具结果做摘要,减少上下文长度
- 设置合理的最大步数(通常5-10步足够)
- 添加自我反思机制:每3步回顾一次,判断是否偏离目标
- 使用流式输出,提升用户体验
七、总结
AI Agent是2024-2025年最值得投入的技术方向之一。核心要点:
- Agent = LLM + 记忆 + 工具 + 规划
- ReAct是最实用的架构
- 工具设计决定了Agent的能力边界
- 工业场景是Agent落地的蓝海
- 踩坑不可避免,但可以通过设计减少
AI Agent不是万能的,但在特定场景下,它已经能替代大量重复性工作。尽早掌握这项技术,就能在AI浪潮中占据先机。