面试题:LLM 上下文窗口与多轮对话超限
考察你对 Token、上下文窗口和多轮对话请求的基础理解,以及分析真实对话超限问题的能力。不要求掌握具体模型 SDK。考察你对 Token、上下文窗口和多轮对话请求的基础理解,以及分析真实对话超限问题的能力。不要求掌握具体模型 SDK。

文章目录 15
题目
一个 AI 对话应用在每次请求时,都会将 system prompt、之前的对话记录和用户本次输入一起发送给模型。对话开始时工作正常,但轮次增多后,接口返回“超过上下文窗口限制”的错误。
请回答:
什么是 Token?它与字符数、字数是什么关系?
为什么对话轮次增加后会超过上下文窗口?
你会如何在前端和中处理这个问题?
回答1
token在LLM中表示字符的消耗,但token不等同于一个字符或一个字数,一个token可能是由多个字符组成;
LLM会读取之前会话的记忆,每次会话请求时,都有可能将多个会话记录一起再发送给LLM;
前端增加显示上下文百分比,增加上下文压缩操作,在BFF中对对话采用RAG后发送给LLM
解答1
结论:方向部分正确,但基础概念和方案边界还不够准确。45 / 100。
1. 正确点
知道 Token 与字符数、字数不是固定的一一对应关系。
识别到多轮对话通常会重复发送历史消息,因此上下文会不断增长。
提出了上下文占用提示和压缩,说明你注意到了产品体验与工程处理。
RAG 可以用于从历史信息中选择相关内容,但需要明确适用方式。
2. 遗漏点
Token 还可能对应单词的一部分、标点、空格或多个字符,具体取决于模型使用的 tokenizer。
上下文通常不只有对话历史,还可能包含:
system prompt
工具定义
检索内容
当前输入
为模型输出预留的 Token
没有说明超限后的截断、摘要、错误提示和重新生成策略。
前端看到的消息并不是全部上下文,因此只能显示估算值;准确预算通常应由 BFF 管理。
3. 错误点
“LLM 会读取之前会话的记忆”不够准确。
多数模型 API 请求本身是无状态的:模型不会自动读取之前的会话,而是应用在当前请求中重新传入历史消息。真正保存会话的是应用或服务端。
“对对话采用 RAG”也不能直接等同于上下文压缩:
截断:直接丢弃部分消息。
摘要:把多条历史压缩成较短内容。
检索:从历史信息中选择当前可能相关的部分。
RAG:通常强调从外部知识源检索内容,也可以用于历史记忆检索,但可能漏掉关键上下文。
4. 更适合面试口述的表达
你可以先这样开头:
Token 是模型处理文本的基本计量单位,由根据模型规则进行切分,并不固定对应一个字符或一个单词。多数模型 API 本身没有持续会话记忆,多轮对话是应用在每次请求时重新传入历史消息,因此历史消息、system prompt、工具定义和预留输出共同消耗上下文窗口。
后面的解决方案先不要展开,我通过追问确认你是否真正理解。
5. 递进追问
假设模型上下文窗口为 16K Token:
system prompt 和工具定义占 3K
当前用户输入占 1K
需要为模型输出预留 2K
历史消息已经占 15K
此时 BFF 应该如何处理历史消息?请说明你的处理顺序,以及前端应该向用户展示什么。不要只回答“使用 RAG”。
6. 下一步复习建议
重点补强这条链路:
无状态模型请求
-> 请求上下文组成
-> 输入与输出 Token 预算
-> 截断 / 摘要 / 检索
-> 前端提示与失败恢复回答2
优先保留用户身份和任务目标,其次是最近的消息,对于较早的消息进行摘要或者淘汰
比如任务目标不能拆开,可能会导致任务偏差;较早的消息也不能单独删除,应提取其中比较重要的信息片段
BFF则降级处理,删除一些较早片段信息,前端要提示上下文已被压缩
解答2
结论:这次补答有明显提升,62 / 100。已经形成基本策略,但消息完整性和降级处理还需要补强。
分项:
正确性:27 / 40
原理理解:12 / 20
工程应用:12 / 20
边界与权衡:4 / 10
面试表达:7 / 10
正确点
保留优先级基本合理:任务目标和长期约束优先,其次是近期消息。
知道较早内容可以通过摘要减少 Token。
知道压缩后需要向用户说明,避免用户误以为模型仍掌握全部历史。
遗漏点
和 必须成组保留,不能只保留其中一个。
应尽量保留完整对话轮次,避免在一条消息中间按字符截断。
摘要完成后必须重新计算 Token,而不是假设一定满足限制。
原始消息应该继续保存在数据库中,方便恢复、审计或重新生成摘要。
压缩后仍然超限时,还需要停止请求、要求新建会话或让用户确认舍弃哪些信息。
错误点
“删除较早片段信息”需要区分两个动作:
从本次模型请求中移除:合理。
从数据库永久删除原始会话:通常不合理。
上下文窗口管理的目标是减少发送给模型的内容,不代表必须删除用户的原始会话记录。
完整面试口述答案
Token 是模型处理文本的基本计量单位,由具体模型的 tokenizer 进行切分,它和字符数、字数不是固定的一一对应关系。一个 Token 可能是一个词的一部分、标点、空格或者多个字符。
多数模型 API 本身是无状态的,模型不会自动读取之前的会话。为了实现多轮对话,应用会在每次请求时重新发送 system prompt、工具定义、历史消息、当前输入以及检索内容,这些内容再加上模型输出共同占用上下文窗口。
在这个例子中,模型总窗口是 16K,扣除 3K 的 system prompt 和工具定义、1K 当前输入以及 2K 输出预留后,历史消息最多只能使用 10K,实际工程中还应保留一定安全余量。
BFF 首先使用目标模型对应的 tokenizer 估算 Token,然后按优先级组织上下文:保留 system prompt、当前输入、任务目标和用户确认过的长期约束;其次保留最近的完整对话轮次;更早的历史生成滚动摘要,或者只检索与当前问题相关的内容。
处理过程中不能拆开 Tool Call 和对应的 Tool Result,也应避免从一条消息中间随意截断。摘要后需要重新计算 Token。如果仍然超限,可以继续减少早期消息或检索结果;如果已经无法安全压缩,就停止模型请求,提示用户新建会话或确认舍弃部分历史。
原始会话仍然保存在数据库中,只是不全部发送给模型。前端可以显示上下文占用的估算值,并明确提示“较早内容已被摘要,部分细节可能无法继续使用”,同时提供新建会话或查看原始记录的入口。
本题首次正式回答记录为 45 分,本次补答作为追问表现记录为 62 分,不单独增加能力证据。下一次建议通过不同场景复测 Token 预算、摘要和检索的边界。
相关文章
- 面试题-AI相关
从 Embedding 到带出处的知识库问答:最小 RAG 链路与面试复盘
围绕企业知识库问答,复盘从工具调用思路到理解文档分块、向量检索与正文关联的学习过程。结合真实作答与四轮点评,补全 Embedding、相似度、Prompt 组装、引用展示和无资料兜底的基础概念。
- 面试题-AI相关
Node.js BFF 中 AI 请求的取消、超时与流式错误处理
围绕“Vue 前端 → Node.js BFF → 上游模型”的完整请求链路,分析停止生成为什么没有真正取消模型请求,以及流式响应开始后如何传递错误、管理任务状态和释放资源。
- 面试题-AI相关
LLM 工单提取:从 JSON 校验到歧义优先级的人工确认
模型返回合法 JSON,并不意味着字段符合约定,更不意味着内容忠实于原文。通过一道工单提取面试题及三轮补答,梳理 BFF 校验、有限重试、优先级歧义和前端确认流程。
评论
0 条评论会在审核后展示,邮箱不会公开。