OpenRouter 集成与实践

OpenRouter 集成与实践

Mastra

3 分钟阅读

Mastra

将 OpenRouter 与 Mastra 配合使用

Mastra

将 OpenRouter 与 Mastra 集成,通过统一接口访问各种 AI 模型。本指南提供从基础设置到高级配置的完整示例。

第 1 步:初始化新的 Mastra 项目

最简单的起步方式是使用自动项目创建:

# 使用 create-mastra 创建新项目
npx create-mastra@latest

系统会通过提示引导你设置项目。对本示例,请选择:

  • 项目名称:my-mastra-openrouter-app
  • 组件:Agents(推荐)
  • 默认提供商选择 OpenAI(推荐)——我们稍后会手动配置 OpenRouter
  • 可选择包含示例代码

关于手动设置 Mastra 项目,或将 Mastra 添加到现有项目的详细说明,请参阅官方 Mastra 文档

第 2 步:配置环境变量

使用 create-mastra 创建项目后,你会在项目根目录找到 .env.development 文件。由于设置时选择了 OpenAI,但我们将改用 OpenRouter:

  1. 打开 .env.development 文件
  2. 删除或注释掉 OPENAI_API_KEY 这一行
  3. 添加你的 OpenRouter API 密钥:
# .env.development
# OPENAI_API_KEY=your-openai-key  # 注释掉或删除此行
OPENROUTER_API_KEY=sk-or-your-api-key-here

你也可以卸载 @ai-sdk/openai 包,因为我们将改用 OpenRouter:

npm uninstall @ai-sdk/openai
npm install @openrouter/ai-sdk-provider

第 3 步:配置智能体以使用 OpenRouter

设置好 Mastra 项目后,你需要修改智能体文件,改用 OpenRouter 而不是默认的 OpenAI 提供商。

若使用了 create-mastra,你很可能有一个位于 src/mastra/agents/agent.ts 或类似路径的文件。将其内容替换为:

import { Agent } from '@mastra/core/agent';
import { createOpenRouter } from '@openrouter/ai-sdk-provider';

// 初始化 OpenRouter 提供商
const openrouter = createOpenRouter({
  apiKey: process.env.OPENROUTER_API_KEY,
});

// 创建智能体
export const assistant = new Agent({
  model: openrouter('anthropic/claude-3-opus'),
  name: 'Assistant',
  instructions:
    '你是一位精通技术与科学的乐于助人的助手。',
});

同时请更新 src/mastra/index.ts 处的 Mastra 入口,以使用你重命名后的智能体:

import { Mastra } from '@mastra/core';

import { assistant } from './agents/agent'; // 若使用了不同的文件名,请更新导入路径

export const mastra = new Mastra({
  agents: { assistant }, // 此处使用与智能体文件中导出名称相同的名称
});

第 4 步:运行应用

将智能体配置为使用 OpenRouter 后,即可运行 Mastra 开发服务器:

npm run dev

这将启动 Mastra 开发服务器,并使你的智能体可在以下地址访问:

  • REST API 端点:http://localhost:4111/api/agents/assistant/generate
  • 交互式演练场(playground):http://localhost:4111

Mastra 演练场提供友好的用户界面,你可以在其中与智能体交互并测试其能力,无需编写额外代码。

如有需要,也可以使用 curl 测试 API 端点:

curl -X POST http://localhost:4111/api/agents/assistant/generate \
-H "Content-Type: application/json" \
-d '{"messages": ["量子计算最近有哪些进展?"]}'

与 Mastra 的基础集成

将 OpenRouter 与 Mastra 集成的最简单方式,是把 OpenRouter AI 提供商与 Mastra 的 Agent 系统一起使用:

import { Agent } from '@mastra/core/agent';
import { createOpenRouter } from '@openrouter/ai-sdk-provider';

// 初始化 OpenRouter 提供商
const openrouter = createOpenRouter({
  apiKey: process.env.OPENROUTER_API_KEY,
});

// 使用 OpenRouter 创建智能体
const assistant = new Agent({
  model: openrouter('anthropic/claude-3-opus'),
  name: 'Assistant',
  instructions: '你是一位乐于助人的助手。',
});

// 生成回复
const response = await assistant.generate([
  {
    role: 'user',
    content: '给我讲讲可再生能源。',
  },
]);

console.log(response.text);

高级配置

若需要对 OpenRouter 请求有更多控制,可以传入额外的配置选项:

import { Agent } from '@mastra/core/agent';
import { createOpenRouter } from '@openrouter/ai-sdk-provider';

// 使用高级选项初始化
const openrouter = createOpenRouter({
  apiKey: process.env.OPENROUTER_API_KEY,
  extraBody: {
    reasoning: {
      max_tokens: 10,
    },
  },
});

// 创建带有模型级选项的智能体
const chefAgent = new Agent({
  model: openrouter('anthropic/claude-3.7-sonnet', {
    extraBody: {
      reasoning: {
        max_tokens: 10,
      },
    },
  }),
  name: 'Chef',
  instructions: '你是一位专精法餐的厨师助手。',
});

提供商特定选项

你也可以在请求中传入提供商特定选项:

// 获取带有提供商特定选项的回复
const response = await chefAgent.generate([
  {
    role: 'system',
    content:
      '你是 Chef Michel,一位专精生酮(keto)饮食的烹饪专家……',
    providerOptions: {
      // 提供商特定选项——键可以是 'anthropic' 或 'openrouter'
      anthropic: {
        cacheControl: { type: 'ephemeral' },
      },
    },
  },
  {
    role: 'user',
    content: '能推荐一份生酮早餐吗?',
  },
]);

通过 OpenRouter 使用多个模型

OpenRouter 让你能够访问来自不同提供商的各种模型。以下是使用多个模型的方式:

import { Agent } from '@mastra/core/agent';
import { createOpenRouter } from '@openrouter/ai-sdk-provider';

const openrouter = createOpenRouter({
  apiKey: process.env.OPENROUTER_API_KEY,
});

// 使用不同模型创建智能体
const claudeAgent = new Agent({
  model: openrouter('anthropic/claude-3-opus'),
  name: 'ClaudeAssistant',
  instructions: '你是由 Claude 驱动的乐于助人的助手。',
});

const gptAgent = new Agent({
  model: openrouter('openai/gpt-4'),
  name: 'GPTAssistant',
  instructions: '你是由 GPT-4 驱动的乐于助人的助手。',
});

// 根据需要使用不同的智能体
const claudeResponse = await claudeAgent.generate([
  {
    role: 'user',
    content: '用简单的方式解释量子力学。',
  },
]);
console.log(claudeResponse.text);

const gptResponse = await gptAgent.generate([
  {
    role: 'user',
    content: '用简单的方式解释量子力学。',
  },
]);
console.log(gptResponse.text);

资源

更多信息和详细文档,请查看这些资源: