OpenRouter与Ori Prime Agent实战:统一API调用与智能模型路由指南

发布时间:2026/8/18 22:00:14
OpenRouter与Ori Prime Agent实战:统一API调用与智能模型路由指南 最近在探索大模型应用开发时你是否也遇到过这样的困境面对市面上琳琅满目的模型提供商如 OpenAI、Anthropic、Google 等每个都有独立的 API 密钥、计费方式和调用接口项目集成和管理变得异常繁琐。更不用说为了找到性价比最高或性能最适合的模型开发者往往需要在不同平台间手动切换和测试费时费力。今天一个名为OpenRouter的平台及其最新推出的Ori Prime Agent智能体为我们提供了一套优雅的解决方案。它本质上是一个“大模型聚合器”和“智能路由代理”旨在简化开发者与多种大语言模型LLM的交互。本文将为你带来一份从零开始的 OpenRouter 及 Ori Prime Agent 实战指南涵盖核心概念、环境搭建、API 调用、高级路由策略以及如何利用它构建你自己的 AI 应用。无论你是想快速体验不同模型的新手还是寻求生产环境最佳实践的开发者都能从中找到可复用的代码和配置。1. 背景与核心概念为什么需要 OpenRouter在深入代码之前我们有必要理解 OpenRouter 解决了什么问题以及 Ori Prime Agent 在其中扮演的角色。1.1 大模型生态的碎片化挑战当前大模型市场呈现出“百花齐放”但“各自为政”的局面。开发者若想在自己的应用中集成 AI 能力通常面临以下痛点多密钥管理需要为 OpenAI、Claude、Gemini 等分别申请、保管和轮换 API 密钥安全性和便利性都是挑战。接口不统一不同模型的 API 端点、请求参数、响应格式存在差异需要编写大量的适配代码。成本与性能权衡不同模型在不同任务如创意写作、代码生成、逻辑推理上的表现和价格差异巨大手动寻找最优解成本高。故障切换Fallback当某个模型服务出现故障或限流时缺乏自动切换到备用模型的机制。1.2 OpenRouter统一的大模型网关OpenRouter应运而生它将自己定位为连接开发者与众多大模型之间的“路由器”。它的核心价值在于统一 API提供一套标准化、OpenAI 兼容的 API 接口。你只需要使用 OpenRouter 的 API 密钥和端点就可以在其背后接入的数十个模型如 GPT-4、Claude 3、Llama 3、Gemini 等中进行调用。成本透明与比较OpenRouter 仪表板会清晰展示每个模型的定价按输入/输出 Token 计费方便你根据预算和任务选择模型。简化计费你只需要向 OpenRouter 支付费用无需管理多个平台的账单。1.3 Ori Prime Agent智能路由与编排引擎如果说 OpenRouter 提供了“硬件”连接那么Ori Prime Agent就是其上的“智能操作系统”。它是 OpenRouter 推出的一个高级功能/智能体核心能力是自动化的模型路由与调用策略。你可以将 Ori Prime Agent 理解为一个可编程的“调度员”。你定义好任务如“写一首诗”和策略如“先用便宜模型生成草稿再用强模型润色”Ori Prime Agent 会自动执行复杂的、多步骤的模型调用链而无需你手动编写每个步骤的代码。核心特性包括条件路由根据输入内容、历史对话或预算动态选择最合适的模型。回退机制当首选模型调用失败时自动按预设顺序尝试其他模型。串联与并联调用可以组织多个模型协同工作例如先让一个模型分析问题再让另一个模型生成答案。成本控制为任务设置预算上限智能体会在预算内选择模型。接下来我们将从环境准备开始一步步教你如何使用 OpenRouter 和 Ori Prime Agent。2. 环境准备与工具安装为了进行后续的 API 调用和实验你需要准备以下环境。2.1 注册 OpenRouter 账号并获取 API Key访问 OpenRouter 官网 并注册账号。登录后在控制台界面找到你的API Keys区域。点击 “Create Key” 生成一个新的 API 密钥。请妥善保管此密钥我们将在代码中使用它。2.2 准备开发环境本文将使用Python作为主要编程语言并使用curl命令进行快速的 API 测试。请确保你的系统已安装Python 3.8可以从 Python 官网 下载。pipPython 包管理工具通常随 Python 安装。curl一个命令行工具用于传输数据。在 Linux/macOS 上通常已预装Windows 用户可以通过 Git Bash、WSL 或直接下载安装。检查安装打开你的终端Terminal, Command Prompt, Git Bash, PowerShell等运行以下命令检查环境。# 检查 Python 和 pip 版本 python --version pip --version # 检查 curl 是否可用 curl --version如果curl未安装可以参考网络热词中提到的安装方式例如在 macOS 上用 Homebrewbrew install curl或在 Linux 上用apt-get install curl。2.3 安装必要的 Python 库我们将使用requests库来发送 HTTP 请求这是与 OpenRouter API 交互的基础。你也可以选择官方的openai库因为 API 兼容。# 使用 pip 安装 requests 库 pip install requests # 如果你想使用 OpenAI 官方库的格式推荐兼容性更好 pip install openai环境准备就绪后我们就可以开始进行第一次 API 调用了。3. 基础 API 调用你的第一个 OpenRouter 请求让我们从最基础的、直接调用单一模型开始熟悉 OpenRouter 的工作流程。3.1 理解 OpenRouter API 端点OpenRouter 的核心 API 端点与 OpenAI 的 Chat Completions API 高度兼容基础 URL:https://openrouter.ai/api/v1聊天补全端点:POST https://openrouter.ai/api/v1/chat/completions请求头Headers:Authorization: Bearer 你的OPENROUTER_API_KEYContent-Type: application/jsonHTTP-Referer: 可选你的网站 URL用于标识。X-Title: 可选你的应用名称。3.2 使用 cURL 进行快速测试curl是测试 API 的利器。将下面的你的OPENROUTER_API_KEY替换为你实际的密钥。curl -X POST https://openrouter.ai/api/v1/chat/completions \ -H Authorization: Bearer 你的OPENROUTER_API_KEY \ -H Content-Type: application/json \ -d { model: openai/gpt-3.5-turbo, // 指定模型格式为提供商/模型名 messages: [ {role: user, content: 请用一句话介绍你自己。} ] }命令解释-X POST: 指定 HTTP 方法为 POST。-H: 添加请求头。-d: 指定 POST 的数据体JSON 格式。model: openai/gpt-3.5-turbo: 这是 OpenRouter 中模型的命名格式。你可以在其 模型列表 页面找到所有可用的模型标识符。messages: 对话历史列表与 OpenAI API 格式一致。如果一切正常你将在终端看到返回的 JSON 响应其中包含模型生成的回复。3.3 使用 Python 脚本进行调用创建一个名为openrouter_basic.py的文件写入以下代码# openrouter_basic.py import requests import json # 配置 OPENROUTER_API_KEY 你的OpenRouter API密钥 # 请务必替换 OPENROUTER_API_URL https://openrouter.ai/api/v1/chat/completions # 请求头 headers { Authorization: fBearer {OPENROUTER_API_KEY}, Content-Type: application/json, # 以下头部有助于 OpenRouter 进行统计和提供更好的服务可选但推荐 HTTP-Referer: https://your-site.com, # 替换为你的网站 X-Title: My AI App, # 替换为你的应用名 } # 请求数据 data { model: anthropic/claude-3-haiku, # 尝试另一个模型Claude 3 Haiku messages: [ {role: user, content: 法国的首都是哪里} ], # OpenRouter 特有参数控制模型来源 provider: { order: [anthropic, openai] # 优先使用 Anthropic不行则用 OpenAI } } # 发送请求 response requests.post(OPENROUTER_API_URL, headersheaders, jsondata) # 处理响应 if response.status_code 200: result response.json() # 提取回复内容 reply result[choices][0][message][content] print(f模型回复: {reply}) # 打印使用信息Token 消耗和成本 usage result.get(usage, {}) print(f使用情况: {usage}) else: print(f请求失败状态码: {response.status_code}) print(f错误信息: {response.text})运行脚本python openrouter_basic.py代码解析我们使用requests库发送 POST 请求。headers中包含了认证和内容类型。data中的model字段指定了我们要调用的具体模型。provider.order是 OpenRouter 的扩展参数它指示平台在anthropic/claude-3-haiku这个模型上优先尝试通过 Anthropic 的接口调用如果不行再回退到 OpenAI如果该模型在 OpenAI 上也可用。这体现了初步的路由能力。我们打印了回复内容以及usage字段其中包含了本次调用消耗的 prompt/ completion tokens 数量这对于成本监控至关重要。通过以上步骤你已经成功通过 OpenRouter 调用了大模型。接下来我们将探索更强大的 Ori Prime Agent。4. Ori Prime Agent 实战实现智能路由Ori Prime Agent 的核心思想是声明式任务编排。你不再直接调用某个模型而是向 OpenRouter 提交一个“任务描述”由智能体来决定如何调用一个或多个模型来完成它。4.1 理解 Prime Agent 的请求结构要使用 Ori Prime Agent你需要在 API 请求中做出关键改变模型model字段不再指定具体的模型如gpt-4而是指定一个Agent 模型。目前主要的 Agent 模型是prime-intellect/prime。消息messages字段除了常规的用户消息你还需要在消息列表中插入特殊的系统消息system message来指导 Agent 的行为。这部分是编程的核心。一个典型的支持 Agent 的请求 JSON 结构如下{ model: prime-intellect/prime, messages: [ { role: system, content: 你是一个智能路由助手。请根据用户请求智能地选择最合适的模型来完成任务。如果请求涉及创意写作优先使用 openai/gpt-4如果是代码生成优先使用 anthropic/claude-3-sonnet如果是简单问答使用经济模型 google/gemini-flash-1.5。如果首选模型失败请自动回退到 openai/gpt-3.5-turbo。总成本控制在 $0.01 以内。 }, { role: user, content: 请帮我写一个 Python 函数来计算斐波那契数列。 } ] }4.2 示例一带条件路由的智能体让我们编写一个 Python 脚本让 Ori Prime Agent 根据任务类型自动选择模型。# openrouter_agent_router.py import requests import json OPENROUTER_API_KEY 你的OpenRouter API密钥 OPENROUTER_API_URL https://openrouter.ai/api/v1/chat/completions headers { Authorization: fBearer {OPENROUTER_API_KEY}, Content-Type: application/json, } def ask_agent_with_routing(user_query): 使用 Ori Prime Agent 进行智能路由问答 # 定义路由策略系统提示词 system_prompt 你是一个高级模型路由智能体。请根据用户问题的复杂度和类型遵循以下策略选择模型并回答 1. 如果问题是简单的知识问答如事实、定义使用 google/gemini-flash-1.5 模型因为它快速且经济。 2. 如果问题涉及逻辑推理、数学计算或复杂分析使用 anthropic/claude-3-sonnet 模型。 3. 如果问题是创意写作、故事生成或需要高度想象力的任务使用 openai/gpt-4 模型。 4. 始终在回复的开头注明你为本次回答选择或倾向选择的模型名称及简要理由。 5. 如果检测到用户问题是关于代码的无论何种语言都使用 anthropic/claude-3-sonnet因为它在代码任务上表现优异。 data { model: prime-intellect/prime, # 关键使用 Prime Agent 模型 messages: [ {role: system, content: system_prompt}, {role: user, content: user_query} ], max_tokens: 1000, } response requests.post(OPENROUTER_API_URL, headersheaders, jsondata) if response.status_code 200: result response.json() reply result[choices][0][message][content] usage result.get(usage, {}) print(*50) print(f用户问题: {user_query}) print(fAgent 回复:\n{reply}) print(f本次消耗 Tokens: {usage}) print(*50) return reply, usage else: print(f请求失败: {response.status_code}) print(response.text) return None, None # 测试不同的问题类型 if __name__ __main__: test_queries [ 太阳系最大的行星是什么, # 简单知识问答 请解释牛顿第二定律并给出一个计算示例。, # 逻辑推理与解释 写一个关于机器人学习情感的短故事开头。, # 创意写作 用 Python 实现一个快速排序算法并添加注释。, # 代码生成 ] for query in test_queries: ask_agent_with_routing(query)运行这个脚本你会看到 Agent 对不同类型的问题在回复中声明了它倾向使用的模型及理由。注意prime-intellect/prime这个 Agent 本身也是一个模型它会“思考”你的系统指令并可能在其内部调用你指定的其他模型或者直接以其自身的知识来回答。系统提示词的质量直接决定了路由的智能程度。4.3 示例二实现链式调用串联工作流更复杂的场景是让多个模型接力完成一个任务。例如先用一个模型将用户模糊的需求转化为清晰的技术规格再用另一个模型根据规格生成代码。# openrouter_agent_chain.py import requests import json OPENROUTER_API_KEY 你的OpenRouter API密钥 OPENROUTER_API_URL https://openrouter.ai/api/v1/chat/completions headers { Authorization: fBearer {OPENROUTER_API_KEY}, Content-Type: application/json, } def orchestrated_workflow(user_idea): 一个编排的工作流需求分析 - 代码生成 print(f原始需求: {user_idea}) print(- * 30) # 第一步需求分析与规格制定使用擅长分析的模型 spec_prompt f 用户有一个模糊的想法{user_idea}。 请你作为一个资深产品分析师将这个想法转化为一个清晰、可执行的技术开发规格说明书。 规格书需要包括 1. 项目目标。 2. 核心功能点列表。 3. 输入输出格式说明。 4. 建议的技术栈如Python, JavaScript等。 请用简洁明了的语言输出规格书。 step1_data { model: anthropic/claude-3-sonnet, # 第一步使用 Claude 分析 messages: [{role: user, content: spec_prompt}], max_tokens: 800, } resp1 requests.post(OPENROUTER_API_URL, headersheaders, jsonstep1_data) if resp1.status_code ! 200: print(第一步失败) return spec resp1.json()[choices][0][message][content] print(【步骤1 - 生成规格书】完成) print(spec) print(- * 30) # 第二步基于规格书生成代码使用擅长代码的模型 code_prompt f 你是一个资深软件开发工程师。请根据以下产品规格书编写出完整、可运行、带有注释的代码。 只输出代码并简要说明如何运行它。 规格书 {spec} step2_data { model: openai/gpt-4, # 第二步使用 GPT-4 写代码 messages: [{role: user, content: code_prompt}], max_tokens: 1500, } resp2 requests.post(OPENROUTER_API_URL, headersheaders, jsonstep2_data) if resp2.status_code ! 200: print(第二步失败) return code resp2.json()[choices][0][message][content] print(【步骤2 - 生成代码】完成) print(code) print(- * 30) # 可选第三步代码审查与优化 review_prompt f 请审查以下代码指出潜在的性能问题、安全风险或代码风格问题并提供优化建议。 代码 {code} # ... 可以调用第三个模型进行审查 return spec, code if __name__ __main__: # 测试一个模糊的需求 idea 我想要一个工具能自动把我写的英文技术博客翻译成中文并发布到我的CMS系统里。 spec, code orchestrated_workflow(idea)这个示例展示了如何在你的应用逻辑中而不是依赖 Agent 内部机制手动编排一个多步骤的工作流。对于更复杂的、动态的路由逻辑你可以将prime-intellect/primeAgent 与这种外部编排结合使用。5. 进阶配置与最佳实践将 OpenRouter 和 Ori Prime Agent 用于生产环境时需要考虑以下方面。5.1 成本控制与预算管理OpenRouter 允许你为每个 API 密钥设置使用预算。在仪表板的 API Key 设置中你可以设置每日/每月限额。在代码层面你也可以通过以下方式控制成本设置max_tokens严格控制每次请求生成的最大 Token 数防止意外产生过长的回复。选择经济模型在系统提示词中优先推荐使用gemini-flash,claude-haiku,gpt-3.5-turbo等性价比高的模型处理简单任务。监控 Usage每次 API 响应中的usage字段包含了prompt_tokens,completion_tokens,total_tokens。你应该记录这些数据以分析成本。# 在请求中设置 token 限制和预算提示 data { model: prime-intellect/prime, messages: [ {role: system, content: 请尽量在100个token内回答问题。当前任务预算不超过$0.001。}, {role: user, content: 简述人工智能的历史。} ], max_tokens: 100, # 硬性限制 }5.2 错误处理与重试机制网络请求和远程 API 调用总会存在失败的可能。健壮的程序必须包含错误处理。import requests import time def robust_openrouter_call(payload, max_retries3, backoff_factor1): 一个带有指数退避重试机制的 OpenRouter 调用函数。 for attempt in range(max_retries): try: response requests.post( OPENROUTER_API_URL, headersheaders, jsonpayload, timeout30 # 设置超时 ) response.raise_for_status() # 如果状态码不是200抛出HTTPError return response.json() except requests.exceptions.RequestException as e: print(f请求失败 (尝试 {attempt 1}/{max_retries}): {e}) if attempt max_retries - 1: raise # 最后一次重试失败后抛出异常 # 指数退避等待 wait_time backoff_factor * (2 ** attempt) print(f等待 {wait_time} 秒后重试...) time.sleep(wait_time) return None # 使用示例 try: result robust_openrouter_call(data) if result: print(result[choices][0][message][content]) except Exception as e: print(f所有重试均失败: {e}) # 这里可以触发降级逻辑例如使用本地模型或返回缓存结果5.3 使用 OpenAI 客户端库兼容模式如果你已有的项目使用的是 OpenAI 的官方 Python 库你可以几乎零成本地迁移到 OpenRouter只需修改base_url和api_key。# openrouter_openai_client.py from openai import OpenAI # 初始化客户端指向 OpenRouter 的端点 client OpenAI( base_urlhttps://openrouter.ai/api/v1, api_key你的OpenRouter API密钥, ) # 像调用 OpenAI 一样调用只需在 model 参数中使用 OpenRouter 的模型标识符 completion client.chat.completions.create( modelmeta-llama/llama-3-70b-instruct, # 使用 Llama 3 模型 messages[ {role: user, content: 你好请介绍一下你自己。} ] ) print(completion.choices[0].message.content)这种方式极大地降低了集成门槛。6. 常见问题与排查思路在使用 OpenRouter 和 Ori Prime Agent 过程中你可能会遇到以下问题。问题现象可能原因排查步骤与解决方案API 调用返回 401 错误API 密钥无效、过期或未正确传递。1. 检查 API 密钥字符串是否正确前后有无空格。2. 登录 OpenRouter 控制台确认密钥状态是否有效。3. 检查请求头Authorization的格式是否为Bearer key。返回 429 速率限制错误短时间内发送了过多请求。1. 查看响应头中的X-RateLimit-*信息了解限制详情。2. 在代码中实现请求队列或增加延迟。3. 考虑升级 OpenRouter 套餐以获得更高限额。返回 400 错误请求请求的 JSON 格式错误或包含了无效参数。1. 使用json.dumps(data, indent2)打印请求数据检查格式。2. 核对model名称是否拼写正确参考官方模型列表。3. 确保messages数组格式正确。Agent (prime-intellect/prime) 不按系统提示路由系统提示词不够清晰或 Agent 的理解/执行有偏差。1. 简化并明确你的系统提示词使用清晰的“如果-那么”条件句。2. 在提示词中明确要求 Agent 在回复中“陈述其选择的模型”。3. 对于关键任务考虑使用上文示例中的外部编排逻辑而非完全依赖 Agent 内部路由。响应速度很慢1. 网络问题。2. 选择的模型本身响应慢。3. 模型提供商队列拥堵。1. 使用curl或ping测试到openrouter.ai的网络。2. 尝试换用更轻量的模型如gemini-flash。3. 在非高峰时段测试。curl命令在 Git Bash 中执行报错Windows Git Bash 对 JSON 字符串中的引号处理问题。1. 将 JSON 数据保存到文件如data.json使用curl -d data.json。2. 在 PowerShell 中尝试。3. 确保 JSON 内的双引号被正确转义。例如-d {\model\: \...\}。国内访问不稳定或无法连接网络连接问题。1. 这是常见的网络环境问题请确保你的网络环境稳定。2. 考虑在可靠的网络环境下进行开发与测试。7. 项目实战构建一个智能模型路由服务最后我们整合所学知识设计一个简易的、可配置的智能模型路由服务。这个服务将读取一个 YAML 格式的路由策略配置然后根据用户输入的问题自动选择模型并获取回答。7.1 项目结构smart_model_router/ ├── config/ │ └── routing_rules.yaml # 路由策略配置文件 ├── src/ │ ├── __init__.py │ ├── router.py # 核心路由逻辑 │ └── client.py # OpenRouter 客户端封装 ├── main.py # 主程序入口 ├── requirements.txt # 项目依赖 └── README.md7.2 配置文件 (config/routing_rules.yaml)# 模型路由规则 routing_rules: - name: 代码相关 condition: 包含关键词如 代码、编程、函数、算法、bug、python、java 等 priority: 1 model_candidates: - id: anthropic/claude-3-sonnet reason: 在代码理解和生成上表现卓越 - id: openai/gpt-4 reason: 强大的通用代码能力 fallback: openai/gpt-3.5-turbo - name: 创意写作 condition: 包含关键词如 写诗、故事、创意、文案、营销 等 priority: 2 model_candidates: - id: openai/gpt-4 reason: 创意和叙事能力强 - id: anthropic/claude-3-sonnet reason: 逻辑清晰的创意输出 fallback: google/gemini-pro - name: 快速问答 condition: 问题简短属于事实性、知识性查询 priority: 3 model_candidates: - id: google/gemini-flash-1.5 reason: 响应极快成本极低 - id: openai/gpt-3.5-turbo reason: 平衡速度与质量 fallback: google/gemini-flash-1.5 - name: 逻辑推理 condition: 包含 为什么、如何、解释、分析、计算 等需要深度思考的词 priority: 4 model_candidates: - id: anthropic/claude-3-sonnet reason: 擅长复杂推理和分析 - id: openai/gpt-4 reason: 强大的逻辑能力 fallback: anthropic/claude-3-haiku # 默认规则当以上都不匹配时 default_rule: model: openai/gpt-3.5-turbo reason: 通用、平衡的默认选择7.3 核心路由逻辑 (src/router.py)# src/router.py import yaml import re from typing import Dict, List, Optional from .client import OpenRouterClient class ModelRouter: def __init__(self, config_path: str): with open(config_path, r, encodingutf-8) as f: self.config yaml.safe_load(f) self.client OpenRouterClient() # 假设有一个封装好的客户端 self._compile_rules() def _compile_rules(self): 预处理规则例如将关键词条件编译成正则表达式简化示例 for rule in self.config.get(routing_rules, []): # 这里可以实现更复杂的关键词或语义匹配逻辑 # 本例简单使用字符串查找 rule[keywords] self._extract_keywords(rule.get(condition, )) def _extract_keywords(self, condition_text: str) - List[str]: 从条件描述中提取关键词非常简单的实现 # 这是一个示例实际应用可能需要更复杂的 NLP 处理 import jieba # 中文分词示例如果是英文可用 nltk # 此处简化返回一个列表 keywords [代码, 编程, 函数, 写诗, 故事, 为什么, 如何] return [k for k in keywords if k in condition_text] def select_model(self, query: str) - Dict: 根据用户查询选择最合适的模型 matched_rule None for rule in self.config.get(routing_rules, []): # 简单的关键词匹配逻辑 for keyword in rule.get(keywords, []): if keyword in query: matched_rule rule break if matched_rule: break if not matched_rule: # 使用默认规则 default self.config.get(default_rule, {}) return { model_id: default.get(model), reason: default.get(reason), rule_name: default } # 返回匹配规则中的第一个候选模型 candidates matched_rule.get(model_candidates, []) selected candidates[0] if candidates else {} return { model_id: selected.get(id), reason: selected.get(reason), rule_name: matched_rule.get(name), fallback: matched_rule.get(fallback) } def route_and_query(self, query: str, use_fallbackTrue) - str: 路由并执行查询支持回退机制 selection self.select_model(query) print(f[路由决策] 问题: {query}) print(f[路由决策] 匹配规则: {selection[rule_name]}) print(f[路由决策] 选择模型: {selection[model_id]} (理由: {selection[reason]})) primary_model selection[model_id] response self.client.chat_completion(modelprimary_model, messagequery) # 简单的回退逻辑如果主模型调用失败且有备用模型则尝试备用 if not response and use_fallback and selection.get(fallback): print(f[路由决策] 主模型 {primary_model} 调用失败尝试回退到 {selection[fallback]}) response self.client.chat_completion(modelselection[fallback], messagequery) if response: return response else: return 抱歉模型服务暂时不可用。7.4 客户端封装 (src/client.py)# src/client.py import os import requests from typing import Optional class OpenRouterClient: def __init__(self): self.api_key os.environ.get(OPENROUTER_API_KEY) if not self.api_key: raise ValueError(请设置环境变量 OPENROUTER_API_KEY) self.base_url https://openrouter.ai/api/v1 self.headers { Authorization: fBearer {self.api_key}, Content-Type: application/json, } def chat_completion(self, model: str, message: str, **kwargs) - Optional[str]: 发送聊天补全请求 data { model: model, messages: [{role: user, content: message}], max_tokens: kwargs.get(max_tokens, 500), } try: resp requests.post( f{self.base_url}/chat/completions, headersself.headers, jsondata, timeout30 ) resp.raise_for_status() result resp.json() return result[choices][0][message][content] except requests.exceptions.RequestException as e: print(f调用模型 {model} 失败: {e}) return None7.5 主程序 (main.py)# main.py import sys sys.path.append(.) # 简化路径处理实际项目应使用正确包管理 from src.router import ModelRouter def main(): # 初始化路由器 router ModelRouter(config/routing_rules.yaml) # 交互式测试 print(智能模型路由服务已启动。输入 quit 退出。) while True: try: user_input input(\n请输入你的问题: ).strip() if user_input.lower() in [quit, exit, q]: print(再见) break if not user_input: continue # 获取路由后的回答 answer router.route_and_query(user_input) print(f\n回答: {answer}) except KeyboardInterrupt: print(\n程序被中断。) break except Exception as e: print(f发生错误: {e}) if __name__ __main__: main()7.6 运行与测试安装依赖pip install pyyaml requests # 如果处理中文可能需要 jieba: pip install jieba设置环境变量# Linux/macOS export OPENROUTER_API_KEY你的密钥 # Windows (PowerShell) $env:OPENROUTER_API_KEY你的密钥运行程序python main.py输入测试请输入你的问题: 用Python写一个冒泡排序 [路由决策] 问题: 用Python写一个冒泡排序 [路由决策] 匹配规则: 代码相关 [路由决策] 选择模型: anthropic/claude-3-sonnet (理由: 在代码理解和生成上表现卓越) 回答: 以下是Python实现的冒泡排序算法...这个实战项目展示了一个可扩展的架构。你可以通过修改routing_rules.yaml来轻松调整路由策略而无需改动代码。未来可以增强匹配逻辑集成语义相似度计算、增加更复杂的回退链、加入成本日志和监控等。通过本文的梳理我们从 OpenRouter 的基础 API 调用到 Ori Prime Agent 的智能路由理念再到构建一个完整的路由服务已经走完了一个完整的学习和实践路径。OpenRouter 的价值在于它抽象了底层模型的复杂性而 Ori Prime Agent 则提供了面向智能体编程的雏形。在实际开发中你可以根据业务需求灵活选择直接调用特定模型、使用 Agent 进行内部调度或者像实战项目那样实现自己的外部路由逻辑。关键在于理解这些模式从而为你的 AI 应用选择最合适、最经济的“大脑”。