AI Agent开发实战:从零构建智能体,掌握LangChain核心组件与应用 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度最近在技术社区和招聘市场上AI Agent 的热度持续攀升无论是自动化办公、智能客服还是复杂业务流程编排Agent 都展现出了巨大的潜力。然而很多开发者在入门时面对零散的概念、复杂的框架和快速迭代的工具链常常感到无从下手网上资料要么过于理论化要么就是“Hello World”级别的简单示例距离实际项目落地还有很长的距离。本文旨在为你提供一份从零到一的 AI Agent 开发实战指南。我们将从一个具体的业务场景出发手把手带你搭建一个具备自主决策和工具调用能力的智能 Agent。内容涵盖核心概念、主流框架选择、环境搭建、代码实现、调试技巧以及生产级最佳实践。无论你是刚接触 AI 应用开发的新手还是希望将 Agent 技术融入现有系统的开发者都能从中获得可直接复用的代码和清晰的工程思路。1. AI Agent 核心概念与价值在深入代码之前我们有必要厘清几个关键概念这能帮助我们在后续开发中做出更明智的技术选型和架构设计。1.1 什么是 AI Agent简单来说AI Agent智能体是一个能够感知环境、自主决策并执行行动以实现特定目标的软件实体。它不同于传统的“输入-输出”式AI模型如简单的文本生成其核心在于“思考-行动”循环。一个典型的 Agent 工作流程可以概括为感知Perception接收来自用户、系统或其他 Agent 的输入如自然语言指令、API 返回的数据。规划与决策Planning Decision Making基于内部状态记忆、知识和输入利用大语言模型LLM进行推理决定下一步该做什么。这可能包括调用一个工具、向用户提问、或者直接生成回答。行动Action执行决策例如调用一个外部 API工具、运行一段代码、或操作数据库。观察Observation获取行动的结果并将其作为新的输入反馈给决策环节进入下一个循环。1.2 为什么需要 Agent 框架你可能会问我直接调用 LLM 的 API然后自己写逻辑去解析它的回复并调用工具不也能实现吗理论上可以但这会带来巨大的工程复杂度提示工程复杂需要精心设计提示词Prompt来让 LLM 理解工具调用格式、处理历史对话、管理任务状态。状态管理困难Agent 通常是多轮对话和长期任务如何高效地存储和检索对话历史、工具调用结果等“记忆”是一大挑战。工具编排繁琐手动注册、描述、调用和验证多个工具的输出代码会变得冗长且难以维护。错误处理与鲁棒性需要处理 LLM 输出格式错误、工具调用失败、超时等各种异常情况。因此使用成熟的 Agent 框架如 LangChain、LlamaIndex、AutoGen 等可以极大地降低开发门槛它们提供了标准化的组件如记忆模块、工具抽象、执行引擎让我们能更专注于业务逻辑本身。1.3 典型应用场景了解场景有助于我们设计更贴合需求的 Agent自动化办公自动阅读邮件、总结会议纪要、生成周报、安排日程。数据分析助手理解自然语言问题自动查询数据库、生成图表并解读。智能客服与导购不仅回答问题还能主动执行操作如查询订单、办理退换货、推荐商品。研发助手根据需求自动生成代码、运行测试、修复 Bug、部署应用。游戏 NPC拥有长期记忆和个性化行为模式的非玩家角色。2. 环境准备与框架选型工欲善其事必先利其器。我们将选择一个主流、活跃且文档丰富的框架来开始我们的旅程。2.1 框架对比与选择目前主流的 Python Agent 框架主要有以下几个LangChain/LangGraph: 生态最丰富社区最活跃组件化程度高适合构建复杂的、有状态的 Agent 工作流。学习曲线相对陡峭。LlamaIndex: 最初专注于检索增强生成RAG现在也提供了强大的 Agent 功能尤其在处理私有数据和文档方面有优势。AutoGen (by Microsoft): 专注于多智能体对话和协作适合需要多个 Agent 相互通信、辩论、协作完成任务的场景。Semantic Kernel (by Microsoft): 更偏向于将 AI 能力作为“插件”集成到传统应用中支持多种编程语言。我们的选择对于从零开始的综合教程LangChain是最佳选择。它提供了最完整的抽象和最广泛的应用案例学会了 LangChain再迁移到其他框架也会更容易。本文将基于 LangChain 的最新稳定版进行讲解。2.2 基础环境搭建请确保你的开发环境满足以下要求Python 版本: 推荐使用 Python 3.10 或 3.11。避免使用最新的 3.12因为某些依赖可能尚未完全兼容。python --version # 输出应为 Python 3.10.x 或 3.11.x创建虚拟环境强烈建议使用虚拟环境来隔离项目依赖。# 使用 venv python -m venv venv_ai_agent # 激活虚拟环境 # Windows: .\venv_ai_agent\Scripts\activate # Linux/Mac: source venv_ai_agent/bin/activate安装核心依赖我们将安装 LangChain 及其 OpenAI 集成包因为我们使用 GPT 系列模型作为 LLM 核心。同时安装python-dotenv来管理环境变量如 API Key。pip install langchain langchain-openai python-dotenv这里安装的是langchain核心包和langchain-openai这个官方维护的 OpenAI 集成包。langchain-community包含了许多社区贡献的工具和集成如果需要也可以安装。2.3 获取并配置 API Key本文示例将使用 OpenAI 的 GPT 模型如 gpt-3.5-turbo。你需要一个有效的 OpenAI API Key。访问 OpenAI Platform 并登录。在 API Keys 页面创建新的密钥。重要永远不要将 API Key 硬编码在代码中或提交到版本控制系统如 Git。在项目根目录创建一个名为.env的文件并写入你的密钥# .env 文件 OPENAI_API_KEY你的-openai-api-key-在这里然后在代码中通过python-dotenv加载from dotenv import load_dotenv load_dotenv() # 这会从 .env 文件加载环境变量到 os.environ # 现在可以通过 os.getenv(OPENAI_API_KEY) 获取3. LangChain 核心组件深度解析在动手构建 Agent 之前我们需要理解 LangChain 的几个核心抽象。它们是构建块的基石。3.1 LLM (大语言模型)这是 Agent 的“大脑”。LangChain 通过ChatOpenAI类来封装与 OpenAI 聊天模型的交互。from langchain_openai import ChatOpenAI # 初始化一个 LLM 实例 llm ChatOpenAI( modelgpt-3.5-turbo, # 指定模型也可以是 gpt-4, gpt-4-turbo-preview 等 temperature0.7, # 控制输出的随机性0.0最确定1.0最随机 api_keyos.getenv(OPENAI_API_KEY) # 从环境变量读取更安全的方式是让 ChatOpenAI 自动读取 ) # 更简单的初始化会自动查找 OPENAI_API_KEY 环境变量 llm ChatOpenAI(modelgpt-3.5-turbo, temperature0.7) # 调用 LLM response llm.invoke(你好世界) print(response.content) # 输出模型回复的文本内容3.2 PromptTemplate (提示词模板)为了让 LLM 理解我们的任务和上下文我们需要精心设计提示词。PromptTemplate 帮助我们将变量动态地插入到固定的提示词结构中。from langchain.prompts import PromptTemplate # 创建一个带变量的模板 template 你是一个专业的{role}。 请根据用户的问题提供详细且准确的回答。 用户问题{question} prompt_template PromptTemplate.from_template(template) # 使用变量填充模板生成最终的提示词 filled_prompt prompt_template.format(rolePython 编程专家, question如何优雅地处理文件读写) print(filled_prompt) # 然后将 filled_prompt 传给 llm.invoke()3.3 Chains (链)链是将多个组件LLM、提示词、工具等按顺序组合起来的工作流。最简单的链是LLMChain。from langchain.chains import LLMChain # 将提示词模板和 LLM 组合成链 chain LLMChain(llmllm, promptprompt_template) # 运行链直接传入变量字典 result chain.invoke({role: 数据分析师, question: 销售额下降的可能原因有哪些}) print(result[text]) # chain.invoke 返回一个字典其中 text 是 LLM 的输出3.4 Tools (工具)工具是 Agent 与外界交互的“手”和“脚”。一个工具本质上是一个函数有明确的名称、描述和参数。LLM 根据描述决定是否以及如何调用它。from langchain.agents import tool from datetime import datetime tool def get_current_time(timezone: str Asia/Shanghai) - str: 获取指定时区的当前时间。当用户询问时间、日期或安排时使用此工具。 # 这里简化处理实际应用中应使用 pytz 或 zoneinfo 库 if timezone Asia/Shanghai: fmt %Y-%m-%d %H:%M:%S else: fmt %Y-%m-%d %H:%M:%S UTC current_time datetime.now().strftime(fmt) return f当前时间{timezone}是{current_time} tool def calculate_bmi(weight_kg: float, height_m: float) - str: 计算身体质量指数BMI。输入体重公斤和身高米。 bmi weight_kg / (height_m ** 2) category 偏瘦 if bmi 18.5 else 正常 if bmi 24 else 偏胖 if bmi 28 else 肥胖 return f您的 BMI 是 {bmi:.1f}属于{category}范围。 # 工具列表 tools [get_current_time, calculate_bmi]每个工具都必须有清晰的文档字符串 ... 因为 LLM 就是靠这个描述来理解工具功能的。3.5 Agents (智能体)Agent 是协调一切的核心。它使用 LLM 来决定在给定输入和一系列可用工具的情况下下一步该做什么。LangChain 提供了多种 Agent 类型如ZERO_SHOT_REACT_DESCRIPTION,OPENAI_FUNCTIONS,STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION等。OPENAI_FUNCTIONS类型与 OpenAI 的 Function Calling 特性深度集成是目前最稳定和推荐的方式。from langchain.agents import create_openai_functions_agent, AgentExecutor from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder # 1. 定义提示词。注意 MessagesPlaceholder 用于存放对话历史。 prompt ChatPromptTemplate.from_messages([ (system, 你是一个乐于助人的助手可以回答问题和使用工具。), MessagesPlaceholder(variable_namechat_history), # 历史消息占位符 (human, {input}), MessagesPlaceholder(variable_nameagent_scratchpad), # Agent 思考过程占位符 ]) # 2. 创建 Agent agent create_openai_functions_agent(llmllm, toolstools, promptprompt) # 3. 创建 Agent 执行器它负责运行思考-行动循环 agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, # 设置为 True 可以看到 Agent 的思考过程调试非常有用 handle_parsing_errorsTrue, # 处理 LLM 输出解析错误 max_iterations5, # 限制最大循环次数防止死循环 )4. 实战构建一个多功能个人助理 Agent现在让我们综合运用以上组件构建一个能查询时间、计算 BMI、并进行简单网络搜索模拟的个人助理。4.1 项目结构ai_personal_assistant/ ├── .env # 环境变量文件不要提交到 Git ├── .gitignore # Git 忽略文件 ├── requirements.txt # 项目依赖 ├── assistant.py # 主程序文件 └── tools/ # 自定义工具目录可选 └── web_search.pyrequirements.txt内容langchain0.1.0 langchain-openai0.0.5 python-dotenv1.0.0 requests2.31.0 # 用于模拟网络搜索4.2 实现自定义工具模拟网络搜索为了演示更复杂的工具我们创建一个模拟搜索工具。在生产环境中你可以替换为真实的 SerpAPI、Google Search API 等。创建tools/web_search.py# tools/web_search.py import requests from langchain.tools import tool tool def search_web(query: str, max_results: int 3) - str: 在互联网上搜索信息。当用户询问需要最新或外部知识的问题时使用此工具。 参数: query: 搜索关键词。 max_results: 返回的最大结果数。 返回: 一个格式化的字符串包含搜索到的摘要信息。 # 注意这是一个模拟函数。实际应用中你需要使用合法的搜索API如SerpAPI。 # 这里我们用一个模拟的、固定的响应来演示。 print(f[工具调用] 正在搜索: {query}) # 用于调试 # 模拟根据查询返回不同结果 simulated_results { 今天的天气: 根据模拟数据北京今天晴气温15-25°C南风2级。, 最新的AI新闻: 1. OpenAI 发布新模型。2. 某公司开源多模态大模型。3. AI 立法讨论升温。, Python 教程: Python 是一种高级编程语言以简洁易读著称。推荐官方文档和菜鸟教程。, } # 查找最匹配的模拟查询 for key in simulated_results: if key in query or query in key: return f搜索 {query} 的结果\n{simulated_results[key]} # 默认返回 return f搜索 {query} 完成。共找到约 {max_results} 条相关结果模拟。\n提示这是一个模拟工具实际开发请接入真实搜索API。4.3 编写主助理程序创建assistant.py# assistant.py import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain.agents import create_openai_functions_agent, AgentExecutor from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain.memory import ConversationBufferMemory # 导入自定义工具 from tools.web_search import search_web # 假设之前定义的 get_current_time 和 calculate_bmi 也放在 tools/ 目录下 from tools.basic_tools import get_current_time, calculate_bmi # 1. 加载环境变量 load_dotenv() # 2. 初始化 LLM llm ChatOpenAI( modelgpt-3.5-turbo, temperature0.2, # 对于执行具体任务的 Agent温度可以设低一些输出更稳定 api_keyos.getenv(OPENAI_API_KEY) ) # 3. 定义工具列表 tools [get_current_time, calculate_bmi, search_web] # 4. 创建提示词模板 prompt ChatPromptTemplate.from_messages([ (system, 你是一个多功能个人助理名字叫“小智”。你性格友好、专业且乐于助人。 你的能力包括 1. 回答一般性知识问题。 2. 查询当前时间。 3. 计算身体质量指数BMI。 4. 在互联网上搜索最新信息模拟。 请根据用户的问题判断是否需要使用工具。如果使用工具请严格按照工具描述输入正确的参数。 如果用户的问题超出你的能力范围请礼貌地告知。 你的所有回复请使用中文。), MessagesPlaceholder(variable_namechat_history), # 历史对话 (human, {input}), MessagesPlaceholder(variable_nameagent_scratchpad), ]) # 5. 创建记忆Memory来存储对话历史 memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) # 6. 创建 Agent agent create_openai_functions_agent(llmllm, toolstools, promptprompt) # 7. 创建 Agent 执行器 agent_executor AgentExecutor( agentagent, toolstools, memorymemory, # 注入记忆 verboseTrue, # 开启详细日志观察思考过程 handle_parsing_errorsTrue, max_iterations4, early_stopping_methodgenerate, # 当 Agent 认为任务完成时提前停止 ) # 8. 运行交互循环 def run_assistant(): print(个人助理小智已启动输入 退出 或 quit 结束对话。) print(- * 40) while True: try: user_input input(\n你: ) if user_input.lower() in [退出, quit, exit]: print(小智: 再见期待下次为您服务。) break if not user_input.strip(): continue # 调用 Agent 执行器 response agent_executor.invoke({input: user_input}) print(f\n小智: {response[output]}) except KeyboardInterrupt: print(\n\n对话被中断。) break except Exception as e: print(f\n抱歉出错了: {e}) # 可以选择记录日志 if __name__ __main__: run_assistant()4.4 运行与验证确保你的.env文件已正确配置OPENAI_API_KEY。在项目根目录下运行python assistant.py你将看到类似以下的交互过程verboseTrue会打印思考过程个人助理小智已启动输入 退出 或 quit 结束对话。 ---------------------------------------- 你: 现在几点了 进入新的 Agent 执行链... 我可以用 get_current_time 工具来获取当前时间。 调用: get_current_time with {} [工具调用] 正在获取时间... 观察结果: 当前时间Asia/Shanghai是2024-05-27 14:30:15 思考: 用户问现在几点我已经通过工具获取了上海时间可以直接回答。 小智: 现在是北京时间 2024年5月27日 下午2点30分15秒。 你: 我体重70公斤身高1.75米帮我算下BMI。 进入新的 Agent 执行链... 用户提供了体重和身高我可以使用 calculate_bmi 工具。 调用: calculate_bmi with {weight_kg: 70.0, height_m: 1.75} 观察结果: 您的 BMI 是 22.9属于正常范围。 思考: 我已经计算出了 BMI 结果并给出了分类。可以直接回复用户。 小智: 根据计算您的 BMI 指数为 22.9处于“正常”范围很棒哦 你: 今天天气怎么样 进入新的 Agent 执行链... 天气是实时信息我需要使用 search_web 工具来查询。 调用: search_web with {query: 今天的天气} [工具调用] 正在搜索: 今天的天气 观察结果: 搜索 今天的天气 的结果 根据模拟数据北京今天晴气温15-25°C南风2级。 思考: 我已经搜索到了今天的天气信息可以告诉用户了。 小智: 根据最新信息北京今天天气晴朗气温在15到25摄氏度之间南风2级是个好天气呢 你: 我们刚才聊了什么 进入新的 Agent 执行链... 用户问的是对话历史。我不需要调用工具直接从记忆里回顾。 小智: 我们刚才的对话内容如下 1. 您询问了当前时间我告诉您是北京时间2024年5月27日下午2点30分15秒。 2. 您提供了体重70公斤和身高1.75米我为您计算出BMI为22.9属于正常范围。 3. 您询问了今天的天气我搜索后告知您北京晴气温15-25°C。 你: 退出 小智: 再见期待下次为您服务。关键点验证工具调用Agent 成功识别了需要工具的场景并选择了正确的工具。参数传递对于calculate_bmi它能从自然语言中提取出weight_kg70和height_m1.75并正确调用。记忆功能当被问及历史对话时它能从ConversationBufferMemory中提取信息并总结。流程控制max_iterations和early_stopping_method防止了无限循环。5. 常见问题与深度排查指南在实际开发中你一定会遇到各种问题。以下是高频问题及其解决方案。5.1 Agent 不调用工具直接回答现象对于明显应该使用工具的问题如“现在几点”Agent 却用 LLM 的内部知识直接生成一个虚构的答案。原因与排查工具描述不清检查工具的文档字符串 ... 。描述必须清晰、具体说明工具的精确用途和参数格式。LLM 完全依赖这个描述。提示词System Prompt引导不足在 System Prompt 中明确指令例如“你必须使用工具来获取实时信息如时间、天气、计算等。不要凭空猜测。”LLM 温度Temperature过高过高的temperature如 0.8会增加输出的随机性可能导致它“忘记”使用工具。对于任务型 Agent建议设置在 0.1 到 0.3 之间。模型能力限制gpt-3.5-turbo在复杂工具调用上可能不如gpt-4系列稳定。如果问题持续尝试升级模型。5.2 工具调用参数解析错误现象Agent 决定调用工具但传入的参数格式错误、类型不对或缺失导致工具函数执行失败。原因与排查参数类型标注确保工具函数的参数有明确的类型提示如query: str,weight_kg: float。LangChain/OpenAI 会利用这些信息来指导 LLM 生成正确的参数。使用STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTIONAgent 类型对于参数复杂的工具可以尝试使用此类型的 Agent它对结构化输出支持更好。from langchain.agents import create_structured_chat_agent # ... 需要配合对应的 ChatPromptTemplate在提示词中提供示例Few-Shot在 System Prompt 中加入一两个工具调用的成功示例教导 LLM 如何格式化参数。5.3 无限循环或迭代次数过多现象Agent 在一个简单问题上反复调用工具始终无法给出最终答案。原因与排查设置max_iterations如示例所示这是必须的安全阀。一般设为 3-10根据任务复杂度调整。检查工具返回值工具的返回值应该是清晰、完整且能被 LLM 理解的。如果返回“错误”或“未找到”LLM 可能会尝试其他工具或重新调用导致循环。确保工具在失败时也返回结构化的错误信息。启用early_stopping_method设置为generate让 Agent 在认为自己有足够信息回答时主动停止工具调用循环。观察verbose日志这是最重要的调试手段。查看 LLM 的“思考”步骤看它是否误解了工具的结果或任务目标。5.4 记忆Memory不工作或混乱现象Agent 记不住之前的对话或者把不同会话的记忆混在一起。原因与排查正确注入 Memory确保将memory对象同时传递给AgentExecutor的memory参数和提示词中的MessagesPlaceholder。两者缺一不可。选择合适的 Memory 类型ConversationBufferMemory存储所有历史消息简单但可能过长。ConversationBufferWindowMemory只保留最近 K 轮对话避免上下文过长。ConversationSummaryMemory用 LLM 总结历史对话节省 token。VectorStoreRetrieverMemory将记忆存入向量数据库实现基于语义的检索。管理对话会话在 Web 应用中你需要为每个用户/会话创建独立的memory和agent_executor实例避免交叉污染。5.5 处理解析错误和网络异常现象handle_parsing_errorsTrue虽然能防止程序崩溃但可能返回不友好的错误信息。优化方案自定义错误处理逻辑。from langchain.agents import AgentExecutor from langchain.schema import AgentFinish, OutputParserException class RobustAgentExecutor(AgentExecutor): def _call(self, inputs, run_managerNone): try: return super()._call(inputs, run_manager) except OutputParserException as e: # 处理LLM输出无法解析为工具调用的错误 return {output: f抱歉我有点困惑。让我们重新开始。您能换种方式问一下吗(解析错误: {e})} except Exception as e: # 处理其他错误如网络超时、工具异常等 # 可以在这里加入日志记录 print(fAgent 执行异常: {e}) return {output: 系统暂时出了点小问题请稍后再试或简化您的问题。} # 使用自定义的执行器 agent_executor RobustAgentExecutor( agentagent, toolstools, memorymemory, verboseTrue, max_iterations5, )6. 生产环境最佳实践与进阶方向当你准备将 Agent 投入实际项目时以下实践至关重要。6.1 配置管理与安全密钥管理永远不要硬编码 API Key。使用环境变量、密钥管理服务如 AWS Secrets Manager, HashiCorp Vault或云厂商提供的配置服务。配置分离将模型类型、温度、最大 token 数等参数提取到配置文件如config.yaml或settings.py中便于不同环境开发、测试、生产切换。访问控制如果你的工具涉及敏感操作如数据库写操作、发送邮件必须在工具函数内部实现严格的权限校验不要依赖 LLM 来判断。6.2 性能与成本优化模型选择平衡效果与成本。gpt-3.5-turbo适合大多数对话和简单任务gpt-4用于复杂推理和规划。关注 OpenAI 的 定价页面 。上下文长度管理对话历史记忆是消耗 Token 的大户。使用ConversationBufferWindowMemory或ConversationSummaryMemory来控制上下文长度。对于超长文档考虑使用 RAG检索增强生成技术只注入相关片段。缓存对于频繁且结果不变的查询如某些知识库问答可以使用LangChain的Cache组件如InMemoryCache,RedisCache来缓存 LLM 响应显著降低成本和延迟。异步调用如果 Agent 需要并行调用多个工具或处理大量请求使用异步版本的AgentExecutor如arun,ainvoke来提高吞吐量。6.3 可观测性与监控全面日志记录记录每个用户请求、Agent 的思考过程、工具调用详情输入、输出、耗时、最终响应以及任何错误。这对于调试和优化不可或缺。链路追踪Tracing使用 LangSmithLangChain 官方平台或其他 APM 工具如 OpenTelemetry来可视化整个 Agent 工作流的执行链路分析瓶颈和错误。关键指标监控延迟请求总耗时、LLM 调用耗时、工具调用耗时。成本估算每个请求消耗的 Token 数和对应费用。成功率用户问题得到满意回答的比例。工具使用率各工具被调用的频率识别无用或问题工具。6.4 架构进阶智能路由与多智能体智能路由Router不是所有请求都需要完整的 Agent。你可以设计一个路由层先判断用户意图如果是简单问答 → 直接调用 LLM。如果需要查天气 → 调用专用的“天气查询链”。如果需要复杂规划和工具调用 → 启动完整的 Agent。 这可以提高响应速度和降低成本。多智能体系统对于极其复杂的任务可以设计多个各司其职的 Agent 进行协作。主管 Agent负责分解任务协调下属 Agent。研究 Agent专门负责搜索和收集信息。写作 Agent负责整理信息生成报告。评审 Agent负责检查报告质量。 可以使用AutoGen或LangGraphLangChain 的新库用于构建有状态、循环的图工作流来构建此类系统。6.5 测试与评估单元测试为每个工具函数编写单元测试确保其功能正确。集成测试模拟用户对话测试整个 Agent 工作流。可以使用pytest框架。评估Evaluation如何衡量 Agent 的好坏这很复杂。可以从以下几个方面入手正确性答案是否事实正确工具调用是否准确有用性回答是否解决了用户问题安全性是否拒绝了不当请求是否避免了有害输出人工评估初期必须引入人工评审来建立评估基准。构建一个稳定、高效、可靠的 AI Agent 是一个系统工程远不止调用一个 API 那么简单。它涉及提示工程、软件架构、异常处理、性能优化和持续监控。本文提供的实战示例和最佳实践是一个坚实的起点。接下来你可以尝试接入真实的工具如数据库、企业内部 API、优化记忆策略、或者探索更复杂的多智能体场景。记住迭代和测试是关键从小而精的功能开始逐步扩展其能力边界。 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度