引言:Agent 是什么,为什么值得从零开始

如果把大语言模型比作一个知识渊博但足不出户的学者,那么 AI Agent 就是给这位学者配上了手脚、眼睛和记事本,让他能够走出书房,查阅资料、调用工具、执行任务,最终独立完成一个复杂目标。

一个典型的 AI Agent 由四个核心组件构成:作为“大脑”的 LLM、负责制定和执行计划的“规划模块”、存储经验的“记忆系统”,以及连接外部世界的“工具集”。从零搭建 Agent 的真正价值,不在于代码本身,而在于亲手构建这个闭环系统,理解每个齿轮如何咬合——这是直接调用现成框架永远无法替代的认知收益。

本文的目标,是带你走完一条最小可行路径:用三天时间,从空白项目起步,搭建一个能调用 API、拥有记忆、具备基础任务规划能力的 Agent。

第一步:认知准备——拆解 Agent 的核心机制

动手之前,先理解 Agent 如何“思考”和“行动”。当前最主流的 Agent 工作范式是 ReAct(Reason + Act) ,它将推理与行动交替进行,形成一个闭环:

思考(Thought) → 行动(Action) → 观察(Observation) → 思考(Thought) → ……

举个例子。当用户问“今天北京的天气怎么样,适合户外活动吗?”,Agent 的内部流程大致如下:

  • Thought:用户想了解北京的天气,我需要调用天气查询工具,参数是城市名“北京”。

  • Action:调用 weather_api(city="Beijing")

  • Observation:工具返回“Sunny, 25°C”。

  • Thought:天气晴朗,气温舒适,可以建议用户进行户外活动。

  • Final Answer:输出最终回复。

这个循环持续进行,直到 Agent 认为自己已经完成任务。理解了这个模式,后续代码就不再是零散的函数堆积,而是一个有机的思考-执行系统。

第二步:环境与框架选型——选择你的起点

搭建 Agent 有多种路径,取决于你的目标和资源。这里给出三种典型选择:

路径 适合场景 技术栈示例
纯手动 Python 深度理解原理、轻量级项目 requests + 基础 LLM API
开源框架 快速原型、功能丰富的应用 LangChain + LangGraph
云平台一键部署 生产环境、免运维 阿里云 ECS + OpenClaw/Hermes

对于初学者,从 Python 手写开始是最佳学习路径——它强迫你直面每个组件的实现细节,而非被框架的“魔法”遮蔽视野。

前置条件很简单:

  • Python 3.8+ 及虚拟环境

  • 一个 LLM API 密钥(OpenAI、通义千问、MiniMax 等均可)

  • 一个免费天气 API 密钥(如 OpenWeatherMap)

mkdir ai_agent_demo && cd ai_agent_demo
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install requests python-dotenv

第三步:构建 MVP——让 Agent 第一次“动起来”

3.1 定义核心类与“大脑”

创建一个 SimpleAgent 类,它包含记忆列表和一个“思考-行动”的骨架:

class SimpleAgent:
    def __init__(self):
        self.memory = []  # 短期记忆

    def think(self, user_input):
        # 基础规划:关键词匹配来决定行动
        if "weather" in user_input.lower():
            return "action: weather"
        return "action: unknown"

    def act(self, action, params=None):
        if action == "weather":
            # 暂用模拟数据
            return {"temperature": "25°C", "condition": "Sunny"}
        return None

这是 Agent 的最小雏形:它能解析用户意图(思考),并执行预设动作(行动)。

3.2 接入真实工具——给 Agent 装上“手和脚”

Agent 的魅力在于与外部世界交互。将模拟天气替换为真实 API 调用:

import requests

def call_weather_api(city, api_key):
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
    resp = requests.get(url)
    if resp.status_code == 200:
        data = resp.json()
        return f"{data['weather'][0]['main']}, {data['main']['temp']}°C"
    return "无法获取天气数据"

关键设计原则:工具(Tool)本质上是 Agent 可以调用的任何函数,输入输出应尽量标准化,以便 Agent 在“思考”后能够准确选择并调用。

3.3 实现 ReAct 循环——让思考和行动交替进行

把上述模块组装成一个真正的 ReAct 循环:

