📌前置说明:本系列共 8 章,建议按顺序阅读。📖系列导航:第一章:AI Agent 是什么?一文讲清楚核心概念与架构第二章:AI Agent 的技术原理:LLM + 规划 + 记忆 + 工具第三章:主流 AI Agent 框架对比:LangChain、AutoGPT、AutoGen、LlamaIndex第五章:AI Agent 的工具调用与工具设计第六章:多智能体(Multi-Agent)系统架构详解第七章:AI Agent 记忆系统:从短期到长期记忆的设计与实现第八章:AI Agent 项目实战:构建企业级智能助手前言这一章,我们全程动手,从零实现一个完整的 AI Agent。目标:完整实现 ReAct 推理循环支持多个工具(搜索、计算、文件读写)持久化对话记忆代码量控制在 200 行以内,清晰易懂读完这篇文章,你将对 Agent 的内部工作机制有彻底的理解,而不是只会调 API。一、项目结构my-agent/ ├── agent.py # Agent 主程序(核心逻辑) ├── tools.py # 工具定义 ├── memory.py # 记忆管理 ├── config.py # 配置文件 └── main.py # 入口文件二、环境准备# 创建项目目录 mkdir my-agent cd my-agent # 安装依赖 pip install openai python-dotenv # 创建 .env 文件,填入你的 API Key # OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx# config.py import os from dotenv import load_dotenv load_dotenv() CONFIG = { "api_key": os.getenv("OPENAI_API_KEY"), "model": "gpt-4o", # 可换成 gpt-4o-mini / deepseek 等 "max_iterations": 10, # 最大迭代次数,防止死循环 "verbose": True, # 是否打印推理过程 }三、工具系统(tools.py)先实现工具层,这是 Agent 行动的基础。# tools.py import math import json from typing import Callable, Any # ============================================================ # 工具注册表:所有可用工具都在这里定义 # ============================================================ class Tool: def __init__(self, name: str, description: str, func: Callable): self.name = name self.description = description self.func = func def run(self, **kwargs) - str: """执行工具,返回结果字符串""" try: result = self.func(**kwargs) return str(result) except Exception as e: return f"工具执行出错:{str(e)}" def get_schema(self) - dict: """返回 OpenAI Function Calling 格式的工具定义""" return { "type": "function", "function": { "name": self.name, "description": self.description, "parameters": self._get_parameters() } } def _get_parameters(self) - dict: """子类可重写,定义工具参数schema""" return {"type": "object", "properties": {}, "required": []} # ============================================================ # 具体工具实现 # ============================================================ class CalculatorTool(Tool): """数学计算工具""" def __init__(self): super().__init__( , description="执行数学计算,支持加减乘除、幂运算、开方等。输入为一个数学表达式字符串,如 '2+3*5' 或 'sqrt(16)'。", func=self._calc ) def _calc(self, expression: str) - str: al