KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

让 Agent 的能力停在该停的地方:从信任边界到可验证的安全控制 — keel 龙骨

Safety Controls 的参考信息:让 Agent 的能力停在该停的地方:从信任边界到可验证的安全控制

同一个配置变更继续向前:Agent 建议把 payment-service/staging 的连接池改到 40,并通知值班群。执行代码已经能处理幂等、超时、对账和补偿,但这并不说明动作安全。

现在要回答另一组问题:

安全控制的目标不是让模型永不犯错,而是让错误、攻击和越权难以转化为不可接受的现实影响。

安全控制放在哪里

flowchart LR
    I[用户/外部内容/记忆/Agent 消息] --> H[Harness]
    H --> M[模型提出 Proposal]
    M --> PEP[Policy Enforcement Point]
    C[认证身份与运行上下文] --> PEP
    PDP[Policy Decision Point] --> PEP
    A[Approval Store] --> PEP
    PEP -->|允许且绑定有效| X[隔离执行器]
    PEP -->|拒绝/需审批| R[受控结果]
    X --> E[外部系统]
    PEP --> L[审计事件]
    X --> L

模型可以提出动作,不能批准自己的动作;Prompt 可以帮助模型遵守规则,不能充当权限边界;安全决定必须在现实副作用发生前由确定性执行点强制实施。

完成后应具备的判断能力

章节顺序

章节 当前要解决的问题 代码落点
01. 在写规则之前,先画出谁能伤害什么 建立资产、攻击面和信任边界 威胁模型表
02. Agent 到底代表谁行动? 分清身份、授权、委派和 confused deputy contracts.py
03. 哪些是指令,哪些只是数据? 建立来源、优先级和污染传播 provenance.py
04. 安全规则必须在模型绕不过去的地方生效 建立 PDP、PEP 与默认拒绝 policy.py
05. 权限越宽,模型的一次误判就越昂贵 实现 capability、scope 和凭据最小化 权限交集
06. 网页里的一句话,为什么能劫持整个 Agent? 理解直接/间接注入与纵深防御 注入实验
07. 工具、代码和网络如何把文本风险放大? 防工具滥用、命令注入和 SSRF isolation.py
08. 数据外泄不只发生在最终回答里 管理秘密、日志、上下文和输出通道 数据流控制
09. 一次真正有效的人工审批长什么样? 绑定动作、职责分离并防审批疲劳 approval.py
10. 记忆、多 Agent 和依赖会怎样传播污染? 治理长期信息与跨主体信任 来源链与版本
11. 怎样证明安全控制真的挡住了攻击? 建立审计、红队、回归与风险闭环 audit.py
12. 完成一个安全动作网关 把身份、策略、审批和执行连起来 gateway.py

遇到陌生术语时查阅安全控制术语地图。资料来源、威胁覆盖和教学取舍记录在调研与课程设计依据中。

运行确定性安全边界

python -m pip install -r courses/advanced/safety-controls/course/project/requirements.txt
python courses/advanced/safety-controls/course/project/examples/01_policy_decisions.py
python courses/advanced/safety-controls/course/project/examples/04_approval_binding.py
python courses/advanced/safety-controls/course/project/examples/05_secure_gateway.py
python -m unittest discover -s courses/advanced/safety-controls/course/project/tests -v

真实 Ollama 只生成不可信动作提议:

ollama serve
ollama pull qwen3:8b
$env:OLLAMA_MODEL = "qwen3:8b"
python courses/advanced/safety-controls/course/project/examples/06_ollama_untrusted_proposal.py

从第 01 章开始。先明确保护对象和信任边界,再写第一条策略。

进入 keel 阅读