LangChainのComponentsチュートリアル

# **LangChainのComponentsチュートリアル**

LangChainは、LLM（Large Language Models）を活用した強力なAIアプリケーションを構築するためのフレームワークです。本チュートリアルでは、各コンポーネントをフローに基づいて分類し、具体例と視覚要素を交えて解説します。

------



## **全体フロー: コンポーネント間のデータ流れ**

LangChainの一般的なワークフローは以下の通りです：

1. **入力関連**: データの準備とプロンプトの最適化。
    → **Prompt Templates → Example Selectors → Messages**
2. **モデル関連**: 入力を処理して目的に応じた出力を生成。
    → **Chat Models → LLMs → Embedding Models**
3. **出力関連**: モデルの出力をアプリケーションで使える形式に整形。
    → **Output Parsers**
4. **補助ツールとカスタマイズ**: ワークフローを拡張。
    → **Memory → Callbacks → Custom**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/ddfaeb16-fa6c-4e31-a63d-fa13810a8f32.png)


以下のセクションでは、それぞれのコンポーネントを詳しく説明します。

------

## **1. 入力関連: Prompt Templates, Example Selectors, Messages**

### **Prompt Templates**

プロンプトをテンプレート化して、一貫性と再利用性を向上させます。
 **コード例**:

```python
from langchain.prompts import PromptTemplate

template = PromptTemplate(
    input_variables=["question"],
    template="Solve the following math problem: {question}"
)
print(template.format(question="What is 12 + 25?"))
```



------

### **Example Selectors**

過去の例から最適なサンプルを動的に選択し、モデルの精度を向上させます。
 **例**: FAQでユーザーの質問に最も関連する例を提示。

------

### **Messages**

システム、ユーザー、アシスタントの3種類のメッセージを使い分け、対話を管理します。
 **実用例**:

- **システムメッセージ**: 「簡潔に回答してください。」
- **ユーザーメッセージ**: 「東京の天気は？」
- **アシスタントメッセージ**: 「今日の東京は晴れです。」

------

## **2. モデル関連: Chat Models, LLMs, Embedding Models**

### **Chat Models**

複数ターンの対話に最適化されたモデルで、顧客対応やFAQシステムに有用です。

------

### **LLMs**

文章生成や要約タスクに利用される言語モデルです。
 **活用例**:

- 技術ドキュメントの要約生成。


------

### **Embedding Models**

テキストを数値ベクトルに変換して、類似性検索やクラスタリングに使用します。
 **コード例**:

```python
from langchain.embeddings import OpenAIEmbeddings

embedding_model = OpenAIEmbeddings()
vector = embedding_model.embed_query("What is AI?")
print(vector)
```



------

## **3. ドキュメントとデータ関連: Document Loaders, Text Splitters, Vector Stores, Retrievers, Indexing**

### **Document Loaders**

PDF、CSV、ウェブなど複数形式のデータを一括ロード可能です。
 **コード例**:

```python
from langchain.document_loaders import PyPDFLoader, CSVLoader, WebLoader

pdf_loader = PyPDFLoader("sample.pdf")
csv_loader = CSVLoader(file_path="data.csv")
web_loader = WebLoader(urls=["https://example.com"])

documents = pdf_loader.load() + csv_loader.load() + web_loader.load()
```



------

### **Text Splitters**

長文データを短いチャンクに分割し、効率的な処理を可能にします。

------

### **Vector Stores**

数値ベクトルを保存して、類似性検索を高速化します。

------

### **Retrievers**

保存されたデータから関連情報を検索し、モデルに提供します。

------

### **Indexing**

大量データの検索効率を高めるために利用します。

------

## **4. 出力関連: Output Parsers**

### **Output Parsers**

モデルの出力をJSONやCSVなどの形式に整形します。
 **コード例**:

```python
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel

class Answer(BaseModel):
    answer: str

parser = PydanticOutputParser(pydantic_object=Answer)
parsed = parser.parse({"answer": "Paris"})
print(parsed.answer)
```

------

## **5. 補助とカスタマイズ: Memory, Callbacks, Custom**

### **Memory**

会話の履歴を保持し、対話の文脈を維持します。
 **コード例**:

