我正在尝试使用 Langchain 和特定 URL 作为源数据来整理一个简单的“带有来源的问答”。该 URL 由一个页面组成,其中包含大量信息。
问题是
RetrievalQAWithSourcesChain
只给我返回整个 URL 作为结果的来源,这在这种情况下不是很有用。
有没有办法获得更详细的来源信息? 也许页面上特定部分的标题? 指向页面正确部分的可点击 URL 会更有帮助!
我有点不确定
result source
的生成是语言模型、URL 加载器的函数还是只是 RetrievalQAWithSourcesChain
本身。
我尝试过使用
UnstructuredURLLoader
和 SeleniumURLLoader
,希望更详细的数据读取和输入会有所帮助 - 遗憾的是没有。
相关代码摘录:
llm = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')
chain = RetrievalQAWithSourcesChain.from_llm(llm=llm, retriever=VectorStore.as_retriever())
result = chain({"question": question})
print(result['answer'])
print("\n Sources : ",result['sources'] )
ChatGPT 非常灵活,越明确,可以获得更好的结果。 此链接显示您正在使用的功能的文档。 langchain.prompts.BasePromptTemplate 有一个参数,可以让你给 ChatGPT 更明确的指令。
看起来基本的提示模板是这样的
使用以下知识三元组回答最后的问题。如果你不知道答案,就说你不知道,不要试图编造答案。 {语境} 问题:{问题} 有用的答案:
您可以添加另一句话,给ChatGPT更清晰的指示
请将答案的 JSON 格式设置为 { "answer": "{your_answer}", "relevant_quotes": ["list ofquotes"] }。将 your_answer 替换为问题的答案,但也要在列表中包含源材料中的相关引用。
您可能需要稍微调整一下才能让 ChatGPT 良好响应。然后你应该能够解析它。
ChatGPT API 中有 3 种消息类型
我强烈推荐 ChatGPT 上的这些课程,因为它们来自 Andrew Ng 并且质量非常高。
我尝试了一千次,最终选择了使用 json 转储的这种格式,它也不关心你有什么文件格式,你可以将它与 CSV、PPT 或 PDF 文件一起使用,它会输出每个文件的元数据。这是我发现的唯一可以通过输出/提取源提供最大性价比的解决方案。
res_dict = {
"answer_from_llm": response["result"], ### looks up result key from raw output
}
res_dict["source_documents"] = [] ### create an empty array for source documents key front result dict
for each_source in response["source_documents"]:
res_dict["source_documents"].append({
"page_content": each_source.page_content,
"metadata": each_source.metadata
})
print(json.dumps(res_dict["source_documents"], indent=4, default=str))
输出非常干净的 json:
> Finished chain.
=======PRINT PARTIAL ========
[
{
"page_content": "Event Name: Las Vegas Strip Helicopter tour\nHost: Self-guided\nLocation: 3500 Las Vegas blvd\nEvent Category: Fun in Vegas\nDate: 25-Mar\nTime start: 7:00 AM\nTime end: 9:00 AM\n:",
"metadata": {
"source": "csv-files/events-small-csv.csv",
"row": 33
}
},
{
"page_content": "Event Name: Grand Canyon tour\nHost: Self-guided\nLocation: Luxor\nEvent Category: Fun in Vegas\nDate: 25-Mar\nTime start: 12:00 PM\nTime end: 4:00 PM\n:",
"metadata": {
"source": "csv-files/events-small-csv.csv",
"row": 32
}
},
{
"page_content": "Event Name: Immersive film at the Sphere\nHost: Self-guided\nLocation: 225 Sands Ave.\nEvent Category: Fun in Vegas\nDate: 25-Mar\nTime start: 7:00 AM\nTime end: 9:00 AM\n:",
"metadata": {
"source": "csv-files/events-small-csv.csv",
"row": 34
}
}
]
============================================
============================================