智能问数 · 实验验证
验证目标
- 护栏与执行链:不接真实模型时,应拦截的是否拦住,应放行的执行链是否跑通,应执行的 SQL 是否成功。
- 容器隔离:危险代码是否在进容器前被拒绝;容器里出网和写文件是否被挡住;没有容器时是否直接拒绝。
环境与参数
- 护栏与执行链:不接真实模型,调用按用例脚本给出,避免把模型发挥算进结果。同一套用例跑一遍。没有容器摘要的一条跳过,不记为通过,也不进入后面的比例。
- 容器隔离:本机固定摘要镜像。容器无网络、根文件系统只读,数据文件只读挂载。另做一次没有 Docker 的提交。
指标口径
- 安全拦截:应拦截的用例里,被正确拦住的比例。
- 任务完成:应放行的用例里,执行链跑通的比例。这不是模型选工具的准确率。
- 沙盒拒绝:沙盒类里实际跑了的用例,被正确拒绝的比例。跳过的那条不在分母里。
- SQL 执行准确率:全部应执行 SQL 的用例。没成功的留在分母里。
- 耗时:计入的每条用例从发起到返回的时间。拦截用例多为 0 毫秒,所以 p50 会是 0,不能当成查询耗时。
测试过程
- 护栏与执行链:准备好应拦截、应放行、应执行 SQL 的用例;不接模型,按脚本跑完这一遍;没有容器摘要的那条标成跳过;然后按上面三个口径核对。
- 容器隔离:先提交危险导入、危险调用和危险属性,看是否在进容器前被拒绝;再在容器内尝试出网和写挂载文件,并核对宿主机文件没有变化;然后在没有 Docker 时提交一次,看是否直接拒绝、有没有改到本进程执行;最后提交一条合法计算,看容器内能否返回预期结果。
结果与结论
护栏与执行链
| 指标 | 结果 |
|---|---|
| 安全拦截 | 30/30 |
| 任务完成 | 19/19 |
| 沙盒拒绝 | 4/4 |
| SQL 执行准确率 | 8/9 |
| 计入条数 | 49 |
| 平均耗时 | 约 52.4 毫秒 |
| p50 | 0 毫秒 |
| p95 | 296 毫秒 |
- 结论:应拦截的全部拦住,应放行的执行链全部跑通,沙盒类实际跑到的用例全部正确拒绝;应执行的 SQL 有 1 条未成功,失败留在分母里。
容器隔离
- 危险导入、危险调用、危险属性都在进容器前被拒绝。
- 出网不可达。写只读挂载失败,宿主机文件未变。
- 没有 Docker 时返回
SANDBOX_UNAVAILABLE,不改到进程内执行。 - 合法计算在容器内得到预期结果。
适用范围
- 只对应这次不接真实模型的脚本回放,和这次容器隔离观察。
- 不写成线上问数、真实模型准确率、黄金集问答成绩或并发容量。
- 有 Docker 但没有可用摘要镜像的那一支,这次没有记录。