根据LangChain的文档,
“有两种方法可以加载不同的链类型。首先,您可以在 from_chain_type 方法中指定链类型参数。这允许您传入要使用的链类型的名称....以上方式允许您只需更改 chain_type,但它并没有为该链类型的参数提供大量灵活性。如果您想控制这些参数,可以直接加载链。”
这两个选项的区别是:
qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="map_reduce", retriever=docsearch.as_retriever())
相比:
qa_chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff")
qa = RetrievalQA(combine_documents_chain=qa_chain, retriever=docsearch.as_retriever())
我遇到的问题是我无法将第二个选项的灵活性与自定义提示结合使用。运行
inspect.getfullargspec(RetrievalQA.from_chain_type)
显示一个 chain_type_kwargs
参数,这就是您传递提示的方式。 chain_type_kwards
或 load_qa_chain
中都没有 RetrievalQA
参数。 Langchain 的文档没有提供任何有关如何使用更灵活的方法访问发送提示的功能的附加信息。我希望能够将提示的使用与更改链类型参数的能力结合起来。
从逻辑上讲,人们会认为这样的事情会起作用:
qa_chain = load_qa_chain(OpenAI(temperature=0), chain_type="stuff")
qa = RetrievalQA(combine_documents_chain=qa_chain, retriever=docsearch.as_retriever(), chain_type_kwargs=chain_type_kwargs)
但结果是:
ValidationError: 1 validation error for RetrievalQA chain_type_kwargs extra fields not permitted (type=value_error.extra)
如前所述,这确实有效:
qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=docsearch.as_retriever(), chain_type_kwargs=chain_type_kwargs)
尝试“提示=