【Next.js】GPTのストリーミング出力を、Vercel AI SDKを使って受け取るためのAPI設定

備忘録

Next.jsとVercel AI SDK(これについてはこの前ドキュメントの一部を和訳したやつで触れてます)を用いて、学習しながらチャットボットの制作を進めている中で、GPTのAPIからのレスポンスのストリーミングを受け取れるようにするため、とりあえずAPIとしてぶちこんでおける汎用的なコードをメモしておきます(と言っても公式のチュートリアルほぼそのままですが)。
App Routerの使用を想定しています。

// app/api/chat/route.js
import OpenAI from 'openai';  // OpenAIライブラリをインポート
import { OpenAIStream, StreamingTextResponse } from 'ai';

// OpenAI API用のクライアントを作成
const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

// ランタイムをエッジ(edge)に設定(重要!)
export const runtime = 'edge';

// POSTリクエストを処理する関数
export async function POST(req) {
  // リクエストの本文から`messages`を取り出す
  const { messages } = await req.json();
  
  // OpenAIにストリーミングでチャットの完了を要求
  const response = await openai.chat.completions.create({
    model: 'gpt-3.5-turbo',
    stream: true,
    messages,
  });

  // 応答をテキストストリームに変換
  const stream = OpenAIStream(response);

  // ストリームを返す
  return new StreamingTextResponse(stream);
}

コメント

タイトルとURLをコピーしました