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

Langchain中load_summarize_chain指定map_reduce/refine时自定义Prompt报错求助

问题原因及解决方法

核心问题

当使用map_reduce或refine类型的load_summarize_chain时,不能直接通过prompt参数传入自定义模板。这是因为这两种链类型涉及多阶段处理,需要多个不同作用的prompt,而非单一prompt——而stuff模式是单阶段处理,所以可以用prompt参数。

你遇到的ValidationError就是因为RefineDocumentsChain(对应refine链类型)不接受prompt这个额外参数,它需要的是initial_prompt(生成初始摘要的模板)和refine_prompt(迭代优化摘要的模板)。

解决方法

1. Refine链类型的正确写法

需要分别定义初始摘要模板和优化模板,然后通过对应的参数传入:

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)

# 初始摘要模板
initial_prompt = PromptTemplate(
    template="请总结以下文本:\n\n{text}",
    input_variables=["text"]
)

# 迭代优化模板
refine_prompt = PromptTemplate(
    template="现有摘要:\n\n{existing_answer}\n\n请结合以下新文本优化这个摘要:\n\n{text}\n\n优化后的摘要:",
    input_variables=["existing_answer", "text"]
)

# 创建refine类型的链
chain = load_summarize_chain(
    llm,
    chain_type="refine",
    verbose=True,
    initial_prompt=initial_prompt,
    refine_prompt=refine_prompt
)

2. MapReduce链类型的正确写法

MapReduce需要两个模板:map_prompt(处理单段文档生成子摘要)和combine_prompt(合并所有子摘要为最终结果):

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)

# Map阶段模板:处理单份文档
map_prompt = PromptTemplate(
    template="请总结这段文本:\n\n{text}\n\n子摘要:",
    input_variables=["text"]
)

# Combine阶段模板:合并所有子摘要
combine_prompt = PromptTemplate(
    template="请将以下多个子摘要合并成一份连贯的最终摘要:\n\n{text}\n\n最终摘要:",
    input_variables=["text"]
)

# 创建map_reduce类型的链
chain = load_summarize_chain(
    llm,
    chain_type="map_reduce",
    verbose=True,
    map_prompt=map_prompt,
    combine_prompt=combine_prompt
)

关键说明

  • stuff模式:单阶段把所有文档塞进prompt,所以只用prompt参数。
  • map_reduce模式:分两步,先给每个文档生成子摘要(map),再合并所有子摘要(combine),需要两个对应参数。
  • refine模式:先生成初始摘要,再逐份文档迭代优化,需要初始和优化两个模板参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:47:18