知识全景图/ 软件工程与系统/ 人工智能全景图/ Context Assembly / Window Budget

上下文组装、窗口预算与截断策略底层图谱

把 system、历史、RAG、工具结果、记忆和业务状态装进有限上下文窗口,并记录哪些材料被保留、压缩、降级或丢弃

阅读定位: 一次请求的一生说明请求怎样穿过系统, Prompt / 上下文工程说明怎样设计输入, Chat Template说明 messages 怎样序列化成 token。 本页夹在这些页面中间,专门回答工程执行层问题:一次请求的所有候选材料怎样按优先级、可信度和 token 预算装配成模型真正看到的上下文。
一、上下文不是简单拼字符串
候选材料
prompt / history / RAG
可信度分层
指令 / 证据 / 状态
窗口预算
input / output
排序与压缩
near query
截断记录
dropped segments
模板序列化
token ids
它做什么常见错误应该留下的证据
候选材料收集收集 system、developer、user、history、RAG、tool、memory、产品状态把所有材料不分来源地塞进 promptsegment_id、source、owner、created_at
可信度分层区分高优先级指令、用户请求、外部证据和低信任内容把网页 / 文档里的伪指令当成系统指令trust_level、authority、content_type
窗口预算为输入、输出、RAG、历史、工具结果和安全规则预留 token输入吃满窗口,导致输出空间或关键证据被挤掉token_budget、reserved_output_tokens
排序与压缩决定哪些材料靠前、靠近问题、摘要化或结构化只按时间或检索分数排序,忽略任务需要rank_reason、compression_policy
截断与降级超预算时决定丢什么、压什么、降级什么静默截掉 system prompt、引用或工具结果尾部dropped_segments、truncation_reason
序列化按模型 chat template 渲染成最终文本和 token ids装配逻辑和模板版本不一致,回放不可复现template_version、rendered_prompt_hash
二、一次请求会带来哪些上下文材料
材料来源主要作用预算与风险
system / policy平台、产品、安全策略定义角色、边界、禁止项和输出约束必须保留完整边界;被截断会导致行为漂移
developer / task prompt功能模块、场景模板把通用能力约束到当前任务容易和 system 或用户意图冲突,需要版本化
user input当前用户请求、附件、表单状态当前任务的直接目标包含提示注入、敏感信息和伪角色标记
conversation history会话存储、最近轮次保持连续性、指代消解和偏好延续旧错误会污染当前请求,长会话容易吃掉窗口
memory / summary长期记忆、工作摘要、状态检查点跨轮、跨会话保留任务状态摘要可能过期、偏置或不可解释
RAG evidence搜索、向量库、数据库、文件解析提供专有、最新、可引用事实Top-K 过大导致噪声,Top-K 过小漏证据
tool resultAPI、代码执行、工作流节点提供真实系统状态和执行反馈结果可能很长、出错、被外部内容间接注入
product state页面对象、权限、租户、业务流程说明用户正在操作什么、能做什么状态不完整会让模型做出越权或不合时宜的建议
三、窗口预算:先预留,再装配
输出预算先锁定
如果回答需要 800 token,就不能把整个窗口都交给输入。很多“答到一半断了”的问题,本质是没有先预留 output tokens。
高优先级指令不可挤占
system、policy、工具权限、输出 schema 属于行为边界,不应该和普通历史、RAG chunk 平等竞争预算。
预算是动态的
摘要任务、检索问答、工具执行、代码修改、长文档阅读需要不同预算比例。固定 Top-K 和固定历史轮数通常会失真。
预算桶典型内容分配原则超预算时先做什么
reserved output最终回答、JSON、引用、工具参数按任务输出形态预留,不和输入抢窗口缩短输出要求或改成分段生成
control budgetsystem、policy、schema、tool rules稳定保留,尽量短而不可歧义压缩低价值描述,不删除边界规则
query budget当前用户请求、当前对象、附件摘要当前任务最靠近模型生成位置提取任务目标和约束,附件走摘要 / 引用
history budget最近对话、任务状态、用户偏好最近轮次 + 状态摘要,而不是全量历史保留关键决策,丢弃寒暄和已完成中间过程
RAG budget证据 chunk、引用、表格片段、代码片段按问题、权限、去重和证据覆盖分配重排、合并相似 chunk、保留引用 id
tool budget工具结果、错误、执行日志、审批状态保留状态、关键字段和错误类型,避免长日志直塞结构化摘要,长结果只放相关片段
safety budget风险标签、权限快照、审核要求高风险任务必须显式保留降级能力,而不是删除安全上下文
四、排序:位置本身就是一种信号
排序原则怎么做为什么重要
高优先级指令前置system / policy / developer 指令稳定放在模板规定位置让角色协议承载权威边界,降低被用户内容覆盖的概率
当前问题靠近生成点把最新 user query 和必要约束放在 assistant 生成前附近减少长上下文中任务目标被稀释或遗忘
证据靠近被问到的点按 query intent 重排 RAG chunk,并把引用 id 留在片段旁边缓解 lost in the middle 和引用错位
历史先摘要再补近邻长期历史压成状态摘要,最近几轮保留原文同时保留连续性和近期语气、指代、未完成动作
工具结果结构化把 tool result 转成字段、状态、证据 id、错误类型避免模型把长日志、HTML、网页文本当成新指令
冲突证据显式标记把来源、时间、权限、置信度和冲突点写清楚不要让模型在互相矛盾的材料里凭语气猜真伪
五、截断策略:丢弃也要有纪律
策略适用场景优点风险
tail truncation普通长文输入、日志尾部不重要实现简单,保留开头背景可能切掉最新指令、结论、错误码和引用
head truncation多轮聊天只需要近期上下文保留最近状态和用户最新意图可能丢失早期约束、身份、任务目标
middle-aware truncation长文档、长会话、代码文件保留开头定义、尾部结论和相关中段需要相关性判断,不能盲切
role-aware truncationchat template、多角色消息避免切破 role boundary 和 tool call JSON实现需要理解消息结构,不适合纯字符串截断
evidence-aware truncationRAG 问答、引用回答、合规场景优先保留能支撑答案的证据和出处如果检索排序错,可能保留错误证据
summary compression长历史、长工具结果、长任务状态用少量 token 保留状态摘要会丢细节,且需要记录摘要版本和来源
graceful degradation超长输入、低预算模型、移动端延迟要求明确告诉系统或用户“只处理部分材料”如果不显式暴露,会制造假完整感

