AI Agent实战——从零搭建一个能自动完成任务的智能体
引言
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浪潮中占据先机。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)