# Vercel AI SDK > Vercel AI SDK で Kiln からストリーミングする方法です。ai と openai-compatible のプロバイダーのインストール、検証済みの streamText 呼び出し、@ai-sdk/openai が適さない理由を説明します。 Source: https://kiln.bricksum.com/docs/ja/sdks/vercel-ai Vercel AI SDK は OpenAI 互換のプロバイダーパッケージを通じて Kiln に接続します。インストールするのはこちらで、既定値が OpenAI のサービスに合わせてある @ai-sdk/openai ではありません。 ## インストール **TypeScript** ```bash npm install ai @ai-sdk/openai-compatible ``` ## 接続 **TypeScript** ```javascript import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; import { streamText } from "ai"; const kiln = createOpenAICompatible({ name: "kiln", baseURL: "https://api.bricksum.com/v1", apiKey: process.env.KILN_API_KEY, // sk-bk-... }); const { textStream } = streamText({ model: kiln("qwen3-32b"), prompt: "Write a haiku about kilns.", maxOutputTokens: 800, }); for await (const chunk of textStream) process.stdout.write(chunk); ``` ## Kiln での違い - **openai-compatible のプロバイダーを使う** createOpenAICompatible は base URL とキーをそのまま受け取ります。@ai-sdk/openai のプロバイダーは OpenAI のエンドポイント構成とモデル ID を前提にしているため、Kiln が同じ形式を話す場合でもこのパッケージは適しません。 - **max_tokens ではなく maxOutputTokens** この SDK は出力の上限を maxOutputTokens と呼び、max_tokens として送ります。reasoning トークンもこの上限の中で課金されるため、余裕を確保しないとテキストが届く前にストリームが終わります。例の 800 はこのモデルで測定していない初期値のため、テキストが空で finishReason が 'length' なら増やしてください。 base URL、認証、すべてのエンドポイントが共通で受け取るリクエストパラメータ、レスポンスの形式、ストリーミング、エラーコードは、どの SDK を使っても同じです。これらは [API リファレンス](https://kiln.bricksum.com/docs/ja/api-reference)に一度だけまとめています。 上の呼び出しが到達するエンドポイントは [Chat completions](https://kiln.bricksum.com/docs/ja/api-reference/chat-completions)です。 モデル ID は API が現在提供しているものである必要があります。一覧の取得方法と、目的の ID が一覧にない場合の対処は [モデル](https://kiln.bricksum.com/docs/ja/models) のページにあります。 SDK に関係なくこのモデルが対応していない機能は [OpenAI からの移行](https://kiln.bricksum.com/docs/ja/migrating-from-openai) のページにまとめています。 メモ このページのスニペットは 2026-09-21 に ai 7.0.107, @ai-sdk/openai-compatible 3.0.53 の環境で Kiln API に対して実行し、動作を確認しています。 未確認の項目: その実行は gpt-oss-120b で行いました。ページは現在 qwen3-32b を使っており、このモデルではまだ再実行していません。上のストリーミング呼び出しだけを実行して確認しています。この SDK のツール呼び出しと構造化出力は Kiln では確認していません。