关键纪律

不要在最终字符串上做无感截断。正确做法是先把上下文拆成结构化 segment,再按 role、source、token、priority、trust、evidence_id 和 dependency 做选择;最终被丢弃的材料也要能在 Trace 里查到。

六、RAG 和工具结果的装配细节
对象装配方式必须保留不要这样做
RAG chunk按问题重排、去重、压缩、带引用 id 放入证据区doc_id、chunk_id、score、权限快照、时间把整篇文档拼进 prompt,或者只保留正文不留出处
搜索结果标题、摘要、URL、时间、可信度分开呈现source、retrieved_at、query rewrite把搜索摘要当成已验证事实
数据库结果结构化表格、字段说明、过滤条件一起传入sql / filter、row count、权限过滤条件只给结果不给查询条件,无法审计
工具返回状态、关键字段、错误码、调用 id、证据 idtool_call_id、args_hash、status、error_type把原始 HTML / 日志 / 异常栈全量塞入
代码执行命令、退出码、关键输出、失败原因command_id、cwd、exit_code、stdout 摘要只给模型“执行失败”,不给可恢复线索
人工审批审批状态、审批人角色、范围、过期时间approval_id、scope、expires_at把人工确认写成普通自然语言,后续无法判断权限
七、常见失败模式
系统提示被截掉
模型突然不守格式、不拒答或不按产品身份说话,先看 rendered prompt 里 system / policy 是否完整,而不是先怪模型退化。
证据被挤到中间
RAG 检到了正确材料,但被长历史、无关 chunk 或工具日志挤到弱位置,模型会漏看、偏看或引用错位。
工具结果变成指令
网页、文档或工具返回里包含“忽略之前规则”这类文本,如果没有低信任标记和隔离,模型可能把结果当成高优先级指令。
历史支配当前请求
长会话中旧目标、旧错误和旧用户偏好占据大量 token,当前问题反而不清楚,模型会继续解决已经过期的任务。
截断不可见
系统静默丢弃材料,用户和排障人员都以为模型看到了完整上下文,导致坏例复盘方向完全错。
预算只看输入 token
忽略输出、重试、工具循环和缓存命中,最后表现为首 token 慢、总耗时长、成本高且不可解释。
八、Trace 字段:上下文必须可回放
字段记录什么用来排查什么
context_version上下文装配器版本、策略版本、排序规则版本同一请求为什么换版本后行为变化
template_versionchat template、role mapping、stop rule模板变动、工具调用格式漂移、停止符冲突
rendered_prompt_hash最终渲染 prompt 的哈希或脱敏快照评测回放、事故复现、发布对比
token_budget窗口大小、输入预算、输出预留、各桶分配慢、贵、截断和输出不完整
segments每段来源、角色、token、优先级、可信度、证据 id模型到底看到了什么、哪些材料影响回答
dropped_segments被丢弃或压缩的段落、原因、原 token 数关键证据或系统指令是否被截断
truncation_reason超预算、低优先级、重复、权限不足、过期区分正常降级和系统错误
retrieval_snapshotquery rewrite、top-k、rerank、ACL、doc versionRAG 命中、权限过滤、引用错误
tool_context_snapshot工具定义、调用 id、结果摘要、审批状态工具越权、结果污染、Agent 循环
8.1 Context Pack 证据包:装进窗口的每一段都要有来历
装配节点必须记录的字段用来判断什么
材料候选segment_id、source_type、source_version、authority_level、permission_snapshot这段材料来自哪里,用户是否有权看,它能否充当指令?
预算分配bucket_name、allocated_tokens、used_tokens、reserved_output_tokens、overflow_policysystem、当前问题、历史、RAG、工具结果分别占了多少窗口?
排序与靠近rank_score、position_index、recency、task_relevance、evidence_priority关键证据是否离生成位置太远,当前任务是否被历史淹没?
压缩与截断compression_method、dropped_segments、drop_reason、summary_id、loss_risk丢弃的是重复噪音、低权重历史,还是关键约束和引用证据?
最终快照context_pack_id、rendered_prompt_hash、token_count、template_version、trace_id一次坏例能否精确回放到当时模型真正看到的上下文?
九、排查时先问这十个问题
问题先看什么常见修复动作
模型是否看到了正确 system / policy?rendered prompt、template version、control budget固定控制区预算,减少冗长系统说明
当前用户问题是否靠近生成位置?segment order、final user message、history summary重排历史,把当前任务目标前置或靠近 assistant header
关键证据有没有进入窗口?RAG top-k、dropped_segments、chunk ids重排、去重、压缩 chunk,调低无关历史预算
引用为什么错位?evidence_id、chunk boundary、answer citation map证据片段和引用 id 绑定,避免正文和出处分离
工具结果有没有被当成指令?tool role、trust_level、serialization用低信任工具结果区和结构化字段隔离
长会话为什么越聊越偏?history budget、memory summary、过期状态摘要状态、清理旧目标、标记已完成任务
为什么同一问题单轮好、多轮差?历史排序、截断策略、role boundary多轮用状态摘要 + 最近轮次,不盲目全量拼接
为什么首 token 很慢?输入 token、prefill、RAG budget、cache hit瘦身上下文、缓存控制区、缩短证据和工具结果
为什么回答半截停止?reserved output、max tokens、stop rule预留输出、拆分任务、修正 stop sequence
为什么坏例无法复现?context_version、rendered_prompt_hash、dropped_segments把上下文装配纳入 Artifact / Release / Eval 证据链
十、和相邻页面怎么接
相邻页它回答什么本页补什么
一次请求的一生请求从输入到推理、返回、Trace 的时间顺序细化“上下文组装”这一步如何预算、排序、截断和留证据
Prompt / 上下文工程怎样设计 System Prompt、历史、记忆和上下文把设计落到结构化 segment、预算桶和装配策略
Chat Templatemessages 怎样按角色协议序列化成 token决定哪些 message / segment 被送去模板,以及被截掉什么
长上下文 / 记忆长会话和长期记忆如何保持连续性提供历史、摘要、记忆和当前请求的预算取舍规则
长上下文失效机制为什么证据进了窗口仍会漏看或偏看通过排序、近邻放置、证据去重和截断记录减少失效
RAG / 知识检索知识怎样检索、重排、引用和评测回答检索结果怎样进入最终上下文窗口
成本 / 性能工程token、延迟、缓存和模型成本怎样优化把窗口预算变成 TTFT、Prefill 和单位成本治理动作
审计证据链AI 请求怎样可复现、可归因、可追责把 context_version、rendered_prompt_hash 和 dropped_segments 纳入证据
十一、回到 AI 主干
AI 全景 AI 阅读路线 一次请求的一生 上下文组装 / 窗口预算 Chat Template Prompt / 上下文 RAG 长上下文 / 记忆 LLMOps