LangChainの基本構造を理解する 〜 Google Colabで学ぶ主要コンポーネントと役割 〜

## はじめに
GPTなどの大規模言語モデル（LLM）を活用しようとすると、プロンプトの設計や外部ツールの連携など、意外とやることが多くなります。そこで注目を集めているのが**LangChain**です。LangChainは、LLMをアプリケーションに組み込みやすくするためのフレームワークです。

本記事では、**LangChainの主要コンポーネント**とそれぞれの**役割**について解説するとともに、**Google Colab**上で動かせる簡単なハンズオンコードを紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/652973d0-2342-8cf0-fec5-d4914a9589f3.png)

## Google Colabで環境を準備しよう

### 1. Googleアカウントにログイン

Google ColabはGoogleアカウントさえあれば無料で使えます。

### 2. 新しいノートブックを作成

Google Colabにアクセスし、新しいノートブックを作成します。

### 3. LangChainのインストール

ノートブック上で以下のセルを実行し、LangChainやOpenAIのライブラリをインストールします。

```bash
!pip install langchain openai langchain_community
```

OpenAIのAPIキーが必要な場合は、別途`openai.api_key`にセットしてください。

## LangChainの主要コンポーネント

LangChainでは主に以下のコンポーネントが用意されています。ここを理解すると、複雑な処理やフローを組む際にスムーズです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/afb6cbac-c40d-273a-2fa9-d4ec20b2a332.png)

### 1. PromptTemplate（プロンプトテンプレート）
LLMに送る文章や指示をテンプレート化し、変数を埋め込むことができます。

### 2. Memory（メモリ）
過去の会話や履歴を保持し、LLMに渡すコンテキストを管理します。

### 3. Chain（チェーン）
PromptやLLM呼び出し、結果の加工など複数ステップをつなげて一連の処理を実装します。

### 4. Agent（エージェント）
複数のTool（外部機能）を動的に使い分け、タスクを進める"自律的な"仕組みを提供します。

### 5. Tool（ツール）
Agentから呼び出せる外部機能（API呼び出し、計算処理、DB問い合わせなど）を実装します。

## ハンズオン：LLMChainを使ってみる

ここでは、**PromptTemplate + Memory + LLMChain**を使った最小構成の例を試してみましょう。Google Colabで以下のセルを動かしてみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/6a757992-82e3-f79c-bd61-2f8a884ee3a3.png)

```python
# ===============================
# LangChainハンズオン
# ===============================

# 1. 必要なライブラリをインポート
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory

# 2. OpenAI APIキーの設定（お持ちの場合）
# ※ もしキーがない場合、OpenAIのアカウント登録＆APIキー取得が必要です
import os
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

# 3. PromptTemplateの定義
template = """
以下はユーザとの会話です。
会話履歴: {history}
ユーザの質問: {user_input}
アシスタントとして親切かつわかりやすい回答をしてください:
"""
prompt = PromptTemplate(
    input_variables=["history", "user_input"],
    template=template,
)

# 4. メモリ（会話履歴管理）の用意
memory = ConversationBufferMemory()

# 5. LLMのインスタンスを用意
llm = OpenAI(
    temperature=0.7  # 応答のランダム性。0に近いほど一定した答えになる
)

# 6. Chainの構築 (LLMChainを使う)
chain = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory
)

# 7. ユーザ入力を連続的に送ってみる
user_queries = [
    "LangChainって何に使われるフレームワークですか？",
    "主なコンポーネントにはどんなものがありますか？",
    "ありがとうございました！"
]

for q in user_queries:
    answer = chain.run(user_input=q)
    print(f"User: {q}\nAI: {answer}\n{'-'*40}")
```

### 実行結果のポイント

- **ConversationBufferMemory**によって、前のやり取りが保存されます。
- 2回目・3回目の回答では、過去のユーザの質問やアシスタントの回答を踏まえた応答が返ってくるはずです。

実行例:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/c64c539d-2f67-2681-ecc7-65a6f94d3eaa.png)

## コンポーネントの役割を振り返る

### PromptTemplate
「会話履歴」を含む文章の雛形を用意し、ユーザ入力を挿入してLLMが解釈できる形に整形します。

### Memory
過去の会話を保持し、次のプロンプトに挿入できるようにします。

### LLMChain
PromptTemplateとLLMのセットを"ひとつのチェーン"として扱えます。

### Agent & Tool
Agentに複数のツールを登録し、Agentが必要に応じて呼び出します（例：検索API・計算処理・DB問い合わせなど）。

## 応用：Agentを使う場合は？

もしGoogle検索や計算処理など、外部機能を必要とする場合は**Agent**を活用します。Agentは「どのToolをいつ使うか」を自律的に判断しながらタスクを遂行します。

具体的には以下の要素が必要になります：

- Agentを定義する（ZeroShotAgentなど）
- Toolを定義する（計算やAPI呼び出しの関数）
- AgentExecutorを通して、LLMに"思考しながら"ツールを使わせる

Agent周りは少し複雑になるため、まずは本記事のように**LLMChain**や**Memory**のシンプルな利用から始めてみてください。

## まとめ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/0a4075b4-3f60-2f45-f52f-57faa6bd2665.png)

- LangChainは**PromptTemplate、Memory、Chain、Agent、Tool**といったコンポーネントを軸に設計されています
- 本記事のハンズオンでは、**PromptTemplate + Memory + LLMChain**で最小構成の対話を実装しました
- **Google Colab**ならすぐにセットアップ可能なので、記事中のコードをコピー＆ペーストして試してみてください
- 次のステップとしては、AgentとToolを使った「外部API連携」や「複数ステップの自動タスク実行」に挑戦してみることをおすすめします

## 参考リンク

- [LangChain 公式ドキュメント](https://python.langchain.com/docs/tutorials/)
- [LangChain GitHub リポジトリ](https://github.com/hwchase17/langchain)
- [OpenAI API](https://platform.openai.com/)（OpenAI GPT系モデルを使う場合）