Yapodu Tech Blog

株式会社ヤポドゥの技術ブログです。

AI Agent, MCP, Bedrock Knowledge Baseで作るAIハンズオン (Part 2 - 実践編・AIエージェントを動かす)

はじめに

前回の 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(個人アクセストークン)で認証可能なサードパーティー製を採用しました。

github.com

注意事項

サードパーティー製ツールを使用する際は、以下の点にご注意ください

  • Slack のように、ある日突然 API の利用制限が厳しくなる可能性があります
  • 本番環境での利用時は、公式の OAuth 認証方式の採用も検討してください
  • API の利用状況を定期的に監視し、制限に達しないよう注意が必要です

.env 作成

アプリで使用する2つの情報を .env に指定します。

  • Knowledge base 作成時に控えた Knowledge Base ID
  • Asana Personal Access Token (個人アクセストークン)

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:8000API が利用可能になります。
成功時の出力例

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レコードに限定されています。他のジャンルのレコードについては、さらなる検索が必要です。"}

動作確認不可時の確認箇所

  • .env に正しい値を指定して build しているか?
  • .env 修正前に build していないか?
  • build & up 実行時に AWS 環境変数は全て設定されているか?

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(解説編)では、このシステムの内部構造や技術的な仕組みについて解説します。