知识全景图/ 软件工程与系统/ 人工智能全景图/ Generation Runtime / Streaming / Retry

LLM 生成运行时、流式返回与重试协议底层图谱

从上下文提交到首 token、流式事件、停止条件、取消、超时、重试和最终落库,解释一次生成请求怎样被运行时可靠收尾

阅读定位: 上下文组装回答模型要看什么, 推理计算 / KV Cache回答 prefill 和 decode 的底层成本, 解码 / 采样回答下一个 token 怎样被选出来。 本页专门补运行协议层:一次生成请求进入模型服务后,运行时怎样排队、生成、流式返回、停止、取消、重试、记录证据并把结果交回产品。
一、生成运行时不是一次普通 HTTP 调用
Accepted
鉴权 / 配额
Queued
调度 / 合批
Prefill
读完整输入
Decode
逐 token
Stream
增量事件
Stop / Retry
收尾策略
Finalized
Trace / 计费
状态发生了什么关键字段常见故障
accepted请求通过鉴权、配额、风险和模型路由检查request_id、tenant、model_route、risk_tier限流误判、路由错误、预算缺失
queued进入模型服务队列,等待合批、资源和优先级调度queue_ms、priority、pool_id、deadline队列堆积、长短请求互相拖累
prefill模型处理完整输入上下文,准备生成第一个 tokeninput_tokens、prefill_ms、cache_hit上下文过长、首 token 慢、缓存失效
decode模型逐 token 生成输出,并持续更新 KV Cacheoutput_tokens、decode_ms、tokens_per_second输出过长、速度抖动、结构破损
streaming把 token、工具调用片段或结构化增量发给客户端event_id、chunk_index、finish_reason断流、重复片段、客户端取消未释放资源
finalized生成完成、失败、取消或超时后收尾计费和写 Tracefinish_reason、cost、error_code、trace_complete最终状态不清、重试重复计费、无法复盘
二、Prefill 到首 token:TTFT 的真实构成
分段包含什么为什么会慢治理动作
gateway_ms鉴权、配额、路由、策略、审计初始化策略链过长、依赖外部系统、路由服务慢本地缓存策略、路由规则预编译、关键路径瘦身
context_ms上下文装配、token 估算、模板渲染RAG、工具结果、历史摘要和 token 计算在请求内串行提前摘要、异步检索、上下文预算固定化
queue_ms等待模型池、合批、显存和优先级调度高峰期并发、长请求占池、低优先级排队SLA 分池、长短请求分流、限流和降级
prefill_ms模型读取完整输入并建立 KV Cache输入 token 多、cache miss、长上下文和大模型Prompt Cache、上下文压缩、RAG Top-K 控制
first_event_ms首 token 生成、后处理和首个流式事件发出采样、过滤、网络缓冲、前端等待策略首事件心跳、流式 flush、轻量后处理

TTFT 不是一个数字,而是一段路径

只记录“首 token 2.8 秒”不够。至少要拆成 gateway、context assembly、queue、prefill 和 first event。否则优化会变成猜。

三、流式返回:token、delta、event 与前端体验
文本 delta
最常见形式是增量文本片段。前端要处理拼接、光标、Markdown 未闭合、代码块未闭合和最终收尾。
结构化 delta
工具调用、JSON 字段、引用和状态事件可能逐步出现。客户端不能把半截 JSON 当成最终结果执行。
心跳事件
当 prefill 或工具执行较久时,心跳能告诉前端“还活着”。否则用户会误以为系统卡死。
事件类型应该表达什么客户端不要做什么Trace 要记录什么
message_start生成开始、模型和请求元信息不要展示为正文model、route、request_id
delta新增文本或结构化片段不要假设每个 delta 是完整句子或完整 JSONchunk_index、bytes、tokens_estimate
tool_call_delta工具名、参数片段、调用 id 的增量不要在参数未闭合时执行工具tool_call_id、schema_version
citation_delta引用、证据 id、页码或片段范围不要把引用和正文分离成不可追踪状态evidence_id、doc_version
heartbeat请求仍在运行,当前阶段未结束不要当作模型输出stage、elapsed_ms
message_end最终文本完成、停止原因和计费摘要不要忽略 finish_reasonfinish_reason、usage、latency_breakdown
error失败类型、是否可重试、用户可见提示不要丢掉已经生成的可用片段和错误原因error_code、retryable、partial_output_hash
四、停止原因:完成、截断、过滤和取消不是一回事
finish_reason含义用户体验后续动作
stop正常遇到 EOS 或 stop sequence回答完整结束校验结构、写 Trace、计费
length达到 max output tokens 或总窗口限制回答可能被截断提示可继续、调大预算或拆分任务
tool_call模型生成了工具调用,需要进入工具执行阶段用户可能看到“正在查询 / 执行”校验参数、权限、幂等和审批
content_filter输出被安全策略拦截或改写用户看到拒答或安全提示记录风险标签、样本回流、安全评测
cancelled用户取消、客户端断开或上游主动中止输出中断释放资源、标记取消来源、停止计费或按已用计费
timeout超过入口、模型、工具或总任务期限用户等待后失败区分阶段超时,决定是否重试或降级
error运行时、供应商、网络、解析或后处理失败可能有部分输出判断 retryable,保留错误上下文

