🗂

LangChainのComponentsチュートリアル

2024/12/07に公開

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

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


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?"))

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を拡張。 特定の業務要件に対応したカスタムモジュールを実装。

関連資料

https://zenn.dev/kotai/articles/94da1e64bf61c3

Discussion