OutputParser / InputFormatter のカスタマイズ

LangChainにおける「OutputParser」と「InputFormatter」のカスタマイズは、入出力の整形や解析処理を独自仕様に適応させるために重要な手段です。以下にそれぞれの役割と、カスタマイズ方法の詳細を説明します。


1. OutputParser(出力パーサー)

役割

LLM(大規模言語モデル)の出力を構造化データに変換するためのコンポーネントです。たとえば、JSON形式へのパース、特定のキーを持つ辞書形式への変換、または複数の出力候補の整理などが含まれます。

主要な用途

  • LLMの生出力(テキスト)をアプリで扱いやすい形式に変換

  • エージェントやツール呼び出しに必要なコマンドや構造を抽出

  • チャットボットの応答から意図やスロット値を抽出

カスタマイズ例(Python)

python
from langchain.schema import BaseOutputParser class CustomParser(BaseOutputParser): def parse(self, text: str) -> dict: # 例えば、改行区切りで「key: value」ペアを辞書にする result = {} for line in text.strip().split("\n"): if ":" in line: key, value = line.split(":", 1) result[key.strip()] = value.strip() return result

このクラスを LLMChain などに組み込むことで、出力処理を柔軟に制御できます。


2. InputFormatter(入力フォーマッター)

役割

プロンプトに渡す前の入力整形を担います。ユーザーデータや外部情報を元に、テンプレートに挿入する形でプロンプトを構築します。LangChainのPromptTemplateと組み合わせて使用するのが一般的です。

カスタマイズ例

LangChainには専用の PromptTemplate 構造がありますが、より動的な入力処理が必要な場合は、カスタム関数で事前整形を行い、テンプレートに渡します。

python
def format_input(user_query: str, context_docs: list[str]) -> dict: # 文書を結合して、入力用辞書を作成 context_str = "\n".join(context_docs) return { "query": user_query, "context": context_str }

そして、これをテンプレートに組み込む形で使用します:

python
from langchain.prompts import PromptTemplate prompt = PromptTemplate( input_variables=["query", "context"], template=""" 以下のコンテキストに基づいて、質問に答えてください。 コンテキスト: {context} 質問: {query} """ )

3. 組み合わせ例:LLMChainでの使用

python
from langchain.llms import OpenAI from langchain.chains import LLMChain llm = OpenAI(temperature=0) chain = LLMChain( llm=llm, prompt=prompt, output_parser=CustomParser() )

まとめ

コンポーネント 目的 カスタマイズ例
OutputParser LLM出力(テキスト)を構造化データに変換 改行区切りの key:value を辞書にする
InputFormatter LLM入力(プロンプト)の整形・テンプレート化 複数文書をまとめて1つの文脈に整形する

LangChainをLLMアプリケーションに本格的に導入する場合、OutputParserとInputFormatterのカスタマイズは、ビジネスロジックやUXの要件に合わせた高度な制御を可能にします。

ChatGPT4o 生成日:2025/06/12