大模型应用的运营止损边界
运营配置、检索内容和模型参数都会影响一次调用的延迟、输出长度与费用。把提示词当作普通文案直接发布,容易绕过代码评审、测试和容量观察;但也不能因为担心成本就让系统在异常时随意中断用户请求。止损边界需要事先定义:哪些请求可以降级,谁能修改预算,触发后向用户返回什么,以及怎样恢复。
成本保护不应依赖模型“自觉少说一点”。输入长度、最大输出、工具调用次数、重试次数和租户额度都应由确定性代码限制。模型输出不符合结构时,最多进行有限次数的、可观测的重试;相同输入或相同失败原因反复出现时停止重试并返回可解释的失败状态。
预算按范围分开管理
全局预算、租户预算和单请求上限解决的是不同问题。单请求上限防止异常输入放大;租户预算避免一个调用方挤占全部容量;全局预算用于在供应商异常或用量意外增长时保护系统。计量要覆盖输入、缓存命中、输出和工具调用,并使用可靠的共享存储或计费服务。把计数器只放在单个进程内,多个副本下无法正确限制总量。
阈值应由服务的历史分布、容量和业务优先级决定,不宜照搬固定 token 数。达到预警线时可以通知负责人、限制低优先级流量或缩小检索范围;达到硬上限时暂停新的非核心请求。已经开始的流式请求如何收尾也要有策略,避免直接断开后留下未知任务状态。
from enum import Enum class Decision(str, Enum): ALLOW = "allow" DEGRADE = "degrade" REJECT = "reject" def admit(input_tokens: int, requested_output: int, remaining: int) -> Decision: if input_tokens > MAX_INPUT or requested_output > MAX_OUTPUT: return Decision.REJECT if remaining < input_tokens + requested_output: return Decision.DEGRADE return Decision.ALLOW示例只表达准入决策,实际扣费和预留额度需要原子操作;不要在检查后、调用前分离地更新计数,否则并发请求会越过预算。模型供应商报告的 token 数应与本地估算对账,差异超过可接受范围时进入人工检查,而不是静默修正。
把提示词变更纳入发布流程
提示词、检索模板和工具说明都应版本化。修改后先在已脱敏的评测集上检查任务成功率、输出长度、拒答比例和安全分类,再灰度到有限流量。观察期内同时比较旧版和新版的延迟、成本与业务结果;模型输出存在波动时,不能因为几次样本变好就扩大流量。
告警也要能定位到版本、模型、租户和降级原因。只报警“成本升高”无法判断是流量变化、缓存失效、提示词膨胀还是供应商计量变化。事件发生后,优先冻结相关配置、保留请求摘要与指标,再由有权限的人决定回滚或调整。
最后,给用户明确的降级反馈:是暂时排队、使用较短回答、转为规则结果,还是请求被额度限制。把边界讲清楚,比让系统在后台无止境重试更可靠。
对运营团队而言,发布面板还应展示预计影响范围和恢复入口,避免把一次配置调整变成不可追溯的黑箱操作。