Vercel AI SDKでAIチャットアプリが10分で完成!実験・開発レポート
昨日6月15日にVercelが発表した「Vercel AI SDK」とは何者なのか。
公式のブログ記事にはこのように書かれている。
なるほど。要するに簡単にAI搭載アプリを作れるようになると。
さらにこうある。
ワクワクしますね。開発がさらに楽しくなります。
本日早速デモを作ってみました。マジで爆速で構築できます。サンプルのソースコードに多少アレンジを加えても、AIチャットアプリが10分程度で完成しました。
APIのモデルは新しい「gpt-3.5-turbo-0613」を使用しました。やっぱり速いですねー。レンダリングも非常にスムーズです。
gpt-3.5-turbo-0613 については、こちらで書いてます。
Next.jsとOpenAI APIを使用して簡単なチャットアプリを構築する手順は以下の通りです。
Next.jsアプリを作成する
npx create-next-app@latest
OpenAI APIキーを追加する
ルートディレクトリに .env.local ファイルを作成して、OPENAI_API_KEY にシークレットキーをセットします。
OPENAI_API_KEY=sk-****
モジュールをインストールする
npm install ai
npm install openai-edge
コードを書く
app ディレクトリ内に api/chat/route.ts ファイルを作成して、Vercel AI SDKを使ったコードを記述します。GPTモデルは自分の好きなモデルに置き換えてください。
// app/api/chat/route.ts
import { OpenAIStream, StreamingTextResponse } from 'ai'
import { Configuration, OpenAIApi } from 'openai-edge'
const config = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
})
const openai = new OpenAIApi(config)
export const runtime = 'edge'
export async function POST(req: Request) {
const { messages } = await req.json()
const response = await openai.createChatCompletion({
model: 'gpt-3.5-turbo-0613',
stream: true,
messages,
})
const stream = OpenAIStream(response)
return new StreamingTextResponse(stream)
}
app/page.tsx ファイルを以下のように書き換えます。
'use client'
import { useChat } from 'ai/react'
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat()
return (
<main className="mx-auto max-w-3xl px-4 py-8">
<div className="space-y-1">
{messages.map((m) => (
<div key={m.id}>
<span>{m.role === 'user' ? '👤' : '🤖'}: </span>
<span className={m.role === 'user' ? 'text-blue-400' : ''}>
{m.content}
</span>
</div>
))}
</div>
<div className="mt-4">
<form onSubmit={handleSubmit}>
<input
value={input}
placeholder="Say something..."
onChange={handleInputChange}
className="w-full rounded px-2 py-1 text-gray-900 focus:outline-0"
/>
</form>
</div>
</main>
)
}
Vercel AI SDKには、データフェッチとストリーミングテキストレスポンスのレンダリングのためのフックが含まれています。ここでは useChat のおかげで上記のようにスッキリ、数行のコードで済みます。
完成!
サーバーを起動する
npm run dev
あとはブラウザで http://localhost:3000 にアクセスして遊んでみてください。
ソースコードはGitHubで確認できます。