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 文档。
使用 create-mastra 创建项目后,你会在项目根目录找到 .env.development 文件。由于设置时选择了 OpenAI,但我们将改用 OpenRouter:
- 打开
.env.development 文件
- 删除或注释掉
OPENAI_API_KEY 这一行
- 添加你的 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
设置好 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 开发服务器:
这将启动 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);
资源
更多信息和详细文档,请查看这些资源: