行业资讯
📅 2026/8/23 11:42:39
从零构建AI智能体:基于LangChain的天气查询与信息检索助手开发实战
在实际 AI 应用开发中直接调用大模型 API 往往无法满足复杂业务需求。当任务涉及多步骤决策、工具调用或私有知识处理时一个能够自主规划、执行并利用外部资源的“智能体”就变得至关重要。智能体开发并非简单的 API 封装它涉及对任务的理解、工具的编排、记忆的管理以及异常的处理是连接大模型能力与具体业务场景的关键桥梁。本文面向有一定 Python 基础希望从零开始构建一个可运行、可扩展的智能体系统的开发者。我们将以构建一个能够查询天气、搜索信息并生成报告的智能体为例完整走通从环境搭建、框架选择、核心模块开发到部署测试的全流程。你将理解智能体Agent的核心架构掌握使用 LangChain 等主流框架进行开发的方法并了解如何集成 RAG 来增强智能体的知识处理能力。最终你将获得一个可以实际运行和迭代的智能体原型并具备将其应用于更复杂场景如数据分析、自动化流程等的基础。1. 理解智能体从“聊天”到“执行”的跨越在深入代码之前必须厘清几个核心概念。很多人将大模型对话等同于智能体这是第一个认知误区。智能体的核心特征是自主性和工具使用能力。1.1 智能体是什么不是什么智能体Agent是一个能够感知环境、自主决策并执行动作以实现目标的软件实体。在 LLM 语境下它通常指一个以大语言模型为“大脑”的系统这个系统可以理解用户意图将自然语言指令解析为可执行的任务。规划与决策将复杂任务拆解为一系列子步骤并决定每一步该调用哪个工具或直接回答。执行与工具调用根据决策调用预定义的工具如 API、函数、数据库查询来获取信息或执行操作。观察与迭代根据工具执行的结果评估是否达成目标若未达成则继续规划下一步。智能体不是一个简单的聊天机器人。后者通常只进行一轮对话而智能体具备多轮、有状态的交互能力并能主动使用外部工具来扩展其能力边界。1.2 智能体的核心组件一个典型的智能体系统包含以下关键组件理解它们对后续开发至关重要LLM Core大模型核心负责理解和生成语言是决策的来源。可以是 OpenAI GPT、 Anthropic Claude、国内的通义千问、智谱 GLM 等。Tools工具智能体可以调用的外部函数或 API。例如搜索引擎、计算器、数据库客户端、代码执行器、文件系统操作等。工具定义了智能体能“做什么”。Agent Executor代理执行器这是智能体的“调度中心”。它管理着 LLM、工具和记忆之间的交互流程。其工作流通常是将用户输入、历史对话和可用工具列表交给 LLMLLM 返回一个“思考-行动-观察”的循环指令执行器解析该指令调用对应工具并将工具结果作为新的“观察”反馈给 LLM直到 LLM 认为任务完成并给出最终答案。Memory记忆存储对话历史、工具调用结果等上下文信息。分为短期记忆如当前会话的对话历史和长期记忆如向量数据库存储的持久化知识。记忆让智能体能够进行连贯的多轮对话。Prompt Template提示词模板定义了与 LLM 交互的“剧本”。它告诉 LLM 你的角色、可用的工具、输出的格式要求等。一个设计良好的提示词模板是智能体稳定工作的前提。1.3 为什么需要 RAG 和微调RAG检索增强生成当智能体需要处理私有、实时或领域特定知识时仅靠 LLM 的预训练知识是不够的。RAG 通过将用户问题与外部知识库如向量数据库中的文档片段进行检索匹配并将相关片段作为上下文提供给 LLM从而生成更准确、更具事实依据的回答。例如一个公司内部客服智能体就需要 RAG 来查询产品手册和内部政策。微调Fine-tuning当通用 LLM 在特定任务格式、风格或领域知识上表现不佳时可以使用领域数据对模型参数进行微调。例如让模型更好地理解医疗报告的结构或法律文书的术语。微调能从根本上提升模型在特定任务上的能力但成本数据、算力较高。对于工具调用格式的标准化微调也很有帮助。在大多数业务智能体开发中优先使用 RAG 来补充知识在 RAG 无法满足对模型底层能力改造的需求时再考虑微调。2. 环境准备与核心工具选型在开始编码前我们需要搭建一个稳定的 Python 开发环境并选择适合的框架和工具。本教程将使用LangChain作为主要的智能体框架因为它生态成熟、社区活跃且抽象层次适中适合学习和原型开发。2.1 开发环境与 Python 配置建议使用 Python 3.9 或更高版本。使用虚拟环境管理依赖是必须的最佳实践。# 创建项目目录并进入 mkdir my_ai_agent cd my_ai_agent # 创建并激活虚拟环境 (以 venv 为例) python -m venv venv # Windows venv\Scripts\activate # Linux/macOS source venv/bin/activate # 升级 pip pip install --upgrade pip2.2 核心依赖安装我们将安装 LangChain 及其相关组件以及一个用于模拟工具调用的 HTTP 请求库。# 安装 LangChain 核心包和 OpenAI 集成 (我们将使用 OpenAI 模型作为示例) pip install langchain langchain-openai # 安装用于构建提示词和链的社区包 pip install langchain-community # 安装用于向量数据库和RAG的包这里以Chroma内存向量库为例轻量易用 pip install chromadb langchain-chroma # 安装用于网页内容提取的包用于后续工具示例 pip install beautifulsoup4 requests # 安装环境变量管理包用于安全存储API密钥 pip install python-dotenv2.3 模型 API 密钥配置为了调用大模型你需要准备相应的 API 密钥。以 OpenAI 为例你也可以替换为其他兼容 OpenAI API 的模型服务。在项目根目录创建.env文件。在.env文件中添加你的 API 密钥# .env 文件 OPENAI_API_KEYyour_openai_api_key_here # 如果需要其他服务如通义千问、智谱AI可类似添加 # DASHSCOPE_API_KEYyour_dashscope_key # ZHIPUAI_API_KEYyour_zhipuai_key在代码中通过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 环境变量)注意永远不要将 API 密钥硬编码在源代码中或提交到版本控制系统如 Git。.env文件应被添加到.gitignore中。2.4 框架与工具选型说明为什么选择 LangChain下表对比了常见的智能体开发框架框架/工具核心特点适用场景学习曲线LangChain模块化设计生态丰富支持多种模型和工具文档齐全。快速原型开发需要高度定制化和集成多种后端。中等LlamaIndex专注于数据连接和 RAG在数据加载和索引方面非常强大。以数据查询和检索为核心的智能体应用。中等Semantic Kernel微软出品与 .NET 生态结合紧密规划能力强。.NET 技术栈或深度集成微软云服务。中等AutoGen专注于多智能体协作支持定义角色和对话模式。需要多个智能体相互对话、协作完成复杂任务。较陡直接调用 API最大灵活性无框架开销。需求极其简单或对框架有性能、定制化顾虑。低但实现复杂逻辑成本高对于从零开始的开发者LangChain 提供了良好的抽象和丰富的示例是平衡学习成本和开发效率的优选。3. 构建你的第一个智能体天气与信息查询助手我们将构建一个名为ResearchAssistant的智能体它能根据用户指令查询实时天气并从网页中搜索和总结信息。3.1 项目结构设计清晰的目录结构有助于管理复杂度。my_ai_agent/ ├── .env # 环境变量密钥等 ├── .gitignore # Git忽略文件 ├── requirements.txt # 项目依赖 ├── config.py # 配置文件加载环境变量、全局设置 ├── tools/ # 自定义工具目录 │ ├── __init__.py │ ├── weather_tool.py # 天气查询工具 │ └── web_search_tool.py # 网页搜索与摘要工具 ├── agents/ # 智能体定义目录 │ ├── __init__.py │ └── research_agent.py # 研究助手智能体 ├── memory/ # 记忆管理可选后续扩展 │ └── __init__.py ├── chains/ # 复杂链定义可选 │ └── __init__.py └── main.py # 主程序入口使用以下命令生成requirements.txtpip freeze requirements.txt3.2 实现自定义工具工具是智能体的手脚。我们首先实现两个简单的工具。工具一模拟天气查询工具由于真实天气 API 需要注册我们先实现一个模拟工具。在实际项目中你可以替换为requests调用心知天气、和风天气等 API。# tools/weather_tool.py from langchain.tools import BaseTool from pydantic import BaseModel, Field from typing import Optional, Type class WeatherQueryInput(BaseModel): 天气查询工具的输入模式。 location: str Field(description城市名称例如北京、上海) class MockWeatherTool(BaseTool): name: str get_weather description: str 根据城市名称查询该城市的模拟天气信息。输入应为城市名。 args_schema: Type[BaseModel] WeatherQueryInput def _run(self, location: str) - str: 执行工具的主逻辑。 # 模拟API调用和数据处理 # 真实场景下这里应替换为 requests.get(...) 调用真实API weather_data { 北京: 晴15~25°C东南风2级, 上海: 多云18~28°C东风3级, 深圳: 阵雨22~30°C南风1级, } forecast weather_data.get(location, 未知城市) return f{location}的天气情况{forecast} async def _arun(self, location: str) - str: 异步执行可选。 # 如果工具支持异步IO如网络请求在此实现 raise NotImplementedError(此工具暂不支持异步调用)关键点解释继承BaseTool这是 LangChain 定义工具的标准方式。name和description至关重要LLM 根据description来决定在什么情况下调用此工具。描述必须清晰准确。args_schema使用 Pydantic 模型定义输入参数的结构和描述。这能帮助 LLM 生成格式正确的参数。_run方法包含工具的核心业务逻辑。工具二网页搜索与摘要工具这个工具模拟从网页获取内容并生成摘要。# tools/web_search_tool.py from langchain.tools import BaseTool from pydantic import BaseModel, Field from typing import Optional, Type import requests from bs4 import BeautifulSoup class WebSearchInput(BaseModel): 网页搜索工具的输入模式。 query: str Field(description搜索查询词例如LangChain 最新版本特性) url: Optional[str] Field(defaultNone, description可选指定要抓取的特定URL。如果提供则忽略query参数直接抓取该URL。) class WebSearchTool(BaseTool): name: str search_web description: str 根据查询词搜索网页并返回摘要或直接抓取指定URL的内容并摘要。 优先使用提供的URL。如果未提供URL则根据查询词模拟搜索此处为演示返回固定结果。 用于获取最新的、模型训练数据之外的信息。 args_schema: Type[BaseModel] WebSearchInput return_direct: bool False # 设为True则工具结果直接作为最终答案不返回给LLM继续思考 def _run(self, query: str, url: Optional[str] None) - str: try: if url: # 抓取指定URL response requests.get(url, timeout10) response.raise_for_status() soup BeautifulSoup(response.content, html.parser) # 简单提取正文实际项目需更健壮的提取逻辑 text soup.get_text()[:2000] # 限制长度 summary f从 {url} 抓取的内容摘要前2000字符:\n{text[:500]}... # 模拟摘要 return summary else: # 模拟基于query的搜索结果 # 真实场景应接入Serper API、Google Search API等 mock_results { LangChain 最新版本: LangChain 0.1.0 引入了新的AgentExecutor配置支持更细粒度的错误处理..., Python 异步编程: asyncio是Python的异步IO框架核心概念是事件循环和协程..., } result mock_results.get(query, f未找到关于 {query} 的模拟结果。) return f搜索 {query} 的模拟结果{result} except Exception as e: return f工具执行出错{str(e)} async def _arun(self, query: str, url: Optional[str] None) - str: raise NotImplementedError3.3 组装智能体并配置执行器现在我们将模型、工具和提示词模板组合起来创建智能体。# agents/research_agent.py from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_openai_tools_agent from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain.tools import Tool from tools.weather_tool import MockWeatherTool from tools.web_search_tool import WebSearchTool import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from config import OPENAI_API_KEY def create_research_agent(): 创建并返回一个配置好的研究助手智能体执行器。 # 1. 初始化LLM # 使用 gpt-3.5-turbo 作为示例成本较低。生产环境可考虑 gpt-4-turbo 以获得更好推理能力。 llm ChatOpenAI( modelgpt-3.5-turbo, temperature0, # 降低随机性使工具调用更稳定 openai_api_keyOPENAI_API_KEY ) # 2. 准备工具列表 weather_tool MockWeatherTool() search_tool WebSearchTool() # 可以将多个工具包装在一个Tool对象中但分开更清晰。 tools [weather_tool, search_tool] # 3. 构建提示词模板 # 这是智能体行为的关键引导。SystemMessage定义角色和规则。 prompt ChatPromptTemplate.from_messages([ (system, 你是一个专业的研究助手。你可以使用工具来获取实时天气和最新的网络信息。 请遵循以下规则 1. 仔细分析用户的问题判断是否需要使用工具。 2. 如果使用工具请严格按照工具描述来调用。 3. 每次只调用一个工具等待结果后再决定下一步。 4. 最终答案应基于工具返回的事实信息并组织成友好、清晰的格式。 5. 如果工具无法提供信息或出错如实告知用户。 ), MessagesPlaceholder(variable_namechat_history), # 预留位置给对话历史记忆 (human, {input}), MessagesPlaceholder(variable_nameagent_scratchpad), # 预留位置给LLM的思考过程 ]) # 4. 创建智能体 agent create_openai_tools_agent(llmllm, toolstools, promptprompt) # 5. 创建执行器 # verboseTrue 会在控制台打印详细的思考过程调试时非常有用。 agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, handle_parsing_errorsTrue, # 当LLM输出无法解析为工具调用时尝试修复错误 max_iterations5, # 防止智能体陷入无限循环 early_stopping_methodgenerate, # 达到最大迭代次数时让LLM生成最终答案 ) return agent_executor if __name__ __main__: # 本地测试 agent_executor create_research_agent() result agent_executor.invoke({input: 北京和上海的天气怎么样}) print(\n--- 最终答案 ---) print(result[output])3.4 运行与验证创建一个主程序入口来测试智能体。# main.py from agents.research_agent import create_research_agent def main(): print(初始化研究助手智能体...) agent create_research_agent() # 测试用例 test_queries [ 北京今天的天气如何, 帮我搜索一下LangChain是什么并简单总结。, 先查一下深圳的天气然后搜索Python异步编程的最新文章。, ] for query in test_queries: print(f\n{*50}) print(f用户提问: {query}) print(f{*50}) try: result agent.invoke({input: query, chat_history: []}) # 初始无历史 print(f智能体回答: {result[output]}) except Exception as e: print(f执行出错: {e}) if __name__ __main__: main()运行程序python main.py如果一切正常你将在控制台看到类似以下的输出verboseTrue会显示思考过程初始化研究助手智能体... 用户提问: 北京今天的天气如何 进入新的AgentExecutor链... 思考用户想查询北京的天气。我有一个工具叫get_weather描述是查询城市天气。我应该使用它。 行动{ action: get_weather, action_input: {location: 北京} }观察北京的天气情况晴15~25°C东南风2级 思考我已经获得了北京的天气信息可以直接回答用户。 最终答案 北京今天的天气是晴气温在15到25摄氏度之间东南风2级。 --- 最终答案 --- 北京今天的天气是晴气温在15到25摄氏度之间东南风2级。4. 进阶集成 RAG 与长期记忆基础智能体只能处理即时信息和预定义工具。要让它成为“领域专家”需要集成 RAG。同时为多轮对话添加记忆能力。4.1 构建一个简单的 RAG 知识库我们使用 Chroma 向量数据库和 OpenAI 嵌入模型来构建一个本地知识库。# rag/knowledge_base.py from langchain_chroma import Chroma from langchain_openai import OpenAIEmbeddings from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.document_loaders import TextLoader import os from config import OPENAI_API_KEY def create_or_load_knowledge_base(knowledge_dir: str ./knowledge_docs, persist_directory: str ./chroma_db): 从指定目录加载文本文件创建或加载向量知识库。 embeddings OpenAIEmbeddings(openai_api_keyOPENAI_API_KEY) # 如果向量数据库已存在则直接加载 if os.path.exists(persist_directory) and os.listdir(persist_directory): print(f从 {persist_directory} 加载已有向量库...) vectorstore Chroma(persist_directorypersist_directory, embedding_functionembeddings) return vectorstore # 否则创建新的 documents [] for filename in os.listdir(knowledge_dir): if filename.endswith(.txt) or filename.endswith(.md): file_path os.path.join(knowledge_dir, filename) try: loader TextLoader(file_path, encodingutf-8) docs loader.load() # 为每个文档添加来源元数据 for doc in docs: doc.metadata[source] filename documents.extend(docs) except Exception as e: print(f加载文件 {filename} 时出错: {e}) if not documents: print(未找到任何文档创建空向量库。) # 创建一个空的向量库 vectorstore Chroma(embedding_functionembeddings, persist_directorypersist_directory) return vectorstore # 分割文本 text_splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap50) splits text_splitter.split_documents(documents) print(f共加载 {len(documents)} 个文档分割为 {len(splits)} 个文本块。) # 创建向量库并持久化 vectorstore Chroma.from_documents( documentssplits, embeddingembeddings, persist_directorypersist_directory ) print(f向量库已创建并保存至 {persist_directory}) return vectorstore def query_knowledge_base(vectorstore, question: str, k: int 3): 查询知识库返回最相关的k个文档片段。 if vectorstore is None: return [] docs vectorstore.similarity_search(question, kk) return docs在knowledge_docs目录下放置一些.txt或.md文件例如公司产品介绍、技术规范等然后运行一次初始化脚本。4.2 创建 RAG 查询工具将知识库查询封装成一个工具供智能体调用。# tools/rag_query_tool.py from langchain.tools import BaseTool from pydantic import BaseModel, Field from typing import Type from rag.knowledge_base import query_knowledge_base class RagQueryInput(BaseModel): question: str Field(description需要从内部知识库中查询的问题。) class RagQueryTool(BaseTool): name query_knowledge_base description 当用户的问题涉及公司内部信息、产品文档或特定领域知识时使用此工具从内部知识库中查找相关答案。输入应为清晰的问题。 args_schema: Type[BaseModel] RagQueryInput def __init__(self, vectorstore, **kwargs): super().__init__(**kwargs) self.vectorstore vectorstore def _run(self, question: str) - str: try: docs query_knowledge_base(self.vectorstore, question, k2) if not docs: return 知识库中未找到相关信息。 context \n\n---\n\n.join([f来源{doc.metadata.get(source, 未知)}\n内容{doc.page_content} for doc in docs]) return f从知识库中检索到以下相关信息\n{context}\n\n请基于以上信息回答用户问题。 except Exception as e: return f查询知识库时出错{str(e)} async def _arun(self, question: str): raise NotImplementedError4.3 为智能体添加对话记忆使用 LangChain 的ConversationBufferMemory来保存对话历史。# agents/research_agent_with_memory.py from langchain.memory import ConversationBufferMemory # ... 其他导入 ... def create_advanced_agent(vectorstore): llm ChatOpenAI(modelgpt-3.5-turbo, temperature0, openai_api_keyOPENAI_API_KEY) # 工具列表新增 RAG 工具 weather_tool MockWeatherTool() search_tool WebSearchTool() rag_tool RagQueryTool(vectorstorevectorstore) # 传入向量库实例 tools [weather_tool, search_tool, rag_tool] # 创建记忆 memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) prompt ChatPromptTemplate.from_messages([ (system, 你是高级研究助手拥有内部知识库。请根据问题选择最合适的工具。 规则 1. 关于公司内部、产品、流程的问题优先使用query_knowledge_base工具。 2. 关于实时天气使用get_weather。 3. 关于最新的、公开的网络信息使用search_web。 4. 结合对话历史来理解上下文。 ), MessagesPlaceholder(variable_namechat_history), (human, {input}), MessagesPlaceholder(variable_nameagent_scratchpad), ]) agent create_openai_tools_agent(llmllm, toolstools, promptprompt) agent_executor AgentExecutor( agentagent, toolstools, memorymemory, # 关键注入记忆 verboseTrue, handle_parsing_errorsTrue, max_iterations5, ) return agent_executor现在智能体可以记住之前的对话。例如用户问“我们公司的产品优势是什么”智能体会调用 RAG 工具。接着用户问“那它的价格呢”智能体会结合历史上下文理解“它”指代公司产品并再次查询知识库。5. 常见问题、排查与优化5.1 智能体常见错误与排查在开发过程中你可能会遇到以下典型问题问题现象可能原因排查步骤解决方案Agent stopped due to iteration limit or time limit.智能体陷入“思考-行动”循环超过max_iterations限制。1. 查看verbose日志观察工具调用是否总无法满足任务。2. 检查工具描述是否清晰。3. 检查 LLM 是否因temperature过高而输出不稳定。1. 优化工具描述使其职责更单一明确。2. 适当降低temperature(如设为0)。3. 在提示词中明确要求“在得到足够信息后给出最终答案”。4. 增加max_iterations需谨慎防死循环。ValueError: Could not parse LLM output: ...LLM 返回的内容无法被解析为有效的工具调用格式。1. 检查verbose日志中 LLM 的原始输出。2. 确认使用的args_schema是否与工具_run方法参数匹配。1. 设置handle_parsing_errorsTrue让执行器尝试修复。2. 使用更强大的模型如 GPT-4进行复杂任务规划。3. 在提示词中更严格地规定输出格式例如要求输出 JSON。工具未被调用1. 工具描述 (description) 不清晰LLM 无法理解何时使用。2. 用户问题与工具能力不匹配。3. 提示词未引导使用工具。1. 仔细阅读工具描述模拟 LLM 视角判断是否匹配问题。2. 使用verboseTrue查看 LLM 的思考过程。1. 重写工具描述明确输入输出和适用场景。2. 在系统提示词中举例说明何时该用哪个工具。3. 使用create_openai_tools_agent这类专门为工具调用优化的 Agent 类型。RAG 检索结果不相关1. 文本分割策略不合理块太大或太小。2. 嵌入模型不适合该领域。3. 查询问题表述与文档内容差异大。1. 检查检索到的文本块内容。2. 尝试不同的chunk_size和chunk_overlap。3. 对查询进行重写或扩展。1. 调整RecursiveCharacterTextSplitter参数。2. 尝试不同的嵌入模型。3. 在 RAG 链中加入“查询重写”或“HyDE”步骤。多轮对话中上下文丢失未正确配置memory或memory_key与提示词中的占位符名称不匹配。1. 检查AgentExecutor初始化时是否传入了memory参数。2. 检查prompt中MessagesPlaceholder的variable_name是否与memory.memory_key一致。1. 确保创建memory对象并传入执行器。2. 确保提示词模板中使用了正确的variable_name。5.2 性能与成本优化建议LLM 选型原型阶段可用gpt-3.5-turbo生产环境对推理能力要求高时升级到gpt-4-turbo。考虑国内模型如通义千问、智谱 GLM 以降低成本和延迟。缓存对频繁且结果不变的查询如某些知识库问答引入缓存如langchain.cache配合SQLiteCache显著降低 API 调用次数和成本。异步处理如果智能体需要并行调用多个独立工具或服务高并发请求使用异步版本的 Agent 和工具_arun方法。超时与重试为所有外部 API 调用工具内添加超时和重试机制提高系统健壮性。限制上下文长度对话历史记忆和 RAG 检索内容会消耗大量 Token。设置max_token_limit来限制记忆长度并对检索结果进行精炼或摘要。5.3 从原型到生产的关键考量配置外置化将模型类型、API Base URL、温度、最大 Token 数等配置移至环境变量或配置文件中。日志与监控记录完整的 Agent 执行轨迹包括思考、工具调用、结果便于问题回溯和效果分析。监控 Token 消耗和 API 延迟。错误处理与降级当核心工具如搜索 API失败时应有降级方案如返回缓存结果或友好提示而不是直接抛出异常给用户。安全与权限工具可能执行危险操作如文件删除、数据库写入。必须在工具层面实现权限校验并对用户输入进行严格的清理和验证。测试为智能体编写单元测试测试工具和集成测试测试完整流程模拟各种用户输入和边界情况。6. 扩展方向与下一步你已经构建了一个具备基础工具调用和 RAG 能力的智能体。要将其发展为更强大的系统可以考虑以下方向更复杂的工具集成数据库操作、代码执行器、内部业务系统 API 等。多智能体协作使用 AutoGen 或 LangGraph 框架创建多个具有不同角色的智能体如规划者、执行者、审核者协同工作。规划与反思实现更高级的规划能力让智能体在行动前先制定计划并在行动后进行反思总结。Web 界面使用 Gradio、Streamlit 或 FastAPI 前端框架构建交互式 Web 应用。模型微调如果通用模型在特定工具调用格式或领域术语上表现不佳可以收集高质量对话数据对模型进行SFT监督微调或使用LoRA等高效微调方法进行适配。评估与迭代建立评估体系通过人工评分或自动化指标如工具调用准确率、回答相关性来持续优化智能体的提示词和工具集。智能体开发是一个迭代过程从最小可行产品开始根据实际反馈不断添加工具、优化提示词、改进工作流是通向稳定可靠 AI 应用的最佳路径。