如何通过Langchain获得更详细的结果来源

问题描述 投票:0回答:2

我正在尝试使用 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'] )
python openai-api gpt-3 langchain chatgpt-api
2个回答
3
投票

ChatGPT 非常灵活,越明确,可以获得更好的结果。 此链接显示您正在使用的功能的文档。 langchain.prompts.BasePromptTemplate 有一个参数,可以让你给 ChatGPT 更明确的指令。

看起来基本的提示模板是这样的

使用以下知识三元组回答最后的问题。如果你不知道答案,就说你不知道,不要试图编造答案。 {语境} 问题:{问题} 有用的答案:

您可以添加另一句话,给ChatGPT更清晰的指示

请将答案的 JSON 格式设置为 { "answer": "{your_answer}", "relevant_quotes": ["list ofquotes"] }。将 your_answer 替换为问题的答案,但也要在列表中包含源材料中的相关引用。

您可能需要稍微调整一下才能让 ChatGPT 良好响应。然后你应该能够解析它。

ChatGPT API 中有 3 种消息类型

  • 用户 - 最终用户发送给模型的消息
  • 模型 - 从模型到最终用户的消息
  • 系统——提示工程师向模型添加指令的消息。 Lang chain 不使用这个,因为它是一次性提示

我强烈推荐 ChatGPT 上的这些课程,因为它们来自 Andrew Ng 并且质量非常高。


0
投票

我尝试了一千次,最终选择了使用 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
        }
    }
]
============================================
============================================
© www.soinside.com 2019 - 2024. All rights reserved.