Slide 1

Slide 1 text

Vercel AI SDK を使って Next.js で AIアプリケーションを 作成する⽅法のご紹介 1

Slide 2

Slide 2 text

2 今⽇喋ること ● AIをWEBに組み込むモチベーション ● Vercel の AI SDKとは? ● 組み込みの例 ● もっと知りたい⽅へ ● まとめ

Slide 3

Slide 3 text

3 今⽇喋ること ● AIをWEBに組み込むモチベーション ● Vercel の AI SDKとは? ● 組み込みの例 ● もっと知りたい⽅へ ● まとめ

Slide 4

Slide 4 text

4 AIをWEBアプリに組み込むよくある活⽤例 ● RAGで⾃社特有の情報をチャットで検索 ● 公開する⽂章をAIを使って添削 ● デザインシステムで拡張したAIでUI⽣成

Slide 5

Slide 5 text

5 AIを組み込む時のよくある実装 ● AIとのAPI通信 ○ AIとはAPIで通信する ● チャットの履歴の保持 ○ コンテキストを履歴からAIに与える ● ストリーミング機能 ○ AIは処理が完了するまで時間がかかる ● RAG ○ LLM(AI)に外部情報を組み合わせる

Slide 6

Slide 6 text

6 AIの組み込みをサポートするライブラリ ● LangChain ● LlmaxIndex ● HeyStack ● AI SDK

Slide 7

Slide 7 text

7 今⽇喋ること ● AIをWEBに組み込むモチベーション ● Vercel の AI SDKとは? ● 組み込みの例 ● もっと知りたい⽅へ ● まとめ

Slide 8

Slide 8 text

8 Vercel の AI SDKとは? フロントエンドフレームワークを使って 作成したWEBアプリケーションに AIを活⽤した機能を組み込むためのSDK

Slide 9

Slide 9 text

9 AI SDKの対応フレームワーク ● React ● Next.js(RSCも experimental だけど対応) ● Svelte ● Nuxt ● Node.js

Slide 10

Slide 10 text

10 AI SDKの主要な機能 ● Provider and Models ● Prompts ● Tools ● Streaming

Slide 11

Slide 11 text

11 Provider and Models 複数のAI提供元やモデルをコードの 変更なしに⼊れ替えることができる AI SDK

Slide 12

Slide 12 text

12 Provider and Models - 対応 Provider ● OpenAI ● Azure ● Anthropic ● Amazon Bedrock ● Google Vertex ● Cohere ● LLmaCPP ● …etc

Slide 13

Slide 13 text

13 Provider and Models - 注意点 ただし、全てのAI SDKの機能を全てのモデルで 使えるわけでない点に注意が必要 例えばgpt-4は画像⼊⼒機能は使えない

Slide 14

Slide 14 text

14 Prompts AI SDKは複数種類のプロンプトを提供してる ● テキストプロンプト ● 画像プロンプト ● システムプロンプト ● メッセージプロンプト

Slide 15

Slide 15 text

15 Prompts - システムプロンプト システムに制約を加えたい時に 設定するプロンプト あなたは⼦供向け教育AIです。 ⼩学3年⽣でも理解できる⾔葉を使い、100語以内で回答してください。 専⾨⽤語は簡単に説明し、回答の最後に関連した⾯⽩い雑学か質問を加えてくだ さい 例)

Slide 16

Slide 16 text

16 Prompts - メッセージプロンプト AIにメッセージを配列で指定することができる 会話の履歴をAIに渡しコンテキストを⾼めれる messages: [ { role: 'user', content: '質問していいですか?' }, { role: 'assistant', content: '⼤丈夫です。何が聞きたいですか?' }, { role: 'user', content: '⽣成AIについて概要を教えてください' }, ],

Slide 17

Slide 17 text

17 Tools AIはAIの外側の世界に⼲渉することができない そのため、APIを呼び出し等を⾏えなかったり 学習されていないリアルタイムの情報を取得で きない。これらを解決するのが Tools

Slide 18

Slide 18 text

18 Tools AIから呼び出される関数をあらかじめ⽤意して おき。AIが与えられたコンテキストから、 関数を選んで呼び出す function getWeather... function doSomething... 現在の天気を教えて ユーザーの⼊⼒からAIが判断し呼び出し

Slide 19

Slide 19 text

19 Tools AIに外界との接点となるToolsを使うことで 以下のようなことが可能になる ● リアルタイム情報の取得 ● 外部APIの呼び出し(例: 予約API、購⼊API)

Slide 20

Slide 20 text

20 Streaming ⽣成AIは返答を返すのに時間がかかる。 その間ローディングを表⽰することになる 少しずつ回答を表⽰することで ユーザー体験を向上できる

Slide 21

Slide 21 text

21 今⽇喋ること ● AIをWEBに組み込むモチベーション ● Vercel の AI SDKとは? ● 組み込みの例 ● もっと知りたい⽅へ ● まとめ

Slide 22

Slide 22 text

22 組み込みの例 AI SDKを使って作った2つのサンプルアプリを 例に組み込みの実例を紹介 1. チャットアプリ 2. 添削アプリ

Slide 23

Slide 23 text

23 1. チャットアプリ ⽣成AIを使ったシンプルなチャットをNext.jsで 作成したWEBアプリケーションに組み込みます 徐々に回答が表⽰ (ストリーミング)

Slide 24

Slide 24 text

