概要
「からかい上手の高木さん (© 山本崇一朗 小学館)」 という漫画・アニメにヒントを得て、
高木さんと、LINE でしりとり勝負をするゲーム を作りました。
※ 高木さんのアイコンは、SNSでの個人利用が許可されているものを使っています。
ライトニングトーク 発表資料
2023年7月13日(木)「みんなのPython勉強会#95」 のLT枠で、本アプリについて紹介をしました。
要点が5分間にまとまっているので、ぜひご覧ください。
発表時の動画
スライド資料
技術
使用している要素技術
- LINE Messaging API
- Open AI API (GPT4、3.5)
- AWS CDK (Python / API Gateway, Lambda, DynamoDB, SecretsManger)
アーキテクチャ図
ソースコード
GitHubにて公開中 (デプロイ方法などは README に記載)
特徴 / 工夫
LINE から GPT を呼び出す構成は、技術ブログなどで時々見かけます。
しかし、今回のアプリでは、以下の点にオリジナリティがあると考えています。(LT内でも紹介しているものです)
-
しりとりができる!
- 【問題点】GPTは、意外と「しりとり」が得意ではありません。
- 言葉になっていない言葉を返したり、既出の言葉を返したり、「ん」で終わる言葉を返したり...します。
- 【解決策】GPTプロンプトの工夫と、チャット履歴を管理するDBを用意することで、「しりとり」ができるようにしました。
- 具体的には、しりとりのルールと実例を、
Few-shot Learning
というテクニックを用いて教えこませました。
- 具体的には、しりとりのルールと実例を、
- 【問題点】GPTは、意外と「しりとり」が得意ではありません。
-
キャラクターらしいチャットができる!
- 【問題点】GPTは高木さんのキャラクターを熟知しているわけではないので、「高木さんを演じてください」と言ってもできません。
- 【解決策】プロンプトを工夫することで、高木さんらしいチャットができるように育て上げました。
- 前述の
Few-shot Learning
に加えて、Role prompting
というテクニックを使いました。
- 前述の
-
文脈に沿った会話ができる!
- 【問題点】実はGPTのAPIはセッションを持たず、チャットの履歴をAPI側で持ってくれません。
- そのため、しりとりなのに既出の単語を回答したり、チャットごとに話がコロコロ変わるという問題が起こりえます。
- 【解決策】AWS 上にチャット履歴を管理する DB を用意しました。
- 過去のチャット内容を DB に保存しておき、GPT API を呼び出す際には、保存しておいた過去のチャット文を API リクエストに添付する工夫をしました。
- 【問題点】実はGPTのAPIはセッションを持たず、チャットの履歴をAPI側で持ってくれません。
-
デプロイしやすく、ランニングコストも安い!
- IaC(インフラのコード化)の採用
- AWS CDK を用いて、AWSリソースをソースコードとして定義しました。
- これにより、ミスなく簡単にシステムをデプロイできるようになりました。
- サーバレスサービスの採用
- AWS Lambda, DynamoDB, API Gateway などのサーバレスサービスを利用し、
ランニングコストがとても安い構成にすることができました。(おそらく月0~1円程度)
- AWS Lambda, DynamoDB, API Gateway などのサーバレスサービスを利用し、
- IaC(インフラのコード化)の採用
参考資料 / お役立ち資料
- GPT API
- GPT プロンプトエンジニアリング
- AWS CDK
- LINE Messaging API