[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を作りたい場合、先ほど実装したwpAPIChainRunnableSqeuenceに渡して回答文生成の前処理に利用できます。

      const chain2 = RunnableSequence.from([
        {
          input: wpAPIChain,
          question: (input) => input.question
        },
        prompt,
        chatModel,
        new StringOutputParser()
      ])

    ベクトル検索を使う場合は、Retrieverの方を使うことがほとんどです。そのため、なかなかRunnableLambdaを使うケースは出てこないかもしれません。が、この方法を知っていることで、例えばWordPress以外にもmicroCMSなどのHeadless CMSやSPARQLなどを利用したオープンデータに対する検索なども、RAGのデータソースとして利用できるようになる・・・かもしれません。

    参考にした記事

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark