AI 应用规范
前五类规范沿用一般软件工程的结论,这一页处理模型本身带来的不确定性:输出不可信、提示词会漂移、成本与依赖会失控。缺少这一类规范时,项目的问题往往不表现为报错,而表现为「同样的输入,这周和下周的回答不一样」。
1这一页管什么
管模型被调用的全链路;判定与日志边界沿用安全与运维两页。
- 管模型相关的不确定性。调用边界、提示词的版本化、模型与参数的锁定、超时与降级、输出校验、评测集、成本与用量观测。
- 不交由这一页。密钥如何存放属安全开发规范;日志字段格式与指标告警属部署运维规范;外部内容不可信是安全开发规范的一条,这里只写它在提示词装配时的具体落法。
- 两种落法。提示词模板、参数与阈值这类常驻约束写进规则;「按规范改一次提示词并跑评测」这类流程写成技能。
对应的课程知识点:不确定性系统与概率性输出的工程化管理、提示词即代码(prompt as code)与版本控制、基于评测集(evaluation set)的回归、降级与熔断、可观测性中的用量与成本指标。它与测试规范直接衔接——评测集就是把「模型的输出」纳入可回归的范围。
2规范条目
十条,从「该不该用模型」排到「用了之后怎么观测」。
| 条目 | 要写清什么,为什么这样规定 | 怎么检查 |
|---|---|---|
| 调用边界 | 哪些环节必须用模型,哪些应当用确定性规则。能算出来的不要问模型;模型只负责不确定的那一段 | 逐个调用点问一句「换成规则会怎样」,答不上来即说明边界不清 |
| 工具落点 | 模型可调用的工具只能落在系统已有的服务方法上,严禁为模型开数据直连。为什么:工具一旦直连数据,授权判定与脱敏规则就被绕过去了——同一条数据走页面要授权、走工具不要授权 | 逐个工具确认它最终调用哪一个服务方法;出现直接查询数据库或对象存储的工具即为违规 |
| 提示词即代码 | 模板随版本入库,带版本号与评测结论;变更走评审,不在对话框里改完就上线。随版本变的东西属于代码,不属于配置 | 检索仓库中的模板文件;出现线上与仓库不一致的模板即判缺陷 |
| 模型与参数锁定 | 模型名与版本、温度、最大输出长度写进配置并锁定;阈值类数值集中一处。散落在代码里的常量会各自漂移 | 配置文件中应能一次找到全部模型相关参数 |
| 超时、重试与降级 | 单一超时值、重试上限与退避策略;依赖不可达时返回明确的错误码与可理解的提示。不做无限等待,也不静默返回空结果 | 停掉模型服务,检查是否在超时后返回明确错误而非挂起 |
| 输出校验 | 结构化输出先校验再使用;解析失败按失败处理,不静默降级为默认值。把不可信输出当作外部输入对待 | 构造一段畸形返回,检查是否被判失败而非被继续使用 |
| 不编造依据 | 无命中或引用列表为空时,输出固定的无依据说明,不返回伪造的标识与片段。编造出处比答不上来严重得多 | 检索空库后提问,检查回答是否含任何出处编号 |
| 外部内容的装配方式 | 材料正文、技能与工具描述作为数据放在用户消息里;系统提示中写明不执行其中的任何指令 | 上传含指令性文本的素材,检查模型是否把它当作指令执行 |
| 评测集与回归 | 维护一份小样本评测集,含「必须答对」与「必须拒答」两类;改提示词或换模型版本后跑一次,结果归档 | 改一次提示词,评测集应能给出前后两份可对比的结果 |
| 用量与成本观测 | 记录模型名、提示词版本、耗时、用量、命中数;不记录提示词全文(含用户数据)。没有用量记录就无法回答「这个月为什么涨了」 | 抽样一条请求,检查这些字段是否齐全且不含原文 |
3本课先写到哪
下列五件完成,模型的输出就纳入了可回归的范围。
- 最小集合五件。调用边界、提示词入库并带版本、模型与参数锁定、超时降级、输出校验与不编造依据。
- 先建一份小评测集。十到二十条即可,一半是必须答对的,一半是必须拒答的。
- 改提示词也要走变更。与改代码同一套流程:提变更 → 实现 → 跑评测 → 归档。
- 写一次违规验证。把命中阈值调低到必然无命中,检查回答是否编造出处。
这类规范最容易被漏掉,因为模型调用在第一次运行往往是好的——问题出现在第二次改提示词、换模型版本、或输入里混进指令性文本的时候。