Slide 1

Slide 1 text

新機能の「Function calling」で ToDoアプリを作った話 〜やってわかった良い点と注意点について〜

Slide 2

Slide 2 text

レジュメ • ⾃⼰紹介 • Function callingについて • ToDoアプリについて • 結果 • まとめ

Slide 3

Slide 3 text

自己紹介 )BSV ものづくりが好きなエンジニア 趣味: 将棋・プログラミング 開発⾔語: TypeScript, PHP, Python… バックエンドメインのフロント・モバイルも経験あり @Haru71175473

Slide 4

Slide 4 text

伝えたいこと • Function callingの概要 • Function calling ✖ LineBotでのアプリ開発 • 良かった点・実装上の⼯夫点・注意すべき点

Slide 5

Slide 5 text

アプリ作成のきっかけ $IBU(15Λ࢖ͬͨΞϓϦέʔγϣϯΛ࡞Γ͍ͨʂ AIに何かさせたい! 会話できるアプリはロマンがある

Slide 6

Slide 6 text

課題に直面 ͔͠͠ʜ ChatGPTをアプリに組み込もうとするとうまくいかない ChatGPTは「会話」ができる ⼀⽅、アプリは「決まったデータ型」が必要 決まった形のない「会話」とは相性が悪い

Slide 7

Slide 7 text

'VODUJPODBMMJOH 6/13に新機能「Function calling」が追加 AIに「関数」を教えておけるようになる gpt-4 と gpt-3.5-turbo で実⾏可能 https://openai.com/blog/function-calling-and-other-api-updates

Slide 8

Slide 8 text

'VODUJPODBMMJOH AIに「関数」を教えおくと、 AIが通常のメッセージに加え、関数の実⾏を要求するようになる ˠ"*͕ΞϓϦΛૢ࡞ͯ͘͠ΕΔ

Slide 9

Slide 9 text

何ができるようになるか AIが「会話」を「プログラムの実⾏」に変換できる 例) 「掃除して」と⾔えば「掃除の実⾏」をしてくれる

Slide 10

Slide 10 text

今回のテーマ 5P%PΞϓϦΛ࡞੒͠ɺ 'VODUJPODBMMJOH͕ Ͳͷఔ౓࣮༻Ͱ͖Δ͔࣮ݧ

Slide 11

Slide 11 text

ToDoアプリの概要① AIにToDoを管理してもらう ユーザーはチャットでAIにToDoの取得・作成・削除を要請する ToDoのEntity図

Slide 12

Slide 12 text

ToDoアプリの概要② 簡単のため、⽤意した関数は3種類 • ToDoの取得 • ToDoの作成 • ToDoの削除 この関数をChatGPTに伝える

Slide 13

Slide 13 text

ToDoアプリの概要③ ChatGPTは対話インターフェースが必要 →フロントエンドにLineを使⽤ Line Messaging APIでメッセージの送受信する

Slide 14

Slide 14 text

ToDoアプリの概要④ Application Webhook AIの実⾏要求 Line Messaging API アプリの概要図

Slide 15

Slide 15 text

動作している様子 ToDoの追加・取得・削除をし てくれる →詳しく深掘る

Slide 16

Slide 16 text

良かった点① 曖昧な言葉でも動作する 「ToDo」というキーワードが なくても動作する ˠҰ൪΍ͬͯཉ͍͜͠ͱ

Slide 17

Slide 17 text

良かった点② 複雑な指示でもちゃんと動く AIが単なる຋༁ػҎ্に動作する •複数のToDoの同時追加 •現在のToDoの全削除 →具体的には次スライドで

Slide 18

Slide 18 text

ෳ਺ͷ5P%Pͷಉ࣌௥Ճ ݱࡏͷ5P%Pͷશ࡟আ ↑ToDoの取得と3回のToDo削除を呼び出している ↑3回ToDo作成を呼び出している

Slide 19

Slide 19 text

良かった点② 複雑な指示でもちゃんと動く AIが単なる຋༁ػҎ্に動作する •複数のToDoの同時追加 •現在のToDoの全削除 ˠ༧૝Ҏ্ʹ༏ल

