You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LangChain中获取ChatGPT所用的输入文档列表?

提取LangChain中ChatGPT实际使用的输入文档

方法1:自定义QA链提示词,强制返回引用的文档标识

给每个输入文档添加唯一标识(比如doc_id元数据),然后修改load_qa_chain的提示词,要求模型在回答末尾明确标注用到的文档ID。示例代码:

from langchain.prompts import PromptTemplate
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
from langchain.llms import OpenAI
from langchain.schema import Document

# 自定义提示词,明确要求标注引用的文档ID
prompt_template = """用下面的上下文回答问题,若用到某文档内容,必须在回答末尾以【引用文档:doc_id1, doc_id2】格式标注。

上下文:
{summaries}

问题: {question}

回答:"""
PROMPT = PromptTemplate(
    template=prompt_template, input_variables=["summaries", "question"]
)

# 加载自定义提示的QA链
chain = load_qa_with_sources_chain(
    OpenAI(temperature=0),
    chain_type="stuff",
    prompt=PROMPT
)

# 给输入文档添加唯一doc_id
input_docs = [
    Document(page_content="文档1内容...", metadata={"doc_id": "doc_001"}),
    Document(page_content="文档2内容...", metadata={"doc_id": "doc_002"}),
    Document(page_content="文档3内容...", metadata={"doc_id": "doc_003"}),
    Document(page_content="文档4内容...", metadata={"doc_id": "doc_004"})
]

# 运行链并获取结果
result = chain({"input_documents": input_docs, "question": "你的问题"}, return_only_outputs=True)
print(result['output_text'])

解析回答末尾的标注内容,就能直接得到模型实际使用的文档列表。

方法2:使用带来源追踪的RetrievalQA链

如果文档是通过检索器获取的,直接用RetrievalQAWithSourcesChain,它会自动返回回答对应的来源文档元数据:

from langchain.chains import RetrievalQAWithSourcesChain
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings

# 构建向量存储与检索器
vectorstore = Chroma.from_documents(input_docs, OpenAIEmbeddings())
retriever = vectorstore.as_retriever()

# 加载带来源的QA链
chain = RetrievalQAWithSourcesChain.from_llm(
    llm=OpenAI(temperature=0),
    retriever=retriever
)

# 运行并获取结果
result = chain({"question": "你的问题"})
print("回答内容:", result['answer'])
print("实际使用的文档:", result['sources'])

sources字段会包含模型参考的文档标识(比如你设置的doc_id或文件路径)。

方法3:语义匹配反向验证

如果前两种方法无法满足需求,可以通过语义匹配判断:

  • 对每个输入文档和模型回答分别生成嵌入向量
  • 计算回答向量与各文档向量的相似度,相似度高于阈值的文档即为被使用的文档

示例代码(简化版):

from langchain.embeddings.openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
# 生成回答的嵌入
answer_embedding = embeddings.embed_query(result['answer'])
# 生成各文档的嵌入并计算相似度
used_docs = []
for doc in input_docs:
    doc_embedding = embeddings.embed_query(doc.page_content)
    # 计算余弦相似度(可使用sklearn的cosine_similarity)
    similarity = cosine_similarity([answer_embedding], [doc_embedding])[0][0]
    if similarity > 0.7:  # 自定义阈值
        used_docs.append(doc.metadata['doc_id'])
print("推测使用的文档:", used_docs)

内容的提问来源于stack exchange,提问作者Omered

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:42:09