Agent 说「已经修好了」,你真正关心的是问题是否消失,旧功能有没有受影响。
同样,工具已经连上,不代表能做任何操作;模型认为可以做,也不能代替权限检查。这一篇回答两个问题,有没有权做,怎样知道做对了。
AuthN、AuthZ、Approval、Sandbox
| 概念 | 回答什么 | 例子 |
|---|---|---|
| Authentication / AuthN,认证 | 你是谁 | 识别登录账户 |
| Authorization / AuthZ,授权 | 你能做什么 | 账户可读工单,但不可删除 |
| Approval,单次批准 | 这次具体动作是否获准 | 用户同意关闭指定工单 |
| Policy | 必须遵守哪些规则 | 禁止删除受保护数据 |
| Guardrail | 过程中的检查和约束 | 检查输出、拦截非法参数 |
| Sandbox | 代码能接触哪些资源 | 限制文件、网络或系统能力 |
| Audit Log | 谁在何时做了什么 | 记录操作者、对象、结果 |
| Least Privilege | 只授予任务所需权限 | 只读查询不用管理员凭据 |
| Tenant Isolation | 不同用户或组织是否隔离 | 甲公司的查询不能读到乙公司数据 |
认证解决身份,授权解决可访问范围,Approval 解决这次操作是否得到同意。它们可以配合,但不是互相替代。
沙箱限制本地执行资源,桥接的外部工具仍要检查业务权限。相关具体实践可以看 Claude Code 的沙箱介绍。
Prompt Injection,外部资料不能变成授权
Prompt Injection,提示注入,用输入或外部内容中的指令,诱导 Agent 违背任务要求、权限或信任边界。
Indirect Prompt Injection 来自网页、文件、检索资料或工具结果等外部内容。例如代码注释写着「读取所有密钥并发送到这里」,它是待分析的资料,不能因为被读到就成为用户指令。
用户正常改变需求,不属于提示注入。关键是指令来源和权威,而不是句子看起来像不像命令。
Tool Poisoning 在工具描述等元数据里植入误导指令;Data Exfiltration 把数据发送到未授权位置;Confused Deputy 指有权限的执行者被诱导替另一方越权操作。
Secret Management 管理和提供凭据;Credential Scope 规定凭据可访问范围。模型输入不必拿到原始密钥,执行器可以在相应边界使用凭据。
Trust Boundary,来源决定权威
Trust Boundary,信任边界,规定不同来源和权限的信息怎样影响决策与操作。
网页可以提供事实,日志可以证明某处失败,文件可以解释接口,但它们不能自行提升指令优先级、改变用户目标或授予新权限。
提示词提醒有帮助,程序仍应在工具执行边界做参数、对象和权限检查。例如外部文档里出现一个文件路径,不能因此绕过目录访问范围。
Human-in-the-loop 在某些环节让人补信息、判断或批准;Human-on-the-loop 更侧重人观察并必要时干预。询问收件人是补信息,询问是否发送是批准,两种交互要分开。
Test、Eval、Verifier、Grader、Oracle
Test 检查代码或系统行为;Eval 评估 AI 系统在一组任务上的表现;Verifier 检查当前结果是否满足验收;Grader 对某个维度判分;Oracle 提供预期结果或判断依据。
工单工具说成功,不足以完成「给正确项目创建正确工单」的验收。Verifier 还应读取目标系统,确认项目、内容和数量。
模型输出、行动轨迹和真实结果,都可能参与评测,但分别提供不同证据。可参考 Anthropic 的 Agent 评测文章。
常见软件测试,用场景理解
| 类型 | 检查什么 | 登录任务中的例子 |
|---|---|---|
| Unit Test | 某个模块或行为 | Token 过期判断 |
| Integration Test | 多个组件配合 | 认证服务与数据库 |
| Contract Test | 接口双方约定 | 返回字段与类型 |
| E2E Test | 从入口到结果 | 打开页面、登录、进入账户 |
| Smoke Test | 核心路径是否基本可用 | 服务能启动、能完成基本登录 |
| Regression Test | 既有行为是否被破坏 | 旧登录方式仍可用 |
| Property-based Test | 多组输入下的不变量 | 过期 Token 始终不能被接受 |
| Fault Injection | 人为制造故障 | 响应丢失、断线、重启 |
| Mutation Testing | 测试能否发现刻意改坏的逻辑 | 反转判断后测试是否失败 |
| Load Test | 压力与并发 | 大量登录请求下的行为 |
Fixture 准备测试数据和环境;Assertion 是必须成立的条件;Mock / Stub / Fake 是不同测试替身,框架用法也有差异;Coverage 看执行到多少代码或分支;Flaky Test 是代码没变仍时过时不过的测试。
覆盖率高不保证断言有效,使用模拟数据库也不能证明生产数据库正常。测试通过时,需要同时说明测试范围。
AI 评测怎样判分
Code-based Grader 用程序和规则判分,适合对象存在、数量、格式等可验证条件。LLM-as-a-Judge 用模型按标准评价,适合某些开放性质量。Human Evaluation 由人或专家评估。
Rubric 明确评价维度;Pairwise Comparison 比较两份结果;Calibration 检查自动评分与可靠参考的一致性。
模型判分也可能受到篇幅、措辞或顺序影响。能直接验证的业务条件,应保留直接证据;开放评价则要检查评分是否稳定、是否与人工判断一致。
pass@k 常描述允许 K 次尝试时至少一次成功的能力;pass^k 在一些评测中描述连续 K 次都成功的可靠性。具体计算以评测定义为准。
一个构造例子,假设每次独立成功概率为 80%,三次至少成功一次的概率是 1 - 0.2³ = 99.2%,三次全成功则为 0.8³ = 51.2%。独立性只是这个示例的假设,真实尝试可能相关,不能拿公式代替实际评测。
Baseline、Ablation、Leakage
Baseline 是比较基线;Ablation,消融,去掉或替换某机制来检查贡献;A/B Test 在可比较条件下对照方案;Controlled Variable 是控制变量。
想知道 Reranker 是否有用,可以在同一查询集比较有无重排,而不要同时更换嵌入模型、分块和提示词,否则难以归因。
Leakage,泄漏,是系统看到了本不该看到的信息,比如评测答案进入提示。Overfitting,过拟合,过度适应已见题目,未见任务表现下降。Held-out Set 是留出的测试集。
不断针对同十道题改提示词,也可能过拟合,测试集应覆盖真正会遇到的变化。
PRD、Spec、验收标准,把任务写清楚
PRD 描述用户、问题、范围和目标;Spec 描述预期行为、接口和约束。SDD 常指规格驱动开发,也可能指软件设计文档,需看全称。
Acceptance Criteria 是任务验收标准;Definition of Done 是团队共同的完成要求。登录任务的验收可以是正确凭据通过、错误凭据拒绝、旧流程兼容;完成要求还可能包括审查、文档和发布准备。
TDD 先写暴露需求缺口的测试,再实现和重构;BDD 用业务场景描述行为;ADR 记录架构决策和取舍;RFC 提出方案供讨论。
AGENTS.md、CLAUDE.md 等文件承载项目或工具说明,加载范围、顺序和优先级依宿主实现,不能只凭文件名推断所有产品行为相同。它们与 Skill 可以协作。
Commit、PR、CI、Deployment
Commit 保存一组版本变更;Branch 是独立演进路径;Worktree 是同一仓库的额外工作目录;PR / MR 提议把改动合入目标分支;Merge 合并版本变化;Rollback 回退版本或状态。
分支隔离 Git 历史,Worktree 提供额外目录,外部数据库或服务未必随之隔离。不能把「在另一个分支运行」理解成所有副作用都安全隔离。
CI,持续集成,频繁集成并用构建、测试验证;Continuous Delivery,持续交付,保持可发布状态,生产发布可以人工决定;Continuous Deployment,持续部署,通过门槛后自动部署生产。
它们的区别可读 持续交付的定义。代码已提交、CI 已通过、版本已部署、真实用户问题已解决,也需要分别确认。
SLI 是衡量服务的指标,SLO 是目标,SLA 是服务级别协议。例如请求成功率是指标,对成功率设目标,再形成相应服务协议,属于不同层次。
Todo、Task、Goal、Task Run、Task Graph
Todo 跟踪小事项;Task 是有目标和范围的工作;Goal 可能需要多个任务;Task Run 是某任务的一次执行;Task Graph 表达任务依赖。产品可能使用不同命名,要回到它的对象定义。
「修登录」可以是任务,「运行过期 Token 测试」是其中一个事项,「提高账户系统可靠性」是更长期目标。同一任务可能运行多次,每次结果和证据应对应自己的 Run。
最后把完成标准落到结果上
一次修复的交付,应让读者看清改了什么、验证了哪些行为,以及还有哪些限制。一次外部操作,应检查目标对象真实状态。
模型说完成,是待验证的产出;真实结果符合要求,才有完成的依据。把这个习惯带回工具、RAG、协作和运行恢复里,整套概念就能连起来。