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

RAG链Prompt注入:传入完整Document还是仅page_content?

解决LangChain RAG链中Document对象注入Prompt的问题

问题原因

LangChain的向量数据库检索器(比如FAISS的as_retriever())默认返回Document对象列表,而非纯文本内容。直接将检索结果传入Prompt时,Python会自动调用Document对象的__str__方法,生成[Document(page_content='...')]格式的字符串,这类冗余格式会成为模型的无效噪声,确实可能干扰输出结果的准确性。

解决方案:提取Document的page_content

只需在检索器后添加一个处理步骤,提取每个Document对象的page_content字段,拼接成模型易读的文本格式即可。可以通过RunnableLambda实现该转换逻辑。

修改后的完整代码

from operator import itemgetter

from langchain_community.vectorstores import FAISS
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableLambda, RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings

vectorstore = FAISS.from_texts(
    ["harrison worked at kensho", "harrison worked for 3 years"], embedding=OpenAIEmbeddings()
)
retriever = vectorstore.as_retriever()

template = """Answer the question based only on the following context:
{context}

Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)

model = ChatOpenAI()

# 新增处理逻辑:提取每个文档的page_content并换行拼接
format_docs = RunnableLambda(lambda docs: "\n".join([doc.page_content for doc in docs]))

chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | model
    | StrOutputParser()  # 可选:添加后直接得到字符串格式的回答
)

# 执行调用
result = chain.invoke("where did harrison work?")
print(result)

执行输出示例

处理后的Prompt内容会变成纯文本格式:

ChatPromptValue(messages=[HumanMessage(content="Answer the question based only on the following context:
harrison worked for 3 years
harrison worked at kensho

Question: where did harrison work?
")])

如果添加了StrOutputParser(),最终会直接得到模型的回答:

Harrison worked at Kensho.

补充说明

  • 除了RunnableLambda,也可以使用LangChain内置的format_documents工具函数实现相同效果,代码逻辑更简洁。
  • 用换行符拼接多个文档的内容,能让模型更清晰地区分不同上下文片段,进一步提升回答质量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:57:18