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

Langchain RAG多类型上下文处理的优雅实现方案问询

LangChain RAG多类型上下文优雅实现方案

我在用LangChain做检索增强生成(RAG)时遇到个问题:有两类不同的上下文集合——Set A包含PDF1到PDF203,会根据用户输入从中选一份PDF的内容;Set B包含PDF204和PDF305。需要让LLM同时基于这两类上下文生成对比答案,但常规提示词只支持单个{context}变量,不想用三次调用LLM的暴力方法(先A后B再对比),求更优雅的实现方式。

可行的优雅方案

  • 自定义多变量提示词模板:LangChain的PromptTemplate完全支持多个变量,不用局限于单个{context}。直接在模板里定义{context_a}和{context_b}两个变量,明确告知LLM需要基于两类上下文做对比。
  • 分别检索两类上下文:针对Set A,根据用户输入检索对应PDF的相关片段;针对Set B,直接检索其中两个PDF的相关内容(可以用独立的Retriever,或者给Set B的文档打标签后过滤检索结果)。
  • 单次LLM调用完成对比:把两类上下文分别传入模板的对应变量,一次性调用LLM生成包含差异对比的答案,避免多次调用的额外开销和上下文割裂。

完整代码示例

from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI

# 定义多变量提示词模板
PROMPT_CONTEXT_TEMPLATE = """
你是[REDACTED]领域的专家。回答用户问题时,请分别基于Set A和Set B的上下文生成答案,并重点强调两种场景下答案的差异。

# 问题
{input}

# Set A 上下文
{context_a}

# Set B 上下文
{context_b}
"""

# 初始化提示模板
prompt = PromptTemplate.from_template(PROMPT_CONTEXT_TEMPLATE)

# 模拟从Set A和Set B中检索到的上下文内容
context_a = "从Set A选中的目标PDF中提取的相关文本片段..."
context_b = "从Set B的PDF204、PDF305中提取的相关文本片段..."

# 格式化提示词
formatted_prompt = prompt.format(
    input="用户的具体问题内容",
    context_a=context_a,
    context_b=context_b
)

# 调用LLM生成结果
llm = ChatOpenAI(model="gpt-3.5-turbo")
final_answer = llm.invoke(formatted_prompt)
print(final_answer.content)

额外优化点

如果Set B的内容是固定的通用规则/参考资料,可以提前将其整合成一个固定的上下文片段,不需要每次都做检索,进一步提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:43:18