はじめに
皆さんは、業務中のチャットにどんな印象を持っていますか?
ぴこぴこぴこぴこ鬱陶しい、敢えて既読をつけず見なかったことにする。
色々な方がいらっしゃるとお思いますが、私は最近あまりにも自分宛のチャットが少なくて寂しさを感じていました。
周囲の同期は同期同士だったり上司からポンポンチャットが来てるにも関わらず、何の通知も来ない私のPC...
というわけで、こんな悩みをアプリケーションで解決することにしました。
アプリケーション概要
複数のAIキャラクターとチャットを楽しめるWebアプリケーション。
Chat GPTによるイメージ
システムフロー
- ユーザがシステムにアクセス
- 一緒にチャットするキャラクターの特徴を登録
- 複数のAIキャラクターを選択してチャットセッションを開始
- 最初のチャットをユーザが投稿
- 以後、選択したAIキャラクターのいずれかが定期的に返信を生成してクライアントに送信
- ユーザが定期的に画面を確認するとAIキャラクター同士が会話している様子を楽しむことができる
アーキテクチャ
設計のポイントは以下です。
- WebSocketによる双方向通信:WSのコネクションにより、サーバトリガーで生成した回答をクライアントにリアルタイムで表示させる
- サーバレス構成によるコスト最適化:CloudFront-S3,APIGW-LambdaのサーバレスSPA構成により、固定的ランニングコストがほとんど発生しないお財布に優しい設計。
[アプリケーショントップ画面]
機能紹介
それでは実際に構築したアプリケーションの画面を見せながら機能の説明を行います。
ペルソナ生成機能
AIキャラクターを生成する機能です。
ポイントは適当なキャラクターの特徴を入れて「自動生成ボタン」を押すと、裏でBedrockがユーザの入力に基づいてそのキャラクターの特徴を生成してくれます。(画面下半分)
生成したキャラクターはDynamoDBに保存されます。
チャットルーム作成機能
自分のユーザ名と一緒に会話するAIキャラクターを指定してチャットルームを生成します。
ポイントは複数のAIキャラクターを選択してルームを作成できるところです。
チャット機能
生成したAIキャラクターとのチャットが楽しめます。
ポイントはEventBridgeで返信作成用Lambdaを定期的に叩き、サーバ手動で回答を生成できるところですね。Web Socketを活かしてサーバ側で生成された回答はリアルタイムでブラウザに表示されます。
また、回答生成時はBedrockに「そのチャットに参加しているいずれかのAIキャラクター」で「それまでのチャット履歴を参照し」適切な回答を作らせているため、人間が何も入力せずともAI同士が勝手に会話している様子を楽しむことができます。
キャラクターの特徴と会話履歴と併せて以下の指示でBedrockに回答を生成させています。
lines.push(
"",
"以下の点を守って回答してください:",
"- このキャラクターとして一貫した口調で日本語で応答する",
"- 会話履歴を踏まえた自然な返答をする",
"- 回答は100文字以内で簡潔にまとめる"
);
最後に
アプリケーションが完成してから思いましたが、普通に社内で仲間を作ってチャットした方がスムーズだったように思います。
ただWebSocketやBedrockなど普段業務で触れない機能に触れたのは非常に良かったです。
また時間があればもう少し詳細なアプリケーションの説明や、開発中のトピックを投稿できればと思います。







