何を作ろうと思ったのか
ひとことで言うと「マッチングアプリに変わる恋愛シュミレーションAI」を作りたかった。
ChatGPTを使ってみたところかなり自然に会話をしてくれたので、まるで人と話しているかに感じることができた。 それを受けてプロンプトで人格を定義して、シュミレーションゲーム風にして人と話すことを目的にしているマッチングアプリユーザをリアルの人と関わることによるストレスから解放できないかと思いつくってみることにした。
ついでにStripeを使って有料化しようと思ったが、そこまでの品質にはならなかった。
出来上がったもの
正直人と話ている状態とはほど遠く、実験的に作った4択形式のインターフェースが楽ではあったがリアルから離れすぎてしまった。
アーキテクチャはこんな感じ
プロンプトエンジニアリングの難しさ
GPT3.5だったのもあったが、出力を安定させるのが非常に難しかった。
jsonで出力されることが担保されるならMessaging APIで提供されているクイックリプライを使いたかった
また、口調を人っぽくするだけなら簡単だったがなんとも言えない会話の成立のしなさが解決できなかった。 必ず返答をしてくれるのだが、会話が堂々巡りしてしまったらだらだらとやり取りが続いてしまう。
あとは動作テストをChatGPTでやっていたが、実際にはLangchianを使って実装している。 今回はやらなかったが、Langchianをつかうならいくつかの役割にBotを分離させて並列に複数の処理をさせることで
- 記憶の単純化
- レスポンス速度の向上
- プロンプトの簡略化
などを期待できたかもしれないと思った。
LINEというインターフェースの良さ
簡単にいくつか上げると
- 簡単にリッチなUIが使える
- 使い慣れているインターフェースなので受け入れられやすい
- 友達と飲んでいる時にちょっとこれつかってみてよ。がやりやすかった
- GPTのデメリットであるレスポンスの遅さがLINEだと意外と自然
- とはいえ、連投とかされると困った
LINEのデメリット
唯一デメリットは、動作テストのしにくさだった。
- ngrokでローカルにエンドポイントを立てる
- LINE Messaging APIにエンドポイントを再登録
- function frameworkでCloud Functionのローカルサーバを立てる
- 手元のデバイスでLINE使って動作テスト
などやっている間にデプロイしてしまったほうが楽だったりした。
完成までの反省点
遅い。シンプルに納得がいくところまで作り終えるのが遅かった。 動かすだけなら一晩で作ることができきたが、プロンプトエンジニアリングが難しかった。
インフラ面では、始めにタイムアウトを気にしてCloud Runを使っていたが、結果的にはCloud Functionで動かすことにしてことで開発が二度手間になった。
開発過程で取り組んで良かったこと
以下の企画書を書いたのはよかった。 目的決めて、期日、撤退ラインなどを事前に決めておくのは本当によかった。
# 企画書
## サービス内容
## 証明したいこと
## 実現可能性
## リリース目標
## インフラ
## 実装方針
## お金回り
## 撤退ライン
## 広める方法