finish_reason 是产品语义

同样是“没给出完整答案”,length、content_filter、timeout、cancelled 和 error 的用户提示、重试策略、计费与样本回流都不同。不要只存一个 success=false。

五、取消与资源释放:用户关掉页面后系统还在烧钱吗
客户端取消
用户点击停止、关闭页面或网络断开时,服务端要尽快传播 cancel signal,避免模型继续 decode 无人消费的 token。
工具取消
如果生成已经触发工具或工作流,要区分可中止动作和不可中止副作用,避免取消后状态半提交。
资源释放
取消后要释放队列位置、KV Cache、连接、临时文件和锁。否则取消率越高,系统越慢。
对象取消时要做什么要记录什么
模型生成停止 decode、释放请求状态和 KV Cachecancel_stage、generated_tokens、resource_released
流式连接关闭 SSE / WebSocket / HTTP stream,避免继续写入disconnect_reason、last_event_id
工具调用能取消则取消,不能取消则记录不可逆副作用tool_status、side_effect_committed、compensation_id
计费按已用 token、已执行工具或产品策略计费billable_units、cancel_policy
六、超时与重试:别让一次失败变成三倍成本
超时层应该怎么设可否重试风险
入口超时用户等待上限和产品体验上限通常可换路由或后台继续太短会误杀长任务,太长会拖垮体验
队列超时排队超过 deadline 就降级或拒绝可换模型池或低负载供应商盲目等待会让 P95 / P99 爆炸
prefill 超时输入过长或模型池异常时触发可压缩上下文后重试重试不改上下文会重复失败
decode 超时输出过长或速度异常时触发可截断收尾或继续生成重复生成会造成重复内容和重复成本
工具超时按工具副作用和业务 SLA 单独设置只有幂等工具才适合自动重试非幂等重试可能重复下单、重复发消息
后处理超时结构解析、安全过滤和落库上限通常可本地重试模型已完成但最终响应失败,容易丢证据

重试前先判断失败阶段

队列失败、供应商 5xx、网络断开、结构解析失败、工具超时和安全拦截不是同一种失败。重试策略至少要记录 retry_count、retry_reason、idempotency_key、previous_request_id 和 changed_inputs。

