株式会社ヤポドゥの LangChain アプリケーションのハンズオン用のレポジトリです。
フロントエンドなしで、直接 LangChain アプリケーションにアクセスする構成です。
1. ユーザーの質問を LangChain が受け取る
│
▼
2. 質問内容をLangChain(エージェント)が解析
- 質問の意図(intent)を識別
- LangGraphのcreate_react_agentを使用してツール実行を管理
│
├──【タスクに関する質問】─────→ Asana MCP ServerのAPIを呼び出し
│ ├── Asanaからの応答を受信
│ └── 応答を加工し、ユーザーに返却
│
└──【社内文書に関する質問】───→ Amazon Bedrock Knowledge Bases (RAG)
├── 類似文書をAurora PostgreSQL(pgvector)から取得
├── LLMを使って応答を生成
└── 応答をユーザーに返却
- Bedrock Knowledge Base 前段階 apply
- Model 有効化
- Bedrock Knowledge Base の作成
- ローカル環境での LangChain アプリケーションの動作確認
- Terraform を使用して、Bedrock Knowledge Base の前段階のリソースを作成
- S3 バケットの作成
- Aurora Serverless v2 の作成
- 今回は Serverless v2 で構築しているため問題ないが,RDS Data API は tg4 では使用不可, db.r8g.large であれば使用可能。
- IAM ロールの作成
- Aurora Serverless v2 の作成後、以下の設定を行う
- pgvector 拡張の有効化とテーブル作成
使用する Foundation Model を アカウント単位で有効化
Embedding Model
S3上のPDF、Markdown、Excel、Wordファイルなどを利用する場合、ドキュメントをベクトル化するための埋め込みモデル(Embedding Model)の選択する
様々なモデルを使用できるが、本ドキュメントでは以下のモデルを使用する。
- Amazon Titan Text Embeddings V2
- 日本語を含む多言語に対応
- 出力ベクトルの次元が選択可能 (256, 512, 1024)
- ベクトルサイズが大きくなると、より詳細な応答が作成されるが、計算により長い時間がかかる
- ベクトルが短くなるほど詳細度は低くなるが、応答時間は短縮される。
- AWS 公式の説明では 512 次元でも 1024 次元との大きな違いはないとのこと
- 今回は手順として実績のある 1024 次元を使用する
英語&日本語等の検索を行う際は Cohere Embed (Multilingual) がいいらしい。
Knowledge Base の確認の際に使用する LLM を選択する ここで選択するのは、文書の埋め込み(ベクトル化)を行う埋め込みモデルではなく、クエリ解析や回答生成を行うための生成AIモデルである。 Claude での利用が多いが、今回は Amazon Nova Pro を使用する。
Bedrock Knowledge Base の作成とデータソースの同期を行う。 コンソール画面より、Knowledge Base での RAG 検索の動作確認を行う。
ローカル環境で LangChain アプリケーション用コンテナを起動し、LangChain アプリケーションの動作確認を行う。
-
Bedrock Knowledge Base 前段階 deploy
terraform/environment/dev-ypd/defaultディレクトリに移動terraform applyを実行して Aurora Serverless v2 を作成doc/1.3.aurora_postgres_bedrock_setup.mdを参照し pgvector 拡張の有効化とテーブル作成
-
Model 有効化
- AWS コンソールにログイン
- Amazon Bedrock -> モデルアクセス
- [ 特定のモデルを有効にする ] or [ モデルアクセスを変更 ]をクリックする
- [ Amazon ] を選択
- [ 送信 ] をクリック
- [ モデルアクセス ] ページで、Titan Text Embeddings V2 が有効になっていることを確認
- 有効になっていない場合は、10分ほど待つ
-
Bedrock Knowledge Base の作成
terraform/environment/dev-ypd/defaultディレクトリに移動03_bedrock_knowledgebase.tf.bkを03_bedrock_knowledgebase.tfにリネームterraform applyを実行して Bedrock Knowledge Base を作成- apply 完了時に出力される
bedrock_knowledge_base_id = "NNIDIDIDID"を控える - コンソール画面よりデータソースに同期実行
- [ ナレッジベースをテスト ]をクリックし、Knowledge Base の RAG 検索の動作確認
- [ モデルを選択 ] で Amazon Nova Pro を選択
- [ 質問を入力 ] に質問を入力
- 質問例: 「レコードのリストはありますか?」など
- 応答が返ってくることを確認
-
ローカル環境での LangChain アプリケーションの動作確認
ypd-langchain/dockerディレクトリに移動- 3.4 で取得した
bedrock_knowledge_base_idをypd-langchain/.envファイルに設定BEDROCK_KNOWLEDGE_BASE_ID=NNIDIDIDID
docker compose buildでイメージをビルドenv | grep AWSで AWS 認証情報が設定されていない場合は、以下のコマンドで設定- export AWS_ACCESS_KEY_ID=<AWS_ACCESS_KEY_ID>
- export AWS_SECRET_ACCESS_KEY=<AWS_SECRET_ACCESS_KEY>
- export AWS_REGION=us-west-2
docker compose upでコンテナを起動doc/4.6.agent-test.mdを参照し、ローカル環境での LangChain アプリケーションの動作確認