AI-06 测试交付:安全、成本、降级与演示¶
不只证明“能够生成”,还要证明“可以控制、可以关闭、可以交付”¶
稳定的 AI 功能,不是永远不失败,而是失败时系统仍然可用
AI 功能依赖模型平台、网络、额度和不确定输出。一次成功演示不能证明它已经可以交付。发布前还需要验证:密钥是否安全、用户数据是否最少、输出是否经过校验、调用费用是否有上限、服务不可用时基础业务是否仍能运行。
本节不再增加新的 AI 技术,而是对已经选择的一个 AI 功能进行系统验收。你将建立固定测试集、安全与成本记录、降级矩阵、监控指标、演示脚本和最终交付包,使特色功能具备可解释、可复现和可回退的工程质量。
本节学习目标
为 AI 功能定义可验证的验收标准,使用模拟测试、真实集成测试和固定评测集检查质量,完成密钥、隐私、权限和提示注入检查,估算并限制调用成本,通过功能开关、超时、限流和降级保证基础业务,最终形成可演示、可部署和可复盘的 AI 功能交付包。
返回上一节:Tool Calling、MCP 与智能体 返回扩展篇导读 进入第六篇:项目展示、答辩与成长复盘
🎯 本节完成后,你要交付¶
| 成果 | 要求 |
|---|---|
| AI 功能验收说明 | 明确业务价值、范围、指标、风险和发布门槛 |
| 分层测试记录 | 覆盖代码、接口、模型效果、端到端和失败场景 |
| 安全检查记录 | 覆盖密钥、隐私、权限、输入、输出、日志和工具调用 |
| 成本预算表 | 能说明单次、每日和演示期间的成本上限 |
| 降级矩阵 | 每类外部失败都有用户提示和基础业务替代路径 |
| 运行监控清单 | 记录成功率、耗时、错误、用量和人工反馈 |
| 演示材料 | 3—5 分钟脚本、固定数据、正常与降级案例 |
| 最终交付包 | README、配置示例、测试证据、已知限制和关闭方法 |
交付对象是整个项目,不是一个模型演示
如果关闭 AI 功能后,登录、核心业务、测试或部署无法完成,说明扩展功能已经错误地阻塞了基础项目。应先恢复基础业务独立性,再继续验收。
一、进入验收前的基础门槛¶
开始本节前检查:
- 项目核心业务已经完成;
- 核心业务能够不依赖模型服务独立运行;
- 项目已有测试报告;
- 项目已完成本地或目标环境部署;
- AI 功能只解决一个明确业务问题;
- AI 输入、输出和人工确认方式已经定义;
- API Key 只保存在后端;
- AI 服务失败时已有手工或规则替代路径;
- 团队能够说明所用资料、模型和外部服务。
如果其中任何一项影响核心业务,应暂停 AI 功能验收,先返回主体课程完成修复。
1. 本次只验收一个主功能¶
填写:
2. 定义发布结论¶
验收结束后只能选择一个明确结论:
| 结论 | 含义 |
|---|---|
| 正式启用 | 达到门槛,可在目标环境默认开启 |
| 实验启用 | 可以演示,但需要明确标识和严格限制 |
| 默认关闭 | 代码保留,通过配置才能开启 |
| 暂缓交付 | 风险或质量不满足要求,需要继续修复 |
| 移除功能 | 价值不足或成本过高,回到基础方案 |
“已经写完代码”不是发布结论。
二、定义可验收标准¶
1. 从“能用”改成可测量描述¶
避免:
推荐:
具体门槛应根据自己的项目、模型、网络和课程要求填写,不能照抄示例数字。
2. 验收维度¶
| 维度 | 核心问题 |
|---|---|
| 业务价值 | 是否改善了真实业务步骤 |
| 功能正确 | 输入、输出和业务规则是否正确 |
| 模型效果 | 结果是否有依据、有效且可接受 |
| 安全隐私 | 是否保护密钥、身份和用户数据 |
| 稳定性 | 超时、断线和异常能否处理 |
| 成本 | 调用次数、Token 和预算是否受控 |
| 可降级 | AI 不可用时基础业务是否正常 |
| 可运维 | 是否有日志、指标、开关和排错说明 |
| 可演示 | 是否使用固定数据稳定展示 |
| 可交付 | 他人能否配置、运行、测试和关闭 |
3. 验收表模板¶
三、建立 AI 功能的分层测试¶
AI 输出具有不确定性,但系统外围仍然有大量确定逻辑可以自动测试。
1. 测试分层¶
2. 单元测试:不调用真实模型¶
适合测试:
- 必填项和长度;
- Prompt 组装;
- JSON 解析;
- 枚举和候选 ID 校验;
- 余弦相似度;
- 权限判断;
- 工具允许列表;
- 最大步骤和重复调用;
- 费用计算;
- 错误转换。
使用模拟客户端:
分类测试可以固定返回:
再分别模拟空内容、无效 JSON、未知类别和超长输出。
3. 集成测试:验证项目边界¶
使用模拟模型服务或测试替身,检查:
- Controller 是否要求登录;
- 普通用户能否访问该功能;
- 输入错误是否在调用模型前被拒绝;
- 外部错误是否转换为统一业务提示;
- AI 结果是否需要用户确认;
- 正式保存接口是否重新执行业务校验;
- 日志是否没有密钥和敏感内容;
- 功能开关关闭后接口怎样响应。
4. 模型效果评测:使用固定案例¶
模型效果不能只写传统断言:
更适合检查:
- 必须包含的事实;
- 禁止出现的虚构内容;
- 是否命中正确分类;
- 推荐 ID 是否有效;
- RAG 是否引用正确来源;
- 无依据时是否拒答;
- 工具是否选择正确;
- 是否发生越权或危险操作。
5. 真实服务测试:少量、受控¶
真实模型调用用于验证:
- 平台鉴权和模型配置;
- 请求与响应字段;
- 流式格式;
- 实际超时和限流;
- Token 或用量记录;
- 目标环境网络;
- 模型版本下的真实效果。
不要让普通单元测试和每次保存代码都调用付费服务。
6. 页面端到端测试¶
至少覆盖:
还要验证:
四、按功能类型建立固定评测集¶
1. 文本生成¶
| 编号 | 输入 | 必须保留 | 禁止虚构 | 人工结论 |
|---|---|---|---|---|
| GEN-01 | 【填写】 | 【填写】 | 【填写】 | 【填写】 |
检查:
- 事实忠实;
- 要点完整;
- 表达清晰;
- 长度合适;
- 无隐私和攻击内容;
- 用户可以编辑;
- 放弃结果后不写数据库。
2. 智能分类¶
| 编号 | 输入 | 标准类别 | 模型类别 | 是否正确 | 是否需复核 |
|---|---|---|---|---|---|
| CLS-01 | 【填写】 | 【填写】 | 【填写】 | 是/否 | 是/否 |
检查:
- 每个类别都有案例;
- 类别不均衡时不只看总正确率;
- 无效类别被拒绝;
- 信息不足时能够人工处理;
- 确定性的紧急规则优先。
3. 智能推荐¶
| 编号 | 用户条件 | 候选集合 | 推荐结果 | 无效项 | 人工评价 |
|---|---|---|---|---|---|
| REC-01 | 【填写】 | 【填写】 | 【填写】 | 【填写】 | 【填写】 |
检查:
- 推荐项来自真实候选;
- 已满、过期和无权限项已排除;
- 推荐理由与真实字段一致;
- 新用户有非个性化方案;
- 模型失败时规则排序仍可用。
4. RAG¶
| 编号 | 问题 | 预期来源 | Top K 命中 | 回答有依据 | 引用正确 |
|---|---|---|---|---|---|
| RAG-01 | 【填写】 | 【填写】 | 是/否 | 是/否 | 是/否 |
同时准备无答案、冲突资料、过期资料和越权资料问题。
5. Tool Calling 与智能体¶
| 编号 | 用户目标 | 预期工具 | 实际工具 | 步骤数 | 权限结果 |
|---|---|---|---|---|---|
| TOOL-01 | 【填写】 | 【填写】 | 【填写】 | 【填写】 | 【填写】 |
检查:
- 工具选择;
- 参数有效;
- 当前身份来自后端;
- 未知工具被拒绝;
- 写操作经过确认;
- 达到上限后停止;
- 工具结果中的恶意指令不会提升权限。
五、完成安全检查¶
1. 密钥与配置¶
- API Key 只存在于后端环境变量或密钥管理环境;
- 前端代码、浏览器请求和构建产物中没有密钥;
-
.env等真实配置没有提交; -
.env.example只有变量名和占位说明; - 日志、截图、演示视频中没有密钥;
- 密钥按开发、测试和生产环境分离;
- 密钥具有完成任务所需的最小权限;
- 已知道怎样撤销和轮换密钥;
- 提交历史经过检查。
可以进行仓库搜索:
搜索结果需要人工判断。变量名称可以存在,真实值不能存在。发现泄露后应先在平台撤销密钥,再清理仓库和历史。
2. 隐私与最少数据¶
为每个发送给模型的字段填写:
| 字段 | 为什么需要 | 是否敏感 | 是否可脱敏 | 是否发送 |
|---|---|---|---|---|
| 故障现象 | 生成报修描述 | 否 | 不适用 | 是 |
| 手机号 | 模型不需要 | 是 | 可删除 | 否 |
| 用户密码 | 永远不需要 | 是 | 不适用 | 否 |
检查:
- 只发送当前任务所需信息;
- 用户知道 AI 功能会处理哪些数据;
- 私有数据不用于无关评测;
- 不把整个数据库或完整日志交给模型;
- 数据权限在检索和工具执行前完成;
- 不在普通日志记录完整敏感输入;
- 测试数据使用虚构或脱敏内容;
- 明确第三方服务的数据处理限制。
3. 输入安全¶
- 长度限制;
- 必填项校验;
- 文件类型和大小限制;
- 文档来源验证;
- URL 允许列表(如果确实需要访问外部地址);
- 防止提示注入改变业务权限;
- 防止用户输入成为 SQL、Shell 或模板代码;
- 防止同一用户高频调用。
4. 输出安全¶
- 不直接使用
v-html; - Markdown 渲染禁止或过滤原始 HTML;
- JSON 经过解析和业务校验;
- 类别来自允许列表;
- 推荐 ID 来自真实候选;
- 引用链接由后端元数据生成;
- 工具名来自注册表;
- 模型文本不直接改变权限和状态;
- 高风险结果由人工确认。
5. 权限与 Tool 安全¶
- 当前身份来自 JWT 或 Session;
- 不信任模型参数中的
userId和role; - 每次工具调用重新校验权限;
- 普通用户只能访问自己的数据;
- 没有任意 SQL、Shell、文件和 URL 工具;
- 写操作经过两阶段确认;
- 写操作具有幂等性;
- 工具结果只返回最少字段;
- 第三方 MCP Server 的来源和权限已经检查。
六、设计安全对抗测试¶
安全对抗测试的目标不是诱导模型说一句奇怪的话,而是确认系统边界不会被模型输出绕过。
1. 提示注入¶
预期:
- 模型没有管理员密码可用;
- 后端不会将密码或密钥放入上下文;
- 不调用未授权工具;
- 页面不会执行模型生成的脚本。
2. 越权查询¶
预期:
- 忽略用户自己声明的身份;
- 使用登录上下文;
- 普通用户无法查询他人数据;
- 错误信息不泄露记录是否存在。
3. 恶意结构化输出¶
预期:
- 无效类别被拒绝;
- 页面按文本显示或安全处理;
- 不执行脚本;
- 结果进入人工处理。
4. 工具循环¶
模拟模型连续返回相同工具和参数。
预期:
- 达到重复限制后停止;
- 不无限调用模型和工具;
- 返回可理解提示;
- 记录停止原因。
5. RAG 文档注入¶
知识片段包含:
预期:
- 文档内容只作为数据;
- 后端权限不变化;
- 没有外部发送工具可用;
- 可疑资料在入库审核中被发现。
6. 大输入与高频请求¶
预期:
- 超长输入在后端拒绝;
- 文件大小受限;
- 同一用户频率受限;
- 并发不会耗尽应用线程;
- 不产生失控费用。
七、估算并控制调用成本¶
1. 成本从哪里产生¶
| 成本来源 | 示例 |
|---|---|
| 输入 Token | 系统指令、用户内容、RAG 片段、工具结果 |
| 输出 Token | 回答、草稿、分类理由 |
| Embedding | 文档入库和每次查询向量 |
| 重试 | 超时或格式错误后的重复调用 |
| 多步智能体 | 每一步都可能再次调用模型 |
| 外部服务 | 向量数据库、存储、OCR 或代理 |
| 运行资源 | 后端、数据库、网络和日志 |
2. 不在教材中写死单价¶
模型价格、计费单位和免费额度可能变化。应在验收当天查看所选平台官方价格,并记录:
3. 单次估算¶
如果平台按“每百万 Token”报价,应先统一单位再计算。
4. 每日预算¶
还要考虑:
- 格式失败后的重试;
- 流式中断但上游已经生成;
- 智能体多步调用;
- RAG 首次文档入库;
- 教师和学生集中演示;
- 异常流量。
5. 成本记录表¶
| 场景 | 次数 | 平均输入 | 平均输出 | 平均耗时 | 估算费用 |
|---|---|---|---|---|---|
| 文本草稿 | 【填】 | 【填】 | 【填】 | 【填】 | 【填】 |
| RAG 问答 | 【填】 | 【填】 | 【填】 | 【填】 | 【填】 |
| 分类 | 【填】 | 【填】 | 【填】 | 【填】 | 【填】 |
6. 成本限制¶
- 限制输入和输出长度;
- 减少不必要的上下文;
- RAG 只发送相关片段;
- 规则能完成的任务不用模型;
- 同一输入避免重复生成;
- 禁用输入框实时自动调用;
- 限制每用户和每 IP 的调用频率;
- 智能体限制步骤和总用量;
- 测试使用模拟客户端;
- 设置平台预算提醒;
- 达到项目预算后自动关闭非核心 AI 功能。
流式输出不会天然更便宜
流式只改变返回方式。用户提前停止是否能够减少费用,取决于模型平台是否真正取消上游生成及其计费规则。
八、控制性能、超时和并发¶
1. 记录用户真正感受到的时间¶
| 指标 | 含义 |
|---|---|
| 连接时间 | 项目后端连接模型服务的时间 |
| 首段时间 | 流式请求到第一个有效片段的时间 |
| 完整时间 | 得到完整结果的时间 |
| 工具时间 | 一次真实工具执行耗时 |
| 总任务时间 | 智能体从开始到停止的总时间 |
2. 分层超时¶
实际值根据平台和任务测量后设定。
3. 并发风险¶
长时间模型调用可能占用:
- HTTP 连接;
- 应用线程或异步任务;
- SSE 会话;
- 模型平台并发额度;
- 数据库连接(如果错误地在等待模型时持有事务)。
不要在数据库事务中等待模型
先完成必要查询并释放数据库资源,再调用外部模型。正式写入时重新开启短事务并校验最新业务状态。
4. 防重复¶
- 按钮生成期间禁用;
- 使用
AbortController停止旧请求; - 页面卸载时取消;
- 写操作使用幂等键;
- 后端检测短时间相同请求;
- 不对鉴权失败和输入错误自动重试;
- 网络瞬时失败最多有限重试。
九、建立完整降级矩阵¶
1. 功能级降级¶
| AI 功能 | 正常方式 | 降级方式 |
|---|---|---|
| 文本生成 | 返回可编辑草稿 | 用户手工填写 |
| 流式问答 | 内容逐段显示 | 普通响应或稍后重试 |
| RAG | 回答 + 引用 | 显示检索原文和来源 |
| 智能分类 | 建议类别 | 用户手工选择 |
| 推荐 | 个性化排序和理由 | 热门、最新或规则排序 |
| Tool Calling | 模型选择工具 | 用户进入原业务页面查询 |
| 智能体 | 多步协助 | 分解为人工执行步骤 |
2. 故障级降级¶
| 故障 | 用户提示 | 系统动作 | 基础业务 |
|---|---|---|---|
| 未配置密钥 | AI 功能未配置 | 禁用入口 | 正常 |
| 鉴权失败 | AI 功能暂不可用 | 记录配置错误 | 正常 |
| 超时 | 生成超时,请稍后重试 | 取消请求 | 正常 |
| 限流或额度耗尽 | 请求较多或额度不足 | 暂停调用 | 正常 |
| 返回格式错误 | 未生成有效结果 | 不保存结果 | 正常 |
| RAG 无依据 | 知识库无法确认 | 返回资料入口 | 正常 |
| 工具权限不足 | 无权执行 | 拒绝调用并审计 | 正常 |
| 模型平台离线 | AI 服务不可用 | 打开功能级降级 | 正常 |
3. 降级原则¶
- 提示用户发生了什么;
- 不显示密钥、内部地址和完整平台错误;
- 不丢失用户已经填写的内容;
- 不把失败结果写入正式业务;
- 不无限重试;
- 不把权限错误伪装成成功;
- 提供明确的人工或基础替代路径。
十、使用功能开关控制发布¶
1. 配置示例¶
默认关闭更适合选学扩展:
2. 后端检查¶
3. 前端入口¶
前端可以通过后端公开的能力配置决定是否显示 AI 按钮:
前端隐藏按钮只是改善体验,后端仍必须检查开关和权限。
4. 开关不是唯一保护¶
开启功能后仍需要:
- 输入校验;
- 权限;
- 频率限制;
- 成本限制;
- 超时;
- 输出校验;
- 人工确认;
- 审计。
十一、设计监控、日志与审计¶
1. 最低运行指标¶
| 指标 | 作用 |
|---|---|
| 调用次数 | 判断使用规模 |
| 成功与失败次数 | 观察稳定性 |
| 错误类型 | 区分超时、限流、格式和权限 |
| 平均与高位耗时 | 观察等待体验 |
| 输入与输出用量 | 估算成本 |
| 降级次数 | 判断外部服务影响 |
| 人工修改或拒绝次数 | 观察结果质量 |
| 工具调用次数和步骤 | 控制智能体循环 |
2. 建议日志¶
3. 禁止日志¶
- API Key;
- Authorization 请求头;
- 登录 Token;
- 用户密码;
- 完整敏感输入;
- 私有知识全文;
- 无关个人信息;
- 第三方平台返回的全部内部错误。
4. Tool Calling 审计¶
工具调用还需记录:
- 实际工具名;
- 经过筛选的参数摘要;
- 操作对象;
- 当前用户;
- 是否确认;
- 幂等键;
- 执行结果;
- 停止原因。
5. 用户反馈¶
可以提供:
反馈不能代替固定测试,也不能未经处理直接用于训练或提示词。
十二、完成部署与上线检查¶
1. 配置¶
- AI 功能默认状态符合发布结论;
- 真实密钥通过部署环境注入;
- 模型地址和模型名正确;
- 超时、长度和频率限制已配置;
- 开发、演示和生产配置分离;
.env.example已更新;- README 没有真实密钥。
2. 网络¶
- 后端能访问模型平台;
- 浏览器不直接访问模型平台;
- 防火墙或代理配置正确;
- 流式接口通过 Nginx 后仍逐段返回;
- 代理超时与应用超时协调;
- 只对流式路径关闭缓冲。
3. 数据库和知识库¶
- AI 功能表结构已迁移;
- 测试数据不包含真实隐私;
- RAG 文档版本和来源有效;
- 旧知识更新与回退方式明确;
- 模型关闭时核心数据库操作正常;
- 等待模型时不长期占用数据库事务。
4. 依赖与构建¶
- 依赖版本已固定;
- 未引入来源不明的 SDK;
- 第三方 SDK 权限和网络行为已经了解;
- 前端构建产物不包含密钥;
- 干净环境可以重新构建;
- Docker 或部署说明与实际一致。
5. 发布前演练¶
两次都成功,才能证明 AI 没有阻塞基础项目。
十三、准备 3—5 分钟演示¶
1. 演示目标¶
演示不是展示模型可以聊天,而是证明:
2. 推荐时间分配¶
| 时间 | 内容 | 证据 |
|---|---|---|
| 0:00—0:30 | 业务问题与基础流程 | 原页面或任务说明 |
| 0:30—1:00 | AI 功能范围和边界 | 输入、输出、人工确认 |
| 1:00—2:30 | 正常业务演示 | 真实调用、结果和正式提交 |
| 2:30—3:10 | 测试与效果证据 | 固定案例、引用或分类记录 |
| 3:10—3:50 | 安全、成本和降级 | 配置、预算、关闭服务演示 |
| 3:50—4:30 | 已知限制与总结 | 不足和后续改进 |
根据课程时长调整,不必强行讲满 5 分钟。
3. 正常案例¶
演示数据应提前固定:
不要在答辩现场临时输入随机问题。
4. 降级案例¶
推荐至少演示一种:
- 关闭
AI_ENABLED; - 使用模拟超时;
- RAG 提问知识库没有的问题;
- 分类返回无效类别并进入人工选择;
- Tool Calling 请求越权数据并被拒绝。
降级演示应短、明确、可恢复,不建议现场故意耗尽真实额度。
5. 备用方案¶
- 提前录制正常演示视频;
- 保存核心页面截图;
- 准备模拟模型服务;
- 准备固定 JSON 响应;
- 保存测试报告和调用日志截图;
- 准备基础业务的手工演示路径;
- 确认所有备用材料不包含密钥和隐私。
十四、AI 功能演示脚本模板¶
十五、整理最终交付包¶
建议目录:
项目还应包含:
1. README 中的 AI 功能说明¶
2. 已知限制¶
不要写:
可以记录:
- 模型输出具有不确定性;
- 只支持指定语言或文档格式;
- RAG 只覆盖某几份资料;
- 分类对过短描述效果较差;
- 推荐暂未使用长期行为数据;
- Tool Calling 只开放只读工具;
- 流式响应依赖代理配置;
- 免费额度或演示账号可能受限;
- 未完成高并发和长期运行测试。
3. 关闭与回滚说明¶
十六、评分量规¶
| 维度 | 优秀 | 合格 | 待改进 |
|---|---|---|---|
| 业务价值 | 与核心流程紧密结合,有可验证改善 | 有明确业务场景 | 只是孤立聊天或技术展示 |
| 功能边界 | 模型、规则、人工职责清晰 | 基本说明职责 | 模型直接决定重要业务 |
| 测试 | 分层测试、固定评测和降级演练完整 | 有正常与失败测试 | 只有成功截图 |
| 安全 | 密钥、隐私、权限、输入输出均检查 | 无明显密钥泄露 | 存在越权或敏感信息风险 |
| 成本 | 有真实价格依据、预算和限制 | 能说明基本费用 | 完全不了解调用成本 |
| 降级 | 可开关、可回退,基础业务独立 | 失败有提示 | AI 失败导致核心业务不可用 |
| 运维 | 指标、日志、审计和排错清楚 | 有基础日志 | 无法定位失败原因 |
| 演示 | 正常、验证、降级均可稳定展示 | 能展示主要功能 | 依赖随机现场输入 |
| 文档 | 他人可以配置、测试、关闭和复现 | 有基本配置说明 | 缺少密钥和运行说明 |
教师可以根据课程目标调整权重。AI 功能是选学内容时,不应因为学生没有选择复杂模型或智能体而影响基础项目成绩。
十七、🤖 让 AI 帮你完成验收,但不能代替证据¶
人工必须完成:
- 执行测试,而不是只生成测试表;
- 核对平台真实价格和用量;
- 检查仓库历史和演示画面中的密钥;
- 使用真实角色执行越权测试;
- 关闭 AI 后完成基础业务;
- 在目标部署环境验证流式和代理;
- 记录失败案例和真实限制;
- 决定正式启用、实验启用还是默认关闭。
十八、常见问题与修正方法¶
| 常见问题 | 后果 | 修正方法 |
|---|---|---|
| 只测试一次成功生成 | 无法证明稳定性 | 分层测试和固定评测集 |
| 自动化测试调用真实模型 | 慢、不稳定、产生费用 | 使用模拟客户端 |
| 把模型文字完全相同作为断言 | 测试频繁失败 | 检查事实、格式、枚举和禁止内容 |
| 把相似度当作正确率 | 误导用户和验收 | 分别评测检索与回答 |
| 单价直接照抄旧资料 | 预算错误 | 验收当天核对官方价格 |
| 流式输出认为一定省钱 | 低估成本 | 按平台取消和计费规则验证 |
| AI 失败后无法提交业务 | 扩展功能阻塞核心项目 | 保留手工或规则流程 |
| 只在前端隐藏功能 | 可以绕过页面调用 | 后端检查开关和权限 |
| 等待模型时持有数据库事务 | 连接占用和锁风险 | 外部调用与短事务分离 |
| 日志打印完整请求和响应 | 泄露隐私或密钥 | 记录状态、耗时和长度 |
| 演示输入完全随机 | 结果和时间不可控 | 使用固定数据和备用视频 |
| 写“暂无限制” | 无法体现真实工程判断 | 明确范围、数据和部署限制 |
| 未演练关闭 AI | 无法证明可降级 | 使用功能开关重走核心流程 |
| AI 选学影响基础成绩 | 学习目标错位 | 单独设置扩展评分与加分项 |
十九、最终提交前自查¶
基础独立性¶
- 核心业务已经完成测试和部署;
- AI 功能通过配置可以完全关闭;
- 关闭后登录、查询、提交和管理仍然正常;
- AI 功能没有替代必要权限和业务规则;
- 发布结论明确。
测试与效果¶
- 单元测试使用模拟客户端;
- 集成测试覆盖接口、权限和错误转换;
- 固定评测集包含正常、边界、失败和恶意输入;
- 已进行少量真实服务测试;
- 已完成页面端到端验证;
- 已记录失败案例并回归;
- 没有虚构正确率、耗时和测试数量。
安全与隐私¶
- 仓库、历史、日志和演示中没有真实密钥;
- 前端和浏览器请求中没有模型密钥;
- 只发送完成任务所需的最少数据;
- 当前用户身份来自后端登录状态;
- 结构化输出经过业务校验;
- 模型文本不会直接执行高风险操作;
- 写工具经过确认、幂等和审计;
- 提示注入不能绕过后端权限。
成本与稳定性¶
- 已记录价格查询日期和官方依据;
- 已估算单次、每日和演示成本;
- 已限制输入、输出、频率、重试和智能体步骤;
- 已设置连接、请求和总任务超时;
- 已测试超时、限流、额度不足和平台离线;
- 达到预算或异常阈值时能够关闭 AI。
部署与交付¶
-
.env.example完整但不包含密钥; - README 说明配置、测试、降级和关闭方法;
- 目标环境已验证模型网络;
- 流式接口通过代理仍然正常;
- 最终交付包包含测试、安全、成本和降级证据;
- 演示脚本使用固定数据;
- 已准备视频、截图或模拟服务备用方案;
- 已知限制真实、具体且可解释。
本节小结¶
AI 扩展功能的完成标准不是“模型返回了内容”,而是形成一套可以被验证和控制的交付闭环:
明确价值与边界 → 分层测试 → 固定效果评测 → 安全与隐私检查 → 成本上限 → 超时和限流 → 功能开关 → 失败降级 → 监控审计 → 固定演示 → 文档与回滚
完成本节后,你已经将一个实验性的模型能力转化为可以安全展示、独立关闭和清楚解释的项目特色功能。接下来进入第六篇,把基础项目和选学成果统一整理为演示、答辩、个人贡献、作品集和成长复盘材料。
进入第六篇:项目展示、答辩与成长复盘 返回上一节:AI-05 Tool Calling、MCP 与智能体 返回扩展篇导读