プログラミングの話

retrevalQAでpromptTemplateを使う方法

retrevalQAは作成したインデックスを使うときに使用しますが、
プロンプトを設定できるpromptTemplateを合わせて使おうとしたときに、
うまくできず、苦労したのでそのことについて書いていきます。

結論

結論から、
PrmptTemplate、LLMChain、StuffuDocumentsChainを組み合わせてRetrievalQAに引数として渡す。
これで、プロンプトを設定したRetrievalQAを作ることがてきます。

具体的には、
まず、PrmptTemplateを設定します。

# テンプレートの設定
prompt = PromptTemplate(
    input_variables=["query"],
    template="200文字以内で適切な回答をして下さい:{query}",
)

次に、LLMChainにllmと、上で定義したpromptを設定します。
llmは好きなものを設定してください。

# LLMチェインの設定
llm_chain = LLMChain(llm=llm, prompt=prompt)

次に、StuffDocumentsChainを設定します。
StuffDocumentsChainでは、うえで設定したLLMChainとPromptTemplateで
設定したinput_variablesの値を使います。

# StuffDocumentsChainの設定
stuff_doc_chain = StuffDocumentsChain(
    llm_chain=llm_chain,
    document_variable_name="query",
)

最後に、
上で設定した、StuffDocumentsChainを使って
RetrievalQAの設定をします。

qa = RetrievalQA(
    retriever=retriever,
    combine_documents_chain=stuff_doc_chain,
    input_key="query",
    output_key="answer"
  )

インプットキーとアウトプットキーは
SequentialChainにRetrievalQAを組み込むときに設定したものなので
なくても大丈夫だと思いますが一応書いておきました。


テンプレートの設定をする
それで、LLMチェインの設定する。
それで、StuffDocumentsChainを設定する。
それで、RetrievalQAのcombine_documents_chainに渡す



これでPromptTemplateを使用した
RetrievalQAができると思います。
参考になればうれしいです。

経緯説明

なぜPromptTemplateを使いたかったかというと
SequentialChainに組み込んでみたいと思ったからです。

正直上で設定したようなPromptTemplateだったらなくてもあまり変わらない気もしますが、
いざ使いたいときにできないと困ると思ったので、
できるまで調べてみました。

自分は、
SequentialChainの使いどころもあまりピンと来てないので、
今のところ使い道はありませんが、
せっかく調べたので記事に書いてみました。

読んでくれてありがとうございました。以上です。

-プログラミングの話