延迟构成
端到端延迟 ≈ 排队 + 预填充(prompt 处理) + 解码(逐 Token) × 输出长度 + 工具往返 × 轮数。优化应先看追踪瀑布图,再动刀。
| 阶段 | 手段 | |---|---| | Prompt 过长 | 截断、摘要、RAG 精选 | | 模型慢 | 换更快模型、降低 max_tokens | | 多轮工具 | 并行、合并工具、减少轮数 | | 冷启动 | 连接池、保活、区域就近 |
流式(Streaming)
使用 SSE 或 WebSocket 推送 delta 事件,前端增量渲染 Markdown(注意未闭合代码块防抖)。
# 概念示例:OpenAI 风格 stream
for chunk in client.chat.completions.create(
model="gpt-4o",
messages=messages,
stream=True,
):
delta = chunk.choices[0].delta.content
if delta:
yield delta # 推给前端
注意:流式下工具调用可能在末尾一次性给出 tool_calls,UI 需区分「思考中」与「执行工具中」。可在检测到 tool_calls 时切换状态条。
并行与流水线
- 并行工具:查天气 + 查股价无依赖 →
asyncio.gather。 - 推测执行:对高概率工具预取数据(慎用,浪费配额)。
- Prompt 缓存:厂商支持的 prefix cache 对固定 system 段省钱省时。
感知优化
- 首包前展示骨架屏或「正在分析…」。
- 长任务用进度事件(第 2/5 步)。
- 分块交付:先给摘要,再异步补详细报告链接。
指标
监控 P50/P95 TTFT、整轮完成时间、每会话 Token、工具 P95。优化目标通常是 P95,因为 Agent 长尾由慢工具决定。
延迟优化与流式是产品体验核心:技术上线流式 API,产品定义何时展示工具结果、何时允许用户打断,两者需一起设计。