二 第一编 · 第二章 · · 约 4 分钟读完

Context

模型一次能"看见"的全部信息,以及怎么在有限窗口里塞对东西。

输入层 窗口 工程

一定义

Context(上下文)是模型在一次前向推理中能同时看见的全部 token。系统提示、用户消息、历史回合、工具返回结果,都拼在一起,塞进一个固定大小的上下文窗口(context window)。

二为什么重要

窗口不是无限的。哪怕是 200K token 的窗口,塞太满也会:

  • 让推理变慢、成本变高;
  • 让模型"注意力涣散",中间的内容被忽略;
  • 触发模型的"上下文焦虑"—— 老把回复往长里写。

怎么塞、塞什么、什么时候清掉,是 Agent 工程的核心手艺。

三典型结构

[ system prompt  ]  ← 固定,几百到几千 token
[ 用户当前问题    ]  ← 几十到几百 token
[ 历史对话        ]  ← 累积,可能上千 token
[ 工具返回结果    ]  ← 检索文档、API 返回
[ 上一轮思维链    ]  ← 可选,ReAct / CoT
───────────────
总 token < context_window

四最小可跑的例子

from openai import OpenAI

client = OpenAI()
messages = [
    {"role": "system",  "content": "你只用一句中文回答。"},
    {"role": "user",    "content": "1+1=?"},
]
resp = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=messages,
    max_tokens=50,  # 限制输出,也是 context 的一部分
)
print(resp.choices[0].message.content)
# 二。

五常见误区

  • 塞满窗口 = 充分利用 —— 错。模型对窗口中段的注意力最弱,关键信息要放头尾。
  • 不切分历史 —— 几轮对话之后,早期内容会被稀释,需要主动摘要或丢弃。
  • 把 RAG 结果塞进同一个 context —— 检索质量差时,会让模型更糊涂。要先粗筛再精排。
  • 忽视 token 计费 —— 输入输出都计费,长 context 直接拖慢响应 + 拉高成本。