LangChain × Bedrockで実践！生成AIエージェント入門ガイド 🛠️

![スクリーンショット 2025-02-03 15.08.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/4fcabe3b-7ab0-04e0-633d-cf4018607794.png)

# 生成AIエージェント開発入門（AWS Bedrock + LangChain）🤖

## はじめに  
生成AIの進化により、業務自動化やデータ解析、コンテンツ生成など、さまざまな分野でAIエージェントの需要が急速に高まっています。本記事では、**Amazon Bedrock Agents**と**LangChain**を組み合わせた実践的な生成AIエージェントの開発手法を解説します。公式ドキュメントや最新情報を基に、初心者にも分かりやすく構成しています。  

---

## **AWS Bedrock Agents の概要** 🔗  

Amazon Bedrock Agentsは、AWSが提供する生成AIエージェント構築のためのサービスです。以下のような特徴があります[1][6]：  

- **マルチエージェント協働**  
  複数のエージェントが連携してタスクを分担し、複雑なワークフローを管理します。  
- **長期メモリ管理**  
  セッション間でコンテキストを保持し、継続的な対話が可能です。  
- **外部システム連携**  
  API統合を通じて業務システムやデータソースとシームレスに連携します。  

以下は、Bedrock Agentsの基本的なアーキテクチャを示した図です：

```mermaid
graph TD
    A[ユーザーリクエスト] --> B[Bedrock Agents]
    B --> C[意図認識 （Intent Recognition）]
    C --> D[タスク分解 ＆ API呼び出し]
    D --> E[外部システム連携]
    E --> F[レスポンス生成]
    F --> G[人間による確認 （Human-in-the-Loop）]
    G --> A
```

---

## **LangChainによる生成AIエージェント構築** 🛠️  

LangChainは、大規模言語モデル（LLM）を活用したAIアプリケーションを簡単に構築できるフレームワークです。以下では、LangChainとAWS Bedrockを統合した実装例を紹介します。

### **LangChain + AWS Bedrock の環境セットアップ**

まずは必要なライブラリをインストールします：

```bash
pip install langchain-aws boto3
```

### **コード例：株価データ取得エージェント**

以下は、LangChainとAWS Bedrockを使用して「株価データ取得エージェント」を構築する例です。このエージェントはユーザーからのリクエストに応じて株価情報を取得します。

#### Pythonコード

```python
from langchain_aws import BedrockLLM
from langchain.agents import initialize_agent, Tool
from tenacity import retry, stop_after_attempt

# --- Bedrockモデルの初期化 ---
llm = BedrockLLM(
    model_id="anthropic.claude-v2",
    model_kwargs={"temperature": 0.5, "max_tokens": 200}
)

# --- 株価データ取得用関数 ---
@retry(stop=stop_after_attempt(3))
def fetch_stock_data(symbol: str) -> dict:
    """模擬的な株価データ取得関数"""
    return {"symbol": symbol, "price": 185.42}

# --- ツール定義 ---
stock_tool = Tool(
    name="StockPriceFetcher",
    func=fetch_stock_data,
    description="株価データ取得用ツール"
)

# --- エージェント初期化 ---
tools = [stock_tool]
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)

# --- タスク実行 ---
query = "Appleの最新株価を教えてください"
response = agent.run(query)
print(response)
```

このコードでは、LangChainが提供するツールとAWS Bedrockモデル（Anthropic Claude v2）を組み合わせて、ユーザーリクエストに基づく株価情報取得を実現しています。

---

## **重要アーキテクチャコンポーネント** 🧩  

| コンポーネント          | 役割                       | 技術要件                 |
|-------------------------|----------------------------|--------------------------|
| **意図認識 (Intent Analyzer)** | ユーザー入力の解析           | NLPモデル                |
| **タスクルーター (Action Router)** | タスク振り分け               | 分散キュー                |
| **APIゲートウェイ (API Gateway)** | 外部システムとの接続         | OpenAPI Spec             |
| **監査ログ (Audit Logger)**       | 実行トレーサビリティ         | AWS CloudWatch          |

---

## **運用ノウハウとトラブルシューティング** 💡

### トラブルシューティング事例  
**事象**：APIレスポンスがタイムアウトする  
**対応方法**：  
1. 指数バックオフ付きリトライ機能を実装  
2. サーキットブレーカーパターンを導入  
3. フォールバックとして代替データソースを利用  

#### パフォーマンス検証スクリプト例

```python
import timeit

query = "AAPLの過去1年間の株価推移を分析"
execution_time = timeit.timeit(lambda: agent.run(query), number=10)
print(f"平均実行時間: {execution_time / 10:.2f} 秒")
```

---

## **セキュリティ設計ポイント** 🔒

1. **IAMロールベースアクセス制御**  
   - 必要最小限の権限でIAMロールを設定。  
