本文へスキップ

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
baseURLhttps://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キーがチャットエンドポイントを持たない画像・動画プランのもの

次のステップ