
大家好我是专注于AI技术栈分享的博主。最近在探索大模型应用开发时一个绕不开的话题就是如何高效、低成本地调用不同厂商的模型。手动对接每个API不仅繁琐还面临模型切换、成本对比的难题。而OpenRouter作为一个聚合了众多主流大模型如GPT-4、Claude、Llama等的统一API平台恰好解决了这个痛点。它让开发者通过一个接口就能灵活调用和对比不同模型极大地简化了开发流程。与此同时多智能体Multi-Agent系统正成为构建复杂AI应用的新范式。从AutoGPT到CrewAI多个具备不同能力的AI智能体协同工作可以完成单一大模型难以处理的复杂任务链。然而构建一个稳定、高效的多智能体“基建”基础设施同样充满挑战涉及智能体调度、通信、状态管理和成本控制等多个环节。本文将以OpenRouter为核心详细拆解如何利用它来为类似Sensho这样的多智能体系统构建坚实、灵活的后端支持。我们将从环境配置、API调用、智能体设计到实战案例一步步构建一个可运行的多智能体协作原型。无论你是想快速体验不同大模型的能力还是正在为你的AI项目寻找一个高性价比的模型调度方案这篇文章都能提供从入门到项目级落地的完整参考。1. 背景与核心概念为什么是 OpenRouter 多智能体在深入代码之前我们有必要厘清几个核心概念理解它们组合在一起能解决什么问题。1.1 什么是 OpenRouter你可以将OpenRouter理解为一个“大模型聚合器”或“模型路由层”。它本身不生产模型而是模型的搬运工和调度员。核心功能它提供了一个统一的REST API接口。开发者只需向OpenRouter发送请求并指定想要使用的模型如gpt-4claude-3-opus OpenRouter就会将请求转发给对应的模型提供商如OpenAI, Anthropic并将结果返回给你。关键价值统一接入无需为每个模型服务商单独注册账号、管理API密钥和适配不同的SDK。成本透明与对比OpenRouter提供了所有模型的实时价格按每百万Tokens计费方便你在效果和成本之间做出权衡。模型发现平台上集成了数十种开源和闭源模型你可以轻松尝试新模型而无需复杂部署。标准化接口请求和响应的格式是标准化的切换模型通常只需修改一个参数。重要提示关于网络访问OpenRouter作为国际服务其可用性受本地网络环境的影响。开发者需要确保开发环境具备访问此类外部API的条件并严格遵守所在地的法律法规进行技术学习和开发。1.2 什么是多智能体系统多智能体系统是指由多个具备一定自主性、协同性的AI智能体Agent组成的系统。每个智能体可以专注于特定任务如搜索、写作、编码、审核并通过预定义的规则或通信机制进行协作共同完成一个更宏大的目标。与传统单次调用的区别单次大模型调用是“一问一答”。而多智能体系统是“多轮对话与协作”智能体之间有状态、有记忆、有分工。核心组件智能体Agent核心执行单元通常由角色定义、目标、工具集和记忆构成。任务Task需要完成的具体工作会被分配给合适的智能体。协调器Orchestrator负责分解总目标、分配任务、管理智能体间的执行顺序和通信。这是“基建”的核心。工具Tools智能体可以调用的外部函数如网络搜索、代码执行、数据库查询等。应用场景自动化客服流程、复杂内容生成报告、剧本、自动化数据分析与报告、智能编码助手等。1.3 OpenRouter 如何赋能多智能体基建将两者结合OpenRouter 可以成为多智能体系统强大的“模型引擎舱”。异构模型支持在一个系统内不同的智能体可以根据其任务特性使用不同的大模型。例如负责创意写作的智能体使用Claude-3-Sonnet负责逻辑代码生成的智能体使用GPT-4而负责简单分类的智能体使用成本更低的Llama-3.1-70b。OpenRouter 让这种混合调度变得异常简单。成本优化通过OpenRouter的价格对比可以为每个智能体选择性价比最高的模型并在非关键任务上使用廉价模型显著降低系统整体运行成本。故障转移与降级如果某个模型服务暂时不可用或响应缓慢协调器可以快速将任务路由到另一个备选模型提高系统的鲁棒性。简化开发与运维开发者只需要维护一套与OpenRouter交互的代码逻辑而不是N套不同厂商的SDK极大降低了开发和维护复杂度。接下来我们就从零开始搭建一个基于OpenRouter的多智能体系统原型。2. 环境准备与项目初始化我们将使用Python作为开发语言因为它拥有最丰富的AI开发生态。本项目将使用openai官方库兼容OpenRouter接口和langchain框架来快速构建智能体。2.1 环境与工具操作系统Windows 10/11, macOS 或 Linux (Ubuntu 20.04)Python版本 3.9 (推荐 3.10 或 3.11)包管理工具pipIDEVS Code, PyCharm 或任何你熟悉的编辑器版本控制Git (可选但推荐)2.2 创建项目与虚拟环境首先创建一个干净的项目目录并设置虚拟环境这是管理Python依赖的最佳实践。# 1. 创建项目目录 mkdir openrouter-multi-agent-demo cd openrouter-multi-agent-demo # 2. 创建Python虚拟环境 (以venv为例) python -m venv venv # 3. 激活虚拟环境 # Windows (PowerShell) .\venv\Scripts\Activate.ps1 # macOS/Linux source venv/bin/activate # 激活后命令行提示符前应显示 (venv)2.3 安装依赖库创建requirements.txt文件并填入以下核心依赖# 核心AI与智能体框架 langchain0.1.0 langchain-openai0.0.5 langchain-community0.0.10 # 用于调用OpenRouter (使用OpenAI SDK兼容模式) openai1.12.0 # 用于智能体工具例如网页搜索需自行申请API Key langchain-google-community[google-search-results-json]0.0.11 # 其他工具库 python-dotenv1.0.0 # 用于管理环境变量 requests2.31.0 # 通用HTTP库然后安装它们pip install -r requirements.txt注意langchain及其相关库版本迭代较快以上版本为撰写本文时的稳定版本。若遇到兼容性问题可适当调整版本或查阅官方文档。2.4 获取并配置 OpenRouter API Key访问 OpenRouter 官网并注册账号。在控制台通常是https://openrouter.ai/keys创建一个新的API Key。在项目根目录创建.env文件用于安全地存储密钥。务必将该文件添加到.gitignore中避免密钥泄露。# .env 文件内容 OPENROUTER_API_KEYsk-or-v1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OPENROUTER_BASE_URLhttps://openrouter.ai/api/v1 # 可选如果你需要用到SerpApi进行网页搜索在此添加 # SERPAPI_API_KEYyour_serpapi_key_here2.5 项目结构预览完成以上步骤后你的项目结构应大致如下openrouter-multi-agent-demo/ ├── .env # 环境变量文件保密 ├── .gitignore # Git忽略文件 ├── requirements.txt # 项目依赖 ├── venv/ # Python虚拟环境目录 └── src/ # 源代码目录接下来创建 ├── __init__.py ├── config.py # 配置加载模块 ├── agents.py # 智能体定义模块 ├── tools.py # 工具定义模块 └── main.py # 主程序入口现在我们的基础环境已经就绪可以开始编写核心代码了。3. 核心配置与 OpenRouter 客户端初始化我们需要一个模块来集中管理配置并初始化一个能与OpenRouter通信的LangChain LLM对象。3.1 创建配置模块创建src/config.py# src/config.py import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI # 加载 .env 文件中的环境变量 load_dotenv() def get_openrouter_llm(model_name: str gpt-3.5-turbo, temperature: float 0.7): 创建并返回一个配置为使用OpenRouter的LangChain ChatOpenAI实例。 参数: model_name: OpenRouter支持的模型名称如 gpt-3.5-turbo, claude-3-sonnet, meta-llama/llama-3.1-70b-instruct temperature: 生成文本的随机性0.0更确定1.0更随机。 返回: 一个配置好的ChatOpenAI实例。 # 从环境变量读取配置 api_key os.getenv(OPENROUTER_API_KEY) base_url os.getenv(OPENROUTER_BASE_URL) if not api_key: raise ValueError(请在 .env 文件中设置 OPENROUTER_API_KEY) if not base_url: base_url https://openrouter.ai/api/v1 # 默认值 # 关键步骤使用OpenAI库的格式但指向OpenRouter的端点 llm ChatOpenAI( modelmodel_name, openai_api_keyapi_key, openai_api_basebase_url, temperaturetemperature, # OpenRouter 可能需要额外的头部信息来标识应用可选但推荐 default_headers{ HTTP-Referer: YOUR_SITE_URL, # 可选你的网站URL X-Title: OpenRouter Multi-Agent Demo, # 可选应用名称 }, # 设置较长的超时时间因为模型响应可能较慢 timeout60, max_retries2, ) return llm # 可以预定义一些常用模型的LLM对象方便后续使用 # 注意实际调用时才会产生费用 GPT35_TURBO lambda: get_openrouter_llm(gpt-3.5-turbo, 0.7) GPT4 lambda: get_openrouter_llm(gpt-4, 0.7) CLAUDE_3_SONNET lambda: get_openrouter_llm(claude-3-sonnet-20240229, 0.7) LLAMA_70B lambda: get_openrouter_llm(meta-llama/llama-3.1-70b-instruct, 0.8)代码解释load_dotenv()会读取.env文件中的键值对并将其设置为环境变量。ChatOpenAI是 LangChain 用于与 OpenAI 兼容API对话的类。通过设置openai_api_base为 OpenRouter 的端点我们巧妙地将其重定向到了 OpenRouter。default_headers中的信息有助于 OpenRouter 进行统计和监控请替换YOUR_SITE_URL为你的实际信息或留空。我们创建了几个 lambda 函数来快速获取不同模型的实例这是一种工厂模式的应用。3.2 验证连接创建一个简单的测试脚本test_connection.py在项目根目录验证配置是否正确# test_connection.py import sys sys.path.append(.) # 确保可以导入src模块 from src.config import get_openrouter_llm def test_connection(): print(正在测试与OpenRouter的连接...) try: # 使用一个轻量级模型进行测试降低成本 llm get_openrouter_llm(gpt-3.5-turbo, 0.1) # 发送一个简单请求 response llm.invoke(请用一句话介绍你自己。) print(连接成功) print(f模型回复: {response.content}) except Exception as e: print(f连接失败错误信息: {e}) print(请检查) print(1. .env 文件中的 OPENROUTER_API_KEY 是否正确。) print(2. 网络连接是否正常。) print(3. OpenRouter 账户是否有余额或设置了支付方式。) if __name__ __main__: test_connection()运行测试python test_connection.py如果看到模型回复恭喜你OpenRouter 客户端配置成功4. 构建多智能体系统核心我们将构建一个包含三个智能体的简单系统研究员Researcher负责根据主题进行网络搜索收集信息。撰稿人Writer负责根据研究员提供的信息撰写结构化的文章草稿。审阅员Reviewer负责对文章草稿进行润色、检查事实一致性并提出改进建议。4.1 定义智能体工具智能体通过“工具”与外界交互。我们先为“研究员”智能体创建一个搜索工具。这里以SerpAPI为例需要单独注册获取API Key你也可以替换为其他搜索工具如DuckDuckGoSearchRun。创建src/tools.py# src/tools.py import os from langchain_community.tools import Tool from langchain_community.utilities import SerpAPIWrapper from langchain_community.tools import DuckDuckGoSearchRun def get_search_tool(): 获取一个搜索工具。 优先使用 SerpAPI更稳定如果未配置则回退到 DuckDuckGo。 serpapi_key os.getenv(SERPAPI_API_KEY) if serpapi_key: print(使用 SerpAPI 作为搜索工具。) search SerpAPIWrapper(serpapi_api_keyserpapi_key) # 包装成 LangChain Tool 对象 search_tool Tool( nameWebSearch, funcsearch.run, description当您需要获取关于某个主题的最新、最准确的事实信息时请使用此工具进行网络搜索。 输入应该是一个明确的搜索查询字符串。 ) else: print(未找到 SERPAPI_API_KEY使用 DuckDuckGo 作为搜索工具可能不稳定。) search DuckDuckGoSearchRun() search_tool Tool( nameWebSearch, funcsearch.run, description当您需要获取关于某个主题的信息时请使用此工具进行网络搜索。 输入应该是一个明确的搜索查询字符串。注意结果可能不如专业API精确。 ) return search_tool # 你可以在这里定义更多工具例如 # - 计算器 # - 数据库查询 # - 文件读写 # - 代码执行4.2 定义智能体创建src/agents.py在这里我们将使用 LangChain 的create_react_agent范式来构建具有推理和行动能力的智能体。# src/agents.py from langchain import hub from langchain.agents import create_react_agent, AgentExecutor from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from src.config import GPT35_TURBO, GPT4, CLAUDE_3_SONNET from src.tools import get_search_tool class MultiAgentSystem: def __init__(self): # 初始化工具 self.search_tool get_search_tool() self.tools [self.search_tool] # 可以在此为不同智能体分配不同的工具列表 self.researcher_tools [self.search_tool] self.writer_tools [] # 撰稿人可能不需要外部工具 self.reviewer_tools [] # 审阅员可能不需要外部工具 # 初始化不同角色的LLM可以为不同智能体选择不同模型 self.researcher_llm GPT35_TURBO() # 研究员用性价比高的模型 self.writer_llm CLAUDE_3_SONNET() # 撰稿人用创意写作强的模型 self.reviewer_llm GPT4() # 审阅员用逻辑和一致性最强的模型 def create_agent(self, llm, tools, system_prompt): 根据给定的LLM、工具和系统提示词创建一个React式智能体。 参数: llm: 语言模型实例。 tools: 该智能体可用的工具列表。 system_prompt: 定义智能体角色和行为的系统提示词。 返回: 一个配置好的AgentExecutor实例。 # 从LangChain Hub拉取一个标准的ReAct提示词模板并自定义前缀 prompt_template hub.pull(hwchase17/react-chat) # 修改提示词加入我们自定义的系统角色指令 prompt ChatPromptTemplate.from_messages([ (system, system_prompt), MessagesPlaceholder(variable_namechat_history), (human, {input}), MessagesPlaceholder(variable_nameagent_scratchpad) ]) # 创建ReAct智能体 agent create_react_agent(llm, tools, prompt) # 创建执行器负责运行智能体处理工具调用循环 agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, # 设置为True可以看到智能体的思考过程调试时非常有用 handle_parsing_errorsTrue, # 优雅地处理解析错误 max_iterations5, # 限制最大迭代次数防止死循环 early_stopping_methodgenerate, # 提前停止策略 ) return agent_executor def get_researcher_agent(self): 创建研究员智能体 system_prompt 你是一位专业、严谨的研究员。你的任务是利用所有可用的工具为用户提供的主题收集全面、准确、最新的信息。 你擅长将宽泛的主题分解成具体的搜索查询并能够从搜索结果中提炼出关键事实、数据和观点。 你的最终输出应该是一份清晰、有条理的研究摘要涵盖主题的主要方面并注明信息的来源如果工具提供了的话。 不要编造信息。如果找不到足够信息请如实说明。 return self.create_agent(self.researcher_llm, self.researcher_tools, system_prompt) def get_writer_agent(self): 创建撰稿人智能体 system_prompt 你是一位才华横溢的撰稿人。你的任务是根据研究员提供的研究摘要撰写一篇结构完整、语言流畅、引人入胜的文章草稿。 文章应包括引言、主体分点论述和结论。 你需要将零散的研究发现整合成一个连贯的叙事并确保文章符合指定的风格和受众要求。 如果研究摘要中缺乏某些必要信息你可以基于常识进行合理补充但应注明这是你的推断。 # 撰稿人不需要搜索工具所以传入空列表 return self.create_agent(self.writer_llm, [], system_prompt) def get_reviewer_agent(self): 创建审阅员智能体 system_prompt 你是一位严格、细致的审阅员和编辑。你的任务是对撰稿人提供的文章草稿进行审阅。 你需要检查 1. **事实一致性**文章内容是否与提供的研究摘要相符有无矛盾或夸大之处 2. **逻辑与结构**文章结构是否清晰论点是否层层递进段落衔接是否自然 3. **语言与风格**用词是否准确语句是否通顺风格是否符合要求 4. **改进建议**提出具体、可操作的修改建议使文章更出色。 你的输出应该是一份详细的审阅报告指出优点、问题点并给出修改后的段落示例。 return self.create_agent(self.reviewer_llm, [], system_prompt)代码解释MultiAgentSystem类是我们的多智能体工厂。create_agent方法是核心它使用 LangChain 的create_react_agent。ReActReasoning Acting范式让智能体能够“思考”一步然后决定是使用工具还是直接回答。我们为三个智能体定义了不同的system_prompt这是塑造其行为的关键。提示词工程的质量直接影响智能体的表现。为不同智能体分配了不同的LLM展示了OpenRouter在多智能体系统中灵活调度异构模型的优势。AgentExecutor的verboseTrue将在运行时打印出智能体的思考链这对于调试和理解其工作过程至关重要。5. 实现协调器与完整工作流智能体已经定义好了现在需要一个“协调器”来串联它们的工作。我们将创建一个简单的顺序工作流。创建src/orchestrator.py# src/orchestrator.py from src.agents import MultiAgentSystem class SequentialOrchestrator: def __init__(self): self.agent_system MultiAgentSystem() self.researcher self.agent_system.get_researcher_agent() self.writer self.agent_system.get_writer_agent() self.reviewer self.agent_system.get_reviewer_agent() def run_pipeline(self, topic: str, writing_style: str 科普文章): 执行顺序管道研究 - 写作 - 审阅。 参数: topic: 需要研究和撰写的主题。 writing_style: 文章风格如“科普文章”、“技术博客”、“新闻报道”。 返回: 一个包含各阶段结果的字典。 print(f\n{*50}) print(f开始处理主题: {topic}) print(f文章风格: {writing_style}) print(f{*50}\n) results {} # 阶段 1: 研究 print([阶段1] 研究员开始工作...) research_instruction f请围绕以下主题进行深入研究并整理一份详细的研究摘要{topic}。请重点关注该主题的定义、关键技术、应用场景和最新发展。 try: research_result self.researcher.invoke({input: research_instruction}) research_summary research_result[output] print(f研究摘要完成。长度{len(research_summary)} 字符) results[research_summary] research_summary except Exception as e: print(f研究员阶段出错: {e}) results[research_summary] f研究阶段失败: {e} # 如果研究失败可以尝试用默认信息继续或终止 research_summary 未能获取到有效研究信息。 # 阶段 2: 写作 print(\n[阶段2] 撰稿人开始工作...) writing_instruction f请根据以下研究摘要撰写一篇风格为“{writing_style}”的文章。 文章应面向普通读者力求清晰易懂、逻辑严谨。 研究摘要 {research_summary} 请开始你的写作 try: writing_result self.writer.invoke({input: writing_instruction}) draft writing_result[output] print(f文章草稿完成。长度{len(draft)} 字符) results[draft] draft except Exception as e: print(f撰稿人阶段出错: {e}) results[draft] f写作阶段失败: {e} draft 文章草稿生成失败。 # 阶段 3: 审阅 print(\n[阶段3] 审阅员开始工作...) review_instruction f请审阅以下文章草稿并提供详细的审阅报告。 请检查事实一致性、逻辑结构、语言表达并给出具体的修改建议。 文章草稿 {draft} 请提供你的审阅意见 try: review_result self.reviewer.invoke({input: review_instruction}) review_report review_result[output] print(f审阅报告完成。) results[review_report] review_report except Exception as e: print(f审阅员阶段出错: {e}) results[review_report] f审阅阶段失败: {e} print(f\n{*50}) print(多智能体管道执行完毕) print(f{*50}) return results代码解释SequentialOrchestrator类初始化了三个智能体。run_pipeline方法定义了固定的工作流先研究再写作最后审阅。每个阶段的输出作为下一个阶段的输入。每个阶段都用了try-except块进行错误处理确保一个智能体失败不会导致整个系统崩溃。指令research_instruction,writing_instruction的构建非常重要它需要清晰地将上下文和任务传递给下一个智能体。6. 运行完整案例与结果分析现在让我们创建一个主程序来运行这个多智能体系统。创建src/main.py# src/main.py import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from src.orchestrator import SequentialOrchestrator def main(): print(启动基于 OpenRouter 的多智能体演示系统...) # 1. 初始化协调器 orchestrator SequentialOrchestrator() # 2. 定义任务 topic 大型语言模型LLM在软件开发中的应用与挑战 style 技术博客 # 3. 运行管道 final_results orchestrator.run_pipeline(topic, style) # 4. 保存并展示结果 print(\n *60) print(最终成果汇总) print(*60) print(\n--- 研究摘要 ---) print(final_results.get(research_summary, 无)[:500] ...) # 只打印前500字符 print(\n--- 文章草稿 ---) print(final_results.get(draft, 无)[:800] ...) print(\n--- 审阅报告 ---) print(final_results.get(review_report, 无)) # 可选将结果保存到文件 with open(output_results.txt, w, encodingutf-8) as f: f.write(*60 \n) f.write(多智能体系统输出结果\n) f.write(*60 \n\n) f.write(主题: topic \n) f.write(风格: style \n\n) f.write(--- 研究摘要 ---\n) f.write(final_results.get(research_summary, 无) \n\n) f.write(--- 文章草稿 ---\n) f.write(final_results.get(draft, 无) \n\n) f.write(--- 审阅报告 ---\n) f.write(final_results.get(review_report, 无) \n) print(f\n详细结果已保存至: output_results.txt) if __name__ __main__: main()6.1 运行程序在项目根目录下执行python src/main.py6.2 预期输出与过程观察运行程序后你将在控制台看到类似以下的输出具体内容因模型和搜索结果的随机性而异研究员阶段你会看到研究员智能体的思考过程因为verboseTrue例如[阶段1] 研究员开始工作... 研究员思考用户想了解LLM在软件开发中的应用与挑战。我需要先搜索“大型语言模型 软件开发 应用”来获取基本信息。 行动使用工具 WebSearch输入“大型语言模型 软件开发 应用 2024” 观察[搜索引擎返回的摘要信息...] 研究员思考搜索结果提到了代码生成、文档编写等。接下来搜索“LLM 软件开发 挑战 局限性”。 ... 最终输出一份关于LLM在代码补全、测试生成、文档自动化、需求分析等方面应用以及面临幻觉、安全、集成成本等挑战的研究摘要。撰稿人阶段撰稿人接收研究摘要开始构思和写作控制台会显示其生成文本的过程。审阅员阶段审阅员仔细检查草稿并生成一份包含优点、问题和修改建议的报告。最终你会在output_results.txt文件中得到三个完整的输出。6.3 结果分析示例研究摘要可能包含从网上搜索到的关于 GitHub Copilot、Amazon CodeWhisperer、代码解释、技术债务管理等信息点。文章草稿一篇结构基本完整的技术博客包含引言、几个应用章节如“自动化代码生成”、“智能缺陷检测”、挑战章节和总结。审阅报告可能会指出“第二段关于安全挑战的论述与研究摘要中的‘数据泄露’风险联系不够紧密”并建议“增加一个关于训练数据安全的小节”甚至直接给出修改后的段落示例。这个简单的管道展示了多智能体协作的基本魅力分工、专业化、质量检查。通过OpenRouter我们轻松地为每个角色赋予了最合适的“大脑”。7. 常见问题与排查思路在实际使用中你可能会遇到以下问题问题现象可能原因排查思路与解决方案OpenRouter API 调用失败提示401或Invalid API Key1. API Key 错误或未设置。2. API Key 余额不足或被禁用。3. 网络问题导致请求无法到达。1. 检查.env文件中的OPENROUTER_API_KEY是否正确前后有无空格。2. 登录 OpenRouter 控制台检查余额和使用情况。3. 运行test_connection.py进行基础连通性测试。智能体陷入循环不断重复调用工具1.max_iterations设置过高或未设置。2. 工具描述或提示词不清晰导致智能体无法做出正确决策。3. 模型本身逻辑混乱。1. 在AgentExecutor中设置合理的max_iterations如5-10。2. 优化工具的description使其用途极其明确。3. 尝试更换模型或调整temperature降低随机性。搜索工具返回No result found或错误1. SerpAPI 或 DuckDuckGo 的 API Key 无效或过期。2. 搜索查询过于宽泛或特殊。3. 网络限制。1. 确认SERPAPI_API_KEY是否正确配置且有效。2. 提示研究员智能体生成更具体、关键词明确的搜索查询。3. 考虑使用其他搜索工具或备用方案。模型响应速度极慢或超时1. 选择的模型负载过高如 GPT-4。2. 网络延迟大。3. 请求的 tokens 过长。1. 在非关键任务上使用更轻量的模型如 GPT-3.5-Turbo。2. 增加timeout参数值。3. 检查并优化提示词减少不必要的上下文。智能体输出不符合预期或脱离角色1. 系统提示词 (system_prompt) 不够精确。2.temperature参数过高导致输出随机性大。3. 任务指令 (human message) 模糊。1. 精心设计提示词明确角色、目标和约束。例如“你是一位严谨的研究员必须使用搜索工具验证信息”。2. 降低temperature如设为0.2-0.5以获得更确定性的输出。3. 给智能体提供更结构化、更具体的任务指令。ModuleNotFoundError: No module named langchain_community依赖库未正确安装或版本冲突。1. 确认已激活虚拟环境。2. 运行pip install -r requirements.txt --upgrade。3. 检查langchain和langchain-community的版本兼容性。8. 最佳实践与进阶优化建议一个可用于生产环境的多智能体基建需要考虑更多因素。以下是一些进阶建议8.1 智能体与工作流设计超越顺序管道本文是简单的线性流程。真实场景可能需要有向无环图DAG例如审阅员发现问题后可能将文章打回给撰稿人修改。可以考虑使用LangGraphLangChain的新库来构建复杂的工作流。共享记忆与状态管理为智能体团队引入共享工作区如GlobalState让它们能读写共享的上下文、中间结果而不是仅靠管道传递。动态智能体路由不是固定三个智能体而是根据任务类型由一个“主管智能体”动态创建和调用不同的工具专家智能体。8.2 利用 OpenRouter 进行优化成本监控与预算OpenRouter API 提供了每次调用的Token使用量和成本。务必在代码中集成日志记录每个智能体、每次调用的模型和成本以便分析和优化。模型降级与回退策略实现一个智能的模型调用层。当首选模型如GPT-4超时或返回错误时自动降级到备用模型如Claude-3 Haiku。并行化调用如果多个智能体的任务不相互依赖可以使用asyncio并发调用大幅缩短系统整体响应时间。8.3 工程化与部署配置化管理将模型选择、温度、最大token数等参数外置到配置文件如config.yaml中便于不同环境开发、测试、生产切换。异步与队列对于长时间运行的任务将智能体调用放入任务队列如 Celery、RQ避免阻塞Web服务。可观测性集成日志如structlog、指标如 Prometheus和追踪如 OpenTelemetry全面监控每个智能体的性能、成功率和成本。测试为每个智能体编写单元测试和集成测试模拟不同的输入确保其行为符合预期。8.4 提示词工程迭代优化智能体的表现极度依赖提示词。将提示词模板化并建立A/B测试机制持续优化。少样本学习Few-Shot在提示词中提供几个高质量的输入输出示例能显著提升智能体在复杂任务上的表现。输出格式化要求智能体以特定格式如JSON、Markdown输出便于后续程序化处理。通过本文的实践你已经掌握了使用 OpenRouter 构建多智能体系统的基础。从统一模型接口到智能体分工协作这套“基建”为开发更强大、更灵活的AI应用提供了可能。接下来你可以尝试将工具扩展到数据库操作、代码执行或者用 LangGraph 构建更复杂的智能体网络探索AI自动化的更多边界。