生产部署
预览环境里能聊天,不等于可以上线。切流量前要把浏览器代码与供应商凭据分开,让模型网关同源或显式允许,关闭仅限开发的控制,并确认失败的运行可以被观察和停止。
建立生产边界
在模型供应商前放一层薄网关。浏览器调用相对路径(如 /api/llm/v1);网关保存供应商密钥,验证用户会话,固定或白名单模型,限制请求体和频率,并写入请求 id。写在 VITE_* 里的供应商密钥会进入浏览器产物,不能当作秘密。
如果页面与网关不同源,要配置精确的来源白名单与 Cookie 策略,不能先开放 * 再慢慢收紧。Surface 的传输层负责身份验证、委托会话生命周期、防重放和审计投递;协议内核只接收已验证的会话。
移除开发界面
请求轨迹、完整调试面板、测试用模型设置和本地脚本不能默认开启。轨迹包含系统提示词与页面快照。调试开关不是隐私边界,看起来像管理按钮也不等于授权。
生产要设置有限的轮数预算。教程夹具可以使用 maxTurns: 100,生产默认值有意更小。准备一个无需重发前端就能关闭助手的停用开关,并验证它确实能作用到正在运行的实例。
把发布检查写成代码
在部署流水线中保留小型发布检查,让失败直接终止构建:
const review = evaluateRelease(config);
if (!review.ready) {
for (const check of review.checks.filter((item) => item.status === "fail")) {
console.error(`${check.id}: ${check.detail}`);
}
process.exit(1);
}静态检查能证明网关是 HTTPS、浏览器密钥为空、模型策略已固定、遥测使用 HTTP(S)、来源白名单精确。它不能证明这些服务此刻可用;部署后仍需发真实请求,验证网关鉴权、供应商超时和错误形状。
观察一次运行,而不只是页面
记录状态码、延迟、token、轮数耗尽、工具错误码、模型与提示词版本、请求 id。对 ACTION_NOT_FOUND、INVALID_ARGS、STEP_FAILED、LLM_FAILED 和确认拒绝的异常增长告警。只统计访问量无法说明助手是在帮忙还是在失败。
先内部用户,再小比例,最后全量。保留无需发布新前端就能关闭入口或收窄能力集的回滚路径。让真正接线的人参与演练,而不是只让开发者验证。
代码化上线清单见 生产上线(Vue 3),网关参数见 Node 网关。

