跳到主要内容

第 1.7.6 节:把上下文来源、优先级、裁剪和失败日志设计清楚

设计上下文工程时,关键是提前写清何时停止、怎样降级、由谁接手。完成本节后,你应该能够列出上下文工程的触发条件、兜底动作、日志字段和人工升级条件。

上一节已经把状态、记忆与会话整理成作品集证据。本节继续把这些材料收束成“上下文工程”:不是把更多历史塞给模型,而是决定每次模型调用时,哪些信息能进入上下文、按什么优先级进入、超预算时裁掉什么、失败时记录什么。

读完本节后,你应该能为每个作品集项目说清楚四件事:context(上下文)来源、优先级、裁剪策略和失败日志。

上下文工程的核心是把“模型本轮应该看到什么”变成可审计契约。工程边界是:上下文包只负责组织输入,不替代业务数据库、权限系统、工具结果和人工确认;真实事实必须来自可验证来源,不能由模型记忆自由补全。

上下文包是什么​

上下文包是一次模型调用前的工程契约。它把原始用户输入、会话摘要、任务状态、工具结果、检索证据、系统约束和预算控制整理成可审计结构。

上下文来源典型内容优先级生命周期处理规则
系统约束角色、权限、禁止事项、安全边界。最高长期稳定不允许被用户覆盖。
当前用户输入用户本轮问题、补充字段、确认或取消。高当前轮必须保留原意,敏感信息需脱敏。
任务状态摘要当前步骤、缺失字段、风险等级、停止原因。高当前任务从状态表读取,不让模型猜。
工具结果摘要订单状态、知识库检索、审批结果。高按工具结果有效期只放摘要、来源、时间和关键字段。
检索证据文档片段、引用来源、版本号。中高随资料版本变化必须带来源,过期资料不能进入回答。
会话摘要前几轮对话的任务相关摘要。中当前会话只保留任务事实,不保留闲聊。
长期记忆用户偏好、已确认的非敏感事实。低到中有过期时间默认少用,必须有权限和删除机制。
预算与运行限制token 预算、成本、延迟、工具白名单。最高当前调用用来决定裁剪和降级。

上下文优先级规则​

冲突场景处理方式
用户要求覆盖系统约束拒绝覆盖,记录 unauthorized_context_override。
聊天历史和工具结果矛盾以最新、可验证的工具结果为准。
长期记忆和当前输入矛盾优先当前输入,并标记记忆需要复核。
检索证据版本过期不进入最终上下文,改为缺证据或重新检索。
上下文超预算先保留系统约束、当前输入、状态摘要和关键工具结果,再裁剪低优先级历史。

上下文包字段模板​

{
"context_id": "ctx_20260703_001",
"trace_id": "trace_refund_001",
"user_input": {
"text": "我的耳机坏了,订单号是 A1001,我要退款",
"received_at": "2026-07-03T10:00:00+08:00"
},
"state_summary": {
"current_step": "policy_check",
"missing_fields": [],
"risk_level": "medium",
"stop_reason": null
},
"tool_summaries": [
{
"tool_name": "get_order_status",
"status": "success",
"summary": "订单 A1001 已签收 45 天",
"source_trace_id": "tool_001"
}
],
"retrieved_evidence": [
{
"source": "after_sales_policy_v3",
"version": "2026-06",
"summary": "耳机超过 7 天退货期后进入质保检测流程"
}
],
"budget": {
"max_context_tokens": 4000,
"used_context_tokens": 1800,
"cropping_strategy": "drop_low_priority_history_first"
},
"failure_log": []
}

这个模板不是要求读者马上写完整系统,而是训练工程表达:模型每次看到什么,为什么看到这些,看不到什么,失败时怎么复盘。

实现步骤或决策流程​

实现上下文包时,先确定来源和权限,再做标准化、过滤、排序和裁剪。不要把所有历史对话直接塞给模型。