```python
from langchain.memory import ConversationSummaryMemory

summary_memory = ConversationSummaryMemory()
summary_memory.save_context({"input": "Who is Albert Einstein?"}, {"output": "He was a physicist."})
print(summary_memory.load_memory_variables({}))
```

------

### **Callbacks**

モデル処理の進行状況を追跡し、ログを記録します。

------

### **Custom**

独自ロジックをLangChainに統合して、特定のニーズに対応します。

------

## **視覚要素: フロー図での説明**

### フロー図1: 入力から出力までの流れ

```
Prompt Templates → Chat Models → Output Parsers
```

### フロー図2: データ処理の流れ

```
Document Loaders → Text Splitters → Vector Stores → Retrievers
```

------

## **まとめ**

このチュートリアルでは、LangChainの主要コンポーネントを包括的に解説しました。さらに深い理解を得るためには、公式ドキュメントを参照してください。次は、このコンポーネントを組み合わせたプロジェクトを実際に構築してみましょう。


以下は、まとめの部分に追加したComponentsの整理テーブルです。このテーブルを活用することで、各コンポーネントの概要と適用シナリオを簡単に把握できます。

---

## **まとめ**

このチュートリアルでは、LangChainの主要コンポーネントを分類し、具体例とともに解説しました。以下のテーブルは、これらのコンポーネントを整理したものです。

| **カテゴリ**           | **コンポーネント**               | **役割**                                                                                          | **適用シナリオ**                                                                                     |
|---------------------|---------------------------|---------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| **入力関連**          | Prompt Templates         | プロンプトをテンプレート化し、入力の一貫性を確保する。                                                       | 質問応答、要約生成、コード生成など多様なタスクに適用。                                                          |
|                     | Example Selectors         | タスクに関連する例を動的に選択してモデルに提供する。                                                       | FAQで関連質問を選び、ユーザーの意図に沿った回答を生成する。                                                        |
|                     | Messages                 | システム、ユーザー、アシスタントの3種類のメッセージを管理。                                                  | チャットボットで文脈を保持した会話を実現。                                                                     |
| **モデル関連**         | Chat Models              | 複数ターンの対話を処理するモデル。                                                              | カスタマーサポートAIやFAQチャットボットを構築。                                                               |
|                     | LLMs                     | 文章生成や要約などの言語タスクを処理するモデル。                                                     | 技術文書の自動生成や、創作文章の作成。                                                                       |
|                     | Embedding Models         | テキストを数値ベクトルに変換し、類似性検索やクラスタリングを可能にする。                                           | 大量文書データの類似性検索、レコメンデーションシステムの構築。                                                     |
| **ドキュメントとデータ関連** | Document Loaders         | 外部データ（PDF、CSV、ウェブ）をロードしてモデルに入力する準備をする。                                         | 各種データソースを統合して解析に使用。                                                                       |
|                     | Text Splitters           | 長文データを扱いやすい短いチャンクに分割する。                                                     | 書籍や長文記事の分割、分散処理。                                                                           |
|                     | Vector Stores            | 数値ベクトルを保存し、類似性検索を効率化するデータストア。                                                 | 文書データベースからの高速検索。                                                                          |
|                     | Retrievers               | Vector Storesから関連するデータを検索する。                                                       | ユーザー質問に最適な関連情報を検索。                                                                      |
|                     | Indexing                 | データを検索可能な構造に整理して効率化する。                                                       | 大量データの高速クエリ処理を実現。                                                                        |
| **出力関連**          | Output Parsers           | モデルの出力をJSONやCSVなどの形式に整形。                                                       | APIに適したフォーマットにデータを変換。                                                                    |
| **補助とカスタマイズ**   | Memory                  | 会話履歴や文脈を保持して、一貫性のある対話を実現。                                                   | 顧客対応チャットボットで文脈を考慮した回答を生成。                                                               |
|                     | Callbacks               | 処理の進行状況を追跡し、ログを記録。                                                           | プロセスモニタリングやエラーログの取得。                                                                    |
|                     | Custom                  | 独自ロジックを統合してLangChainを拡張。                                                       | 特定の業務要件に対応したカスタムモジュールを実装。                                                               |

-

## 参考資料

https://python.langchain.com/docs/how_to/

https://zenn.dev/chips0711/articles/0dd345d6c1e118