2. **API通信の暗号化**  
   - TLS 1.3以上を使用して通信内容を保護。  
3. **入力値検証パイプライン**  
   - ユーザーからの入力値は必ずバリデーション処理。

---

## おわりに 📝✨  

AWS Bedrock AgentsとLangChainは、生成AIエージェント開発において強力なツールセットです。本記事で紹介した内容を参考に、自身のプロジェクトで以下のような利点を活用してください：

- **効率化と自動化**：複雑な業務プロセスもAIが自律的に実行可能。  
- **柔軟性と拡張性**：マルチエージェントコラボレーションや動的コード生成で多様なユースケースに対応。  
- **実践的アーキテクチャ**：分散型システムとAI技術の融合が、新たなビジネスモデル創出を支援。

ぜひ、この技術革新に触れ、自身のプロジェクトや研究に活かしてください！🚀  

---

## 参考資料 📚  

1. [Amazon Bedrock Agents 公式ガイド](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)  
2. [LangChain エージェント実装マニュアル](https://python.langchain.com/docs/modules/agents/)  
3. [AWS Generative AI Examples](https://github.com/aws-samples/generative-ai-amazon-bedrock-langchain-agent-example)

---

## **💖 ご支援いただけませんか？**

![スクリーンショット 2025-01-31 7.51.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/f9d94b4d-dbd3-ab70-6b2b-dfc289cda562.png)


このブログでは、高品質な情報提供と学習活動を通じて、読者の皆さまのお役に立つことを目指しています。もしこの記事が役立ったと感じていただけましたら、ご支援いただけると幸いです！

---

### **暗号資産による寄付**
以下のウォレットアドレスをご利用ください。**重要：Ethereum (ETH)、BNB Chain (BNB)、Polygon (MATIC)、Avalanche (AVAX) は、全て以下の同一アドレスを使用しますが、送金ネットワークの選択を間違えると資金が失われます！** 送金時には、**絶対に**使用するネットワーク（例: ERC-20、BEP-20、Polygon、Avalanche C-Chain）を**必ず**正しく選択してください。

- **Ethereum (ETH)**  
  `0x5CDA2F68f59F641B00aD172475c3d5fC10321174`  
  （ネットワーク: ERC-20）

- **BNB Chain (BNB)**  
  `0x5CDA2F68f59F641B00aD172475c3d5fC10321174`  
  （ネットワーク: BEP-20）

- **Polygon (MATIC)**  
  `0x5CDA2F68f59F641B00aD172475c3d5fC10321174`  
  （ネットワーク: Polygon）

- **Avalanche (AVAX)**  
  `0x5CDA2F68f59F641B00aD172475c3d5fC10321174`  
  （ネットワーク: Avalanche C-Chain）

- **Solana (SOL)**  
  `EnPFbqDbF67rU9mAPvfgh4YYtncJNbFQ9NLQ5R6z5S2f`

- **Stellar (XLM)**  
  アドレス: `GCSMWCACKVEZ737GZAV4AJRFL52ZZKVQ7M3B3KYY64JJGOAO2GDYKABO`  
  メモ: 必要に応じて入力してください。

- **Ripple (XRP)**  
  アドレス: `r1s4EASr3zQRrfpDA3ptTahezBhGo2hhN`  
  タグ: 必要に応じて入力してください。

- **Cardano (ADA)**  
  `addr1q8heq6ddw8rwlqa5hqlucnfk36arah9tzc8ajxvu83870h7lrre25wzq9yemex857we56cm0xu8tmxqvm8nykmtgsjdqavdpv7`

- **Dogecoin (DOGE)**  
  `DRFZ9JhAk3DTtu1tV85cawekWNrm1vKm3H`

---

### **資金用途**
寄付金は以下の目的で活用させていただきます：

1. サーバー維持費やデザインツール購入  
2. 学習活動（オンラインコース受講・書籍購入）  
3. 読者向け無料コンテンツ制作  

ご協力いただいた皆さまには心より感謝申し上げます！ 🙏

---

### **補足情報**
- **Ethereum (ETH)、BNB Chain (BNB)、Polygon (MATIC)、Avalanche (AVAX)について**  
  上記4つのネットワークは**同じウォレットアドレス**（`0x5CDA2F68f59F641B00aD172475c3d5fC10321174`）を使用します。ただし、送金時には、**絶対に**使用するネットワーク（例: ERC-20、BEP-20、Polygon、Avalanche C-Chain）を**必ず**正しく選択してください。

- USDCやUSDTなどのステーブルコインも、対応するネットワーク経由であれば送金可能です。ただし、**送金先のネットワークと選択するネットワークが一致していることを必ず確認してください。**

- 初回送金時には少額でテスト送金することをおすすめします。

---