Runnableインターフェースの活用

LangChainの「LangChain Expression Language(LCEL)」における**Runnableインターフェースの活用**は、モジュール化された処理パイプラインを構築する上での中心的な要素です。Runnableは、あらゆる入出力処理を抽象化し、チェーン(処理の連結)可能にするための共通インターフェースです。


1. Runnableとは何か

Runnableは、LangChain 0.1以降のLCELにおける標準的な処理単位です。LLM呼び出し、プロンプトの構築、ツールとの連携、メモリ処理など、あらゆるコンポーネントがこのインターフェースを通じて連結可能になります。

python
from langchain_core.runnables import Runnable class MyComponent(Runnable): def invoke(self, input): # 任意の処理 return output

2. Runnableインターフェースの主なメソッド

メソッド 説明
invoke(input) 単一の入力に対して逐次処理を行う基本メソッド
batch(inputs) 複数の入力をバッチ処理する
stream(input) ストリーミング処理を行う(例えばLLMの逐語出力など)
transform() 入力に対して逐次変換を行い、他のRunnableと組み合わせ可能にする

3. Runnableの活用例

3.1 単純なプロンプト → LLM 呼び出し

python
from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI prompt = PromptTemplate.from_template("Translate to English: {text}") llm = ChatOpenAI() chain = prompt | llm # `|` 演算子でRunnable同士を結合 output = chain.invoke({"text": "こんにちは"})

ここで、promptllmはいずれもRunnableを実装しており、|演算子でチェーン化されています。


3.2 RunnableMapによる多分岐処理

python
from langchain_core.runnables import RunnableMap # 入力を複数の処理に分岐させる branch = RunnableMap({ "english": prompt | llm, "japanese": lambda x: x["text"] # 日本語はそのまま返す処理 }) output = branch.invoke({"text": "こんにちは"})

このように、異なる処理フローを一つの入力から並列実行することができます。


3.3 RunnableLambdaで簡易関数をラップ

python
from langchain_core.runnables import RunnableLambda uppercase = RunnableLambda(lambda x: x.upper()) uppercase.invoke("hello") # => "HELLO"

ユーザー定義の軽量な処理をRunnableとして組み込む際に便利です。


4. Runnableを活用するメリット

  • **関数型プログラミングに近い構文(|演算子)**で直感的なフロー記述が可能

  • 非同期・ストリーミング処理に対応

  • ツール、LLM、Retriever、Parser、Chainなどあらゆる構成要素と組み合わせ可能

  • デバッグや観察に便利なイベントフック(with_config)を統一的に利用可能


5. 実践例:入出力の整形とログ付き処理フロー

python
from langchain_core.runnables import RunnableLambda input_formatter = RunnableLambda(lambda x: {"text": x.strip()}) output_parser = RunnableLambda(lambda x: x.content) full_chain = input_formatter | prompt | llm | output_parser # 設定付き実行(ログやタグ付け) result = full_chain.with_config(tags=["translate"], run_name="TranslationPipeline").invoke(" こんにちは ")

まとめ

LangChainのLCELにおけるRunnableインターフェースは、LLMアプリケーションの柔軟な組み立てと再利用性を支える基盤です。これにより、ユーザーはプロンプトの設計から応答の整形、さらにはツールやメモリ連携までを一貫した構文で制御でき、LLMワークフローの開発がより直感的かつ堅牢になります。

ChatGPT4o 生成日:2025/06/12