读图重点:裁剪顺序必须可解释:先保护系统约束、当前输入、状态和关键工具证据,低优先级历史最先退出上下文。

裁剪流程​

  1. 收集:从用户输入、会话、状态、工具、检索和记忆读取候选上下文。
  2. 标准化:把候选内容整理成摘要、来源、时间、权限和版本。
  3. 过滤:去掉无权限、过期、未验证和与任务无关的信息。
  4. 排序:按系统约束、当前输入、状态、工具结果、检索证据、会话摘要、长期记忆排序。
  5. 裁剪:超预算时先裁掉闲聊、低优先级历史和重复证据。
  6. 组装:生成最终上下文包,并记录进入和被排除的项目。
  7. 复盘:模型失败时用 context_id 回看上下文是否缺失、过期或过量。

失败日志分类​

失败类型触发条件记录字段处理方式
missing_context缺订单号、缺政策证据、缺工具结果。缺失来源、影响步骤、用户是否可补充。追问、重新检索或转人工。
stale_context证据版本过期、会话摘要不再成立。旧版本、新版本、发现时间。禁用旧上下文并重新获取。
unauthorized_context用户要求越权读取、记忆权限不足。请求来源、被拒绝字段、权限规则。拒绝并记录审计。
over_budget_context上下文超过预算。预算、裁剪项、保留项。按优先级裁剪或降级回答。
conflicting_context用户说法、记忆和工具结果冲突。冲突来源、可信度、最终采用来源。以可验证工具或人工确认结果为准。

六类作品集怎么映射​

作品集项目上下文重点必备验收样例
智能客服 Agent 工作台用户输入、订单状态、售后政策、工单状态。缺订单号时追问;政策过期时不回答。
RAG 企业知识库问答检索证据、引用版本、拒答规则。无证据不编造;引用必须能支撑答案。
MCP(模型上下文协议) / Tool Calling(工具调用) 平台工具权限、参数摘要、工具结果摘要。未授权工具不进入上下文。
多 Agent 协作系统任务交接摘要、角色边界、上一 Agent 输出。下游 Agent 不读取无关私有上下文。
数据报表分析 Agent指标口径、查询结果、时间范围、权限。没有指标定义时不生成结论。
办公自动化审批 Agent审批规则、申请材料、历史审批状态。高风险审批必须人工复核。

常见错误​

错误后果改法
把全部聊天历史塞给模型成本高、噪声大、容易引用旧信息。用会话摘要和状态摘要替代原文堆叠。
把记忆当数据库业务事实可能过期或无权限。订单、退款、审批以业务系统和工具结果为准。
检索到什么就回答什么可能引用过期或不相关资料。给证据加版本、来源和相关性门槛。
只记录模型输出,不记录上下文失败时无法判断是模型问题还是上下文问题。每次调用保存 context_id 和上下文包摘要。

本节交付物与面试讲法​

交付物要求
上下文来源表列出当前项目有哪些上下文来源,以及各自权限和生命周期。
上下文优先级表说明冲突时谁覆盖谁,超预算时裁掉谁。
上下文包模板至少包含用户输入、状态摘要、工具摘要、证据摘要、预算和失败日志。
失败日志表覆盖缺失、过期、越权、超预算和冲突上下文。

面试讲法:

我不会把上下文工程理解成“把更多内容放进 prompt”。在我的 Agent 项目里,每次模型调用前都会生成上下文包:系统约束、当前输入、状态摘要、工具结果和检索证据有不同优先级,长期记忆默认低优先级且受权限控制。超预算时按规则裁剪,失败时记录缺失、过期、越权或冲突上下文,方便回归和复盘。

小结​

状态、记忆和会话解决“系统知道任务做到哪一步”;上下文工程解决“模型本轮应该看到哪些信息”。只有把来源、优先级、裁剪和失败日志工程化,Agent 才能从多轮对话走向可评估、可复盘的真实系统。

继续学习​