引言

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浪潮中占据先机。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