FrontEnd

Vercel AI SDK を試してみた

投稿日:

はじめに

Vercel AI SDKを使ってChatGPTの様なチャットアプリを実装してみました

Vercel AI SDKとは

Next.jsなどのフロントエンドフレームワークを使ったWebアプリにAI機能を簡単に実装する為のツールです。
Next.jsのほか、Nuxt、Svelteなどに対応しています。
以下の様な特徴があります。

  • LLMとのAPI通信からUI表示までをカバーしてこれだけで簡単に実装できる
  • レスポンスがストリーミングの形で取得できる。(ChatGPTの様なテキストがパラパラと表示される)
  • 統一されたAPIで異なるLLMを使用する事が出来る。(開発側のコード変更が不要)
  • プロンプトにはテキストと画像が使えて、テキストでは会話履歴を含めてコンテキストに沿った生成結果が得られる。

実装例

今回は、フレームワークにNext.js、モデルにCohereを使いチャットアプリを実装します。
実装の流れは

  • 準備: SDKのインストール。CohereのAPI KEYの発行。
  • API実装: AIと通信する為のAPIを作成します。このAPIでAIからチャットの会話履歴を元に生成した回答をストリーミングレスポンスで取得します。Next.jsのルートハンドラを使用します。
  • 画面実装: 上記をAPIを呼んで、結果を表示する画面を作成します。

準備

SDKをインストールします

Zodも後で使うので合わせてインストールしておきます

今回はCohereモデルを使用するのでCohere用のプロパイダーを追加します

CohereのAPIを使用するため、公式からAPI KEYを発行します。
発行したら、.env.localファイルに以下追加します

API

ルートハンドラ(app/api/chat/route.ts)を以下の様に作成します。

POSTリクエストからmessages(会話履歴)を取得して streamText 関数に渡しています。
この関数でCohereと通信を行い、返されたオブジェクトを toDataStreamResponse() 関数でストリーミングレスポンスで返しています。
他LLMを利用したい場合は、引数のmodelの値を他LLMに変更するだけです。
という風にAIとのやりとりはSDKが丸っとやってくれています。

画面

生成結果を表示する画面側の実装はpage.tsxを以下の様にします。

ここでは useChatフック を使用しています。
それぞれ、

  • messages: 現在までの会話履歴。ユーザーとAI側の両方の会話データ。AIからのレスポンスがこのオブジェクトに追加される。
  • input: ユーザー入力フィールドの現在の値。
  • handleInputChange: 入力フィールドへの入力処理関数。
  • handleSubmit: form送信処理関数。先に作ったルートハンドラー(/api/chat エンドポイント)へのPOST。useChatの第一引数に任意のエンドポイントを指定する事も可能です。

のようになっており、API通信と結果取得まで行っています。
デベロッパーは結果の表示箇所のみ実装する形になっています。

これでAIチャットボットが実装出来ました。

ツール

AIはなどリアルタイムな情報や学習されていない情報にアクセス出来ませんが、ツールを設定しておく事で必要に応じてAIに外部APIの呼び出しなどを行わせる事が出来ます。
例えば、「現在の天気を知りたい」というプロンプトに対して、天気情報取得するAPIを呼び出しその結果を生成結果に反映させる事が出来ます。

以下の様に実装を変更します。

streamText() の引数に tools を追加します。
コンテキストとdescriptionの値を見てAIが適宜必要なtoolを実行して、その結果を生成結果に反映させます。
上記の例で言うと、「東京の現在の気温を教えて」の様なプロンプトを入力すると「30°F」等と返ってきます。
masStepsは、一連の流れをstepという単位で数えた場合の上限です。
上記例では、step1で「プロンプトがモデルに送られ、モデルがtoolを呼ぶ」 → step2で「toolの結果がモデルに送られ、それを踏まえて結果を生成する」となるようで2stepが必要みたいです。

画面側も以下の様に変更すると、
AIの生成結果にツールが使われている場合に使われたツール名と関連オブジェクトの中身が表示されるようになります。

さいごに

面倒な部分をSDKがやってくれて非常に簡単に実装出来ました。
中身についてはドキュメントが充実してるので、読めば大体は分かるかと思います

おすすめ書籍

実践Next.js —— App Routerで進化するWebアプリ開発 エンジニア選書 Next.js+ヘッドレスCMSではじめる! かんたんモダンWebサイト制作入門 高速で、安全で、運用しやすいサイトのつくりかた

blog-page_footer_336




blog-page_footer_336




-FrontEnd
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

React Router v7 + Cloudflare PagesでのOGPタグ設定とOGP画像生成

1 はじめに2 OGPタグの設定2.1 全体で共通の設定2.2 meta()関数による動的な設定3 OGP画像の生成3.1 @vercel/ogの導入3.2 middlwareの実装4 OGPチェッカ ...

js

今さらChart.jsでグラフ描画

1 はじめに2 準備3 折れ線グラフと棒グラフ3.1 コード全体3.2 html3.3 JS4 円グラフ4.1 html4.2 JS5 さいごに6 おすすめ書籍 はじめに JSのチャートライブラリは色 ...

Vue CLIでPWAが簡単に実装できる 〜 Service Worker と A2HS 〜

1 はじめに2 環境構築2.1 Vue CLIをインストール2.2 プロジェクトを作成2.3 PWA選択時に追加されるファイル2.4 動作確認時の注意3 Service Worker3.1 Servi ...

Cordovaの実機デバッグでハマった話

1 はじめに2 Cordovaとは2.1 React Nativeとの違い3 Cordovaでモバイルアプリを作る3.1 Node.jsをインストール3.2 Cordovaのコマンドラインツールをイン ...

Vue.js 3.0のComposition APIを使ってみた

1 はじめに1.1 Composition APIとは1.2 環境構築2 Composition API での書き方2.1 function2.2 computed2.3 watch2.4 lifec ...

フォロー

blog-page_side_responsive

2024年12月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。