从零构建AI智能体:手把手教你实现规划、工具调用与记忆系统
最近几年各种科技展会越来越火但逛完一圈除了拿一堆宣传册和看个热闹真正能让人记住、甚至想立刻动手玩起来的技术产品却不多。很多开发者都有同感看的时候很酷回来就忘了技术还是那些技术离自己太远。但这次在BWBilibili World上我遇到了一个不太一样的“玩具”。它不是一个成品手办也不是一个概念Demo而是一个能让你亲手“组装”和“编程”一个AI智能体的开源项目。对你没看错不是调用API而是从零开始像搭乐高一样构建一个具备规划、工具调用和记忆能力的AI Agent。我当场体验了一下感觉这不仅仅是2026年的玩具更是现在每一个对AI应用开发感兴趣的开发者都应该提前上手的“工具箱”。这篇文章我们就来彻底拆解这个我从BW带回来的“玩具”。我不会只告诉你它很酷而是会深入分析为什么说“从调用API到组装智能体”是下一个必然的技术门槛我们将从核心概念、环境搭建、到亲手编写第一个能联网搜索、能记忆对话的智能体一步步实现。你会发现构建一个可用的AI Agent其技术核心远比想象中更清晰、更工程化。如果你已经厌倦了只是和ChatGPT聊天想真正创造点有“自主能力”的东西那么这篇文章就是你的实操起点。1. 这篇文章真正要解决的问题从“API调用者”到“智能体架构师”的跨越当前绝大多数开发者接触AI的方式停留在“提示词工程”和“调用大模型API”的层面。我们精心设计Prompt调用OpenAI或国内大厂的接口获取一段文本或代码。但这本质上是一种“问答”或“补全”模式AI是被动响应者。而AI智能体AI Agent代表了一种范式转变。它要求AI能够主动规划、使用工具如搜索、执行代码、操作软件、记忆历史并根据反馈调整行为。这听起来很科幻但技术栈已经逐渐成熟。我们面临的核心问题不是“能不能做”而是“如何以工程化的、可理解的方式去做”。很多开源项目把Agent做得很重、很复杂让人望而却步。本文要解决的正是这个“工程化入门”的痛点。通过一个结构清晰、代码简洁的开源项目我们暂且称它为“智能体工坊”我将演示拆解黑盒Agent的核心组件大脑、记忆、工具如何用代码清晰定义。降低门槛使用纯Python和常见的开发环境无需复杂的分布式架构。聚焦实用构建一个真正能解决实际问题的智能体例如“技术调研助手”它能根据你的问题自动规划搜索策略、汇总信息并给出参考。避坑指南在开发过程中你会遇到规划循环、工具调用失败、记忆混乱等问题我将分享具体的排查思路和最佳实践。这篇文章适合已经熟悉Python基础对AI应用有兴趣但不知如何从单次对话迈向持久化、自动化智能服务的开发者。读完并实践后你将获得一个可运行、可扩展的Agent原型并理解其背后的设计哲学。2. 基础概念与核心原理智能体的“大脑”、“记忆”与“手脚”在开始写代码之前我们必须统一语言。一个典型的AI智能体通常由三个核心模块组成你可以把它们类比为一个人类专家模块类比职责关键技术点规划器 (Planner)大脑分解任务、制定步骤、决策下一步行动。基于大语言模型LLM的链式思考CoT、任务分解Task Decomposition。记忆系统 (Memory)记事本存储对话历史、工具执行结果、任务上下文。短期记忆会话缓存、长期记忆向量数据库检索。工具集 (Tools)手脚/工具箱扩展智能体的能力边界如搜索网络、运行代码、查询数据库。函数调用Function Calling、工具的描述与执行封装。它们如何协同工作一个最简单的运行周期ReAct模式如下观察智能体接收用户输入并结合记忆系统中的历史信息形成当前“观察”。思考规划器LLM根据“观察”思考下一步该做什么。是直接回答还是调用某个工具这个“思考”过程会以文本形式输出包含推理和决策。行动如果决定调用工具则从工具集中找到对应的工具传入参数并执行如执行一次网络搜索。观察获取工具执行的结果如搜索到的网页摘要。循环将工具执行结果作为新的“观察”再次送入“思考”步骤。如此循环直到规划器认为可以给出最终答案。记忆将本轮循环中有价值的信息如用户问题、工具结果、最终答案存储到记忆系统中。“智能体工坊”项目的设计亮点在于它没有试图封装一切而是将这三个模块抽象成清晰的Python类让你能够直观地看到数据流和控制流。这比直接使用一个高度封装的Agent框架更能加深理解。3. 环境准备与前置条件我们将使用纯Python环境。请确保你的开发环境满足以下条件操作系统Windows 10/11, macOS 10.15, 或主流的Linux发行版如Ubuntu 20.04。本文命令以macOS/Linux的bash为例Windows用户可在PowerShell或WSL中运行。Python版本Python 3.10 或 3.11。这是目前大多数AI库兼容性最好的版本。避免使用Python 3.12可能遇到某些包未预编译的问题。包管理工具使用pip即可。强烈建议使用虚拟环境venv或conda来隔离项目依赖。IDE任何你熟悉的代码编辑器均可如VS Code、PyCharm。VS Code推荐安装Python扩展。关键依赖核心是大语言模型的访问能力。我们将使用OpenAI的Chat Completion API作为规划器大脑的驱动。因此你需要一个可用的OpenAI API Key。如果你主要使用国内环境也可以替换为支持类似Function Calling功能的国内大模型API如DeepSeek、智谱GLM但接口可能需要轻微调整。4. 核心流程拆解从零构建智能体的五个步骤让我们把构建过程工程化分解为五个可顺序执行的步骤。每一步都有明确的目标和产出。步骤一项目初始化与依赖安装创建一个干净的项目目录并安装核心依赖。我们主要需要两个库openai用于调用LLMrequests用于实现网络搜索工具。使用pip安装。步骤二定义工具Tools—— 赋予智能体“手脚”工具是智能体与外界交互的桥梁。我们将创建两个最实用的工具一个网络搜索工具一个计算器工具。每个工具都需要被定义成一个函数并附上清晰的描述以便LLM理解何时以及如何使用它。步骤三实现记忆系统Memory—— 赋予智能体“记忆”我们将实现一个简单的对话记忆用于存储最近的用户-助手交互历史。这对于多轮对话连贯性至关重要。更复杂的项目可以使用向量数据库实现长期记忆和检索。步骤四构建规划器Planner核心—— 实现ReAct循环这是最核心的部分。我们将创建一个Agent类它整合了LLM客户端、工具集和记忆系统并实现上文描述的“观察-思考-行动”循环逻辑。这里需要处理LLM的响应解析、工具选择与调用。步骤五创建主程序与测试—— 让智能体跑起来最后我们将编写一个简单的命令行交互界面实例化我们的智能体并输入问题进行测试。观察它的完整思考过程和行动轨迹。接下来我们进入具体的代码实现环节。5. 完整示例与代码实现我们将按照上述步骤逐步完成代码。请跟随操作所有代码均提供完整可复制的版本。5.1 步骤一项目初始化打开终端执行以下命令# 创建项目目录并进入 mkdir ai_agent_workshop cd ai_agent_workshop # 创建Python虚拟环境可选但推荐 python3.10 -m venv venv # 激活虚拟环境 # macOS/Linux: source venv/bin/activate # Windows: # venv\Scripts\activate # 安装核心依赖 pip install openai requests创建一个名为requirements.txt的文件方便他人复现环境# requirements.txt openai1.0.0 requests2.31.05.2 步骤二定义工具集 (Tools)在项目根目录下创建tools.py文件。我们将实现两个工具web_search和calculator。为了模拟搜索我们使用一个免费的公共API例如 DuckDuckGo的即时答案API或模拟返回。实际生产中你可以替换为SerpAPI、Google Custom Search等。# tools.py import requests import json import math def web_search(query: str) - str: 执行一次网络搜索并返回摘要结果。 参数: query (str): 搜索查询词。 返回: str: 搜索结果的文本摘要。 # 注意这是一个模拟示例。DuckDuckGo Instant Answer API 无需API Key但稳定性有限。 # 实际应用请使用可靠的搜索API服务。 try: url fhttps://api.duckduckgo.com/ params { q: query, format: json, no_html: 1, skip_disambig: 1 } response requests.get(url, paramsparams, timeout10) data response.json() # 从返回数据中提取摘要 abstract data.get(AbstractText, ) if abstract: return f网络搜索摘要{abstract} else: # 如果没有摘要返回相关主题 related_topics data.get(RelatedTopics, []) if related_topics: first_topic related_topics[0].get(Text, ) if isinstance(related_topics[0], dict) else related_topics[0] return f未找到直接摘要相关主题{first_topic[:200]}... else: return 未找到相关信息。 except Exception as e: return f搜索过程中出现错误{str(e)} def calculator(expression: str) - str: 计算一个数学表达式的结果。 参数: expression (str): 数学表达式例如 3 5 * 2, sqrt(16)。 返回: str: 计算结果或错误信息。 # 安全警告在生产环境中直接使用eval是危险的可能造成代码注入。 # 此处仅用于演示实际应使用更安全的表达式求值库如 ast.literal_eval 配合自定义解析。 try: # 为表达式添加一些常用的数学函数和常量 allowed_names {k: v for k, v in math.__dict__.items() if not k.startswith(_)} allowed_names.update({abs: abs, round: round}) # 使用eval但限制可用的命名空间 result eval(expression, {__builtins__: {}}, allowed_names) return str(result) except Exception as e: return f计算错误{str(e)}。请检查表达式格式。 # 工具描述列表用于提供给LLM。描述必须清晰说明工具的功能和输入格式。 TOOLS [ { name: web_search, description: 当需要获取最新的、未知的或实时信息时使用此工具。输入是一个搜索查询字符串。, function: web_search }, { name: calculator, description: 当需要计算数学表达式时使用此工具。输入是一个字符串格式的数学表达式如 3 5 * 2 或 sqrt(25)。, function: calculator } ] def get_tool_by_name(name: str): 根据工具名称获取对应的函数对象。 for tool in TOOLS: if tool[name] name: return tool[function] return None关键点解释每个工具都是一个普通的Python函数有明确的输入和输出。TOOLS列表存储了每个工具的“元数据”包括名称、描述和对应的函数对象。描述description至关重要LLM依靠它来决定是否以及如何调用工具。web_search工具中我们使用了免API Key的DuckDuckGo接口这仅适用于演示和学习。真实项目务必使用稳定、可靠的API服务。calculator工具使用了eval这存在安全风险。在面向公众的系统中必须替换为安全的表达式解析器如ast.literal_eval或numexpr。5.3 步骤三实现记忆系统 (Memory)创建memory.py文件。我们先实现一个简单的基于列表的短期对话记忆。# memory.py from typing import List, Dict, Any class ConversationMemory: 一个简单的对话记忆存储固定轮数的历史记录。 def __init__(self, max_turns: int 10): 初始化记忆。 参数: max_turns (int): 最大记忆轮数userassistant为一轮。 self.memory: List[Dict[str, Any]] [] self.max_turns max_turns def add(self, role: str, content: str): 添加一条对话记录。 self.memory.append({role: role, content: content}) # 如果超过最大轮数移除最早的记录 while len(self.memory) self.max_turns * 2: # 每条记录算一个角色 self.memory.pop(0) def get_context(self, num_last_turns: int 5) - List[Dict[str, str]]: 获取最近N轮对话的上下文格式化为OpenAI消息格式。 参数: num_last_turns (int): 获取的最近轮数。 返回: List[Dict]: 适用于OpenAI ChatCompletion的消息列表。 # 确保不超出内存范围 start_idx max(0, len(self.memory) - num_last_turns * 2) return self.memory[start_idx:] def clear(self): 清空记忆。 self.memory.clear()关键点解释记忆存储的是原始的对话消息角色和内容格式与OpenAI API要求的一致。get_context方法用于在每次调用LLM前提供历史对话作为上下文这是实现连贯多轮对话的基础。这是一个非常基础的实现。高级Agent会使用向量数据库存储和检索更长期、更结构化的记忆。5.4 步骤四构建规划器核心 (Planner) - Agent类创建agent.py文件。这是整个项目的核心我们将实现ReAct循环。# agent.py import json import re from typing import Dict, Any, Optional from openai import OpenAI from .memory import ConversationMemory from .tools import TOOLS, get_tool_by_name class SimpleAgent: 一个基于ReAct模式的简单AI智能体。 def __init__(self, api_key: str, model: str gpt-3.5-turbo, max_iterations: int 5): 初始化智能体。 参数: api_key (str): OpenAI API密钥。 model (str): 使用的LLM模型。 max_iterations (int): ReAct循环的最大迭代次数防止无限循环。 self.client OpenAI(api_keyapi_key) self.model model self.max_iterations max_iterations self.memory ConversationMemory() # 构建工具描述字符串用于插入系统提示词 self.tools_description self._build_tools_description() def _build_tools_description(self) - str: 将工具列表转换为LLM可理解的描述文本。 desc_lines [] for tool in TOOLS: desc_lines.append(f- {tool[name]}: {tool[description]}) return \n.join(desc_lines) def _parse_llm_response(self, response: str) - Dict[str, Any]: 解析LLM的响应提取思考和行动指令。 我们约定LLM的响应格式为 Thought: 思考过程 Action: 工具名称 Action Input: 工具输入参数JSON字符串 ...或者... Final Answer: 最终答案 thought_match re.search(rThought:\s*(.*?)(?\nAction:|\nFinal Answer:|$), response, re.DOTALL) action_match re.search(rAction:\s*(\w), response) action_input_match re.search(rAction Input:\s*(.*?)(?\n|$), response, re.DOTALL) final_answer_match re.search(rFinal Answer:\s*(.*?)(?\n|$), response, re.DOTALL) result { thought: thought_match.group(1).strip() if thought_match else , action: action_match.group(1) if action_match else None, action_input: action_input_match.group(1).strip() if action_input_match else None, final_answer: final_answer_match.group(1).strip() if final_answer_match else None, } # 尝试解析Action Input为JSON if result[action_input]: try: result[action_input] json.loads(result[action_input]) except json.JSONDecodeError: # 如果不是JSON保持原字符串 pass return result def run(self, user_input: str) - str: 执行智能体的主循环。 参数: user_input (str): 用户输入的问题。 返回: str: 智能体的最终回答。 print(f\n用户: {user_input}) # 将用户输入加入记忆 self.memory.add(user, user_input) # 构建系统提示词包含工具描述和输出格式要求 system_prompt f你是一个有帮助的AI助手可以调用工具来解决问题。 你可以使用的工具如下 {self.tools_description} 请严格按照以下格式回应 Thought: 你需要先思考当前情况分析用户问题并决定是否需要使用工具以及使用哪个工具。 Action: 如果你决定使用工具在这里输出工具的名称。否则这里留空。 Action Input: 如果你决定使用工具在这里以JSON格式提供工具的输入参数。例如对于web_search工具输入可能是 {{query: Python最新版本}}。否则这里留空。 Final Answer: 当你能够直接回答用户或已经通过工具获得了足够信息时在这里给出最终答案。 如果你使用了工具在得到工具返回的观察结果后你会再次看到这个提示并继续思考。 full_history [{role: system, content: system_prompt}] self.memory.get_context() for iteration in range(self.max_iterations): # 调用LLM进行“思考” try: response self.client.chat.completions.create( modelself.model, messagesfull_history, temperature0.1, # 低温度保证输出格式稳定 max_tokens500 ) llm_output response.choices[0].message.content print(f\n--- 迭代 {iteration 1} ---) print(fLLM原始输出:\n{llm_output}) except Exception as e: return f调用语言模型时出错{str(e)} # 解析LLM输出 parsed self._parse_llm_response(llm_output) print(f解析结果: {parsed}) if parsed[final_answer]: # 有最终答案结束循环 final_answer parsed[final_answer] self.memory.add(assistant, final_answer) print(f智能体最终答案: {final_answer}) return final_answer if parsed[action]: # 需要执行工具 tool_name parsed[action] tool_input parsed[action_input] tool_func get_tool_by_name(tool_name) if not tool_func: observation f错误未知的工具 {tool_name}。 else: # 执行工具 try: if isinstance(tool_input, dict): # 如果输入是字典解包作为参数 observation tool_func(**tool_input) else: # 否则作为单一字符串参数 observation tool_func(tool_input) except Exception as e: observation f执行工具 {tool_name} 时出错{str(e)} print(f工具 {tool_name} 执行结果: {observation}) # 将观察结果工具执行结果添加到历史中供下一轮思考 full_history.append({role: user, content: fObservation: {observation}}) # 注意这里不将观察加入长期记忆通常只将最终对话加入。 else: # 既没有最终答案也没有行动可能格式错误或陷入死循环 observation 错误响应格式不符合要求未找到 Final Answer 或有效的 Action。 full_history.append({role: user, content: fObservation: {observation}}) # 如果超过最大迭代次数 final_answer 抱歉经过多次尝试仍未能解决问题。请尝试更清晰或更简单的问题。 self.memory.add(assistant, final_answer) return final_answer关键点解释_parse_llm_response函数是核心解析器。它通过正则表达式从LLM的文本响应中提取结构化信息Thought, Action, Action Input, Final Answer。这是一种简单但有效的实现方式。更健壮的做法是使用LLM的Function Calling功能。system_prompt定义了智能体的角色、可用工具和严格的输出格式。清晰的格式要求是让LLM遵循ReAct模式的关键。run方法实现了完整的ReAct循环构建包含系统提示和记忆的上下文 - 调用LLM - 解析响应 - 执行工具或返回答案 - 将结果作为新的“观察”加入上下文进入下一轮。我们设置了max_iterations来防止智能体陷入无限循环。每次迭代都会打印出LLM的原始输出和解析结果便于调试。5.5 步骤五主程序与测试最后创建main.py文件作为程序的入口点。# main.py import os from agent import SimpleAgent def main(): # 从环境变量中读取OpenAI API Key更安全 api_key os.getenv(OPENAI_API_KEY) if not api_key: print(错误未设置 OPENAI_API_KEY 环境变量。) print(请执行export OPENAI_API_KEYyour-api-key-here (Linux/macOS)) print(或set OPENAI_API_KEYyour-api-key-here (Windows)) return # 初始化智能体 agent SimpleAgent(api_keyapi_key, modelgpt-3.5-turbo) # 也可使用 gpt-4 print( * 50) print(AI智能体工坊已启动) print(输入您的问题例如计算一下圆的面积如果半径是5 或 帮我查一下最近关于AI编程的新闻) print(输入 quit 或 exit 退出程序。) print( * 50) while True: try: user_input input(\n您: ).strip() if user_input.lower() in [quit, exit, q]: print(再见) break if not user_input: continue # 运行智能体 answer agent.run(user_input) # run方法内部已打印过程此处可选择性输出最终答案 # print(f\n助手: {answer}) except KeyboardInterrupt: print(\n程序被中断。) break except Exception as e: print(f\n程序运行出错{e}) if __name__ __main__: main()6. 运行结果与效果验证现在让我们运行这个智能体看看它如何工作。设置环境变量在终端中先设置你的OpenAI API Key。# Linux/macOS export OPENAI_API_KEYsk-你的真实API密钥 # Windows (PowerShell) # $env:OPENAI_API_KEYsk-你的真实API密钥运行程序在项目根目录下执行。python main.py测试场景一需要计算和推理的问题您: 如果一个圆的半径是7.5请计算它的面积然后告诉我比半径为5的圆面积大多少。预期观察LLM会先进行Thought识别出需要计算。第一次Action可能是调用calculator计算3.14159 * 7.5 * 7.5。得到观察结果面积1后LLM会继续思考需要计算半径为5的圆面积。第二次Action调用calculator计算3.14159 * 5 * 5。得到两个面积后LLM再次思考计算差值并最终给出Final Answer。测试场景二需要获取最新信息的问题您: 最近Python发布了哪个新版本主要更新了什么预期观察LLM的Thought会认识到需要最新信息决定调用web_search。Action为web_searchAction Input为类似{query: Python latest version release notes}的JSON。工具会返回搜索摘要。LLM根据摘要组织语言给出Final Answer。验证成功成功运行的标准是程序不报错启动。对于计算类问题能正确调用calculator工具并给出精确答案。对于信息查询类问题能正确调用web_search工具并基于返回信息组织回答。控制台能清晰打印出每一轮的Thought、Action和Observation帮助你理解智能体的决策过程。如果运行失败请首先检查API Key是否正确设置网络是否通畅以及openai库版本是否兼容。7. 常见问题与排查思路在开发和运行此类AI智能体时你一定会遇到一些问题。下表列出了常见问题及解决方法问题现象可能原因排查方式解决方案启动时报错ModuleNotFoundError依赖未安装或虚拟环境未激活。检查当前终端是否在项目目录下并激活了虚拟环境。运行pip list查看是否安装了openai和requests。确保在虚拟环境中执行pip install -r requirements.txt。运行后立即报错AuthenticationErrorOpenAI API Key 错误或未设置。检查环境变量OPENAI_API_KEY是否已设置且正确。在Python中print(os.getenv(“OPENAI_API_KEY”))验证。重新设置正确的API Key。确保没有多余的空格或引号。智能体不调用工具直接回答1. 系统提示词中工具描述不清。2. LLM温度temperature设置过高。3. 工具描述与问题不匹配。查看控制台打印的LLM原始输出检查Thought部分是否考虑了工具。检查system_prompt是否清晰。优化工具描述使其更精确。降低temperature如设为0.1。在提示词中强调“如果你需要实时信息或计算必须使用工具”。智能体陷入循环不断调用同一个工具1. 工具返回的结果未能让LLM满意。2.max_iterations设置过高。3. 缺乏停止条件。观察每次工具返回的Observation是否有效。检查LLM的Thought是否在重复相同逻辑。改进工具实现确保返回有意义的结果。适当降低max_iterations如5。在提示词中增加“如果工具无法提供有效信息请基于已有知识回答或承认无法解决”。Action Input解析失败不是JSONLLM没有严格按照JSON格式输出。查看LLM原始输出中Action Input部分的内容。在系统提示词中更严格地规定格式例如“Action Input 必须是一个有效的JSON对象如{\”query\”: \”something\”}”。可以加入格式示例。web_search工具总是返回错误或空结果1. 使用的公共API不稳定或限流。2. 网络问题。3. 查询词格式问题。直接在浏览器或使用curl测试API端点。检查代码中的异常捕获。考虑更换更稳定的搜索API如SerpAPI需注册和付费。在代码中添加更详细的错误日志和重试机制。多轮对话后上下文混乱或遗忘记忆系统ConversationMemory的max_turns设置过小或上下文窗口超限。检查memory.py中get_context返回的消息数量。LLM有token长度限制。调整max_turns。实现更智能的记忆摘要Summarization功能将长对话压缩。对于超长上下文考虑使用向量检索记忆。8. 最佳实践与工程建议将这个Demo升级为一个可用于实际项目的组件你需要考虑以下工程化实践替换更强的工具调用方式本文使用文本解析正则的方式提取工具调用信息这比较脆弱。生产环境强烈建议使用LLM原生的Function Calling功能OpenAI API已支持。这能保证结构化的输入输出大大提高可靠性。实现更强大的记忆系统短期记忆当前基于列表的记忆足够。长期记忆集成向量数据库如Chroma, Pinecone, Weaviate。将对话历史、工具执行结果的关键信息向量化存储实现基于语义的检索让智能体拥有“长期经验”。工具管理的工程化工具发现与注册使用装饰器或配置文件自动注册工具避免手动维护TOOLS列表。工具权限与安全为工具分类定义执行权限。特别是执行代码、访问文件系统的工具必须有严格的安全沙箱和用户确认机制。工具组合设计能够组合多个工具执行的复杂工具如“先搜索再总结最后发邮件”。提升规划能力任务分解对于复杂问题让LLM先输出一个任务列表Plan再逐步执行。反思Reflection在行动后让LLM对结果进行反思评估是否达成目标并决定下一步是继续、重试还是改变策略。加入监控与可观测性日志记录详细记录每个循环的Thought、Action、Observation便于调试和优化。性能指标统计工具调用耗时、Token使用量、任务成功率等。人机交互在关键决策点如执行高风险工具前可以加入人工确认环节。代码结构与配置化将Agent配置如模型选择、温度、最大迭代次数抽离到配置文件如config.yaml中。使用依赖注入管理LLM客户端、记忆存储、工具集等组件提高可测试性。9. 总结与后续学习方向通过这个从BW带回来的“玩具”项目我们完成了一次AI智能体的“深度拆解-组装”之旅。我们并没有使用任何庞大的框架而是用300行左右的Python代码清晰地再现了智能体的核心工作流程规划、工具调用、记忆。这证明了构建AI Agent的核心逻辑是直观且可掌握的。本文的核心价值不在于代码本身而在于提供了一个可理解、可修改的“蓝图”。你现在可以替换大脑将OpenAI API换成任何支持类似功能的其他大模型。增加工具按照tools.py的格式为你自己的智能体添加新能力比如发送邮件、操作数据库、生成图片。升级记忆将简单的对话列表换成向量数据库让你的智能体真正拥有“长期经验”。优化规划引入更复杂的任务分解和反思机制处理更宏大的问题。下一步可以探索的方向深入研究LangChain/GPT Engineer等框架理解它们如何封装了本文中的模式并提供了更企业级的特性异步、流式响应、智能路由等。学习AutoGen/CrewAI了解多智能体协作是如何设计的一个智能体负责规划另一个负责执行它们如何通信。关注AI Agent评估如何定量评估一个智能体的好坏有哪些基准测试如WebArena, AgentBench探索实际应用场景将智能体应用于自动化测试、客户支持、内部知识库问答、个性化内容生成等具体业务中。这个“玩具”的价值在于它为你打开了一扇门。门后的世界是AI从“被动应答”走向“主动执行”的新阶段。现在你拥有了入门的第一把钥匙。建议收藏本文并动手将代码跑起来从修改第一个工具开始真正成为智能体的“架构师”。