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


関連記事

Vue on Rails で作ったアプリを振り返ってみる

1 はじめに2 全体的なこと2.1 ディレクトリ構成2.2 CSSフレームワーク2.3 Capistranoでのデプロイ3 axiosのラッパー4 Vuex4.1 ログインの状態管理5 Router6 ...

AMPに対応してモバイルページを高速に表示させる

1 はじめに2 AMPとは3 なぜAMPでは高速に表示されるのか3.1 非同期スクリプトのみを許可3.2 リソース読み込みに優先度を付ける3.3 プリレンダリング4 AMPの3要素4.1 AMP HT ...

Next.jsでJSON-LDを実装する

1 はじめに2 リッチリザルトとは3 構造化データとは4 Next.jsでJSON-LDを実装4.1 JSON-LDデータの作成4.2 JSON-LDデータの埋め込み5 リッチリザルトテスト6 さいご ...

rails

Rails 7でフロントエンド開発が大きく変わる

1 はじめに1.1 脱Node.jsの経緯2 Rails 7.0でのアセット管理3 propshaft4 importmap-rails4.1 JavaScript CDN経由でのnpmパッケージの利 ...

Vue.js入門その1〜基本文法〜

はじめに 軽量JSフレームワークとして有名なVue.js。 最近、Laravelに触れる機会が増えたことと、以前からRails + Vueという構築を耳にするので、今更ではありますが勉強を始めようと思 ...

フォロー

blog-page_side_responsive

2024年12月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

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