AI Agent开发实战指南:从概念到落地,手把手构建智能体应用

📅 2026/7/6 3:25:50 👁️ 阅读次数 📝 编程学习
AI Agent开发实战指南:从概念到落地,手把手构建智能体应用

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度

最近在尝试将大模型应用到实际业务场景时,发现单纯调用API生成文本已经无法满足复杂需求。比如,想让AI自动分析数据、生成报告并发送邮件,或者根据用户自然语言指令操作软件,这些都需要AI具备“自主思考”和“执行任务”的能力。这正是AI Agent(智能体)要解决的核心问题。然而,网上资料要么过于理论,要么代码片段零散,难以形成从入门到落地的闭环。

本文旨在为你提供一份系统、可实操的AI Agent开发实战指南。无论你是刚接触大模型的初学者,还是希望将Agent能力集成到现有项目的开发者,都能从中找到清晰的路径。我们将从核心概念讲起,逐步搭建开发环境,并通过多个由浅入深的实战项目,手把手带你掌握Agent的构建、调试与优化。学完后,你将能够独立设计并实现具备规划、工具调用和记忆能力的智能体,让你的大模型应用真正“活”起来。

1. AI Agent核心概念:为什么它是大模型应用的未来?

在深入代码之前,我们必须先理解AI Agent究竟是什么,以及它为何重要。

1.1 什么是AI Agent?

你可以将AI Agent理解为一个“数字员工”。它不仅仅是一个聊天机器人,而是一个具备感知、规划、决策、执行和反思能力的智能系统。其核心架构通常包含以下几个关键组件:

  1. 大脑(Brain):通常由一个大语言模型(LLM)担任,负责理解用户指令、进行逻辑推理、制定计划。
  2. 规划器(Planner):将复杂的用户目标(如“帮我分析上季度销售数据并写一份总结报告”)拆解成一系列可执行的子任务(如:1. 连接数据库;2. 查询销售数据;3. 分析趋势;4. 生成报告草稿;5. 格式化报告)。
  3. 工具集(Tools):Agent的“手”和“脚”。LLM本身无法直接操作外部世界,工具赋予了它这种能力。常见的工具包括:
    • 搜索工具:调用搜索引擎API获取实时信息。
    • 代码执行器:在安全沙箱中运行Python代码进行数学计算或数据处理。
    • API调用工具:发送HTTP请求操作其他软件或服务(如发送邮件、操作数据库)。
    • 文件操作工具:读写本地文件。
  4. 记忆系统(Memory):让Agent拥有“上下文”和“经验”。分为:
    • 短期记忆:保存当前对话的上下文。
    • 长期记忆:通过向量数据库等方式,存储历史交互的关键信息,供未来参考,实现个性化服务。
  5. 执行与反思(Act & Reflect):Agent执行规划好的动作,使用工具,并根据执行结果进行反思。如果子任务失败,它能调整计划或寻求帮助。

1.2 AI Agent与大模型的关系

大模型(LLM)是Agent的核心驱动力,但并非Agent的全部。LLM提供了强大的自然语言理解和生成能力,是规划和决策的“思考引擎”。然而,LLM存在幻觉、知识截止、无法直接交互现实世界等局限。Agent框架通过引入规划、工具和记忆等机制,弥补了LLM的不足,将其能力转化为实际生产力

简单来说:大模型让Agent能“思考”,而Agent框架让思考能“落地”。

1.3 典型应用场景

了解概念后,我们看看Agent能做什么:

  • 自动化助手:自动处理邮件、安排会议、整理会议纪要。
  • 数据分析师:用自然语言提问,Agent自动查询数据库、分析并可视化结果。
  • 智能客服:不仅回答问题,还能执行查订单、退换货等实际操作。
  • 个人学习教练:根据你的学习目标,规划学习路径,推荐资料,并跟踪进度。
  • 游戏NPC:拥有长期记忆和目标,能与玩家进行更丰富、持续的互动。

2. 环境准备:搭建你的第一个Agent开发环境

工欲善其事,必先利其器。我们将使用Python作为主要开发语言,并选择目前最流行、生态最丰富的Agent开发框架之一——LangChain来开始我们的旅程。

2.1 基础环境配置

