AI Agent开发实战:从零构建具备记忆与工具调用能力的智能体

AI Agent开发实战:从零构建具备记忆与工具调用能力的智能体
最近在尝试将AI能力集成到自己的项目中发现网上关于AI Agent的资料要么过于零散要么就是纯理论讲解真正能跑起来、能落地的完整教程少之又少。很多开发者包括我自己都卡在了从“知道概念”到“做出东西”的鸿沟里。本文旨在解决这个痛点为你提供一套从零到一的AI Agent开发实战指南。我们将从一个最简单的“天气查询Agent”开始逐步深入到具备记忆、工具调用和复杂推理能力的智能体构建。无论你是刚接触AI的在校学生还是希望将AI能力融入现有业务的后端工程师都能从本文中找到清晰的路径和可直接复用的代码。学完本文你将能够独立设计并实现一个功能完整的AI Agent。1. AI Agent 核心概念从“工具”到“智能体”在开始敲代码之前我们必须先理清几个核心概念这能帮你少走很多弯路。什么是AI Agent简单来说AI Agent智能体是一个能够感知环境、自主决策并执行动作以实现特定目标的程序。它不仅仅是调用一次大模型API而是一个具备“思考-行动”循环的自治系统。你可以把它想象成一个虚拟的、拥有专业技能的“数字员工”。AI Agent vs. 普通AI应用这是最容易混淆的地方。一个普通的AI聊天应用用户问模型答交互是线性的。而一个AI Agent其工作流程是循环的感知Perception接收用户指令或环境状态。规划Planning分析目标拆解为一系列子任务或步骤。行动Action调用工具如搜索API、执行代码、操作数据库来执行子任务。观察Observation获取行动结果作为新的环境输入。循环重复2-4步直到达成目标或无法继续。AI Agent的核心组成模块一个典型的AI Agent架构包含以下关键部分大脑Brain/Core LLM通常是大型语言模型如GPT-4、Claude、国产大模型负责理解、推理和决策。记忆Memory用于存储和检索对话历史、工具调用结果、知识片段等分为短期记忆会话上下文和长期记忆向量数据库。工具ToolsAgent可以调用的外部能力如搜索引擎、计算器、代码执行器、API客户端等。这是Agent与真实世界交互的“手脚”。规划器Planner负责将复杂目标分解为可执行的步骤序列。有时这个能力内置于核心LLM中。执行器Executor负责调度和执行规划器制定的计划管理工具调用流程。理解了这些我们就知道要构建什么了一个能调用LLM作为大脑并能为其配备记忆和工具的系统框架。2. 环境准备搭建你的AI Agent开发工作台工欲善其事必先利其器。我们选择Python作为开发语言因为它拥有最丰富的AI开发生态。以下环境配置是后续所有实践的基础。2.1 基础环境配置首先确保你的系统已安装Python。推荐使用Python 3.8至3.11版本这是大多数AI库兼容性最好的范围。# 检查Python版本 python --version # 或 python3 --version建议使用虚拟环境来隔离项目依赖避免包冲突。# 创建虚拟环境以venv为例 python -m venv ai_agent_env # 激活虚拟环境 # Windows: ai_agent_env\Scripts\activate # Linux/Mac: source ai_agent_env/bin/activate激活后命令行提示符前会出现(ai_agent_env)字样。2.2 核心依赖安装我们将使用LangChain框架它是目前构建AI Agent最流行、生态最完善的工具包之一。同时需要安装openai库来调用模型。# 安装 LangChain 及其社区工具包、OpenAI库 pip install langchain langchain-community langchain-openai # 安装用于向量存储和记忆的库以Chroma为例轻量级 pip install chromadb # 安装用于网页内容提取的库为后续工具示例准备 pip install beautifulsoup4 requests # 安装环境变量管理库用于安全存储API密钥 pip install python-dotenv重要提示langchain是一个元包langchain-community包含了许多第三方工具和集成langchain-openai是专门为OpenAI模型设计的链。2.3 获取并配置API密钥你需要一个大型语言模型的API访问权限。本文以OpenAI GPT模型为例你也可以替换为其他兼容OpenAI API的模型如Azure OpenAI、Ollama本地模型等。访问 OpenAI平台 注册并获取API Key。在项目根目录创建一个名为.env的文件用于存储密钥。在.env文件中添加你的密钥# .env 文件 OPENAI_API_KEY你的-sk-开头的真实api密钥安全警告务必确保.env文件被添加到.gitignore中切勿将API密钥提交到版本控制系统。在Python代码中使用python-dotenv加载密钥# config.py 或主程序开头 from dotenv import load_dotenv import os load_dotenv() # 加载 .env 文件中的环境变量 openai_api_key os.getenv(OPENAI_API_KEY) if not openai_api_key: raise ValueError(请在 .env 文件中设置 OPENAI_API_KEY)至此你的开发环境已经就绪。3. 初探 LangChain构建你的第一个 Agent让我们从一个最简单的例子开始直观感受LangChain如何工作。我们将创建一个能进行简单对话和数学计算的Agent。3.1 基础对话链首先我们创建一个能调用GPT模型进行对话的链Chain。链是LangChain的核心抽象它将多个组件如模型、提示词串联起来。# basic_chain.py from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from dotenv import load_dotenv import os load_dotenv() # 1. 初始化模型 llm ChatOpenAI(modelgpt-3.5-turbo, temperature0.7, api_keyos.getenv(OPENAI_API_KEY)) # 2. 创建提示词模板 prompt_template ChatPromptTemplate.from_messages([ (system, 你是一个乐于助人的AI助手。), (user, {input}) ]) # 3. 创建输出解析器将模型输出解析为字符串 output_parser StrOutputParser() # 4. 构建链提示词 - 模型 - 解析器 chain prompt_template | llm | output_parser # 5. 调用链 response chain.invoke({input: 你好请介绍一下你自己。}) print(AI:, response) # 尝试另一个问题 response2 chain.invoke({input: 什么是深度学习}) print(AI:, response2)运行这个脚本你将看到GPT模型的回复。temperature参数控制输出的随机性0-1值越高回答越有创意值越低越确定。3.2 创建第一个工具ToolAgent的强大之处在于能使用工具。让我们定义一个最简单的工具——一个能计算字符串长度的函数。# first_tool.py from langchain.agents import tool from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor from langchain import hub from dotenv import load_dotenv import os load_dotenv() # 1. 使用 tool 装饰器定义一个工具 tool def get_string_length(text: str) - int: 计算输入字符串的长度。 return len(text) # 2. 准备工具列表 tools [get_string_length] # 3. 初始化模型 llm ChatOpenAI(modelgpt-3.5-turbo, temperature0, api_keyos.getenv(OPENAI_API_KEY)) # 4. 从LangChain Hub获取一个预设的Agent提示词ReAct格式 prompt hub.pull(hwchase17/react-chat) # 5. 使用工具和模型创建Agent agent create_react_agent(llm, tools, prompt) # 6. 创建Agent执行器 agent_executor AgentExecutor(agentagent, toolstools, verboseTrue, handle_parsing_errorsTrue) # 7. 运行Agent result agent_executor.invoke({ input: 请计算Hello, AI Agent!这个字符串的长度。, chat_history: [] # 初始对话历史为空 }) print(\n最终答案:, result[output])运行这段代码你会看到类似以下的详细输出展示了Agent的“思考过程” Entering new AgentExecutor chain... 我需要计算字符串“Hello, AI Agent!”的长度。我有一个工具可以计算字符串长度。 Action: get_string_length Action Input: Hello, AI Agent! Observation: 16 Thought: 我得到了字符串的长度是16。 Final Answer: 字符串“Hello, AI Agent!”的长度是16个字符。 Finished chain. 最终答案: 字符串“Hello, AI Agent!”的长度是16个字符。关键点解析toolLangChain提供的装饰器能将任何函数转化为Agent可识别的工具。工具函数的文档字符串计算输入字符串的长度。非常重要Agent靠它来理解工具的用途。create_react_agent创建了一个基于ReActReasoning Acting范式的Agent。这种Agent会在“思考”和“行动”间交替。AgentExecutor负责运行Agent管理工具调用的循环直到得出最终答案。verboseTrue开启详细日志方便调试看到Agent的思考链。恭喜你已经成功创建了一个能使用工具的AI Agent。虽然工具很简单但框架已经搭好。4. 实战构建多功能天气查询Agent现在我们来构建一个更实用、功能更综合的Agent。它将能够理解用户关于天气的模糊查询如“北京天气怎么样”。调用一个模拟的天气API工具来获取数据。将获取的原始数据组织成友好的回答。4.1 设计工具模拟天气API由于真实天气API需要注册我们用一个模拟函数来代替其返回格式模仿真实API。# weather_agent_tools.py from langchain.agents import tool import json from datetime import datetime tool def get_current_weather(city: str) - str: 根据城市名称获取当前天气信息。 参数: city: 城市名称例如“北京”、“Shanghai”。 返回: 一个包含天气详情的JSON格式字符串。 # 模拟数据 - 在实际应用中这里应调用如OpenWeatherMap,和风天气等API weather_data { city: city, temperature: { celsius: 22, fahrenheit: 71.6 }, condition: 晴朗, humidity: 65%, wind_speed: 10 km/h, update_time: datetime.now().strftime(%Y-%m-%d %H:%M:%S) } # 返回JSON字符串方便Agent解析 return json.dumps(weather_data, ensure_asciiFalse) tool def get_weather_forecast(city: str, days: int 3) - str: 获取城市未来几天的天气预报。 参数: city: 城市名称。 days: 预报天数默认3天最多7天。 返回: 一个包含预报列表的JSON格式字符串。 forecast_list [] for i in range(1, min(days, 7) 1): date (datetime.now().date() timedelta(daysi)).strftime(%Y-%m-%d) forecast_list.append({ date: date, condition: [晴朗, 多云, 小雨, 阴天][i % 4], high_temp: 20 i, low_temp: 10 i }) forecast_data {city: city, forecast: forecast_list} return json.dumps(forecast_data, ensure_asciiFalse)4.2 构建并运行天气Agent现在我们将这两个工具整合进一个Agent。# weather_agent_main.py from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor from langchain import hub from weather_agent_tools import get_current_weather, get_weather_forecast from dotenv import load_dotenv import os load_dotenv() # 1. 准备工具列表 tools [get_current_weather, get_weather_forecast] # 2. 初始化模型。对于需要精确工具调用的任务temperature建议设低。 llm ChatOpenAI(modelgpt-3.5-turbo, temperature0, api_keyos.getenv(OPENAI_API_KEY)) # 3. 获取提示词模板。使用针对聊天的ReAct模板。 prompt hub.pull(hwchase17/react-chat) # 4. 创建Agent和执行器 agent create_react_agent(llm, tools, prompt) agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, # 生产环境可设为False handle_parsing_errorsTrue, max_iterations5, # 防止Agent陷入无限循环 early_stopping_methodgenerate # 当认为已完成时停止 ) def chat_with_weather_agent(): print(天气查询Agent已启动。输入‘退出’或‘quit’结束对话。) chat_history [] while True: user_input input(\n你: ) if user_input.lower() in [退出, quit, exit]: print(再见) break try: # 执行Agent result agent_executor.invoke({ input: user_input, chat_history: chat_history }) ai_response result[output] print(fAgent: {ai_response}) # 更新对话历史简化处理实际可存储更多轮 chat_history.append((user_input, ai_response)) except Exception as e: print(fAgent执行出错: {e}) if __name__ __main__: chat_with_weather_agent()4.3 运行与测试运行weather_agent_main.py尝试进行以下对话你: 今天北京天气怎么样 观察Agent的思考过程它会调用get_current_weather工具 Agent: 北京当前天气晴朗气温22摄氏度71.6华氏度湿度65%风速10 km/h。数据更新于2024-05-27 14:30:00。 你: 那上海未来三天的预报呢 观察Agent调用get_weather_forecast工具 Agent: 上海未来三天天气预报如下 - 2024-05-28: 多云最高21°C最低11°C。 - 2024-05-29: 小雨最高22°C最低12°C。 - 2024-05-30: 阴天最高23°C最低13°C。 你: 两个城市明天天气对比一下。 观察Agent的规划能力它会依次调用两个工具然后进行信息整合 Agent: 根据查询结果 - 北京2024-05-28天气晴朗最高气温23°C最低13°C。 - 上海2024-05-28天气多云最高气温21°C最低11°C。 对比来看北京明天天气更好气温也略高一些。通过这个实战你已经构建了一个能理解自然语言、自主选择并调用工具、整合信息并给出回答的智能体。这已经具备了AI Agent的核心特征。5. 进阶能力为Agent赋予记忆没有记忆的Agent就像金鱼每次对话都是新的开始。为了让Agent更智能我们需要为其添加记忆能力使其能记住对话历史、用户偏好等信息。5.1 对话记忆Conversation MemoryLangChain提供了多种记忆后端。我们使用最简单的ConversationBufferMemory来保存最近的对话。# agent_with_memory.py from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor from langchain.memory import ConversationBufferMemory from langchain import hub from weather_agent_tools import get_current_weather, get_weather_forecast from dotenv import load_dotenv import os load_dotenv() # 1. 初始化记忆。它将自动保存对话历史。 memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) # 2. 准备工具和模型 tools [get_current_weather, get_weather_forecast] llm ChatOpenAI(modelgpt-3.5-turbo, temperature0, api_keyos.getenv(OPENAI_API_KEY)) prompt hub.pull(hwchase17/react-chat) # 3. 创建Agent。注意提示词模板需要支持chat_history变量。 agent create_react_agent(llm, tools, prompt) # 4. 创建执行器并传入memory agent_executor AgentExecutor( agentagent, toolstools, memorymemory, # 关键注入记忆 verboseTrue, handle_parsing_errorsTrue, max_iterations5 ) # 测试记忆功能 questions [ 我来自杭州。, 今天的天气如何, # 这里城市信息缺失但Agent可能从上下文中知道问的是“杭州” 我更喜欢哪个城市 # 测试它是否记得“杭州” ] for q in questions: print(f\n你: {q}) # 注意invoke的参数变了因为memory会自动管理chat_history result agent_executor.invoke({input: q}) print(fAgent: {result[output]}) # 查看当前记忆内容 print(\n--- 当前记忆内容 ---) print(memory.load_memory_variables({}))运行后你会发现当被问及“今天的天气如何”时由于上下文提到了“杭州”Agent可能会尝试查询杭州的天气尽管我们的工具可能不会主动使用上下文中的城市这取决于提示词和模型的理解。记忆模块保存了完整的对话记录。5.2 长期记忆与向量存储Vector Store对于需要记住大量知识如文档内容、产品信息的场景我们需要“长期记忆”。通常使用向量数据库来实现。原理将文本转换为向量嵌入存储起来。当查询时将查询语句也转换为向量并寻找最相似的存储向量从而实现语义搜索。我们使用ChromaDB一个轻量级向量数据库和OpenAI的嵌入模型来演示。# long_term_memory.py from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_community.vectorstores import Chroma from langchain.memory import VectorStoreRetrieverMemory from langchain.docstore import InMemoryDocstore from langchain.agents import create_react_agent, AgentExecutor from langchain import hub from dotenv import load_dotenv import os load_dotenv() # 1. 初始化嵌入模型用于将文本转为向量 embeddings_model OpenAIEmbeddings(api_keyos.getenv(OPENAI_API_KEY)) # 2. 初始化向量数据库Chroma # 为了简化我们使用内存存储。生产环境应持久化到磁盘。 vectorstore Chroma( embedding_functionembeddings_model, persist_directory./chroma_db, # 指定持久化目录 collection_nameagent_memory ) # 3. 创建基于向量检索的记忆 retriever vectorstore.as_retriever(search_kwargsdict(k2)) # 检索最相似的2条 memory VectorStoreRetrieverMemory(retrieverretriever) # 4. 先向记忆中添加一些“知识” knowledge_texts [ 项目负责人张三喜欢喝美式咖啡。, 我们的产品‘智能助手’的最新版本是v2.1.0。, 每周三下午3点有团队技术分享会。, 服务器的SSH密钥存放在安全的密码管理器中。 ] # 将知识存入向量库这模拟了学习过程 vectorstore.add_texts(knowledge_texts) # 5. 创建Agent使用一个简单的计算器工具示例 from langchain.agents import tool tool def calculator(expression: str) - str: 计算一个数学表达式如‘23*4’。只支持基本四则运算。 try: # 警告使用eval有安全风险此处仅用于演示。生产环境应用安全计算库。 return str(eval(expression)) except: return 无法计算该表达式。 tools [calculator] llm ChatOpenAI(modelgpt-3.5-turbo, temperature0, api_keyos.getenv(OPENAI_API_KEY)) prompt hub.pull(hwchase17/react-chat) agent create_react_agent(llm, tools, prompt) agent_executor AgentExecutor( agentagent, toolstools, memorymemory, verboseTrue, handle_parsing_errorsTrue ) # 6. 测试长期记忆 queries [ 张三喜欢喝什么咖啡, # 应能从记忆中检索到 计算一下2的10次方。, # 需要调用计算器工具 我们产品的版本号是多少, # 应能从记忆中检索到 ] for q in queries: print(f\n你: {q}) result agent_executor.invoke({input: q}) print(fAgent: {result[output]})这个Agent现在拥有了从向量数据库中检索相关知识的能力。当被问到关于“张三”或“产品版本”的问题时它会先从长期记忆中搜索相关信息再结合工具和模型推理来回答。6. 构建复杂Agent系统规划与多Agent协作对于更复杂的任务单个Agent可能力不从心。我们可以引入“规划”和“多Agent协作”的概念。6.1 使用Plan-and-Execute模式这种模式将一个主“规划Agent”和多个“执行Agent”分开。规划Agent负责制定高级计划执行Agent负责具体步骤。# plan_and_execute_agent.py from langchain_openai import ChatOpenAI from langchain_experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner from langchain.agents import Tool from datetime import datetime from dotenv import load_dotenv import os load_dotenv() # 1. 定义几个工具 def get_time(*args, **kwargs) - str: 获取当前日期和时间。 return f当前时间是: {datetime.now().strftime(%Y-%m-%d %H:%M:%S)} def search_web(query: str) - str: 模拟根据查询词进行网页搜索。返回模拟结果。 # 模拟搜索真实场景可集成SerperAPI、Google Search等 return f关于{query}的模拟搜索结果相关文章1相关文章2。 def calculate(expression: str) - str: 计算数学表达式。 try: return f计算结果: {eval(expression)} except: return 计算错误。 # 将函数包装成LangChain Tool对象 time_tool Tool(nameGetCurrentTime, funcget_time, description获取当前的日期和时间。) search_tool Tool(nameWebSearch, funcsearch_web, description用于搜索互联网信息。输入一个搜索查询词。) calc_tool Tool(nameCalculator, funccalculate, description计算数学表达式。输入一个字符串如23*4。) tools [time_tool, search_tool, calc_tool] # 2. 初始化模型 llm ChatOpenAI(modelgpt-3.5-turbo, temperature0, api_keyos.getenv(OPENAI_API_KEY)) # 3. 创建规划器Planner和执行器Executor planner load_chat_planner(llm) executor load_agent_executor(llm, tools, verboseTrue) # 4. 创建PlanAndExecute代理 agent PlanAndExecute(plannerplanner, executorexecutor, verboseTrue) # 5. 运行一个复杂任务 complex_task 请先搜索一下‘LangChain最新进展’然后告诉我现在的时间最后计算(1525)*2的值。 try: result agent.run(complex_task) print(f\n最终结果:\n{result}) except Exception as e: print(f执行出错: {e})运行后你会看到系统先制定一个计划如1. 搜索。2. 获取时间。3. 计算。然后按顺序执行每个步骤。这适合需要严格顺序或步骤间依赖的任务。6.2 多Agent协作CrewAI示例对于需要不同专业角色协作的任务可以使用多Agent框架如CrewAI。它允许你定义多个具备特定角色、目标和工具的Agent并让它们在一个“流程”中协同工作。首先安装CrewAIpip install crewai# multi_agent_crew.py from crewai import Agent, Task, Crew, Process from langchain_openai import ChatOpenAI import os from dotenv import load_dotenv load_dotenv() # 设置LLMCrewAI默认使用OpenAI os.environ[OPENAI_API_KEY] os.getenv(OPENAI_API_KEY) llm ChatOpenAI(modelgpt-3.5-turbo, temperature0.7) # 1. 定义第一个Agent研究员 researcher Agent( role资深技术研究员, goal针对给定的技术主题进行深入调研并找出最新、最关键的5个信息点, backstory你是一位在科技行业有十年经验的研究员擅长从海量信息中提炼精华。, verboseTrue, # 打印思考过程 allow_delegationFalse, # 不允许委托任务给其他Agent llmllm ) # 2. 定义第二个Agent内容写手 writer Agent( role技术内容写手, goal根据研究员提供的信息点撰写一篇结构清晰、通俗易懂的技术博客大纲, backstory你是一位受欢迎的科技博客作者擅长将复杂的技术概念转化为普通人能看懂的内容。, verboseTrue, allow_delegationFalse, llmllm ) # 3. 为研究员定义任务 research_task Task( description调研主题AI Agent在2024年的主要发展趋势和挑战。, expected_output一份包含5个关键点的清单每个点有简要说明。, agentresearcher ) # 4. 为写手定义任务依赖研究员的任务输出 write_task Task( description基于研究员提供的5个关键点创作一篇博客文章的大纲。大纲需包含标题、引言、每个关键点的展开小节含子标题和结论。, expected_output一篇完整的博客文章大纲Markdown格式。, agentwriter ) # 5. 组建团队定义协作流程顺序执行 crew Crew( agents[researcher, writer], tasks[research_task, write_task], processProcess.sequential, # 顺序执行研究员做完写手再做 verbose2 # 输出详细日志 ) # 6. 启动团队执行任务 result crew.kickoff() print(\n *50) print(最终产出博客大纲:) print(*50) print(result)这个例子展示了如何创建两个具有不同角色和目标的Agent并通过任务链让它们协作完成一个从调研到写作的完整流程。CrewAI还支持分层、轮询等更复杂的流程。7. 常见问题与排查思路在开发AI Agent过程中你一定会遇到各种问题。以下是一些高频问题及其解决方案。问题现象可能原因排查与解决思路AgentExecutor陷入无限循环或达到最大迭代次数1. 工具描述不清晰Agent无法正确选择。2. 任务过于复杂或模糊Agent无法规划出终止步骤。3. 模型temperature过高导致决策不稳定。1.检查工具描述确保tool装饰器下的文档字符串清晰、准确说明输入输出。2.简化任务/提供示例在提示词中给Agent一个任务完成的示例。3.调整参数降低temperature如设为0减少随机性。设置max_iterations如5-10并启用early_stopping_method。4.增强提示词在系统提示中明确告诉Agent“当你认为已经得到最终答案时请用‘Final Answer:’开头输出”。KeyError: ‘input‘或类似变量错误传递给agent_executor.invoke的参数字典缺少必需的键如input,chat_history。1.检查提示词模板使用hub.pull拉取的模板有其固定的输入变量要求。用prompt.input_variables查看需要哪些变量。2.匹配输入确保invoke传入的字典键与input_variables一致。例如react-chat模板通常需要input和chat_history。工具调用失败报函数参数错误1. Agent生成的“Action Input”格式与工具函数参数不匹配。2. 工具函数参数类型声明与实际接收不符。1.使用handle_parsing_errorsTrue让执行器能尝试从解析错误中恢复。2.简化工具输入尽量让工具只接受一个字符串参数。在工具函数内部进行解析如用json.loads。3.提供更详细的工具描述在描述中明确说明输入格式例如“输入应该是一个城市名称的字符串”。API调用超时或网络错误1. OpenAI API密钥无效或余额不足。2. 网络连接问题。3. 请求速率超限。1.验证API密钥在OpenAI平台检查密钥状态和余额。2.添加重试机制使用tenacity库或LangChain的Retry回调。3.降低请求频率在代码中添加time.sleep或使用异步调用。向量记忆检索不到相关内容1. 嵌入模型不适合或质量差。2. 检索器配置的k值太小。3. 存入的知识文本与查询语句语义不匹配。1.尝试不同的嵌入模型如text-embedding-3-small。2.调整检索参数增大search_kwargsdict(k5)中的k值。3.优化知识文本存入时使用更完整、表述更清晰的句子。查询时也可以尝试改写。Agent表现“愚蠢”不理解简单指令1. 使用的底层LLM能力不足如gpt-3.5-turbo对复杂任务力不从心。2. 提示词Prompt设计不佳。1.升级模型尝试gpt-4-turbo等更强模型。2.优化提示工程在系统提示中明确角色、规则和输出格式。提供少量示例Few-shot。3.简化任务将大任务拆解通过规划器或多Agent协作来完成。8. 最佳实践与工程化建议当你准备将AI Agent投入生产环境时以下建议能帮助你构建更稳健、可维护的系统。8.1 提示词工程提示词是Agent的“指挥棒”。角色定义清晰在系统提示中明确Agent的角色、职责和边界。例如“你是一个专业的天气查询助手只能回答与天气相关的问题...”。格式化输出要求Agent以特定格式如JSON、Markdown列表输出便于后续程序解析。提供示例在提示词中包含1-2个完整的思考过程示例Few-shot Learning能显著提升Agent在复杂任务上的表现。分步骤思考鼓励Agent“一步一步思考”对于需要推理的任务可以要求其先输出“Thought:”再输出“Action:”。8.2 工具设计与管理单一职责每个工具应只做一件事并且做好。避免设计功能混杂的“巨无霸”工具。健壮性工具函数内部必须有完善的错误处理try-except返回清晰的错误信息而不是抛出异常导致整个Agent崩溃。输入验证在工具函数开头验证输入参数的类型和范围。工具注册表当工具数量增多时建议创建一个中心化的工具注册模块方便管理和更新。8.3 性能与成本优化上下文长度管理对话记忆和向量检索都可能增加上下文长度导致API调用成本上升和速度变慢。定期总结或清理过长的对话历史。缓存对频繁且结果不变的查询如城市信息、静态知识使用缓存如langchain.cache。异步调用如果Agent需要并行调用多个独立工具使用异步Async模式可以大幅减少等待时间。模型选择根据任务复杂度选择合适的模型。简单的分类、提取任务可用小模型复杂的规划、创作任务再用大模型。8.4 可观测性与监控日志记录详细记录Agent的每一步思考、工具调用和结果。verboseTrue是调试利器生产环境可将其输出到结构化日志系统如JSON Logger。链路追踪使用像LangSmith这样的平台可以可视化Agent的执行链方便调试和优化。关键指标监控平均响应时间、工具调用成功率、Token消耗量、任务完成率等。8.5 安全与合规权限控制为工具划分权限等级。例如读写数据库的工具和发送邮件的工具应比查询工具有更严格的调用控制。可以在Agent执行前加入权限校验层。输入过滤对用户输入和工具输入进行清洗和过滤防止Prompt注入攻击。敏感信息确保API密钥、数据库密码等绝不硬编码在代码中使用.env文件或专业的密钥管理服务。内容审核在Agent最终输出前可加入一层内容安全审核调用审核API或使用关键词过滤避免产生不当内容。从理解AI Agent的核心概念到搭建环境、创建第一个工具化Agent再到为其添加记忆、实现规划与多Agent协作我们完成了一次完整的开发旅程。关键在于理解“感知-规划-行动”的循环并善用LangChain这类框架来组装大脑、记忆和工具。下一步你可以集成真实工具将示例中的模拟天气API替换为真实的第三方API如和风天气、OpenWeatherMap。探索更多工具尝试集成SerperAPI搜索、WolframAlpha计算与知识、GitHub API等打造功能更强大的Agent。尝试本地模型使用Ollama运行本地LLM如Llama 3、Qwen降低成本和延迟。构建Web界面使用Gradio或Streamlit快速为你的Agent创建一个聊天交互界面。深入研究架构学习ReAct、Chain-of-Thought等提示范式以及AutoGen、CrewAI等多Agent框架。AI Agent的开发是一个快速迭代和实践的过程。最好的学习方式就是动手做一个自己的项目比如一个个人学习助手、一个自动化客服原型或者一个智能数据分析Agent。在真实问题中你会遇到更多挑战也会对这套技术有更深的理解。

最新新闻

日新闻

周新闻

月新闻