[LangChain.jsでいろんなRAGを作る]LangChain.jsのRunnableLambdaで入力値を動的に処理する
LangChainを使用してWordPressから記事情報を取得する方法が紹介されています。非同期処理を実装するために、RunnableLambdaを利用することができます。この方法を知っていることで、他のHeadless CMSやSPARQLなどもデータソースとして利用できる可能性があります。Retrieverを使う場合は、ベクトル検索を主に使用しますが、RunnableLambdaを知ることでさまざまな検索方法を適用できます。
目次
LangChainなどでRAGやLLMアプリを構築していると、時よりLCELの中で動的な処理を挟みたいケースが出てきます。そんな時、RunnableSequence
の中で非同期処理を書く方法もありますが、RunnableLambdaを利用することもできます。
今回は、RunnableLambda
を利用して、WordPressから記事情報を取得する方法を紹介します。
RunnableLambdaで、動的な処理を実装する
RunnableLambda
は、コンストラクタの中で「文字列を返す非同期処理」を実装します。例えば、example.comというWordPressサイトの最新記事のタイトルを取得したい場合、このように書きます。
const wpAPIChain = new RunnableLambda({
func: async (input) => {
const result = await fetch('https://example.com/wp-json/wp/v2/posts')
const posts = await result.json()
const title = posts[0].title.rendered
return title
}
})
RunnableLambdaは、Chainとして扱える
RunnableLambda
を利用して動的な処理を実装するメリット(だと私が認識しているもの)の1つは、「Chainとして扱えること」です。例えば検索結果を元に質問に対する回答を生成するRAGを作りたい場合、先ほど実装したwpAPIChain
をRunnableSqeuence
に渡して回答文生成の前処理に利用できます。
const chain2 = RunnableSequence.from([
{
input: wpAPIChain,
question: (input) => input.question
},
prompt,
chatModel,
new StringOutputParser()
])
ベクトル検索を使う場合は、Retriever
の方を使うことがほとんどです。そのため、なかなかRunnableLambda
を使うケースは出てこないかもしれません。が、この方法を知っていることで、例えばWordPress以外にもmicroCMSなどのHeadless CMSやSPARQLなどを利用したオープンデータに対する検索なども、RAGのデータソースとして利用できるようになる・・・かもしれません。