Vercel AI SDK
OpenAI 互換プロバイダーで Vercel AI SDK から HopBase を呼び出します。ストリーミングとツール呼び出しも含みます。
Vercel の AI SDK は AI アプリケーションを構築するための TypeScript ツールキットです。HopBase には公式の @ai-sdk/openai-compatible プロバイダーで接続します。Claude モデルには @ai-sdk/anthropic を使います。
| 設定 | 値 |
|---|---|
| パッケージ | @ai-sdk/openai-compatible |
baseURL | https://api.hop-base.com/v1 |
apiKey | コンソールで作成したキー。Authorization: Bearer で送信されます |
| モデル ID | そのキーで GET /v1/models が返す ID をそのまま使います。例:deepseek-v4.1-flash-1017 |
本番環境で ai 7.0 と @ai-sdk/openai-compatible 3.0 を使って検証済みです:generateText、streamText、tool() によるツール呼び出しがすべて動作し、使用量も返されます。
HopBase のキーが呼び出せるのは、そのキーに含まれるプランのモデルだけです。コンソールでキーを作成するときに、使いたいモデルを提供するプランを選んでください。たとえば deepseek-v4.1-flash-1017 なら DeepSeek、deepseek-v4.1-flash-1017-sg なら DeepSeek シンガポールデータセンター、gemini-3.8-flash なら Gemini 全モデル(画像生成含む) です。モデルのプランを含まないキーでは 404 model_not_found が返ります。
インストール
npm i ai @ai-sdk/openai-compatible zodキーは環境変数に置きます:
export HOPBASE_API_KEY=sk-your-keyプロバイダーを作成する
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
export const hopbase = createOpenAICompatible({
name: 'hopbase',
baseURL: 'https://api.hop-base.com/v1',
apiKey: process.env.HOPBASE_API_KEY,
includeUsage: true, // report token usage on streamed responses
});hopbase('<モデル ID>') はチャットモデルを返します。ID は GET /v1/models と完全に一致させてください。
テキストを生成する
import { generateText } from 'ai';
import { hopbase } from './hopbase';
const { text } = await generateText({
model: hopbase('deepseek-v4.1-flash-1017'),
prompt: 'Reply with one word: hello.',
});
console.log(text);ストリーミング
import { streamText } from 'ai';
import { hopbase } from './hopbase';
const result = streamText({
model: hopbase('deepseek-v4.1-flash-1017'),
prompt: 'Count from 1 to 5.',
});
for await (const delta of result.textStream) process.stdout.write(delta);ツールを呼び出す
import { generateText, tool, stepCountIs } from 'ai';
import { z } from 'zod';
import { hopbase } from './hopbase';
const { text } = await generateText({
model: hopbase('deepseek-v4.1-flash-1017'),
tools: {
getWeather: tool({
description: 'Get the weather for a city',
inputSchema: z.object({ city: z.string() }),
execute: async ({ city }) => ({ city, tempC: 21 }),
}),
},
stopWhen: stepCountIs(3),
prompt: 'What is the weather in Tokyo? Use the tool.',
});
console.log(text);モデルを切り替えるには ID を変えるだけです。たとえば Gemini 全モデル(画像生成含む) プランを含むキーで hopbase('gemini-3.8-flash') を呼び出します。
Claude モデル
Claude モデルは Anthropic Messages プロトコルで提供されます。@ai-sdk/anthropic を使い、baseURL には /v1 を残してください。このパッケージは末尾に /messages を付け加えるため、リクエストは https://api.hop-base.com/v1/messages に送られます。
import { createAnthropic } from '@ai-sdk/anthropic';
import { generateText } from 'ai';
const hopbaseClaude = createAnthropic({
baseURL: 'https://api.hop-base.com/v1',
apiKey: process.env.HOPBASE_API_KEY,
});
const { text } = await generateText({
model: hopbaseClaude('claude-sonnet-5-5'),
prompt: 'Reply with one word: hello.',
});キーには Claude のプランが含まれている必要があります。これは Anthropic 公式 SDK や Claude Code とは異なる点です。そちらはパスなしの https://api.hop-base.com を指定し、/v1/messages を自分で付け加えます。
各モデルの価格は料金ページを参照してください。
トラブルシューティング
| 症状 | 原因 |
|---|---|
401 | プロセスで HOPBASE_API_KEY が設定されていない、またはキーが無効化されている |
404 model_not_found | キーにモデルのプランが含まれていない、または ID が省略されている。GET /v1/models を確認し直してください |
@ai-sdk/anthropic のリクエストだけが失敗する | baseURL に /v1 がない。リクエスト URL は /v1/messages で終わる必要があります |
route_not_found | キーがチャットエンドポイントを持たない画像・動画プランのもの |
次のステップ
- OpenCode:同じプロバイダーパッケージをコーディングエージェントで設定する
- OpenAI SDK と Anthropic SDK:公式 SDK から同じエンドポイントを呼び出す
- 利用可能なモデル:キーで使えるモデル ID を確認する