04.03概念更新于 2026年9月17日

上下文五问

What、When、How much、Where from、Priority。

04.03 · 课时讲解

上下文五问

给什么、何时给、给多少、从哪来、冲突时谁优先。

1 / 12

一句话理解:设计上下文就是逐步回答五个问题——给什么(What)、何时给(When)、给多少(How much)、从哪来(Where from)、冲突时谁优先(Priority)。

前两课讲了上下文是什么、从哪里来。到了写方案的时候,产品经理常常卡在一个地方:知道“要给模型足够的信息”,却说不清 具体到这一步 应该给哪些、给到什么粒度。结果要么什么都往里塞,要么靠研发凭感觉决定。

“上下文五问”是一套可以落到文档里的设计方法。它的价值在于把一个模糊的目标——“让模型看到正确的信息”——拆成五个能讨论、能评审、能测试的决策。

五问总览

问题 要做的决策 答不好会怎样
What:给什么 这一步做判断所需的 最小充分信息集 缺信息就猜;多余信息造成干扰
When:何时给 预先装入、某一步触发、还是模型主动去取 太早给占预算,太晚给已经判断错
How much:给多少 原文、摘录、摘要还是一个 ID 全文淹没重点,摘要丢失关键细节
Where from:从哪来 用哪个系统、哪份文档、哪个版本 取到过期或非权威的数据
Priority:谁优先 信息冲突、预算不够时的取舍规则 模型随机选边,结论不稳定

五个问题按顺序回答,答案最终汇成一份“上下文规格”:

上下文五问:依次回答五个问题,汇成一份上下文规格 从“这一步要做的判断”出发,依次回答 01 What 给什么 最小充分信息集 02 When 何时给 预装 · 按需 · 强制 03 How much 给多少 引用到全文四档 04 Where from 从哪来 唯一权威来源 05 Priority 谁优先 冲突与预算规则 上下文规格 · 每个关键步骤一份 研发实现、测试编写与线上排查的共同依据
图 1 · 五问依次回答,答案汇成每个关键步骤的上下文规格

逐一回答五问:以一次退款排查为例

What:从“要做的判断”倒推信息

不要从“我们有哪些数据”出发,而要从“这一步要做出什么判断”倒推。

任务:判断订单 ORD-1024 的退款为什么迟迟没有到账。

从要做的判断倒推需要与不需要的信息 从判断倒推 要做的判断:退款失败是哪一类原因? 需要知道 退款单是否已发起、金额是否正确 退款记录 订单是否已开票、发票是否已作废 发票状态 退款政策对“已开票订单”的要求 退款政策(知识) 支付 / 退款接口返回了什么错误码 退款记录 不需要知道 完整的下单埋点日志 与本判断无关 客户历史投诉记录 除非判断需要 写下来,作为之后 砍上下文的依据
图 2 · What:从判断倒推,同时写清“需要”与“不需要”

写出“不需要知道”同样重要。它是之后砍上下文的依据。

When:信息在什么时机出现

同一条信息,放在不同的时机,效果不同。常见的四种时机:

时机 适合的信息 客服场景的例子
会话开始时预先装入 每一步都需要、体积小 角色、区域、问题分类标准
某个阶段开始时注入 只在特定阶段需要 进入“生成处置建议”阶段时,注入补偿标准
模型主动调用工具获取 是否需要取决于中间结果 发现订单已开票后,才去查发票作废记录
程序在触发条件满足时推送 必须遵守、模型可能忽略 当 Agent 准备建议“退款”时,程序注入资金操作审批规则

最后一种特别值得产品经理关注:模型不一定会主动去查它“应该”知道的规则。 对高风险规则,与其寄希望于模型主动检索,不如由程序在触发点强制注入,更关键的规则还应该由程序直接校验(参见 程序校验优先)。

How much:粒度的四个档位

以一次支付流水查询为例,四个档位分别是:

支付流水的四个粒度档位:从只给引用到给全文 档位 给模型的内容(支付流水的例子) 上下文占用 档位 1 只给引用 支付流水 ID: PAY-88231,共 3,120 条 档位 2 给摘要 近 30 天 2 次退款尝试,最后一次 9-12 14:05 被驳回 档位 3 给相关片段 被驳回前后 5 条流水原文 档位 4 给全文 3,120 条流水原文 细节更多,占用更大
图 3 · How much:四个档位,按判断需要选择,而不是默认给全文

判断方法:

  • 结论只依赖统计特征 → 摘要(档位 2),并由程序生成,而不是让模型从全文里数。
  • 需要逐字核对 → 相关片段(档位 3),例如发票号、合同条款原文。
  • 暂时不确定要不要看 → 只给引用(档位 1),让模型需要时再取。
  • 全文(档位 4)只在信息量本身就小、或确实需要全局理解时使用。

