搭建一个完整的 Agent,就像是组装一个机器人。在动手写代码之前,我们首先需要理解它的核心大脑四肢架构

一、 AI Agent 的核心四要素

根据目前主流的学术与工业界共识(如 AutoGPT、LangChain 的设计理念),一个标准的 Agent 架构主要由以下四个部分组成:

  1. 大脑 (LLM / 大语言模型):

    Agent 的核心。负责理解输入、生成文本、推理逻辑以及做出决策。

  2. 规划 (Planning):

    面对复杂任务时,Agent 需要拆解目标。例如 CoT (思维链) 允许 Agent 一步步思考,ReAct 模式 则让 Agent 交替进行“思考(Reason)”与“行动(Act)”。

  3. 记忆 (Memory):

    • 短期记忆: 当前会话的上下文历史(Context)。

    • 长期记忆: 借助向量数据库(如 Vector DB),让 Agent 能长久记住你的喜好、历史知识库或外部文档。

  4. 工具 (Tools / 动作):

    Agent 的手脚。LLM 本身无法联网或操作本地文件,但通过 API、Python 解释器、计算器等工具,Agent 可以完成“检索网页”、“修改表格”、“发送邮件”等具体动作。

二、 独立搭建的两种路线

在实现阶段,你可以根据自己的编程基础选择不同的路线:

路线 适合人群 核心工具/平台 优点 缺点
低代码/零代码 运营、产品、小白独立开发者 Coze (扣子), Dify, Flowise 界面可视化,拖拽即用,生态丰富 定制化上限低,核心逻辑受平台限制
纯代码实现 程序员、希望深度定制的开发者 Python, LangChain, LlamaIndex 自由度极高,可深度融合业务逻辑 门槛较高,需要处理大量的 Prompt 微调

三、 实战:用 Python 手写一个最简 Agent

为了让你看清 Agent 的底层逻辑,我们不使用复杂的框架,直接用 Python + OpenAI API 来实现一个具备“计算器工具”“ReAct(思考-行动)”能力的极简 Agent。

步骤 1:定义环境与工具

首先,我们给 Agent 提供一个计算器工具。

Python

import os
import openai

# 初始化客户端(请替换为你的 API Key 或代理地址)
client = openai.OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

# 定义一个可以让 Agent 调用的工具
def calculate(expression: str) -> str:
    """执行数学表达式的计算器工具"""
    try:
        # 注意:实际生产中避免直接使用 eval,此处仅作演示
        return str(eval(expression))
    except Exception as e:
        return f"计算错误: {str(e)}"

步骤 2:设计系统提示词(Prompt 注入灵魂)

让大模型理解它是一个 Agent,并且懂得如何使用工具。这是最核心的一步:

Python

SYSTEM_PROMPT = """
你是一个具备计算工具的智能 Agent。
你必须按照以下格式进行思考和行动,直到得出最终答案:

思考:我需要做什么?
行动:选择使用工具 calculate[数学表达式]
结果:工具返回的结果
...(这个过程可以重复)
最终答案:给出用户的最终结论。

当前可用工具:
- calculate[表达式]: 只能处理基础数学计算。

示例:
用户:123乘以456是多少?
思考:用户需要计算 123 * 456。
行动:calculate[123 * 456]
结果:56088
最终答案:123乘以456的结果是56088。
"""

步骤 3:编写 Agent 核心循环(ReAct Loop)

Agent 的精髓在于循环:接收用户输入 -> 思考 -> 发现需要工具 -> 调用工具 -> 拿到结果继续思考 -> 输出最终答案。

Python

def run_agent(user_question: str):
    print(f"🚀 用户提问: {user_question}\n" + "-"*30)
    
    # 初始化对话历史
    messages = [
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": user_question}
    ]
    
    # 允许 Agent 最多思考/行动 5 次,防止死循环
    for i in range(5):
        response = client.chat.completions.create(
            model="gpt-4o", # 或其他支持强推理的模型
            messages=messages,
            temperature=0
        )
        
        ai_reply = response.choices[0].message.content
        print(ai_reply) # 打印 Agent 的思考过程
        
        # 将 AI 的思考也加入历史中
        messages.append({"role": "assistant", "content": ai_reply})
        
        # 检查 AI 是否触发了工具调用
        if "行动:calculate[" in ai_reply:
            # 提取括号内的表达式
            start = ai_reply.find("行动:calculate[") + len("行动:calculate[")
            end = ai_reply.find("]", start)
            expression = ai_reply[start:end]
            
            # 执行工具
            tool_result = calculate(expression)
            print(f"🛠️ Tool 运行结果: {tool_result}\n" + "-"*30)
            
            # 把工具结果喂回给大模型
            messages.append({"role": "user", "content": f"结果:{tool_result}"})
        
        elif "最终答案:" in ai_reply:
            break

# 测试运行
run_agent("如果我有 250 个苹果,平均分给 5 个人,每个人拿到的苹果再乘以 12 是多少?")

四、 进阶与避坑指南

当你成功跑通上述代码后,你就已经迈出了第一步。如果想打造一个商用或更复杂的 Agent,你需要进阶解决以下问题:

  1. 防止 Agent “死循环”或“胡言乱语”: 开源小模型(如 7B/13B)很难稳定输出特定格式。建议初期使用 GPT-4o、Claude 3.5 SonnetDeepSeek-R1 等推理能力极强的模型作为 Agent 的大脑。

  2. 结构化输出 (Function Calling):

    上面代码中我们用的是字符串匹配("行动:calculate["),这在生产环境中极易出错。建议使用 OpenAI 的 tools / function calling 参数,让模型直接返回标准 JSON 格式。

  3. 记忆的持久化:

    当对话变长,Token 开销会巨大。你需要引入 ChatMessageHistory 机制,或者使用滑动窗口,只保留最近几轮的对话,并将重要的历史信息总结后存入向量数据库(如 Chroma、Pinecone)。

五、 结语

独立搭建 Agent 的迷人之处在于,你不再是简单地向 AI 提问,而是成了“造物主”,在为它定制规则和能力。 建议你的路线是:先在 Coze/Dify 平台连线跑通逻辑,找到痛点;然后用 Python + LangChain 亲手重构它。当你看到自己写的代码能够驱动 AI 自动联网、自动查表并解决问题时,那种成就感将无与伦比。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