新機能の「Function calling」でToDoアプリを作った話 〜やってわかった良い点と注意点について〜
by
Haru
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 料金について 関数を伝える分の料⾦は余計にかかる しかし、プロンプトは削減できるし「今までの会話全て」を送信 する必要がなくなるため、その分の料⾦は削減できる 結局、料⾦は安くなるのではないだろうか?