首先,确保你的系统已安装Python(推荐3.8及以上版本)和pip包管理工具。

  1. 创建并激活虚拟环境(强烈推荐):这能避免项目间的依赖冲突。

    # 创建虚拟环境 python -m venv agent_env # 激活虚拟环境 # Windows agent_env\Scripts\activate # Linux/Mac source agent_env/bin/activate

    激活后,命令行提示符前会出现(agent_env)标识。

  2. 安装核心库:我们将安装LangChain及其社区工具包,并选择OpenAI的模型作为我们首个Agent的“大脑”。你也可以后续替换为其他模型。

    pip install langchain langchain-community langchain-openai

    langchain是核心框架,langchain-community包含大量社区贡献的工具和集成,langchain-openai提供了对OpenAI模型的便捷调用。

2.2 配置大模型API密钥

Agent需要调用大模型。这里以OpenAI为例(你也可以使用智谱AI、DeepSeek等国内兼容OpenAI API的模型)。

  1. 获取API Key:访问OpenAI平台(或相应国内模型平台)注册并获取API Key。
  2. 设置环境变量:将API Key设置为环境变量,避免硬编码在代码中,这是安全最佳实践。
    # Windows (PowerShell) $env:OPENAI_API_KEY="你的-api-key-here" # Linux/Mac export OPENAI_API_KEY="你的-api-key-here"
    你也可以在代码中通过os.environ[“OPENAI_API_KEY”] = “key”设置,但环境变量方式更安全。

2.3 验证环境

创建一个简单的Python脚本test_env.py来测试环境和模型连接是否正常。

# test_env.py from langchain_openai import ChatOpenAI # 初始化聊天模型,使用 gpt-3.5-turbo 性价比高,适合开发测试 llm = ChatOpenAI(model="gpt-3.5-turbo") # 发送一个简单消息 response = llm.invoke("你好,请用一句话介绍你自己。") print(response.content)

运行脚本:

python test_env.py

如果看到类似“我是OpenAI训练的AI助手…”的输出,恭喜你,环境配置成功!你的Agent已经拥有了一个可用的“大脑”。

3. LangChain框架核心模块拆解

在动手构建Agent前,需要理解LangChain的几个核心抽象概念,它们是构建块的基石。

3.1 模型(Models):不只是ChatGPT

LangChain将模型抽象为LLM(文本补全)和ChatModel(对话)两类。我们主要使用ChatModel

from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage, SystemMessage chat = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7) # 构建消息列表 messages = [ SystemMessage(content="你是一个专业的Python工程师,回答要简洁准确。"), HumanMessage(content="如何用Python快速反转一个字符串?") ] response = chat.invoke(messages) print(response.content) # 输出:可以使用切片操作:`reversed_str = original_str[::-1]`。
  • SystemMessage:设定AI的角色和行为。
  • HumanMessage:用户的输入。
  • temperature:控制输出的随机性(0.0-2.0)。值越低,输出越确定和一致;值越高,越有创造性。

3.2 提示词(Prompts):从静态模板到动态组装

提示词模板让你能复用和动态生成提示词。

from langchain.prompts import ChatPromptTemplate template = ChatPromptTemplate.from_messages([ ("system", "你是一位{role}。"), ("human", "请回答以下关于{topic}的问题:{question}") ]) # 填充模板 formatted_prompt = template.format_messages(role="历史学家", topic="罗马帝国", question="罗马帝国灭亡的主要原因是什么?") print(formatted_prompt) # 然后将 formatted_prompt 传递给 chat.invoke

这使得批量生成或根据用户输入定制提示词变得非常容易。

3.3 链(Chains):组合调用序列

链是将模型、提示词、工具等组合起来执行特定任务的工作流。最简单的链是LLMChain

from langchain.chains import LLMChain prompt = ChatPromptTemplate.from_template("请将以下中文翻译成英文:{text}") chain = LLMChain(llm=chat, prompt=prompt) result = chain.invoke({"text": "今天天气真好,适合学习AI Agent。"}) print(result["text"]) # 输出:The weather is nice today, perfect for learning about AI Agents.

链是构建复杂Agent的基础,你可以把多个链串联起来。

3.4 工具(Tools):Agent的能力扩展

工具是Agent与外界交互的接口。LangChain内置和社区提供了数百种工具。

from langchain.agents import load_tools # 加载一些内置工具,如计算器、维基百科搜索(需要额外安装包) tools = load_tools(["llm-math", "wikipedia"], llm=chat) print([tool.name for tool in tools]) # 输出:['Calculator', 'Wikipedia']

每个工具都有描述,Agent(LLM)会根据描述决定在何时使用哪个工具。

3.5 代理(Agents):自动决策的核心

