十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VS Code Copilot NES:xtab 单池 Token 预算级联(Global Budget Cascade)设计与实现解析

VS Code Copilot NES:xtab 单池 Token 预算级联(Global Budget Cascade)设计与实现解析 VS Code Copilot NESxtab 单池 Token 预算级联Global Budget Cascade设计与实现解析【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode本文围绕 VS Code 仓库中 Copilot 扩展NES/xtab 内联编辑的globalBudgetCascade.md规范文档展开完整解读单池 Token 预算级联这一可选opt-in机制它如何用totalTokens / order / shares三个旋钮把多个 prompt 片段的预算打通、让未用预算向后续片段捐赠、并保证当前文件最后裁剪时能复用级联剩余读完你将掌握该机制的算法细节、校验规则、实验配置接入方式chat.advanced.inlineEdits.xtabProvider.globalBudget以及源码中 runGlobalBudgetCascade 与 GlobalBudgetOptions 的实际实现依据。动机为什么要打通各片段的独立预算上限在默认的 legacy 路径中xtab 的每个 prompt 片段都有各自独立的maxTokens上限。这些上限是按最坏情况下组合 prompt保守配置的这意味着即使其他片段未使用或几乎为空某个片段也会被自己的上限截断。级联cascade机制让前面片段未使用的预算捐赠给后面的片段其设计原型来自 completions-core 中的CascadingPromptFactory。该机制是opt-in可选启用的当PromptOptions.globalBudget为undefined时getUserPrompt 走 legacy 路径各片段仍按各自的上限截断输出与旧路径逐字节一致生产环境默认值。源码中这一分支位于 promptCrafting.tsopts.globalBudget ! undefined时调用级联或复用调用方预计算的precomputedCascade否则回落到getRecentCodeSnippets的旧逻辑。作用范围哪些片段参与级联由级联渲染的片段GlobalBudgetPartGlobalBudgetPart即order中列出、由级联循环依次渲染的片段只有四个recentlyViewedDocuments最近查看文档languageContext语言上下文neighborFiles邻居文件diffHistory编辑 diff 历史类型定义见 xtabPromptOptions.ts。参与分配但不参与渲染的片段currentFilecurrentFile参与份额分配shares但不在渲染顺序order中。它在级联运行完之后最后被裁剪——围绕光标/编辑窗口裁剪尺寸为其池内份额加上级联未用完的剩余预算。具体地级联以0作为种子先行运行即当前文件不捐赠任何东西然后当前文件被裁剪到currentFileBudget cascadeFinalSurplus。由于预算只单向流动级联 → 当前文件从不反向当前文件复用级联的剩余从而被裁掉得更少。能拿到shares条目的片段集合为GlobalBudgetSharePart GlobalBudgetPart | currentFile。片段与池的关系currentFile从池中定量但在级联外部且之后被裁剪裁剪上限为floor(totalTokens * shares.currentFile) cascadeFinalSurplus围绕光标/编辑窗口由createTaggedCurrentFileContentUsingPagedClipping执行裁剪上限currentFile.maxTokens会在xtabProvider中被该池预算覆盖。它不在order中级联循环从不渲染它它吸收级联的剩余而不是向其中捐赠。当globalBudget为undefined时回落到自己的currentFile.maxTokens上限。lintOptions可选、独立格式化、体量小。完全排除——没有shares条目保留自己的独立形状。当前文件裁剪函数createTaggedCurrentFileContentUsingPagedClipping的实现见 promptCrafting.ts它基于分页裁剪围绕areaAroundEditWindowLinesRange保留范围超预算时返回outOfBudget错误。输入参数输入说明globalBudget.totalTokens单池大小。默认7500。通过实验 JSON 字符串chat.advanced.inlineEdits.xtabProvider.globalBudget的totalTokens字段设置。globalBudget.order被渲染片段的有序列表。排在前面的片段先获得预算其剩余流向后面的片段。currentFile不出现在这里。globalBudget.sharesRecordGlobalBudgetSharePart, number——每个被渲染片段以及currentFile各占totalTokens的一个比例。order各片段加currentFile的总和必须等于1 ± 1e-3。默认值GlobalBudgetOptions.DEFAULT_ORDERxtabPromptOptions.ts[languageContext, recentlyViewedDocuments, neighborFiles, diffHistory]GlobalBudgetOptions.DEFAULT_SHARES与现有逐片段上限体量中性即不增不减片段份额totalTokens 7500时的基础预算currentFile1500/75001500recentlyViewedDocuments2000/75002000languageContext2000/75002000neighborFiles1000/75001000diffHistory1000/75001000GlobalBudgetOptions.DEFAULT_TOTAL_TOKENS7500。这些份额精确复现了现有逐片段上限currentFile.maxTokens1500、recentlyViewedDocuments2000、languageContext2000、neighborFiles1000、diffHistory1000。池总量7500是这些上限之和因此启用默认的 global budget 既不放大也不缩小任何被渲染片段的基础分配。这与源码中DEFAULT_OPTIONS的各片段maxTokens一致xtabPromptOptions.ts 中currentFile.maxTokens: 1500、recentlyViewedDocuments.maxTokens: 2000、languageContext.maxTokens: 2000、neighborFiles.maxTokens: 1000、diffHistory.maxTokens: 1000。默认顺序把languageContext放在第一位因为它经常被禁用或为空其份额会捐赠给紧随其后、几乎总是启用的recentlyViewedDocuments。级联未用完的部分进入finalSurplus最终交给当前文件的裁剪复用。GlobalBudgetOptions.currentFileBudget(gb)返回floor(totalTokens * shares.currentFile)——这是当前文件基础份额的唯一事实来源xtabPromptOptions.ts。当前文件实际的裁剪上限 该基础值 级联的finalSurplus。算法surplus ← 0 // 当前文件从不捐赠所以级联始终从 0 开始 for part in order: budget ← max(0, floor(surplus totalTokens * shares[part])) consumed ← runSubBuilder(part, maxTokens: budget) // 子构建器 ≤ budget surplus ← max(0, budget - consumed) // 只流向下一个片段 // 循环结束时的 surplus 作为 finalSurplus 返回加到当前文件的裁剪上限上该伪代码与源码实现 runGlobalBudgetCascade 一一对应循环体中budget Math.max(0, Math.floor(surplus globalBudget.totalTokens * share))promptCrafting.ts#L280-L283每轮结束后surplus Math.max(0, budget - tokensConsumed)#L326最终finalSurplus: surplus随CascadeResult返回#L331-L343。要点源码级补充级联始终以0作为种子。当前文件在级联之后被裁剪只会接收剩余而从不捐赠。级联为每个片段调用现有子构建器只覆盖其maxTokens其余选项从opts继承recentlyViewedDocuments→buildCodeSnippetsUsingPagedClippinglanguageContext→appendLanguageContextSnippetsneighborFiles→appendNeighborFileSnippetsdiffHistory→getEditDiffHistory这些子构建器分别定义在 recentFilesForPrompt.ts 与 diffHistoryForPrompt.ts 中。在级联的switch分支里promptCrafting.ts#L285-L320recentlyViewedDocuments通过{ ...opts, recentlyViewedDocuments: { ...opts.recentlyViewedDocuments, maxTokens: budget } }覆盖上限diffHistory通过{ ...opts.diffHistory, maxTokens: budget }覆盖neighborFiles仅在enabled neighborSnippets.length 0时运行。每个子构建器行为不变。每个子构建器返回tokensConsumed使用的是它做预算决策时所用的同一套内部计量recently-viewed 用分页裁剪行成本、appender 用原始片段成本、diff 历史用逐条 diff 成本。级联用该上报值计算surplus使级联与每个片段实际扣减预算的方式保持一致。surplus在级联片段之间只向前流动。最后一个片段未用完的 token不会丢失它构成finalSurplus由当前文件的裁剪复用。防御性不变量每个子构建器必须上报0 ≤ tokensConsumed ≤ budget。级联对每个片段softAssert这一点不会静默地把超支截断回预算内那会掩盖 bug从而当前文件裁剪所依赖的守恒论证成立。对应源码在 promptCrafting.ts#L321-L325softAssert(tokensConsumed 0 tokensConsumed budget, ...)。文档跟踪docsInPrompt级联用当前活动文档为docsInPrompt播种promptCrafting.ts#L271-L272recentlyViewedDocuments步骤会把其收录的文档加入集合neighborFiles读取该集合以避免与已有文档重复随后appendNeighborFileSnippets也会把每个收录的邻居文档加入集合。正是这个依赖关系使得GlobalBudgetOptions.validate拒绝neighborFiles排在recentlyViewedDocuments之前的顺序。累积的docsInPrompt随后传给getEditDiffHistory因此当开启diffHistory.onlyForDocsInPrompt时哪些文档在集合中的变化会影响 diff 选择diff 步骤只输出文档位于docsInPrompt中的条目。输出结构级联的输出镜像 legacygetRecentCodeSnippets的形状使getUserPrompt的其余部分保持不变外加当前文件裁剪所用的finalSurplus{ codeSnippets, // recentlyViewed langCtx neighbor用 \n\n 连接 documents, // docsInPrompt neighborSnippetsResult, // 不变遥测载荷 editDiffHistory, nDiffsInPrompt, subsections, // recentlyViewed/langCtx/neighbor 的字符串用于逐小节 token 上报 finalSurplus, // 循环结束时的剩余被当前文件裁剪复用 }对应类型CascadeResult见 promptCrafting.ts#L220-L234其finalSurplus字段的注释明确说明provider adds it to the current files clip budget (currentFileBudget finalSurplus) so the current file, which is clipped last, reuses whatever the cascade left unused.保证与边界设totalTokens T、份额为s_i校验保证它们有限且非负见 校验逐片段下限索引i处的片段无论如何总能拿到至少floor(T * s_i)个 token与前面片段的行为无关。逐片段上限索引i处的片段最多拿到逐步取整的部分和floor(…floor(floor(T * s_0) T * s_1) … T * s_i)——即它自己的份额加上所有前面片段的捐赠且每一步都取floor。注意这通常小于floor(T * (s_0 … s_i))。当前文件下限当前文件总能拿到至少floor(T * shares.currentFile)其基础份额且finalSurplus ≥ 0是额外加成的。池上限级联管理的 token 总量 ≤ 最后一个片段的上限恒 ≤T - floor(T * shares.currentFile)。当前文件随后取自己的基础份额加级联的finalSurplus因此受预算管理的片段合计消耗 ≤Tlint 与脚手架scaffolding位于预算之外。级联片段之间无回流最后一个级联片段的剩余不会重新分配给更早的片段——它作为finalSurplus流向当前文件。无片段内公平性单个片段内的大条目可以吃完该片段的整份分配级联只解决跨片段捐赠问题。校验GlobalBudgetOptions.validate在每次级联调用开始时运行并且在当前文件裁剪之前于xtabProvider中再运行一次配置错误时直接抛错。因为配置是运行时可调的实验驱动大声失败 优于静默的少分配/超分配。实现见 xtabPromptOptions.ts#L213-L250规则错误信息totalTokens有限且 0globalBudget.totalTokens must be a finite, non-negative number, got Xorder无重复片段globalBudget.order contains duplicate part Xorder中每个片段都有数值型shares[part]globalBudget.shares is missing entry for Xshares.currentFile是数值globalBudget.shares is missing entry for currentFile每个份额order片段和currentFile有限且 0globalBudget.shares[X] must be a finite, non-negative number, got Y若两者都在recentlyViewedDocuments必须先于neighborFilesglobalBudget.order must place recentlyViewedDocuments before neighborFilesorder各片段份额加shares.currentFile之和 ≈ 1epsilon1e-3globalBudget.shares across order must sum to ~1, got ${sharesSum}为什么非负规则重要负份额仍可能通过和 ≈ 1检查例如一个片段-0.25、另一个1.0。分配时负份额片段会被截断到0预算但它仍计入份额总和于是其他片段超配超过池总量——这会让当前文件的finalSurplus超过真实剩余。在入口处拒绝负数/非有限份额才能保证Σ consumed ≤ totalTokens可证明。单元测试对这些抛错路径均有覆盖见 promptCrafting.spec.ts#L1044-L1105顺序错误、重复片段、份额和不等于 1、缺diffHistory、缺currentFile等用例。配置接入单个实验驱动的 JSON 字符串级联由单个实验驱动的 JSON 字符串配置ConfigKey.TeamInternal.InlineEditsXtabGlobalBudget建模自modelConfigurationString。该配置键定义在 configurationService.ts#L1036export const InlineEditsXtabGlobalBudget defineTeamInternalSettingstring | undefined( chat.advanced.inlineEdits.xtabProvider.globalBudget, ConfigType.ExperimentBased, undefined);xtabProvider.ts的getGlobalBudget()读取它并用GlobalBudgetOptions.fromConfigString解析xtabProvider.ts#L1599-L1620private getGlobalBudget(): GlobalBudgetOptions | undefined { const configString configService.getExperimentBasedConfig(InlineEditsXtabGlobalBudget, expService); if (!configString) { return undefined; // 未设置/空 → 禁用与生产路径完全一致 } const result GlobalBudgetOptions.fromConfigString(configString); if (result.isError()) { telemetryService.sendMSFTTelemetryEvent(incorrectNesGlobalBudgetConfig, { errorMessage: result.err, configValue: configString }); return undefined; // 坏配置 → 禁用绝不崩溃 } return result.val; }该 JSON 值把三个预算旋钮定义在一起——totalTokens、order、shares——且每个字段都是可选的省略的字段回落到DEFAULT_TOTAL_TOKENS/DEFAULT_ORDER/DEFAULT_SHARES解析逻辑见 fromConfigString因此undefined/ 未设置 /→ global budget禁用生产默认逐字节一致的 legacy 路径{}→启用使用体量中性的默认值{totalTokens:6000}→ 启用仅覆盖池大小{totalTokens:12000,order:[…],shares:{…}}→ 完全自定义。fromConfigString先做结构化校验通过GlobalBudgetOptions.VALIDATORxtabPromptOptions.ts#L259-L269其中shares一旦出现就必须列出全部片段——渲染片段加currentFile部分shares对象会被拒绝保证池被完全分配再合并到默认值上最后运行语义GlobalBudgetOptions.validate任何解析、结构或语义失败都返回Result.error并禁用预算不抛异常改由遥测上报。启用后xtabProvider先汇集级联输入、运行级联再以上限currentFileBudget(globalBudget) cascade.finalSurplus裁剪当前文件替代独立的currentFile.maxTokens。已运行的级联以precomputedCascade传入getUserPrompt保证它只渲染一次。getUserPrompt只在globalBudget已设置时才认precomputedCascade因此级联恰好运行一次渲染出的片段与定量完全一致promptCrafting.ts#L82-L92。实验控制的设置设置默认值用途chat.advanced.inlineEdits.xtabProvider.globalBudgetundefined定义totalTokens、order、shares的 JSON 字符串未设置/空字符串即禁用预算迁移说明旧的globalBudget.enabled布尔与globalBudget.totalTokens数值设置已被这单个 JSON 字符串取代。任何钉住旧键的在线实验分组必须迁移enabled:truetotalTokens:N变成 JSON{totalTokens:N}裸的enabled:true变成{}。由于totalTokens同时给currentFile供资钉住旧总量如6000或8000的分组应迁移到{}或7500以保持体量中性。演算示例以下示例均使用DEFAULT_ORDER、DEFAULT_SHARES与totalTokens 7500。基础分配floor(7500 * share)逐片段 →片段基础分配languageContext2000recentlyViewedDocuments2000neighborFiles1000diffHistory1000currentFile最后裁剪1500总和 7500。级联只迭代四个被渲染片段种子为0。其循环结束时的剩余finalSurplus加到当前文件基础分配上下表最后一行的budget即展示该结果。示例 A —— 级联片段用量温和当前文件吸收剩余片段流入 surplusbudgetconsumed流出 surpluslanguageContext0200002000recentlyViewedDocuments2000400015002500neighborFiles250035005003000diffHistory300040005003500currentFile最后裁剪3500finalSurplus1500 3500 500050000实际放置 token0 1500 500 500 5000 7500。级联只消耗了 2500其 3500 的剩余流入当前文件使其从 1500 基础长到 5000被裁得更少。示例 B —— 级联为空当前文件复用整个池片段流入 surplusbudgetconsumed流出 surpluslanguageContext0200002000recentlyViewedDocuments2000400004000neighborFiles4000500005000diffHistory5000600006000currentFile最后裁剪6000finalSurplus1500 6000 7500≤ 7500—无语言上下文、历史为空、邻居禁用时每个级联片段都消耗0整个非-currentFile 池2000 2000 1000 1000 6000全部进入finalSurplus。当前文件的裁剪上限变成1500 6000 7500 T——它实际上复用了整个池。这是孤立编辑单个文件的常见场景。该场景有直接测试佐证promptCrafting.spec.ts#L1113-L1125 断言cascade.finalSurplus恰为6000currentFileBudget 1500 finalSurplus 6000 7500 T。示例 C —— 级联填满池当前文件只拿到基础份额片段流入 surplusbudgetconsumed流出 surpluslanguageContext0200020000recentlyViewedDocuments0200020000neighborFiles0100010000diffHistory0100010000currentFile最后裁剪0finalSurplus1500 0 150015000实际放置 token2000 2000 1000 1000 1500 7500。每个级联片段恰好填满自己的份额finalSurplus 0当前文件回落到 1500 基础——即逐片段下限。当前文件永远不会缩到该基础值以下。被禁用的片段片段可以因配置languageContext.enabled false、neighborFiles.enabled false或因没有输入数据无语言上下文响应、邻居片段为空、无编辑历史而被禁用。这些片段仍留在order中——接线的代码总是使用DEFAULT_ORDER/DEFAULT_SHARES——所以它们的槽位仍然运行只是consumed 0其全部份额向前捐赠。到达级联末端的一切都会成为finalSurplus由当前文件的裁剪复用而不是被浪费。从源码结构看各片段无输入即零消耗由级联循环内的条件自然保证languageContext分支仅在if (langCtx)时调用 appenderneighborFiles分支仅在opts.neighborFiles.enabled neighborSnippets neighborSnippets.length 0时运行promptCrafting.ts#L297-L309此时tokensConsumed保持为0其budget全额计入surplus流出。当languageContext与neighborFiles同时关闭时的有效上限在DEFAULT_ORDER与池T下每次捐赠步骤都逐步取floor级联种子为0设C_rv floor(floor(T·langCtxShare) T·rvShare)为 recently-viewed 的有效上限片段有效上限languageContext0被消耗掉recentlyViewedDocumentsC_rvlangCtx 份额 自身份额逐步floorneighborFiles0被消耗掉diffHistoryfloor(floor((C_rv − consumed_rv) T·neighborShare) T·diffShare)自身份额 neighbors 份额 recently-viewed 剩余逐步floor在T 7500时C_rv floor(2000 2000) 4000级联池总上限为floor(floor(4000 1000) 1000) 6000。diffHistory剩下的部分成为当前文件的finalSurplusrecentlyViewedDocuments消耗量diffHistory上限finalSurplus→ 当前文件4000填满上限20000当前文件为基础 150015004500最多 450006000整个级联池最多 6000当前文件最多 7500两个启用片段在T 7500下都饥饿的演算片段流入 surplusbudgetconsumed流出 surpluslanguageContext0200002000recentlyViewedDocuments2000400040000neighborFiles0100001000diffHistory1000200020000currentFile最后裁剪0finalSurplus150015000级联放置了6000recently-viewed 吸收了 langCtx 的捐赠diff 历史吸收了 neighbors 的捐赠finalSurplus 0当前文件保持在 1500 基础总计 7500。顺序注意事项recentlyViewedDocuments在级联捐赠池上有优先索取权languageContext的份额因为它在order中更早。若 recently-viewed 很饿diff 历史在T 7500时只能看到neighbors 自身份额 2000——它无法直接触达languageContext的份额。diff 历史最后一个级联片段剩下的部分仍会流向当前文件。要让 diff 历史分享捐赠要么重排使diffHistory先于recentlyViewedDocuments要么重新平衡shares。顺序仍须满足校验规则recentlyViewedDocuments必须先于neighborFiles因为neighborFiles会查询由 recently-viewed 填充的docsInPrompt。另一种部署方式是把被禁用的片段移除出order并重新平衡shares使其和为 1——捐赠便被静态地烘焙进去而不是从级联中涌现。接线的代码不会这么做它总是传入DEFAULT_ORDER与DEFAULT_SHARES。最后裁剪当前文件当前文件是级联剩余的天然汇聚点因为它是唯一围绕兴趣点光标被裁剪的片段总能吸收更多上下文。与其先构建 prompt、测量未用量、再把当前文件放大重构建两遍做法有重复计算剩余的风险实现上直接最后裁剪当前文件先运行级联然后用级联未用掉的全部预算来定当前文件的尺寸。机制在xtabProvider中启用 global budget 时的流程对应 gatherContextAndClipCurrentFile汇集级联输入语言上下文、邻居片段——它们不依赖当前文件裁剪所以可以先行产出运行runGlobalBudgetCascade(...)种子为0当前文件不捐赠所以级联只给出最后裁剪当前文件上限为currentFileBudget cascade.finalSurplusxtabProvider.ts#L303-L306组装 prompt把已算好的级联作为precomputedCascade传给getUserPrompt。getUserPrompt只在globalBudget设置时才认precomputedCascade因此级联恰好运行一次渲染出的片段与定量一致。当globalBudget为undefined生产默认时以上均不适用当前文件按自己的currentFile.maxTokens裁剪输入在之后汇集级联根本不运行——与 legacy 路径逐字节一致。裁剪超预算时返回NoNextEditReason.PromptTooLarge(currentFile)xtabProvider.ts#L307-L309。守恒性证明因为当前文件不捐赠预算单向流动级联 → 当前文件所以不存在重复计算。级联种子为0时循环结束剩余伸缩telescope为finalSurplus ≤ Σ(totalTokens · shareᵢ) for i in order − Σ(consumedᵢ) (T − T·share_cf) − C_cascade因此当前文件的裁剪上限为cfBudget floor(T · share_cf) finalSurplus ≤ T · (Σ all shares) − C_cascade ⇒ C_cf C_cascade ≤ T · (Σ all shares) 总量受池约束 ✅且由于finalSurplus ≥ 0cfBudget ≥ floor(T · share_cf)——当前文件永远不会缩到基础份额以下。非负、经校验的份额见 校验是第一个不等式成立的前提。注意事项 1 —— 份额和的容差validate接受|Σ shares − 1| ≤ 1e-3所以上界是T · (Σ shares)而非恰好T。份额和略大于 1 的配置最多超配~1e-3 · T默认T 7500时约 7.5 个 token。份额恰好和为 1 的配置默认值如此给出干净的≤ T上界。欠配和 1只是浪费一点预算。注意事项 2 —— 内部计量而非完整渲染 prompt≤T 是针对受预算片段的内部token 计量分页裁剪行成本、原始片段成本、diff 条目成本而言的。完整渲染的 prompt 还带有标签包裹、related-info 脚手架、lint 与 postscript它们位于池之外。所以保证是受预算片段合计消耗 ≤T而不是整个 prompt ≤T字符。测试断言的是当前文件区域增长与内部计量而非绝对的全 prompt 上界。演算示例T 6000languageContext禁用级联消耗rv 1500 neighbor 500 diff 500 2500C_cascade 2500share_cf 1500/7500 1/5⇒ 基础currentFileBudget floor(6000 · 1/5) 1200级联种子为0其finalSurplus (1600 1600 800 800) − 2500 2300。当前文件最后被裁剪到1200 2300 35006000 − 2500。当前文件从1200 → 3500恰好吸收了级联未用的 2300——符合预算 6k第一次构建消耗 4k ⇒ 把剩下的 2k 给当前文件的直觉。取舍与注意当前文件不捐赠。预算只从级联流向当前文件。当前文件较小时其基础份额不会交给级联片段它们只拿到自己的份额。若部署目标是丰富邻居/历史上下文而非当前文件上下文需要重新平衡shares给那些片段更多。等待await顺序变化。因为级联先于当前文件裁剪运行语言上下文与邻居片段的汇集发生在当前文件裁剪之前。因此任何PromptTooLarge(currentFile)的提前返回/取消原因在 global budget 下都发生在那些 await之后。这是该 opt-in 特性可接受的后果生产路径保持 legacy 顺序。Next-cursor 预测器不受影响。xtabNextCursorPredictor保留自己专用的当前文件上限从不把 global budget 带入其 prompt因此无论此特性是否启用都逐字节一致。测试佐证该机制的关键性质在 promptCrafting.spec.ts 的getUserPrompt — globalBudget cascade测试组中有系统覆盖预算充足时级联路径与 legacy 路径产生相同 prompt#L1031-L1042顺序/重复/份额校验错误会正确抛错#L1044-L1105级联无消耗时finalSurplus携带全部未用池6000#L1113-L1125级联有消耗时finalSurplus相应收缩#L1127-L1141precomputedCascade与内部计算产生逐字节相同的 prompt#L1143-L1157。provider 侧另有实验配置用例{}启用默认、totalTokens: 2000/8000覆盖池大小见 xtabProvider.spec.ts#L1272-L1290。小结Global Budget Cascade 是 NES/xtab prompt 构建中一个边界清晰、opt-in 的预算打通方案以totalTokens / order / shares单池三旋钮替代碎片化的逐片段上限用单向 surplus 级联让被禁用或空置片段如languageContext的份额自动流向活跃片段并让当前文件在级联之后按基础份额 finalSurplus最后裁剪、复用全部剩余配合严格的validate含非负份额与份额和 ≈ 1 的强制和softAssert的消耗量不变量保证受预算片段合计消耗不超过池总量。默认配置池 7500、DEFAULT_ORDER、DEFAULT_SHARES与现有逐片段上限体量中性未启用时生产路径保持逐字节不变这使其成为一个低风险、可实验回滚的改进方向。【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表