← [ BACK_TO_NOTES ]

Prompt Budgeting

Prompt Budgeting 是 prompt assembly 阶段的 token 配额分配策略:在已知上下文窗口约束下,为 system、history、retrieval、tools 与 output reserve 分配可执行预算。

#concept #evergreen #ai

[!info] related notes

Prompt Budgeting

一句话定义

Prompt Budgeting 是为上下文的各个组件分配 token 预算的策略。总预算是有限的(如 128K),需要决定每个组件分多少。

边界:窗口约束 vs 组装配额

上下文窗口预算 回答的是系统级问题:

当前模型窗口与运行时约束下,总共能安全使用多少 token,哪些内容必须预留?

Prompt Budgeting 回答的是组装级问题:

在这个可用预算已经确定后,本轮 prompt 的各组成部分各分多少?

因此它不是“上下文窗口大小”的同义词,而是一个资源分配策略。同一个 128K 模型,在 research、tool-heavy、long-form generation 等不同阶段,可以有不同的 Prompt Budgeting。

核心原理

预算分配表

组件预算范围优先级说明
System Prompt1-2K最高角色和规则
当前用户输入0.5-2K最高当前任务
结构化状态1-2K高任务进度
最近消息5-15K高对话上下文
检索知识3-10K中外部知识
工具结果2-5K中工具返回
对话摘要0.5-2K中历史压缩
用户画像0.5-1K低长期记忆
输出预留4-8K-LLM 生成空间

动态预算调整

class DynamicBudgetAllocator:
    def allocate(self, context: ContextBundle, phase: str) -> dict:
        if phase == "information_gathering":
            # 信息收集阶段:给工具结果更多空间
            return {
                "tool_results": 10000,
                "retrieved_knowledge": 8000,
                "recent_messages": 5000,
                "output_reserve": 4000,
            }
        elif phase == "generation":
            # 生成阶段:给输出更多空间
            return {
                "tool_results": 3000,
                "retrieved_knowledge": 5000,
                "recent_messages": 10000,
                "output_reserve": 8000,
            }

常见坑

  1. 不做预算: 所有内容无限制地塞进去
  2. 预算太死: 不同阶段用相同的预算分配
  3. 不留输出空间: 上下文填满了,LLM 没空间回答
  4. 不监控实际使用: 不知道预算是否合理

学习检查

  1. 为什么“模型支持 128K context”仍不足以决定每一层 prompt 应该放多少内容?
  2. output_reserve 为什么必须在组装输入之前预留,而不是等超限后再处理?
  3. 如果检索阶段与最终生成阶段共用一套固定配额,会出现什么资源错配?
  4. 给定一个 tool-heavy Agent,本轮预算紧张时你会优先压缩哪一层,哪些层不能机械裁掉?

参考资料

创建于 2026/6/30 更新于 2026/10/1
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本