代理是“大脑”+“工具使用”的决策者。它根据用户输入和当前状态,决定下一步是调用工具还是直接给出答案。

from langchain.agents import initialize_agent, AgentType # 初始化一个具有推理能力的代理 agent = initialize_agent( tools, # 工具集 chat, # 模型 agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # 代理类型 verbose=True # 打印详细思考过程,便于调试 )

ZERO_SHOT_REACT_DESCRIPTION是一种经典的代理类型,它要求模型遵循“思考(Thought)-行动(Action)-观察(Observation)”的循环(ReAct框架)。

4. 实战项目一:构建你的第一个数学计算助手

现在,让我们用上面学到的知识,构建一个能解决数学问题的简单Agent。这个Agent将学会使用计算器工具。

4.1 项目目标

创建一个Agent,它能理解用户用自然语言提出的数学问题(如“3的4次方是多少?”或“150的18%是多少?”),并自动调用计算器工具得到精确答案。

4.2 完整代码实现

创建一个新文件math_agent.py

# math_agent.py import os from langchain_openai import ChatOpenAI from langchain.agents import load_tools, initialize_agent, AgentType from langchain.agents.agent import AgentExecutor # 1. 设置API密钥(如果未设置环境变量,可以在这里设置) # os.environ["OPENAI_API_KEY"] = "your-api-key" # 2. 初始化大模型 llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # 3. 加载工具 # `llm-math` 工具包含一个计算器,它本身也需要一个LLM来解析自然语言问题为数学表达式。 tools = load_tools(["llm-math"], llm=llm) # 4. 初始化代理 agent: AgentExecutor = initialize_agent( tools=tools, llm=llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # 使用ReAct框架的代理 verbose=True, # 关键!设置为True以查看Agent的思考过程 handle_parsing_errors=True # 优雅地处理解析错误 ) # 5. 运行代理 if __name__ == "__main__": questions = [ "3的4次方等于多少?", "如果一件商品原价是200元,打八五折后的价格是多少?", "计算圆的面积,已知半径是7.5厘米。", ] for question in questions: print(f"\n{'='*50}") print(f"用户问题: {question}") print(f"{'='*50}") try: result = agent.invoke({"input": question}) print(f"\n最终答案: {result['output']}") except Exception as e: print(f"执行出错: {e}")

4.3 运行与结果分析

在终端运行:

python math_agent.py

你将看到类似以下的详细输出(verbose=True的效果):

================================================== 用户问题: 3的4次方等于多少? ================================================== > Entering new AgentExecutor chain... 我需要计算3的4次方。这是一个指数运算。 Action: Calculator Action Input: 3 ** 4 Observation: Answer: 81 Thought: 我得到了计算结果。 Final Answer: 3的4次方等于81。 最终答案: 3的4次方等于81.

关键过程解读:

  1. Thought: Agent(LLM)分析问题,决定需要计算。
  2. Action: 它决定采取“Calculator”这个动作。
  3. Action Input: 它生成了正确的计算表达式3 ** 4
  4. Observation: 计算器工具执行并返回结果81
  5. Thought & Final Answer: Agent看到结果后,组织语言给出最终答案。

通过这个简单例子,你已经看到了Agent“思考-行动-观察”的完整循环。verbose=True是调试Agent的利器,务必善用。

5. 实战项目二:打造信息检索与总结Agent

只会计算还不够,一个强大的Agent需要获取外部知识。接下来,我们构建一个能联网搜索并总结信息的Agent。

5.1 项目目标

创建一个Agent,当用户询问实时性或知识库问题时(如“特斯拉最新的CEO是谁?”或“解释一下量子计算的基本概念”),它能自动搜索网络信息,并提炼出简洁准确的答案。

5.2 安装额外依赖

我们需要安装wikipedia包来获取维基百科内容(作为示例,生产环境可使用SerpAPI等真正的搜索引擎工具)。

pip install wikipedia

5.3 完整代码实现

创建新文件research_agent.py

