🟢 はじめに
本記事ではAWSサービスを使用したチャットボット作成方法を記載します。
今回は生成AI関連リソースの学習を主目的としているため、
「まずはとにかく動くものをつくってみよう」のテーマのもと作成しています。
そのため非効率な箇所など多々ありますが、今後機能拡張やコストダウンなどを目指すにあたって少しずつ改良できればと思っています。
こm構築時のキャプチャを載せようと思いましたが膨大になったため、別枠で掲載予定です。
ご意見などあればコメントいただけると幸いです。
🤖何をつくるか?
今回作成したいものを整理します。
実現したい機能
- テキストベースのチャット形式でやり取りができる
- ある人物(例:自分、上司、友人)の口調や癖を再現した自然な応答ができる
- AWSマネージドサービスのみで構成し、インフラレスで運用できる
実装方法テーマ
- Amazon Bedrock の「Continued Pre-training」でモデルをカスタマイズ
- Amazon Lex V2(Generative AIモード)でチャットボットを構築
- Lambda で Bedrock API を呼び出して応答生成
- 学習データは LINE のトーク履歴(事前に加工)
今回はやらない(今後やりたい)こと
- マルチモーダル対応(音声入力・画像認識など)
- 継続的な自己学習(RAGや動的データ取り込み)
- LINEやSlackとの連携(Webhookによる通知)
🏠アーキテクチャ概要
[User]
↓ テキスト送信
[Amazon Lex V2 (Generative AI)]
↓ Lambda 呼び出し
[AWS Lambda]
↓ APIリクエスト
[Amazon Bedrock (Custom Claude/Titan)]
↓ 応答生成
[AWS Lambda]
↓ 応答返却
[Amazon Lex → User]
- 会話の入口は Lex(Generative AIモード)
- 応答は Lambda 経由で Bedrock のカスタムモデルを呼び出し生成
- モデルは事前に人物のトーク履歴を元に Continued Pre-training 済み
🔨実装方法
Step 1: トーク履歴を用意(S3へアップロード)
- LINEのトーク履歴を .txt 形式でエクスポート(LINE PC版 → Keep → 右クリックで保存)
- 自分の発言だけを抽出(Python等で加工)
- S3バケットを作成し、data/persona-corpus/ のようなパスでアップロード
Step 2: Amazon Bedrock で Continued Pre-training
- Bedrock コンソール → Model Customization → Create Continued Pre-training job
- モデルは Titan Text G1 または Claude Instant を選択
- 入力データに上記S3バケットを指定
- IAMロールを作成(AmazonS3ReadOnlyAccess, AmazonBedrockFullAccess)
- ジョブ作成後、トレーニングが完了するまで待機(20分〜数時間)
- モデル一覧に反映される(Training完了後)
Step 3: Amazon Lex V2(Generative AI モード)でチャットボット構築
- Lex コンソール → Bot 作成 → Generative Bot を選択
- モデル選択画面で Bedrock のカスタムモデルを指定
- 会話スタイルや温度(Creativity)などを調整
- テスト画面で会話が機能するか確認
Step 4: Lambda関数でBedrock APIを制御(オプション)
より柔軟に応答生成したい場合は Lambda 関数を用意し、Bedrock API を直接呼び出します。
import boto3
import json
client = boto3.client('bedrock-runtime')
response = client.invoke_model(
modelId='your-custom-model-id',
body=json.dumps({
"prompt": "こんにちは!",
"temperature": 0.7
})
)
result = json.loads(response['body'].read())
print(result['completion'])
😕残課題
- LINEトーク履歴の精製には手作業が発生(自動化は要検討)
⇨現状は取得したトーク履歴をchatGPTにて整形している。個人情報など含む場合は適さない。 - Bedrock Continued Pre-training はステータス確認がわかりにくい(CloudWatchログ未出力の場合あり)
⇨度々エラーに悩まされた。。。 - 一部のモデルは Lex Generative AI に非対応(Titanは〇、Mistralは△)
- 冒頭記載の「今回はやらないこと」への対応
🟢おわりに
AWSマネージドサービスを活用することで、GPUやインフラの構築を一切せずに、自分の口調を再現する「分身AIチャットボット」 を実現することができました。
会話体モデルをベースに継続学習できる Bedrock の仕組みは、プロンプト制御だけでは難しかった「自然な癖の再現」において非常に効果的です。
今後は LINE連携 や 会話ログの蓄積による自己学習、自分以外のキャラクター再現なども試していきたいです。