跳到主要内容

OpenRouter

OpenRouter 是一个统一的网关,可以访问来自 OpenAI、Anthropic 和 Google 等不同提供商的多种 AI 模型。@aigne/open-router 包提供了一个标准化接口,用于将这些模型集成到 AIGNE 框架中。这使得开发人员只需最少的代码更改即可在不同模型之间切换,并

OpenRouter 是一个统一的网关,可以访问来自 OpenAI、Anthropic 和 Google 等不同提供商的多种 AI 模型。@aigne/open-router 包提供了一个标准化接口,用于将这些模型集成到 AIGNE 框架中。这使得开发人员只需最少的代码更改即可在不同模型之间切换,并实现强大的回退机制。

本指南详细介绍了安装、配置和使用 @aigne/open-router 包以利用多种 AI 模型的过程。

OpenRouter

安装

首先,安装 @aigne/open-router@aigne/core 包。以下命令演示了如何使用 npm、yarn 和 pnpm 进行安装。

npm

bash
npm install @aigne/open-router @aigne/core

yarn

bash
yarn add @aigne/open-router @aigne/core

pnpm

bash
pnpm add @aigne/open-router @aigne/core

配置和使用

OpenRouterChatModel 类是与 OpenRouter API 交互的主要接口。要使用它,您必须提供您的 OpenRouter API 密钥。这可以直接在构造函数中通过 apiKey 选项提供,也可以通过设置 OPEN_ROUTER_API_KEY 环境变量来提供。

基本示例

下面是使用 OpenRouterChatModel 发送聊天请求的标准实现。此示例使用了 Anthropic 的 claude-3-opus 模型。

基本用法

typescript
import { OpenRouterChatModel } from "@aigne/open-router";

const model = new OpenRouterChatModel({
  // 直接提供 API 密钥或使用环境变量 OPEN_ROUTER_API_KEY
  apiKey: "your-api-key", // 如果在环境变量中设置,则为可选
  // 指定模型(默认为 'openai/gpt-4o')
  model: "anthropic/claude-3-opus",
  modelOptions: {
    temperature: 0.7,
  },
});

const result = await model.invoke({
  messages: [{ role: "user", content: "Which model are you using?" }],
});

console.log(result);

预期输出将包含文本响应、模型标识符和 token 使用指标。

输出

json
{
  "text": "I am currently using the anthropic/claude-3-opus model, accessed through OpenRouter.",
  "model": "anthropic/claude-3-opus",
  "usage": {
    "inputTokens": 15,
    "outputTokens": 23
  }
}

构造函数选项

OpenRouterChatModel 继承自 @aigne/openai 包的 OpenAIChatModel,并接受相同的构造函数选项。

  • apiKey string — 您的 OpenRouter API 密钥。如果未提供,客户端将检查 OPEN_ROUTER_API_KEY 环境变量。
  • model string (default: openai/gpt-4o) — 您希望使用的模型的标识符(例如 anthropic/claude-3-opus)。
  • fallbackModels string[] — 一个模型标识符数组,用作主模型失败时的回退选项。
  • baseURL string (default: https://openrouter.ai/api/v1) — OpenRouter API 的基础 URL。可以为测试或代理覆盖此 URL。
  • modelOptions object — 一个包含要传递给模型提供商的参数的对象,例如 temperature、max_tokens 或 top_p。

使用多种模型及回退机制

@aigne/open-router 包的一个关键特性是能够指定回退模型。如果主模型请求失败,系统将自动使用 fallbackModels 列表中的下一个模型重试请求。这确保了更高的应用程序可靠性。

模型回退

typescript
import { OpenRouterChatModel } from "@aigne/open-router";

const modelWithFallbacks = new OpenRouterChatModel({
  apiKey: "your-api-key",
  model: "openai/gpt-4o",
  fallbackModels: ["anthropic/claude-3-opus", "google/gemini-1.5-pro"], // 回退顺序
  modelOptions: {
    temperature: 0.7,
  },
});

// 将首先尝试 gpt-4o,如果失败则尝试 claude-3-opus,然后是 gemini-1.5-pro
const fallbackResult = await modelWithFallbacks.invoke({
  messages: [{ role: "user", content: "Which model are you using?" }],
});

console.log(fallbackResult);

流式响应

对于需要实时交互的应用程序,您可以启用流式传输,以便在响应块可用时进行处理。在 invoke 方法中设置 streaming: true 选项。

必须遍历响应流以组装完整的消息。

流式传输示例

typescript
import { isAgentResponseDelta } from "@aigne/core";
import { OpenRouterChatModel } from "@aigne/open-router";

const model = new OpenRouterChatModel({
  apiKey: "your-api-key",
  model: "anthropic/claude-3-opus",
});

const stream = await model.invoke(
  {
    messages: [{ role: "user", content: "Which model are you using?" }],
  },
  { streaming: true },
);

let fullText = "";
const json = {};

for await (const chunk of stream) {
  if (isAgentResponseDelta(chunk)) {
    const text = chunk.delta.text?.text;
    if (text) fullText += text;
    if (chunk.delta.json) Object.assign(json, chunk.delta.json);
  }
}

console.log(fullText);
console.log(json);

最终的 fullTextjson 对象将包含聚合后的响应数据。

输出

text
I am currently using the anthropic/claude-3-opus model, accessed through OpenRouter.
{ model: 'anthropic/claude-3-opus', usage: { inputTokens: 15, outputTokens: 23 } }

总结

@aigne/open-router 包通过一个统一且具有弹性的接口,简化了对多种语言模型的访问。通过利用模型回退和流式传输等特性,您可以构建更强大、响应更快的 AI 应用程序。

有关 AIGNE 框架中模型基本概念的更多信息,请参阅模型概述