def run_agent(user_input):
    agent = SimpleAgent()
    thought = agent.think(user_input)
    if "weather" in thought:
        observation = call_weather_api("Beijing", API_KEY)
        # 将观察结果存入记忆
        agent.memory.append(f"天气查询结果: {observation}")
        return f"天气信息:{observation}"
    return "我不理解这个问题"

至此,你的 Agent 已具备思考 → 行动 → 观察 → 记忆的完整链路。


第四步:增强记忆与上下文感知

4.1 短期记忆与长期记忆

Agent 默认是无状态的——每次对话都像初次见面。为了让 Agent 具备上下文感知能力,需要引入记忆模块。

短期记忆:当前会话中最近几轮对话,直接放在上下文窗口里传递。

长期记忆:将历史信息存入外部存储(如 JSON 文件或向量数据库),必要时检索并注入上下文。

import json
from datetime import datetime

class Memory:
    def __init__(self, filepath="memory.json"):
        self.filepath = filepath
        self.storage = self._load()

    def add(self, content):
        entry = {"timestamp": datetime.now().isoformat(), "content": content}
        self.storage.append(entry)
        self._save()

    def retrieve(self, query):
        # 简单关键词匹配,实际项目可用向量检索
        return [m for m in self.storage if query.lower() in m["content"].lower()]

长期记忆让 Agent 能够“记住”过去的关键信息,并在未来任务中复用。

4.2 上下文窗口管理

LLM 的上下文窗口有限,不能无限制地塞入所有历史。常用的策略包括:

  • 滑动窗口:只保留最近 N 轮对话

  • 摘要压缩:用 LLM 将长对话压缩成简短摘要

  • 按需检索:只检索与当前问题最相关的记忆片段


第五步:规划与多步骤任务

简单任务可以用“关键词→动作”的规则处理,但复杂任务需要更智能的规划能力。

5.1 任务分解

当用户提出“帮我规划一次北京一日游”时,Agent 需要将其拆解为若干子任务:查询景点、查询天气、规划路线、生成建议等。这可以通过提示工程实现,让 LLM 输出结构化的步骤列表。

5.2 带反馈的规划(ReAct 的进阶)

Agent 不是一次生成完整计划就执行到底——它会每执行一步,观察结果,然后调整下一步计划。这种“边做边修正”的能力,使得 Agent 在面对不确定环境时更加鲁棒。

while not task_complete:
    thought = agent.think(current_state)
    action = agent.decide_action(thought)
    observation = agent.execute(action)
    current_state = update_state(current_state, observation)

第六步:测试、部署与持续优化

6.1 测试策略

Agent 的行为具有不确定性,测试不能只依赖固定用例。建议采用:

  • 手动测试:验证核心用例是否能正常运行

  • 自动化评测:用更强的模型(如 GPT-4)对 Agent 的输出进行评分(LLM-as-a-judge)

  • 红队测试:尝试输入越狱提示或边界条件,检查 Agent 的安全性

6.2 部署与监控

生产环境部署可选择云服务器(如阿里云 ECS),借助 pm2 等工具实现进程守护和开机自启。上线后必须建立监控体系:

  • 全链路追踪:记录每次工具调用的耗时、成本和结果

  • 用户反馈收集:让用户对 Agent 的回答进行评价,形成优化闭环

6.3 持续迭代路径

从 MVP 到成熟系统,可以沿着这条路线演进:

  1. 从单个 Agent 起步

  2. 引入 LangChain 管理 prompt 和工具定义

  3. 用 LangGraph 实现多 Agent 协作

  4. 接入 MCP 协议实现标准化数据通信

  5. 构建模型适配层,支持动态切换不同 LLM


结语:从“搭建”到“思考”

从零搭建一个 AI Agent,本质上是在构建一个模拟人类解决问题方式的软件系统。它需要思考、需要工具、需要记忆、需要修正错误。三天时间走完这条路径,你得到的不仅是几百行可以运行的代码,更是对 Agent 核心机制的切身理解

当你遇到 Agent 的“幻觉”问题时,你会知道应该优化检索而非更换模型;当响应变慢时,你会先检查工具调用的瓶颈而非盲目升级硬件。这种系统思维,才是从零搭建的真正收获。

AI Agent 的未来不在单一模型的能力高低,而在如何将模型、工具、记忆、规划这些组件编织成一个优雅的协作系统。而你现在,已经站在了这个系统的设计起点上。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