这也是工具设计要回答的问题:工具默认返回哪个档位?能否通过参数选择?参见 并行调用与调用链 中关于“结果过大时怎么处理”的部分。

Where from:指定权威来源

同一个事实常常在多个地方都有:订单状态在订单系统里有,在客服工单的备注里也有,在上周导出的 Excel 里还有。必须为每类关键事实指定 唯一权威来源:

事实 权威来源 非权威来源(不应作为依据)
订单状态 订单系统实时接口 工单备注、导出表格
退款政策 知识库中标记“生效中”的最新版本 群聊截图、旧版 PDF
客户合同价 合同系统 销售口头说明

权威来源一旦确定,就能写进指令和工具描述,也能在评测中检查 Agent 有没有“用错来源”。

Priority:冲突与预算的两套规则

优先级要回答两类问题。

第一类:信息冲突时信谁。 一个常见的默认顺序(具体业务要调整):

信息冲突时的默认优先级:从平台安全规则到外部不可信内容 平台安全与合规规则 产品指令中的业务规则 业务系统的实时数据 知识库中的生效文档 记忆与历史结论 用户口头陈述 外部网页等不可信内容 · 只作参考,绝不当指令 高 低 冲突时以上层为准,同时在回复中明确指出差异
图 4 · Priority:冲突时的默认优先级(具体业务要调整)

注意,“用户陈述优先级低”不等于忽略用户。好的做法是:以系统数据为准做判断,同时 在回复中明确指出冲突,例如“系统显示退款已于 9 月 12 日被驳回,与您的描述不一致,建议核对退款单状态”。

第二类:预算不够时先砍谁。 上下文快满时,需要一份事先约定的淘汰顺序,例如:先清理已使用过的旧工具结果 → 再压缩早期对话 → 再缩减知识片段数量 → 系统指令与任务状态最后才动。具体技术会在「长任务的上下文管理」一课展开。

把五问写成“上下文规格”

五问的答案最好写成一份简短的规格,放进 PRD 或技术方案,每个关键步骤一份:

step: 判断退款失败原因
what:
  required: [退款单状态与金额, 订单开票与发票作废状态, 退款错误码, 生效中的退款政策]
  excluded: [完整支付流水, 客户投诉历史]
when:
  preload: [用户角色与区域, 问题分类标准]
  on_demand: [发票作废记录]       # 发现订单已开票后再查
  forced: [资金操作审批规则]       # 建议涉及退款时由程序注入
how_much:
  支付流水: 摘要(程序生成)
  退款政策: 相关条款原文,最多 3 段
where_from:
  订单状态: 订单系统 API
  退款政策: 知识库 status=生效中
priority:
  conflict: 系统数据 > 知识文档 > 用户陈述;冲突需在回复中说明
  budget: 先清理旧工具结果,再压缩对话

这份规格就是研发实现、测试编写与线上排查的共同依据。

常见误区

  • “多给点信息总没错。” 与判断无关的信息不仅浪费成本,还会成为干扰项,降低准确率。What 要同时写“需要”与“不需要”。
  • “规则写进 System Prompt 就会被遵守。” 指令越长,单条规则越容易被忽略。关键规则要考虑在触发时注入,甚至由程序校验。
  • “优先级让模型自己判断。” 模型在冲突面前没有稳定的偏好。不写清楚,就会得到时而信系统、时而信用户的结果。

产品经理检查清单

  • 每个关键步骤有没有一份上下文规格?
  • What 部分是否写了“不需要的信息”?
  • 高风险规则是依赖模型主动检索,还是在触发时强制注入或由程序校验?
  • 大体积数据的默认粒度是什么?由程序还是模型做摘要?
  • 每类关键事实是否指定了唯一权威来源?
  • 冲突优先级与预算淘汰顺序是否写清楚,并有对应的测试用例?

练习

为订单售后诊断 Agent(或你自己的 Agent)选 3 个关键步骤,例如“定位问题类型”“判断责任方”“生成处置建议”:

  1. 为每一步写一份上下文规格(可以直接套用上面的 YAML 模板)。
  2. 构造一个“信息冲突”的测试用例:系统数据与用户陈述不一致,写出你期望 Agent 的回复。
  3. 和一位工程师一起过一遍,记录他认为实现难度最高的一项。

下一步

五问回答的是“应该给什么”。下一课「上下文腐化」会解释为什么上下文不是越多越好:注意力稀释、干扰信息与“中间遗忘”。

试试:上下文、MCP、沙箱、Prompt 注入、外链