System Design Interview / LLM Product Platform

设计一个 ChatGPT

这道题的核心不是“训练一个大模型”,也不是“把用户输入转发给模型 API”。它考的是: 当 ChatGPT 看起来只是一个聊天框时,背后怎样把用户、会话、上下文、模型推理、安全、 配额和运维连成一条稳定的产品链路。面试默认先设计文字聊天 P0:用户登录后创建会话、 发送消息,服务端组装当前上下文,完成安全与配额检查,路由到合适的模型,把生成 token 流式返回,并把消息、状态和观测事件可靠落库。

Projects、Memory、RAG/Search、Apps、Agent、Canvas、Data Analysis/Code、Tasks 和 Pulse 不要一上来混进主链路。它们是扩展面:有的给上下文增加来源,有的调用外部工具, 有的运行异步任务,有的提供编辑或代码沙箱。开场先说清触发条件、权限边界、失败降级, 再按面试官要求选择一两个深入。

范围公式
P0Chat=Auth+Conversation+ContextWindow+Safety+Quota+ModelRoute+Inference+Stream+Persist+ObserveExtensions=RAG/Search+ProjectContext+Memory+Apps/Tools+Agent+Canvas+DataAnalysis/Code+Tasks/Pulse\begin{aligned} \mathrm{P0Chat} &= \mathrm{Auth}+\mathrm{Conversation}+\mathrm{ContextWindow}+\mathrm{Safety}\\ &+\mathrm{Quota}+\mathrm{ModelRoute}+\mathrm{Inference}+\mathrm{Stream}+\mathrm{Persist}+\mathrm{Observe}\\ \mathrm{Extensions} &= \mathrm{RAG/Search}+\mathrm{ProjectContext}+\mathrm{Memory}\\ &+\mathrm{Apps/Tools}+\mathrm{Agent}+\mathrm{Canvas}+\mathrm{DataAnalysis/Code}+\mathrm{Tasks/Pulse} \end{aligned}

P0 主链路

一次普通聊天请求必须闭环:鉴权、会话、上下文、安全、配额、模型推理、流式返回、持久化和观测。

扩展平面

RAG、Memory、Projects、Apps、Agent、Canvas、Code、Tasks/Pulse 都是挂在主链路上的可选能力,不默认进入每次请求。

非目标

不设计从零训练基础模型,不假设知道 OpenAI 私有架构,不展开 Voice/多模态,除非面试官明确要求。

ChatGPT 系统设计面试路线手绘图:P0 chat、API、Context、GPU、Tools、Safety 和 Ops
先把答案收束到 P0 chat 主链路,再按追问进入 API、上下文、推理、工具、安全和运维平面。
阅读契约

本页回答一个问题:面试里如何把“Design ChatGPT”从泛泛而谈变成可执行、可恢复、可扩展、可审计的系统设计。 读完后,你应该能先锁 P0 聊天主链路,再按 API、Context、GPU、RAG/Tools、Agent、Canvas、Code、安全和运维逐层展开。

Scope 先锁 P0

默认文字聊天闭环,不把 Agent、Canvas、Code、Pulse 一口气塞进主链路。

State 状态要可恢复

conversation、message、generation、tool call、trace 和 billing 都要有明确真源。

Runtime 推理不是黑盒

讲清 prefill、decode、batching、KV cache、流式回压、取消和降级。

Safety 能力越强,边界越硬

工具、文件、外部 app、代码执行和后台任务都要有权限、审计和回滚。

1. 面试问法地图

先判断面试官到底在问哪一层

“Design ChatGPT”不是一道固定题,而是一组入口相似、深挖方向完全不同的题。 开场 2 分钟先判断面试官要的是消费级聊天产品、API 平台、企业知识库、LLM 推理平台、 实时语音、多模态、Agent、Code Interpreter、Canvas,还是主动任务系统。判断清楚以后, 答案才有主线:先交付 P0 文本聊天闭环,再只深入面试官指定或暗示的能力。

Design ChatGPT 面试问法路由手绘图
面试问法先归位:没有指定重点时只展开 P0 chat;一旦追问 API、RAG、GPU、Agent 或安全,就进入对应能力平面。

Design ChatGPT

默认是大模型对话产品。不要从训练 GPT 开始,主线放在会话、流式、上下文、推理、工具、安全和高可用。

Design an AI chatbot

更偏通用聊天后端。重点是多轮状态、消息一致性、SSE/WebSocket、模型 API 封装、限流和用户反馈。

Design realtime / Voice ChatGPT

更偏低延迟交互。重点是音频流、打断、会话粘性、端到端延迟、抖动丢包、回退到文本和实时安全。

Design ChatGPT API / Responses

更偏开发者平台。重点是响应生命周期、stream event、工具 schema、幂等、限流、计费、版本兼容和审计。

Design LLM serving / inference platform

如果面试官强调 GPU、token 吞吐、低延迟、模型路由或自建推理,主线不是聊天产品,而是 admission control、token queue、prefill/decode、KV cache、continuous batching、模型灰度和成本隔离。

Design enterprise ChatGPT

更偏企业知识、权限和治理。重点是 RAG、Apps(原 Connectors)、租户隔离、SSO、管理员策略、审计、数据保留、数据驻留和默认不用于训练的企业/API 数据边界。

Design ChatGPT Apps / connected tools

更偏把外部系统接进 ChatGPT。重点是 OAuth/MCP、workspace admin policy、read/write action approvals、最小权限、引用、tool trace 和 prompt injection 防护。

Design ChatGPT Search / RAG

更偏检索增强。重点是网页和文件召回、重排、引用、新鲜度、权限过滤、删除撤权、幻觉控制和质量评测。

Design multimodal ChatGPT

更偏多模态平台。重点是图片、语音、文件、生成产物、媒体存储、异步处理、内容安全和不同模型的路由。

Design workspace and proactive ChatGPT

更偏真实 ChatGPT 工作台。重点是 Projects、Memory、Tasks、Pulse、Apps、通知、权限和后台任务调度;Pulse 要按需要 Memory 的 proactive research 预览能力处理。

Design ChatGPT agent

更偏长任务编排。必须讲浏览器、终端、代码执行、连接器、人类确认、可中断、恢复、任务审计和 prompt injection。

Design Code Interpreter

更偏沙箱执行。必须讲容器、文件生命周期、资源限额、网络限制、产物回传、超时、隔离和恶意代码防护。

Design Canvas

更偏 AI 辅助 artifact 编辑。必须讲文档/代码 artifact、版本、局部选区、补丁、inline comment、预览、回滚和冲突处理,不要默认设计多人协同编辑系统。

先问什么 候选人要确认 为什么重要
面试官要哪条主线 产品聊天、API、企业 RAG、LLM serving、Realtime、Agent、Canvas、Code Interpreter 还是 proactive workspace 决定 45 分钟深挖模块,避免把 GPU serving 题讲成普通 CRUD 聊天题。
交互实时性 文本流式、实时语音、异步任务、后台研究、API batch/worker 决定 SSE/WebSocket/WebRTC、队列、取消、断线恢复和通知模型。
知识与动作边界 只读问答、用户文件、企业 Apps、Memory、联网搜索、写操作工具 决定 ACL、引用、撤权删除、human approval 和 prompt injection 防线。
成功指标 TTFT、TPOT、TTA、可用性、groundedness、citation coverage、cost/turn、audit completeness 初学者要知道系统设计不是“能回答”就够,而是延迟、正确性、安全和成本同时达标。
非目标 是否要训练基础模型、是否要复刻 OpenAI 内部私有架构 避免虚构私有实现;除非明确要求,默认设计 serving 和产品后端,不设计 foundation model training。
产品边界 消费级 ChatGPT、企业版 ChatGPT,还是 API 平台 消费级重体验和成本;企业版重权限、审计、数据驻留;API 平台重开发者契约和隔离。
数据与合规边界 是否启用文件、Memory/Project memory、Apps、Search、Pulse;数据能否训练/评测 Pulse 是需要 Memory 的主动研究预览能力;Apps 是 Connectors 后的统一产品入口。这些选择会决定存储、权限、审计、PII、区域合规、prompt injection 防护和后台任务风险。
模型来源 外部模型 API 还是自建 GPU serving 如果外部 API,重点放在会话、上下文、安全和可靠性;如果自建 serving,必须深入 GPU 调度。
MVP 范围 先做 chat + streaming + history + context + safety Agent、Canvas、Code Interpreter、语音和图片都可以作为扩展,不要一开场把 45 分钟讲散。
高级能力 是否必须覆盖 RAG、Agent、Canvas、Code Interpreter 面试官如果指定某个子题,就把主架构压缩,时间留给该子系统的状态、权限和故障处理。
规模和 SLA DAU、峰值请求、活跃流、TTFT、TPOT、可用性、区域合规 ChatGPT 类系统的瓶颈通常不是 HTTP QPS,而是 token 吞吐、KV cache、长连接和高成本工具。
时间 输出 高分信号
0-5 分钟 澄清题型、用户、入口、数据边界、是否自建 serving 输出一句主线选择:我先设计 P0 文本聊天,再按你指定的方向深挖。
5-10 分钟 P0 功能、规模、SLO、成本约束 把 DAU/QPS 转成活跃流、token 吞吐、TTFT/TPOT、队列和成本,而不是只报 HTTP QPS。
10-18 分钟 画主架构:client、gateway、chat plane、storage、model/tool plane、observability 主图要让后续每个追问都有落点:状态在哪、流怎么回、失败怎么恢复、事件怎么观测。
18-33 分钟 按题型深挖:RAG / GPU serving / Realtime / Agent / Code / Canvas / API 不要平均展开所有高级功能;选择一个模块讲状态机、权限、容量和故障路径。
33-40 分钟 可靠性、安全、权限、降级、成本 系统设计高分来自 tradeoff:错了怎么止损、慢了怎么降级、贵了怎么限额、危险动作怎么确认。
40-45 分钟 总结 tradeoff,补遗漏,说明后续扩展 用一句话回到题目:P0 已闭环,指定深挖已展开,剩余能力可以沿同一能力注册表扩展。
Scope and timebox
Scope=P0Chat+CaskedCasked{Search/RAG,Voice,Multimodal,Apps,Agent,Canvas,Code,Tasks/Pulse}45min=5clarify+5req/scale+8architecture+15deep dive+7risks/tradeoff+5wrap up\begin{aligned} \mathrm{Scope} &= \mathrm{P0Chat}+C_{\mathrm{asked}}\\ C_{\mathrm{asked}} &\subseteq \{\mathrm{Search/RAG},\mathrm{Voice},\mathrm{Multimodal},\mathrm{Apps},\mathrm{Agent},\mathrm{Canvas},\mathrm{Code},\mathrm{Tasks/Pulse}\}\\ 45\mathrm{min} &= 5_{\mathrm{clarify}}+5_{\mathrm{req/scale}}+8_{\mathrm{architecture}}+15_{\mathrm{deep\ dive}}+7_{\mathrm{risks/tradeoff}}+5_{\mathrm{wrap\ up}} \end{aligned}

2. 需求和规模

功能需求说完整,非功能需求说出取舍

好答案要先把用户体验和平台约束讲清楚。ChatGPT 的难点来自两个方向同时成立: 用户感觉它是实时聊天,系统内部却是昂贵、状态化、受安全约束的 GPU 工作流。

基础聊天

登录、会话列表、创建消息、编辑消息、停止生成、重新生成、分享、删除、归档、用户反馈。

实时体验

首 token 尽快出现,后续 token 稳定到达。客户端能取消、重连、展示部分结果并恢复生成状态。

智能能力

模型路由、长上下文、记忆、文件问答 / 数据分析、RAG、联网搜索、工具调用、结构化输出、图像和语音。

工作流能力

Projects、Tasks/Pulse、Agent 长任务、Apps(含 Connectors / synced connectors)、虚拟浏览器、终端、代码执行、Canvas artifact 和可下载产物。

平台能力

配额、计费、灰度、AB 实验、SSO/SCIM/RBAC、workspace policy、工具开关、管理员审计、数据驻留、数据删除、retention/ZDR 和默认不训练。

安全能力

输入安全、输出安全、prompt injection 防御、工具权限、敏感动作确认、PII 脱敏和红队评测。

优先级 覆盖范围 面试取舍
P0 核心聊天 登录、会话、消息、流式生成、停止、重试、上下文、安全、配额和计费 这是任何问法都要先保证的骨架;没有它,后面的 Agent 和 Canvas 都没有状态承载。
P1 知识和多模态 Files/Data Analysis、RAG、网页搜索、记忆、Projects、图片理解、语音输入输出 这些能力提升真实产品贴合度,但要把权限、索引、引用和延迟说清楚。
P2 工作流平台 Agent、Tasks/Pulse、Apps/Connectors、Canvas、Code Executor、GPTs / GPT Store P2 能展示深度,但面试中要按追问选择一两个钻透,不能把所有扩展平均展开。
非功能需求 TTFT/TPOT、stream recovery、event durability、GPU queue wait、async deadline、cost/turn、audit completeness、tenant isolation 非功能需求不能停在名词,要变成 SLI/SLO、采集事件、错误预算、降级动作和回滚开关。

初学者最容易漏的是“功能需求不是列功能名”。面试里每说一个能力,都要顺手补上四件事: 用户看到什么、后端必须保证什么、权限和生命周期边界是什么、过载或依赖失败时怎样降级。

功能域 用户可见能力 后端必须承诺 权限 / 生命周期 降级边界
P0 Chat 登录、会话列表、新建消息、编辑、停止、重试、分享、删除、历史搜索和多端同步。 message/generation 状态机、幂等键、上下文构建、安全检查、配额计费、response event checkpoint 和可恢复 stream。 conversation、message、generation、share link 都带 tenant_id、owner、visibility、retention_policy 和 delete tombstone。 先保住纯文本 chat;历史搜索、分享预览和非关键 metadata 可延迟或只读。
Streaming 首 token 尽快出现;断线后能继续看到已生成内容;用户可以取消并确认生成是否结束。 SSE/WebSocket relay、response_id + seq、durable checkpoint、Last-Event-ID/游标恢复、取消时释放 GPU slot 和 KV cache。 客户端收到的 delta 必须能被 replay;不能把未持久化 token 当作已完成回答。 过载时排队、降模型、缩短 max_tokens;stream relay 异常时降级为轮询最终答案。
Files / Data Analysis / Code 上传 PDF、表格、图片和代码文件,做数据分析、图表、代码执行和产物下载。 文件解析/OCR/索引、对象存储、沙箱容器、资源限额、artifact store、病毒扫描、PII/DLP 扫描和下载签名。 source_file_id、container_file_id、artifact_id 与 conversation/project ACL 绑定;容器过期后不可隐式恢复。 大文件排队解析;不支持类型只做摘要;沙箱过载时暂停运行代码但保留聊天主链路。
RAG / Search / Apps 搜索网页或企业数据,回答带引用;授权外部应用后可读取或执行受控动作。 query-time ACL filter、source citation、OAuth scope、sync freshness、write action confirmation 和 prompt injection 防护。 外部内容进入 untrusted source block;写操作、跨域导出和敏感读取必须审计。 连接器失效时降级为无连接器回答;引用不足时 no-answer 或请求更多权限。
Memory / Projects 记住偏好;项目内文件、指令和聊天隔离;共享项目不泄露成员个人 memory。 saved memory 与 chat history 分层、source trace、delete propagation、project-only namespace 和移动/共享后的索引失效。 Temporary Chat 不读写 account memory;shared project 强制 project-only 语义。 memory 写入失败时不阻塞 P0 chat;读取不确定时显式忽略或要求用户确认。
Agent / Canvas 长任务可中断、接管和恢复;Canvas 支持文章/代码 artifact 的局部编辑、预览、版本恢复。 Agent checkpoint、human approval、tool audit、artifact version、patch/rebase/rollback、preview sandbox 和风险动作确认。 模型提出动作,orchestrator 执行动作;artifact 版本不可变,外部副作用必须有审批证据。 高风险动作转人工确认;工具故障时保留计划和 checkpoint;Canvas patch 冲突时要求用户选择。
Tasks / Pulse / Deep research 定时任务离线执行、通知结果;Pulse 做每日主动研究;Deep research 生成带引用报告。 scheduler、deadline、retry/backoff、dedupe、通知、per-user budget、长任务 checkpoint 和 best-effort research 降级。 Tasks 是用户显式创建任务,不能静默跳过;Pulse 依赖 Memory 且 connected apps 默认关闭,需 opt-in。 过载时降低研究深度、延后低优先级任务、暂停新 Agent/Pulse/Deep research,但发送 late/failure 信号。
Voice / Images 语音对话可打断;图片可理解、生成和编辑;弱网下能保持明确状态。 realtime session、ephemeral token、VAD/ASR/TTS、media object store、media safety、转写记录和弱网恢复。 音视频训练选择、转写保留、图片安全策略和下载权限独立于普通文本消息。 语音链路异常时退回文本;图片生成排队;媒体上传失败不影响已有会话。
Enterprise / Governance 管理员配置策略、身份同步、审计导出、数据驻留、保留策略和工具开关。 SSO/SCIM/RBAC、workspace policy、tenant_id everywhere、Compliance API/audit export、retention/ZDR、data residency 和默认不训练。 管理员策略高于个人设置;所有存储、索引、缓存、日志和 trace 都必须有租户与保留策略。 策略服务不确定时 fail closed;审计导出走异步任务;跨区依赖异常时禁用不合规路径。

容量估算前先定义术语:DAU 是每日活跃用户,QPS 是每秒请求数,token 是模型读写的文本单位, TTFT 是首 token 延迟,TPOT 是后续每 token 的间隔。ChatGPT 类系统要把请求数继续换算成 活跃流、token 吞吐、prefill/decode GPU 池、KV cache 压力、事件写入量和后台任务。 白话理解:prefill 是模型一次性读完输入上下文并建立注意力状态,decode 是之后一个 token 一个 token 地生成回答;KV cache 是为了让后续 token 复用前面注意力结果而常驻显存的 K/V 张量, 所以长上下文、并发流和长输出会同时放大显存和调度压力。

示例容量漏斗 图内数字只用于面试推导,真实值必须按地区、模型、tier、上下文长度和功能开关重新压测。
01
10M DAU

先定义人群和计费层级。

02
100M turns/day

每人每天 10 turn 的示例。

03
5.8k/s peak turns/s

平均值乘峰值系数 5。

04
116k+ active streams

20s 生成时长下的连接面。

05
5.8M in / 2.9M out token/s

输入压 prefill,输出压 decode。

06
prefill + decode GPU groups

按实测吞吐和目标水位拆池。

07
Σ active seq KV HBM

显存由并发序列和上下文长度驱动。

08
checkpoint + audit event writes

SSE delta、checkpoint、主库和 trace 分面。

09
Tasks / Pulse / Research async jobs

按 deadline、budget 和 retry 估。

Capacity formula
turnsday=DAUturnsuser/dayλraw=turnsday86400peakFactorλaccepted=min(λraw,Cadmission)Qentry=max(0,λrawλaccepted)streamsactive=λacceptedE[Tstream]Din=λacceptedE[inputTokens]Dout=λacceptedE[outputTokens]NprefillDinrprefill/grouputargetNdecodeDoutrdecode/grouputargetWevents=λacceptedebase+Doutkcheckpoint+Wtool+Waudit/trace\begin{aligned} \mathrm{turns}_{day} &= \mathrm{DAU}\cdot \mathrm{turns}_{user/day}\\ \lambda_{\mathrm{raw}} &= \frac{\mathrm{turns}_{day}}{86400}\cdot \mathrm{peakFactor}\\ \lambda_{\mathrm{accepted}} &= \min(\lambda_{\mathrm{raw}}, C_{\mathrm{admission}})\\ Q_{\mathrm{entry}} &= \max(0,\lambda_{\mathrm{raw}}-\lambda_{\mathrm{accepted}})\\ \mathrm{streams}_{active} &= \lambda_{\mathrm{accepted}}\cdot \mathbb{E}[T_{\mathrm{stream}}]\\ D_{\mathrm{in}} &= \lambda_{\mathrm{accepted}}\cdot \mathbb{E}[\mathrm{inputTokens}]\\ D_{\mathrm{out}} &= \lambda_{\mathrm{accepted}}\cdot \mathbb{E}[\mathrm{outputTokens}]\\ N_{\mathrm{prefill}} &\ge \frac{D_{\mathrm{in}}}{r_{\mathrm{prefill/group}}\cdot u_{\mathrm{target}}}\\ N_{\mathrm{decode}} &\ge \frac{D_{\mathrm{out}}}{r_{\mathrm{decode/group}}\cdot u_{\mathrm{target}}}\\ W_{\mathrm{events}} &= \lambda_{\mathrm{accepted}}\cdot e_{\mathrm{base}}+\frac{D_{\mathrm{out}}}{k_{\mathrm{checkpoint}}}+W_{\mathrm{tool}}+W_{\mathrm{audit/trace}} \end{aligned}
变量 含义 单位 / 注意
λ_raw / λ_accepted / Q_entry 原始峰值到达、admission control 后实际接入、入口排队或被限流负载。 turn/s;GPU 和事件写入按 accepted 估,入口队列和限流按 raw - accepted 估。
D_in / D_out 输入 token/s 与输出 token/s。 input 主要压 prefill;output 主要压 decode、KV、stream。
r_prefill/group / r_decode/group 目标模型在目标硬件、目标 batch 策略下的实测吞吐。 token/s/group;必须来自压测,不要直接套公开数字。
u_target 目标利用率水位。 常留突发余量;水位过高会牺牲 TTFT/TPOT。
k_checkpoint 每隔多少 output token 写一次可恢复 checkpoint。 checkpoint 不等于每个 SSE delta 入主库。
W_tool / W_audit/trace 工具事件、审计事件和 trace 事件写入速率。 events/s;通常写事件流和分析存储,而不是同步阻塞主链路。
假设 推导 面试意义
DAU 1000 万 每日 1 亿条用户消息 这是面试示例假设,不是公开产品承诺;先声明用户层级、地区、模型 mix 和是否包含 Agent/Voice/Tasks。
峰值请求约 5785/s 平均 QPS 约 1157/s,再乘峰值系数 5 QPS 是每秒请求数;它只解释入口压力,不能代表 GPU serving 压力。
峰值活跃流 平均生成 20s 时约 116k;长尾 50s 时约 289k 活跃流约等于峰值请求/s 乘生成时长;Stream Relay 要按十万级长连接分区扩容。
单请求 token 假设 平均输入 1000 token,平均输出 500 token 必须同时给 p50/p95/p99;RAG、Projects、Memory、Apps 和 Agent 会显著拉长 input token 和上下文驻留时间。
token 吞吐 本示例默认 C_admission >= λ_raw,所以 λ_accepted = 5785/s;D_in = λ_accepted * 1000 = 5.8M token/s;D_out = λ_accepted * 500 = 2.9M token/s 如果过载限流,GPU 只按 λ_accepted 估,入口排队和 rejected/queued turn 按 λ_raw - λ_accepted 估。
prefill sizing prefill groups >= input token/s / measured prefill token/s/group / target utilization prefill 受输入长度、batching、chunked prefill、prompt cache 和模型大小影响;必须用目标硬件的压测 profile,而不是套固定 GPU 数。
decode sizing decode groups >= output token/s / measured output token/s/group / target utilization decode 受并发序列数、TPOT/ITL、KV cache 命中和内存带宽影响;交互请求和异步研究最好拆队列。
KV cache 压力 KV bytes/worker ≈ 2 * layers * kv_heads * head_dim * bytes_per_elem * Σ seq_len_i Σ seq_len_i 只统计同一 GPU worker 当前 batch;还要乘 tensor/pipeline parallel 拓扑、paged KV 碎片、allocator overhead 和长上下文留存。
流式带宽 active_streams * 每流 bytes/s,再加心跳和重连风暴余量 SSE/WebSocket 连接层要和 GPU 池分开扩容,避免断线重连拖垮入口。
存储和事件增长 messages、response_events、audit、trace、files、Kafka events 按天和租户分区 回答不是一个最终字符串;但 SSE delta、durable checkpoint、主库 message、Kafka audit/trace 是不同写入面,不能混成一个表。
事件量闭环 accepted turns/day 约 1 亿时,约 2 亿 messages/day;50B output token/day;每 20 output token checkpoint 约 2.5B events/day 若 λ_accepted 低于原始峰值,checkpoint 峰值按 D_out / k_checkpoint 重算;主库只存 message/generation 和关键 checkpoint,细粒度 trace 走事件流。
Tasks 异步负载 按 active task 上限、触发频率、deadline、retry/backoff、late/failure notification 和结果回写事件估 Tasks 是用户显式创建的任务,不能静默跳过;过载时排队、重试、迟到告警、失败通知或让用户暂停/删除。
Pulse / Deep research 异步负载 Pulse 按 Pro eligible users、每日 research fanout、卡片刷新、入口展示和 per-user budget 估;Deep research 按长任务 checkpoint 估 Pulse 是 preview/best-effort daily refresh,可按预算延迟、不生成当天卡片或降低研究深度;这里不等同于通知权限。
TTFT / TPOT 示例 SLO:P95 TTFT 1 到 3 秒;P95 TPOT 20 到 100 ms/token TTFT/TPOT 必须标成示例目标,并按模型、地区、tier、上下文长度和工具开关校准;面试重点是拆开优化。

一条消息如何变成资源账单

User message turn accepted

鉴权、幂等、配额和 user message durable。

Context Builder sources

Memory、Projects、RAG、Apps 先过权限再进入上下文。

Token Budget input cap

上下文截断、引用选择和成本预算在这里发生。

Model Router model + pool

按 tier、能力、风险、预算和健康度选择模型。

GPU Queue prefill/decode

排队、batching、chunked prefill 和 KV residency。

Stream Relay response_id + seq

把持久化事件转成 SSE/WebSocket 增量。

Response Events checkpoint

用于重放、计费、评估采样和故障恢复。

Tool / Agent jobs sandbox + API

Apps、Code、Agent 产生外部调用、沙箱和异步预算。

Billing / Audit ledger + trace

把 token、GPU、tool、trace 汇总成可审计账单。

低延迟 TTFT / TPOT
低成本 cost / turn
强安全治理 policy / audit
admission control model router / feature flags / kill switch
  • 降模型、缩上下文、减少 RAG 文档。
  • 暂停 Agent、Pulse、Deep research 新任务。
  • 高风险 Apps/工具动作强制确认或 fail closed。
目标 SLI 怎么量 示例 SLO / 边界 主要风险 设计动作
首 token 体验 P95/P99 TTFT,按 model、region、tier、tool_on/off 拆分。 示例目标:P95 1-3s;不是 OpenAI 承诺,面试中必须按模型和地区校准。 prefill 长、GPU queue 高、RAG/Apps 慢、stream relay 拥塞。 admission control、prompt cache、chunked prefill、减少检索文档、降模型或显示排队状态。
生成平滑度 TPOT / ITL、chunk gap、用户侧 stalled seconds。 示例目标:P95 20-100 ms/token;长输出和高并发下按模型 mix 重算。 decode 饱和、KV cache 碎片、客户端背压、连接重试风暴。 decode 池扩容、paged KV、batch 调度、流控、客户端缓冲和心跳。
good turn 成功率 28 天 good_turn / accepted_turn;good_turn = 消息持久、首 token 达标、最终/取消状态可重放。 示例目标:99.9%,错误预算烧穿后限制高成本扩展。 依赖超时、安全服务不确定、模型池故障、数据库写失败。 保 P0 chat,关闭新 Agent/Pulse/Deep research,降级工具,切只读历史。
流恢复 不可恢复断流率、P99 reconnect recovery、duplicate/missing seq。 示例目标:不可恢复断流 <0.5%,P99 恢复 <5s。 relay 无状态、checkpoint 太稀、客户端游标丢失。 response_id + seq、durable checkpoint、Last-Event-ID、幂等取消和 replay API。
事件耐久 user message durable latency、response checkpoint lag、outbox publish lag、RPO。 示例目标:主消息 RPO 接近 0;trace/audit 可异步但不能丢关键安全事件。 把 SSE delta 当主库写、outbox 与 message 不一致、Kafka backlog。 主库 message/generation 事务,response_events 分区写,audit/trace 独立 topic 和补偿重放。
GPU 队列 prefill queue wait、decode queue wait、GPU utilization、KV eviction rate。 示例目标:按池水位设 admission threshold,例如 70% 目标利用率留突发余量。 单池混跑长短请求、上下文暴涨、低优先级任务挤占交互请求。 交互/异步隔离,prefill/decode 拆池,model/tier queue,暂停后台任务。
异步任务 deadline miss、retry exhausted、late/failure notification、checkpoint age。 Tasks 不可静默跳过;Pulse/Deep research 可 best-effort 但要有 freshness 指标。 scheduler fanout、高成本研究、外部应用限流。 per-user budget、priority queue、backoff、late 通知、减少 fanout 或降低研究深度。
成本和治理 cost/turn、GPU seconds/turn、sandbox minutes、connector sync cost、ledger drift。 示例目标:按 tenant/model/tool/surface 归因,超预算前触发 guardrail。 长上下文、RAG fanout、Agent 循环、代码执行和媒体生成放大成本。 quota、max_tokens、便宜模型、prefix cache、工具预算、预算熔断和用户可见限额。
安全合规 tenant isolation violation、ACL unknown rate、audit completeness、delete propagation lag。 隔离违规目标必须是 0;策略未知按 fail closed 处理。 RAG 权限穿透、memory 泄露、共享项目读个人上下文、审计缺字段。 tenant_id everywhere、query-time ACL、policy decision audit、tombstone 优先、数据驻留路由。
目标 设计基线 降级边界
用户可见 SLO 28 天 Chat good turn 成功率 99.9%;P95 TTFT 1-3s;不可恢复断流率 < 0.5%;P99 reconnect recovery < 5s good turn = 鉴权通过、用户消息 durable、首 token 达标、最终/取消状态可重放;错误预算烧穿时先降级和限流。
持久化与恢复 user message + generation + outbox 同事务;response_events 先持久化再发送;conversation store RPO 接近 0 用户看见的 delta 必须能重放;单区故障时 RTO 用分钟级恢复主链路,异步任务可稍后补偿。
峰值过载降级 先排队和限流,再降级模型/减少 RAG 文档/关闭高成本工具;最后暂停 Agent、Pulse、Deep research 新任务 降级顺序按用户可见价值排序:保住 P0 chat,再保护付费层级和安全门禁。
异步任务 SLO Tasks 看 trigger deadline、retry exhausted、late/failure notification;Pulse 看 preview daily refresh、freshness、保存为 chat 成功率 Tasks 不能被静默跳过;Pulse/Deep research 可按预算和安全风险延迟、降级或停止新研究。
成本水位 按 tenant、model、tool、GPU pool 归因;超过预算时切便宜模型、降低 max_tokens、延后低优先级异步研究或触发 quota 成本不是事后账单字段,它会进入 router、admission control、batching 和 canary 决策。

3. 真实 ChatGPT 产品面

先贴合真实产品,再抽象成系统模块

真实 ChatGPT 不是一个单纯聊天框。它的页面里有聊天历史、分支新聊天、群聊、搜索、图片、 Apps(含原 Connectors)、Deep research、Voice、文件、Projects、Memory、Tasks、Pulse、Canvas 和 Agent mode。 系统设计时要把它看成一个能力外壳:统一 composer 收集意图,后端通过 capability registry 决定 进入普通聊天、RAG、异步任务、agent runtime、代码执行器或 artifact 编辑流。

Chat shell

新建聊天、历史搜索、编辑消息、重试、分享、归档、删除、重命名、从某条回复分支新聊天和多设备同步。

Group chats

群聊是独立会话空间,通过邀请链接加入;个人 memory/custom instructions 不进入群聊,部分功能在群聊中不可用。

Unified composer

一个输入框后面挂模型选择、工具下拉、文件上传、图片、语音、网页搜索、Canvas 和 Agent mode。

Search

Search 是实时信息入口,涉及 query rewrite、位置相关结果、来源面板、引用、新鲜度和搜索降级。

Projects

项目级指令、文件、项目内聊天、共享项目和 memory_mode = default | project_only;共享后强制 project-only,不能访问成员个人 memory/custom instructions。

Memory

账号级 saved memory 支持查看、禁用、删除和来源解释;project memory 更像由项目 chats/files/instructions 与 default/project_only 策略派生出的上下文。

Files and data

文件上传先进入对象存储、类型检查、解析、索引和 ACL;它不等于一定进入代码执行。

Data Analysis

Data Analysis 是 ChatGPT 内的交互式分析体验,常用 Python/Jupyter 沙箱读文件、做表格处理、画图和生成下载产物。

Code Executor

Code Executor 是后端运行代码的受控能力,要建模容器、文件挂载、资源限额、日志、artifact 和安全扫描。

Voice and images

语音是低延迟音频输入输出链路;图片既可作为输入理解,也可触发生成和编辑工作流。

Deep research

多源检索、长时间阅读、引用回链、报告生成和中间状态持久化,比普通 web search 更像异步任务。

Canvas

Canvas 是文章/代码 artifact 的独立编辑面,核心是版本、局部 patch、预览、恢复和导出。

Agent mode

Agent 是长任务运行时,可用浏览器、终端、连接应用和可中断 checkpoint;危险动作需要确认。

Tasks

Tasks 是用户创建的一次性/周期性自动 prompt,离线执行后通过 push/email 告知结果;需要 active task 上限、pause/delete、通知权限和 unsupported-tool gate。

Pulse

Pulse 是 Pro 用户在 Web/iOS/Android 上的每日主动研究预览体验,依赖 Memory;connected apps 默认关闭,只有用户 opt-in 且允许 proactive activity 后才参与研究信号。

Apps (含原 Connectors)

Apps 是统一入口,包含交互式界面、file search/deep research/sync 数据访问和 write actions;写操作需确认,管理员可控 RBAC、scope、同步和审计。

GPTs / GPT Store

自定义指令、知识文件、actions、Canvas 能力、发布权限、版本、审核和滥用治理组成 GPT Builder 平台。

入口 Chat shell + Unified composer

主承载面:会话历史、Temporary Chat、群聊、文字/文件/图片/语音输入,以及 capability_request 路由。

Context sources Projects / Memory / Files / Apps

先做 ACL、租户、保留策略和来源标注,再进入上下文窗口。

Knowledge plane Search / Deep research / RAG

检索、引用、新鲜度、长任务 checkpoint、来源展示和失败降级。

Runtime plane Agent / Code / Data Analysis

工具循环、沙箱、浏览器/终端、确认门、资源限额和审计事件。

Artifact plane Canvas / GPTs / Shared artifacts

artifact 版本、协同编辑、知识文件、actions、发布和回滚治理。

Async Tasks / Pulse / Notifications

离线调度、主动研究、预算、deadline、retry、通知和保存为 chat。

Multimodal Voice / Images / Realtime

VAD/ASR/TTS、媒体对象、图片安全、弱网恢复和转写保留。

Governance Enterprise / Admin / Audit

SSO/SCIM、RBAC、data residency、retention/ZDR、Compliance API 和策略开关。

下面用一张矩阵把产品入口先落到系统对象上:状态是什么、权限边界在哪里、生命周期如何结束、会影响哪些后端平面。 后续章节会深挖架构、RAG、Agent、Canvas 和 Code Executor,但这里先保证产品面不会漏。

产品面 状态与权限 数据生命周期 后端影响
Chat shell conversation active / archived / deleted;message created / edited / deleted;generation queued / streaming / completed / cancelled / failed 普通聊天进入历史;用户可改名、分享、删除、从某条回复分支新聊天;删除要传播到消息、response_events、索引、缓存和反馈样本引用。 Conversation Service 是产品壳的根状态机;所有后续能力都要挂到 conversation_id、message_id、response_id、tenant/user 和 policy_version。
Group chats group active / invite_link_active / member_joined / member_left / member_removed;auto-response / mention-only 群聊与个人会话分离;通过邀请链接加入,链接可 reset/delete;群聊支持 1 到 20 人;群成员可看到历史,个人 memory 和 account custom instructions 不进入群聊。 需要 group_conversation、membership、invite token、group instructions、per-member visibility、通知、用量归属和群聊禁用功能 gate;部分工具如 Canvas、Data Analysis、Deep Research、Tasks、Apps、Agent 不在群聊中启用。
Unified composer mode = chat / search / file / voice / image / canvas / agent;model、tool、file、project、task intent 同时存在 用户只看到一个输入框,但每个附件、工具、模式和模型选择都会改变后端 plan;未支持组合要提前拦截。 Composer Resolver 将 UI 意图标准化为 capability_request,进入 capability registry、policy gate、quota、router 和状态机。
Search search_auto / search_forced / search_disabled;query rewritten / provider_called / citations_rendered / stale_or_failed Search 面向实时信息,结果可受位置、记忆、历史和查询意图影响;回答要展示来源面板、引用和时间新鲜度;失败时回落到非实时回答或说明无法搜索。 需要 search intent detector、query rewrite、provider adapter、location/privacy policy、source panel、freshness watermark、citation trace 和 provider quota。
Deep research planned / browsing / reading / synthesizing / cited_report_ready / failed / cancelled Deep research 是用户触发的长研究任务,通常跨多个来源阅读、保留研究计划和中间状态,最终生成带引用报告。 需要异步 run、checkpoint、retrieval fanout、citation ledger、source credibility、budget/deadline、resume/cancel 和结果保存为 chat/report。
Files uploaded / scanning / parsed / indexed / attached / deleted / expired 上传文件先进入对象存储、MIME/type 检查、病毒/PII 扫描、解析和索引;文件可属于 conversation、Project、GPT knowledge 或 Library。 文件是 source,不是执行器;必须记录 source_file_id、owner、ACL、retention、content_hash、parser_version、index_version 和 delete propagation。
Data Analysis analysis_requested / sandbox_allocated / code_running / chart_ready / artifact_ready / failed ChatGPT Data Analysis 更像交互式数据工作台,读取上传表格/文档,运行受控 Python/Jupyter,生成图表、摘要和下载产物。 需要会话级沙箱、文件挂载、资源限额、stdout/stderr 脱敏、artifact store、图表渲染和用户可下载结果的安全扫描。
Code Executor container pending / active / idle / expired;job queued / running / succeeded / failed / killed Code Executor 是可被 ChatGPT/Data Analysis/Canvas/Agent 调用的后端能力;容器和文件有显式生命周期,过期后不能隐式恢复。 Execution API 要注入 allowed_source_file_ids、network policy、CPU/memory/time limit、package policy、artifact scan 和审计记录。
Voice session_created / listening / speech_started / reasoning / speaking / interrupted / ended 语音模式强调低延迟、打断和转写;音频、转写、训练选择和保留策略与普通文本消息不同。 需要 realtime session、ephemeral token、VAD/ASR/TTS、WebRTC/WebSocket、jitter buffer、interrupt semantics、media safety 和弱网恢复。
Images image_uploaded / vision_context_ready / generation_queued / editing / generated / saved / deleted 图片既可以作为输入理解,也可触发生成和编辑;生成结果需要保存、管理、下载和安全策略。 需要 media object store、image safety、prompt/media provenance、generation queue、thumbnail、signed URL、EXIF/PII 处理和删除传播。
Apps (含原 Connectors) connected / synced / expired / disabled_by_admin;read action / write action pending_confirmed_executed Apps 统一承载第三方应用、连接器、同步知识源和可交互 UI;写操作需用户确认,企业管理员可控 scope、RBAC 和同步策略。 需要 OAuth/scope、connector sync、MCP/app schema registry、query-time ACL、write confirmation、audit export、prompt injection 防护和 stale-source 降级。
GPTs / GPT Store draft / private / shared / published / reviewed / removed;versioned instructions/actions/knowledge GPT Builder 将 instructions、knowledge、actions、capabilities、Canvas 等配置打包成可发布实体;发布后要审核、版本化和滥用治理。 需要 GPT manifest、knowledge files、action auth、schema versioning、review pipeline、owner policy、store ranking、abuse detection 和兼容回滚。
Agent planning / tool_call_pending / waiting_confirmation / running / checkpointed / user_takeover / done / failed Agent 是长任务运行时,可用浏览器、终端、Apps 和文件;高风险动作需要确认,用户可中断、接管和恢复。 需要 planner、tool orchestrator、browser/terminal isolation、risk scoring、human approval、checkpoint、trace、budget、kill switch 和 prompt injection guard。
Canvas artifact open / patch proposed / previewing / saved / restored / exported / conflicted Canvas 是独立 artifact 编辑面,支持文章/代码局部修改、版本恢复、预览和导出;它不是简单把聊天回复变长。 需要 artifact_version、patch/rebase/rollback、preview sandbox、diff store、conflict resolution、export pipeline 和 artifact-level permissions。
Projects active / shared / deleted;project 内 chats 可 archived / moved / deleted;owner、edit access、chat access 和组织管理员策略 memory_mode = default | project_only;共享后自动转 project_only 且不可回退;撤权和删除要传播到索引、对象存储、缓存和 memory 引用。 Context Builder 按 plan/workspace policy 解析 account memory 与 project namespace;共享项目不读取成员个人 memory/custom instructions。
Memory candidate / saved / disabled / deleted / source-visible;用户开关、workspace 开关、project-only memory Temporary Chat 不创建或引用 account-level saved memory;project memory 通过项目 chats/files/instructions 和 memory_mode 影响上下文。 Account memory write 必须有来源、置信度、可解释文本和撤销路径;project context 通过移动/删除源对象、权限和索引失效更新。
Tasks scheduled / running / succeeded / failed / paused / expired / deleted 用户创建一次性或周期性 prompt;最多 10 个 active tasks;可 edit/pause/delete;不支持 voice chats、file uploads、GPTs,含文件的 Project task 不能访问 project files。 Scheduler、dedupe key、checkpoint、retry/backoff、idempotent push/email notification、unsupported-tool gate 和 pause/delete 状态机是核心。
Pulse eligible / enabled / queued / researching / delivered / saved_as_chat / hidden_from_new_chats / expired 当前是 preview;Pro 用户可在 Web/iOS/Android 使用;必须开启 saved memories 和 reference chat history;connected apps 默认关闭且需 Allow proactive activity;卡片次日刷新,一天后删除,保存或互动后才进入 conversation history。 需要离线 planner、connector opt-in、per-user budget、freshness watermark、citation trace、卡片刷新节奏和 data controls 继承。
容易混淆的边界 正确理解 后端设计影响
Temporary Chat vs 普通聊天 Temporary Chat 不进入历史,不创建或引用 saved memory;仍可能为安全目的短期保留。 后端要让 conversation retention、memory write、history index 和 eval sampling 都读同一个 retention_policy,不能只在前端隐藏。
Account memory vs Project memory Account saved memory 是用户级偏好;project context 来自项目 chats/files/instructions 和 project-only 策略;共享项目不读取成员个人 memory。 Context Builder 必须先解析 principal、project、sharing state 和 memory_mode,再决定可注入上下文。
Tasks vs Pulse vs Deep research Tasks 是用户显式创建的一次性/周期性 prompt;Pulse 是依赖 Memory 的主动研究预览;Deep research 是用户触发的长研究报告。 三者都可能离线运行,但 SLO、通知、预算、保存路径和失败语义不同,不能共用一个无状态 cron worker。
Apps vs 旧 Connectors Apps 是统一产品入口,包含直接连接、同步知识源、交互 UI 和写动作;旧 Connectors 更像数据接入子集。 设计时用 app/connector registry、OAuth scope、sync freshness、write confirmation 和 admin policy 统一抽象。
File upload vs Data Analysis vs Code Executor File upload 是 source lifecycle;Data Analysis 是用户可见分析体验;Code Executor 是运行代码的底层沙箱能力。 文件权限、容器权限和 artifact 权限要分开建模;不是每个文件问答都需要启动 Python,也不是每个 code job 都能访问所有文件。
Agent vs Code Executor / Data Analysis Agent 是多步工具编排和长任务;Code/Data 是受控计算工具,通常只处理当前任务的文件和代码。 Agent 需要 planner、checkpoint、浏览器/终端隔离、用户确认和接管;代码沙箱更关注容器资源、文件挂载和 artifact 安全。
Canvas artifact vs 聊天回复 Canvas artifact 是可版本化、可 patch、可预览、可导出的对象;普通 assistant message 是 conversation 事件的一部分。 需要 artifact_version、diff、preview sandbox 和 export pipeline;不要把 Canvas 当成 message 表里的一个长字符串。
Group chats vs 1:1 chats Group chats 与个人聊天分离,ChatGPT 不看个人 memory/custom instructions;群聊有成员、邀请链接、群设置和不支持功能列表。 要建 membership、invite link、group instructions、per-member visibility、usage attribution、teen/safety mode 和 unsupported-tool gate。

4. 总架构

白板上先画主链路,再挂侧平面

这一章的主图不是 OpenAI 官方公开架构,而是面试中可辩护的系统设计推断:先把 P0 聊天链路从入口画到流式返回, 再把 Projects、Memory、Search、Apps、Agent、Canvas、Code Executor、Tasks、Pulse 和企业治理挂到侧平面。 这样既能回答传统高并发后端追问,也能自然进入 GPU serving、工具编排和数据治理深挖。

ChatGPT 端到端架构手绘图:在线请求路径和数据、知识、工具、异步、控制侧平面
主链路服务延迟敏感请求;数据、知识、工具、异步和控制平面被拆开扩缩容、失败和审计。

面试官最关心的不是盒子多,而是每个盒子之间的输入输出、状态归属和失败语义。下表把一条普通消息拆成十步: 前三步保证“请求被合法、唯一、可恢复地接收”,中间三步决定“能不能把正确上下文安全地送进正确模型”, 后四步保证“生成、流式返回、账本和观测都能在失败后复盘”。其中 Model Router、Usage Ledger、 Multi-region Failover 等名称是本题的系统设计抽象,用于表达职责边界,不代表官方公开内部组件名。

步骤 输入 输出 关键状态 失败语义
1. Client 用户输入、文件/图片/语音、model/tool/project 选择、client_request_id。 带身份上下文、设备信息、幂等键和模式标记的 request envelope。 本地 draft、上传进度、stream cursor、取消按钮状态。 弱网或刷新后可用 client_request_id 重试;未确认服务端接收前不展示完成。
2. Edge / Gateway HTTPS / SSE / WebSocket / WebRTC 入口流量。 通过 TLS、WAF、Auth、Rate Limit、plan quota、request size check 的规范化请求。 request_id、principal、tenant、plan、region、feature flags、rate-limit counters。 鉴权失败 401/403;限流 429;不确定的 tenant/policy 直接 fail closed。
3. Conversation write 规范化请求和 client_request_id。 durable user message、generation/response row、outbox event。 conversation_id、message_id、response_id、generation state、idempotency key。 写主库失败就不能调用模型;重复请求返回同一 response_id,避免重复扣费和重复工具动作。
4. Context Builder 当前消息、历史窗口、Projects、Memory、RAG/Search/Apps/File metadata。 带 provenance、token budget、taint bit 和 citation candidates 的 model input。 context_snapshot_id、source spans、ACL version、memory/source tombstone version。 ACL unknown、source stale、delete tombstone 未确认时不注入;可降级为无 source 回答或要求重新授权。
5. Safety / Policy 用户请求、上下文、source blocks、tool plan 和 tenant policy。 allow / sanitize / confirm / refuse / fail_closed 决策。 policy_version、risk score、safety trace、redaction metadata。 策略服务不确定时 fail closed;高风险工具动作转确认而不是自动执行。
6. Model Router 能力需求、上下文长度、tier、成本预算、区域、GPU 健康、工具需求。 model_id、prompt/template version、inference pool、max_tokens、fallback plan。 router decision、experiment bucket、cost guardrail、model pin。 目标池过载时降模型、排队、缩上下文或关闭高成本扩展;旧会话可 pin 旧模型版本。
7. Inference model input、generation config、stream callback、cancel token。 token delta、tool call proposal、usage counters、finish reason。 queue state、prefill/decode batch、KV cache residency、GPU worker trace。 GPU 超时/抢占时生成 FAILED/TIMEOUT;取消要释放 slot 和 KV;不得写成成功终态。
8. Stream Relay 增量 token/tool events 和 response_id + seq。 SSE/WebSocket events、heartbeat、reconnect replay。 last_seq、stream cursor、backpressure、connection shard。 客户端断线后按 cursor 重放;relay 故障不应丢已持久化 checkpoint。
9. Persist / Usage response_events、final text、tool results、usage counters。 final message、billing ledger、audit/event topics、eval sampling candidates。 message final state、usage ledger row、outbox offsets、artifact references。 final commit 未成功前不能向用户确认完成;账本漂移进入补偿和告警。
10. Observability trace spans、logs、metrics、policy decisions、user feedback。 SLO good/bad event、burn-rate alert、debug replay、release/eval feedback。 root trace id、span links、model/tool versions、tenant-safe fields。 观测缺失不阻塞 P0 chat,但安全审计缺字段要阻断高风险工具和企业导出。

真实 ChatGPT 页面上的功能不是另一套系统,而是从主链路分叉出来的能力平面。判断一个设计是否成熟, 可以问五件事:它由什么触发,持有什么状态,权限边界在哪里,是同步阻塞还是异步 checkpoint, 以及依赖失败时用户会看到什么降级结果。

扩展平面 触发方式 状态 权限边界 同步 / 异步 降级
Projects / Memory 用户在项目内聊天、共享项目、开启/关闭 memory、Temporary Chat。 project_id、memory_mode、memory candidate/saved/deleted、source trace。 共享项目不读个人 memory/custom instructions;Temporary Chat 不读写 account memory。 同步进入 Context Builder;memory 写入异步候选化。 memory 读写失败不阻塞 P0;ACL 不确定时不注入项目文件或 memory。
RAG / Search / Apps 用户显式搜索、系统判定需要实时信息、连接外部应用或同步知识源。 query rewrite、search provider result、connector sync watermark、source span、citation ledger。 query-time ACL、OAuth scope、source block taint、write action confirmation。 普通 Search 可同步短路;sync connectors 和 Deep research 多为异步/半异步。 连接器 stale/403/429 时降级为无连接器回答、no-answer 或请求重新授权。
Voice / Realtime / Multimodal 语音会话、图片上传、图片生成/编辑、视频/实时输入。 realtime session、media object、transcript、VAD state、image generation job。 ephemeral token、media safety、音视频训练选择、对象存储签名 URL 和删除传播。 语音是实时双向通道;图片理解同步进入上下文,图片生成常异步排队。 语音弱网退回文本;图片生成排队;媒体扫描失败不注入上下文。
Agent / Tools / Code Agent mode、Data Analysis、Code Executor、Apps write action、浏览器/终端工具。 agent_run、tool_call、container/job、approval、checkpoint、artifact。 模型只提出动作,orchestrator 执行;高风险动作确认;沙箱和工具 scope 最小权限。 短工具可同步阻塞当前 turn;Agent 和代码长任务异步 checkpoint。 工具失败保留计划和 checkpoint;代码沙箱过载时暂停运行但保留聊天主链路。
Canvas / Artifact 用户打开 Canvas、编辑文章/代码、生成 patch、预览和导出。 artifact_id、artifact_version、patch、preview_run、export file。 artifact-level ACL、patch base version、preview sandbox、download scan。 编辑和预览可交互;导出和扫描可异步。 patch 冲突时 rebase 或询问用户;预览失败不破坏已保存版本。
Tasks / Pulse / Deep research 用户创建定时任务、Pulse 主动研究、Deep research 长报告。 schedule、run_id、deadline、research plan、card/report、notification state。 Tasks 是显式用户任务;Pulse 依赖 Memory 且 connected apps opt-in;研究引用必须可追溯。 异步 worker + checkpoint + notification。 按预算降低 fanout/深度、延后低优先级任务、发送 late/failure 通知。
Enterprise governance 企业 workspace、管理员策略、SSO/SCIM/RBAC、审计导出、数据驻留。 tenant policy、admin role、retention policy、data region、audit export job。 tenant_id everywhere;管理员策略高于个人设置;Business/API 默认不用于训练公开模型。 策略同步进请求路径;审计导出和删除传播异步。 策略/区域不确定时 fail closed;跨区依赖不可用时禁用不合规路径。

最后把架构按团队边界重新切一遍。优秀的系统设计答案会说明谁拥有 durable state、谁做同步 gate、 谁只做异步投递,以及哪些故障必须 fail closed。这样面试官继续追问数据库、缓存、消息队列、 GPU、Agent 或企业合规时,回答都能回到同一张职责地图。

Owner Durable state ACL / policy boundary Sync / async Degrade / fail-closed
Gateway / Edge 平台入口团队 短期 rate-limit counters、request log、region route。 Auth、tenant、plan、abuse/WAF、request size。 同步,必须在写 conversation 前完成。 限流、排队、降级入口;身份或租户不确定直接拒绝。
Conversation Plane Chat 状态团队 conversation、message、response/generation、idempotency、outbox。 owner、share/group membership、retention、delete tombstone。 用户消息和 generation 创建同步;索引和导出异步。 主库不可写时拒绝生成;历史搜索可只读或延迟。
Context / Knowledge Context 与检索团队 context_snapshot、source spans、vector index、connector watermark、citation ledger。 ACL、OAuth scope、project sharing、source taint、freshness。 主回答同步读取;索引、sync、research 异步。 source stale/ACL unknown 不注入;降级为无引用回答或 no-answer。
Safety / Policy 安全治理团队 policy decision、risk score、redaction、confirmation evidence。 system/developer/user/tool hierarchy、tenant policy、DLP、high-impact actions。 输入/工具/输出关键 gate 同步;红队/eval 异步。 安全服务不确定时 fail closed;低风险输出可回退安全模板。
Model / GPU Serving Inference 平台团队 router decision、queue event、model version、usage counters、worker trace。 tier、budget、region、model availability、data residency。 prefill/decode 同步产生 stream;调度和容量控制实时。 降模型、缩上下文、减少输出、排队或暂停低优先级异步任务。
Stream / Persist 实时传输与存储团队 response_events、last_seq、final message、usage ledger、artifact refs。 用户可见 delta 必须可重放;账本和审计字段不得丢。 stream 是实时;ledger/audit/trace 通过 outbox 异步扇出。 断线按 cursor replay;final commit 失败则不确认完成并触发补偿。
Tool / Agent / Code 工具运行时团队 tool_call、agent_run、container/job、approval、checkpoint、artifact。 OAuth scope、human approval、sandbox policy、network/file allowlist。 短工具可同步;Agent/Code/Deep research 多为异步 checkpoint。 工具失败返回可解释状态;危险动作无确认不执行;沙箱过载暂停。
Ops / Governance SRE、发布、安全和企业平台 SLO event、trace、eval result、feature flag、audit export、incident record。 tenant isolation、data residency、retention/ZDR、admin RBAC。 观测异步为主;policy/config 进入同步请求路径。 错误预算烧穿时自动降级/熔断;企业审计缺失时停用高风险功能。

5. 请求链路

一条普通消息怎么变成流式回答

真实系统里,消息不是同步函数调用。它有身份、配额、状态、上下文、安全、队列、GPU 调度、 流式传输和落库。面试时按这八步讲,基本不会漏主链路。

为什么不能把 ChatGPT 设计成一个同步函数调用?

因为一次回答可能持续几十秒,用户会刷新或取消,GPU worker 可能重启,工具和代码执行可能比 HTTP 连接活得更久。 如果状态只放在进程内存里,断线后就无法证明用户看过哪些 token;如果重试没有幂等键,就可能重复扣费、 重复提交外部工具动作,或生成两条互相矛盾的回答。所以“请求链路”真正要设计的是一条可恢复的事件流, 而不是一个从 controller 调 model 的函数。

1. 接入

Gateway 做 TLS、鉴权、套餐、配额、灰度标记、请求大小检查。

2. 记录

Conversation Service 写入用户消息和 generation 状态,生成幂等 request id。

3. 组装

Context Builder 拼 system、历史、记忆、RAG 文档、工具结果和当前问题。

4. 审查

输入安全与策略判断先挡掉不该进入 GPU 的请求。

5. 路由

Model Router 根据任务、套餐、上下文、工具、负载和成本选择模型与集群。

6. 推理

Inference Gateway 排队,GPU worker 做 prefill、decode、batching 和 KV cache 管理。

7. 流式

Stream Relay 与 GPU 推理层分离,通过 SSE 或 WebSocket 推送 delta,并按 tenant/response 分区扩容,处理取消、断线和回压。

8. 落库

每个 delta 先过输出安全并持久化 response_event,再 flush;计费、日志、trace、反馈和评估样本走 outbox 异步处理。

流式输出持久化手绘图:Accept、Context、Inference、Delta、Finalize 和 commit before flush
用户已经看到的 delta 必须先落入 durable event;resume、backpressure 和 usage 都围绕同一条事件账本工作。
Visible stream invariant
slastVisibleSeq:visible(response,s)durableEvent(response,s)nextSeq=lastDurableSeq+1finalMessage=canonicalView(s=1NresponseEvents)\begin{aligned} \forall s\le \mathrm{lastVisibleSeq}:\quad \mathrm{visible}(response,s) &\Rightarrow \mathrm{durableEvent}(response,s)\\ \mathrm{nextSeq} &= \mathrm{lastDurableSeq}+1\\ \mathrm{finalMessage} &= \mathrm{canonicalView}\left(\sum_{s=1}^{N}\mathrm{responseEvent}_s\right) \end{aligned}

这个不变量是本章的核心:客户端已经看到的每个 seq 都必须先成为 durable event;最终 assistant message 只是事件日志重建出来的 canonical view。这样 relay 崩溃、浏览器断线、用户刷新、客户端 ack 丢失、 duplicate seq 或 event gap 都能被同一套日志和状态机解释。

问题 设计 关键语义
状态机 CREATED -> QUEUED -> PREFILLING -> STREAMING -> COMPLETED CANCELLING 是过渡态;CANCELLED、FAILED、TIMEOUT 是终态;非法转移要被拒绝并进入审计。
幂等创建 tenant_id + conversation_id + client_request_id 唯一 重复 POST 不新建回答,直接返回同一个 response_id 和当前状态,避免重复扣费和重复工具动作。
流式事件 response_id、seq、event_type、delta、usage_delta、created_at seq 在 response 内单调递增,客户端用 Last-Event-ID 或 last_seq 断线恢复。
取消和恢复 cancel 写 CANCELLING;resume 从最后持久化 seq 继续读 cancel 与 token 继续到达、GPU stop ack、COMPLETED 可能竞争;终态由状态机 CAS 或事务决定。
先持久化再发送 append response_event -> commit durable log -> flush SSE/WebSocket 客户端可见的 delta 必须来自 response_events 或 durable stream,否则断线恢复会出现看过但服务端没记录的 gap。
落库边界 用户消息、generation、outbox 同事务;response_events 可追加 最终 assistant message 从 response_events 重建并标成 canonical,审计和计费用 event_id 幂等去重。

普通聊天只是 P0。真实 ChatGPT 的请求还会分叉到文件、图片、语音、Apps、Agent、Code Executor、Canvas 和后台研究。面试里不用把每个功能都画成独立大图,但要说清楚它们在同一条链路上哪里分叉、 哪些对象必须先落库、哪里能异步、失败后如何恢复。

产品面 触发入口 同步 / 异步边界 必须先落库 恢复点 失败 / 取消语义 最终产物
普通聊天 / Search composer 发送文本、开启搜索、或模型判断需要实时信息。 用户消息同步写入;搜索结果可同步短路,也可在流中先发 searching/source 事件。 message、response、response_events、search query、source span、citation candidates。 response_id + last_seq 重放已持久化 delta;source span 按 snapshot_id 固定。 搜索超时降级为无实时来源回答或 no-answer;引用不足不能伪造来源。 canonical assistant message、source panel、usage ledger。
Files / Data Analysis 上传文件、拖入表格、请求分析、要求生成图表或下载结果。 upload/scan/parse/index 可异步;分析 turn 只阻塞必要的 file_ready 或 sandbox_ready。 file_id、scan result、parse job、sandbox job、artifact、response_events。 file_id/job_id 可恢复;沙箱 stdout/stderr 和产物分片写 checkpoint。 扫描失败不进上下文;解析超时提示用户;沙箱失败保留错误和已生成产物。 表格摘要、图表、下载文件、notebook/代码执行结果。
图片理解 / 图片生成 上传图片提问、要求生成图片、或对图片做编辑。 图片理解先 scan/media safety 再进入 Context Builder;图片生成常进入异步媒体队列。 media_id、safety verdict、generation job、prompt revision、asset version。 media_id 和 image_job_id 支持轮询/通知;生成中断不重复扣费。 媒体扫描失败不注入;生成队列过载显示排队或降分辨率;被拒绝时写 policy decision。 图片 asset、编辑版本、下载链接和审计事件。
Voice / Realtime 用户打开语音会话、WebRTC/WebSocket 建连、音频帧持续到达。 实时会话负责低延迟双向流;文本 transcript 和 response_events 定期 checkpoint。 realtime session、ephemeral token、audio chunk pointer、transcript、response_events。 弱网后按 session_id 和 transcript cursor 恢复;无法恢复时退回文本聊天。 VAD/ASR 不确定先澄清;网络抖动不应重复执行工具;媒体策略未知 fail closed。 转写文本、语音回答状态、聊天中的最终消息。
Apps / 工具调用 模型产生 tool_call、用户 @app、或 Apps connector 需要读/写外部系统。 模型只提出动作;orchestrator 检查 scope、风险、确认和幂等键后执行。 tool_call_id、approval_id、provider_operation_id、OAuth scope、tool result。 tool_call_id 幂等重放;未知 provider 状态进入 reconcile job。 高风险写动作无确认不执行;429/5xx 按 backoff;不可逆动作必须避免重复提交。 tool result、外部操作收据、audit trace、可引用 source。
Agent mode 用户选择 Agent、提出多步任务、需要浏览/文件/表单/终端等组合动作。 短计划可同步展示;长任务进入 agent_run 异步 checkpoint,并在关键动作前请求确认。 agent_run、step graph、tool_call、checkpoint、approval、watch/takeover state。 从最后 checkpoint 恢复;同一 action_id 保证外部动作幂等。 预算耗尽、工具失败、策略拒绝或用户接管时,保留计划、证据和未完成状态。 任务报告、浏览截图、表格/文件产物、conversation summary。
Code Executor Data Analysis、代码解释、文件处理、图表生成或用户请求运行代码。 代码 job 异步运行;输出流可实时回传,但文件写入和下载必须先过扫描。 container_id、job_id、resource quota、stdout/stderr chunks、artifact files。 job lease 超时后可重新调度;stdout/stderr 和 artifact manifest 作为恢复点。 超时/内存爆掉杀 job;沙箱过载不影响普通聊天;网络和文件访问按 allowlist。 图表、CSV、notebook、日志和下载资产。
Canvas 用户打开 Canvas、选中文本/代码、要求改写、预览或导出。 patch 生成可流式;commit 必须校验 base_version 和 selection anchor。 artifact_id、artifact_version、patch_id、preview_run、export job。 patch 失败可按 base_version 重放;预览失败不覆盖 current_version。 base 过期则 rebase 或询问;预览沙箱失败只标记 preview failed。 可版本化文档/代码、diff、预览资产、导出文件。
Tasks / Pulse / Deep research 用户创建定时任务、Pulse 主动研究、Deep research 长报告。 请求创建同步返回 run/schedule;研究、抓取、通知和保存为 chat 异步执行。 schedule、run_id、research plan、checkpoint、citation ledger、notification state。 worker lease + checkpoint;失败后重试、late notification 或等待用户重启。 外部来源限流降低 fanout;过期结果标 stale;引用不可验证不生成最终报告。 报告、引用、Pulse card、通知和保存的聊天。

最后把链路改写成可靠性契约。每一段都要能回答:什么条件下允许重试,什么条件下绝不自动重试, 哪个事件算 bad event,降级动作是什么,以及哪个指标会告诉 SRE 这条链路正在烧错误预算。

阶段 不变量 / admission 口径 Good event Bad event 可重试 不可重试 降级动作 观测信号
Gateway / admission 先做 Auth、tenant、plan quota、request size、GPU 水位和 feature flag,再允许进入主链路。 请求被接入、排队或 429,都带 request_id、principal、admission_reason 和可解释 retry_after。 raw traffic 被无界接受,导致 GPU queue、DB 或工具 provider 被打爆。 429 带 retry_after;排队票据可被客户端轮询或恢复。 身份、租户、区域、合规策略不确定时不能自动重试放行。 限流、显示排队、关闭高成本工具、降模型或缩上下文。 raw_qps、accepted_qps、429_rate、admission_reason、queue_depth、feature_kill_switch。
Conversation write user message、response/generation、idempotency ledger、outbox 同步事务提交。 同一 client_request_id 只产生一个 response_id;ACK 前业务状态和 outbox 已提交。 模型已执行但 user message 未落库,或重试创建了两个 response 并重复扣费。 客户端用同一 client_request_id 重试,服务端返回同一个 response_id 和状态。 主库不可写时不能调用模型;外部写工具已执行但状态未知时进入人工/补偿。 只读历史、稍后重试、保留 draft,不进入 GPU。 write_latency、idempotency_conflict、transaction_abort、outbox_lag。
Context / policy 上下文必须带 provenance、ACL version、tombstone version、token budget 和 taint bit。 model input 中每个外部 source 都有 provenance、ACL 决策和 tombstone 版本。 把已删除文件、无权限 connector、个人 memory 注入到共享或群聊上下文。 connector sync stale 可异步刷新;低风险检索超时可重试一次。 ACL unknown、policy unknown、delete tombstone 未确认时不注入。 去掉来源、关闭 memory/RAG、要求重新授权或 fail closed。 context_snapshot_id、source_stale_rate、acl_unknown_rate、policy_decision。
Model queue / inference 按 tenant/tier/model/tool/background 拆队列;prefill/decode 水位控制 TTFT 和 TPOT。 accepted turn 在目标 SLO 内拿到 slot,或在超预算前被明确排队、降级、取消。 长上下文或后台研究挤占交互请求,P95/P99 TTFT 失控。 还未产生可见 delta 前,可在同一 response_id 下换池或降模型。 已发出可见 delta 后不能悄悄重开一个不同回答冒充连续输出。 降模型、减少 max_tokens、缩上下文、暂停 Deep research/Pulse/Agent 新任务。 queue_wait、prefill_time、decode_tpot、kv_eviction、gpu_util、cancel_ack_lag。
Stream relay 可见 token 必须先有 durable response_event;relay 只负责传输和重放,不拥有真相。 flush 给客户端的每个 seq 都能通过 response_id + last_seq 从 durable log 重放。 用户看过的 token 服务端没有记录,断线恢复出现 gap 或重复 token。 客户端带 Last-Event-ID/last_seq 重连;relay 从 durable log 重放。 不能用新 response 替代旧 stream;不能跳过 missing seq 继续标 completed。 退回轮询、降低 chunk 频率、显示 reconnecting 或 partial result。 disconnect_rate、replay_success、duplicate_seq、missing_seq、client_backpressure_seconds。
response_events response_id + seq 唯一且单调;delta/tool/final/usage 都是 append-only event。 事件无 gap、无 duplicate seq;final message 可由完整事件日志重建且与 usage 对齐。 final message 与事件日志不一致,账单和用户看到的内容对不上。 按 event_id/seq 幂等 append;consumer 可从 offset 重放。 乱序、缺 gap 或 final commit 未成功时不能向用户确认完成。 从已有 events 重建 partial,标记 FAILED/TIMEOUT,触发修复任务。 event_append_latency、seq_gap、final_rebuild_mismatch、checkpoint_age。
Output safety / final 输出安全、引用校验和最终 canonical message 在 completed 前完成。 COMPLETED 前输出策略、引用校验、finish_reason、usage 和 canonical message 全部一致。 部分流输出绕过安全,或引用/工具结果未校验就进入最终消息。 低风险输出扫描超时可重试;引用校验可异步补充但不能伪造。 策略未知、高风险动作证据缺失、source 不可追溯时不完成。 截断、改写、拒绝、要求确认,或保留 partial 并解释失败。 output_policy_decision、citation_missing、redaction_count、completion_state。
Outbox / usage / audit 计费、审计、索引、评估采样通过 outbox 异步扇出;consumer 按 event_id 幂等。 usage ledger、audit、trace、index/event consumers 在 lag SLO 内消费且可幂等重放。 回答成功但 usage ledger 丢失,或企业审计导出缺关键安全字段。 consumer 失败可按 offset/backoff 重放;账本漂移走 reconcile。 tenant、actor、policy decision 缺失时不能生成企业审计成功记录。 暂停高风险工具或企业导出,保 P0 chat,后台补偿账本。 outbox_lag、ledger_drift、audit_sink_lag、consumer_retry_exhausted。

6. 数据模型

别只说“用数据库”,要说清楚哪些状态必须可恢复

ChatGPT 的存储不是一个 messages 表。它要记录会话树、生成状态、工具调用、文件、产物、 记忆、向量索引、用量计费和审计证据。数据模型决定断线恢复、重新生成、版本回滚和安全追责能不能做。 本章是基于公开产品/API/隐私资料做的面试设计推断,不代表 OpenAI 内部真实表结构。

先从反例理解:如果只建一张 messages 表,最开始会很快,但一遇到流式输出、重新生成、工具副作用、 文件删除、分享固定版本和计费补偿,就会发现“写一行文本”不是系统的真实状态。

场景 单表失败点 正确建模 面试要点
断线恢复 只存 final message 时,用户已看过的 token 没有 seq 和 durable checkpoint;刷新后无法判断该重放还是重新生成。 Response / ResponseEvent 用 response_id + seq 追加可见事件,final assistant message 只是 canonical view。 流式输出先 durable append 再 flush;relay 无状态,可从事件日志恢复。
重新生成 / 编辑 覆盖旧 message 会丢模型版本、旧答案、分支和分享固定版本,无法解释用户看到的是哪一版。 Conversation tree + Message + Generation;edit/regenerate 追加新 generation,current 指针决定默认视图。 不可变历史 + 可移动 canonical pointer,比 update in place 更容易审计和回滚。
工具重试 把工具输出塞进 assistant text,会丢 approval、scope、provider operation id,重试可能重复外部写动作。 ToolCall / Approval / ToolResult 独立建模,带 idempotency_key、provider_operation_id 和补偿状态。 模型只提议动作,orchestrator 拥有外部副作用状态。
文件删除 message 表里只存附件 URL,删除时无法追踪 parse result、vector chunk、sandbox output、缓存和分享副本。 File、Object、ParsedDocument、VectorChunk、SandboxRun、Artifact 分离,用 tombstone 和 purge_job 串联。 删除先阻断读取,再异步传播;ACL unknown 或 tombstone 未确认时不注入上下文。
分享固定版本 分享链接直接指向 live conversation,会随当前分支变化,接收者看到的内容不稳定。 ShareLink 保存 resource_id、pinned_version、scope、expires_at 和 visibility policy。 分享是可审计的快照或受控视图,不是数据库行的裸链接。
计费补偿 只在 message 上存 token_count,模型重试、工具调用、取消和异步任务会让账单无法幂等重放。 UsageLedger / BillingEvent 按 event_id、response_id、tool_call_id 幂等记账,支持 reconcile。 账本是真源,Kafka 只是投递;消费者必须幂等。

User / Org / Tenant

身份、套餐、组织、区域、数据保留策略和管理员控制。

Project

项目指令、项目文件、项目内会话、项目记忆、成员权限和更新时间。

Conversation

会话元数据、标题、分支、归档、共享权限和最后更新时间。

Message

role、content、attachments、token_count、status、parent_message_id。

Generation

模型、prompt_tokens、completion_tokens、latency、finish_reason、cost。

Response / ResponseEvent

外部可见的回答、状态机、seq、delta、tool event、usage 和最终重建结果。

ToolCall

工具名、输入、输出、权限、状态、错误、耗时和审计证据。

Artifact

Canvas 文档、代码文件、React/HTML 预览资产、Agent 产物和版本补丁。

File / Data Analysis

上传原件、解析结果、沙箱产物、图表、下载链接、病毒扫描和生命周期。

Memory

用户长期偏好、项目事实、来源、可见性、删除状态和更新时间。

Task / Pulse

定时规则、主动研究触发器、执行状态、通知目标、上次结果和失败重试策略。

VectorStore

文件 chunk、embedding、权限 metadata、版本和过期策略。

AppAuth / Connector

外部 app、OAuth grant、scope、sync cursor、管理员策略、写动作确认和撤权时间。

GroupChat / ShareLink

成员、邀请链接、角色、过期时间、固定版本、可见范围和通知偏好。

Billing / Audit / Trace

usage ledger、event_id、actor、policy decision、trace span、region 和保留策略。

数据系统的第一原则是分清 source of truth 和 derived view。真源负责恢复和审计,派生视图负责查询体验和成本。 派生视图可以延迟、重建、降级;真源不能随便丢,尤其是用户可见 token、权限决策、账本和审计。

平面 是否真源 保存什么 派生视图 如何重建 一致性边界
OLTP conversation store tenant、conversation、message、response、generation、idempotency、share/group membership、outbox。 conversation list cache、search index、analytics cubes、assistant message snapshot。 从 OLTP + response_events 重建会话视图;缓存 miss 不影响真相。 用户消息、response 创建和 outbox 同事务;按 tenant_id + home_region 路由。
Response event log 用户可见 stream 的真源 response_id、seq、delta、tool_call、tool_result、usage_delta、final、safety decision。 最终 assistant message、断线 replay、usage ledger、eval sample。 按 response_id + seq 顺序重放;gap 或 duplicate seq 触发修复。 append-only,唯一键 response_id + seq;flush 前必须 durable。
Object store 大对象真源 上传文件、图片、音频、Canvas export、代码执行产物、报告附件。 parsed text、thumbnail、virus scan verdict、download manifest。 可从原件重新 parse/index;被 tombstone 的对象禁止读取。 对象 key 带 tenant/region/resource/version;元数据在 OLTP,内容在对象存储。
Vector / search index 否,可重建派生视图 chunk embedding、BM25/search document、source span、ACL metadata、embedding model version。 RAG candidate、source panel、semantic search。 从 File/ParsedDocument/Connector snapshot 重新切块和 embedding。 查询时再校验 ACL 和 tombstone;stale index 不能覆盖权限真相。
Usage ledger 计费与配额真源 usage_event_id、response_id、model、tokens、tool seconds、sandbox minutes、quota version。 invoice、quota dashboard、cost attribution、refund/reconcile report。 从 response_events/tool events/outbox 重算并对账。 event_id 幂等写;账本漂移进入补偿,不依赖 Kafka 作为最终账本。
Audit log 治理与追责真源 actor、resource、action、policy decision、admin setting、approval、region、trace id。 enterprise export、incident timeline、compliance report。 关键安全事件不可丢;普通分析事件可降采样。 append-only;tenant/workspace policy 决定保留与导出权限。
Trace / metrics 否,诊断视图 request_id、span、model route、GPU worker、batch id、latency、error、burn-rate signal。 SLO dashboard、debug replay、release regression report。 不能完整重建业务真相,只能辅助定位。 采样和脱敏;缺 trace 不应阻塞 P0 chat,但安全审计缺字段要阻断高风险动作。
关系 建模方式 一致性意义
Conversation tree conversation_id + parent_message_id + branch_id 编辑、重新生成和分支回答不是覆盖旧消息,而是在会话树上追加新分支。
ACL / Sharing metadata subject_id + resource_type + resource_id + role + scope + expires_at + policy_version 项目、群聊、分享链接、文件、artifact、App 授权都要可审计;权限快照用于重放和追责。
Message 与 Generation 一条 user message 可以触发多个 generation 重新生成、模型切换和工具失败重试都要保留多次 generation,最终只把一个版本设为当前 canonical。
Generation 与 Response Generation 是一次模型尝试;Response 是用户可见回答状态机 一次 response 可绑定一个或多个 generation 尝试;重试、fallback 和工具循环不能混成一条 message。
Canonical version / rollback conversation.current_branch_id、message.current_generation_id、artifact.current_version_id 历史版本不可变;编辑、重新生成、Canvas 回滚和分享固定版本都只是移动 current 指针并写审计事件。
ResponseEvent 唯一索引 response_id + seq delta、tool_call、tool_result、usage、final 都是事件;它支持断线恢复、重放和最终答案重建。
Assistant message canonical view assistant_message = rebuild(response_events where response_id = x) 最终展示文本、引用、工具结果和 finish_reason 从事件日志重建;message 表保存当前 canonical 指针和快照。
ToolCall 关系 tool_call_id 关联 response_id、generation_id、approval_id 工具执行要有幂等键、权限快照、输入输出摘要和补偿状态,不能只存模型文本。
Outbox 边界 OLTP 同事务写业务状态和 outbox 计费、搜索索引、评估、训练候选和审计由消费者异步处理,消费者按 event_id 幂等。
Retention / deletion deleted_at + retention_until + legal_hold + purge_job_id 消息、文件、artifact、vector chunk 先写 tombstone 再后台 purge;审计日志按合规策略单独保留。

下面把核心表关系展开成矩阵。面试时不需要背字段,但要讲清 source of truth、唯一键、生命周期、 查询路径和恢复路径。这个矩阵能支撑后续 API、存储、RAG、Agent、Canvas 和 Code Executor 的追问。

领域 真源表 / 对象 关键键 关系 生命周期 查询 / 索引
Conversation / Message conversation、message、message_part、attachment_ref。 tenant_id、conversation_id、message_id、parent_message_id、branch_id、created_at。 message 属于 conversation tree;attachment_ref 指向 file/media/artifact 版本。 draft -> committed -> archived/deleted;编辑追加新 message 或移动 branch pointer。 按 tenant + conversation + created_at 分区/索引;列表读 summary cache,详情读 OLTP 真源。
Generation / Response response、generation、response_events。 client_request_id 唯一,response_id + seq 唯一,generation_id 记录模型尝试。 response 是用户可见状态机;generation 是模型/工具尝试;assistant message 从 events 重建。 CREATED -> QUEUED -> STREAMING -> COMPLETED/CANCELLED/FAILED/TIMEOUT。 恢复按 response_id + last_seq;重新生成追加 generation 并更新 current_generation_id。
Tool / App / Connector app_grant、connector_sync_cursor、tool_call、approval、tool_result。 tool_call_id、approval_id、provider_operation_id、OAuth grant id、scope、policy_version。 tool_call 关联 response/generation;grant 关联 tenant/user/app;sync cursor 关联 connector source。 authorized -> synced/stale/revoked;tool pending -> approved/executed/reconciled/failed。 写动作按 idempotency key 防重复;读动作结果带 source span 和 ACL snapshot。
Files / Data Analysis / Code file、scan_result、parsed_document、sandbox_run、sandbox_output、artifact。 file_id、object_key、parse_job_id、container_id、job_id、artifact_version_id。 file 产生 parsed chunks 和 sandbox input;sandbox output 可发布成 artifact 或下载资产。 uploaded -> scanned -> parsed/indexed -> used -> tombstoned/purged;sandbox run 有 lease/timeout。 大对象在 object store;metadata 在 OLTP;vector/search index 只存可重建派生块。
Canvas / Artifact artifact、artifact_version、patch、preview_run、export_job。 artifact_id、version_id、patch_id、base_version_id、preview_run_id。 conversation/message 引用 artifact version;patch 只在 base_version 匹配时提交。 created -> patched -> previewed/exported -> shared/deleted;rollback 移动 current_version。 按 artifact_id + version_id 取稳定版本;分享链接可 pin 某一版。
Memory / Project project、project_member、project_file、memory_item、memory_event。 project_id、member_id、memory_id、source_message_id、source_trace_id、deleted_at。 project memory、saved memory、reference chat history 和 Temporary Chat 分开建模。 candidate -> saved -> disabled/deleted;Temporary Chat 不读写 account memory。 Context Builder 读取时按 workspace/personal/project/group 边界过滤,source 必须可解释。
Share / Group chat share_link、group_chat、group_member、group_message_visibility。 share_id、pinned_version、invite_token_hash、group_id、member_id、role、expires_at。 group chats 与个人聊天分离;个人 memory/custom instructions 不进入群聊上下文。 created -> invited/joined -> revoked/expired/deleted;teen/safety mode 可提升群聊策略。 按 membership 和 pinned_version 校验读取;邀请 token 只存 hash。
Tasks / Pulse / Deep research schedule、run、checkpoint、research_plan、report、citation_ledger、notification_state。 task_id、run_id、checkpoint_seq、deadline、dedupe_key、notification_id。 run 可保存为 chat/message;report 引用 source/citation;Pulse 依赖 memory 和 opt-in app data。 scheduled -> leased -> running -> completed/late/failed/cancelled;可 pause/delete。 worker lease + checkpoint 恢复;通知和保存为 chat 用 dedupe key 防重复。
Billing / Audit / Trace usage_ledger、audit_log、trace_index、eval_sample_ref。 usage_event_id、audit_event_id、request_id、response_id、tenant_id、region。 usage 来自 response/tool/sandbox events;audit 记录 actor/resource/action/policy decision。 append -> reconciled/exported/retained;eval/training candidate 受数据控制和 policy 过滤。 账本按 tenant/model/time 聚合;审计按 tenant/actor/resource/time 查询。

高并发系统里,数据模型还要写出一致性契约:哪个唯一键防重复,哪个事务必须同步提交, 哪些索引可异步,跨区域时 RPO 是什么,冷数据如何恢复。否则“用数据库和 Kafka”只是口号。

契约 唯一键 / 版本 事务边界 分区 / 索引 重放 / 恢复 失败处理
幂等创建回答 tenant_id + conversation_id + client_request_id 唯一。 message、response、idempotency ledger、outbox 同事务提交。 按 tenant_id + home_region + time 分区,避免跨租户热点。 重复 POST 返回同一个 response_id 和当前状态。 主库不可写时不进入模型;避免重复扣费和重复工具动作。
可见流可重放 response_id + seq 唯一,seq 单调。 append response_event 成功后才 flush 给客户端。 response_events 按 response_id hash + created_at 分区。 Last-Event-ID / last_seq 从 durable log 重放。 gap/duplicate seq 不标 COMPLETED;触发 rebuild/repair。
Outbox 扇出 outbox_event_id / event_id 幂等。 业务状态和 outbox_events 同一个 OLTP 事务。 按 topic、tenant、event_time 分区;consumer group 独立扩缩容。 消费者按 offset/backoff 重放,幂等写账本/索引/审计。 consumer 失败不回滚用户响应,但 outbox_lag 烧错误预算。
权限和删除优先 resource_id + policy_version + tombstone_version。 删除先写 tombstone 和 purge_job,再异步清理派生视图。 删除队列按 tenant/region 分片,避免全局扫描。 purge job 可重入;派生索引从真源和 tombstone 重建。 tombstone 未确认、ACL unknown、policy unknown 时不注入上下文。
区域固定与 RPO tenant_id + home_region + data_residency_policy。 强一致写留在 home region;跨区副本标 replication_lag。 按 region pin 数据;异步任务必须继承 data region。 灾备从 OLTP WAL/object manifest/event log 恢复;RPO 等于最后 durable checkpoint。 跨区依赖不满足 residency 时 fail closed 或禁用不合规功能。
冷热分层 tenant_id + resource_type + created_at + retention_until。 热 OLTP 保当前会话;冷对象/归档保不可变版本和审计。 热表按时间滚动,冷数据按 object prefix 和 lifecycle policy。 归档可回放到临时恢复库;vector/search 从冷真源再建。 冷恢复慢不能影响 P0 chat;展示为历史加载中或只读。

再把真实 ChatGPT 功能映射回实体。这样回答不会停留在“有文件表、有工具表”,而能说明每个功能的状态、 生命周期、恢复点和治理边界。

功能 主要实体 生命周期 恢复点 治理边界
Images MediaAsset、ImageJob、PromptRevision、SafetyVerdict、AssetVersion。 upload/scan -> understand;或 generate/edit -> queued -> asset version -> download/share。 image_job_id 支持轮询和通知;失败保留 policy decision 和已生成版本。 媒体安全、对象签名 URL、删除传播到 object/index/cache。
Voice / Realtime RealtimeSession、EphemeralToken、AudioChunkPointer、Transcript、TurnSegment。 session open -> audio chunks -> transcript checkpoint -> response_events -> final message。 按 session_id + transcript cursor 恢复;不可恢复时退回文本。 音频对象按 tenant policy 保留;媒体策略 unknown 时 fail closed。
Agent AgentRun、PlanStep、ToolCall、Checkpoint、Approval、TakeoverState。 planned -> step leased -> tool executed -> checkpoint -> completed/paused/taken_over。 从 checkpoint_seq 恢复;action_id/provider_operation_id 防重复外部动作。 高风险动作确认,工具 scope 最小权限,watch/takeover 进入审计。
Code Executor / Data Analysis SandboxRun、ContainerLease、Job、StdoutChunk、OutputArtifact、DownloadAsset。 container allocated -> job running -> outputs checkpointed -> scanned -> artifact published。 lease 超时重调度;stdout/stderr 和 manifest 可重放给用户。 资源配额、文件 allowlist、病毒扫描、产物继承项目/租户 ACL。
Canvas Artifact、ArtifactVersion、Patch、SelectionAnchor、PreviewRun、ExportJob。 create -> patch -> preview/export -> share/rollback/delete。 base_version 不匹配时 rebase 或询问;预览失败不覆盖 current_version。 artifact-level ACL、preview sandbox、下载扫描和分享 pin version。
Apps / synced connectors AppGrant、OAuthScope、ConnectorSyncCursor、SourceSnapshot、AppActionReceipt。 authorize -> sync -> query/use -> revoke/stale/purge。 sync cursor 可回放;provider 状态 unknown 进入 reconciliation job。 scope、admin policy、query-time ACL、写动作 approval 和撤权传播。
Tasks / Pulse / Deep research Schedule、Run、ResearchPlan、CitationLedger、Report、NotificationState。 scheduled/triggered -> leased -> checkpointed -> report/card -> notified/saved。 deadline miss 和 worker crash 后按 run_id/checkpoint 重试或 late notification。 Pulse 依赖 memory 和 app opt-in;引用必须可追溯;预算超限降 fanout。
Group chats GroupChat、GroupMember、InviteLink、MentionEvent、GroupPolicySnapshot。 created -> invited/joined -> active -> archived/deleted/expired link。 成员/邀请/消息 visibility 独立重放;个人聊天和群聊不互相合并。 个人 memory/custom instructions 不进入群聊;成员策略、teen safety 和 audit 分开记录。

最后是治理和删除。ChatGPT 类系统的删除不是从 UI 列表移除一行,而是从 OLTP、对象存储、 向量索引、搜索索引、缓存、备份、评估候选和训练候选中逐步传播,同时受 workspace policy、 legal hold、数据驻留和 ZDR/retention 控制约束。

策略 适用范围 传播方式 备份 / 冷数据 例外 审计
Tenant / workspace policy 企业管理员的数据保留、分享、Apps、审计导出、区域和训练控制。 写入 tenant_policy_version;请求、context、tool、export 都校验同一版本或更高版本。 备份和冷归档继承 tenant_id、region 和 retention_until。 管理员 legal hold 或合规要求可阻止 purge。 每次 policy 变更、导出、拒绝和 fail closed 都写 audit_log。
Temporary Chat 临时聊天不出现在历史中,不读写 account memory;保留按产品策略单独处理。 conversation.memory_mode = temporary;Context Builder 禁用 saved memory/reference history 写入。 临时会话对象和日志带 temporary retention tag。 安全、合规或滥用监控要求可能影响实际保留边界,设计中必须可配置。 记录 mode 决策,但避免把内容放进长期 personalization store。
Business / API data controls / ZDR Business/API 默认训练边界、API retention、ZDR 与不兼容工具能力。 request envelope 带 data_control_mode;工具、文件、媒体和 background job 必须继承。 ZDR/modified retention 下禁用或限制不兼容的持久化路径。 某些需要 application state 的工具或后台能力可能不可用。 记录被禁用功能和 policy_reason,便于企业解释。
Delete / purge 用户删除、管理员删除、项目/文件/artifact/vector chunk 删除。 先写 tombstone,阻断 read/context;purge job 清理 OLTP、object、vector、search、cache、derived analytics。 备份按 retention window 到期后清除或不可恢复;冷存储需可证明状态。 legal hold、fraud/security investigation 或合同义务可延迟 purge。 deletion_request、purge_job、skipped_due_to_hold、completed_at 全部可查。
Eval / training candidates 用户反馈、human label、eval sample、训练候选数据。 只从允许的数据控制模式和脱敏管道进入 candidate store。 candidate 保存 source pointer 和 consent/policy snapshot,而不是无限复制原文。 Business、API ZDR、opt-out、Temporary Chat 或敏感 policy 命中时不入候选池。 记录 sampling_reason、redaction、policy_version、review decision。

7. API、存储和事件流

把 ChatGPT 当成可恢复的事件系统,而不是一个 POST /chat

这一章把前面的产品能力落到 API、存储和事件流。公开资料只能证明 Responses API、Streaming、Realtime、 Apps、Agent、Data Analysis、Canvas、Deep research 等产品/API 语义;下面的表结构、队列和存储分层是 system design 面试推断,不代表 OpenAI 内部真实实现。

初学者最容易把系统想成 POST /chat -> 模型 -> 返回字符串。这在 demo 里能跑,但一到真实产品就崩: 用户会刷新页面、取消生成、重试请求、上传文件、让 Agent 执行外部动作、要求企业审计和删除传播。正确抽象是: API 接受意图,数据库保存可恢复业务状态,运行时执行昂贵推理/工具,事件流把计费、审计、索引、通知和评估异步扇出。

API 存储和事件流手绘图:API、Commit、Runtime、Client stream、Event stream、Billing、Audit、Index 和 Evals
同步 API 先创建可恢复真源,昂贵运行时和异步消费者再从 truth log 读取事实。
第 7 章的核心不变量:先有可恢复状态,再让昂贵运行时和异步消费者工作。
AcceptedTurntx(message,response,idempotency,outbox)visible(r,s)durableResponseEvent(r,s)seq(s)=sExactlyOnceEffect=AtLeastOnceDelivery+IdempotencyKey+Reconciliation\begin{aligned} \mathrm{AcceptedTurn} &\Rightarrow \mathrm{tx}(\mathrm{message},\mathrm{response},\mathrm{idempotency},\mathrm{outbox})\\ \mathrm{visible}(r,s) &\Rightarrow \mathrm{durableResponseEvent}(r,s)\land \mathrm{seq}(s)=s\\ \mathrm{ExactlyOnceEffect} &= \mathrm{AtLeastOnceDelivery}+\mathrm{IdempotencyKey}+\mathrm{Reconciliation} \end{aligned}

第一张表是白板落点索引。它的重点不是背路径,而是说明每个能力的“同步边界、幂等键、真源、异步任务和降级路径”。 面试官追问到 Agent、Code Executor、Voice、Images、Deep research 时,也能自然挂回同一套 API/storage/event 模型。

模块 设计形态 关键取舍
Conversation API POST /v1/conversations;GET /v1/conversations?cursor=... 列表用游标分页;conversation 带 tenant_id、project_id、home_region、archived_at 和 shared_policy。
Response API POST /v1/conversations/{id}/responses Idempotency-Key = tenant_id + conversation_id + client_request_id;重复请求返回同一个 response_id。
Stream contract GET /v1/responses/{id}/events?after_seq=123 SSE event 包含 id: seq、event_type、delta、usage_delta;429 返回 retry_after 和可降级模型。
Cancel / resume POST /v1/responses/{id}:cancel;GET events after last_seq cancel 是状态变更,不保证 GPU 立即停止;resume 只重放已持久化事件,不生成新答案。
Files / data analysis API POST /v1/files;POST /v1/files/{id}:analyze 文件有 scan、parse、index、sandbox_run、artifact 输出状态;下载链接和产物继承 tenant/project ACL。
Voice / Realtime API POST /v1/realtime/sessions;WebRTC / WebSocket events ephemeral token 绑定用户、租户、模型、工具范围和过期时间;transcript checkpoint 与文本 response_events 对齐。
Images API POST /v1/images/jobs;GET /v1/media/{id} 图片理解和图片生成都要过 media safety;生成/编辑任务保存 prompt revision、asset version、签名 URL 和删除传播。
Projects / memory API POST /v1/projects;PATCH /v1/memories/{id} Project 指令、文件、成员和 project memory 分开存;memory 必须支持来源解释、禁用、删除和审计。
Apps / OAuth API POST /v1/apps/{id}:authorize;DELETE /v1/app_grants/{id} OAuth grant 保存 scope、sync cursor、policy_version 和撤权时间;写动作要 approval_id 幂等确认。
Tasks / Pulse API POST /v1/tasks;GET /v1/pulse/items 定时规则、触发器、后台 run、通知目标和失败重试要可暂停、可审计、可去重。
Agent API POST /v1/agent_runs;POST /v1/agent_runs/{id}:approve Agent run 需要 plan、step、checkpoint、approval、watch/takeover 和 external action receipt,不能只存最终回答。
Code Executor API POST /v1/sandbox_runs;GET /v1/sandbox_runs/{id}/events 容器 lease、资源配额、stdout/stderr chunk、artifact manifest 和下载扫描独立于普通模型 response。
Deep research API POST /v1/research_runs;GET /v1/research_runs/{id}/report 研究计划、source fetch、citation ledger、checkpoint、预算和通知是长任务状态,适合后台 worker 承载。
Artifacts / Canvas API POST /v1/artifacts;PATCH /v1/artifacts/{id}/versions Canvas patch、code preview、download asset 都是 artifact version;回滚只移动 current_version_id。
Share / group API POST /v1/share_links;POST /v1/group_chats 分享链接固定版本和过期时间;群聊保存 member role、invite policy、notification preference 和审计事件。
Admin / audit API GET /v1/audit_logs;GET /v1/compliance/exports 企业管理员按 tenant、actor、resource、policy decision 和 time range 查询;导出走异步任务和权限校验。
OLTP store users, projects, conversations, messages, generations, response_events 主键按 tenant/time 分区;response_events 唯一索引 response_id + seq;业务热缓存失效不能导致丢数据。
Redis business cache conversation list、rate limit/quota snapshot、stream cursor、presence OLTP 是真源,Redis miss 可重建;这里的缓存不是 GPU 上的 KV cache,也不能保存不可恢复状态。
Usage / billing ledger token_usage、tool_usage、invoice_events、quota_counters 按 response_id + seq 或 event_id 幂等记账;账单和配额可重放修复,Kafka 不是最终账本。
Object and vector store files, artifacts, chunks, embeddings, ACL metadata 上传原件进对象存储;chunk 带 tenant、project、source span、doc version、embedding model version 和 ACL。
Outbox / Event stream billing, audit, search index, eval samples, training candidates 业务状态与 outbox_events 同一个 OLTP 事务提交;relay 异步发布到 Kafka/Pulsar,消费者按 event_id 幂等,失败不回滚用户响应。
Audit / retention / deletion audit_log、deletion_requests、tombstones、purge_jobs、retention_until、legal_hold 审计日志 append-only;删除先 tombstone,再异步清理对象、向量和缓存副本;legal hold 会阻止 purge。
Trace spine request_id -> conversation_id -> response_id -> run_id 同一次回答要串起路由决策、RAG 文档、tool call、GPU worker、batch id 和安全结果。

然后把 API 写成契约。一个高分回答会显式区分:创建请求是否幂等、流恢复是不是重新生成、取消是不是 GPU stop、 写外部 app 是否需要用户确认、后台任务如何暴露状态、限流错误能否安全重试。

产品面 示意路由 同步 / 异步模式 幂等与重试 权限 / 租户边界 流 / 任务状态 失败语义
创建会话 / 回答 POST /v1/responses 或 POST /v1/conversations/{id}/responses 同步创建 durable response,随后进入 queued/streaming/background。 Idempotency-Key = tenant + conversation + client_request_id;重复请求只返回同一 response。 Auth、tenant、project/group/share membership、model entitlement、region policy。 返回 response_id、status、stream URL;background=true 时返回 job 状态和轮询/通知入口。 主库不可写、policy unknown、quota exhausted 不进 GPU;429/503 带 retry_after 和可降级建议。
流式读取 / 断线恢复 GET /v1/responses/{id}/events?after_seq=N;SSE Last-Event-ID SSE 适合单向文本/工具增量;WebSocket/WebRTC 适合 Voice/Realtime 双向低延迟。 response_id + seq 唯一;after_seq 和 Last-Event-ID 都是客户端恢复游标,不是新生成请求。 读取时重新校验 actor 对 conversation/response 的可见性和 tombstone。 事件包含 type、seq、delta、tool_state、usage_delta、heartbeat、final_state。 gap/duplicate seq 触发 repair;relay 只能重放 durable log,不能凭内存补事件。
取消 / 继续 / 重新生成 POST /v1/responses/{id}:cancel;POST /v1/messages/{id}:regenerate cancel 是业务状态转移;regenerate 是新 generation 分支,不覆盖旧答案。 cancel_id 幂等;regenerate 用新的 client_request_id,旧 response 保持可审计。 只有 owner、project/group 有权限成员或 admin policy 允许的 actor 可操作。 cancel 写 CANCELLING/CANCELLED;GPU stop ack 只是运行时信号,可能晚到。 cancel 与 completed 竞争时由状态机 CAS 决定;不能把已完成回答悄悄改成取消。
Files / Data Analysis / Code POST /v1/files;POST /v1/sandbox_runs;GET /events upload/scan/parse/index/sandbox_run 多阶段;交互 turn 可等待必要 ready state。 upload checksum、job_id、container lease、artifact manifest 幂等。 文件、项目、容器挂载和下载链接继承 tenant/project ACL 与 retention。 stdout/stderr、progress、chart、artifact_ready 都是 job event。 scan fail 不注入上下文;sandbox OOM/timeout 保留错误和已发布 artifact。
Apps / Agent action approval POST /v1/apps/{id}:authorize;POST /v1/tool_calls/{id}:approve 读动作可短阻塞;高风险写动作必须用户确认,Agent 长任务按 checkpoint 继续。 approval_id + provider_operation_id 防重复外部副作用。 OAuth scope、admin allowlist、tenant policy、resource-level ACL、user confirmation。 tool_call.proposed / approved / running / receipt / reconcile_required。 provider unknown 不自动重放写动作;进入 reconciliation 或要求用户确认。
Tasks / Pulse / Deep research POST /v1/tasks;POST /v1/research_runs;GET /v1/pulse/items 创建同步返回 schedule/run;执行、抓取、引用校验、通知异步。 schedule dedupe_key、run_id、notification_id、saved_chat_id 防重复。 用户 opt-in、memory/app grant、workspace policy、source license/robots 约束。 scheduled / leased / checkpointed / late / completed / failed / notified。 deadline miss 发 late notification;来源不可验证不生成最终报告。

真实 ChatGPT 页面上能用到的功能,不应该散落成一堆“特殊 case”。下面这张功能落点表把每个功能压回同一组问题: 入口 API 是什么,必须先落哪类状态,哪些工作后台做,最终 artifact 是什么,审计证据在哪里。

功能 入口 必须持久化 后台工作 产物 审计 / 治理
普通聊天 / Search Response API + stream events;Search 可作为 tool/source 事件出现。 message、response、response_event、context_snapshot、source_span。 搜索索引、引用校验、标题生成、反馈采样。 canonical assistant message、source panel、usage ledger。 request_id、model_id、source provenance、policy decision、billing event。
Voice / Realtime ephemeral session + WebRTC/WebSocket event channel。 session、audio chunk pointer、turn segment、transcript checkpoint、response_event。 媒体转码、音频对象清理、transcript reconciliation。 最终文本消息、语音播放状态、可恢复 transcript。 ephemeral token scope、media retention、tool execution guard。
Images media upload / image generation job / image edit job。 media_asset、safety_verdict、image_job、prompt_revision、asset_version。 scan、生成排队、缩略图、签名 URL、删除传播。 图片版本、下载链接、编辑历史。 media safety、prompt policy、asset ACL、usage/cost。
Agent agent_run + step event + approval API。 plan graph、step、tool_call、checkpoint、approval、takeover_state。 浏览、文件处理、外部 app action、长任务恢复。 任务报告、截图、文件、最终 conversation summary。 每个外部动作的 scope、确认、receipt、policy decision。
Code Executor / Data Analysis sandbox_run + job event + artifact API。 container lease、job、stdout/stderr chunk、artifact manifest、download asset。 资源回收、病毒扫描、图表渲染、导出。 CSV、图表、notebook、日志、下载文件。 resource quota、file mount list、network allowlist、scan result。
Canvas artifact create / patch / preview / export API。 artifact、version、patch、selection_anchor、preview_run、export_job。 preview sandbox、export build、download scan。 版本化文档/代码、diff、预览、导出文件。 base_version、editor actor、share pin、preview isolation。
Apps / Connectors OAuth grant + sync cursor + tool action API。 app_grant、scope、connector_sync_cursor、source_snapshot、action_receipt。 增量同步、ACL 刷新、撤权传播、reconciliation。 外部 source block、操作收据、可引用结果。 admin policy、scope、provider_operation_id、query-time ACL。
Tasks / Pulse / Deep research schedule/research run API + notification API。 schedule、run、checkpoint、research_plan、citation_ledger、notification_state。 worker lease、source fetch、报告合成、通知、保存到聊天。 Pulse card、研究报告、引用、保存的 conversation。 opt-in memory/app data、budget、source provenance、late/failure 状态。
Group chats / Share group_chat / invite / share_link API。 group、member、invite token hash、share pinned version、visibility policy。 通知、邀请过期、索引、导出。 群聊消息视图、固定分享快照。 membership、role、teen/safety mode、unsupported-tool gate。

存储层要先分清真源和派生视图。OLTP、response event log、usage ledger、audit log 是恢复和追责的核心; Redis、vector/search、部分 trace 是性能层或可重建视图。Redis 缓的是业务热状态,不是 GPU 上的 KV cache。

平面 是否真源 键 / 分区 TTL / 保留 重建路径 失败模式
OLTP truth users、tenants、projects、conversations、messages、responses、tool_calls、idempotency_ledger、outbox。 tenant_id + home_region + resource_id;response_events 用 response_id hash + created_at。 按 workspace retention、Temporary Chat、ZDR、legal hold 和 cold archive 策略打 tag。 从 WAL/backup/object manifest 恢复;派生索引从真源回放。 主库不可写时拒绝创建回答;不能先跑模型再补消息。
Response event log 用户已经看到的 delta、tool event、usage_delta、final_state 的可重放日志。 response_id + seq 唯一;按 response_id 分片,created_at 滚动分区。 热事件保近期恢复;冷事件可压缩成 immutable transcript + audit pointer。 canonical assistant message、账本、trace 可以从完整事件重建。 seq gap 或 final mismatch 时不标 completed,触发 repair/reconcile。
Redis business cache 不是。只放 rate limit、quota snapshot、conversation list、presence、短期 stream cursor。 tenant/user/model/feature 维度限流;hot key 用 sharding 和 local cache 降压。 秒到小时级 TTL;策略变更、删除、quota 更新要主动失效。 miss 后从 OLTP/ledger/policy service 重建。 Redis 不可用时保守限流或降级,不能丢业务真源;它不是 GPU KV cache。
Object store / media store 上传原件、图片/音频、artifact 文件、sandbox output、冷归档 manifest。 tenant/region/resource_type/date/object_id prefix;metadata 带 ACL 和 retention。 signed URL 短 TTL;对象按 retention_until、delete tombstone、legal hold lifecycle。 parse result、thumbnail、embedding 可从对象和 manifest 重建。 对象不可读时不注入上下文;下载/分享显示延迟或失败状态。
Vector / search index 不是。保存 chunk、embedding、ACL metadata、version,用于低延迟检索。 tenant/project/source_id/chunk_id + embedding_model_version。 跟随源文档版本和 tombstone;stale index 不允许绕过 query-time ACL。 从 file/object/source_snapshot 重新 parse、chunk、embed、index。 索引延迟时降级为无 RAG 或 no-answer;不能返回已删除/无权限 chunk。
Usage ledger 是。token、tool、sandbox、media、connector cost 的 append-only 账本。 tenant_id + billing_period + event_id;response_id + seq 幂等。 账务保留通常长于产品热数据;按合同和合规归档。 从 response_events/tool events 补偿,但最终以 ledger reconciliation 为准。 ledger drift 告警并补偿;不能因 Kafka 重投而重复扣费。
Audit / compliance log 是。actor、resource、policy decision、admin action、export/delete/approval 证据。 tenant_id + time + actor/resource;写入 append-only sink 和冷归档。 按企业 retention、legal hold、data residency 分区保存。 可从业务事件补字段,但关键安全事件丢失必须阻断高风险功能。 企业审计缺关键字段时暂停导出/高风险工具,而不是静默成功。
Trace / metrics 调试和 SLO 证据,不是用户业务真源。 request_id -> response_id -> run_id;按 service/model/region/tier 聚合。 热 trace 短保留,指标长期聚合;敏感 payload 脱敏或只存 pointer。 不能完全重建,但可从 event/audit/ledger 交叉定位事故。 观测降级不阻塞 P0 chat,但会限制发布和高风险功能。

事件流不是“把所有东西丢 Kafka 就完事”。可靠设计要说明 producer、ordering key、投递语义、consumer 幂等、 lag SLO 和降级动作。多数业务要的是 exactly-once effect,而不是相信某个消息系统替你消灭所有重复。

事件类 生产者 排序键 投递语义 消费者 Lag / 故障动作
response_events Stream relay / persist worker response_id,seq 单调。 客户端可见前 durable append;relay at-least-once 发送,客户端按 seq 去重。 浏览器恢复、canonical message builder、usage sampler、eval sampler。 append latency 高时降低 chunk 频率、退回轮询或暂停低优先级生成。
outbox_events Conversation OLTP transaction tenant_id + aggregate_id;event_id 幂等。 业务状态和 outbox 同事务;relay 到 Kafka/Pulsar at-least-once。 billing、audit、search index、notification、export、analytics。 outbox_lag 烧错误预算;先保 P0 chat,暂停索引/通知/研究 fanout。
usage_events response/tool/sandbox/media finalizer usage_event_id;response_id + seq 去重。 ledger exactly-once 效果由幂等键实现,不靠消息队列承诺。 quota、invoice、cost dashboard、abuse/cost guardrail。 quota snapshot 过期时保守限流;ledger drift 进入 reconciliation。
audit_events policy、admin、approval、delete、share、app action tenant_id + audit_event_id;时间顺序用于查询,不用于授权。 append-only;关键安全事件同步写或高优先级 outbox。 企业审计导出、合规保留、安全调查。 audit sink lag 超阈值时关闭高风险外部写动作和导出成功标记。
background_job_events Tasks、Pulse、Deep research、Agent、Code worker run_id + checkpoint_seq。 lease + checkpoint + retry;通知和保存聊天用 dedupe key。 scheduler、notification、conversation saver、user status UI。 deadline miss 发 late 状态;按预算降低 fanout 或停止低优先级 job。
delete / retention events user/admin delete、retention sweeper、legal hold service tenant_id + resource_id + tombstone_version。 先写 tombstone 阻断读,再异步 purge object/vector/search/cache。 context builder、search/vector purge、object lifecycle、audit export。 tombstone 未传播时 fail closed,不把可疑 source 注入模型。

最后把高并发和高可用写成面试可追问的可靠性矩阵:如何背压、哪里需要有序、哪里允许最终一致、 多区域如何满足数据驻留、RPO/RTO 怎么分层、缓存失效和取消竞态如何处理。

关注点 契约 指标 降级 常见陷阱
Backpressure Gateway admission 看 GPU queue、DB 写入、outbox lag、sandbox/connector 队列,而不是只看 HTTP QPS。 accepted_qps、queue_wait、db_write_p99、outbox_lag、sandbox_queue_depth。 限流、排队、降模型、缩上下文、关闭 Agent/Deep research/图片生成新任务。 只在 Nginx 层限流,会把已接入请求堆死在 GPU 或数据库。
Exactly-once 误区 外部效果用幂等键和账本达成 exactly-once effect;队列本身按 at-least-once 设计。 duplicate_event_rate、idempotency_conflict、ledger_drift、provider_reconcile_count。 consumer 幂等重放、账本补偿、外部 provider unknown 时暂停自动重试。 说“Kafka 保证 exactly-once,所以不会重复扣费”会被继续追问到崩。
Ordering 用户可见流按 response_id 严格有序;跨 response、billing、audit 只要求可关联和幂等。 seq_gap、duplicate_seq、final_rebuild_mismatch、consumer_reorder_count。 missing seq 不 completed;从 durable log 重建 partial,触发 repair。 要求所有 topic 全局有序会牺牲扩展性,也不是业务真正需要。
Multi-region / residency tenant home_region 决定强一致写;跨区副本只读或灾备,异步 job 继承数据区域。 replication_lag、cross_region_blocked、rpo_checkpoint_age、region_failover_time。 区域不满足时 fail closed;历史只读;暂停不合规 connector/Agent/Code。 把所有数据多活写全局库,会和数据驻留、删除传播、成本一起冲突。
RPO / RTO P0 conversation/message/response RPO 接近 0;vector/search/cache 可延迟重建;冷历史可慢恢复。 durable_commit_latency、checkpoint_age、restore_time、cold_read_latency。 保当前聊天写入;历史搜索和导出延迟;冷数据只读或显示恢复中。 给所有子系统同一个 99.99% 和 RPO 0,成本不现实,也没有体现优先级。
Cache invalidation 权限、删除、quota、memory 和 project policy 变更以版本号/tombstone 驱动缓存失效。 stale_cache_hit、policy_version_mismatch、tombstone_lag、acl_unknown_rate。 版本不确定时绕过缓存或 fail closed;不注入 RAG/memory/source。 把 Redis 当 truth,会在删除、撤权、企业策略变更时泄漏上下文。
Cancel race cancel 是业务状态;GPU stop 是 best-effort runtime signal;终态由状态机事务决定。 cancel_ack_lag、late_delta_after_cancel、cancel_completed_race、slot_release_latency。 停止向客户端 flush late delta;释放运行时资源;保留 partial/cancelled 事件。 承诺 cancel 后 GPU 立即停止,会忽略已经在 decode/网络缓冲里的 token。
Hot / cold data 当前会话、recent events 和 rate limit 在热层;旧附件、完整 trace、历史事件归档到冷层。 hot_table_size、partition_skew、archive_lag、cold_restore_p95。 旧历史懒加载;冷恢复慢不影响当前 P0 chat。 无限保留热表会让索引、备份和删除成本不可控。

这一章答完后,面试官如果继续追问“怎么扩到百万并发流”“断网后怎么恢复”“外部工具会不会重复执行” “删除如何传播到向量索引”“为什么账单不会重复扣费”,都能回到同一套不变量:同步路径只做必要耐久写, 昂贵工作可异步,所有副作用可幂等重放,权限和删除优先于体验。

8. 上下文和记忆

Context Builder 是权限、证据和预算的编译器

上下文不是“把历史全塞进 prompt”。它是本轮请求发给模型的工作集:高优先级指令、当前任务、最近历史、 可用记忆、项目文件、RAG/Search、Apps、工具输出和长任务 checkpoint 都要先经过权限、删除、来源、排序和 token budget。 本章基于公开 ChatGPT 帮助文档和 API 文档做面试设计推断,不代表 OpenAI 内部真实实现。

第一原则很简单:模型只能看到上下文窗口里的东西,但系统不能因为窗口有限就丢掉权限边界,也不能因为有记忆就把历史当数据库。 所以 Context Builder 更像一个编译器:把很多候选来源编译成一个有优先级、有引用、有版本、有预算的 model input。

Context Builder 装箱手绘图:Files、History、Memory、Tools、Policy、ACL filter、Rank、Budget、Trim 和 Prompt
Context Builder 的工作是做有权限的装箱:先过滤,再排序,再按 token 预算裁剪,最后才形成 prompt bundle。
只把允许、未删除、可解释的来源装进输入预算;输出预算必须提前预留。
Binput=BmodelBreservedOutputBsafetyMarginSallowed={sACL(u,s,t)¬Tombstone(s)PolicyAllowed(s)}Cmodel=PackBinput(Instructions,CurrentTask,RecentTurns,Memory,RAG,ToolEvidence)sCmodel: provenance(s)authority(s)sourceVersion(s)\begin{aligned} B_{\mathrm{input}} &= B_{\mathrm{model}}-B_{\mathrm{reservedOutput}}-B_{\mathrm{safetyMargin}}\\ \mathcal{S}_{\mathrm{allowed}} &= \{s\mid \mathrm{ACL}(u,s,t)\land \neg \mathrm{Tombstone}(s)\land \mathrm{PolicyAllowed}(s)\}\\ \mathcal{C}_{\mathrm{model}} &= \mathrm{Pack}_{B_{\mathrm{input}}}\left(\mathrm{Instructions},\mathrm{CurrentTask},\mathrm{RecentTurns},\mathrm{Memory},\mathrm{RAG},\mathrm{ToolEvidence}\right)\\ \forall s\in\mathcal{C}_{\mathrm{model}}&:\ \mathrm{provenance}(s)\land \mathrm{authority}(s)\land \mathrm{sourceVersion}(s) \end{aligned}

先用一个总表把常见名词分清。上下文窗口是本轮模型输入;saved memory 是用户级长期偏好; Reference chat history 是按需检索历史;Project memory 和项目文件受项目边界控制;RAG、Apps 和工具输出只是外部证据。

策略 做什么 风险和取舍
指令层级 root / platform policy > system > developer > user > guideline;外部资料默认 No Authority assistant/tool/RAG/网页/文件/quoted content 默认没有指令权限,除非高权限显式委托;历史里的用户约束只有在仍相关且未被后续同层指令覆盖时才保留。
装箱优先级 先放当前任务和硬约束,再按价值放 history、memory、RAG / tools evidence 这是 token packing 规则,不是权限规则;RAG 和工具输出只能作为证据,不能升级成命令。
最近窗口 保留最近多轮原文 解决追问和当前任务连贯性,成本最低但覆盖有限。
摘要 旧历史压成结构化 summary 摘要只能降低历史成本,不能替代事实来源;关键约束要能回溯到原始消息,防止摘要漂移。
记忆 跨会话保存稳定偏好和事实 必须可解释、可删除、可禁用,不能把敏感短期信息默认长期化。
ChatGPT 记忆边界 把 Saved memory、Reference chat history、Project memory、Temporary Chat 分开建模 Saved memory 是可管理的长期偏好/事实,是否可用受个人和 workspace 开关控制;可由用户要求或系统提炼,但不适合保存大段原文。
Reference chat history 按需从历史聊天找相关上下文,不是逐字全量历史 关闭 Reference saved memories 会同时关闭 Reference chat history;saved memories 开启时,chat history 仍可单独关闭;Enterprise/Edu 中不可用。
Project memory default、project-only、shared project 的边界不同 default project memory 的聊天引用范围按套餐不同:非 Enterprise/Edu(含 Business)可引用项目内外相关上下文,Enterprise/Edu 主要限制在项目内;功能可用性还受开关影响,Enterprise/Edu 需要个人 Reference saved memories 与 workspace Memory,其他订阅通常需要 Reference saved memories 和 Reference chat history;project-only 私有项目只引用同项目聊天/文件和项目指令,且只能新建项目时选择;shared projects 自动变成 project-only,且不访问成员的项目外个人上下文、saved memories 或 global custom instructions,也不可恢复成 default,但仍可使用项目内 instructions、files、chats。
Temporary Chat 不访问或创建用于个性化的 memory 不会出现在历史中,也不会用于改进模型;custom instructions 开启时仍会遵守;为安全/合规目的可能保留副本至多 30 天,并在少数高风险场景使用有限安全相关上下文。
检索 按当前问题找相关历史或文件 召回要带权限过滤和引用位置,不能只按向量相似度盲塞。
外部证据 / 工具结果 RAG chunk、网页、文件、工具输出都按 untrusted evidence 处理 进入上下文前做 query-time ACL、delete/revoke filter、source span/citation/provenance 和 sanitizer:ACL 是按用户/项目权限即时过滤,source span 记录文档版本、chunk 和 offset;外部内容要用 untrusted/source block 包装并保留来源,sanitizer 只做脱敏、标记和明显恶意片段处理,真正的权限边界由指令层级和工具 ACL 保证。
预算 先预留输出 token 再塞上下文 先保 system、安全规则、当前请求和显式约束,再按 recent history、RAG evidence、tool results 的价值裁剪。

接着把所有来源按“作用域、指令权、版本、排除条件、降级”建模。面试时这张表能直接回答: 为什么网页不能给系统下命令,为什么共享项目不读个人记忆,为什么删除中的文件宁可不答也不能注入。

来源 作用域 指令权 / 证据权 新鲜度 / 版本 排除条件 降级
System / developer / product policy 本轮请求的最高优先级约束、租户策略、工具可用性和安全策略。 有指令权;不能被用户、网页、文件、RAG 或工具输出覆盖。 随 policy_version、prompt bundle version 和 feature flag 发布。 策略服务 unknown、版本不一致或租户不匹配时 fail closed。 停用高风险工具、缩小能力面、返回安全模板或要求稍后重试。
Current user turn 当前文本、图片、语音 transcript、附件意图、选择的 model/tool/project。 用户意图有任务权,但不能越过更高优先级政策和工具权限。 请求接入时冻结到 context_snapshot,避免重试时读取漂移。 输入扫描失败、文件未 ready、媒体策略 unknown 时不进入模型。 澄清、只处理文本、等待文件扫描或禁用对应 modality。
Recent conversation turns 最近多轮原文、分支、tool result、response final state。 提供任务连续性;旧用户约束只在仍相关且未被同层后续消息覆盖时保留。 按 conversation branch 和 message version 固定。 已删除、被分享视图隐藏、群聊不可见或跨项目边界的消息不注入。 只保最近窗口;旧历史压摘要或要求用户重新提供上下文。
Saved memory / Reference chat history 稳定偏好、长期事实、相关过往聊天线索、memory sources。 低于当前用户指令;只作为 personalization evidence,不是硬指令。 memory_version、source_event、top-of-mind 排序和用户开关决定。 Temporary Chat、memory off、删除中、source 不可解释或 workspace 禁用时不使用。 关闭 memory 路径,显示未个性化回答,或要求用户显式确认。
Projects / project files / project memory 项目指令、项目内聊天、文件、成员、shared project 边界和 project-only mode。 项目指令只在项目上下文内有效;共享项目不读取成员个人 memory/custom instructions。 project_policy_version、file_version、membership_version、memory_mode。 成员无权限、文件 tombstone、shared project 禁止个人上下文、project-only 限制外部历史。 忽略无权限文件、降级为项目内聊天、提示重新授权或重新上传。
RAG / Search / synced connectors / Apps 网页、搜索结果、连接器文档、Gmail/Drive 等同步来源、app tool result。 默认 No Authority;只能当证据,不可作为系统指令执行。 source_snapshot、sync_cursor、ACL decision、retrieval time、citation span。 connector stale、OAuth revoked、query-time ACL unknown、robots/license/policy 不允许。 无来源回答、no-answer、要求重连 app、降低召回 fanout。
Data Analysis / Code artifacts 文件解析结果、stdout/stderr、表格摘要、图表、notebook、download artifact。 工具结果是证据;代码输出不能修改上层指令和权限。 sandbox_run_id、artifact_version、scan_result、file_version。 扫描失败、artifact 未发布、container expired、文件权限撤销。 重跑沙箱、只引用已发布产物、提示文件过期或需要重新上传。
Agent / Tasks / Pulse / Deep research Agent 计划/checkpoint、Tasks schedule、Pulse/Deep research source、citation ledger、通知和保存为聊天的结果。 checkpoint 是任务状态,不是新的用户授权;高风险动作仍要 approval。 run_id、checkpoint_seq、deadline、citation verification、notification_state。 任务取消、预算耗尽、source 不可验证、memory/app opt-in 不满足;Agent mode 不能访问 apps with sync 数据;Tasks 不支持文件上传/GPTs,且在带文件的 Project 中创建时不能访问项目文件。 发送 late/failure 状态、降低研究深度、要求用户恢复任务。
Group chats / shared views 群聊消息、成员角色、群设置、邀请链接、分享固定版本。 群聊上下文只在群聊空间内有效;个人 memory/custom instructions 不进入群聊。 membership_version、visibility_version、pinned_share_version。 非成员、邀请过期、个人上下文、删除 tombstone;Canvas、Voice、Python/Data Analysis、Deep Research、Tasks and Apps、Agent mode、账号级 memory/custom instructions 不进入群聊。 仅展示可见历史,禁用群聊不支持功能,提示需要成员权限或回到个人/项目聊天。

后端实现上,Context Builder 不能散落在业务代码里临时拼字符串。它应该是一条可观测流水线: 发现候选、查权限、去重排序、按模型 tokenizer 装箱、写 snapshot,然后在回答后做摘要和 memory candidate。

阶段 输入 决策 状态 / 版本 失败处理 指标
1. Resolve envelope principal、tenant、conversation/project/group、model、mode、client_request_id。 确定 home_region、workspace policy、memory mode、feature flags 和 data controls。 context_request_id、policy_version、route_reason。 tenant/policy/region unknown 时不构建上下文;避免跨区或跨租户误读。 policy_lookup_p99、unknown_policy_rate、region_mismatch。
2. Candidate source discovery 当前问题、最近历史、项目、memory、files、connectors、tool state。 先生成 source candidate,不立刻注入;每个 candidate 带 source_type 和 owner。 candidate_set_id、retrieval_query、source pointers。 connector timeout、vector store 延迟、memory service 降级时只影响对应 source。 retrieval_p95、candidate_count、connector_stale_rate、memory_lookup_error。
3. Authorization / freshness filter candidate_set、ACL、membership、OAuth scope、tombstone、retention policy。 query-time ACL、delete/revoke/tombstone、source freshness、license/robots 逐项过滤。 acl_decision_id、tombstone_version、source_snapshot_version。 ACL unknown 或 tombstone 未确认时 fail closed,不注入可疑 source。 acl_unknown_rate、filtered_candidate_rate、tombstone_lag。
4. Rank / dedupe / cite 授权后的候选源、source spans、embedding/BM25/recency/intent features。 按 task relevance、authority、recency、diversity、cost、citation quality 排序。 ranker_version、selected_source_ids、citation_span_ids。 引用不足时选择 no-answer 或无来源回答,不能伪造 citation。 source_precision_feedback、citation_missing_rate、dedupe_ratio。
5. Token accounting / packing model tokenizer、input budget、reserved output、system/user/source blocks。 先保硬约束和当前任务,再按价值密度放 recent/history/memory/RAG/tool evidence。 pack_plan_id、token_estimate、truncation_reason。 估算偏差过大导致截断或输出预算不足;触发 safety margin 和重 pack。 token_estimate_error、pack_latency、dropped_useful_source_rate。
6. Snapshot / replay 最终 model input、source versions、policy versions、pack order、taint labels。 写 context_snapshot,供断线恢复、审计、调试、eval 和 rerun 对齐。 context_snapshot_id、source_manifest、prompt_hash、token_count。 没有 snapshot 就无法解释模型为什么看到某个文件或 memory。 snapshot_write_latency、snapshot_missing_rate、replay_success。
7. Post-turn learning 用户反馈、assistant response、tool result、memory candidate、eval sample。 提取 memory candidate、更新 summaries、写训练/eval 候选,但必须过数据控制。 memory_candidate_id、summary_version、eval_sample_ref。 Temporary Chat、Business/API/ZDR、opt-out 或 sensitive policy 命中时不进入长期个性化/训练候选。 wrong_memory_write、summary_drift、candidate_policy_reject。

Token packing 不是“按时间倒序塞满”。要先预留输出,再保硬约束和当前任务,然后按 value/token cost 放来源。 不同类别的来源有不同丢弃规则:高优先级指令不能丢,外部证据可以丢,provider receipt 不能丢,长日志应变成 artifact pointer。

类别 排序信号 预算规则 必须保留 丢弃 / 压缩 风险
Hard instructions 优先级最高,不参与相关性排序。 必须完整放入;如果超预算,拒绝或切更大上下文模型。 system/developer/policy、tenant controls、安全约束、当前用户请求。 不能为了 RAG 或历史删除高优先级指令。 把外部文档放在高优先级位置,会造成 prompt injection。
Current task evidence 当前附件、选中文本、Canvas selection、user-highlighted source。 优先保留与当前操作直接相关的 span,而不是整文件。 selection anchor、file version、artifact base_version、tool input。 大文件按 section/chunk 裁剪;保留 citation pointer。 没有 anchor/version,Canvas patch 或代码修改会落到错误位置。
Recent turns 时间近、对当前问题有 coreference、包含未完成 tool state。 保最近 N 轮原文;更旧内容转 summary 或检索。 用户纠正、未完成承诺、活跃 tool call、当前分支。 闲聊、重复解释、已被新消息覆盖的约束优先丢。 只看最近窗口会漏长期约束;只看摘要会产生摘要漂移。
Saved memory / profile 用户开关、top-of-mind、来源可信、与当前任务相关。 短句优先;大段原文不进 memory,source pointer 可回溯。 用户显式要求记住且未删除的稳定偏好。 Temporary Chat、删除、敏感或低置信 memory 不使用。 把一次性隐私信息长期化,或在共享/群聊中泄漏个人上下文。
Project / RAG / connector evidence BM25/embedding、recency、source authority、ACL confidence、citation quality。 按 chunk value / token cost 排序,保多样性并限制同源占比。 用户显式指定文件/网页、必要引用、source span。 stale、无 ACL、重复、低相关或 citation 不可追溯的 chunk。 向量相似不等于授权;旧索引可能包含已删除内容。
Tool / Agent / Code state 活跃 run、未完成 step、错误恢复需要、用户接管点。 保 checkpoint summary + 必要 artifact manifest,不塞完整日志。 approval state、provider receipt、container/job status、error code。 长 stdout/stderr、重复 trace、可从 artifact 拉取的二进制内容。 丢 provider receipt 会导致重复外部动作;塞完整日志会浪费上下文。

再把真实 ChatGPT 功能映射到上下文边界。这样回答 Agent、Canvas、Code Executor、Tasks/Pulse、 Deep research、群聊和 Apps 时,不会只说“都放 prompt”,而是能说清哪些能进、哪些绝不能进、如何恢复和审计。

功能 允许进入上下文 禁止进入上下文 Snapshot 字段 恢复 治理
Projects / files 项目指令、项目文件、项目内聊天、项目 memory,按 membership 和 memory_mode 注入。 shared project 不能读取成员个人 saved memories、global custom instructions 或项目外私有聊天。 project_id、membership_version、file_version、memory_mode、instruction_version。 文件删除或移动后,旧 context snapshot 仍可审计;新请求按 tombstone 过滤。 共享/移动项目触发索引和缓存失效;无权限 source fail closed。
Memory / Reference chat history 相关 past chats、saved memories、custom instructions 和可展示的 memory sources。 Temporary Chat、用户关闭 memory/history、Enterprise/Edu 不支持的 Reference chat history、删除中 memory。 memory_id/hash、source_event_id、memory_version、top_of_mind flag。 memory 服务失败时不阻塞 P0 chat;回答标为未个性化。 删除 memory 不改写历史,但要阻断未来使用并记录 tombstone propagation。
Group chats 群聊消息、群设置、成员可见历史和群内 instructions。 个人 memory、个人 custom instructions、非成员可见内容;Canvas、Voice、Python/Data Analysis、Deep Research、Tasks and Apps、Agent mode、账号级 memory/custom instructions。 group_id、member_version、visibility_version、unsupported_feature_gate。 成员变更后旧流按创建时 snapshot 完成,新请求重新鉴权。 群聊、分享和个人空间分表/分 namespace;邀请 token 只存 hash。
Apps / synced connectors 授权 scope 内、query-time ACL 通过、sync cursor 足够新的 source block 或 tool result。 OAuth revoked、admin 禁用、provider ACL unknown、外部内容中的指令升级。 app_grant_id、scope_hash、sync_cursor、source_snapshot_id、taint=untrusted。 stale connector 降级为无连接器回答或要求重新授权。 最小披露给 app;写动作仍走 approval;Agent mode 不能直接访问 apps with sync 的数据,要用其允许的 app/source 路径。
Data Analysis / Code Executor 用户授权文件、解析摘要、sandbox output、artifact manifest、图表和下载产物指针。 扫描失败文件、过期容器私有状态、未发布 artifact、无权限项目文件。 file_id、parse_version、sandbox_run_id、artifact_version、scan_result。 容器不可恢复时从文件和 manifest 重建;stdout 长日志走对象存储引用。 artifact 继承 tenant/project ACL;下载和分享前重新扫描。
Agent 当前 agent_run 的计划、checkpoint、已确认 tool result、用户 watch/takeover 状态。 未确认高风险动作、外部 provider unknown 状态、跨任务 private state、apps with sync 数据的直接访问。 run_id、checkpoint_seq、approval_id、action_receipt、budget_state。 从 checkpoint_seq 恢复;重复动作靠 action_id/provider_operation_id 幂等。 模型只能建议动作;orchestrator 负责权限、确认和审计。
Tasks 用户显式创建的 one-off/recurring schedule、任务说明、通知目标和任务所在 conversation 的必要上下文。 Voice chats、File Uploads、GPTs;在带文件的 Project 中创建 task 时,task 不能访问项目文件。 task_id、schedule_version、conversation_id、notification_state、active_task_quota。 任务离线执行;完成后通知;deadline miss 或 worker failure 记录 late/failed 状态。 最多活跃任务数、计划用量限制、Compliance API 可见性、pause/delete/edit 全部审计。
Pulse / Deep research Pulse opt-in memory/app context、research plan、source manifest、citation ledger、报告草稿。 用户未 opt-in 的 app 数据、过期/不可验证 source、训练禁用数据进入候选、群聊中不支持的 Deep Research。 run_id、deadline、source_manifest、citation_ledger_version、notification_state。 deadline miss 变 late notification;研究可从 checkpoint 继续或让用户重启。 引用必须可追溯;预算超限降 fanout/深度;保存为 chat 用 dedupe key。
Canvas / artifacts 当前 artifact version、selection anchor、patch context、preview result 和 export manifest。 过期 base_version 上的 blind patch、无权限 artifact、预览沙箱未通过产物。 artifact_id、base_version、selection_anchor、patch_id、preview_run_id。 base mismatch 时 rebase 或询问用户;预览失败不覆盖 current_version。 分享 pin version;artifact ACL 和 conversation ACL 分开校验。

高并发场景下,上下文构建常常比模型调用更像“慢依赖聚合器”:向量检索、连接器同步、memory 读取、文件解析、 权限过滤和 token 估算都可能拖慢首 token。高可用设计必须明确哪些是 P0 依赖,哪些可以降级。

关注点 契约 指标 降级 常见陷阱
Context build cache 缓存 key 必须包含 tenant、principal、conversation branch、policy_version、source versions、model/tokenizer。 cache_hit_rate、stale_hit_rate、pack_latency、token_estimate_error。 版本不确定时绕过缓存;只保 current turn + recent turns。 只按 prompt text 缓存,会把别人的文件、memory 或权限结果复用过来。
Retrieval latency RAG/search/connectors 按 deadline 和 source class 并发;慢源不拖死 P0 chat。 vector_p95/p99、connector_p99、source_timeout_rate、deadline_miss。 减少 fanout、关闭慢 connector、无来源回答、显示 source stale。 等待所有来源返回会把首 token 延迟变成最慢依赖延迟。
Memory service failure memory 是增强,不是 P0 chat 依赖;写入候选异步化,读取失败可降级。 memory_lookup_error、wrong_memory_write、deleted_memory_use、memory_apply_latency。 不使用 memory、冻结写入、标记未个性化、重放删除 outbox。 memory 服务挂了就让整个聊天失败,或更糟的是使用过期缓存。
Delete / revoke propagation tombstone 优先于检索体验;ACL unknown、tombstone lag、OAuth revoked 都不注入。 tombstone_lag、acl_unknown_rate、revoked_source_hit、purge_job_age。 fail closed、重建索引、绕过 stale cache、要求重新授权。 只从向量库删,不从摘要、缓存、memory candidate、artifact manifest 删。
Prompt injection / taint 外部 source block 带 taint=untrusted 和 authority=no;工具 schema 和上层指令在隔离通道。 injection_pattern_rate、unsafe_tool_call_blocked、source_authority_violation。 去掉来源、改成引用摘要、要求确认、禁用写工具。 把网页内容拼在 system prompt 附近,模型可能把网页文字当高优先级命令。
Cost / token budget 按 source value/token cost 装箱,预留输出和工具预算;长上下文不是免费扩容。 input_tokens、output_truncation_rate、context_cost_per_turn、dropped_source_feedback。 压缩摘要、减少 chunk、切 cheaper model、要求用户选择文件范围。 无脑塞满最大上下文,会拉高 TTFT、成本和幻觉风险。
Snapshot replay 每次回答都有 context_snapshot_id,可解释模型看到的 source、版本、权限和 pack order。 snapshot_missing_rate、replay_success、source_manifest_mismatch。 缺 snapshot 的回答不进入训练/eval;事故调试只做 best-effort。 只记录最终 prompt hash,不记录 source versions,无法解释删除后为何仍被引用。
Tenant isolation 所有 source candidate、cache、embedding、summary、memory、trace 都带 tenant/project/group boundary。 tenant_mismatch_blocked、cross_project_source_attempt、isolation_violation。 策略 unknown 或 namespace mismatch 直接 fail closed。 RAG 按全局 embedding 召回后再过滤,容易产生侧信道和热 key 泄漏。
Max context window input pack + reserved output <= model limit
Pinned system / developer / current task highest priority, never silently dropped
Compressible recent history + summaries + memory summarize or collapse before dropping
Evidence RAG / files / search / tool receipts rank by value per token, keep citations
Optional low-rank chunks / verbose logs drop first when cost or latency spikes
Reserved output generation budget prevents mid-answer truncation
Overflow order drop low priority -> summarize history -> retrieve narrower RAG -> ask user / fail clearly Every step trades answer quality, latency and token cost explicitly.

上图是装箱示例,不是固定百分比。reserved output 不会作为输入片段发送给模型,而是从总 context window 里预留给生成阶段,避免回答中途因为输出预算不足被截断。面试中要强调:更大的 context window 只是上限, 不是把所有历史、文件和网页都塞进去的理由;权限、引用和成本仍然先于“多塞一点”。

9. LLM 推理和 GPU 调度

高分点在 token 级调度,不在“加机器”

普通后端按 request 扩容,大模型 serving 还要按 token、显存、KV cache、batch 和模型副本调度。 如果候选人能讲清 prefill/decode、KV cache 和 continuous batching,面试官通常会认为你理解真实瓶颈。

公开资料可以证明 PagedAttention、chunked prefill、prefix cache、TTFT/TPOT、Realtime API 和 Agent 等关键语义;Dynamo、DistServe 和 Splitwise 证明 prefill/decode 分池是公开可讨论的 serving 架构。 但 ChatGPT 内部如何落地模型池、队列和故障恢复仍是面试推断。第一原则是:ChatGPT 的“聊天、文件、代码、Canvas、Agent、语音、图像、定时任务” 最终都会把不同形状的上下文、工具结果和用户时延目标,压到同一组稀缺资源:GPU 算力、HBM、KV block、stream relay 和后台工具池。

推理容量先按 token、KV 和实测吞吐估,不按 HTTP QPS 直接拍机器数。
0. 先定输入变量 λ_req / t_in / t_out / r / u_target

λ_req 是 accepted requests/s;t_in/t_out 是每请求输入/输出 token;r_prefill/group 和 r_decode/group 分别是每个 GPU group 压测得到的 prefill/decode tokens/s;u_target 是目标利用率折扣;s_i=t_in+t_out 是单请求 KV token; TP 是 tensor parallel 分片数,最终物理 GPU 数要用 group 数乘 TP。

1. 延迟和排队 TTFT / TPOT
TTFT=Tadmit+Tqueue+Tprefill+Tfirst decode+TstreamTPOTTdecode step\begin{aligned} \mathrm{TTFT} &= T_{\mathrm{admit}}+T_{\mathrm{queue}}+T_{\mathrm{prefill}}+T_{\mathrm{first\ decode}}+T_{\mathrm{stream}}\\ \mathrm{TPOT} &\approx T_{\mathrm{decode\ step}} \end{aligned}
2. Little's Law 并发流和 active decode
CactiveλreqE[Tstream]CdecodeλreqE[Tdecode]\begin{aligned} C_{\mathrm{active}} &\approx \lambda_{\mathrm{req}}\cdot \mathbb{E}[T_{\mathrm{stream}}]\\ C_{\mathrm{decode}} &\approx \lambda_{\mathrm{req}}\cdot \mathbb{E}[T_{\mathrm{decode}}] \end{aligned}
3. 显存约束 KV cache + weights + workspace
si=tin,i+tout,igeneratedMKV/GPU2LHkvDhBeisiTP(1+ϵpage)Mweights+MKV+Mact+MoverheadMGPUumem\begin{aligned} s_i &= t_{\mathrm{in},i}+t_{\mathrm{out},i}^{\mathrm{generated}}\\ M_{\mathrm{KV/GPU}} &\approx \frac{2LH_{\mathrm{kv}}D_hB_e\sum_i s_i}{TP}(1+\epsilon_{\mathrm{page}})\\ M_{\mathrm{weights}}+M_{\mathrm{KV}}+M_{\mathrm{act}}+M_{\mathrm{overhead}} &\le M_{\mathrm{GPU}}\cdot u_{\mathrm{mem}} \end{aligned}
4. 吞吐约束 prefill / decode 分别估
Din=λreqE[tin],Dout=λreqE[tout]Gprefill=Dinrprefill/grouputargetGdecode=Doutrdecode/grouputarget\begin{aligned} D_{\mathrm{in}} &= \lambda_{\mathrm{req}}\cdot \mathbb{E}[t_{\mathrm{in}}],\quad D_{\mathrm{out}}=\lambda_{\mathrm{req}}\cdot \mathbb{E}[t_{\mathrm{out}}]\\ G_{\mathrm{prefill}} &= \left\lceil\frac{D_{\mathrm{in}}}{r_{\mathrm{prefill/group}}\cdot u_{\mathrm{target}}}\right\rceil\\ G_{\mathrm{decode}} &= \left\lceil\frac{D_{\mathrm{out}}}{r_{\mathrm{decode/group}}\cdot u_{\mathrm{target}}}\right\rceil \end{aligned}
5. 面试结论 GPU 数量取最紧约束
Gmemory=Mweights+MKV+Mact+MoverheadMGPUumemG_{\mathrm{memory}}=\left\lceil\frac{M_{\mathrm{weights}}+M_{\mathrm{KV}}+M_{\mathrm{act}}+M_{\mathrm{overhead}}}{M_{\mathrm{GPU}}\cdot u_{\mathrm{mem}}}\right\rceil
Grequired=max(Gmemory,Gprefill,Gdecode)+GfailoverNGPU=GrequiredTPTqueueifBtokens  Cdecode  MKV  utarget hits limit\begin{aligned} G_{\mathrm{required}} &= \max(G_{\mathrm{memory}},G_{\mathrm{prefill}},G_{\mathrm{decode}})+G_{\mathrm{failover}}\\ N_{\mathrm{GPU}} &= G_{\mathrm{required}}\cdot TP\\ T_{\mathrm{queue}} &\uparrow\quad \mathrm{if}\quad B_{\mathrm{tokens}}\ \vee\ C_{\mathrm{decode}}\ \vee\ M_{\mathrm{KV}}\ \vee\ u_{\mathrm{target}}\ \mathrm{hits\ limit} \end{aligned}
变量 含义 面试解释
T_admit / T_queue 入口校验、限流、排队和等待 GPU slot 的时间 来自线上 trace 和压测;队列深度、租户优先级、deadline 和区域故障都会改变它。
T_prefill / T_first decode / TPOT 读 prompt、产出首 token、后续每 token 间隔 prefill 受输入长度和 attention kernel 影响;TPOT 主要看 decode batch、KV 访问、采样和 stream relay。
T_stream 首 token 从 GPU worker 到 Stream Relay、再 flush 给客户端的时间 受跨进程队列、SSE/WebSocket buffer、网络 RTT、浏览器读取速度和断线重连策略影响。
L / H_kv / D_h / B_e 模型层数、KV head 数、head dimension、KV 元素字节数 来自模型配置和量化方案;GQA/MQA 会让 H_kv 小于 attention heads,KV quant 会降低 B_e。
Σ s_i 同一个 GPU worker / TP group 内所有 active sequence 的当前长度总和 不要用 batch_size * max_len 粗估;真实 continuous batching 是变长序列,KV 随每步 decode 增长。
H_kv / TP / ε_page GQA/MQA 的 KV head 数、张量并行切分、分页碎片和 allocator overhead PagedAttention / paged KV cache 降低碎片,但仍要留安全水位给临时 workspace、通信 buffer 和突发长上下文。
λ_req / E[input tokens] 峰值请求率和输入 token 均值,用于估算 prefill 需求 D_in D_in = λ_req * E[input tokens];文件、RAG、项目上下文和长聊天会显著拉高 p95/p99。
E[output tokens] / D_out 输出 token 均值和峰值 decode 需求 D_out = λ_req * E[output tokens];Agent 循环、代码生成和长答案会让 decode 池比普通聊天更快吃满。
N_decode_groups 满足峰值输出 token 需求所需的 decode GPU group 数 由 D_out、实测 r_decode/group 和目标利用率 u_target 推出;它是容量规划结果,不是用户请求数。
r_decode/group 在目标模型、硬件、batch、context 分布和 TPOT SLO 下实测的 output token/s 这是压测结果,不是论文峰值;不同模型、量化、speculation 和并发形态会改变这个数字。
u_target 目标利用率安全水位,常低于 1 给突发、故障迁移、长上下文和 kernel 抖动留余量;高峰压到 100% 会直接放大 TTFT 和取消失败。
LLM 推理服务手绘图:Queue、Prefill、KV cache、Decode、Scheduler、Stream、Batch、Cancel、Fallback 和 Metrics
推理设计的核心是把 prefill、KV cache、decode、scheduler 和 stream 看成同一个延迟与吞吐权衡系统。

高质量答案要把产品入口和 serving 入口连起来:不是所有请求都走一个 GPU 队列。前台聊天、Realtime、Agent、Deep research 的交互方式、可重试性和容量指标完全不同,调度层必须先识别 surface,再选择模型池、工具池和降级策略。

功能入口 输入形状 推理路径 KV 压力 运行队列 取消 / 重试 容量信号
普通聊天 短 prompt + 最近历史,输出长度中等,用户强感知首 token。 同区域模型池直达,Context Builder 产出 snapshot 后进入 per-model queue。 主要由多轮历史和输出长度增长;prefix cache 可复用系统提示和稳定会话前缀。 interactive lane,deadline 短,decode 优先,必要时降级到更快模型。 用户停止生成时释放 KV;未出 token 可重试,已流式输出只能显式 regenerate。 TTFT p95、TPOT p95、active tokens/GPU、cancel release lag。
Search / RAG 用户问题 + 搜索摘要 + source spans,输入 token 和证据块数量波动大。 检索 fanout 先并发执行,deadline 内返回的证据被打包后再进入推理池。 RAG 证据会放大 prefill;引用越多,KV 和 TTFT 压力越大。 retrieval lane 和 inference lane 分离;慢搜索不占 GPU slot。 取消要同时停搜索、rerank 和推理;重试必须复用或重建 source snapshot。 retrieval p99、context token p95、source timeout rate、answer citation miss。
文件 / Data Analysis 文件摘要、表结构、采样行、代码执行结果和图表 artifact 引用。 文件解析和 Python 执行在工具池;模型只看受控摘要、schema 和必要片段。 原文件不能直接塞满窗口;采样、分块、摘要和 artifact manifest 决定 prefill。 tool queue 通常比 GPU 更慢,需把 CPU sandbox 与推理排队拆开计量。 取消 run 要回收 sandbox、临时文件和 GPU KV;重试复用已验证 artifact。 parse latency、sandbox queue、input token amplification、artifact replay success。
Code Executor 代码片段、测试输出、错误堆栈、workspace diff 和下一步计划。 模型生成 patch/command,executor 执行,结果再作为 untrusted tool output 回模型。 错误日志和 diff 容易很长;需要截断、聚类和可点击 artifact,而不是全量灌入。 interactive + tool lane 交错;GPU 等待工具时不应占住 decode slot。 命令、容器和推理 run 都要有 attempt_id;部分副作用只能补偿,不能盲目重放。 tool wait ratio、stdout truncation、retryable error rate、patch token/output ratio。
Canvas 文档片段、选区、编辑意图、版本号和结构化 diff。 模型输出 edit operations;服务端用 optimistic lock 合并到 canvas document。 长文档靠 selection + outline + changed spans 控制;prefix cache 复用稳定文档前缀。 low-latency edit lane,偏短输出,但需要稳定版本 pinning。 取消不能留下半个 diff;冲突时重新基于最新 document snapshot 生成。 edit merge conflict、document token p95、selection miss、undo/replay success。
Agent 目标、计划、工具结果、浏览器/文件/terminal 状态和 checkpoint。 orchestrator 多轮调模型和工具;每轮推理都从 checkpoint 重建上下文。 每轮状态膨胀快,必须摘要旧步骤,只保留证据、未完成动作和安全约束。 background-capable lane,长任务可让出前台容量,工具和 GPU 分别限流。 用户接管、暂停或取消要写入 run state;已执行外部动作不自动重放。 steps/run、tool fanout、checkpoint size、handoff latency、background queue age。
Voice / Realtime 音频帧、转写 token、视觉/文本上下文和低延迟音频输出。 WebRTC/WebSocket transport + realtime model pool,音频输入输出要流式双向。 上下文持续增长,但更受端到端时延和抖动约束;长历史要滚动摘要。 realtime lane 独立保留容量,不能被长 prefill 或批处理任务挤压。 barge-in 要中断当前 decode 和音频播放;重连后恢复会话状态和音频 cursor。 audio round-trip p95、jitter、barge-in latency、session reconnect success。
Images / multimodal 图片 embedding、OCR/vision features、文本问题和可能的生成参数。 视觉 encoder 或图像模型专用池先处理,再与文本模型或生成 pipeline 汇合。 视觉 token/patch 和高分辨率输入显著放大 prefill 或 encoder memory。 multimodal lane 与纯文本池隔离;大图片、批量图片和生成任务单独排队。 取消要释放 encoder/GPU memory 和上传临时对象;重试复用已校验 media manifest。 vision token p95、media preprocess p99、GPU memory watermark、upload abandon rate。
Tasks / Pulse / Deep research 定时触发、研究计划、外部来源、阶段性摘要和最终报告。 scheduler/background worker 创建 run;GPU 推理只是多阶段工作流的一段。 单轮上下文可能很长,但不要求交互级 TTFT;可用 checkpoint 和摘要分阶段压缩。 background lane,按租户预算、deadline 和离峰容量调度,不抢前台聊天。 任务取消写 tombstone;失败按阶段重试,必须避免重复通知或重复外部动作。 background queue age、deadline miss、source freshness、checkpoint replay cost。
路由维度 怎么决策 系统设计要点
模型选择 quality tier、latency SLO、context length、tool / multimodal need 简单聊天走低成本快模型;代码、复杂推理、长上下文、语音/视觉和企业高质量请求走对应专用池。
区域和租户 home_region、data residency、tenant tier、enterprise isolation 路由先满足数据边界,再在同区域模型池内做负载、成本和 SLO 选择;跨区只作为明确的降级/灾备策略。
Region failover health check 摘除故障 GPU pool,按数据驻留判断能否跨区溢出 关键模型保留最小热备容量;未开始的可重试请求可跨区重放,已经开始生成的 stream 要明确中断、重连或重新生成语义。
灰度和回退 model_version、prompt_version、router_policy、safety_policy 每次回答记录路由原因和版本;新模型失败或质量回归时按租户、功能或流量百分比回退。
成本控制 token budget、max_output、tool budget、cache hit、batch pressure 模型越大不等于越好;高峰时可降低默认模型、缩短上下文、关闭昂贵工具或要求用户确认长任务。
架构 形态 取舍
单池 serving prefill 和 decode 在同一模型副本里排队 最容易实现,适合低流量或模型少的场景;长 prompt 会拖慢短回复,TTFT/TPOT 容易互相影响。
continuous batching 每个 iteration 重新装箱,generation 请求优先,新请求填剩余 token budget 高吞吐核心;要同时受 max_num_seqs、max_num_batched_tokens、free KV blocks 和 deadline 约束。
chunked prefill 长 prompt 拆成多个 context chunk,和 decode 交错执行 降低最坏 TTFT、避免长上下文卡住队列;chunk 太小会增加调度开销,太大又会伤害 decode 平滑度。
PD disaggregation prefill pool 负责读长上下文,decode pool 负责持续生成 适合长 prompt 和长回答混合的高峰流量;代价是 KV 传输、跨池调度和故障恢复复杂度。
调度点 做什么 为什么重要
Admission control tenant quota、model quota、input/output token budget、deadline 排队前先估算成本和风险;队列过深返回 retry_after 或降级模型,不能无限接入再让 GPU 崩。
Weighted fair queue 按 tenant、plan、conversation、model pool 分层加权 防止单个企业、长上下文或 Agent 批量任务饿死普通聊天;同租户内部还要限制并发 run。
Token packing max_num_batched_tokens、max_num_seqs、free KV blocks、deadline-aware batching 调度单位是 token 和 KV block,不是 HTTP request;高峰时优先保 decode 平稳,再塞 prefill chunk。
Backpressure queue depth、HBM watermark、stream relay buffer、client disconnect Stream Relay 写不出去时要暂停读、降采样 trace 或取消低优先级任务,避免把背压传到 GPU worker。
Cancel / timeout CANCELLING -> GPU stop ack -> release KV blocks -> final event 取消不等于 GPU 立即停;状态机要幂等,释放队列槽、KV block、tool lease 和计费 hold。
Worker failure / OOM worker heartbeat/lease、attempt_id、强制释放 KV blocks、终态幂等落库 未发出 token 的请求可在同模型池重试;已开始流式输出的请求不能静默重放,只能发 interrupted/reconnect/regenerate 语义。stop ack 丢失时由 lease 超时回收资源,避免 KV block 泄漏。
Long context chunked prefill、prefix cache、sliding / sparse attention、context cap 长上下文同时吃 prefill 时间和 KV;要按 p95/p99 长度做队列隔离,不能让 200k token 请求挤掉所有短聊天。
估算项 示例口径 注意事项
显存预算 70B BF16 权重约 140GB;TP=4 时每 GPU 约 35GB 权重,再留 workspace / comm / safety headroom 数字只做面试估算;真实还受量化、MoE、parallelism、runtime kernel 和 allocator 影响。
KV/token 示例 若 L=80、H_kv=8、D_h=128、B_e=2、TP=4,则约 80KB/token/GPU,再乘分页碎片系数 80GB GPU 扣除权重和工作区后若给 KV 25GB,大约只能容纳 300k 级 active token/GPU;p95 长上下文会快速吃满。
prefill fleet D_in = peak req/s * E[input tokens],再除以实测 input token/s/group 和目标利用率 例如 400 req/s * 8k token = 3.2M input token/s;若每组实测 80k 且目标利用率 0.7,需要约 58 组 prefill capacity。
decode fleet D_out = peak req/s * E[output tokens],再除以实测 output token/s/group 和目标利用率 例如 400 req/s * 500 token = 200k output token/s;若每组实测 6k 且目标利用率 0.7,需要约 48 组 decode capacity。
配置旋钮 max_num_batched_tokens、max_num_seqs、chunk size、KV watermark、queue max_wait 这些值靠压测调;目标不是单点吞吐最高,而是在 TTFT、TPOT、失败率和成本之间稳定。
优化 收益 成本和不适用场景
PagedAttention / paged KV 收益:减少 KV 碎片并让变长请求更容易混部 成本是 block manager 和调试复杂度;仍要监控 free block、eviction、prefix sharing 和 page overhead。
Speculative decoding 收益:低 batch 或长 decode 时减少目标模型串行 forward 次数 draft 命中率低、tokenizer 不一致、batch 已很大或 draft 成本过高时会倒退;要按任务类型开关。
Chunked prefill 收益:让长 prompt 让出 iteration,降低队列最坏 TTFT chunk size 会在 TTFT、TPOT 和调度开销间取舍;小请求可能因切块策略变慢。
Prefix cache 收益:复用完全相同的系统提示、项目指令、文件前缀或长上下文前缀 cache key 必须含模型、tokenizer、adapter、tenant、ACL、doc version 和 safety policy,防止越权复用。
Quantization 收益:降低权重或 KV 显存,提升吞吐或可放更大模型 不同任务质量损失不同;数学、代码、安全拒答、长上下文和工具参数都要单独评测。
PD disaggregation 收益:prefill/decode 分别优化 batch、队列和副本数 KV 传输、跨池故障恢复和 placement 复杂;只有隔离收益大于传输成本时才值得上。
关注点 生产契约 核心指标 降级策略 常见陷阱
Model warmup / cold start 每个模型版本、并行配置和量化形态都有 warm pool;上线前完成权重加载、kernel 编译、CUDA graph 捕获和小流量探活。 cold_start_seconds、warm_pool_ready、first_request_error、kernel_compile_latency。 新版本未 warm 好不接生产流量;低峰降副本时保留最小热备;冷启动请求返回排队或降级模型。 Kubernetes pod ready 不等于模型 ready;权重在、HTTP 活着,不代表首个真实长上下文请求不会超时。
Active stream version pinning 一次回答从首 token 到 final event 固定 model_version、tokenizer、adapter、safety_policy 和 sampling config。 stream_version_mismatch、midstream_restart、tokenizer_mismatch、final_event_missing。 滚动升级只影响新 run;旧 stream 继续在旧 worker 上结束,或显式 interrupted 后由用户重新生成。 中途把 stream 切到新模型会破坏 token 序列、计费、可复现性和用户看到的连续语义。
Rolling upgrade / canary router_policy 按租户、功能、区域和百分比灰度;每个回答记录 route_reason、model_version、prompt_version 和 eval bucket。 canary_error_delta、quality_regression、tool_call_delta、rollback_time、shadow_eval_gap。 按 feature 或 tenant 退回旧模型;只回滚路由策略时不动数据库和会话状态。 只看 HTTP 500 会漏掉质量下降、工具调用变多、输出变短和安全拒答异常。
Per-model SLO 每个模型池单独定义 TTFT、TPOT/ITL、tokens/s/GPU、queue age、KV block pressure 和 OOM 预算。 ttft_p95/p99、itl_p95、free_kv_blocks、gpu_util、hbm_watermark、oom_rate。 先保护 realtime/interactive lane;长上下文、background research 和低等级租户延迟或降模型。 把所有模型混成一个 P95,会掩盖大模型、语音模型、视觉模型和 agent lane 的不同瓶颈。
Cost attribution loop 每个 run 记录 input/output tokens、KV residency、tool wait、GPU seconds、cache hit 和 route decision,用于限额、定价和降级。 cost_per_answer、gpu_seconds/run、cache_hit_saving、wasted_decode_after_disconnect、tenant_budget_burn。 预算接近上限时缩短上下文、降低默认模型、关闭昂贵工具或转后台任务。 只按请求数计费或限流,会惩罚短问短答并放过超长上下文、agent 循环和无人读取的流式输出。
Capacity failover 按 region、model family、data residency 和 tenant isolation 准备故障迁移;未开始请求可重排,已开始 stream 语义化中断。 pool_unhealthy_seconds、failover_success、cross_region_blocked、retry_after_rate。 同区降模型、延迟后台任务、限制 max_output;跨区只在数据策略允许时启用。 把 GPU 池当无状态 Web 服务横向漂移,会踩到数据驻留、KV 不可迁移和流式输出不可静默重放。
Overload and backpressure admission 在 GPU 前拦截:按 token budget、deadline、KV 水位、stream relay buffer 和 tool queue 统一判断能否接入。 admission_reject、queue_age、kv_watermark、relay_buffer_bytes、client_disconnect_rate。 返回 retry_after、缩短输出、切更快模型、转后台或提示用户缩小文件范围。 HTTP 层无限接收请求,最后在 GPU OOM、Stream Relay 积压或客户端断开后才失败。

Prefill

读完整 prompt,计算历史 token 的状态,通常更偏 compute-bound。TTFT 里大头常是排队、prefill 和第一个 decode。

Decode

一个 token 接一个 token 生成,通常更偏 memory-bound。TPOT 受 decode batch、KV cache 访问和 HBM 带宽影响。

KV Cache

缓存历史 token 的 Key/Value,近似占用 2 * layers * kv_heads * head_dim * tokens * batch * bytes_per_elem,另有分页碎片开销。

PagedAttention

把 KV cache 像虚拟内存一样分页,减少碎片并支持不同长度请求混部。

Continuous Batching

每个 decode step 重新组 batch,完成的请求退出,新请求插入,提升 GPU 利用率。

Chunked Prefill

把长 prompt 的 prefill 切成块,穿插 decode,避免长请求霸占 GPU。

Prefix Cache

只能复用完全相同 token 前缀;cache key 要含模型、tokenizer、adapter、prompt prefix、tenant、ACL 和 doc version。

Speculative Decoding

小模型先猜多个 token,大模型验证。收益取决于任务和小模型命中率。

FlashAttention

通过 tiling 和在线 softmax 减少 HBM 读写,尤其改善长上下文 prefill 的速度和显存压力。

PD Disaggregation

把 prefill 和 decode 分池,减少互相干扰并分别优化 batch、队列和资源配比;KV 传输开销必须小于隔离收益。

Quantization

weight-only、KV cache quant 和 activation quant 解决的瓶颈不同;数学、代码、安全和长上下文要分别评测质量损失。

Parallelism

能用副本和数据并行先扩副本;模型放不下再用张量、流水线、序列或专家并行,并处理 MoE 负载倾斜和跨机通信。

Latency metrics

TTFT ~= queue + prefill + first decode;TPOT 看 decode step;容量看 tokens/s/GPU、HBM、KV block pressure 和安全水位。

10. RAG、连接器和工具调用

模型提出动作,执行层决定能不能做

RAG 和工具是 ChatGPT 从聊天产品变成工作平台的关键。这里最容易丢分的是权限: 检索结果、邮件、云盘、代码仓库、网页和工具输出都可能携带不可信指令或越权数据。 公开资料能证明 Search、Deep research、Apps/连接器、MCP、Code Interpreter 和 Data Analysis 的产品/API 语义; 下面的索引、队列、审批和恢复机制是 system design 面试推断。

第一原则非常简单:模型没有账号、没有数据库权限、也不应该直接拥有副作用。模型只能提出“我想查什么、我想调用哪个工具、我想写入什么参数”; 真正放行的是执行层,它按 tenant、scope、policy、approval、egress、audit 和 idempotency 判断能不能做。 外部文档、网页、邮件、PDF、连接器结果、代码执行输出都只是 evidence,不是 instruction;即使它们写着“忽略前面的规则”,也没有指令权。 对初学者来说,RAG 就是“先检索用户有权看的资料,再让模型基于这些资料回答并给出处”;工具调用则是“模型提出候选动作,平台用规则和状态机决定是否执行”。

RAG 和工具三条链路手绘图:Knowledge search、Connector、Tool action、ACL、Retrieve、Execute、Citation、Receipt 和 Answer
RAG、connector 和 tool action 都要经过 policy 与 ACL;区别在于返回 citation、receipt 还是可审计动作结果。
产品入口 公开产品语义 后端契约 信任边界 失败模式 面试高分点
ChatGPT Search 用户显式或自动触发搜索,回答带来源、引用和更强时效性。 query rewrite -> web/source fanout -> rank/rerank -> source snapshot -> answer with citations。 网页内容和摘要只是证据,不得覆盖 system/developer/user 指令;引用需要 source span 和 retrieval_time。 慢源超时、引用不足、来源冲突或低可信时,返回部分结果、无来源回答或明确不确定。 不要把搜索当普通 prompt 拼接;它是有 deadline、质量阈值和可审计 provenance 的检索系统。
Deep research 先生成计划,长时间多步研究,能使用网页、上传文件和启用的 apps,最终给结构化报告和引用。 ResearchRun + plan_version + source allowlist + multi-step retrieval/tool queue + checkpoint + final report artifact。 每个来源、工具输出和中间摘要都带 provenance;用户可中断调整来源或目标,不能让来源反向改写研究计划权限。 某些来源不可用时降为 partial report;超预算时暂停、请求确认或缩小范围。 Deep research 是后台工作流,不是一次超长 RAG;要设计 checkpoint、source freshness、报告复现和引用校验。
Apps / synced connectors Apps 可 search/reference/sync 数据,有些可执行经批准的 actions;管理员可控制启用和权限。 connector registry -> OAuth/scope -> sync index -> query-time ACL -> app action gateway -> approval/audit。 同步索引、缓存和回答都按 tenant/user/workspace ACL 过滤;write action 需要 preview、confirmation 和 admin policy。 OAuth 过期、scope 收窄、connector outage 或 sync lag 时 fail closed,避免注入过期或越权内容。 sync 提前建索引能降延迟,但权限、撤权和删除仍必须 query-time 生效。
File uploads / Data Analysis 用户上传文件后可分析表格、PDF、文本,生成表格、图表或代码支撑的分析。 upload -> malware/type/size check -> parse/OCR -> file index/artifact -> code interpreter container -> result sanitizer。 文件内容是 untrusted data;Python 结果、CSV/PNG artifact 和 stdout 进入上下文前要脱敏、截断和引用到 file/version。 解析失败、文件太大、容器超时或 quota 到顶时,提示缩小范围、抽样或转后台。 不要把文件直接塞模型;先把文件变成可索引、可采样、可审计、可删除的 artifact。
Agent tool execution Agent 可组合浏览器、连接器、终端或 API;高影响动作需要确认,用户可暂停/接管/取消。 AgentRun -> tool intent -> policy gate -> approval -> executor pool -> checkpoint -> sanitized observation。 模型只提出 intent;凭证、cookie、secret、网络出口和写权限只在执行层短时注入。 工具超时、用户取消、登录失效或外部动作不可逆时,进入 paused/cancelled/compensating,而不是静默重试。 Agent 的工具调用和 RAG 同源:外部世界不可信,副作用只能由状态机和策略层放行。
API MCP / custom tools Responses API 可接 remote MCP/connectors;工具调用可自动或要求开发者 approval。 tool registry -> list_tools cache -> schema validation -> approval request -> mcp_call -> result sanitizer。 远端 MCP server 会接收模型上下文和参数,必须被信任;server 自称 read-only 不等于平台策略放行。 tool schema drift、server 5xx、approval timeout、rate limit 和 malicious output 都要回到可解释 tool result。 tool schema 描述的是“长什么样”,不是“能不能做”;能不能做由 tenant/scope/policy/approval/audit 决定。
Canvas / Code Executor 边界 Canvas 支持选区编辑和版本恢复;代码/终端执行把结果回传给模型继续迭代。 document snapshot / diff / selection -> model edit/tool run -> patch preview -> optimistic merge -> version/audit。 代码输出、报错日志、网页片段和 diff 都可能夹带指令;只作为证据或 patch 候选,不直接拥有权限。 版本冲突、sandbox 失败、日志过长或 patch 不可应用时,保留 artifact 并要求用户选择或重试。 Canvas/Code Executor 是 RAG+tool 的局部化场景:上下文要小,版本要准,副作用要可撤销。
Score(c,q)=αBM25(q,c)+βcos(Eq,Ec)+γfreshness(c)δrisk(c)Grounded(a)=minclaimia maxspanjS support(claimi,spanj)\begin{aligned} \mathrm{Score}(c,q) &= \alpha\cdot \mathrm{BM25}(q,c)+\beta\cdot \cos(E_q,E_c)+\gamma\cdot \mathrm{freshness}(c)-\delta\cdot \mathrm{risk}(c)\\ \mathrm{Grounded}(a) &= \min_{\mathrm{claim}_i\in a}\ \max_{\mathrm{span}_j\in S}\ \mathrm{support}(\mathrm{claim}_i,\mathrm{span}_j) \end{aligned}

排序先把关键词、向量相似度、新鲜度和风险合成候选分;回答前再按 claim-to-source 支撑度检查, 低于阈值就不应强答。这里的 source span 仍是不可信证据,不能覆盖系统、开发者或用户指令。 BM25 可以理解为“关键词命中和稀有词更重要”,向量相似度可以理解为“语义相近也能召回”;高质量 RAG 通常把两者混合,再用 reranker 和权限过滤收窄证据。

模块 链路 面试必须补充
RAG ingestion webhook/poll cursor -> parse/OCR -> chunk -> embed -> shadow index -> validate -> alias swap 每个 chunk 带 doc_version、content_hash、chunker_version、embedding_model_version、index_version;新索引用 shadow build + 回放 golden set + alias swap,失败可回滚。
Index lifecycle incremental sync、staleness SLA、dual index、rebuild、rollback、delete/ACL tombstone 删除和撤权先写 tombstone 并让 query-time filter 立即生效,再异步清原文、chunk、embedding、BM25/vector、cache、引用、评测和训练候选。
Retrieval rewrite -> ACL filter -> hybrid/vector -> rerank -> pack -> cite 未授权 chunk 不能进入 rerank、prompt、日志或 trace;要有 no-answer threshold、freshness 和引用回链。
Tool gateway select -> schema -> policy -> sandbox -> dry-run/confirm -> execute -> sanitize 模型只提出意图;持久化 tool_call 状态、幂等键、审批快照、超时、重试、补偿、预算和审计。
MCP / Connectors trusted registry、server_label、allowed_tools、require_approval、admin controls 远端 MCP 会接收数据并可能写外部系统;不要信任 server 自报 read-only。出站参数预览、敏感字段脱敏、参数约束和高风险写动作确认必须在边界上做。
Tool executor sandbox isolated executor -> egress proxy -> secret broker -> result sanitizer CPU、内存、时间、网络、临时文件和租户隔离都由执行层控制;凭证只在执行层按 scope 注入,模型上下文不直接持有生产 token。
Context packing dedupe -> MMR/diversity -> source span -> token budget 不要只按相似度塞满上下文;要保留多样证据、结构化表格/代码片段和可引用 source span。
Citation / provenance source_id/url/file_id、doc_version、chunk_id、offset、retrieval_time、content_hash、index_version、ACL_version 引用是可审计证据,不只是链接;claim-to-source 校验失败时降级为 no-answer、要求更多权限或明确标注不确定。
RAG quality loop golden set -> retrieval metrics -> groundedness -> answer correctness -> hard negatives 同时评估 faithfulness、引用支撑、no-answer precision/recall、权限泄漏回归、新鲜度和线上反馈挖掘。
Delete / revoke delete tombstone / ACL tombstone -> query-time filter -> async purge 删除和撤权不同:撤权可保留索引但必须按 ACL/version tombstone 过滤,删除要从缓存和训练候选中清出。
Prompt injection 外部文档、网页、邮件、PDF、工具输出都只能是 evidence,不能升级成 instruction 所有 source block 带 untrusted/authority=no;工具结果进入 sanitizer 后才能回模型;检测到数据外发、越权指令或隐藏 prompt 时要阻断、降级或要求确认。
工具调用状态机手绘图:Proposed、Validated、Approved、Running、Observed、Recorded、Rejected、Failed 和 Cancelled
工具调用要有显式状态机:提出、校验、批准、运行、观察、记录;拒绝、失败和取消都必须有可审计出口。
状态 语义 恢复和审计
CREATED / VALIDATING 模型提出 tool call,执行层做 schema、tenant、scope、policy 校验 tool_call_id、idempotency_key、response_id、approval_required 要先落库,便于恢复和审计。
AWAITING_APPROVAL / DENIED 高影响动作展示 dry-run、目标对象、参数 diff 和风险说明 审批快照保存出站参数、数据接收方、管理员限制和用户选择;拒绝后把 DENIED 作为工具结果反馈给模型,而不是静默继续。
RUNNING / RETRYING 执行时带 timeout、retry budget、concurrency limit 和 cancellation token 只对幂等或带幂等键的动作自动重试;非幂等动作要回到用户确认。执行层通过 sandbox、egress proxy 和 secret broker 运行。
SUCCEEDED / FAILED / TIMED_OUT / CANCELLED 终态写结果摘要、错误类型、外部 request id 和用量 工具输出进入 sanitizer,去除不可信指令和敏感字段后才回到模型上下文。
COMPENSATING 需要撤销、退款、删除草稿、恢复配置时进入补偿状态 补偿不是模型自由发挥,而是预定义 workflow,结果同样进入审计和用户可见状态。
关注点 生产契约 核心指标 降级策略 常见陷阱
Fanout deadline 每个 source class 有 deadline、并发上限和 token/source budget;慢源不拖死前台回答。 source_p95/p99、deadline_miss、partial_answer_rate、fanout_width、citation_coverage。 返回 partial results、减少 source fanout、先答已验证来源、提示用户扩大时间或权限。 等待所有 connector/search/source 返回,会把首 token 延迟变成最慢外部依赖延迟。
Queue / backpressure 按 tenant、source、connector、tool type 和 foreground/background lane 建队列;admission 同时看 deadline、budget、inflight、worker lease 和 DLQ age。 queue_age、inflight_calls、lease_timeout、dlq_age、load_shed_rate、foreground_protection。 返回 retry_after、缩小 fanout、转后台、丢弃低优先级 sync、暂停批量 deep research,优先保护前台聊天和已确认写动作。 只在外部 provider 报错后才背压,会让内部 worker、连接池、sandbox 和 Stream Relay 先被打爆。
Connector sync outage 同步链路按 webhook/poll cursor 写 checkpoint;索引 stale 要可见,query-time 仍必须查权限和 tombstone。 sync_lag、cursor_age、webhook_drop、index_staleness、alias_swap_failure。 展示 source stale、切实时 fetch、关闭该 connector、回滚 alias 到上一版索引。 把离线索引当 truth,导致 connector 停更后继续引用已删除或已撤权内容。
Credential revoke / ACL change OAuth revoke、scope 收窄、成员移除、文件删除先写 tombstone,query-time filter 立即 fail closed。 revoke_propagation_lag、acl_unknown_rate、tombstone_hit、stale_source_blocked。 跳过该来源、要求重新授权、重建索引、清缓存和训练候选。 只在离线 sync 阶段过滤 ACL,在线检索召回后才发现越权,甚至已进入 rerank/prompt。
External rate limit 对每个 provider/app/tool 做令牌桶、预算、retry_after 解析和租户隔离,不能把外部限流传染到核心 chat。 provider_429、retry_after_obeyed、budget_burn、tenant_throttle、fallback_rate。 降 fanout、使用缓存摘要、排队后台 sync、提示用户稍后重试或选择其他来源。 所有租户共享一个 provider token bucket,单个企业的大批量 deep research 拖垮全站 connector。
Tool timeout / cancel / retry 每个 tool_call 有 timeout、attempt_id、idempotency_key、cancel token 和 retry budget。 timeout_rate、cancel_ack_lag、duplicate_write_blocked、retry_success、tool_wait_ratio。 可幂等读自动重试;非幂等写回到 approval;取消后停止 flush late result 并释放 sandbox/lease。 把 timeout 后的未知外部状态当失败重试,可能重复发邮件、下单、改权限或写数据库。
Exactly-once myth 内部事件 at-least-once + 幂等消费;外部副作用用 outbox、provider request id、dedupe key、dead-letter 和补偿 workflow。 outbox_lag、dedupe_hit、dead_letter_age、compensation_success、unknown_external_state。 进入 NEEDS_REVIEW/COMPENSATING,向用户展示未知状态,不让模型自由猜测。 承诺 exactly once,会在网络断开、provider 5xx、客户端取消时制造重复副作用或丢审计。
Audit / compliance export 保存 retrieval_snapshot、tool_call、approval_snapshot、external_request_id、policy_version、source manifest 和脱敏 trace。 audit_missing、snapshot_replay_success、redaction_error、compliance_export_lag。 缺审计的高风险动作不执行;导出失败进入重试/告警,不影响低风险检索。 只记录最终回答,不记录模型看过哪些 source、发出哪些参数、用户确认了什么。
Prompt injection 所有外部 source/tool output 都按 untrusted data;高权限指令与证据分通道,写动作过 policy/approval。 injection_detected、unsafe_action_blocked、data_exfil_attempt、source_authority_violation。 移除来源、只引用安全摘要、禁写工具、要求用户确认或拒绝。 把网页/邮件文字拼到 system prompt 附近,模型可能把攻击者文本当成高优先级命令。

11. Agent 系统设计

Agent 的本质是有权限边界的长任务运行时

ChatGPT agent 的公开产品形态已经不是单轮工具调用。它能在自己的虚拟计算机里组合视觉浏览器、 文本浏览器、Code Interpreter/终端、直接 API 和 Apps/连接器;但 sync app 数据有单独限制,不能被简单视作 Agent 可直接读取的全局索引。系统设计要回答:怎么计划、怎么执行、怎么让用户接管、怎么确认高风险动作、怎么限流、 怎么恢复和审计。

公开资料能证明虚拟计算机、浏览器、代码执行、Apps、用户接管、Watch Mode、高影响动作确认、并发限制、数据驻留和保留策略这些产品语义; 本章下面的队列、状态机、lease、checkpoint、outbox、补偿和多执行池隔离,是面试中基于这些语义推导出的后端设计。 面试官真正想听的是:Agent 不是“让模型自己上网办事”,而是“模型提出下一步,运行时用可恢复状态机和权限策略决定是否、何时、在哪里执行”。

Agent = model plans; runtime owns permission, state, execution, retry and audit.
Agent Gateway tenant isolation, quota, concurrency limit scoped credentials; create run, resume, cancel, user takeover
Planner / Reasoner proposes next step reads checkpoint and observations, not raw credentials
Tool Router choose browser / code / app / API binds schema, scopes and idempotency key
Permission gate allow / approval / block Watch Mode, scoped credentials, user takeover
Task Queue lease, checkpoint, retry, deadline resume after worker crash; cancel is idempotent
allowed -> Task Queue needs approval -> Watch Mode / user takeover blocked -> Durable state + audit
Task Queue fanout leased work + scoped credentials are dispatched to isolated executor pools
Browser pool visual/text browser
Code pool terminal / Python / sandbox
App/API pool connectors / direct API
Sandbox pool files, browser session, artifacts
All executor pools -> Durable state / audit / outbox run state, checkpoint, tool receipt, trace feedback loop -> Planner / Reasoner; audit and notification fanout
Agent VM / Sandbox isolated browser, terminal, files and trace
Planner / Reasoner visual browser text browser terminal / code task state / files browser session / trace
Policy / credential / egress gate sandbox isolation, scoped credentials, network / egress policy, confirmation, audit Watch Mode, user takeover, high-impact confirmation and state persistence happen here.
External world apps, connectors, direct API, websites, files
apps / connectors direct API external network enterprise data
Outbound path Agent VM call -> Gate decision -> External action All tool / API / app / network calls pass through the gate.
Return path External result -> Gate receipt -> Untrusted evidence Nothing returned by a tool is trusted until it is checked and cited.
Returned data is untrusted evidence sanitize -> cite/verify -> persist audit, receipt, checkpoint
Raction=wdDdata+wiIimpact+wrPirreversible+wxXexternalGuardrail={auto,confirm,watch,takeover,refuse}\begin{aligned} R_{\mathrm{action}} &= w_dD_{\mathrm{data}}+w_iI_{\mathrm{impact}}+w_rP_{\mathrm{irreversible}}+w_xX_{\mathrm{external}}\\ \mathrm{Guardrail} &= \{\mathrm{auto},\mathrm{confirm},\mathrm{watch},\mathrm{takeover},\mathrm{refuse}\} \end{aligned}

Agent 不是按“模型想不想做”来放行,而是按数据敏感度、外部影响、不可逆性和外发目的地给动作分级。 风险越高,就从自动执行升级到确认、Watch Mode、用户接管或直接拒绝。

模块 职责 面试必须补充
Agent Gateway 创建 AgentRun、校验用户/租户/计划、写入目标、预算和可见约束 入口只接受用户目标,不直接授予生产权限;run_id、conversation_id、tenant_id、model_version 和 policy_version 先落库。
Planner / Reasoner 把目标拆成 plan_version 和下一步 tool intent 计划可被用户改写或暂停;模型只能提出 intent,不能绕过 Tool Router 自行访问 Apps/连接器、浏览器 cookie 或终端凭证。
Tool Router 在 visual browser、text browser、terminal、direct API、Apps/连接器间选择执行面 同一目标可在工具之间切换,例如文本浏览器找资料、视觉浏览器登录、终端处理文件、API 写日历。
Policy / Permission 动作分类、数据敏感度、外部接收方、管理员策略、确认和 Watch Mode 高影响或不可逆动作必须展示 dry-run、目标对象、参数 diff 和数据接收方;敏感站点要求用户在场。
Task Queue 按 tenant/plan/model/tool pool 排队,发放 worker lease 和 cancellation token 限制 per-user concurrent runs;worker heartbeat 失效后从最近 checkpoint 恢复,幂等步骤可重试,非幂等步骤回到确认。
Executor Pools browser VM、text browser、terminal sandbox、API action、app/connector fetch/write 每个执行池有独立网络出口、资源预算、凭证注入和 result sanitizer;终端尤其要限制 CPU、内存、磁盘、时间和 egress。
Durable State / Audit AgentRun、AgentStep、ToolCall、artifacts、screenshots、approvals、trace replay 每步结束 checkpoint;用户能看到部分结果、暂停/继续/取消,审计日志脱敏但可复盘关键决策。
CREATED run accepted idempotency key, tenant, user, budget
PLANNING plan and risk score tool candidates, step budget, policy context
AUTH / APPROVAL GATE AWAITING_AUTH -> AWAITING_APPROVAL OAuth grant, scoped credential, high-impact confirmation
EXECUTING_TOOL call tool through gate timeout, retry key, receipt, external side effect
CHECKPOINTING persist step result state snapshot, trace span, next cursor
SUCCEEDED / FAILED terminal response final answer, failure reason, audit fanout
Pause / resume loop
PAUSED RESUMING EXECUTING_TOOL
restore from checkpoint, replay only idempotent work, then continue execution
Cancel / compensation path
CANCELLED COMPENSATING FAILED / CANCELLED
stop new work, use receipts/outbox to undo or explain irreversible side effects
Durable state run_state, step_state, checkpoint, resume_cursor
Trace / observability plan, approval, tool call, token, latency and error spans
Idempotency / outbox retry keys, tool receipts, compensation record, notification fanout
状态 语义 恢复和权限边界
CREATED / PLANNING 目标、预算、策略版本、初始计划落库 计划不是承诺执行;进入执行前仍要经过 tool schema、权限和风险分类。
AWAITING_AUTH 需要登录、OAuth、app/连接器授权或 browser takeover 密码、验证码和会话恢复信息不写入模型上下文;用户接管时模型只看到允许回传的页面状态。
AWAITING_APPROVAL 等待用户确认高影响动作 确认页展示 dry-run、目标对象、参数 diff、数据接收方、是否可撤销和费用影响;拒绝会作为工具结果反馈给模型。
EXECUTING_TOOL 带 worker lease、timeout、retry budget、idempotency key 和 cancel token 执行 用户取消要传播到浏览器/终端/API 执行层;不可中断的外部动作要写 pending 状态并轮询终态。
CHECKPOINTING / PAUSED / RESUMING 每个 tool step 后保存状态,用户离开或 Watch Mode 需要监督时暂停 恢复时从 durable state 重建浏览器会话、文件、计划和上一步结果;不能重放已经成功的非幂等动作。
SUCCEEDED / FAILED / CANCELLED / COMPENSATING 写终态、部分结果、错误原因、通知和补偿 workflow 失败可进入 DLQ 供离线排查;补偿只执行预定义流程,例如删除草稿、撤销预订或恢复配置。
对象 状态 必须持久化 重试/取消语义 补偿语义
AgentRun CREATED / PLANNING / RUNNING / PAUSED / SUCCEEDED / FAILED / CANCELLED run_id、tenant_id、user_id、goal、plan_version、policy_version、budget、home_region、data_residency。 run 级 cancel 是幂等 tombstone;恢复时重新装载计划、预算、工具输出和最后 checkpoint。 只输出 final report、partial results 和 pending external actions;不假装未确认或未知动作已经成功撤销。
AgentStep READY / LEASED / EXECUTING / CHECKPOINTED / RETRYING / DLQ step_id、run_id、dependency、worker_lease、heartbeat_at、attempt_id、input_snapshot_hash。 只有纯读或幂等 step 自动重试;worker lease 过期后从 checkpoint 接手,不能重放已成功的非幂等动作。 DLQ 保存输入快照、工具参数、错误类型和最近 trace,供人工或离线 replay 定位。
ToolCall CREATED / VALIDATING / RUNNING / TIMED_OUT / UNKNOWN / SUCCEEDED / FAILED tool_call_id、schema_version、idempotency_key、provider_operation_id、deadline、args_hash、egress_scope。 cancel 要传到浏览器、终端或 API provider;外部状态 UNKNOWN 时先查询 provider_operation_id,不盲目重发。 非幂等副作用用 provider status 决定补偿路径,例如撤销草稿、取消预订、删除临时文件。
Approval / DryRun REQUIRED / PRESENTED / APPROVED / DENIED / EXPIRED approval_snapshot、diff、recipient、data_destination、risk_level、policy_reason、user_decision。 重试不能绕过已要求的确认;参数、收件人、数据来源或风险级别变化后必须重新展示 dry-run。 DENIED/EXPIRED 作为工具结果反馈给模型,模型只能改计划或请求更窄授权。
ToolResult OBSERVED / SANITIZED / ATTACHED / SUPPRESSED result_uri、redaction_event、source_manifest、stdout/stderr、artifact_ids、taint_flag。 工具输出永远是 untrusted data;被 suppress 的结果不进入模型上下文,只保留审计和用户可见错误。 若结果含敏感数据或注入指令,返回安全摘要、引用或阻断原因,而不是把原文继续喂给模型。
Compensation NEEDED / RUNNING / SUCCEEDED / FAILED / MANUAL_REVIEW compensation_plan_id、external_request_id、provider_status、manual_review_reason、audit_link。 补偿 workflow 也是状态机,带幂等键、限次重试和人工升级;不能由模型自由编排撤销动作。 用户看到原动作、补偿动作、剩余未知状态和下一步处理人,避免黑盒失败。
动作 默认策略 确认/接管细节
读公开网页 / 搜索 默认可自动执行,但网页内容按不可信输入处理 需要记录来源、时间和截图/文本摘要;页面里的指令不能覆盖系统、用户目标或工具策略。
读私有 Apps / 连接器数据 需要用户授权、管理员启用和 query-time scope/ACL;sync app 数据不能默认当作 Agent 直接工具索引 邮件、云盘、代码仓库和日历数据不能被外发到无关站点;实时 app、sync app 和 Deep research 来源要分别记录 scope、引用和数据外传检查。
填表 / 保存草稿 可执行到草稿或待提交状态,提交前确认 确认内容包括页面、目标对象、字段 diff、收件人/商家/组织和是否会触发外部通知。
发邮件 / 发消息 / 改日历 高影响写动作,要求用户确认;敏感站点可能要求 Watch Mode 确认前展示收件人、主题、正文摘要、附件和数据来源;用户离开时暂停,不能后台发送。
购买 / 预订 / 改权限 / 删除 不可逆或高成本动作,通常 require approval + Watch Mode,有些任务直接拒绝 支付、转账、权限扩散、大规模删除和法律/医疗等高风险动作必须更保守;拒绝也要解释可替代的低风险步骤。
登录 / 密码 / 验证码 browser takeover,用户输入敏感值,模型不读取原文 接管期间只保留恢复运行所需的最小会话状态;用户交还控制后再恢复页面状态采集。已有浏览数据、cookies 和非接管截图按数据控制策略保留或清理。
执行面 隔离和凭证 结果处理
Visual browser 远程浏览器/虚拟计算机,受站点 allow/deny、Watch Mode 和 cookie/session 策略约束 非接管步骤的截图、DOM 文本和下载文件进入 sanitizer;takeover 期间暂停这些信号进入模型和 trace。页面注入指令按 hostile content 处理。
Text browser 轻量抓取和阅读,不共享视觉浏览器的全部交互状态 适合搜索、摘要和引用;仍要做 robots/访问策略、PII 脱敏、来源记录和 prompt injection 检测。
Terminal 容器/VM 沙箱,限制 CPU、内存、磁盘、时间、进程数、网络出口和临时文件 凭证通过 secret broker 临时挂载,命令输出和生成文件经扫描后回到模型;默认不能访问用户本机文件系统。
Direct API 结构化 schema、OAuth/API key、idempotency key、rate limit 和审计 写动作按风险矩阵确认;失败时用外部 request id 查询终态,避免重复下单、重复发信或重复改配置。
Apps / Connectors 按登录用户、管理员策略、实时 app/sync app 能力和 query-time scope 读取或写入第三方系统 结果标记来源、scope、retrieval_time、ACL version 和 sync caveat;Agent 不能把所有 sync app 预索引数据当成直接可读,跨租户、跨用户、跨 workspace cache 禁止复用。
主题 设计 观测和评估
长任务调度 tenant/plan 队列、per-user concurrent run limit、priority、lease、heartbeat、DLQ 30 分钟任务不能绑死单个进程;每步 checkpoint,worker 挂了从 durable state 恢复,用户收到部分结果和完成通知。
取消和恢复 cancel token 传播到 browser/terminal/API;PAUSED run 可 resume 或 expire 已开始的外部写动作不能假装取消成功,要展示 pending/unknown 并轮询或人工处理。
Admission / Budget / Region 按 plan、tenant、region、data residency、tool pool、monthly limit、concurrent task limit 和成本预算做 admission 指标包括 queue_age、budget_burn、rate_limit_hit、region_pool_pressure、tool_cost/run;降级为缩小计划、切低成本模型、暂停后台 step、要求用户确认或转人工。
Agent eval task success、tool choice accuracy、confirmation recall、critical confirmation recall 评估要覆盖漏确认、误确认、错误工具、错误恢复、Watch Mode 中断和用户接管后的状态一致性。
Security eval prompt-injection pass rate、data exfiltration attack success、destructive action block rate 攻击样本来自网页、邮件、文档、工具输出和终端日志;每个版本都跑回归,失败样本进入红队和策略更新。
Trace replay step trace、screenshot、tool args/result、approval snapshot、policy decision、redaction event 审计日志既要能复盘,又不能泄漏密码、token、验证码、私有文件全文或无关连接器数据。

Visual browser

能点击、滚动、输入,适合人类页面。设计上要有浏览器会话、截图、DOM/视觉状态和接管模式。

Text browser

适合大规模文本检索和阅读。比视觉浏览器便宜,便于摘要和引用。

Terminal

运行命令、处理文件、生成表格或幻灯片。必须限制网络、CPU、内存、磁盘和执行时间。

Direct API

直接 API 适合结构化动作,例如日程、表单或仓库操作;执行前要过 schema、scope、策略和确认。

Apps / Connectors

实时 app、sync app、Deep research 可用来源要分开建模。Agent 不能把所有 sync app 数据当成可直接读取的索引。

Browser takeover

需要登录或输入敏感信息时让用户接管浏览器;接管期间暂停截图、DOM 和键盘输入进入模型上下文或可回放 trace。

Human control

用户可暂停、接管、补充说明、停止任务;高影响动作必须显式确认,敏感站点额外启用 Watch Mode,用户离开则暂停。

Task durability

长任务要有计划、步骤、事件日志、checkpoint、重试、部分结果和完成通知。

12. Canvas 系统设计

Canvas 是 artifact 协同编辑,不是把长答案放到右侧

Canvas 要支持写作和代码项目:用户能直接改,模型能做局部编辑,页面能展示 inline comments、 版本历史、代码预览和错误修复。它的核心数据不是 message,而是可演进的 artifact。 当前公开帮助页还给出两个产品边界:Canvas 可在 Web、Windows 和 macOS 使用,移动端仍是 coming soon; Canvas 不适用于 pro-series models。React/HTML 预览在 sandbox 中运行,Python 执行目前只支持 Python; Enterprise 可控制代码执行和网络访问,且默认关闭 Canvas 代码访问网络。

先用一个端到端例子理解:用户选中一段代码,ChatGPT 给出 inline suggestion;服务端把 suggestion 存成基于 `base_version_id` 的 patch,而不是直接覆盖全文;Patch worker 重新定位 range、检查冲突、提交新版本; 预览沙箱只拿新版本运行,导出和分享也绑定明确的 version。这样用户能撤销、查看 Show changes、恢复旧版本, 后端也能在断线、重试、模型改错和并发编辑时解释“谁基于哪一版改了什么”。

Canvas artifact v12 Article / code file

Block tree, current_version_id, tenant ACL, preview policy

paragraph block selected range + anchor_id next block
Model collaboration Inline comment + patch

Selection context -> edit intent -> structured diff

rewrite this selection, keep tone
- old sentence + revised sentence
Patch validation base_version + anchor + ACL

permission gate, conflict check, anchor drift repair, policy/audit

ACL ok anchor remap conflict check audit event
Version commit artifact_version v13

append immutable version, store patch, move current pointer

v11 v12 base v13 patch
Preview / export / share derived artifact

Sandbox preview, signed export, share link pinned to version

preview export share v13
User action / selection selection, block_id, base_version captures cursor, selected range, artifact id and client mutation id
Canvas API auth, ACL, rate limit, idempotency normalizes patch request and writes request event
Model edit planner context build -> structured patch minimal context window, style hints, block anchors and eval sample tags
Patch queue async worker boundary retry key, ordering by artifact, backpressure and cancel signal
Patch worker reanchor, merge, conflict check reject stale base, repair anchor drift or ask user to resolve
Version store append artifact_version immutable patch, current pointer, undo/restore and show changes
version committed stable version id fans out to preview, export/share and replayable audit
trigger preview read stable version for export/share append commit event
Sandbox / preview isolated render job code preview, Python console, egress policy and error capture
Side data flow Operational sidecar data is written alongside the main path, then reused for replay, eval and indexing.
all stages -> audit log audit + patch + preview -> replay/eval version store -> storage index
Audit log API, planner, worker, preview and export append policy and actor events
Replay / eval read audit log, patch, preview error and user feedback to rebuild the run
Storage index version store publishes artifact metadata, DAG, object blobs and ACL snapshot
Canvas artifact: launch-plan.md current version v12 autosaved

Launch plan draft

We will introduce the feature gradually, starting with internal users and expanding after quality gates pass.

A1 selected range: rollout paragraph patch target: replace this block only A2

The rest of the document remains untouched while preview and export bind to the saved version.

- expand after quality gates pass + expand after SLO, safety and support gates pass
Inline suggestion Apply patch to selected range only anchor A1-A2, base v12, conflict check before commit
Version state v12 base -> v13 after apply Show changes, undo, restore previous version
Artifact current_version_id -> v13 acl_policy snapshot current pointer -> Version v13
Version v12 immutable snapshot content_hash, created_by base version
Patch base_version = v12 range_anchor A1-A2 re-anchor / conflict check
Version v13 immutable committed diff show changes: v12 -> v13 new current pointer target
SandboxRun preview/error on v13 error receipt from v13 run binds to version id
Patch v14 base_version = v13 created from fix bug new patch, not mutation of v13
Patch chain: v12 + range anchor -> v13 Show changes compares immutable versions Restore: current pointer v13 -> v12; old versions stay immutable
Apply(p)={commit(p),pbase=vcurrentanchor_valid(p)reanchor(p)rebase(p),pbasevcurrentconfidenceτask_user,otherwise\mathrm{Apply}(p)= \begin{cases} \mathrm{commit}(p), & p_{\mathrm{base}}=v_{\mathrm{current}}\land \mathrm{anchor\_valid}(p)\\ \mathrm{reanchor}(p)\rightarrow\mathrm{rebase}(p), & p_{\mathrm{base}}\neq v_{\mathrm{current}}\land \mathrm{confidence}\ge\tau\\ \mathrm{ask\_user}, & \mathrm{otherwise} \end{cases}

这里的 p 是一次模型或用户生成的 patch,p_base 是它基于的版本。只有 base version 仍然是当前版本、 且 range anchor 还能可靠定位时才直接提交;否则进入 re-anchor / rebase,置信度低就让用户确认。

模块 职责 面试必须补充
Client editor 右侧 artifact editor、selection、inline comment、show changes、preview console 本地编辑要低延迟;服务端仍是版本真源,断线后按 last_seen_version 补事件。
Canvas service Artifact API、版本提交、patch 校验、ACL、事件广播 所有用户编辑、模型 patch、shortcut 和恢复版本都走同一条 versioned write path。
Model edit planner 决定 open canvas、targeted edit、rewrite、inline critique、shortcut action 官方 Canvas 重点训练了何时打开、何时局部编辑、何时重写和如何给内联建议;系统要把这些决策记录成 eval 样本。
Patch worker 把模型输出转换为结构化 patch,做 re-anchor、merge、commit 或冲突提示 模型生成的是建议,Patch worker 负责把它变成可重放、可审计、可回滚的数据变更。
Artifact / Version store 保存当前 artifact、不可变版本、diff、content hash、评论、分享和审计事件 回滚不删除历史,只追加 restore event 并移动 current_version_id,便于 Show changes 和审计。
Sandbox / preview service React/HTML sandbox、Python execution、console/error、Fix bug 闭环 预览和执行不是编辑主路径;sandbox down 时降级为只读代码/文档编辑和版本历史。
Share / export service 分享 canvas asset,导出 PDF/Markdown/Word 或按语言导出代码文件 分享可指向 live artifact 或固定 version;企业策略控制 scope、expiry、revocation 和下载能力。
对象 核心字段 设计边界
Artifact artifact_id、type、owner_id、tenant_id、project_id、current_version_id、head_branch_id、acl_policy、created_from_message_id type 区分 document、code、React/HTML asset;Chat message 只引用 artifact,不承载全文版本历史。主查询路径是 tenant_id/project_id/artifact_id -> current_version。
ArtifactVersion version_id、artifact_id、branch_id、parent_version_ids、merge_base_version_id、content_hash、snapshot_uri、diff_uri、author、source、created_at 版本不可变,可形成 DAG;source 标明 user edit、model patch、shortcut、restore、import,方便审计、Show changes 和回滚。
Patch patch_id、base_version_id、target_branch_id、range_anchor、operation、status、idempotency_key、model_version、trace_id operation 可以是 replace/insert/delete/comment/apply_suggestion;status 覆盖 proposed、applied、rebased、conflict、rejected。
RangeAnchor start_offset、end_offset、selection_hash、prefix_window、suffix_window、block_id、ast_node_id offset 快但会漂移;hash、上下文窗口、Markdown block id 或 AST node id 用来在用户继续编辑后重新定位。
InlineComment comment_id、anchor、suggestion_patch_id、state、author、thread_id、resolved_at Apply 按 suggestion_patch 走同一套 base_version 校验和 rebase;关闭评论不等于删除历史。
SandboxRun run_id、artifact_version_id、runtime、network_policy、resource_limits、stdout、stderr、error_span Python console、React/HTML preview 和 Fix bug 都用结构化错误回传,不把任意日志无边界塞回模型。
Block / Chunk block_id、parent_id、ordinal、text_range、chunk_uri、token_count、embedding_version、ast_path、last_indexed_version_id 长文档不能每次全量读写;按 Markdown block、代码 AST node 或 rope chunk 做局部索引、局部渲染和局部重新 embedding。
ShareLink share_id、artifact_id、version_id/live、scope、expires_at、revoked_at、viewer_policy 撤权要同时停用链接、预览缓存和导出下载;企业管理员可禁止外部分享或网络预览。
关注点 设计 查询路径 恢复 指标 常见陷阱
长文档编辑结构 客户端用 piece table/rope 或 block tree 承载大文档;服务端保存 block/chunk manifest,局部 patch 只重写受影响 chunk。 artifact_id + version_id -> manifest -> changed block_ids;编辑器按 viewport 和选区懒加载附近 blocks。 manifest hash 不一致时回退到最近完整 snapshot;后台重建 chunk index、search index 和 embedding index。 doc_open_p95、patch_bytes/doc_bytes、chunk_rebuild_lag、viewport_render_ms。 每次模型局部修改都全量保存 100k 行文档,会把版本库、diff、预览和移动端全部拖垮。
快照和 diff compaction N 个版本或累计 diff 超阈值后生成 compressed snapshot;旧 diff 保留审计摘要和 cold storage 指针。 current_version 读最近 snapshot + tail diffs;Show changes 读两个版本的 snapshot/diff plan。 compaction 失败不影响写入,只增加读放大;成功后用 checksum 验证可重放。 diff_chain_length、snapshot_build_lag、version_replay_ms、storage_bytes/artifact。 只存 diff 不存周期快照,灾后或打开旧版本时需要重放几千次 patch。
Range / comment 索引 每个 inline comment 和 suggestion 同时保存 offset、block_id、prefix/suffix、selection_hash、AST path 与 semantic label。 artifact_id + version_id -> active anchors by block_id;打开某段时只加载该段评论和 suggestions。 anchor confidence 低时标成 needs_reanchor,不自动 apply;展示给用户重新定位或关闭建议。 anchor_relocate_success、anchor_miss、comment_load_ms、stale_comment_rate。 只存 start/end offset,用户在前面插入一段后所有评论都漂移到错误文字上。
热文档缓存 current manifest、最近版本、评论摘要和预览状态进 per-tenant cache;写入后通过 version seq 失效。 tenant_id/project_id/artifact_id + current_version_seq;缓存值永远带 acl_policy_version 和 content_hash。 缓存缺失直接读主存储;缓存版本落后时客户端按 server seq 补事件。 cache_hit、stale_cache_blocked、event_catchup_ms、read_after_write_miss。 跨 tenant 复用 artifact cache 或不带 ACL version,会把私有 Canvas 泄漏给错误用户。
搜索和模型上下文 为文档 outline、headings、changed blocks、code symbols 和 recent edits 建派生索引;模型只拿相关片段和 manifest。 goal/selection -> block retrieval -> context pack;大文档回答不把全文塞入上下文。 索引滞后时用当前 version manifest 做局部扫描;提示 freshness 降级,避免基于旧版本强答。 context_pack_tokens、index_freshness_lag、selection_miss、symbol_lookup_latency。 把整篇文档复制进 prompt,会同时浪费 token、增加延迟,还容易让模型改错范围。
问题 设计 失败处理
Targeted edit 用户选区或 block comment -> range_anchor -> model patch -> preview diff -> apply 没有选区时才考虑 rewrite;选区存在时模型只应改目标范围,并解释相邻上下文是否受影响。
Anchor drift offset mismatch -> content hash check -> prefix/suffix match -> block/AST re-anchor confidence 低于阈值 τ 时不要硬套 patch;提示用户重新选择范围或展示冲突 UI。
Optimistic concurrency 所有写入携带 base_version_id 和 idempotency_key base 等于 current 且 anchor valid 直接提交;否则 rebase/merge。重复提交同一幂等键返回同一结果。
Merge strategy 文档用文本 diff + block anchors;代码优先 AST-aware patch,再回退三方 merge 服务端可串行提交,也可用 OT/CRDT 做多人实时协作;面试里先说明当前 ChatGPT 单用户/轻协作场景可用串行版本化写入。
Branch / merge-base 用户本地编辑、模型建议和快捷动作都基于同一个 base_version_id;分叉时记录 branch_id 和 merge_base_version_id 模型 patch 落后于用户编辑时,先三方 merge;merge-base 不清楚时不能强行覆盖当前文档。
Show changes / rollback Show changes 比较两个 ArtifactVersion;restore 追加新版本或 restore event 回滚不覆盖历史;当前版本指针改变后,后续 patch 必须基于新的 current_version_id。
层次 负责人 状态 冲突处理 回滚语义 错误答案
Local undo / redo 浏览器编辑器 只管理用户尚未提交或最近本地操作栈,指向 last_seen_version_seq。 收到服务端新版本后,本地 undo 栈按 transaction mapping 重写;无法映射则清空并提示。 撤销只生成新的本地 transaction,不直接删除服务端版本。 把本地 undo 当成服务端回滚,会让另一个窗口或模型 patch 看到不存在的历史。
Canvas previous version 产品 UI 顶部版本箭头浏览 ArtifactVersion DAG 上的历史节点,可复制、对比或恢复。 浏览旧版本期间 current head 可能继续变化;旧版本视图默认只读,恢复需要新建 restore patch。 restore 追加 Version vN+1,parent 指向当前 head,restored_from 指向旧版本。 直接把 current_version_id 指回旧版本会丢掉之后的历史和审计解释。
Model patch Model edit planner + Patch worker 模型输出基于 base_version_id、selection/range_anchor 和 instruction_snapshot。 base 落后时先 re-anchor,再用 merge-base 做三方 diff;低置信度进入 conflict UI。 模型改错时 revert 也是新 patch;保留原模型版本、prompt、selection 和 diff。 让模型重新生成全文覆盖用户并发编辑,是 Canvas 面试里最常见的灾难答案。
多人/多窗口并发 Canvas service 每个 writer 按 artifact_id 分区串行提交,或在强协作模式使用 OT/CRDT op log。 串行模式用 optimistic lock;实时协作模式把 op 转换/合并后再形成 canonical version。 服务端只回滚指针或追加补偿版本,不删除已经广播的 event seq。 既说支持多人实时协作,又只用 last-write-wins,会覆盖用户内容且无法解释。
Server rollback / disaster restore 存储和审计系统 snapshot、diff、op log、audit log、share/export manifest 分开备份,按 artifact version seq 重建。 灾后恢复时先冻结写入,重建 current heads,再补发 event catch-up 给客户端。 按 tenant/project 维度做 point-in-time restore;分享固定版本优先保持可解释。 只备份当前文档文本,不备份版本、评论、分享、审计和预览产物,恢复后产品语义会碎掉。
能力 运行边界 安全和修复闭环
React/HTML preview sandboxed iframe、独立 origin、CSP、postMessage allowlist、resource budget Web content 可能向第三方通信;未知第三方通信要让用户确认,企业可默认关闭网络访问。
Python execution 浏览器/受控执行环境、stdout/stderr/exception structured event、Fix bug shortcut 当前 Canvas Python 执行会在底部 console 展示输出;错误建议和 Fix bug 生成 patch,仍走版本/冲突流程。
Dependency policy 包解析、lock/cache、allowlist/denylist、size/time budget React/HTML 支持 npm/常见库时也要控制安装时间、包体积、供应链风险和跨用户缓存隔离。
XSS / data exfiltration DOM sandbox、network egress confirmation、secret isolation、preview storage reset 不要把聊天里的私密信息自动注入 web preview;预览脚本、外链图片和 fetch 都按不可信代码处理。
Error feedback compile_error、runtime_error、test_failure、console_output、source_map span 模型修 bug 需要结构化错误、当前 version、失败命令和最小日志;大日志先摘要和脱敏。
主题 设计 权限边界
ACL owner/editor/viewer、tenant/project 继承、GPT capability、admin policy Canvas 可在 GPT Builder 启用;企业策略控制代码执行、网络访问、分享和导出。
Import paste -> blank canvas、upload file、open chat content in canvas、create from prompt/toolbox 导入要记录 source、content_hash、MIME/type、解析结果和安全扫描状态。
Export document -> PDF/Markdown/Word;code -> 按语言导出文件扩展名 导出基于指定 version,避免导出过程中 current 变化;下载 URL 带短期授权和审计。
Share share live artifact 或 fixed version,scope、expiry、revocation、viewer policy 撤销分享要清 CDN/preview cache;viewer 不能通过分享链越权看到私有聊天或连接器资料。
主题 事件/指标 设计意义
Event contract artifact.patch_delta、inline_comment_added、version_committed、preview_started、preview_error 事件有 seq、version_id、patch_id、trace_id;客户端断线后按 seq 补齐,避免 patch 丢失。
Metrics patch_accept_rate、anchor_miss、merge_conflict、preview_latency、sandbox_crash、fix_bug_success 还要看 canvas trigger precision/recall、targeted edit 成功率、comment apply rate 和 Show changes 使用率。
Eval trigger boundary、targeted-vs-rewrite、inline comment accuracy、code review usefulness OpenAI 公开说明中 Canvas 训练/评估关注触发、局部编辑和评论质量;系统应把线上样本回流到这些评估集。
Degradation sandbox down -> disable run/preview;model patch down -> keep manual editing;event lag -> read-only banner 最小可用能力是编辑、保存版本和导出;预览、Fix bug、自动建议都可以独立熔断。
关注点 生产契约 核心指标 降级策略 常见陷阱
Version write path artifact write 以 artifact_id 分区串行提交;base_version_id + idempotency_key 保证重试不会重复生成版本。 version_commit_p95、duplicate_idempotency_hit、optimistic_conflict_rate、write_error_rate。 主写路径不可用时进入只读模式,仍允许查看历史、复制和下载最近稳定版本。 把版本写入、预览运行和导出放在一个事务里,任何慢依赖都会阻塞保存。
Event broadcast and catch-up version_committed 先持久化,再通过 outbox 发布给 WebSocket/SSE;客户端按 artifact_seq 补漏。 outbox_lag、missing_seq_recovered、client_catchup_ms、event_duplicate_rate。 广播层挂了不丢版本;页面显示同步延迟,刷新后从 seq 拉全量差异。 只靠内存 pub/sub 推 patch,服务重启后客户端看不到刚保存的修改。
Preview / export queue isolation React/HTML preview、Python execute、PDF/Word export 走独立队列和 worker pool,不占用版本提交线程。 preview_queue_age、export_queue_age、sandbox_crash_rate、worker_pool_saturation。 队列拥塞时禁用 Run/Preview/Export 按钮或显示排队;文档编辑和版本历史继续可用。 一次大型 npm install 或 PDF 导出把所有 Canvas 保存请求拖慢。
Region and disaster recovery 按 tenant home_region 写 artifact/version;对象存储、diff log、audit log 有 RPO/RTO 目标,派生索引可重建。 rpo_seconds、restore_time、cross_region_blocked、index_rebuild_lag。 区域异常时只读访问最近复制版本;数据驻留不允许跨区写就不自动 failover。 把 Canvas 当普通静态文件跨区复制,忽略版本顺序、分享链接和企业数据驻留。
Immutable audit 每个 create/edit/apply/restore/share/export/preview/run 都写 append-only audit event,包含 actor、policy、version、trace。 audit_missing、audit_export_lag、tamper_check_failed、policy_version_gap。 审计不可写时禁止高风险分享、导出和网络预览;普通编辑可进入受限队列。 只存最终内容,无法解释谁应用了哪条模型建议、何时分享、导出了哪个版本。
Derived index rebuild search、outline、embedding、symbol index、preview cache 都是派生物;真源是 immutable versions + snapshots + audit。 rebuild_success、index_freshness_lag、cache_purge_lag、share_cache_stale。 索引落后时关闭模型跨文档检索,改用当前版本局部扫描或要求用户选择范围。 把 embedding/search index 当真源,删除或回滚时产生幽灵内容。

Artifact model

Canvas 不是一条消息,而是 writing/coding project 的可编辑 artifact:document、code、rendered React/HTML asset。

Selection-aware edits

用户选中一段文字或代码后,模型应做局部 patch;未选中时才考虑全量重写。

Inline feedback

建议、批注、代码 review 都挂在 range 上,range 随版本演进要能重新定位。

Version history

每次模型修改和用户修改都形成版本,可回滚、对比、导出。

Code preview

代码 Canvas 需要语言识别、格式化、沙箱运行/预览、错误捕获和一键修复。

Preview safety

Canvas React/HTML 和代码执行会被沙箱隔离;外部网络由企业管理员配置,Enterprise 默认关闭网络访问。

Conflict handling

用户编辑和模型 patch 并发时,按版本号、range 和 patch base 检测冲突。

13. Code Executor / Data Analysis

代码执行器必须按不可信代码平台设计

Advanced Data Analysis、API Code Interpreter 和 Canvas Python 看起来都是“让模型跑 Python”,系统上则是安全沙箱、 文件系统、资源调度、结果发布和审计回传。公开 ChatGPT Data Analysis 使用 stateful Jupyter/Python 环境,且不能发起外部 web/API 请求;API Code Interpreter 可以显式配置 container、memory tier 和 network_policy;Canvas Python 的输出在底部 console, React/HTML 预览可能发起网络通信,Enterprise 默认关闭 Canvas 代码访问网络。面试中要明确:模型写 Python,执行层强制隔离。

Model output Python/code + file ids generated code, referenced uploads, expected artifacts
Execution API container, memory, network policy auth, idempotency, resource quota, network disabled/allowlist
Tenant queue lane + memory tier fairness, backpressure, queue SLO, cancel token
File mount source_file_id -> container_file_id read-only inputs, scoped workspace, TTL and size limit
Sandbox worker lease, heartbeat, cancel isolation, CPU/memory/time cap, no implicit external access
stdout / stderr sanitize -> stream -> repair loop stderr returns to model for fix; truncate and redact secrets
Artifact service scan -> publish -> signed download malware/DLP scan, manifest, expiration and deletion propagation
Failure sidecar retry budget -> DLQ -> user-visible failed state
Audit / cost ledger job receipt, resource seconds, artifact event, trace spans
Wm=λpeak,mP99(Tservice,m)Sslots/worker,mutarget,mP99(Wqueue,m)SLOinteractive,m\begin{aligned} W_m &= \left\lceil\frac{\lambda_{\mathrm{peak},m}\cdot P_{99}(T_{\mathrm{service},m})}{S_{\mathrm{slots/worker},m}\cdot u_{\mathrm{target},m}}\right\rceil\\ P_{99}(W_{\mathrm{queue},m}) &\le \mathrm{SLO}_{\mathrm{interactive},m} \end{aligned}

代码执行容量不是按聊天 QPS 或平均运行时间估,而是按 memory tier 拆池: m 可以代表 small、standard、high-memory 等沙箱池。T_service 包含冷启动、文件挂载、运行和结果复制, 但扫描积压与队列等待要单独用 P99(W_queue) SLO 通过压测或离散事件仿真校验。

职责 强制边界
Chat / Model 模型生成 code_interpreter_call,表达 intent、Python code、文件引用和错误修复上下文 模型不是执行者,也不自由选择文件或容器;Execution API 基于 ACL、quota 和会话状态注入 allowed_source_file_ids、container 和资源限制。
Execution API create/reuse container、create Python job、idempotency_key、quota、policy、memory_limit、network_policy 官方 API 支持自动或显式 container;memory tier 影响成本和容量,container_id、network_policy 和 domain_secrets 决策要进入 trace。
Scheduler queue tenant/model/tool queue、warm pool、cold start、deadline、cancellation token 排队前估算 runtime、内存、文件大小和依赖成本;高峰时返回 retry_after 或降级为文件问答。
Sandbox worker microVM/container、read-only base image、workspace mount、cgroup、seccomp、egress policy 不可信代码边界在这里强制执行,不依赖 prompt;无宿主机挂载、无跨租户缓存,默认 network_policy=disabled。
Artifact store server/UI-only: artifact_id, download_url;model-visible: sanitized_summary, opaque citation/ref 生成产物也按不可信内容处理;给模型的 annotations 不包含可下载 URL 或内部持久化 ID,只暴露脱敏摘要和不透明引用。
Safety / Audit AV scan、PII/redaction、policy decision、resource usage、repair loop、trace replay 错误和日志回传给模型用于修复前先截断、脱敏和标注来源;审计保留 request_id、container_id、job_id、source_file_id 和 artifact_id。
阶段 链路 失败语义
Upload user file -> object storage -> MIME/type check -> AV scan -> source_file_id 扫描未完成或类型不支持时不挂载;source_file_id 绑定 tenant、conversation、owner ACL 和保留策略。
Tool call model emits code_interpreter_call with code; orchestrator resolves allowed_source_file_ids and container config allowed_source_file_ids、container_id/auto 和 memory_limit 属于执行配置,由 Execution API 根据 conversation、tenant、ACL 和 quota 注入;过期容器不能恢复,只能重建并重新上传文件。
Job creation CREATED with idempotency_key, quota estimate, memory tier, timeout, retry budget 重复请求返回同一 job;非幂等外部效果在 Data Analysis 中应被禁止,生成文件是容器内效果。
Queue / run QUEUED -> sandbox allocation -> workspace mount -> RUNNING -> result events worker 拿 lease 和 heartbeat;cancel token 可停止排队或尽力中断运行中代码。
Result / repair stdout/stderr、exit_code、charts/images、opaque citation、exception spans 回给模型和 UI 模型只拿 sanitized summary、citation 和 opaque reference;artifact_id 只给服务端和 UI 授权层使用,不直接进入模型上下文。
Download / cleanup generated files scanned and copied to artifact store,容器 idle 过期后工作目录丢弃 官方容器应视为临时状态;需要保留的结果必须在活跃窗口内复制为 artifact_id 或下载。
Internal job state
CREATED request accepted
VALIDATING code, files, policy, quota
QUEUED tenant lane + memory tier
RUNNING worker lease + heartbeat
Terminal outcomes COMPLETED FAILED retry creates new attempt TIMEOUT / OOM CANCELLED
VALIDATING / QUEUED -> FAILED or CANCELLED before RUNNING
RUNNING -> TIMEOUT / OOM / CANCELLED; cancel token is persisted

VALIDATING 和 QUEUED 也可以直接进入 FAILED 或 CANCELLED;终态不是线性先后关系。

Container state
ACTIVE worker/session bound lease valid, files mounted, CPU/memory caps enforced
session release no running code, keep warm only if policy allows
IDLE reusable until TTL session released, warm cache allowed, no job running
TTL / tenant policy cleanup worker tombstones mounts and invalidates lease
EXPIRED / DELETED cleanup complete cannot implicitly restore; remount files into new container
Files short TTL source mounts
Artifacts signed download, longer retention
Isolation network policy, user namespace, no deleted-container read
状态 语义 恢复和用户体验
CREATED / VALIDATING 校验 tool schema、code、allowed_file_ids、MIME、扫描状态、租户配额和 memory tier 失败返回 validation error,不创建 sandbox;大文件或高内存任务可要求用户确认成本。
QUEUED 等待 warm container 或新 sandbox slot 队列过深返回 retry_after;tenant quota 命中时不让低优先级任务挤占企业/交互式运行。
RUNNING 执行代码、采集 stdout/stderr、文件写入、图表生成、资源和网络事件 超 CPU/内存/磁盘/时间立即终止并写结构化错误;egress 默认拒绝,不能直接外发数据。
COMPLETED exit_code=0,代码运行结束,stdout/stderr 和容器内生成文件引用进入结果事件 COMPLETED 只表示运行完成;artifact 扫描、预览和下载是独立发布状态,UI 不能把分析完成误写成所有下载已可用。
FAILED / TIMEOUT / OOM 写错误类型、最后日志、资源峰值和可修复提示 可修复错误进入模型 repair loop;OOM/timeout 可以建议更高 memory tier、采样数据或拆任务。
CANCELLED 用户取消、会话关闭或调度层触发 kill switch 取消运行中代码是 best-effort;已经安全复制的 artifact 可以保留,未复制的容器工作目录不承诺可恢复。
容器状态 语义 恢复和用户体验
ACTIVE container 可接收 job,workspace、已挂载文件和 Python 内存仍然存在 复用前必须校验 tenant、conversation、policy version 和 last_active_at;不能把旧容器跨会话复用。
IDLE 暂时无运行 job,但可在活跃窗口内继续复用 任何读取元数据、上传/删除容器文件或运行代码都会刷新活跃时间;worker 可回收冷资源。
EXPIRED / DELETED 容器因 idle TTL 或显式删除失效,内存和工作目录丢弃 过期容器不能恢复为 active;只能新建容器、重新解析 allowed source files 并重新上传需要的文件。
对象 字段 UI / 模型消费
OpenAI Responses request tools[].container = container_id 或 { type: "auto", file_ids, memory_limit, network_policy } 公开请求侧允许显式复用容器或自动创建/复用活跃容器;file_ids、memory_limit、network_policy 是工具配置,不是模型输出。
OpenAI Responses output code_interpreter_call: id、type、code、container_id、outputs(logs/images)、status 这是公开 API 可见形状;container_id 表示实际运行容器,outputs 主要是日志和图片,不承诺包含内部 artifact 记录。
Container files API container_file: id、container_id、path、source、bytes、created_at、content endpoint 容器文件属于某个 container,source 可来自 user 或 assistant;容器过期后文件数据不可恢复。
Internal execution config resolved_container、allowed_source_file_ids、memory_limit、resolved_network_policy、allowed_domains、domain_secrets_ref、policy_version 这些字段由 orchestrator / Execution API 注入;domain_secrets 只绑定 allowlisted domain,经 secret broker 注入,不能进入模型上下文、stdout 或普通 trace。
Network policy disabled 或 allowlist{ allowed_domains, domain_secrets } ChatGPT Data Analysis 默认不能外部 web/API 请求;API 侧若开启 allowlist,必须域名级授权、secret 作用域绑定、日志脱敏和审计。
Public status mapping in_progress/interpreting -> QUEUED/RUNNING;completed -> COMPLETED;incomplete/failed -> FAILED/TIMEOUT/OOM/CANCELLED 公开 code_interpreter_call.status 是 API 状态;本章 job state 是内部调度状态,二者不是一一对应。
Execution event job_id、state、queued_at、started_at、finished_at、exit_code、resource_usage Streaming UI 可显示正在分析、正在生成图表、正在保存文件;断线后按 job_id 查询终态。
Text output stdout、stderr、exception、traceback、truncated、redaction_count 长日志截断并摘要;敏感字段脱敏,原始日志只在受控审计路径可查。
Rich output image/png、chart spec、table preview、dataframe summary、MIME、size、sha256 UI 渲染预览,模型收到摘要和引用,不把大文件全文塞回上下文。
Internal artifact record artifact_id、filename、container_file_citation、download_url、expires_at、scan_status artifact_id 是产品内部持久化 ID,不是公开 OpenAI 字段;下载 URL 短期有效且按 ACL 授权。
主题 设计 约束
source_file_id 用户上传或连接器带来的源文件,存于 object store,经过 AV scan、MIME sniff、size limit、tenant ACL source_file_id 的 owner 是 user/tenant/conversation;删除要传播到 object store、索引、preview cache 和容器挂载记录。
container_file_id Execution API 把 allowed source files 复制/挂载到某个 active container 后产生的容器内文件引用 container_file_id 的 owner 是 container;随容器过期或删除而失效,不应作为长期下载或跨会话引用。
artifact_id 容器生成文件 -> MIME sniff / size limit / AV scan / zip bomb scan -> artifact store -> annotation -> authorized download artifact_id 的 owner 是 conversation/tenant;预览在隔离 sandbox 中渲染,下载 URL 短期有效并按 ACL 鉴权。
Retention / deletion Library file、chat attachment、Temporary Chat file、custom GPT knowledge、container_file、generated artifact 分开建模 公开 ChatGPT Library 会保存上传和生成文件直到用户删除;删除后立即从账号移除,并安排 30 天内从系统永久删除,Temporary Chat 文件不保存到 Library。ADA/Document Analysis 和 GPT 文件保留仍按计划/设置变化。
Upload limits 512MB/file、text/document 2M tokens、CSV/表格约 50MB、image 20MB、rolling upload rate、用户/组织 storage cap 这些是产品层 admission 信号;后端还要按 file type、MIME、token count、scan backlog、workspace quota 决定是否接入。
Dependencies preinstalled scientific stack、image version、controlled package source、allowlist/denylist 避免任意 pip install 打开供应链和外网风险;如支持安装,走私有镜像源、签名扫描、网络隔离和可复现 lock。
Workspace quotas disk_bytes、file_count、artifact_bytes、download_count、scan_latency 大文件分析和多图表生成很容易吃满磁盘;超额时提示用户删除或抽样,而不是让 worker OOM。
产物状态 发布条件 用户体验
SCANNING container_file_id 已产生,artifact pipeline 正在做 MIME sniff、size check、AV 和 zip bomb scan UI 可以显示“文件处理中”;模型只拿到摘要引用,不能把未扫描文件当成可下载产物。
QUARANTINED / BLOCKED 扫描失败、MIME 不符、压缩包异常、主动内容或策略命中 运行结果仍可解释,但下载、预览和再次挂载被阻断;审计保留原因和样本哈希。
PREVIEW_READY 缩略图、表格预览或图表预览已在隔离预览 sandbox 中生成 预览环境不能执行宏、脚本或外链;大表只展示抽样和 schema,避免把文件全文塞回上下文。
DOWNLOAD_READY artifact_id 已持久化,短期 download_url 按 tenant/conversation ACL 签发 下载和预览可独立失败或过期;重新签发 URL 不需要重新运行代码,但仍要重验 ACL。
URL_EXPIRED / REVOKED durable artifact 仍可存在,但当前 signed URL 已过期、权限被撤销或会话策略变更 UI 应重新请求授权链接或提示不可访问;不要把 URL 失效误判成 artifact 丢失。
DELETED / PURGED / RETENTION_EXPIRED artifact 已按显式删除、租户保留策略或合规清理从持久存储和预览缓存移除 这是不可重新签发 URL 的终态;审计索引只保留最小元数据、删除原因和不可逆清理时间。
攻击面 强制控制 残余风险
恶意代码 / 宿主逃逸 microVM/gVisor/Kata/Firecracker、seccomp、read-only base image、no host mount 残余风险通过短生命周期、镜像补丁、异常 syscall 告警和高风险样本隔离降低。
DoS / 挖矿 cgroup、CPU/memory/disk/time/process limits、kill switch、tenant quota 超限终止并计入 abuse score;不要让单个 notebook 长时间占用 worker。
数据外传 network_policy disabled by default;allowlist domains only through egress proxy、domain_secrets、DLP、audit、budget guard domain_secrets 必须由 secret broker 按域名注入,模型不可见,stdout/stderr 脱敏;只有显式 allowlist 且通过代理审计时才允许指定域名访问。
恶意输入文件 / 数据指令注入 treat file content as data、disable macros、formula neutralization、safe archive extraction、no unsafe deserialize PDF/Office/CSV/压缩包和 pickle/joblib 都是不可信输入;归一化路径、拒绝 symlink traversal、导出表格前转义公式。
文件泄漏 per-tenant namespace、per-run workspace、artifact ACL、short-lived download URL source_file_id、container_file_id、artifact_id 和日志都不能跨 conversation/container 复用;审计时按 ID taxonomy 追踪访问。
供应链包 prebuilt image、signed image、package allowlist、private mirror、scan and pin 包安装失败应成为可解释错误;不能让用户代码任意下载并执行网络脚本。
日志和结果泄密 stdout/stderr truncation、PII redaction、large output summary、audit access control 模型只需要足够修复和解释的摘要;完整日志按最小权限保存。
主题 指标/策略 设计意义
Lane isolation 按 tenant、plan、model、tool、memory tier、interactive/background 和 Canvas/API/ChatGPT surface 分队列 Data Analysis、Canvas Python、API Code Interpreter 和 Agent terminal 不能共享一个无优先级队列;高内存或长运行任务不能饿死普通聊天和短分析。
Capacity peak_lambda_by_tier、p99_service_time、p99_queue_wait_ms、warm_pool_hit、scan_backlog、slots_per_worker_by_tier 按 memory tier 分池估 active sandbox,再用压测/仿真校验 P99 queue wait SLO;冷启动和扫描积压要独立看。
Reliability worker heartbeat、lease、sandbox crash、OOM、timeout、artifact store errors worker lease 过期后只重放未开始或幂等阶段;RUNNING 且外部状态未知时进入 UNKNOWN/NEEDS_REVIEW,已经生成的 artifact 要幂等复制,避免重复文件或丢文件。
DLQ / retry exhausted validation_error、sandbox_boot_failed、scan_failed、artifact_publish_failed、unknown_after_cancel 超过 retry budget 后进入 DLQ,保存 job_id、container_id、attempt_id、input_file_manifest、stdout/stderr 摘要和最后 policy decision,供人工或离线 replay。
Backpressure tenant_quota_hit、queue depth、memory tier pressure、scan backlog 高峰时禁用高内存 tier、限制并发、返回 retry_after 或只允许文件问答和解释已有结果。
Observability oom_count、timeout_count、cancel_latency、artifact_bytes、scan_latency、repair_success_rate 指标要能按 tenant、model、memory tier、file type、package image 和 sandbox worker 切分。
Cost control cost_per_run、memory_tier_seconds、artifact_storage_days、egress_bytes、scan_cpu_seconds、retry_waste 每个 run 把模型 tokens、sandbox minutes、memory tier、artifact storage、network egress 和 retry waste 归因到 tenant/user/tool;超预算时降 memory tier、缩样本、排队或要求确认。
Region / residency / DR source files、container metadata、artifact store、audit log 按 tenant home_region 写入;派生预览和索引可重建 RPO/RTO 按 artifact/audit 明确;跨区恢复先保证文件和审计,再重建预览/索引。数据驻留不允许时不能把容器或文件静默迁到其他 region。
Degradation sandbox unavailable -> disable run;artifact store down -> no downloads;scan backlog -> delay mount;region degraded -> read-only artifacts 最低可用能力是解释文件/代码和保留聊天;执行失败必须透明,不伪造成成功分析。导出/预览/运行分别熔断,聊天和已保存结果继续可读。

14. 后端高并发高可用

聊天服务可以最终一致,用户消息和计费不能丢

高可用设计不要停在“服务多副本”。ChatGPT 这类系统还要处理长连接、生成中断、GPU OOM、 工具超时、RAG 失败、跨区域和成本保护。可靠性策略必须能在部分失败时保持用户可理解。

Gateway auth / quota / policy cache 策略未知:高风险 fail closed
Admission token budget / tier / region 429 + retry_after / 降模型
Durable log message / generation / seq persist before stream: 先持久化,再 flush token
Queue tenant / model / tool lane WFQ、公平性、deadline
GPU serving prefill / decode / KV cache OOM 或水位高:熔断长上下文
Streaming relay SSE / WebSocket / seq replay 断线按 Last-Event-ID 恢复
RAG / Tools / Code timeout / lease / DLQ 副作用用幂等键和 reconciliation
Billing / Audit outbox / ledger / sink 补投可延迟,账和审计不能丢
SLO control loop
GoodEvents=successlatencyTs durable¬policy_unknownErrorBudgetRatios=1SLOTargetsBurnRates=BadEventRatesErrorBudgetRatiosAction=f(BurnRate,blast radius,dependency)\begin{aligned} \mathrm{GoodEvent}_s &= \mathrm{success}\land \mathrm{latency}\le T_s\\ &\quad \land\ \mathrm{durable}\land \neg\mathrm{policy\_unknown}\\ \mathrm{ErrorBudgetRatio}_s &= 1-\mathrm{SLOTarget}_s\\ \mathrm{BurnRate}_s &= \frac{\mathrm{BadEventRate}_s}{\mathrm{ErrorBudgetRatio}_s}\\ \mathrm{Action} &= f(\mathrm{BurnRate},\mathrm{blast\ radius},\mathrm{dependency}) \end{aligned}
Capacity admission model
λaccepted,k=min(λraw,k, quotak, capacityk)GPUWorkersm=λpeak,mP99(Tprefill+Tdecode)slotsmutargetStreamConnλacceptedP95(Tturn)Backlogtool=λtoolP95(Ttool)worker_slots\begin{aligned} \lambda_{\mathrm{accepted},k} &= \min(\lambda_{\mathrm{raw},k},\ \mathrm{quota}_k,\ \mathrm{capacity}_k)\\ \mathrm{GPUWorkers}_m &= \left\lceil\frac{\lambda_{\mathrm{peak},m}\cdot P_{99}(T_{\mathrm{prefill}+T_{\mathrm{decode}}})}{\mathrm{slots}_{m}\cdot u_{\mathrm{target}}}\right\rceil\\ \mathrm{StreamConn} &\approx \lambda_{\mathrm{accepted}}\cdot P_{95}(T_{\mathrm{turn}})\\ \mathrm{Backlog}_{\mathrm{tool}} &= \lambda_{\mathrm{tool}}\cdot P_{95}(T_{\mathrm{tool}})-\mathrm{worker\_slots} \end{aligned}

SLO 是用户能感知到的目标,error budget 是允许失败的额度,burn rate 是额度被消耗的速度。 面试里不要只说“降级”,要说清楚什么指标越线、谁先被限流、哪些能力 fail closed、什么时候切区。

Control plane routing policy / rollout / quota config / incident command
home region A cell A1: Enterprise + model pool cell A2: Plus/free chat cell A3: Agent / Code / Canvas lanes 写入真源:conversation、file、audit、ledger
recovery region B warm cells + read replicas async search/vector rebuild standby GPU pool within policy fence 后切流,按 RTO/RPO 开写
detect freeze/fence shift traffic replay outbox validate ledger resume writes

无状态入口

Gateway、Chat API、Streaming relay 水平扩展;鉴权、配额和策略未知时不能默认放行。

有状态生成

Generation 有 CREATED、QUEUED、PREFILLING、STREAMING、COMPLETED、FAILED、CANCELLED、TIMEOUT 状态,断线可按 seq 恢复。

多级限流

按 IP、user、org、model、input token、output token、tool、region 限流,免费和企业用户不同策略。

队列和回压

GPU 忙时按模型池和 token 预算排队;超队列深度返回 429、降模型、缩上下文或禁高成本工具。

多区域

用户有 home_region;强一致写入 home region,搜索、向量和评估异步复制,故障时按 RTO/RPO 切换。

降级策略

开放域 RAG 失败可明示无引用回答;企业知识库、文件问答和联网搜索失败要 fail closed,不能伪造引用。

任务耐久性

Tasks、Deep research 和 Agent 需要 checkpoint、重试、超时、补偿、通知和人工接管。

隔离资源池

免费、Plus、Team、Enterprise、Agent、语音、Canvas 预览和代码执行可分池,避免高成本工作流拖垮普通聊天。

可靠性对象 SLI / SLO 错误预算动作
Ingress / auth / quota Good event: gateway 2xx/4xx 正确、auth 决策在目标延迟内、quota cache 未超过 staleness TTL 策略未知时高风险工具和企业数据 fail closed;低风险已登录聊天只能用短 TTL 会话和保守 cached quota,并返回 retry_after。
Conversation durable log Good event: message、generation、response_events、outbox、idempotency ledger 在 ACK/flush 前持久化 写 quorum 或 durable append 不可用时新消息 fail closed 或只读;恢复后按幂等键去重补投,不能先流 token 后补日志。
Interactive chat Good event: 成功最终回答或明确安全错误,且 TTFT / queue wait / total latency 在目标阈值内 Burn rate 升高时先限低优先级租户、缩短上下文、降模型或返回 retry_after;不能等全站挂掉才动作。
Streaming relay Good event: event gap 在阈值内、断线可按 seq 重放、没有 duplicate / missing seq SSE/WebSocket 断线后按 response_event seq 重放;若 durable log 落后,就暂停 flush 而不是发不可恢复 token。
GPU serving Good event: queue wait 达标、无 OOM、prefill/decode 成功、tokens/s 不低于池级水位 按模型池触发熔断、扩容、跨允许区域借 GPU、禁长上下文和高成本工具;队列水位直接驱动 admission control。
RAG / tools Good event: retrieval/tool 在 deadline 内完成,副作用无重复,证据请求有足够 citation coverage 开放域问题可提示检索不可用;企业、文件、权限绑定和联网证据请求要 no-answer 或稍后重试,绝不生成伪引用。
Agent / Canvas / Code Good event: checkpoint 新鲜、patch 提交成功、preview sandbox 可用、job 成功且 artifact scan lag 达标 Burn rate 过高时暂停 Agent、Canvas 只读、禁代码运行或延迟下载,保留可恢复 checkpoint 和用户可见状态。
Billing / audit Good event: outbox lag、ledger mismatch、audit sink lag 和 idempotency conflict 都在阈值内 普通聊天可继续排队补投;高影响工具、付费动作和企业审计动作在积压过大时暂停,避免不可追责执行。
Multi-region Good event: home region 健康、replication lag 达标、failover time 达标、split-brain fence 成功 切区由 RTO/RPO 和错误预算共同触发;主区未 fencing 前只能只读或新建临时会话,不能双写。
对象 示例目标 面试说明
Interactive chat 示例:TTFT P95 2-5s、queue wait P99 < 30s、stream gap P99 < 2s,按免费/Plus/Enterprise 和模型池拆 SLO 这是面试用示例目标,不是 OpenAI 官方承诺;真实系统会按 tier、region、模型、工具开关和高峰时段分别定义。
Streaming relay 示例:SSE reconnect success > 99.9%,duplicate/missing seq 接近 0,relay buffer lag P99 < 1s 流式体验的好事件不是“HTTP 200”,而是用户能持续看到可恢复的事件;durable seq 是恢复边界。
GPU serving 示例:accepted token/s 利用率 60-75%,OOM rate < 0.1%,prefill queue P99 按模型池设置 利用率太低浪费 GPU,太高会让 TTFT 和 TPOT 崩;容量控制要把 KV cache、batching 和长上下文单独看。
RAG / indexing 示例:ACL tombstone lag < 5s,fresh file index P95 < 60s,retrieval deadline P95 < 800ms 索引慢可以少引用,权限慢不能越权;安全相关复制和 tombstone 优先级高于召回率。
Agent / Code / Canvas 示例:checkpoint age P99 < 15s,sandbox queue P95 < 60s,artifact scan lag P95 < 30s 长任务的 SLO 要看可恢复性和用户可见状态;不能只统计最终成功率。
Ledger / audit / DR 示例:outbox lag P99 < 30s,audit sink lag P99 < 2min,replication lag P99 < 10s,failover drill 达标 计费和审计允许延迟但不能丢;高影响动作在审计预算耗尽时暂停。
预算消耗 动作 边界
2x burn 进入观察和局部保护:降低新建长上下文比例、收紧低优先级队列、提高采样和 trace 留存 目标是早发现,不打扰大多数用户;动作要可自动撤销。
5x burn 执行分层限流:免费/批处理/低优先级 Agent 先降级;高成本工具和代码执行加排队上限 避免全局 429;按 cell、tenant、model、tool lane 定位爆炸半径。
10x burn 触发强动作:关闭非核心功能、冻结可疑 cell 写入、切走入口流量、拉起 incident commander 此时不再追求功能完整,而是保护 durable log、计费、审计和可恢复状态。
Policy burn 安全、权限、审计未知时直接 fail closed;只读和低风险普通聊天可以用短 TTL 缓存保守服务 可靠性不能以数据泄露、越权检索或不可追责副作用换取表面成功率。
队列主题 做法 为什么重要
池隔离 按 tenant tier、model、region、chat/agent/code 分池 避免一个企业租户或 Agent 长任务占满普通聊天池;跨池借用要有上限和熔断。
公平调度 tenant weighted fair queue + per-model token budget 既限请求数,也限 input/output token 和并发 generation,防止少量长上下文造成 head-of-line blocking。
deadline 每个请求有 max_wait、用户取消和客户端断线清理 超过 deadline 直接 429 或降级;取消后释放队列槽、KV block 和工具执行资源。
retry_after 由队列水位、服务率、目标模型池和用户优先级估算 返回可重试时间和可选降级模型,避免客户端立即重试造成重连风暴。
容量对象 估算方式 追问点
入口 admission 从 raw QPS 扣掉 auth/quota/safety/cache miss 后得到 accepted QPS;令牌桶同时按 request/min 和 token/min 限制 面试里要说明 429 是保护系统,不是失败兜底;retry_after 由队列水位和服务率估算,而不是固定秒数。
Streaming relay 连接数 ≈ accepted QPS × turn 持续时间;容量按长连接、buffer、seq 重放窗口、客户端慢读分别估 SSE/WebSocket 的瓶颈常是连接和缓冲,不是 CPU;慢客户端要独立限速,避免拖住模型输出。
GPU model pool 按模型池估算 prefill/decode 时间、batch slots、KV cache block、tokens/s 和目标利用率 长上下文主要吃 prefill 和 KV,短回答主要吃 decode;两者混排会造成 head-of-line blocking。
Tool / Code workers worker slots ≥ tool arrival rate × P95 tool runtime;按浏览、connector、sandbox、artifact scan 分 lane GPU 等工具时不应长期占 decode slot;工具慢时 checkpoint 并释放核心推理资源。
RAG indexing backlog backlog age = 待解析/待 embedding 文件量 ÷ indexer throughput;ACL tombstone lane 优先 新文件可延迟检索,但删除和权限变更必须快速生效;否则可靠性会变成安全事故。
Cost guardrail 把 accepted QPS、token/s、GPU seconds、sandbox minutes、egress、storage 写入 forecast 和 budget controller 高可用不等于无限扩容;成本预算耗尽时也要进入有序降级。
故障 降级动作 边界
Gateway / Auth / Quota 不可用 高风险能力 fail closed;低风险已登录聊天使用短 TTL token、保守 cached quota 和 retry_after 不能因为配额或策略服务超时就放开工具、企业知识库、代码执行或高成本模型;缓存必须有 staleness 上限。
Conversation store / durable log 故障 写 quorum 不足时新消息 fail closed 或会话只读;response_events 落库前不 flush message、generation、response_events、outbox 和 idempotency ledger 必须在 ACK/可见前持久化,恢复后按幂等键补投。
GPU 满载 排队、429 retry_after、降模型、缩上下文、关闭高成本工具 按 request/min、input token/min、output token/min、并发 generation 和 queue depth 同时限流。
Safety 不可用 高风险能力 fail closed,低风险聊天可进入保守模型或等待 不能因为审查服务挂了就允许工具动作、敏感内容或未过滤输出流出。
Billing / Kafka 故障 主事务写本地 outbox,后台补投;严重积压时限流付费动作 计费不能丢,但不应让瞬时 Kafka 故障直接打断已经提交的用户消息。
RAG 不可用 开放域问题明示无引用;企业知识库、文件问答、联网搜索和权限绑定请求 fail closed 不能用模型记忆冒充检索结果;权限系统、ACL tombstone 或来源校验故障时返回 no-answer 或稍后重试。
对象存储故障 禁止新文件分析;已缓存小文件可读;生成文件延迟下载 文件原件、解析结果和下载链接要有独立状态,避免把分析结果误报为完整。
工具超时 / 半成功 tool_call -> UNKNOWN/PENDING;记录 idempotency_key、provider operation id、reconciliation job 用 provider status API、read-after-write 或 outbox reconciliation 确认结果;只有无副作用或幂等动作自动重试,高影响动作需用户确认和审计。
Canvas 故障 version write quorum down -> 副本/cache 只读;read path down -> artifact 暂不可用;preview down -> 禁预览 未提交 patch 保持 pending,不伪装成功;只有读副本可验证时才提供只读,读路径故障则提示稍后重试。
Code Executor 故障 queue down -> 禁运行;worker crash -> 按 job lease 重试;artifact store / scanner down -> 延迟下载 job、container 和 artifact 都有独立状态;artifact 复制和发布必须幂等,执行失败不能清掉聊天上下文。
主题 设计 避免的问题
DLQ 记录什么 原始事件、schema version、tenant/org、idempotency_key、attempt_count、last_error、provider_operation_id、trace_id、next_action DLQ 不是垃圾桶,而是可诊断、可重放、可审计的失败事实;敏感字段仍按日志策略脱敏。
可自动 replay 无副作用或天然幂等任务:embedding/index rebuild、artifact scan publish、notification resend、审计 sink 补投 replay 必须读取幂等 ledger,成功后写 resolved_at 和 replayed_by,避免重复发布文件或重复扣费。
需人工或用户确认 外部支付、发邮件、删除远端数据、提交代码、修改 connector 资源等高影响动作 半成功外部动作要先 reconciliation,再决定补偿或让用户确认;不能靠模型猜测结果后重试。
长任务 checkpoint Agent、Deep research、Code job、Canvas patch 在 retry exhausted 后进入 PAUSED/NEEDS_REVIEW,而不是 FAILED 丢状态 保留最后 checkpoint、工具输出摘要和未提交 patch,让用户可继续、取消或导出中间结果。
队列健康 按 topic/lane/cell 监控 retry age、DLQ inflow、replay success、poison message、oldest unacked 某个租户或文件造成 poison message 时隔离到 quarantine lane,不拖垮全局消费者。
主题 策略 取舍
Home region 用户和企业租户绑定主写区域 会话、文件、审计和记忆强一致写主区域,满足数据驻留和删除承诺。
跨区复制 搜索索引、向量索引、评估样本、读副本异步复制 复制延迟要进入用户可见边界:跨区恢复后可能先只读,RAG 结果可能短暂不完整。
GPU 跨区 容量不足时可跨区推理,但不跨数据驻留红线 企业租户要按管理员策略决定是否允许把 prompt 发到其他区域的推理池。
RTO / RPO 入口分钟级切流;数据按类别定义 RTO/RPO RTO 是多久恢复服务,RPO 是最多丢多少数据;可见事件和最终消息不能用同一承诺糊弄过去。
故障域 隔离策略 为什么重要
Cell routing 按 home_region、tenant tier、model pool、tool lane 路由到固定 cell,cell 内独立 quota、队列、worker 和缓存 cell 是爆炸半径边界;一个企业租户、一个模型池或一类 Agent 长任务失控时,只烧局部错误预算。
Control plane / data plane 控制面负责策略、配置、路由和发布;数据面负责聊天、流式、推理、工具执行和持久化 控制面故障不应立刻打断已建立的低风险会话;高风险工具和策略未知请求必须 fail closed。
Dependency domain auth、quota、conversation store、object store、Kafka/outbox、GPU scheduler、vector DB、artifact scanner 分别限流和熔断 不能让一个下游慢依赖耗尽入口线程、relay buffer 或 GPU slot;每个依赖有 bulkhead 和 timeout。
Tenant isolation 大客户独立 cell 或独立队列权重;跨租户缓存、向量索引、文件对象和审计日志全部带 tenant fence 隔离既是可靠性也是安全边界;排障时可以冻结单租户而不是全站降级。
Release blast radius 新模型、新 tool policy、新 Canvas/Code runtime 先在 canary cell 放量,SLO 和 eval 同时达标再扩大 LLM 产品的故障可能是质量/安全回退,不一定是 500;发布单元要和观测单元一致。
数据类别 恢复目标 故障语义
用户消息 / generation / outbox ACK 前同步复制或跨区 quorum 才能承诺 RPO=0 用户消息、generation、outbox、可见 response_events 和 idempotency ledger 都要复制;若异步复制,RPO 就是 replication lag。
response_events 已经对客户端可见的 seq 目标 RPO=0 未发送的内存 token 可以丢弃或重试;发送前必须先进入 durable log。
文件对象 / artifact 上传确认后目标 RPO=0 或明确返回未完成 对象存储跨区复制滞后时,灾备区可先只读元数据并延迟文件分析。
向量索引 / 搜索索引 异步重建,RPO 可为分钟级 恢复后可能短暂无引用或少引用,但不能越权;ACL tombstone 必须优先复制。
审计日志 业务 outbox RPO=0,审计 sink 可延迟恢复 高风险工具动作在审计积压过大时要降级或暂停,避免不可追责执行。
跨区写入 只在主区 fencing 后开放;否则只读或新建临时会话 明确 split-brain 防护,避免同一 conversation 在两个区域同时接受写入。
步骤 动作 验收
Detect burn rate、queue depth、replication lag、outbox lag、stream gap、cell health 同时越线,自动开 incident 检测必须带 scope:region、cell、tenant、model、tool lane,否则只能全局限流。
Freeze / fence 冻结故障 cell 新写入,停止高影响工具,写入 fencing token,阻止双主和重复副作用 未 fencing 前最多只读或新建临时会话;不能让同一 conversation 在两个区域同时接受写入。
Shift traffic 入口按健康 cell 和 home_region 策略切流;企业数据驻留不允许时返回只读/稍后重试 跨区推理只能在租户策略允许且数据边界可解释时启用。
Replay 按 durable log、response_events seq、outbox、idempotency ledger 回放未完成 generation、工具和审计事件 先恢复可见用户状态,再补投计费/审计;replay 永远读幂等 ledger。
Validate 校验 ledger drift、audit sink lag、artifact availability、RAG ACL freshness、conversation tail consistency 恢复不是服务能 200 就结束;要确认用户看见的消息、账单和审计能互相对账。
Resume 逐层恢复写入、Agent、Code Executor、Canvas preview 和高成本模型,观察 burn rate 回落后解除限流 恢复顺序应从低风险读写到高影响副作用;避免故障刚恢复就被 backlog 打穿。

15. 安全、隐私和权限

Agent 越能做事,安全边界越要硬

安全不是一个 moderation API,而是一条贯穿输入、上下文、RAG、工具、执行、输出、日志和用户控制的治理链。 特别是 Agent:网页和文件里的恶意指令可能诱导它泄露连接器数据或执行真实世界动作。

Security risk model
Rrequest=wdDsensitive+wiIimpact+wxXexternal+wuUuntrustedDecision=Policy(principal,resource,action,context){allow,sanitize,confirm,refuse,fail closed}\begin{aligned} R_{\mathrm{request}} &= w_dD_{\mathrm{sensitive}}+w_iI_{\mathrm{impact}}+w_xX_{\mathrm{external}}+w_uU_{\mathrm{untrusted}}\\ \mathrm{Decision} &= \mathrm{Policy}(\mathrm{principal},\mathrm{resource},\mathrm{action},\mathrm{context})\\ &\in \{\mathrm{allow},\mathrm{sanitize},\mathrm{confirm},\mathrm{refuse},\mathrm{fail\ closed}\} \end{aligned}

这里的 principal 是“谁在请求”,resource 是“访问什么”,action 是“做什么”,context 是设备、区域、 项目、连接器 scope、风险等级和管理员策略。安全系统的核心不是让模型自己守规矩,而是每一步都由服务端策略执行器裁决。

Input classifier 请求、媒体、文件、年龄/区域、abuse signal
Source trust RAG / webpage / connector / tool output 只作为证据
Policy eval principal + resource + action + context + admin policy
Risk score data sensitivity、impact、irreversibility、external side effect
Decision ladder allow / sanitize / confirm / watch / takeover / refuse / fail_closed
Streaming guard 分段 moderation、DLP、引用校验、tool result redaction
Execute capability token、sandbox、egress policy、human confirmation
Audit & reconcile outbox、policy_version、appeal/replay、incident loop -> policy update
feedback loop Audit & reconcile -> incident review -> admin policy / Policy eval
边界 做法 为什么重要
Input safety 先判断请求风险 高风险请求可以拒绝、改写、要求澄清或禁用工具;低风险请求也要打上 safety context,供后续 RAG、工具和输出审查使用。
Output safety 流式输出前要有缓冲 不能完整输出后才审查,否则违规内容已经到达客户端;流式输出用小缓冲和分段审查,在高风险主题上降低输出速度换安全。
Tool safety 高影响动作需要确认和可追责执行 付款、发邮件、提交表单、删除数据、发代码变更都必须显式确认;Watch Mode 不能替代确认,自动重试也不能绕过确认。
Data safety 租户隔离、最小权限和 query-time ACL 所有表、缓存、向量索引、日志和 trace 都带 tenant_id、principal、scope、policy_version 和 resource_version。
Agent safety 网页、文件、工具和 connector 输出不可信 隐藏 prompt injection、钓鱼表单、恶意文件和 connector 数据外传都要作为主风险;不可信内容不能升级成系统或用户指令。
Abuse & quota 按 tenant、user、device、IP、safety_identifier、surface 和 tool/action 归因限流 区分 chat/search/code/agent/voice/image/tool 预算;动作包括降低流速、禁工具、冻结 Agent、block identifier、组织级升级和反绕过检测。
Privacy controls 训练使用、临时聊天、浏览数据、截图和日志保留 Business/Enterprise/Edu 默认不用于训练;个人用户可 opt out 或用 Temporary Chat;Agent 浏览数据、截图和连接器授权要可查看、撤销和清理。
产品面 主体 资源 信任等级 策略检查 审计 Fail closed
Chat / conversation user、org、workspace admin conversation、message、response_events、memory candidates 用户输入可信为意图,不可信为事实 auth、tenant、age/region policy、safety classifier、retention policy request_id、conversation_id、policy_version、moderation result 身份或策略未知时拒绝高风险能力;消息未持久化不进入生成。
Projects / files / memory project member、project owner、memory owner project files、project memory、personal memory、file chunks 文件内容和记忆摘要都是数据,不是指令 project membership、file ACL、memory visibility、delete/revoke filter source_file_id、memory_id、chunk version、access decision ACL tombstone、删除或索引状态不明时 no-answer,不生成伪引用。
Custom GPT / GPT actions GPT builder、workspace admin、end user、OAuth account GPT instructions、knowledge files、action schema、action domain、outbound payload builder 指令低于平台安全策略;action response 不可信 domain allowlist、OAuth scope、schema validation、workspace sharing policy、outbound consent gpt_id、action_id、domain、auth mode、user confirmation、shared fields 域名、schema、OAuth scope 或 workspace policy 不匹配时禁止 action;发往第三方的数据最小化且不承诺内部删除周期覆盖第三方保留。
Apps / connectors / RAG current user + connected app account connector documents、search results、citations、cached snippets、app-visible context connector 内容只作为 evidence,不具备指令权 query-time ACL、scope、document version、DLP、source provenance、third-party privacy boundary connector_id、scope、doc_id、retrieval_time、ACL version、consent record 授权过期、撤权、索引异常或 ACL 不可验证时不返回结果;向 app 暴露的 memory/context、设备和区域信息走最小披露。
Agent browser / terminal user delegated agent session browser state、screenshots、cookies、terminal actions、enabled apps、external sites 网页和终端输出默认 hostile workspace toggle/RBAC、app controls、site blocklist、capability token、step budget、DLP、human confirmation agent_run_id、step_id、enabled_app、blocklist_version、visible summary、confirmation record Enterprise/Edu 默认关闭或策略未启用时禁用;sync app index 不直接给 Agent;网站阻断同时作用于虚拟浏览器和 connectors。
Canvas / code workspace artifact owner、collaborator、model proposer artifact_version、patch、preview sandbox、export file 模型 patch 是建议,不是直接写入事实 version check、range anchor、preview sandbox、share/export ACL、network toggle、third-party confirm artifact_id、base_version、patch_id、preview result、share_id、network confirmation base version 冲突、anchor 低置信、预览不可用、权限未知或未知第三方通信未确认时保持 pending。
Code Interpreter / Data Analysis conversation user、sandbox service account uploaded files、container、stdout/stderr、artifact、download URL 用户文件、执行输出和生成产物全都不可信 sandbox isolation、no outbound web/API request、uploaded or connected source only、artifact scan container_id、job_id、source_file_id、artifact_id、scan result 文件授权、沙箱隔离、扫描或下载签名失败时不挂载、不执行或不发布 artifact;外部数据必须上传或来自已连接 source。
Voice / image / realtime media chat user、device session、workspace admin、media processor microphone/video stream、transcript、uploaded image、generated image、media object、EXIF/PII 音视频和图片都是不可信输入;转写和视觉理解也可能错 device permission、media safety、age/region policy、EXIF/PII stripping、data residency、training opt-in、usage limits media_id、session_id、consent state、safety verdict、transcript id、asset version 麦克风/相机权限、media safety、驻留策略或训练同意状态未知时不采集或不用于训练;图片生成/编辑失败不发布 asset。
Tasks / Pulse / notifications user、scheduler、notification service scheduled task、research result、notification payload 后台结果需要重新进入安全和权限检查 user opt-in、quiet hours、fresh ACL、delivery channel policy task_id、trigger_time、policy_version、delivery status 用户撤销、权限变化或风险升级时跳过执行,只发可解释失败状态。
机制 设计 面试解释
来源包装 RAG、网页、文件、connector、tool output 都进入 source block,带 provenance、timestamp、scope 和 taint bit 模型可以引用这些内容作为证据,但不能把其中的“忽略上文”“导出密钥”等句子当成更高层级指令。
指令层级 system/developer > user > tool contract;untrusted source 永远低于用户目标和平台策略 外部内容只能影响回答事实,不能扩大权限、改变收件人、要求访问其他 connector 或关闭安全检查。
秘密和外传 secret redaction、DLP、egress policy、clipboard/download/email guard、cross-source join 检测 从不可信内容派生的导出、邮件、表单提交、下载和权限变更必须重新走 policy_eval 与用户确认。
缓存污染 cache key 包含 tenant、principal、scope、policy_version、doc_version、safety label 禁止跨用户、跨租户、跨 project 复用 connector/RAG 结果;撤权 tombstone 先在 query-time 生效,再异步清理旧索引。
资源 权限策略 撤权 / 删除语义
RAG / connector 检索时按当前 user、org、project、OAuth scope、document version 和 ACL version 过滤 权限不在索引构建时一次性固化;query-time 再验证,授权过期、撤权或 ACL 服务异常时 no-answer。
Memory personal memory、project memory、reference chat history 分开;Temporary Chat 不读写个性化 memory Temporary Chat 可保留有限安全上下文并短期保留副本,但不进入个性化记忆;用户禁用或删除 memory 后,候选、索引和摘要缓存都要停止使用。
Files and artifacts 上传文件、项目知识文件、GPT knowledge、代码执行产物、Canvas export 用不同 resource type 下载 URL 是短期签名能力,不给模型;分享、导出和删除要独立检查 owner/collaborator/admin 权限。
Admin policy workspace admin 控制 Agent toggle/RBAC、apps、connectors、GPT actions、sharing、retention、data residency 和 compliance export 用户 OAuth 授权不能越过管理员禁用策略;Agent 只用 workspace 启用的 apps,Compliance API 暴露 agent conversation 而非每个虚拟机/app 子请求。
01 PROPOSED tool/action request model proposes intent, target resource and parameters
02 POLICY_EVAL server-side gate principal + resource + action + context + admin policy
03 DRY_RUN preview side effects diff, external call plan, reversible/irreversible flag
04 CONFIRMATION human approval explicit consent for high-impact or external actions
05 WATCH / TAKEOVER observe or interrupt pause, revoke capability token, user/admin takeover
06 OUTCOME FORK policy-controlled branch
EXECUTE REFUSE FAIL_CLOSED
07 AUDITED immutable event trail outbox, policy_version, capability id, result hash
08 TERMINAL DONE / COMPENSATING / APPEAL finish, reconcile side effect, or route user appeal
场景 控制 边界
状态机 PROPOSED -> POLICY_EVAL -> DRY_RUN -> CONFIRMATION -> EXECUTING -> AUDITED -> DONE/COMPENSATING 模型只能提出 tool call;执行器根据 policy 和确认记录决定是否真的调用外部系统。
低影响动作 只读搜索、读取当前用户授权文件、生成草稿、预览 patch 可自动执行 仍要记录 scope、source、参数和结果摘要;只读不等于无风险,敏感数据读取也要 DLP。
高影响动作 发邮件、付款、提交表单、共享文件、删除、改权限、发代码变更必须确认 确认界面展示收件人、金额、域名、资源名、diff、数据来源和不可逆影响;确认后生成不可抵赖审计事件。
Browser / terminal 网页 DOM、终端输出和截图限制在 agent run;cookies、saved logins 属于持久 browser profile 登录态只在 VM 内使用且不能给模型明文;网络和文件系统按能力令牌授权,需要跨站提交、下载、上传或复制敏感内容时重新确认。
Code Executor Data Analysis / Code Interpreter 无外部 Web/API 请求;Canvas / custom executor 默认关网络或由管理员控制 外部数据通过上传或 connected source 进入;Canvas 预览遇到未知第三方通信要用户确认;自建执行器才设计 allowlist、egress proxy、DLP、audit。
场景 控制面动作 面试要点
Policy service down 使用短 TTL signed policy cache 服务低风险聊天;高风险工具、企业数据、connector、代码执行和共享 fail closed 策略未知不能默认放行;cache key 含 policy_version、tenant、region、user age/tier 和 resource scope。
Audit sink down 低风险事件写本地 outbox 后补投;高影响动作、管理员变更、外部副作用和合规导出暂停 可用性不能牺牲可追责性;outbox lag 进入 SLO 和 burn-rate 控制。
False positive 提供可解释拒绝、用户申诉、人工复核队列、policy replay 和 allowlist change request 误杀会伤害用户体验;修复要回放同一 request/context/policy_version,避免靠主观感觉改规则。
False negative incident kill switch、block identifier、撤回 artifact/share、禁用 tool lane、补跑 redaction 和通知受影响租户 漏拦的处理对象包括回答、文件、分享链接、Canvas export、connector 外发和第三方动作。
Red-team / evals 把 prompt injection、exfiltration、jailbreak、tool poisoning、media abuse 和 connector leak 做成发布硬门禁 新模型、新工具 schema、新 connector、新安全策略都要 shadow replay 和 adversarial eval,不能只测普通 QA。
Incident loop 记录 blast radius、policy diff、trace sample、user impact、rollback/kill switch、补偿动作和 postmortem owner 安全事故闭环最终要回到 release gate、监控规则、红队用例和用户控制,而不是只修一次热补丁。
Deletion / compliance 删除状态优先于旧索引;训练候选、评测样本、日志、对象存储、向量库、缓存和备份分别有 tombstone 路径 合规删除是控制面状态,不是主表 delete;所有读路径先检查 tombstone 和 retention policy。
数据 保留 / 训练 删除 / 合规语义
Conversation / messages 按用户或企业 retention policy 保存;Temporary Chat 不用于训练并短期保留后删除 删除要传播到搜索、摘要、评估候选和缓存;法律、安全和滥用调查例外需要单独审计。
Business / Enterprise / Edu data 默认不用于训练;管理员可配置保留、连接器、共享、数据驻留和合规导出 设计里把 training candidates 与 serving logs 物理/逻辑隔离,只有授权、脱敏、过滤后的样本能进入训练候选池。
Shared links / Canvas share 个人版是 public bearer snapshot link;Business/Enterprise 是 workspace-scoped link Enterprise 共享聊天可继续展示分享后新增消息;unshare 或删除后链接失效,viewer 继续对话会生成私有副本;分享前提示敏感内容并审计 share/unshare。
Files / GPT knowledge / Project files conversation file、Library file、GPT knowledge、Project file 分 resource type 和 owner lifecycle 删除 chat 删除对话及已拉入上下文的引用/派生内容;已保存到 Library 的文件需单独删;Temporary Chat 文件不入 Library;Project/GPT 删除要 tombstone 知识文件和索引。
Voice / image / media assets 文本、图片、语音/视频片段、转写、图片生成输入输出按 plan、workspace、consent 和 residency 分开保留 个人用户可选择分享音视频训练;Business/Edu/Enterprise workspace 不允许用户分享语音/视频用于训练。EXIF、PII、缩略图、签名 URL 和生成 asset 都要独立删除传播。
Memory 用户可查看、禁用、删除;memory candidate、approved memory、embedding 和摘要缓存分层删除 删除 memory 不等于改写历史对话;系统要停止未来使用,并保留最小审计证明删除已传播。
Agent browser state 任务能力令牌和 VM 执行权限随任务结束失效;cookies、saved logins 可跨会话保留并由用户清理 普通 Chat/Temporary Chat 见 30 天窗口;Agent chat、浏览历史和截图随对话保留,删除后按 Agent 的 90 天窗口清理;用户接管期间不采集截图。
Logs / traces / compliance trace 用最小必要字段;合规 API/导出面和内部审计面分层 请求、策略决策、工具动作摘要和高风险确认可查;chain-of-thought、密钥、cookie 和原始截图不进入普通分析日志。
Backups and deletion 在线索引先删除或 tombstone,备份按固定窗口过期;删除状态比旧索引优先 面试里说明“删除不是只删主表”:OLTP、对象存储、向量库、搜索索引、缓存、outbox、备份和训练候选都要有删除路径。

16. 评估、可观测性和成本

大模型系统上线后,质量必须能被回放和打分

传统服务只看错误率不够。LLM 产品还要看回答质量、引用正确性、工具决策、Agent trace、 安全拦截、GPU 利用率和每 token 成本。没有 trace,就无法解释一次坏回答是检索错、工具错、 prompt 错还是模型错。

Observe → Diagnose → Gate → Act
TTFTmodel=Tqueue+Tprefill+Tfirst decodeTTFCuser=Tadmit+TTFTmodel+Trelay+Tnetwork+TclientChunkGapuser=max(Tdecode step,Trelay,Tclient backpressure)TTAvoice=Tsession+TVAD+TASR+Treason+TTTS first audioBurnRates=#{¬GoodEvents}/#{Eventss}1SLOTargetsBillableUsage=(ni,ncache,no,tool units)LedgerDrift=UresponseUledgerCOGSturn=cini+ccncache+cono+cgtgpu+cktkv+cxtsandbox+crAction=f(BurnRate,TraceCause,EvalRegression,QuotaBurn,LedgerDrift,COGSforecast)\begin{aligned} \mathrm{TTFT}_{\mathrm{model}} &= T_{\mathrm{queue}}+T_{\mathrm{prefill}}+T_{\mathrm{first\ decode}}\\ \mathrm{TTFC}_{\mathrm{user}} &= T_{\mathrm{admit}}+\mathrm{TTFT}_{\mathrm{model}}+T_{\mathrm{relay}}+T_{\mathrm{network}}+T_{\mathrm{client}}\\ \mathrm{ChunkGap}_{\mathrm{user}} &= \max(T_{\mathrm{decode\ step}},T_{\mathrm{relay}},T_{\mathrm{client\ backpressure}})\\ \mathrm{TTA}_{\mathrm{voice}} &= T_{\mathrm{session}}+T_{\mathrm{VAD}}+T_{\mathrm{ASR}}+T_{\mathrm{reason}}+T_{\mathrm{TTS\ first\ audio}}\\ \mathrm{BurnRate}_s &= \frac{\#\{\neg \mathrm{GoodEvent}_s\}/\#\{\mathrm{Events}_s\}}{1-\mathrm{SLOTarget}_s}\\ \mathrm{BillableUsage} &= (n_i,n_{\mathrm{cache}},n_o,\mathrm{tool\ units})\\ \mathrm{LedgerDrift} &= |U_{\mathrm{response}}-U_{\mathrm{ledger}}|\\ \mathrm{COGS}_{\mathrm{turn}} &= c_i n_i+c_c n_{\mathrm{cache}}+c_o n_o+c_g t_{\mathrm{gpu}}+c_k t_{\mathrm{kv}}+c_x t_{\mathrm{sandbox}}+c_r\\ \mathrm{Action} &= f(\mathrm{BurnRate},\mathrm{TraceCause},\mathrm{EvalRegression},\mathrm{QuotaBurn},\mathrm{LedgerDrift},\mathrm{COGS}_{\mathrm{forecast}}) \end{aligned}

面试里最关键的不是背指标名,而是把指标接到动作。一次 TTFT 越线要能沿 trace 钻到 admission、 队列、prefill、decode、stream relay 或客户端背压;一次质量回归要能定位到模型、prompt、 RAG index、工具 schema 或安全策略版本;一次成本越线要能驱动限流、降模型、缩上下文或扩容。 这里的 TTFT_model 是模型服务首 token,TTFC_user 是用户侧首 chunk;BillableUsage 用于计费解释, COGS_turn 用内部摊销单价 c_* 估成本,二者不能混算。

Product surfaces Client / Gateway / Chat stream Model / GPU / KV cache RAG / Connectors / Memory Tools / Agent / Sandbox Canvas / Voice / Image
Telemetry planes metrics traces events redacted logs cost ledger quality / latency / cost / safety / agent trace
Diagnose / Gate / Act Diagnose SLO burn-rate alerts + anomaly detection Gate eval / canary gates before rollout Act runbook / rollback / traffic shift Budget model downgrade / context trim / scale GPU

用户体验

TTFT 拆成 admission、queue、prefill、first decode、stream relay、client backpressure;再看断流、取消、重试和反馈。

GPU 运行

GPU/HBM、free KV blocks、KV eviction、prefix cache hit、batch wait、scheduler starvation、deadline miss。

RAG 质量

召回、rerank、groundedness、引用正确率、ACL/version/freshness、connector sync lag、external rate limit。

记忆质量

Saved Memory、Reference Chat History、Project Memory 和 Temporary Chat 要看写入正确率、删除传播和边界泄漏。

工具质量

tool success、timeout、retry、confirmation precision/recall、Agent step rollback、Watch Mode interrupt、任务完成率。

实时语音

WebRTC/session setup、RTT/jitter/loss、VAD、ASR、TTS first audio、barge-in 和 reconnect 直接决定体感。

安全质量

policy decision、误杀/漏拦、prompt injection、数据外传、terminal 网络违规、write action 阻断和 fail-closed。

成本质量

按 model/tier/region/tenant/surface 拆 tokens、GPU seconds、sandbox minutes、sync/index/egress,并对账 usage ledger。

端到端 trace

root/inference/retrieval/tool/agent/code spans 记录版本、token、finish reason、脱敏摘要和 artifact pointer。

后台任务

Tasks/Pulse 观测 schedule skew、checkpoint、retry、过期/取消、通知送达和异步研究结果回写。

产品面 用户面 SLI Good / Bad event Trace / Span 来源 SLO / 告警 排障和容量动作
Streaming chat TTFT_model、TTFC_user、TPOT、chunk gap、completion latency、disconnect、cancel、retry Good = 2xx 且 TTFC_user <= T1、TPOT <= T2、无断流;Bad = 超阈值、5xx、stream_disconnect、deadline_exceeded。 root request span + inference span + stream relay span + client ack/backpressure 用 5m/1h 和 30m/6h 多窗口 burn rate;P99 只做症状面板,不直接当 burn-rate 分母 按 trace 定位 admission、队列、prefill/decode、relay 或客户端;必要时限流、降模型、缩上下文、扩推理池。
GPU inference per-model deadline miss、queue wait、tokens/s/GPU、OOM、KV block pressure Good = batch 在 deadline 内完成且无 OOM/eviction storm;Bad = queue wait 超阈值、deadline miss、OOM、scheduler starvation。 router span、scheduler batch span、prefill/decode worker span、KV cache events 按 model/tier/region/tenant 分池做 burn rate 和容量水位告警;避免全局平均掩盖高优先级队列 调整 admission、continuous batching、chunked prefill、prefix cache、跨池借 GPU 或暂停低优先级长上下文。
RAG / connectors retrieval latency、ACL deny/no-answer、citation correctness、freshness、sync lag、external 429 Good = ACL 可验证、freshness 在窗口内、引用可追溯;Bad = stale source、ACL unknown、external 429/5xx、错误引用。 query rewrite、embedding、vector search、rerank、connector fetch、ACL check spans 按 connector、index version、ACL version、doc freshness 建 SLO;权限未知直接 no-answer 回滚 index、重建 ACL filter、降级为无连接器回答、暂停 stale source、触发 sync repair。
Memory extraction precision/recall、source attribution、write/apply latency、delete propagation、boundary violation Good = 只在允许面引用正确记忆且来源可追溯;Bad = 错误写入、Temporary Chat 读写 memory、删除后仍使用、Project 边界泄漏。 memory_extract、memory_write、memory_apply、memory_delete spans,带 memory hash、source_event、visibility、project boundary 按 saved memory、reference chat history、project memory 切片;deleted-memory use 和 boundary violation 是高优先级事件 冻结写入、禁用相关 memory source、强制 tombstone 优先生效、重放删除 outbox、回滚 memory policy。
Agent / tools tool success、step timeout、approval latency、漏确认、rollback、Watch Mode interrupt Good = policy allow/confirm 后动作完成且审计齐全;Bad = timeout、漏确认、retry exhausted、rollback、用户中断。 agent run/step span、tool execute span、policy_eval span、confirmation snapshot 高影响 action 漏确认为 P0;工具 timeout 用 dependency + action type 切片 禁用高风险 action、降到草稿模式、要求 takeover、回滚工具 schema 或拉黑异常 domain。
Safety / policy policy latency、decision error、unsafe allow、false refusal、DLP redaction、prompt injection/exfiltration block Good = policy bundle 可用且正确裁决;Bad = unsafe allow、policy timeout fail-open、误拒激增、外传检测绕过。 policy_eval span、classifier span、redaction event、policy_bundle_version、classifier_version unsafe allow 和 fail-open 单独高优先级告警;按 policy bundle / classifier version 切片 fail closed、禁工具/连接器、回滚策略包或分类器、提高确认门槛并触发安全回放集。
Voice / Realtime session setup、WebRTC RTT/jitter/loss、VAD endpoint、ASR partial/final、TTS first audio、barge-in、reconnect Good = 首音频和打断在阈值内、丢包可恢复且无音频安全超时;Bad = setup fail、ASR/TTS 超时、barge-in miss、reconnect storm。 realtime session span、webrtc transport span、VAD/ASR/TTS spans、audio safety span、client playback ack 按 region、relay、device、codec、network type 切片;P99 首音频、jitter/loss 和 reconnect 分开告警 切文本模式、关闭 full-duplex、回滚 ASR/TTS、按 region 扩 relay、降采样音频或提示重连。
Image / multimodal upload latency、media safety latency、EXIF/PII strip、generation queue、render fail、artifact/CDN publish、feedback Good = 安全扫描、生成/编辑、发布和引用都在阈值内;Bad = policy refusal 激增、渲染失败、asset 发布失败、CDN/egress 异常。 media upload span、image safety span、image generation/edit span、artifact publish span、feedback/eval span 按 model、size、style/edit mode、region、safety policy、asset type 切片;render fail 和 unsafe publish 是高优先级 回滚图像模型或 safety policy、切低分辨率/异步队列、禁异常编辑模式、暂停 CDN 发布并重扫 artifact。
Canvas / Code Executor patch apply success、preview startup、sandbox queue、runtime/memory、AV scan、artifact publish Good = patch/preview/job/artifact 在阈值内完成且扫描通过;Bad = anchor conflict、sandbox timeout、AV fail、publish blocked。 artifact patch span、preview sandbox span、container job span、file scan/artifact span 交互式代码执行看 P99 queue wait;预览网络确认和 artifact 扫描失败单独告警 降级为静态 diff、限制大文件/高内存任务、扩 sandbox worker、暂停下载发布。
Tasks / Pulse schedule skew、checkpoint age、retry exhaustion、expired/cancelled、notification delivery、fresh ACL Good = 触发、研究、重校验、通知均在窗口内;Bad = missed trigger、retry exhausted、expired result、delivery fail。 scheduler trigger span、research job span、checkpoint span、notification span 后台任务用时延和积压告警;发送前重新校验 ACL、quiet hours 和 delivery policy 重排队、补偿通知、丢弃过期结果、暂停某连接器研究或切换低成本模型。
Deletion / compliance tombstone propagation lag、cache purge lag、index deletion lag、training candidate quarantine Good = tombstone 先于旧索引生效且传播在 SLO 内;Bad = 查询绕过 tombstone、缓存未清、训练候选未隔离。 delete request span、outbox span、object/vector/search/cache delete spans 删除传播超 SLO 或 tombstone 查询绕过是高优先级安全事件 先让 query-time tombstone 生效,再异步清索引/备份;冻结训练候选并输出合规审计。
Billing / usage ledger usage event durability、idempotency conflict、token reconciliation、quota counter drift、invoice/export lag、refund state Good = response usage、ledger、quota 和 invoice/export 可对账;Bad = 丢 usage event、重复计费、quota 漂移、出账延迟或退款未闭环。 usage_meter span、ledger append span、quota counter span、billing export span、refund/adjustment span ledger completeness 和 reconciliation drift 单独告警;按 plan、workspace、model、surface 和 billing cycle 切片 冻结出账、保守扣减 quota、从 outbox 重放 usage event、生成 adjustment/refund、修正 invoice export。
平面 记录什么 采样 / 隐私边界
Metrics 低基数聚合:SLI、burn rate、queue depth、token/s、GPU utilization、cost per turn、ledger drift、policy decision counts 标签只放 plan/model/region/surface/status/error_type 等有限集合;不放 prompt、doc_id、user_id、URL 或异常文本。
Traces 按 request_id 串 root、inference、retrieval、tool、agent、code、voice/image、billing spans 采样率按风险和错误动态提高;高风险安全、账务、删除和高影响动作强制采样。
Events 可回放事实:response_events、tool_call/result、policy_decision、approval_snapshot、usage_event、delete_tombstone、artifact_state 事件是事后解释和补偿的真源;至少一次投递时靠 idempotency_key 和 ledger_seq 去重。
Logs 脱敏诊断文本:错误摘要、截断 stdout/stderr、provider error class、runbook note、human review decision 日志不作为低基数 metric 标签,不保存 chain-of-thought、cookie、secret、完整截图、原始音频或未脱敏文件内容。
Artifacts 受控回放对象:脱敏 prompt bundle、RAG evidence pointer、截图/音频/文件 pointer、Canvas patch、image asset、eval sample artifact 读取必须重新鉴权;保留期、删除和训练资格独立于普通 trace。
Span 必须记录的版本和归因字段 隐私和高基数边界
All critical spans status、outcome、error.type、retry_attempt、deadline_ms、cancel_reason、dependency、sampled、redaction_policy_version error.type 低基数化,例如 timeout、policy_denied、dependency_429、oom、user_cancel、retry_exhausted;避免把异常文本当标签。
Root / request request_id、conversation_id、tenant_id、region、plan/tier、surface、router_version、prompt_version、policy_version、sampling_rate tenant/user 是分区键不是高基数标签滥用;普通 trace 不写原始 prompt、chain-of-thought、cookie、密钥。
Inference model/requested_model/served_model、input/output/cached tokens、stream=true、finish_reason、TTFT_model、TTFC_user、TPOT、queue/prefill/decode timing 只记录 token counts 和脱敏错误类型;内容回放走受控 artifact pointer 与权限检查。
Retrieval / connector connector_id、index_version、ACL_version、query_hash、top_k、rerank_version、freshness、no-answer reason doc_id、snippet、embedding 不进普通 metric 标签;只存脱敏摘要、citation pointer 和版本。
Memory memory_id/hash、source_event_id、memory_version、visibility、project_id、memory_policy_version、temporary_chat=false、delete_tombstone_version memory 文本不做标签;删除后 trace 只能保留最小审计字段,并证明未来 serving 不再引用。
Tool / agent agent_run_id、step_id、tool_name、schema_version、risk_level、policy decision、approval_id、tool result summary 工具参数和结果默认 redacted;截图、DOM、下载文件放对象存储并按权限、保留期和采样策略访问。
Voice / realtime session_id、ephemeral_key_id、region、relay_id、codec、RTT/jitter/loss、VAD delay、ASR final latency、TTS first audio、barge_in 普通 trace 不存原始音频;必要时只存短期受控音频 artifact pointer、转写摘要和安全判定版本。
Image / multimodal media_id、asset_id、model、size、mode(upload/generate/edit)、safety_verdict、EXIF_strip、generation_queue、render_status、cdn_publish、egress_bytes 原图、生成图和编辑 mask 只放受控对象存储;普通 trace 只记录指针、版本、大小桶、安全结论和失败类型。
Canvas / code artifact_id、base_version、patch_id、sandbox_id/container_id、runtime、memory、file_scan_result、publish_state stdout/stderr、traceback 和文件预览先截断脱敏;下载 URL 只做短期签名,不进入模型 trace。
Async task task_id、schedule_time、trigger_time、checkpoint_seq、retry_count、fresh_acl_version、notification_channel、delivery_status 后台研究结果发送前重新做权限和 DLP;失败摘要可观测,用户内容仍按会话/企业保留策略处理。
Billing / usage ledger usage_event_id、idempotency_key、response_id、model、input/output/cached tokens、quota_counter_version、ledger_seq、invoice_batch_id 账务 trace 记录数值和版本,不写 prompt;workspace/user 只用于授权和对账分区,避免高基数 metric 标签。
症状 首查面板 / Query 关键 Span 常见根因 降级 / 回滚动作
TTFT 慢 TTFC_user 分解面板:admission、queue、prefill、first decode、relay、client ack root request、router、scheduler batch、inference prefill/decode、stream relay 配额/策略慢、模型池排队、长上下文 prefill、KV pressure、relay backpressure、客户端慢读 按模型池限流、降模型、缩上下文、扩 GPU/relay、关闭低优先级工具或返回 retry_after。
引用错 / 无引用 citation correctness、ACL unknown、index freshness、connector 429、rerank version query rewrite、embedding、vector search、rerank、connector fetch、ACL check 索引过期、ACL tombstone 未优先、connector sync lag、reranker 回滚、模型未使用证据 no-answer/fail closed、重建索引、回滚 rerank、暂停 stale source、把样本加入 groundedness eval。
工具半成功 tool timeout、provider operation id、idempotency conflict、confirmation snapshot、retry exhaustion agent step、policy_eval、tool execute、outbox/reconciliation 外部 provider 超时、确认后网络断开、重复重试、副作用状态未知、schema 版本不兼容 进入 UNKNOWN/NEEDS_REVIEW、查 provider status、停止自动重试、高影响动作让用户确认补偿。
成本暴涨 forecast burn、tokens/cache miss、GPU seconds、sandbox minutes、connector sync、egress usage_meter、inference、cache、tool/agent、container job、connector sync 长上下文比例升高、prefix cache miss、Agent 步数失控、大文件/图像生成激增、重试风暴 预算熔断、降模型、限制步数/文件/分辨率、启用摘要、暂停异常 connector 或任务队列。
质量回退 canary delta、regenerate/complaint、eval score、model/prompt/router/index/policy version diff root、router、inference、retrieval、tool、policy bundle 模型别名切换、prompt 包变更、router 规则错误、tool schema 漂移、index manifest 错 暂停放量、version pinning、回滚 artifact、shadow replay 失败样本、扩大人工标注。
安全漏拦 unsafe allow、prompt injection block rate、DLP miss、high-impact confirmation miss、exfiltration signal classifier、policy_eval、redaction、tool execute、connector fetch 策略包回归、分类器阈值错误、tool output 未 taint、connector 数据外传、确认 UI 缺字段 kill switch、fail closed、禁相关工具/connector、回滚策略、补跑安全回放和通知受影响租户。
账单对不上 usage event completeness、ledger_seq gap、quota drift、invoice batch、refund/adjustment state usage_meter、ledger append、quota counter、billing export、refund/adjustment stream retry 重复事件、final usage 丢失、outbox lag、幂等键冲突、模型/tokenizer 版本不一致 冻结出账、从 outbox 重放、保守 quota、生成 adjustment/refund,并把差异样本加入对账回归集。
阶段 指标 怎么定位 动作
Admission / quota admission latency、quota lookup、tenant budget、rate-limit decision 慢在入口通常是身份、配额、策略或区域路由服务抖动 缓存短 TTL 配额、降级非关键个性化、对低优先级租户返回 retry_after。
Queue / scheduler per-model queue wait、batch wait、deadline miss、priority inversion、scheduler starvation P99 TTFT 高但 GPU 利用率不满,多半是队列、公平性或 batch 策略问题 按 tier 分队列、调整 batch window、切换模型池、限制超长上下文。
Prefill / KV prefill time、prompt tokens、free KV blocks、KV eviction、prefix cache hit、HBM bandwidth 长上下文和 cache miss 会把首 token 拖慢,KV eviction 会引入抖动 压缩上下文、启用 prefix cache、PagedAttention 调参、限制低价值历史注入。
Decode / stream TPOT、decode tokens/s、stream chunk gap、relay buffer、client backpressure TPOT 慢看 GPU decode;chunk gap 大但 decode 正常看 relay 或客户端消费 分离 relay 告警、背压时降采样 trace/取消低优先级流、扩 decode worker。
Dependency / tool connector latency、tool timeout、sandbox startup、external 429、confirmation wait 总耗时慢但模型正常,多半是 RAG、工具、代码沙箱或用户确认等待 设置 per-tool timeout、返回部分结果、降级只读模式、预热 sandbox、隔离外部依赖。
检测主题 方法 自动动作
Seasonality baseline 按小时/星期/地区/plan 建立请求、token、GPU、工具、语音、图像和账务基线 ChatGPT 流量有强周期;只用固定阈值会把高峰误报或把慢性退化漏掉。
Per-surface robust score 对 TTFT、citation error、tool timeout、policy refusal、image render fail、ledger drift 用 robust percentile/z-score 按 surface、model、connector、region 切片,避免全局均值掩盖局部事故。
Canary delta 新模型/prompt/router/tool schema/index/policy 与 stable bucket 比较质量、延迟、安全和成本 delta 越线自动暂停放量;人工只处理少量边界样本和业务取舍。
Connector spike 外部 429/5xx、ACL unknown、sync lag、doc freshness、no-answer rate 出现异常时隔离 connector 一个 SaaS connector 的异常不能拖垮全局 RAG,也不能用旧内容假装检索成功。
Safety anomaly unsafe allow、DLP miss、exfiltration signal、high-impact confirmation miss、prompt injection block rate 激增 安全异常优先于可用性;必要时 fail closed、禁工具、禁 connector 或切只读。
Ledger anomaly usage event gap、idempotency conflict、quota drift、invoice/export lag、refund queue age 异常 账务异常先冻结出账和保守 quota,再重放 outbox;不要把重复 retry 当新增消费。
评估层 样本来源 指标 发布门禁
Offline eval golden set、hard negatives、真实 trace 抽样、RAG/工具/Agent/安全多语言用例 answer correctness、groundedness、citation accuracy、tool decision、policy precision/recall 新模型、prompt、router、index、tool schema 低于基线或置信区间不通过就不能灰度。
Online eval 用户反馈、regenerate、conversation abandon、人工标注、LLM judge 抽检 满意度 proxy、bad answer rate、judge-human agreement、per-surface regression 线上只做抽样和切片,不把 LLM judge 当唯一真值;关键样本回流离线集。
Safety regression jailbreak、indirect prompt injection、secret exfiltration、漏确认、policy bypass attack success rate、false refusal、unsafe allow、high-impact action miss 安全越线直接 block rollout 或关闭对应能力,不能用平均满意度抵消安全失败。
Canary / A/B 按 plan、region、model、connector、surface、language 分桶 latency、cost、quality、safety、tool success、complaint delta 指标恶化触发自动 rollback;只扩大通过所有硬门槛的桶。
Release artifact model card、prompt bundle、router config、index manifest、schema diff、policy bundle version lineage、replayability、approval record、rollback target 每次发布都能用同一 trace 重放到旧版本,否则事后无法解释质量回归。
产品面 信号 典型故障 处置
Apps / Connectors sync sync lag、delta cursor age、ACL drift、index build error、external 429/5xx、freshness 连接器看似可用但返回过期或越权内容,比直接失败更危险 stale source 降级为 no-answer 或提示重新连接;sync worker 和 query-time ACL 分开告警。
Memory candidate extraction、write/apply、source citation、delete tombstone、project visibility、Temporary Chat bypass 错记、误用已删除记忆、跨项目引用或 Temporary Chat 仍读写个性化记忆 冻结 memory 写入,强制 tombstone,回滚 memory policy,把高风险样本送人工标注和回放集。
Voice / Realtime session setup、WebRTC RTT/jitter/loss、VAD、ASR/WER、TTS first audio、barge-in、reconnect、audio safety 首音频慢、打断无效、网络抖动、ASR 听错或音频安全链路超时 切文本、关闭 full-duplex、扩 relay、回滚 ASR/TTS 模型、按设备和区域分桶排障。
Image / multimodal upload queue、media safety、EXIF/PII stripping、generation/edit queue、render fail、asset publish/CDN、egress、feedback 图像安全误判或漏判、编辑 mask 错位、生成失败、产物发布失败、CDN 链接异常或生成成本飙升 回滚图像模型/安全策略,切异步队列或低分辨率,暂停异常 asset 发布,重扫媒体对象并回放用户反馈。
Agent browser step count、takeover count、site block hit、download/upload、approval wait、screenshot redaction 长任务跑偏、登录态滥用、网页 prompt injection 或高影响动作漏确认 触发 Watch Mode、中断/回滚、收紧 domain policy、复核工具 schema 和确认 UI。
Canvas patch validation、anchor confidence、merge conflict、preview error、share/import/export 模型 patch 覆盖用户新改动,或预览代码发生未知第三方通信 低置信 reanchor、冲突转人工确认、未知网络通信 pending、share/unshare 审计。
Code Executor queue wait、startup、runtime、memory、stdout truncation、file scan、artifact download 沙箱冷启动或 AV 扫描积压导致用户以为模型卡住 预热 worker、按 memory tier 分池、限制大文件、扫描未过不发布 artifact。
Tasks / Pulse schedule skew、missed trigger、checkpoint age、retry、expiry、notification success、fresh ACL 后台结果过期、权限变化后仍发送、通知失败或研究成本失控 发送前重校验 ACL,过期丢弃,通知补偿,按预算切低成本模型或暂停研究。
Billing / usage ledger usage event completeness、idempotency conflict、token reconciliation、quota drift、invoice/export lag、refund status 用户看到用量、配额和发票不一致,或 retry 导致重复/漏记 usage event 冻结出账,从 outbox 重放,保守 quota,生成 adjustment/refund,并把对账差异回填审计。
成本驱动 拆账维度 预算保护 动作
Model tokens model、tier、region、tenant、surface、input/output/cached tokens、context length bucket per-tenant token budget、超长上下文占比、cache miss 率、forecast burn 降模型、缩上下文、启用摘要或 prefix cache、对低优先级请求排队/429。
GPU residency GPU seconds、KV residency、batch occupancy、HBM pressure、idle gap、deadline miss tokens/s/GPU 低于阈值且队列高;KV eviction 或 OOM 上升 调 batch window、拆 prefill/decode 池、跨允许区域借 GPU、暂停长上下文。
Tools / Agent tool call count、external API cost、browser minutes、approval wait、failed retry 单任务 step budget、domain budget、tool retry budget、高影响动作确认预算 限制步数、切草稿模式、禁高成本工具、提示用户确认成本或人工接管。
Code / artifacts sandbox minutes、memory tier、file size、scan time、artifact storage、download egress runtime/memory/file budget、AV scan backlog、signed URL abuse 按 tier 分池、拒绝超限文件、压缩产物、延迟发布下载或转异步任务。
Connectors / RAG sync CPU、embedding、vector index、storage、egress、external rate-limit penalty sync lag、stale source、index rebuild cost、per-connector quota burn 降低 sync 频率、只重建变更分片、停用异常 connector、用 no-answer 保护权限。
Billing correctness usage_event_id、response_id、model、tokens、tool units、quota counter、invoice batch、refund/adjustment ledger completeness、idempotency conflict、token count reconciliation、quota drift、invoice/export lag 冻结出账、从 outbox 重放、对账修正、保守 quota、生成退款或 adjustment。

17. 发布、评测和训练闭环

模型升级必须像后端发布一样可灰度、可回滚、可追责

面试主线不应该变成训练大模型,但要说明线上 ChatGPT 一定有评测和训练反馈闭环。 新模型、新 prompt、新 router、新工具 schema、新 RAG index、安全策略、Voice、Canvas、Code Executor、 Tasks、Connectors 和 Memory 都要经过离线评测、安全评测、shadow traffic、risk-based canary 和回滚策略。 用户反馈和日志能成为评测或训练候选,但必须先经过授权、脱敏、过滤、标注校准和数据隔离。

Gate → Ramp → Learn
Ship=(QΔϵq)SafetyPassSLOPass(ΔCB)Rampk+1=g(BurnRate,EvalDelta,CostDelta,IncidentRisk)TrainCandidate=ConsentPolicyOKPIIRedactedQualityPass¬Duplicate\begin{aligned} \mathrm{Ship} &= (Q_{\Delta}\ge -\epsilon_q)\land\mathrm{SafetyPass}\land\mathrm{SLOPass}\land(\Delta C\le B)\\ \mathrm{Ramp}_{k+1} &= g(\mathrm{BurnRate},\mathrm{EvalDelta},\mathrm{CostDelta},\mathrm{IncidentRisk})\\ \mathrm{TrainCandidate} &= \mathrm{Consent}\land\mathrm{PolicyOK}\land\mathrm{PIIRedacted}\land\mathrm{QualityPass}\land\neg\mathrm{Duplicate} \end{aligned}

这章的核心回答是:发布不是“把模型换掉”,而是把所有会改变回答、权限、延迟、成本和安全边界的 artifact 都纳入同一条 release control plane。Ship 是硬门禁,Ramp 是可暂停的灰度函数,TrainCandidate 则只描述“有资格进入候选池”,不代表一定进入训练。

Release control plane one pipeline gates model, prompt, router, tool schema, index and policy artifacts
Artifact registry model / prompt / router / tool schema / index / policy
Offline eval golden set / hard negatives / graders / human labels
Safety hard gate prompt injection / DLP / high-impact action / media abuse
Shadow replay trace diff / cost replay / latency replay / tool decision diff
Canary / ramp stable bucket / SLO burn / quality delta / budget guard
Version pinning conversation / agent run / container / artifact contract
Rollback / kill switch alias / feature flag / domain allowlist / safety policy
Post-launch learning feedback / incident trace / eval candidate / label task
Dataset quarantine consent / PII redaction / near-dedupe / eval_only fence / leakage audit vetted eval/training candidates exit to registry and offline eval

Offline eval

通用问答、代码、数学、长上下文、RAG、工具、Agent、安全拒答、中文和多语言都要有回归集。

Safety eval

越狱、间接 prompt injection、数据外传、高风险工具动作、漏确认、Watch Mode 中断和隐私泄露要单独红队。

Shadow traffic

新模型先吃影子流量,记录差异、延迟、成本和安全结果,不直接影响用户。

Canary rollout

不是背固定百分比,而是按风险分级、稳定分桶、门禁指标和容量预算逐步 ramp。

Rollback

模型、prompt、router、tool schema、RAG index 和安全策略都要版本化并能快速回退。

Training feedback

反馈和日志先过授权、PII 脱敏、质量过滤、去重、标注和 judge 校准,再进入 eval 或训练候选。

阶段 产物 门禁 控制面动作
Candidate assembly model card、prompt bundle、router config、tool schema、RAG index manifest、policy bundle、feature flags 每个 artifact 都有 immutable version、owner、risk level、rollback target 和 replay dataset。 发布配置用幂等写入和审批流;同一个 release_id 可重试,不能产生两个不同线上版本。
Offline / continuous eval golden set、production trace sample、hard negatives、expert labels、LLM judge rubrics 质量不能低于基线容忍区间;LLM judge 要和人工标注校准,不能单独作为真值。 每次模型、prompt、router、index、schema、policy 变化都触发 CE;失败样本进入回归集。
Safety hard gate Model Spec scenarios、jailbreak、prompt injection、data exfiltration、高影响工具动作、危险能力 eval unsafe allow、policy bypass、危险能力越线、隐私泄漏是硬阻断,不能被平均满意度抵消。 安全 owner 可 veto;必要时只发布低风险能力、提高确认门槛或关闭工具/连接器。
Shadow replay 线上请求的脱敏 replay、synthetic load、trace diff、cost estimate 新版本不影响用户,但要比较质量、延迟、token、工具选择、安全裁决和成本。 shadow 流量受预算和 GPU 配额限制;长上下文、voice、agent task 要单独容量池。
Canary / A/B ramp stable bucket by tenant/user/conversation、region、plan、surface、capability burn rate、complaint delta、quality regression、safety regression、cost delta 任一越线就暂停。 旧会话 pinned 到旧 model/prompt/tool schema;新会话按桶进入新版本,保证用户体验一致。
Rollback / kill switch model alias、prompt bundle、router rule、tool schema、index、memory policy、safety policy、feature flag 回滚也要幂等、可审计、可部分执行;按租户、地区、plan、surface 或能力粒度切回。 保留旧版本依赖和兼容 adapter;严重事故先 kill switch,再做 root-cause 和补偿。
Post-launch learning bad trace、用户反馈、人工复核、incident report、label task、training/eval candidate 进入训练前必须满足 consent、policy、PII、retention、dedupe、quality;进入 eval 也要脱敏和权限隔离。 把事故样本、误拒/漏拦、错误引用、工具误用转成回归集,下一次发布先跑这些样本。
变更对象 离线门禁 灰度信号 回滚对象 兼容性风险
Model / serving config 通用能力、代码/数学、长上下文、多语言、instruction following、latency/cost replay TTFT_model、TPOT、error rate、quality delta、cost delta、GPU saturation model alias、serving pool、sampling params、context length policy 旧会话 pinned;新模型不支持的工具、modalities 或上下文长度要由 router 降级。
Prompt / system / developer bundle 指令层级、格式、拒答边界、personalization、tool call decision、regression examples user regenerate、complaint、judge-human disagreement、tool call drift prompt bundle version、system policy text、developer template 同一 conversation 内不要中途换行为规范;必要时只对新 turn 或新会话生效。
Router / admission / quota model selection accuracy、tier fairness、quota/rate-limit correctness、fallback paths routing mismatch、429/5xx、queue wait、per-tier SLO、budget burn router rule、model weights、fallback order、rate-limit config 不能把企业或高风险请求误路由到缺少工具、安全或数据驻留能力的池。
Tool schema / Agent policy argument compatibility、dry-run、confirmation precision/recall、idempotency、rollback/compensation tool success、timeout、approval miss、step loop、Watch Mode interrupt、high-impact action block tool schema、domain allowlist、risk policy、confirmation UI schema 变更要有 adapter;已运行 agent run 使用启动时的 tool contract。
RAG index / connectors groundedness、citation accuracy、ACL filter、freshness、external 429 handling、no-answer behavior ACL unknown、stale source、wrong citation、sync lag、connector error index manifest、embedding/rerank model、ACL version、connector feature flag query-time ACL 必须独立于 index 版本;权限未知时 no-answer,不用旧缓存硬答。
Memory policy write precision/recall、source attribution、delete tombstone、Temporary Chat bypass、project boundary wrong memory write、deleted-memory use、boundary violation、apply latency memory extractor、memory policy bundle、apply strategy、write flag 删除和禁用优先于旧摘要/embedding;Project Memory 和个人 Memory 不能互相污染。
Voice / Realtime ASR WER、TTS quality、barge-in、audio safety、network impairment、tool-in-voice behavior session setup、RTT/jitter/loss、TTS first audio、reconnect、barge-in miss ASR/TTS model、codec、relay route、full-duplex flag、voice tool policy 弱网或高风险工具时可切文本/半双工;音频安全失败不能 fail open。
Image generation/editing / media pipeline prompt/image safety、render quality、edit mask alignment、EXIF/PII stripping、asset ACL、download/share policy、abuse eval generation queue、render fail、policy refusal/unsafe allow、asset publish/CDN error、egress cost、user feedback image model alias、image safety classifier、prompt rewrite policy、media pipeline、CDN publish flag、asset retention rule 旧会话引用的 asset 继续可读;违规或错误生成的 asset 要支持 revoke/unshare/tombstone,不能只回滚模型。
Canvas / Code Executor patch apply、anchor confidence、sandbox startup/runtime、file scan、artifact publish、network policy merge conflict、preview failure、sandbox timeout、AV fail、artifact download block artifact patcher、preview runtime、container image、egress policy、publish flag 用户已编辑 artifact 要 rebase;旧 container/image 需保留到活跃 job 完成。
Tasks / Pulse schedule semantics、checkpoint/retry、fresh ACL、notification policy、expiry/cancel behavior missed trigger、retry exhausted、expired result、delivery fail、research cost burn scheduler config、research prompt、connector set、notification template、feature flag 发送前重校验权限和 quiet hours;旧任务按创建时 contract 运行或显式迁移。
Safety policy / classifiers Model Spec eval、policy precision/recall、red-team set、prompt injection、DLP/exfiltration、dangerous capability unsafe allow、false refusal、policy timeout、classifier drift、appeal/incident spike policy bundle、classifier version、redaction rules、fail-closed mode 安全策略可以即时提升门槛;高影响工具、连接器和下载发布要支持紧急禁用。
控制 实现 失败模式 面试要点
Dataset registry 每个样本记录 dataset_id、sample_id、source、consent、retention、policy、split、owner、created_from_trace 和 allowed_use 样本没有 lineage,训练、评测、人工标注和 red-team 集混在一起,事后无法证明资格。 先建数据注册表,再谈训练闭环;数据资格是系统状态,不是文档约定。
Eval-only fence held-out、red-team、benchmark 和 release gate 样本打 eval_only/train_excluded 标签,训练管线硬过滤 模型在训练中见过回归集,offline eval 分数虚高,canary 前就已经被骗。 评测集泄漏会让发布门禁失真,是比普通噪声更严重的质量事故。
Near-dedupe 按 conversation、user、document、image/audio hash、embedding similarity 和 n-gram 做近重复去重 同一问题的改写版进入训练,held-out 表面没泄漏但语义已经泄漏。 LLM 评测要做语义级近重复,而不只是 exact hash。
Judge / rubric isolation grader prompt、rubric version、judge model、calibration set 与训练样本分库;judge 输出只作为标签候选 训练模型学习 judge 口味或 rubric 文本,线上质量变成迎合自动评委。 LLM-as-judge 需要人工校准和版本隔离,不能把 judge 当真理源。
Access and audit 训练、评测、标注、红队、incident replay 都走 purpose-bound access,读取和导出进入审计 工程师或作业把企业/临时聊天/删除样本误导出到训练候选。 合规风险通常发生在离线管线,不只发生在线上 serving。
Leakage audit 周期性抽样检查 train/eval overlap、source eligibility、delete tombstone、holdout similarity 和 benchmark contamination 一次正确配置后长期漂移;新数据源、新 connector 或新反馈入口绕过旧过滤。 泄漏防护是持续审计,不是一次性脚本。
来源 允许用途 过滤和校准 去向
Personal ChatGPT with training enabled 可进入改进候选,但仍要按隐私设置、地区、保留策略和用户删除语义过滤。 PII/secret redaction、consent check、dedupe、quality score、toxicity/safety tag、language/domain balance。 held-out eval、SFT candidate、preference pair、safety data;高风险样本先人工复核。
Personal opt-out normal chat 普通历史仍可保存和展示,默认 training_candidate=false;用户主动提交 thumbs up/down 或文字反馈是单独授权入口。 account-level data control、normal history retention、delete propagation、trace redaction、explicit_feedback_consent。 无显式反馈时只进历史、服务质量和安全/滥用监控;有显式反馈时,反馈及关联对话可进评测/训练候选。
Temporary Chat 不进历史、不创建 memory、不训练;仅为安全和滥用监控最多短期保留。 temporary_chat=true、no memory write、no history index、<=30d safety retention、artifact quarantine。 安全/滥用监控和临时合规查询;不能进入训练、长期个性化、memory 或普通历史索引。
Business / Enterprise / Edu / API 默认不用于训练或改进公共模型;只有显式 opt-in 或客户专属定制流程才可用。 tenant policy、ZDR/retention、DPA/region、admin controls、customer-owned fine-tune boundary。 tenant 内审计、合规导出、客户专属评估或定制;默认不混入全局训练候选。
Direct apps / synced connector data 直接同步或检索到的 app 数据只做上下文、搜索、引用和建议;消费版也只有当数据进入对话且 Improve 开启或用户显式反馈时才可能训练。 OAuth scope、sync opt-in、RBAC/ACL、freshness、third-party terms、conversation inclusion、training eligibility tag。 回答上下文、citation、sync index、合规日志;未进入 conversation/output/feedback 的原始 synced data 不进全局训练。
Pulse Gmail / Calendar direct data Gmail/Calendar proactive activity 是用户 opt-in;直接读取的原始内容不用于训练,Pulse 交互保存成对话后才按 Data Controls 处理。 Pulse opt-in、app scope、daily expiry、save-as-chat state、conversation history state、Improve setting、delete propagation。 当天 Pulse 卡片、可保存对话和安全/合规日志;直接 app 内容 never train,保存/交互后的对话才可能进改进候选。
Explicit feedback / implicit UX signals thumbs up/down 和文字反馈是主动提交;regenerate、abandon、停留时长只是隐式质量信号,不能覆盖底层训练资格。 explicit_feedback_consent、anti-spam、sampling、locale/topic balance、conversation eligibility、human adjudication。 显式反馈可进 eval、preference pair 或训练候选;隐式信号主要进 UX dashboard 和抽样队列。
Human labels / expert datasets 作为 golden set、rubric、judge calibration 和 release gate 的高可信基线。 多标注者一致性、盲评、rubric examples、label provenance、holdout split。 offline eval、safety regression、RFT/RLHF reward data、hard negative set。
LLM judge / graders 用于规模化打分、pairwise comparison、tool-call grading 和 continuous eval。 和人工标签对齐,控制 position bias、verbosity bias、prompt leakage 和 judge model drift。 自动门禁、样本排序、低置信人工复核;不能替代安全硬门禁。
Incident traces / red-team samples 安全、可靠性和产品回归的最高优先级样本。 脱敏、最小必要字段、root-cause tag、policy category、replay determinism。 hard negative eval、safety SFT/RLAIF candidate、postmortem action item、launch checklist。
安全门禁 证据 发布决策 事故闭环
Model Spec / behavior policy 场景化 eval 覆盖 instruction hierarchy、拒答边界、uncertainty、personality、truthfulness、sycophancy。 任何核心行为规范回归都 block 或只允许小范围实验。 把误拒、漏拦、过度迎合、错误自信样本回流到 policy eval 和 prompt/model 训练。
Dangerous capability 生物、网络、自动化滥用、欺骗、自主复制等能力评估和 safeguards review。 能力越过风险阈值时需要额外防护、访问限制、监控或不部署。 上线后用 abuse signals、red-team findings 和外部报告更新风险评估。
Tool / connector misuse indirect prompt injection、secret exfiltration、跨源数据拼接、高影响动作漏确认、connector ACL bypass。 不满足就禁工具/连接器、只读模式、强确认或 fail closed。 每个工具事故要补 schema、policy、confirmation UI、eval case 和审计字段。
Privacy / data boundary Business/API 默认不训练、opt-out 生效、Temporary Chat 不入训练、删除传播、tenant/project isolation。 任何数据边界不确定都不能进入训练候选,也不能在回答中引用。 触发隔离、删除重放、合规通知和训练候选冻结。
Post-launch safeguards kill switch、policy rollback、appeal/review queue、incident owner、customer comms、audit export。 没有可执行处置链路,不允许扩大 rollout。 postmortem 产出新的 hard negatives、SLO、runbook 和 release checklist。

18. 面试打法

先给主线,再按面试官偏向钻深

面试答案最怕散。你可以固定成四段:范围和假设、主架构、核心瓶颈、追问取舍。 如果面试官偏后端,就钻长连接和高可用;偏 AI infra,就钻 GPU 调度;偏产品平台,就钻 Agent、Canvas 和权限。 这套讲法参考了 ByteByteGo 的系统设计框架System Design Handbook 的 OpenAI 面试拆解 以及 OpenAI 对 ChatGPT 能力面流式响应工具调用 的公开说明,但回答要用工程状态、故障和取舍重新组织。

System design mainline 45 min: outline the path first, then drill into the interviewer's focus area
Scope 边界和规模
Core API / 数据 / 请求链路
Scale GPU / 流式 / 高可用
Product RAG / Agent / Canvas / Code
Control 安全 / 观测 / 发布
范围 讲什么 取舍
必讲主线 P0 聊天 + 流式 + 历史 + 上下文 + 输入/输出安全 初学者先把一个普通问题如何变成流式回答讲完整,别一开场展开所有高级功能。
必讲后端 response 状态机、seq 恢复、幂等键、response_events、outbox 这几项能证明你会设计可恢复的状态化系统,而不是只会调模型 API。
必讲 AI infra token sizing、prefill/decode、KV cache、batching、GPU 队列 不需要背硬件数字,但要把 HTTP QPS 转成 token/s、活跃流和显存压力。
只选一个扩展 RAG / Agent / Canvas / Code Executor 任选一个钻透 其余 P1/P2 能力点名放到扩展路线,等面试官追问再展开。
步骤 可以怎么说 画什么 关键实体 取舍
1. 澄清边界 我先把题目收敛成 ChatGPT 主站:文本聊天是 P0,文件/搜索/工具/Agent/Canvas/Code/Voice 是可插拔平面。 左侧写 P0/P1/P2 范围框。 user、workspace、conversation、model tier、surface。 不一开始画满所有功能;先给可用主链路,再按追问加功能面。
2. 需求和规模 我把 DAU/QPS 转成并发流、input/output tokens/s、GPU seconds、事件写入量和存储增长。 容量漏斗:DAU -> turn/s -> token/s -> GPU pool -> event log。 request_id、response_id、token_usage、tenant_budget、region。 连接层和推理层分开估算;1M SSE 连接不等于 1M 路 decode。
3. API 和数据模型 核心 API 是 create response + stream events;核心真源是 conversation、message、response、response_event 和 artifact。 ERD:Conversation -> Message/Response -> ResponseEvent -> Artifact/ToolRun。 idempotency_key、seq、status、version、outbox、ledger。 事件追加比原地覆盖更容易断线续传、审计、重放和计费去重。
4. 请求主链路 请求经过入口鉴权、会话装配、上下文构建、安全检查、模型路由、GPU 推理、SSE relay 和事件持久化。 端到端流水线:Edge -> Chat Service -> Context -> Safety -> Router -> Inference -> Stream。 trace_id、policy_decision、context_pack、model_version、stream_cursor。 同步链路只放必须步骤;搜索、文件处理、评估和索引更新尽量异步化。
5. 瓶颈定位 TTFT 看 admission/queue/prefill/first decode,TPOT 看 decode step/batching/relay;RAG 看 source deadline 和 rerank。 延迟瀑布:edge、context、safety、prefill、decode、relay、persist。 TTFT_model、TTFC_user、TPOT、queue_depth、cache_hit、source_p99。 降 TTFT 不一定降 TPOT;缩上下文、prefix cache 和小模型路由要权衡质量。
6. 高可用和恢复 服务按无状态入口、状态机、事件日志、GPU pool、异步 worker 分层扩展;断线按 response_id + last_seq 续传。 多区域/多 cell 图:global edge、regional control plane、cell-local data plane。 cell_id、region_id、lease、checkpoint、DLQ、replay cursor。 跨区域强一致会增加延迟;多数会话 pinned 到 home region,灾难时用可重放状态恢复。
7. RAG / 连接器 RAG 不是把向量库塞进 prompt,而是 ingestion、ACL、freshness、retrieval、citation 和 no-answer 的可审计系统。 Connector sync -> index -> query-time ACL -> rerank -> source snapshot -> grounded answer。 connector_id、doc_id、chunk_id、ACL_version、index_version、citation_span。 预同步降低延迟,但撤权和删除必须 query-time 再校验;来源不够就 no-answer。
8. Agent / 工具 模型只产出工具意图;真正副作用由 orchestrator 经过 schema、policy、confirmation、idempotency 和 audit 放行。 Planner -> Policy -> Tool Gateway -> Executor -> Audit/Compensation。 tool_call_id、risk_level、approval_id、idempotency_key、rollback_plan。 强确认牺牲自动化速度,但保护支付、邮件、代码提交和外部系统写操作。
9. Canvas / Code Executor Canvas 是版本化 artifact 编辑,Code Executor 是隔离 sandbox job;两者都要把输出变成可审计、可回滚的 artifact。 Artifact branch/diff/rebase + Sandbox queue/resource/network/file isolation。 artifact_id、revision_id、patch_id、sandbox_job_id、quota、scan_result。 Canvas 优先交互延迟和可撤销;Code 优先隔离、资源上限和结果可复现。
10. 安全、观测、发布闭环 最后把安全门禁、trace、eval、canary、version pinning、kill switch 和数据回流闭环讲清楚。 Online trace -> eval sample -> release gate -> canary -> rollback/data registry。 policy_version、prompt_version、eval_set、judge_version、rollout_bucket、data_eligibility。 安全失败不能被平均满意度抵消;坏 rollout 回滚后还要冻结污染样本并补 hard negative。
时间 做什么 输出
0-5 分钟 澄清产品边界、模型来源、MVP、规模和 SLA 先问清是消费级、企业版、Agent 子题还是 Code Interpreter 子题。
5-10 分钟 列 P0/P1/P2 需求和容量估算 把 QPS 转成活跃流、token/s、GPU sizing 和存储事件量。
10-20 分钟 画入口、会话、上下文、安全、模型路由、GPU、流式和事件流 主图先覆盖端到端链路,旁边挂 RAG、工具、Agent、Canvas 和评估平面。
20-30 分钟 讲请求状态机、API、数据模型和断线恢复 把 response_id、seq、幂等键、response_events 和 outbox 讲清楚。
30-40 分钟 按面试官偏向深挖 GPU、RAG/工具、安全或多区域 不要平均展开;选择最匹配追问的一条线讲到故障和 tradeoff。
40-45 分钟 总结瓶颈、降级、风险和下一步 用成本、延迟、安全、质量和可用性做 recap,表现工程判断。
时间 做什么 输出
45 分钟主线完成 到 45 分钟必须已经交付 P0 架构、API/数据模型、请求状态机、容量、HA、安全、观测和一个扩展点。 如果 45 分钟还没讲到 failure mode 和 tradeoff,后面 15 分钟再精彩也很难补救。
45-50 分钟 按面试官兴趣选择一个深挖:RAG/Connectors、Agent/Tools、Canvas、Code Executor、Realtime Voice 或 GPU serving。 选择标准是刚才被追问最多、风险最高、最能体现工程深度的一条线。
50-55 分钟 把深挖线讲到状态机、权限、幂等、失败恢复、降级和指标,例如工具误操作如何确认/回滚。 不要只列组件名;每个组件都要有真源、状态迁移、失败动作和可观测信号。
55-58 分钟 补发布和 eval:offline eval、safety hard gate、shadow replay、canary、version pinning、kill switch。 强调发布对象包括 model、prompt、router、tool schema、index、memory policy 和 safety policy。
58-60 分钟 用一张 recap 收口:瓶颈在哪里、如何扩容、如何降级、如何回滚、哪些需求暂不做。 最后要让面试官听到取舍:成本/延迟/质量/安全/可用性哪个优先。

30 秒版本

我先保证 P0 主链路:用户发消息 -> 鉴权/配额 -> 会话和上下文 -> 安全 -> 模型推理 -> 流式事件落库 -> 观测。

3 分钟版本

主链路讲完后,按追问点名 Memory/Projects、RAG/Apps、Agent/Tools、Canvas、Code Executor、Voice、Tasks/Pulse、评估发布。

深挖版本

深挖只选一条线讲透:后端高可用、AI infra/GPU、产品平台、安全合规、Agent 工具、实时语音或发布训练闭环。

面试官偏向 深挖主线 判断
后端高并发 / 高可用 长连接、SSE/WebSocket、response_events、seq 恢复、幂等、outbox、限流、降级、多区域 active-active。 重点证明系统能承受大量活跃流,并且断线、重试、重复提交不会乱序或重复扣费。
AI infra / GPU token/s sizing、prefill/decode、KV cache、batching、prefix cache、chunked prefill、模型路由和 GPU 成本。 把 HTTP QPS 翻译成 input/output tokens、并发流、显存和 GPU seconds,比背硬件数字更重要。
RAG / Connectors connector sync、chunking、embedding/index、query-time ACL、rerank、citation、freshness、no-answer、revoke propagation。 真正考点是权限和来源可证,不是“接一个向量库”;ACL unknown、source stale 或引用不足时要 fail closed。
Agent / Tools planner、tool schema、policy engine、risk level、dry-run、用户确认、idempotency key、audit、rollback/compensation。 模型只提议工具调用;副作用必须由受控执行层、确认 UI 和审计账本放行。
Canvas / Artifacts artifact_id、revision graph、局部 diff、patch apply、conflict/rebase、preview、share/export、version restore。 Canvas 是协同编辑/版本系统问题,不是把长文本塞回聊天窗口;要讲可撤销、可比较、可发布。
Code Executor / Sandbox job queue、microVM/container、network/file/resource isolation、package allowlist、artifact scan、egress policy、quota、timeout。 Code Interpreter/Data Analysis 的核心是隔离和可复现;不能让模型直接拿宿主机权限。
Memory / Projects / Tasks / Pulse memory eligibility、project-scoped context、scheduled job、proactive card、data retention、user controls、delete propagation。 长期状态要能解释、编辑、删除、隔离;后台任务要按用户授权和过期策略运行。
安全合规 指令层级、policy eval、DLP、prompt injection、工具确认、tenant isolation、删除传播、Business/API 数据边界。 安全是硬门禁,不能被平均满意度、成本或速度指标抵消。
Voice / Realtime session setup、WebRTC/WebSocket、audio-native realtime model、VAD、barge-in、first audio、reconnect、ASR/TTS fallback、audio safety。 实时语音不是普通 chat 加麦克风;首音频、打断和弱网恢复是核心体验指标。
Observability / Cost TTFT_model、TTFC_user、TPOT、burn rate、trace span、eval gate、cost attribution、billing ledger。 指标必须接动作:扩容、限流、降模型、回滚、冻结出账或修复数据边界。
Release / Training offline eval、safety hard gate、shadow replay、risk-based canary、version pinning、rollback、feedback/data eligibility。 发布对象不只有模型,还包括 prompt、router、tool schema、index、memory policy 和 safety policy。
维度 高分信号 中等信号 危险信号
Token 容量和 GPU sizing 从 DAU/QPS 推到 turn/s、input/output token/s、并发流、KV residency、GPU seconds 和预算限流。 能区分 QPS、连接数和 token 吞吐,但 GPU 显存、batching 或长上下文压力讲得较粗。 只说“加机器/加 GPU”,或者把 HTTP QPS 当成模型吞吐单位。
持久化流式和断线恢复 用 response_id、seq、response_events、outbox 和 replay cursor 解释断线续传、重复提交和账务去重。 知道 SSE/WebSocket 和重连,但 durable event log 与最终状态不够清楚。 把流式状态只放内存;断线后重新跑模型、重复执行工具或重复扣费。
权限和数据边界 tenant_id everywhere、query-time ACL、撤权传播、Temporary Chat/Business/API 默认不训练、删除先阻断读取再传播。 能讲 RBAC/SSO/审计,但训练资格、临时会话和连接器数据边界较模糊。 把权限只固化在索引里;ACL 服务故障还继续回答;把企业/API 数据混入公共训练。
RAG 来源和 no-answer 设计 connector sync、freshness、source snapshot、citation span、groundedness eval 和 citation miss 降级。 知道向量检索和引用,但没有解释来源快照、撤权、stale source 和 no-answer 阈值。 让模型伪造引用;权限未知或来源不足时仍生成确定答案。
工具副作用和 Agent 控制 工具有 schema、policy、risk level、dry-run、用户确认、幂等键、audit trail、rollback/compensation。 知道要确认高风险动作,但对 tool call 状态机、重复执行和补偿策略讲得少。 模型直接调用生产 API;没有确认、审计、幂等和回滚。
Canvas / Code Executor Canvas 讲 artifact/revision/diff/rebase/preview/share/export;Code 讲 sandbox queue、网络/文件/资源隔离和 artifact scan。 能说明两者是扩展面,但没有讲版本图、冲突处理或 sandbox 资源治理。 把 Canvas 当富文本框;把 Code Executor 当普通后台脚本运行。
Eval gate 和发布 offline eval、安全硬门禁、judge 校准、shadow replay、risk-based canary、stable bucket、version pinning 一起讲。 知道灰度和回滚,但 eval 泄漏、judge drift 和版本兼容性不够明确。 只看线上点击率或平均满意度;安全/隐私回归仍继续放量。
Rollback 和数据回流 坏 rollout 能按模型/prompt/router/tool schema/index/policy 回滚,并冻结污染样本、补 hard negative 和 postmortem action。 能说 kill switch,但对旧会话 pinning、训练候选冻结和回放验证较弱。 回滚只切流量,不处理已生成 artifact、污染 eval/训练数据和账务/审计影响。
追问 回答骨架 补强点
如何降低 TTFT? 路由小模型、prefix cache、chunked prefill、就近入口、减少上下文、冷热模型预热。 还要区分真实延迟和感知延迟:SSE 能先显示第一个 token。
如何从 DAU 算容量? DAU -> 峰值同时在线 -> turn/s -> input/output token/s -> 活跃流 -> GPU seconds、KV residency、事件写入量。 连接层和推理层分开算:1M 连接不等于 1M 个请求同时 decode。
TTFT 和 TPOT 有何区别? TTFT 主要看 admission、queue、prefill、first decode、relay;TPOT 主要看 decode step、batching 和 stream relay。 TTFT 优化不一定改善 TPOT;长上下文常拖慢 prefill,长回答常暴露 decode 吞吐。
如何防幻觉? RAG、引用、rerank、grounding verifier、工具结果结构化、高风险拒答和离线评测。 不能承诺消灭幻觉,只能降低概率并让风险可观测。
如何做 1M 并发? 连接层水平扩展、stream relay、队列回压、GPU 调度、多区域、降级和严格配额。 并发连接数和 GPU token 吞吐是两类瓶颈,要分别算。
如何处理工具误操作? 工具 schema、权限、dry-run、用户确认、幂等、补偿、审计和高风险拒绝。 模型不能直接拥有生产权限,必须通过受控执行层。
断线后如何恢复? 客户端带 response_id 和 last_seq 重连;服务端从 response_events 续传,模型继续跑或返回已完成结果。 事件要可重放,最终态要 durable;不能依赖内存里的连接状态。
如何避免重复执行和重复扣费? 写请求带 idempotency_key;tool call、billing usage、artifact publish 都有 ledger/outbox 去重。 幂等要覆盖入口、工具、账务和通知,不只是 HTTP retry。
什么时候做 PD 分离? 长 prompt、高并发、TTFT/TPOT 都吃紧且网络足够好时;短请求和小模型先用统一 serving。 不要把新词默认画进架构,先讲基线、指标和适用边界。
Redis 和 KV Cache 有什么区别? Redis 缓业务热状态;KV Cache 是模型 attention 的 K/V 张量,驻留在 GPU/高性能内存体系。 这是大模型系统设计里很常见的混淆点。
如何设计企业版? SSO、RBAC、tenant_id everywhere、ACL RAG、审计、数据删除、区域驻留和 admin policy。 企业场景最大的坑通常是权限穿透,不是向量库本身。
如何控成本? 按 model/tier/tenant/surface 拆 tokens、GPU seconds、KV residency、sandbox minutes、connector sync 和 egress。 动作包括降模型、缩上下文、prefix cache、预算限流、异步化和暂停低价值后台研究。
如何做可观测? root request span 串 inference、retrieval、tool、agent、code、safety、billing;SLO 用 good/bad event 和 burn rate。 不要只说日志;要能从一次坏回答回放到具体版本和责任平面。
新模型或工具 schema 如何灰度? 先 offline eval 和 safety gate,再 shadow replay、risk-based canary、stable bucket、version pinning 和 kill switch。 旧会话 pinned 到旧版本;安全失败直接 block 或回滚,不能用平均满意度抵消。
如何避免 eval set 泄漏? golden set 与训练候选分库、近重复检测、dataset lineage、访问审计、holdout rotation、blind human labels。 泄漏会让发布门禁虚高;发现泄漏后要废弃受污染分片、重跑基线并补独立 hard negative。
LLM-as-judge 如何可信? 用人工标注校准、pairwise agreement、judge version pinning、rubric examples、bias test 和低置信人工复核。 judge 是规模化筛查器,不是真理源;judge model 升级也要走 release gate。
坏 rollout 如何回滚并处理数据? 按 model/prompt/router/tool/index/policy 版本回滚,冻结受影响 feedback、trace 和训练候选,补事故样本到 eval。 回滚流量只是第一步;还要处理污染数据、错误 artifact、客户通知、账务和 postmortem。
企业权限撤销如何生效? 撤权写 audit/tombstone,query-time ACL 必查;索引异步清理,ACL unknown 或 tombstone 未确认时 no-answer。 不能只靠索引构建时的 ACL;权限变化要先阻断读取,再慢慢清理派生索引。
Temporary Chat、Business、API 数据边界? Temporary Chat 不进历史/memory/训练;Business/API 默认不用于公共训练;连接器原始同步数据只按授权用于上下文。 数据边界必须落到字段和管线:eligibility tag、retention、delete propagation、training registry 和审计。

19. 资料地图

本页参考的公开资料和已有答案

这里列的是设计依据,不是逐字引用。页面内容用公开资料做事实校验,用系统设计面试语境重新组织。

OpenAI 产品事实

ChatGPT、Canvas、Agent、Projects、Tasks/Pulse、Connectors、Memory、Voice 和 Temporary Chat 都使用官方资料支撑。

OpenAI API / Realtime

Streaming、Realtime WebRTC/WebSocket/VAD、MCP connectors、Actions、Retrieval、File search 和 Code Interpreter 支撑开发者侧设计。

数据、隐私与训练边界

Data Controls、Temporary Chat、Memory、Business/API 数据策略、反馈和 eval 数据进入训练的边界单独列出。

评估与发布

Evals、Graders、Model Spec、Preparedness Framework 和 release gate 资料支撑灰度、回滚和安全门禁。

GPU serving / RAG / 数据系统

vLLM、TensorRT-LLM、FAISS、Kafka、Redis 等一手资料支撑高吞吐推理、检索和事件化后端。

SRE、流式与发布基础设施

Google SRE、OpenTelemetry GenAI、MDN SSE/WebSocket、Kubernetes 和 Argo Rollouts 支撑高可用与渐进式发布。

安全、工具与沙箱

OpenAI prompt injection、Agent safety、OWASP LLM Top 10、Firecracker 和 gVisor 支撑工具确认、隔离和最小权限。

面试材料与用户分享页

公开面试文章用于理解问法;两个 ChatGPT 分享页仅作结构启发,不作为事实依据。

OpenAI 产品能力

这些链接支撑正文对 ChatGPT 页面实际功能、用户入口和产品边界的描述。

OpenAI API / 开发者能力

这些资料支撑 API 层的流式、实时语音、工具、连接器、检索和代码执行设计。

数据、隐私与训练边界

这些链接用于约束 Business/API、个人 ChatGPT、Temporary Chat、Memory 和反馈样本的使用边界。

评估、模型规范与发布

这些资料支撑 offline eval、grader、safety hard gate、Preparedness gate、canary 和 rollback。

GPU serving、RAG 与数据系统

这些资料支撑容量估算、KV cache、batching、chunked prefill、向量检索、事件流和缓存层。

SRE、流式协议与渐进发布

这些资料支撑高可用、SLO、burn rate、流式连接恢复、Kubernetes 健康检查和灰度发布。

安全、工具调用与沙箱

这些资料支撑 prompt injection、MCP/Agent 工具风险、确认梯度、代码执行隔离和最小权限。

面试参考与用户给定材料

这些资料用于理解问法和回答组织;分享页只作结构启发,不作为事实来源。