# research_agent.py from langchain_openai import ChatOpenAI from langchain.agents import load_tools, initialize_agent, AgentType from langchain.agents.agent import AgentExecutor import warnings warnings.filterwarnings('ignore') # 忽略一些警告 # 1. & 2. 初始化模型 llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # 3. 加载更多工具:计算器 + 维基百科 tools = load_tools(["llm-math", "wikipedia"], llm=llm) # 4. 初始化代理 agent: AgentExecutor = initialize_agent( tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True, handle_parsing_errors=True, max_iterations=4 # 限制最大迭代次数,防止死循环 ) # 5. 运行代理 if __name__ == "__main__": queries = [ "特斯拉公司的创始人是谁?他现在还担任CEO吗?", "什么是光合作用?用一句话概括。", "请比较Python和JavaScript在Web开发中的主要区别。", ] for query in queries: print(f"\n{'='*60}") print(f"查询: {query}") print(f"{'='*60}") try: # 注意:Wikipedia工具可能返回大段文本,Agent会尝试总结 result = agent.invoke({"input": query}) print(f"\n总结性回答: {result['output']}") except Exception as e: print(f"查询过程中出现错误: {e}")

5.4 运行与深入解析

运行python research_agent.py。观察输出,你会看到Agent可能执行多个步骤。例如对于第一个问题:

  1. 它可能先思考“需要查找特斯拉公司的信息”。
  2. 然后行动:使用Wikipedia工具,输入“Tesla, Inc.”。
  3. 观察:获得一大段关于特斯拉公司的维基百科文本。
  4. 再思考:从文本中提取创始人和CEO信息。
  5. 最终给出答案:“特斯拉公司由马丁·艾伯哈德和马克·塔彭宁于2003年创立,埃隆·马斯克是其主要投资者和现任CEO。”

重要参数说明:

  • max_iterations=4:限制Agent“思考-行动”循环的最大次数,防止它在无法解决问题时陷入无限循环。这是一个重要的安全性和成本控制设置。

6. 实战项目三:构建自定义工具与复杂工作流Agent

前两个项目使用了现成工具。现在,我们将学习如何创建自定义工具,并构建一个更复杂的、具备多个步骤工作流的Agent。

6.1 项目目标:天气查询与活动建议助手

创建一个Agent,它能:

  1. 根据用户提供的城市名,调用自定义的天气查询工具(模拟)获取天气。
  2. 根据天气情况,调用另一个自定义工具,生成相应的活动建议(如晴天建议户外运动,雨天建议室内阅读)。
  3. 将天气信息和活动建议整合成一份友好的回复。

6.2 创建自定义工具

在LangChain中,创建自定义工具非常简单,主要使用@tool装饰器或继承BaseTool类。

创建新文件custom_agent.py

# custom_agent.py from langchain_openai import ChatOpenAI from langchain.agents import initialize_agent, AgentType, Tool from langchain.agents.agent import AgentExecutor from langchain.tools import BaseTool from typing import Optional, Type from pydantic import BaseModel, Field import random # 1. 定义自定义工具:模拟天气查询 class WeatherQueryInput(BaseModel): """输入城市名查询天气的schema。""" city_name: str = Field(description="需要查询天气的城市名称,例如:北京、上海") class WeatherQueryTool(BaseTool): name = "get_weather" description = "根据城市名称查询该城市当前的模拟天气情况。" args_schema: Type[BaseModel] = WeatherQueryInput def _run(self, city_name: str) -> str: """模拟查询天气的逻辑。实际应用中应调用如和风天气、OpenWeatherMap等API。""" # 模拟一些天气数据 weather_conditions = ["晴", "多云", "阴", "小雨", "中雨", "大雨", "雪"] temperatures = range(-5, 35) humidity = range(30, 90) condition = random.choice(weather_conditions) temp = random.choice(temperatures) hum = random.choice(humidity) return f"{city_name}的当前天气为:{condition},气温{temp}摄氏度,湿度{hum}%。" async def _arun(self, city_name: str): """异步版本(可选)。""" raise NotImplementedError("此工具不支持异步调用。") # 2. 定义自定义工具:活动建议 class ActivitySuggestionInput(BaseModel): """根据天气情况建议活动的schema。""" weather_description: str = Field(description="天气描述,例如:晴、25度;或:大雨、10度") class ActivitySuggestionTool(BaseTool): name = "suggest_activity" description = "根据提供的天气描述,推荐适合的室内或室外活动。" args_schema: Type[BaseModel] = ActivitySuggestionInput def _run(self, weather_description: str) -> str: """根据天气生成活动建议。""" if "晴" in weather_description or "多云" in weather_description: return "天气不错!推荐进行户外活动,如:公园散步、骑行、登山、野餐或打篮球。" elif "雨" in weather_description: return "下雨天。推荐室内活动,如:阅读、看电影、参观博物馆、做瑜伽或学习新技能。" elif "雪" in weather_description: return "下雪了!可以尝试堆雪人、滑雪,或者在室内享受热饮和电影。" else: return "天气状况一般。可以选择轻松的室内活动,或者根据温度决定是否进行短途户外活动。" async def _arun(self, weather_description: str): raise NotImplementedError("此工具不支持异步调用。") # 3. 初始化模型和工具列表 llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7) # 温度稍高,让建议更有变化 weather_tool = WeatherQueryTool() activity_tool = ActivitySuggestionTool() tools = [weather_tool, activity_tool] # 4. 初始化代理。使用CHAT_CONVERSATIONAL_REACT_DESCRIPTION更适合多轮对话场景。 agent: AgentExecutor = initialize_agent( tools, llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, # 使用结构化聊天代理,能更好处理多参数工具 verbose=True, handle_parsing_errors=True, max_iterations=3 ) # 5. 运行代理 if __name__ == "__main__": print("欢迎使用天气与活动建议助手!") print("你可以问我类似:‘北京天气怎么样?我应该做什么?’ 或 ‘上海下雨了,有什么建议?’") print("输入 '退出' 或 'quit' 结束程序。\n") while True: user_input = input("\n你的问题: ").strip() if user_input.lower() in ['退出', 'quit', 'exit']: print("再见!") break if user_input: try: result = agent.invoke({"input": user_input}) print(f"\n助手: {result['output']}") except Exception as e: print(f"抱歉,处理你的请求时出错了: {e}")