七、重试、Fallback 与幂等边界
安全可重试
队列超时、供应商临时失败、网络中断、只读检索失败通常可以重试,但要有退避和最大次数。
谨慎重试
结构化输出解析失败、长上下文 prefill 超时、模型格式漂移可以重试,但最好改变 Prompt、schema 或输出上限。
禁止自动重试
已经执行外部副作用的工具调用、人工审批后动作、支付和通知类动作,必须依赖幂等键、状态机或人工确认。
策略适合场景必须记录常见坑
same-model retry短暂网络 / 服务 5xxretry_count、backoff_ms、same_prompt_hash连续重试造成请求风暴
context-shrink retryprefill 超时、窗口过长dropped_segments、new_token_budget静默丢证据后输出看似正常
fallback model模型池拥堵、供应商故障、成本降级fallback_reason、from_model、to_model质量和格式不一致,没有回放证据
repair retryJSON 解析失败、schema 校验失败parse_error、repair_prompt_version修复过程中改变语义或丢字段
resume / continuelength 截断、用户要求继续previous_output_hash、continuation_point续写重复、引用错位、上下文漂移
八、运行时 Trace:每次生成都要能复盘
字段记录什么用于排查什么
request_id / generation_id一次产品请求和一次模型生成尝试的关系多次重试、Fallback 和工具循环的血缘
stage_timinggateway、context、queue、prefill、first_token、decode、postprocessTTFT、总耗时、尾延迟根因
stream_events事件类型、顺序、大小、结束原因断流、重复、前端展示错位
finish_reasonstop、length、tool_call、filter、cancelled、timeout、error不同失败形态的产品处理和样本回流
retry_lineage重试次数、原因、退避、是否改变输入、前一次 id重复成本、重试风暴、不可复现坏例
usageinput tokens、output tokens、cache hit、billable units成本归因、取消计费、预算策略
runtime_snapshotmodel pool、engine version、route、sampling、schema、stop rules版本漂移、线上回归、灰度差异
partial_output失败或取消前的脱敏片段 hash / 摘要判断是否可恢复、是否需要继续生成
8.1 流式生成事件证据包:从首 token 到停止原因
事件节点必须记录的字段判断重点
stream_startgeneration_id、trace_id、client_id、model_route、request_deadline前端看到的这一条流,对应哪一次模型生成和哪条路由?
first_tokenttft、queue_time、prefill_time、input_tokens、cache_hit首 token 慢是排队、上下文过长、缓存未命中还是模型池拥堵?
delta_emitevent_seq、delta_size、decode_step、server_time、client_ack_state是否有乱序、重复、断流、前端未消费或服务端继续生成的问题?
retry_or_fallbackattempt、retry_reason、previous_generation_id、changed_input、fallback_model重试有没有改变上下文或模型,坏例是否还能复现?
cancel_or_timeoutcancel_source、cancel_time、tokens_generated、tokens_delivered、resource_released用户取消后资源是否释放,账单和部分输出如何处理?
stream_endfinish_reason、stop_rule_id、output_hash、usage、postprocess_result结束是正常完成、长度截断、过滤、工具调用、取消还是错误?
九、常见失败模式
首 token 慢但总耗时正常
多半是 queue 或 prefill 问题,先看输入 token、上下文装配、模型池水位和 Prompt Cache。
流式输出忽快忽慢
可能是 decode 调度、batch 混跑、网络缓冲或后处理阻塞。不要只看最终耗时。
用户取消后成本还在涨
cancel signal 没有传到模型服务,或者工具执行不可中止。需要检查资源释放和计费策略。
重试后答案变了
可能是采样随机性、Fallback 模型、上下文压缩或模板版本变化。需要 retry_lineage 和 prompt hash。
JSON 最后才坏
流式过程中 JSON 未闭合,前端或后端提前解析;应等 message_end 或使用结构化增量协议。
超时重试变成雪崩
没有退避、没有最大次数、没有幂等键,失败高峰期会把模型池打得更满。
十、和相邻页面怎么接
相邻页它回答什么本页补什么
一次请求的一生请求从用户输入到运营闭环的全链路把“模型生成”阶段拆成运行时状态机、流式事件和收尾协议
上下文组装 / 窗口预算模型真正看到哪些上下文说明上下文提交后怎样影响 queue、prefill、TTFT 和重试
推理计算 / KV CachePrefill、Decode、KV Cache 的底层计算成本把底层成本映射到请求状态、流式体验和 Trace 字段
解码 / 采样 / 结构化输出token 怎样被采样、停止和约束成结构化输出补充流式 JSON、finish_reason、repair retry 和最终解析收尾
模型服务 / 推理网关推理服务、网关、SLA、限流和降级细化单次 generation 在网关和模型池里的状态证据
模型路由 / Fallback请求该走哪个模型,失败时怎么降级补充 Fallback 进入生成运行时后的 retry_lineage 和质量差异记录
LLMOps / 可观测Trace、Eval、Release 和线上指标提供 generation runtime 必备字段,用于慢、错、贵和断流复盘
十一、回到 AI 主干
AI 全景 AI 阅读路线 一次请求的一生 上下文组装 推理计算 生成运行时 解码 / 结构化输出 模型服务 / 网关 LLMOps