チェーンの要素は抽象基底クラスRunnableを継承している.

目次

  1. チェーンの連結
  2. 関数をRunnableにする
  3. チェーンの並列繋ぎ
    1. RunnablePassthrough

チェーンの連結

連結部で入出力の型が揃っていれば,次のようにチェーン同士を直列繋ぎにできる.

chain_a = a1 | a2 | a3
chain_b = b1 | b2 | b3
chain = chain_a | chain_b

関数をRunnableにする

独自関数some_funcがあるとして,RunnableLambdaを用いた

from langchain_core.runnables import RunnableLambda

chain = a | b | c | RunnableLambda(some_func)

または,自動変換により単に

chain = a | b | c | some_func

としてチェーンに組み込める.

次のようにデコレータで書いておくことも可能である.

from langchain_core.runnables import chain

@chain
def some_func(args):
return something

chain = a | b | c | some_func

チェーンの並列繋ぎ

RunnableParallelでチェーンを並列繋ぎにできる.

from langchain_core.runnables import RunnableParallel

chain = (
RunnableParallel(
{
"aaa": chain_a,
"bbb": chain_b,
}
)
| ccc
| ddd
| eee
)

RunnablePassthrough

RunnablePassthroughのインポートは次のように行います.

from langchain_core.runnables import RunnablePassthrough

並列で繋ぐものの1つをRunnablePassthroughにしておくと,入力値を次工程に引き継げます.
例えば,ある質問を入力したとき,RunnablePassthroughと検索を並列にすると,次工程へ元の質問文と検索結果をペアで渡すことができます.

渡すものと出力を両方保持して最終出力としたい場合は,RunnablePassthrough.assignメソッドが使えます.

chain = 入力 | RunnablePassthrough.assign(answer = 出力用チェーン)

とすると,実行結果は出力用チェーンからの出力結果と入力をあわせた辞書を出力します.