LangChainのComponentsチュートリアル
LangChainは、LLM(Large Language Models)を活用した強力なAIアプリケーションを構築するためのフレームワークです。本チュートリアルでは、各コンポーネントをフローに基づいて分類し、具体例と視覚要素を交えて解説します。
全体フロー: コンポーネント間のデータ流れ
LangChainの一般的なワークフローは以下の通りです:
-
入力関連: データの準備とプロンプトの最適化。
→ Prompt Templates → Example Selectors → Messages -
モデル関連: 入力を処理して目的に応じた出力を生成。
→ Chat Models → LLMs → Embedding Models -
出力関連: モデルの出力をアプリケーションで使える形式に整形。
→ Output Parsers -
補助ツールとカスタマイズ: ワークフローを拡張。
→ Memory → Callbacks → Custom
以下のセクションでは、それぞれのコンポーネントを詳しく説明します。
1. 入力関連: Prompt Templates, Example Selectors, Messages
Prompt Templates
プロンプトをテンプレート化して、一貫性と再利用性を向上させます。
コード例:
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?"))
- 参考リンク: Prompt Templates公式ドキュメント
Example Selectors
過去の例から最適なサンプルを動的に選択し、モデルの精度を向上させます。
例: FAQでユーザーの質問に最も関連する例を提示。
Messages
システム、ユーザー、アシスタントの3種類のメッセージを使い分け、対話を管理します。
実用例:
- システムメッセージ: 「簡潔に回答してください。」
- ユーザーメッセージ: 「東京の天気は?」
- アシスタントメッセージ: 「今日の東京は晴れです。」
2. モデル関連: Chat Models, LLMs, Embedding Models
Chat Models
複数ターンの対話に最適化されたモデルで、顧客対応やFAQシステムに有用です。
LLMs
文章生成や要約タスクに利用される言語モデルです。
活用例:
- 技術ドキュメントの要約生成。
Embedding Models
テキストを数値ベクトルに変換して、類似性検索やクラスタリングに使用します。
コード例:
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、ウェブなど複数形式のデータを一括ロード可能です。
コード例:
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などの形式に整形します。
コード例:
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
会話の履歴を保持し、対話の文脈を維持します。
コード例:
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を拡張。 | 特定の業務要件に対応したカスタムモジュールを実装。 |
関連資料
Discussion