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

在OpenAI Chat Completions API中,如何基于文档列表为RAG模型提供上下文?

RAG场景下OpenAI Chat Completions API上下文传递的最佳实践

1. SystemMessage vs HumanMessage:哪种传递上下文更有效?

优先选择将文档内容嵌入HumanMessage,原因如下:

  • SystemMessage的核心作用是定义模型的角色和通用行为规则(比如“你是专注于文档问答的助手,回答必须基于提供的内容”),模型对这部分内容的权重低于用户当前的交互输入。
  • HumanMessage是用户当前对话的核心诉求载体,把文档上下文和提问放在一起,能让模型明确感知到这部分内容是回答当前问题的直接依据,注意力聚焦度更高,信息利用率更好。

如果是跨所有对话的通用规则(比如禁止编造内容),可以放在SystemMessage里,但具体的文档上下文一定要和用户提问绑定在HumanMessage中。

2. 确保模型有效使用文档上下文的优化方案

  • 结构化标注上下文:给每个文档片段添加清晰标识,比如[文档片段1]:xxx、[文档片段2]:xxx,帮助模型区分不同来源的信息,也便于精准引用。
  • 前置明确提示:在HumanMessage开头先给模型明确指令:「以下是用于回答问题的文档上下文,请严格基于这些内容作答:」,再附上文档内容,最后放置用户的具体问题。
  • 精准筛选上下文:不要盲目塞入所有文档,通过向量检索只返回与用户提问最相关的Top N片段(比如Top3-Top5),减少冗余信息对模型的干扰。
  • 简短示例引导:如果是复杂场景,可在SystemMessage中加入1-2个极简示例,比如「示例:用户问‘产品X的质保期’,上下文是‘产品X提供1年质保’,回答‘产品X的质保期为1年’」,帮模型快速明确规则。

3. 上下文数量与大小的关键限制

  • 总token上限:不同模型有固定的最大上下文窗口(如gpt-3.5-turbo的16k版本上限为16384token,gpt-4o为128k),所有对话消息(System+Human+历史Assistant消息)的总token数不能超过该值,否则会触发报错。可使用tiktoken工具实时计算token消耗。
  • 单片段拆分:长文档必须拆分为小片段(建议每段200-500token),既避免单个片段占用过多上下文空间,也能提升模型对信息的提取精度,同时更适配向量检索的匹配逻辑。
  • 冗余信息剔除:即使上下文窗口足够大,也不要加入与当前提问无关的文档内容,冗余信息会分散模型注意力,降低回答准确率,还会增加不必要的token成本。
  • 多轮对话清理:如果是多轮交互,要定期清理无关的历史对话,或对历史内容做摘要压缩,确保当前的文档上下文和提问有足够的token额度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:58:11