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