6.3 代码详解与运行

  1. 自定义工具类:我们通过继承BaseTool并定义_run方法创建了两个工具。args_schema使用Pydantic模型定义输入格式,这能帮助LLM更准确地生成工具调用参数。
  2. 代理类型:这次使用了STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION。它比ZERO_SHOT类型更能处理具有复杂参数的工具。
  3. 交互式循环:程序提供了一个简单的命令行交互界面。

运行python custom_agent.py,尝试提问:

  • “北京今天天气如何?我该做什么?”
  • “如果杭州下雨,有什么活动推荐?”

观察Agent的思考链:它会先调用get_weather,拿到结果后,再调用suggest_activity,最后综合给出答案。这展示了一个多步骤、有条件的工作流,是复杂Agent的雏形。

7. 高级主题与生产环境考量

掌握了基础Agent构建后,我们需要关注如何让它更强大、更稳定、更适合生产环境。

7.1 记忆(Memory):让Agent拥有上下文

之前的Agent都是“单轮对话”,它不记得之前说过什么。通过添加记忆,可以实现多轮对话。

from langchain.memory import ConversationBufferMemory from langchain.agents import initialize_agent memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) agent_with_memory = initialize_agent( tools, llm, agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION, # 注意代理类型变了 verbose=True, memory=memory, handle_parsing_errors=True ) # 现在你可以进行连续对话 result1 = agent_with_memory.invoke({"input": "我叫小明。"}) print(result1['output']) # 可能回复“你好,小明!” result2 = agent_with_memory.invoke({"input": "我刚才说我叫什么名字?"}) # Agent会记得 print(result2['output']) # 应该能回答“你叫小明。”

ConversationBufferMemory会将所有对话历史保存在内存中。对于更长的对话,可以考虑ConversationSummaryMemory(总结历史)或ConversationBufferWindowMemory(只保留最近N轮)。

7.2 检索增强生成(RAG)与Agent结合

Agent可以调用RAG流程,从自定义知识库(如公司文档、产品手册)中获取精准信息来回答问题。

  1. 创建向量数据库:将你的文档切分、嵌入并存入向量数据库(如Chroma, Pinecone)。
  2. 创建检索工具:构建一个工具,其功能是:根据用户问题,从向量库中检索相关文档片段。
  3. 赋予Agent:将这个检索工具加入到Agent的工具箱中。

这样,当用户问及你知识库内的内容时,Agent会自动检索并引用相关文档来生成答案,极大减少幻觉。

7.3 代理类型(AgentType)选择指南

  • ZERO_SHOT_REACT_DESCRIPTION:最通用,适合工具描述清晰、任务相对简单的场景。
  • STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION:适合工具输入参数复杂(需要JSON结构)的场景。
  • CONVERSATIONAL_REACT_DESCRIPTION:专为多轮对话设计,需配合Memory使用。
  • OPENAI_FUNCTIONS/OPENAI_MULTI_FUNCTIONS:专为OpenAI的Function Calling功能优化,格式匹配度最好,但可能与其他模型兼容性稍差。

7.4 生产环境最佳实践

  1. 错误处理与稳定性
    • agent.invoke()添加完善的try-catch。
    • 设置max_iterationsmax_execution_time防止失控。
    • 使用handle_parsing_errors=True处理LLM输出格式错误。
  2. 成本与性能优化
    • 为LLM调用设置合理的temperaturemax_tokens
    • 对工具调用做缓存,避免重复计算或查询。
    • 考虑使用更轻量的模型(如GPT-3.5-turbo)进行工具选择,用更强大的模型(如GPT-4)进行最终总结。
  3. 安全与权限
    • 工具权限隔离:不是所有工具都应被所有用户使用。需要设计权限系统,在Agent调用工具前进行鉴权。
    • 输入输出过滤:对用户输入和Agent输出进行内容安全过滤,防止注入攻击或生成有害内容。
    • 沙箱环境:对于执行代码、文件操作等高风险工具,必须在严格的沙箱环境中运行。
  4. 评估与监控
    • 记录完整的Agent执行链(Thought, Action, Observation),便于调试和优化。
    • 定义关键指标(KPI),如任务完成率、工具调用准确率、用户满意度,持续评估Agent性能。

8. 常见问题(FAQ)与排查指南

在开发Agent过程中,你一定会遇到各种问题。以下是典型问题及解决方案。

问题现象可能原因排查步骤与解决方案
Agent陷入循环,不停调用同一个工具1. 工具描述不清晰,LLM无法理解其功能边界。
2. 任务本身无法由现有工具解决,LLM陷入困惑。
3.max_iterations设置过高。
1.优化工具描述:确保description字段准确、简洁,说明输入输出。例如,“计算数学表达式”比“做数学”更好。
2.增加最终答案指令:在系统提示词中强调“如果你认为工具无法解决,或已获得足够信息,请直接给出最终答案”。
3.降低max_iterations:设置为4-6,避免无限循环。
4.使用更强大的模型:GPT-4在规划和决策上通常比GPT-3.5更可靠。
LLM无法正确解析工具参数1. 工具的参数结构(args_schema)定义太复杂或模糊。
2. 使用的Agent类型不支持复杂参数。
1.简化参数:尽量使用基本类型(str, int, float)。使用Field(description=...)提供清晰描述。
2.切换Agent类型:尝试使用STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
3.在提示词中示例:在给Agent的系统消息中,提供一两个正确调用工具的示例。
API调用超时或网络错误1. 网络不稳定。
2. OpenAI API或其他工具API达到速率限制。
3. 响应时间过长。
1.添加重试机制:使用tenacity等库为工具调用和LLM调用添加指数退避重试。
2.监控速率限制:检查API返回的头部信息,实现简单的限流队列。
3.设置超时:为所有网络请求设置合理的超时时间。
Agent给出的答案与工具结果不符(幻觉)LLM在总结或整合多个工具结果时产生幻觉。1.强制引用:要求Agent在最终答案中明确引用工具观察结果,例如“根据查询,温度是{obs1},因此...”。
2.后处理校验:设计一个简单的校验步骤,对比最终答案中的关键数据是否与工具返回数据一致。
3.使用更可靠的模型进行总结
自定义工具无法被识别或调用1. 工具类未正确定义namedescription
2. 工具未正确添加到tools列表中。
3. Agent初始化时传参错误。
1. 打印tools列表,检查每个工具的namedescription是否存在且是字符串。
2. 确保工具类正确继承了BaseTool并实现了_run方法。
3. 使用verbose=True运行,观察Agent的思考过程,看它是否列出了所有可用工具。
内存(Memory)不工作1. 使用的Agent类型不支持Memory(如ZERO_SHOT_REACT_DESCRIPTION)。
2. Memory对象未传递给Agent。
3.memory_key不匹配。
1.选择支持对话的Agent类型,如CONVERSATIONAL_REACT_DESCRIPTION
2. 检查initialize_agentmemory参数是否已传入。
3. 确保Agent类型所需的memory_key与Memory对象初始化时的memory_key一致。

构建AI Agent是一个迭代过程。从简单的计算助手开始,逐步添加更复杂的工具、记忆和规划能力。关键是多实验、多观察(verbose=True是你的好朋友)、多分析失败案例。随着对大模型特性和LangChain框架的熟悉,你将能设计出越来越智能和强大的数字助手,真正解锁大模型在复杂场景下的应用潜力。

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度