24 チャットアプリ - 使⽤してるAI SDKの機能 以下のAI SDKの機能を使⽤ ● Provider ○ Amazon Bedrock Provider ● Message Prompts ○ 会話履歴のやり取り ● Streaming ○ 徐々にレスポンスを表⽰する

Slide 25

Slide 25 text

25 チャットアプリ - 全体構成 Next.jsのAPI Routeでエンドポイントを作成し そこからAIと通信 Amazon Bedrock Component GET /api/chat API Route Provider

Slide 26

Slide 26 text

26 チャットアプリ - API通信 APIとコンポーネントはMessage Promptで 会話履歴を全てペイロードに載せて通信 APIからのレスポンスはStreamingで返却 Streaming GET /api/chat Message Prompt

Slide 27

Slide 27 text

27 チャットアプリ - Providerの設定 Amazon Bedrockを使う場合それ⽤の Providerをインストールし、 Bedrockに渡すパラメーターを設定する $ pnpm add @ai-sdk/amazon-bedrock

Slide 28

Slide 28 text

28 チャットアプリ - Providerの設定 Modelを指定

Slide 29

Slide 29 text

29 チャットアプリ - API Streamでレスポンスを返したいので AI SDKが提供してるstreamText関数を使⽤ これだけでストリームでレスポンスできる

Slide 30

Slide 30 text

30 チャットアプリ - UI AI SDKが提供してる useChat カスタム フックをつかつ Messages Prompts で会話履歴のデータ がストリームで受信 される

Slide 31

Slide 31 text

31 2. 添削アプリ 映画レビューのサイトの 添削機能をイメージ 以下をチェック ● Typo ● ネタバレの有無 ● 不適切な表現の有無 ● 全体的な添削

Slide 32

Slide 32 text

32 2. 添削アプリ ネタバレの有無を表⽰ 誤字をエディタ上で 添削

Slide 33

Slide 33 text

33 添削アプリ - 使⽤してるAI SDKの機能 以下の機能を使⽤ ● Provider ○ Amazon Bedrock Provider ● Generate Object ○ AIのレスポンスがオブジェクトになる

Slide 34

Slide 34 text

34 添削アプリ - 全体像 AIにレビュー内容をテキストで送信 レスポンスはUIで扱いやすい構造化データ Generate Object Prompt 猫好きなので... { “containsSpoiler”: false, }

Slide 35

Slide 35 text

35 添削アプリ - API AI SDKが提供する generateObject関数を 使い以下を指定 ● システムプロンプト ● zodでレスポンスの スキーマ

Slide 36

Slide 36 text

36 添削アプリ - システムプロンプト 役割を与え、レスポンスのオブジェクトに 設定する内容を⾃然⾔語で指⽰してます あなたは、映画のレビューサイトに投稿されるレビューを添削するAIです。 ユーザーから与えられた情報を添削してください 添削する内容は以下の通りです 1. 誤字、脱字、⽂章の誤り 2. ネタバレの有無 3. 社会良俗に反する表現の有無 4. 全体を通しての添削 1の指摘は誤ってる⽂字をハイライトさせるため、JSON形式で誤ってる⽂字の開 始、終了位置、⼊れ替えると正しくなる⽂字を配列で返してください

Slide 37

Slide 37 text

37 添削アプリ - オブジェクト { // typoの位置情報 “typo”: { “start”: 0, “end”: 3, “text”: “ます” } // 文章中にネタバレがあるかどうか “containsSpoiler”: true, // 公序良俗に反する記述があるかどうか “containsInappropriateExpression”: false }

Slide 38

Slide 38 text

38 添削アプリ - レスポンスの定義 AIからのレスポンスをZodで定義する

Slide 39

Slide 39 text

39 添削アプリ - UI AI SDKのuseObject カスタムフックを使い AIからのデータを取得 (AIからのデータを オブジェクトに変換す る処理はAI-SDKのなか に隠蔽されてる)

Slide 40

Slide 40 text

40 添削アプリ - UI - ネタバレの有無 AIからのレスポンスを元にDOMを更新 { // 文章中にネタバレがあるかどうか “containsSpoiler”: true, }

Slide 41

Slide 41 text

41 添削アプリ - UI - Typo添削 AIからのレスポンスを元にDOMを更新 楽しめまあた “typo”: { “start”: 10, “end”: 12, “text”: “ました” } 楽しめまあたました 誤字の箇所に取り消し線をつけ 後ろに正しい⽂字列を付与

Slide 42

Slide 42 text

42 組み込みの例 AI SDKを使うと⽇頃書いてる React のコードに 簡単にAIの機能を組み込むことができる

Slide 43

Slide 43 text

43 今⽇喋ること ● AIをWEBに組み込むモチベーション ● Vercel の AI SDKとは? ● 組み込みの例 ● もっと知りたい⽅へ ● まとめ

Slide 44

Slide 44 text

44 もっと知りたい⽅へ ● 公式ドキュメントをみる ○ https://sdk.vercel.ai/ ● AI SDKを利⽤しているオープンソースを読む ○ https://github.com/supabase-community/postgres-new

Slide 45

Slide 45 text

45 まとめ ● AIをWEBアプリに組み込むと今までは難し かったことが簡単にできる ● AIをフロントエンドに簡単に組み込むSDKが VercelのAI SDK ● AI SDKの主要機能 ○ Provider, Prompts, Tools, Streaming ● ⼯夫次第でいろんなユースケースで使える

Slide 46

Slide 46 text

46