Slide 20

Slide 20 text

注意すべき点 ハルシネーション(誤作動) AIによる、ハルシネーション(誤作動)が起こる 遭遇したハルシネーション • 勝⼿にToDoを追加する • 存在しないToDoを削除する • 存在しない関数を呼び出す

Slide 21

Slide 21 text

工夫した点 プロンプトインジェクション対策 AIを利⽤するためにいくらか⼯夫をした 1点だけ紹介 ϓϩϯϓτɾΠϯδΣΫγϣϯରࡦ

Slide 22

Slide 22 text

プロンプト・インジェクション "*͕᱐͞ΕͯଞϢʔβʔͷ৘ใΛͱΒΕΔՄೳੑ͕͋Δ プロンプトインジェクション攻撃とは、 特殊な質問で 会話AIを開発者が想定していない状態にし、 保有する機密情報や公開すべきでないデータを引き出す攻撃⼿法 【引⽤元】ChatGPTとプロンプトインジェクション攻撃について https://www.ad-bind.com/chatgpt-and-prompt-injection-attacks-1768

Slide 23

Slide 23 text

対策 手動で上書き 関数実⾏の前処理で、UserIDを⼿動で上書きしている ˠଞਓͷ5P%Pͷऔಘɾૢ࡞͸Ͱ͖ͳ͍

Slide 24

Slide 24 text

まとめ • Function callingを利⽤すると簡単にAIをアプリに組み込める • 予期しない動作は多少あるものの、通常の利⽤の範囲内では しっかり動作する • さらに期待以上の動作をしてくれるかもしれない…? • 誤作動やプロンプトインジェクションなどの懸念があるため、 ⼯夫や対策は必要そう

Slide 25

Slide 25 text

Qiita記事の紹介 今回取り上げなかった内容やさらに詳しい説明はこちらから https://qiita.com/Haru141/items/b86afc15c883e2fda423 https://qiita.com/Haru141/items/54afcdf465039ca26621

Slide 26

Slide 26 text

ご清聴ありがとうございました 作成したアプリの友達追加はこちらから (予告なく終了する可能性があります。ご了承ください)

Slide 27

Slide 27 text

Appendix インフラ構成

Slide 28

Slide 28 text

Appendix 質問① • Function callingでどんなアプリが作れそう? • タスク・スケジュール管理 • カスタマーサービス⽤アプリ • AIアシスタント • なぜLineBotにした? • 質の良い対話インターフェースを提供してくれるため • APIも充実しており、ChatGPTと相性が良さそう • 作ったアプリどうするか? • かわいそうなので、売るか公開するかしたい。声かけて欲しい

Slide 29

Slide 29 text

Appendix 質問② • エラーハンドリングはどんな形でやっている? • ChatGPTにそのままエラーメッセージを伝えればよい • なぜToDoアプリを作ったか? • 実験のため、単純なアプリを利⽤したかったから • 通信の履歴はどうしているか? • メッセージ⼀件に対してそれぞれステートレスで動かしている • その他気づいたことは? • IDなどの無機質なデータはAIが操作しづらいらしい • ToDo名が「タスクA」「タスクB」などの抽象的な際に誤作動が頻発 した

Slide 30

Slide 30 text

Appendix 質問③ • テストはどれぐらい作った? • AWSのモックが⼤変だったので、usecaseのみ実装 • CI/CDはどうなっている? • ビルドにはDockerを使⽤している。GitHubActionsで反映してくれる • 開発で⼯夫したところはどこか? • CI/CDから作り始める⼿法を試してみたが、思ったより良かった • 最後に⼀⾔ • ⾃分専⽤の秘書AIとか作れたらロマンあるよね

Slide 31

Slide 31 text

Appendix 料金について 関数を伝える分の料⾦は余計にかかる しかし、プロンプトは削減できるし「今までの会話全て」を送信 する必要がなくなるため、その分の料⾦は削減できる 結局、料⾦は安くなるのではないだろうか?