先补齐必要概念
适合:会写基本程序,第一次处理模型上下文。
- Token
- 模型编码和计量内容的单位,不等于固定数量的汉字或单词;实验直接给定计数,不实现分词。
- 上下文
- 本次请求中模型能使用的信息,包括指令、历史、工具定义和材料。
- 生成预算
- 允许生成内容的上限;某些接口还将推理用量计入其中,具体规则要查目标接口。
- 安全余量
- 应用主动留出的空间,用于计数误差或预计增量;不能替代真实计数。
原理怎样一步步成立?
- 组装请求
分别统计指令、历史、工具定义和证据。
- 检查约束
同时检查总容量与独立输出上限。
- 调用并检查状态
区分完成、预算耗尽、拒绝和传输中断。
- 准备下一轮
加入工具结果后重新计数,检查必要证据是否保留。
入门 · 理解原理
为什么文章不长,请求也会装不下?
本层目标:能指出完整输入包含哪些部分,区分容量不足与生成不足。
先看一个装材料的过程
你想让程序读合同并回答问题。真正发出的输入还包含系统说明、对话历史、工具定义和检索结果;模型处理的是这些材料的整体。正文只有几页,并不能证明完整请求很小。Token 是计量单位,不能把“2000 字”直接当成“2000 token”。
两种上限分别限制什么
上下文容量约束本次能容纳多少信息;独立输出上限约束最多允许生成多少内容。对于输入与生成共同占用容量的接口,即使输出参数没有超过独立上限,也可能与输入合计后超窗。把输出参数调大不会扩大上下文。
用一个明确假设理解
本课使用教学数字:总容量 32000,输入 23000,生成预算 6000,另留 1000。按本地规则还剩 2000。如果下一轮加入 4000 的工具结果,就超出 2000。这里的问题发生在请求容量;如果输入装得下但回答生成到上限才停止,属于另一类问题。网络断开也不能直接判为预算耗尽。
运行实验,观察反例
给定 token 数的离线算术实验;不调用模型,不验证分词器、流式传输或厂商实际限制。
Python 3.10+ · 默认运行只使用标准库 · 在你的电脑运行
- 先手算,再运行脚本核对
- 改变工具结果增量并重新计算
- 故意超过独立输出上限,检查错误分支
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 也会在下一轮装不下?
展开参考推导
独立输出上限只是一个条件。下一轮输入 27000 加生成 6000 和余量 1000,总计 34000,超过教学容量 32000。
延伸原理与知识练习
遇到不熟悉的原理,先阅读实现、连续追问和迁移案例,再独立说明前提与边界。作答与笔记保存到原有账号记录。
本专题的全部关联解析与练习(3 道)
依据与验证范围
原理依据来自公开资料;数字、案例和任务是本站教学设计。离线实验验证本页注明的范围,学习效果仍需通过独立任务与反馈判断。