LangChain × Bedrock Nova Lite 連携環境構築ガイド（with Python & Poetry）

## ✨ 概要

本記事では、AWS Bedrock の Amazon Nova Lite モデルを LangChain 経由で呼び出すための Python 開発環境を構築し、動作確認を行うまでの手順を丁寧に解説します。

Poetry を活用した依存管理、`.env` を利用した秘匿情報の管理、そして AWS コンソール上での最低限の準備（Inference Profile の作成）も扱います。

対象読者：
- LangChain × AWS Bedrock を初めて使う人
- Claude ではなく Nova（低コスト・高速）モデルを使いたい人
- セキュアかつスクリプタブルな開発環境を整えたい人

---

## ✅ 前提条件

- AWS アカウント作成済み
- AWS Bedrock 利用申請済み（Nova Lite モデルを有効にしておく）
- Python 3.11+ インストール済み
- Poetry インストール済み

---

## 📁 使用ライブラリ（`main.py`で使用するもののみ）

| ライブラリ | 用途 |
|-----------|------|
| langchain-aws | ChatBedrock による Bedrock 呼び出し |
| boto3 | AWS SDK（内部的に必要） |
| python-dotenv | `.env` 管理 |

---

## 📦 Poetry プロジェクト初期化

```bash
poetry init
# すべて Enter で OK
```

---

## 🛠 `pyproject.toml`（完成形）

以下は筆者の環境で実際に動作確認済みのバージョン構成です。

```toml
[tool.poetry]
name = "app"
version = "0.1.0"
description = "AWS Bedrock Nova Lite x LangChain"
authors = ["yourname <your.email@example.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.11,<4.0"
langchain = "0.3.25"
langchain-community = "0.3.23"
langchain-aws = "*"
boto3 = "1.37.24"
python-dotenv = "1.1.0"
pydantic = "2.10.0"

[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
```

```bash
poetry install
```

---

## 🌍 `.env` の作成（秘匿情報の外出し）

```env
MODEL_ID=arn:aws:bedrock:ap-northeast-1:123456789012:inference-profile/apac.amazon.nova-lite-v1:0
AWS_REGION=ap-northeast-1
```

※ 上記の `MODEL_ID` は Bedrock コンソールで作成した Inference Profile の ARN に置き換えてください。

---

## 🧠 `main.py`（実行スクリプト）

```python
import os
from dotenv import load_dotenv
from langchain_aws import ChatBedrock
from langchain.schema import HumanMessage

load_dotenv()

chat = ChatBedrock(
    model_id=os.getenv("MODEL_ID"),
    region_name=os.getenv("AWS_REGION"),
    provider="amazon",
    model_kwargs={
        "max_tokens": 1024,
        "temperature": 0.7,
        "top_k": 250,
        "top_p": 0.9,
    },
)

response = chat.invoke([
    HumanMessage(content="カレーの作り方を教えてください。")
])

print("AIの回答:")
print(response.content)
```

---

## 🖥 AWS コンソールでの Inference Profile 作成手順

1. [Bedrock Console](https://console.aws.amazon.com/bedrock/home) にアクセス
2. 左メニュー「**Inference profiles**」をクリック
3. 「**Create inference profile**」を選択
4. モデル選択：`amazon.nova-lite-v1`
5. プロファイル名：例 `apac.amazon.nova-lite-v1`
6. 作成後、表示される **ARN** を `.env` の `MODEL_ID` にコピー

※ クロスリージョン用プロファイルでない場合、`ap-northeast-1` 同士で統一すること。

---

## ▶️ 実行確認

```bash
poetry run python main.py
```

成功すると、Nova Lite からの応答が表示されます。

---

## ⚠️ よくあるエラーと対処

| エラー内容 | 原因・対策 |
|------------|-------------|
| `ValueError: Model provider should be supplied` | `provider="amazon"` の指定忘れ。ARN 使用時は必須。 |
| `ValidationException: Invocation with on-demand isn’t supported` | Nova Lite は on-demand 非対応。**Inference Profile の ARN を使う**こと。 |
| `.env` の値が None になる | `load_dotenv()` を忘れている、または `.env` が同階層にない。 |
| `botocore.exceptions.NoCredentialsError` | AWS認証情報（~/.aws/credentials または 環境変数）が設定されていない。 |

---

## 🔚 おわりに

Claude に比べてコストが低く、応答も高速な Nova Lite モデルは、開発初期や検証段階のチャットボットに非常に適しています。

LangChain の抽象化を活用することで、AWS SDK に直接触れることなく、直感的なコードで AI モデルにアクセスできるようになります。

Poetry + `.env` 管理を組み合わせることで、再現性のある、セキュアな開発環境が手に入ります。

---

## 💬 今後の発展

- Claude 3（Anthropic）や Titan、Mistral など他モデルへの切り替え
- Streamlit や FastAPI と組み合わせたチャットUI化
- LangChain Agents や Memory 機能との統合

---

## 📚 参考リンク

- [AWS Bedrock 公式](https://aws.amazon.com/jp/bedrock/)
- [LangChain 公式](https://python.langchain.com/)
- [LangChain AWS integration](https://docs.langchain.com/integrations/providers/langchain-aws/)

---

以上、LangChain × Bedrock Nova Lite の導入記事でした！