Agent 应用开发会员账号
知识目录选择核心方向与细分内容

SYSTEMATIC LEARNING / 分层专题

上下文与生成预算

从完整请求的容量算例出发,理解输入、输出、下一轮增量与证据保留的关系。

学习目标:能够为一次请求及下一轮工具结果计算容量,并解释超窗、输出截断和网络中断的不同原因。

内容核对 2026-10-04 · 每层有独立讲解、任务与检查

按这个知识点的熟悉程度选择起点。当前层:入门 · 理解原理。完成任务后可以继续下一层;阅读与自检不自动代表掌握。

本层学习目录

先补齐必要概念

适合:会写基本程序,第一次处理模型上下文。

Token
模型编码和计量内容的单位,不等于固定数量的汉字或单词;实验直接给定计数,不实现分词。
上下文
本次请求中模型能使用的信息,包括指令、历史、工具定义和材料。
生成预算
允许生成内容的上限;某些接口还将推理用量计入其中,具体规则要查目标接口。
安全余量
应用主动留出的空间,用于计数误差或预计增量;不能替代真实计数。

原理怎样一步步成立?

  1. 组装请求

    分别统计指令、历史、工具定义和证据。

  2. 检查约束

    同时检查总容量与独立输出上限。

  3. 调用并检查状态

    区分完成、预算耗尽、拒绝和传输中断。

  4. 准备下一轮

    加入工具结果后重新计数,检查必要证据是否保留。

入门 · 理解原理

为什么文章不长,请求也会装不下?

本层目标:能指出完整输入包含哪些部分,区分容量不足与生成不足。

先看一个装材料的过程

你想让程序读合同并回答问题。真正发出的输入还包含系统说明、对话历史、工具定义和检索结果;模型处理的是这些材料的整体。正文只有几页,并不能证明完整请求很小。Token 是计量单位,不能把“2000 字”直接当成“2000 token”。

两种上限分别限制什么

上下文容量约束本次能容纳多少信息;独立输出上限约束最多允许生成多少内容。对于输入与生成共同占用容量的接口,即使输出参数没有超过独立上限,也可能与输入合计后超窗。把输出参数调大不会扩大上下文。

用一个明确假设理解

本课使用教学数字:总容量 32000,输入 23000,生成预算 6000,另留 1000。按本地规则还剩 2000。如果下一轮加入 4000 的工具结果,就超出 2000。这里的问题发生在请求容量;如果输入装得下但回答生成到上限才停止,属于另一类问题。网络断开也不能直接判为预算耗尽。

运行实验,观察反例

给定 token 数的离线算术实验;不调用模型,不验证分词器、流式传输或厂商实际限制。

Python 3.10+ · 标准库 · 在你的电脑运行

  1. 先手算,再运行脚本核对
  2. 改变工具结果增量并重新计算
  3. 故意超过独立输出上限,检查错误分支
下载 context_budget.py ↓
python3 context_budget.py
查看完整实验代码
"""Given token counts: no tokenizer, model request or provider-specific limit."""
import json


def remaining(context, output_limit, output, reserve, components):
    values = [context, output_limit, output, reserve, *components.values()]
    if any(type(v) is not int or v < 0 for v in values):
        raise ValueError("counts must be non-negative integers")
    if output > output_limit:
        raise ValueError("output limit exceeded")
    return context - sum(components.values()) - output - reserve


def demo():
    components = dict(instructions=2000, history=10000, tools=3000, evidence=8000)
    before = remaining(32000, 8000, 6000, 1000, components)
    after = remaining(32000, 8000, 6000, 1000, {**components, "result": 4000})
    assert before == 2000 and after == -2000
    return dict(input_tokens=sum(components.values()), current_room=before,
                next_turn_room=after, next_turn_fits=after >= 0)


if __name__ == "__main__":
    print(json.dumps(demo(), sort_keys=True))

本地运行的预期输出

{"current_room": 2000, "input_tokens": 23000, "next_turn_fits": false, "next_turn_room": -2000}
  • 完整输入分项一致
  • 下一轮容量重新计算
  • 实验通过不等于回答质量通过
查看运行环境、输出和校验记录 →

本层验收任务

手算当前请求及加入工具结果后的余量,分别写出三种失败现象。

完成后逐条核对

  • 写出 23000+6000+1000=30000
  • 算出下一轮余量为 −2000
  • 分别说明输入超窗、生成截断和网络中断

保存自己的过程、代码与结果。这里提供验收要求,暂不自动评分或保存课程掌握状态。

收起答案,检查理解

输出上限 8000,为什么本例允许生成 6000 也会在下一轮装不下?

面试题:作为知识练习

先独立说明原理、前提与边界,再对照解析。作答与笔记保存到原有账号记录。

本专题的全部关联练习(3 道)

依据与验证范围

原理依据来自公开资料;数字、案例和任务是本站教学设计。离线实验验证本页注明的范围,学习效果仍需通过独立任务与反馈判断。