pdf https://codeyuan.blog.csdn.net/article/details/167693018
11 AI 应用开发进阶:流式输出、模型网关与生产工程
更新: 2026-10-12
时效说明:模型、SDK 与 API 描述截至 2026-10。生产代码应锁定 SDK 版本和模型 snapshot,并以供应商 changelog/Models API 为准,避免把滚动 alias 当固定行为。
📋 目录
- Streaming、NL2SQL 与多轮上下文
- RAG 评估、监控与漂移
- API Gateway、路由、限流与 CI/CD
- 2026 主流 API 与 Agent 沙箱
一、工程架构题
Q1: 如何实现 LLM 的流式输出?SSE 和 WebSocket 怎么选?
SSE:
- 服务端到客户端单向事件流,基于 HTTP,浏览器和网关支持好。
- 适合文本增量、进度、tool status。
- 用原生
EventSource时只能 GET 且 header 受限;复杂 POST 通常用fetch读取 response stream。
WebSocket:
- 双向全双工,适合实时语音/视频、barge-in、客户端持续推帧和异步工具事件。
- 连接状态、心跳、重连、负载均衡和背压更复杂。
不要把每个 token 当完整文本。事件应有类型和序号:
response.created output_text.delta tool_call.delta tool_call.done usage response.completed | response.failed生产要求:
- 代理关闭 buffering,设置 idle/read timeout。
- 客户端断开要向 provider 传播 cancel。
- 限制每连接缓冲区;慢客户端触发背压或断开。
- Unicode、JSON fragment、tool args 要增量解析。
- 重连只在协议支持 event ID/幂等续传时使用,不能假装“断点续生成”。
Q2: 如何设计 NL2SQL 系统?
安全流水线:
question → semantic layer / schema retrieval → SQL generation → AST parse → policy validation → EXPLAIN / cost guard → read-only execution → result validation → answer + SQL + provenance关键控制:
- 用只读账号、行列级安全和 tenant context。
- allowlist schema/table/function;禁止 DDL/DML、多语句和注释绕过。
- 参数化 literal,不拼接用户输入。
- 限制扫描字节、时间、行数和并发。
- schema linking 只给相关表,不把全库定义塞入 prompt。
- 指标用 execution accuracy、结果正确性、越权率和资源消耗,不只比 SQL 字符串。
二、评估与监控题
Q3: 如何评估 RAG 系统?RAGAS 的四个指标是什么?
把系统拆开:
- 检索:Recall@k、nDCG@k、MRR、filter/ACL 正确性。
- 生成:faithfulness、答案正确性、相关性、引用正确性。
- 端到端:任务成功率、拒答/澄清率、延迟、成本。
Ragas 常见四项是 faithfulness、answer relevancy、context precision、context recall,但 Ragas v0.4 已有更广 metric collections 和新 API。不要把四项当固定完整标准。
Q4: 如何监控 AI 应用健康度?
四层指标:
- API:QPS、错误码、重试、限流、provider/model、排队。
- 性能:TTFT、ITL、端到端 P95/P99、输入/输出 token。
- 质量:抽样任务成功、grounding、引用、tool success、人工升级。
- 资源/成本:每成功任务成本、cache hit、GPU 利用率、沙箱时长。
每个 trace 应关联:
request_id / trace_id tenant(脱敏) model snapshot + prompt version retriever/index/reranker version tool calls + approval + side effects latency breakdown + token usage不要把原始 prompt 默认写日志;建立字段级采样、脱敏、TTL 和访问审计。
三、多模态与高级应用题
Q5: 如何处理图片 + 文字等多模态输入?
现代 API 通常使用 typed content blocks,而不是把 base64 拼进文字:
{"role":"user","content":[{"type":"input_text","text":"提取发票总额并给证据"},{"type":"input_image","image_url":"signed-or-data-url"}]}实际字段名因供应商不同。工程注意:
- MIME、大小、像素、页数和压缩炸弹校验。
- EXIF 旋转、OCR 语言、视频帧率/时间戳。
- 私有 URL 用短期签名;防 SSRF 和任意 URL 拉取。
- 图像 token/计费与 resize/crop 策略。
- 输出 grounding:页码、bbox、timestamp。
- 多模态 prompt injection:图片文字同样是不可信数据。
Q6: 如何设计支持多轮对话的系统?上下文怎么管理?
不要无限追加 history。分层状态:
- 短期消息:最近必要 turns。
- 结构化 session state:用户目标、约束、已确认参数。
- 摘要:带版本和来源,可重建。
- 外部 memory:按用户/租户授权检索。
- tool state:订单 ID、文件、审批、幂等键。
截至 2026-10:
- OpenAI Responses 可用
previous_response_id或 Conversations,也可由应用传完整 items。 - Anthropic Messages 仍以无状态消息历史为核心。
- Gemini API 支持 SDK 管理会话或应用显式传历史;Live API 还要处理实时 session 生命周期。
服务端状态更省传输,但要权衡数据驻留、可移植性和可重放性。
四、安全与合规题
Q7: 如何防止 Prompt Injection?
- system/developer 指令与外部内容分层,检索/网页/tool output 标为不可信。
- 权限在模型外检查;工具使用短期、最小 scope 凭证。
- 写操作预览 + 人工审批 + 幂等 + 结果验证。
- 网络 egress allowlist,阻断任意 exfiltration。
- 结构化 tool schema,拒绝未知字段。
- 对直接/间接/多模态/编码/多轮注入持续红队。
“请忽略文档里的指令”只能降低部分攻击成功率,不能成为安全边界。
Q8: 如何处理版权、隐私与敏感内容?
上线前建立:
- 输入数据、检索库、训练数据和输出的 provenance。
- 数据处理目的、保留/删除、region 和供应商条款。
- 版权/许可证 allowlist、引用和 takedown 流程。
- PII、secret、恶意内容、未成年人等分类策略。
- 高风险行业的人工复核和记录留存。
不要给“AI 生成内容版权一定归用户”等绝对结论;法域、合同和人类创作贡献会影响判断,应交由法律团队。
五、成本优化与 API Gateway
Q9: 如何设计智能模型路由?
硬约束先于模型评分:
region / privacy / modality / context / tool capability → candidate set → predicted quality, latency, cost → route → verify → bounded fallback路由器自身也要评估:
- 与最强模型相比的质量损失。
- 每成功任务成本,而非单请求费用。
- 错误路由、fallback 次数、供应商故障表现。
- 高风险任务是否始终走允许的模型和审批路径。
Q10: 如何用 LLMLingua 等方法压缩 Prompt?能省多少?
LLMLingua/LongLLMLingua 的思路是估计 token/片段重要度后压缩上下文。还可用:
- 检索与 rerank,只保留相关片段。
- 去重、模板静态化、结构化状态。
- provider prompt caching。
- 分层摘要和 map-reduce。
不能承诺固定“省 70% 且质量不变”。要画:
compression ratio vs task success / retrieval recall / safety invariants vs latency / provider billed tokens安全规则、否定词、引用和工具 schema 应设为不可压缩区。
Q11: 如何做限流、熔断、Token 速率控制和背压?
建议多维 token bucket:
- tenant/user/API key 的 RPM、TPM、并发。
- provider/model 的全局配额。
- 长请求按估算输入 + 最大输出预留,完成后结算。
- agent 另有限制 step/tool/wall-clock/cost。
熔断按 provider、region、model 和错误类型隔离。429/5xx 可有限重试;4xx 参数错误不要重试。队列必须有界并暴露Retry-After。
Q12: 如何设计 LLM API Gateway?多模型路由和 A/B 怎么做?
Gateway 职责:
- 统一认证、配额、请求 ID、审计。
- 供应商协议适配,但保留能力差异。
- 模型 registry:alias、snapshot、capabilities、region、价格配置。
- retry/fallback/circuit breaker。
- 缓存、内容安全、PII policy。
- usage/成本归因、trace。
不要强行把所有 API 降成最低公共字段。Responses items、Anthropic content blocks、Gemini Live 等高级能力可通过 typed extension 暴露。
A/B 要:
- 用户级稳定分桶,避免同一会话跨模型。
- 固定 prompt/retriever 配置。
- 先安全门槛,再质量/延迟/成本。
- 允许 canary 立即回滚。
六、MLOps 与生产监控
Q13: MLOps 完整流程是什么?如何实现 CI/CD?
版本化:
- 代码、prompt、tool schema、policy。
- 模型 alias + snapshot。
- dataset、rubric、judge。
- embedding、chunking、index、reranker。
- container、CUDA/ROCm、serving engine。
发布流水线:
lint/unit → offline eval → safety/adversarial → load & failure test → shadow → canary → progressive rollout → rollback硬门槛包括权限、secret 泄漏、真实副作用和 schema;质量/延迟/成本用配对 baseline 与置信区间。
Q14: 如何监控生产环境?数据漂移如何检测?
监控三类漂移:
- 输入:语言、长度、主题、附件、风险、embedding 分布。
- 系统:模型 alias、provider 行为、retriever corpus、index 和工具 API。
- 输出:拒答、引用、工具成功、人工升级、业务结果。
Embedding distance 漂移只能提示分布变化,不等于质量下降。最终要把漂移与带标签的任务成功率关联。
告警例子应写成 SLO 而非任意阈值:
过去 30 分钟,高风险工具未审批执行次数 > 0 → 立即告警 P99 TTFT 连续多个窗口超出 SLO 且流量足够 → 告警 每成功任务成本相对同分桶 baseline 显著上升 → 调查七、2026 主流应用 API
截至 2026-10:
OpenAI
- 新项目优先 Responses API。
- 输入/输出是 typed items,工具调用是
function_call/function_call_output。 - 可用
previous_response_id续接,但顶层 instructions 需按文档重新传递。 - Assistants API 不应再作为新架构默认;按官方迁移指南转 Responses/Agents。
- 模型目录以 Models 为准;滚动 alias 与 snapshot 分开管理。
简化示意:
fromopenaiimportOpenAI client=OpenAI()response=client.responses.create(model="MODEL_FROM_CONFIG",instructions="Return concise JSON.",input="Summarize this ticket.",)print(response.output_text)Anthropic
- 核心是 Messages API:
POST /v1/messages。 - 多轮通常由客户端发送历史;system 是顶层字段。
- tool use、structured outputs、thinking 等能力按模型 capability 检查。
- 可调用 Models API,不要长期硬编码已退役 model ID。
- 使用 Google GenAI SDK。
- 普通生成、function calling 与实时 Live API 是不同交互形态。
- Live API 基于 WebSocket,支持音视频双向流;工具响应需要按 session 协议返回。
- 截至 2026-10,模型 ID 以 Gemini model docs 为准。
跨供应商适配时保留:
- typed multimodal blocks。
- parallel/sequential tool calls。
- reasoning/effort 配置。
- structured outputs。
- usage、cache 与错误语义。
Q15: Cloudflare Sandboxes 的 2026 GA 对 Agent 部署有什么意义?
Cloudflare 官方公告 显示 Sandboxes 与 Containers 于 2026-04-13 GA;官方文档 截至 2026-09 说明:
- 为每个任务提供隔离代码执行环境。
- 支持 PTY、后台进程、持久解释器、文件监听、预览和 snapshot。
- Worker 决定 sandbox 可访问的 API、数据和公网。
- secure credential injection 可让代理代发认证请求,减少 agent 读取明文凭证。
这不代表“放进容器就安全”。仍需:
- 默认拒绝网络/文件权限。
- 每任务/每租户隔离和资源限额。
- 镜像/依赖供应链扫描。
- 终止、快照、日志和 secret 生命周期。
- 工具副作用审批。
Cloudflare 是一种托管方案;Kubernetes sandbox、Firecracker、gVisor、NemoClaw/OpenShell 等要按隔离强度、启动延迟、region 和运维成本比较。
📝 速记卡片
- 文本单向流优先 SSE/fetch stream;实时音视频和双向事件用 WebSocket。
- NL2SQL 的安全边界是只读权限、AST policy 和资源限额。
- Gateway 统一治理但不能抹平不同供应商能力。
- 生产要锁模型 snapshot;alias 只能用于显式接受滚动变化的场景。
- 监控每成功任务成本、质量和副作用,不只监控 QPS。
- Agent 执行代码必须沙箱化、最小权限、可取消、可审计。