はじめに
前回の Part 1 では、Terraform を使用して AWS 環境(Aurora PostgreSQL、S3、Amazon Bedrock Knowledge Base)を構築しました。
今回の Part 2 では、構築した環境を活用して、LangChain ベースの AI エージェントアプリケーションをローカル環境で起動し、以下の連携動作を確認します
- Amazon Bedrock Knowledge Base を使用した RAG による情報検索
- Asana MCP Server を通じたタスク管理システムとの連携
- LangChain による両システムの統合
AI エージェントのローカル起動
Asana MCP Server と作成済みの Knowledge Base を使用し、LangChain ベースの AI エージェントアプリをローカル環境で起動・動作確認します。
Asana MCP Server について
本記事では、Asana との連携に サードパーティー製の MCP Server を使用しています。
Asana 公式の MCP Server も存在しますが、こちらは OAuth 認証が必要となっています。今回の検証環境では、よりシンプルに動作確認を行うため、Personal Access Token(個人アクセストークン)で認証可能なサードパーティー製を採用しました。
注意事項
サードパーティー製ツールを使用する際は、以下の点にご注意ください
- Slack のように、ある日突然 API の利用制限が厳しくなる可能性があります
- 本番環境での利用時は、公式の OAuth 認証方式の採用も検討してください
- API の利用状況を定期的に監視し、制限に達しないよう注意が必要です
.env 作成
アプリで使用する2つの情報を .env
に指定します。
ypd-langchain
ディレクトリに移動
$ cd ypd-langchain
.env.example
を元に起動用 .env
をコピー作成
$ cp -p .env.example .env
各自取得した値で .env
を修正してください。
ASANA_ACCESS_TOKEN="2/1206666666666666/1210555555555555:ffff3333ddd444444fffff222eeeeeee" BEDROCK_KNOWLEDGE_BASE_ID="NNIDIDIDID"
LangChain アプリコンテナ Build
ypd-langchain/docker
ディレクトリに移動し Docker 関連のファイルが存在することを確認してください。
$ cd docker $ ls Dockerfile docker-compose.yml
docker compose build
でイメージをビルド
$ docker compose build
成功時の出力例
=> [app] resolving provenance for metadata file 0.0s [+] Building 1/1 ✔ app Built
コンテナイメージの確認
$ docker images | grep ypd-langchain-app ypd-langchain-app latest f4d307d9778d 4 hours ago 559MB
LangChain アプリコンテナ 起動
docker compose up
でコンテナを起動
$ docker compose up
上記コマンドを実行すると、localhost:8000
で API が利用可能になります。
成功時の出力例
app-1 | INFO:main:Asana MCP client initialized successfully app-1 | INFO:botocore.credentials:Found credentials in environment variables. app-1 | INFO:knowledge_base:Knowledge Base retriever initialized for ID: NNIDIDIDID app-1 | INFO:main:Knowledge Base client initialized successfully app-1 | INFO: Application startup complete. app-1 | INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Local 環境での AI Agent 動作確認
localhost への curl でアプリの動作確認を実施します。
一般的な質問の例
curl -X POST http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{"prompt": "こんにちは"}'
成功時の出力例
{"response":"こんにちは!今日はどんなことをお手伝いできますか?質問があれば、遠慮なく聞いてくださいね。元気に過ごせていますか?"}
Asana 関連の質問例
Asana プロジェクトの一覧確認
# プロジェクトの確認 curl -X POST http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{"prompt": "現在のプロジェクト一覧を見せて"}'
成功時の出力例
{"response":"現在利用可能なプロジェクトは以下の通りです:\n\n1. Yapodu OpenAI & SD\n2. 技術ブログ\n\nこれらのプロジェクトは、ワークスペース「yapodu.co.jp」内に存在しています。"}
Knowledge Base 関連の質問例
レコードリストの確認
curl -X POST http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{"prompt": "レコードのリストはありますか?"}'
成功時の出力例
{"response":"以下に、関連する文書からレコードのリストを抜粋しました。\n\n### Jazz レコードのリスト\n1. **Great Jazz Trio** - At Village Vanguard\n2. **Tina Brooks** - True Blue\n3. **Miles Davis** - Kind Of Blue\n4. **Miles Davis Quintet** - Cookin'\n5. **Miles Davis** - My Funny Valentine\n6. **Miles Davis** - Birth of the Cool\n7. **John Coltrane** - Ballads\n8. **John Coltrane** - Blue Train\n9. **John Coltrane** - A Love Supreme\n10. **Lee Morgan** - The Sidewinder\n11. **The Jazz Messengers** - At the Cafe Bohemia\n12. **Art Blakey & The Jazz Messengers** - Moanin'\n13. **Freddie Hubbard** - Hub-Tones\n14. **Dexter Gordon** - Our Man in Paris\n15. **Dexter Gordon** - Go\n16. **Sonny Clark** - Cool Struttin'\n17. **Sonny Rollins** - Saxophone Colossus\n18. **Cannonball Adderley** - Somethin' Else\n19. **Bill Evans Trio** - Portrait in Jazz\n20. **Bill Evans Trio** - Sunday at the Village Vanguard\n21. **The Oscar Peterson Trio** - We Get Requests\n22. **Herbie** - [不明]\n\n### 関連文書\n- **vinyl_record.xlsx** からの抜粋\n- **bass.csv** からの抜粋\n\nこれらのリストはJazzレコードに限定されています。他のジャンルのレコードについては、さらなる検索が必要です。"}
動作確認不可時の確認箇所
Part 2 まとめ
本記事では、AI エージェントアプリケーションのローカル環境での起動と動作確認を行いました。
確認できた内容
- Docker を使用した開発環境の構築
- Knowledge Base からの情報検索(RAG)
- Asana MCP Server を通じたプロジェクト情報の取得
- LangChain による両システムの統合動作
さらに試してみよう
構築した環境では、以下のような発展的な操作も可能です
1. RAG のデータソースを拡充
Knowledge Base の S3 バケットに追加のドキュメントをアップロードし、同期を実行することで、AI エージェントの知識を拡張できます
- 社内ドキュメント(PDF、Word、Excel)
- 技術仕様書やマニュアル
- FAQ やナレッジベース記事
追加後は様々な質問を試してみましょう:
# 例:追加したドキュメントに関する質問 curl -X POST http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{"prompt": "社内の開発ガイドラインについて教えて"}'
2. Asana MCP を使ったタスク操作
現在の実装では情報取得が中心ですが、Asana MCP Server はタスクの作成や更新も可能です
# 例:新しいタスクの作成依頼 curl -X POST http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{"prompt": "技術ブログプロジェクトに「Part 3 執筆」というタスクを追加して"}'
これらの機能を活用することで、単なる情報検索を超えた、実用的な AI アシスタントとして活用できます。
動作確認完了後の destroy 実行
terraform apply で作成したすべてのリソースを、terraform destroy コマンドで一括削除します。 terraform/environment/dev-ypd/default ディレクトリに移動し、以下のコマンドを実行してください。
$ cd terraform/environment/dev-ypd/default $ terraform destroy
apply の時と同様に、削除対象のリソース一覧が表示され、実行の確認を求められます。
内容を確認し、問題がなければ yes と入力してください。
数十のリソースが順次削除されていきます。Aurora クラスターの削除には10分以上かかる場合があります。
次回の Part 3(解説編)では、このシステムの内部構造や技術的な仕組みについて解説します。