如果你的 agent 可以删除用户数据,你的 prompt 就不是 prompt,而是 contract

发布: (2025年12月27日 GMT+8 06:46)
7 分钟阅读
原文: Dev.to

抱歉,我需要您提供要翻译的具体文本内容(文章正文),才能为您完成简体中文翻译。请把需要翻译的文字粘贴在这里,我会在保持原有格式、代码块和链接不变的前提下进行翻译。

当良好提示设计仍然失效时

大多数我认识的 AI 工程师已经在做“显而易见”的事情:

  • 将系统指令与用户指令分离
  • 限制输出(JSON / 模式)
  • 添加验证器
  • 使用工具而非自由文本猜测
  • 包含安全语言

然而,代理仍会以让人觉得不公平的方式失败:

  • 范围蔓延(“你对我的所有信息”随时间扩展)
  • 工具输出泄露了你不打算公开的字段
  • “乐于助人”的行为在边缘案例中覆盖了策略
  • 删除计划过早或过于自信
  • 当出现问题时缺乏可审计性

这并不是因为提示本身不好,而是因为指令没有写成可执行的合约。DSAR 正是这种差距立刻显现的地方。

Source:

改变一切的设计举措

编写指令合约(类似行为的 API 规范)。下面是我使用的实用设计流程,并附有示例。

1. 不可协商项(硬约束,而非氛围)

这不是“要安全”。

示例约束

  • 如果用户请求关于其他人的数据 → 拒绝
  • 永不导出原始日志;只能返回 已编辑的摘要
  • 除非:身份已验证 提供了明确的确认令牌,否则永不执行删除。

这些约束消除了产生漂移的解释层。

2. 范围定义(防止范围蔓延,而不仅仅是明确范围)

大多数团队只写一次范围,但随着代理变得“更强大”,范围仍会蔓延。
将范围定义为:

  • 算作范围的内容
  • 不算作范围的内容
  • 在模糊情况下的行为

示例范围

包含

  • 个人资料字段(姓名、电子邮件、电话)
  • 订单与发票
  • 支持工单 / 聊天记录
  • 营销偏好
  • 设备标识符(如果已收集)

排除

  • 内部员工备注
  • 汇总的分析仪表盘
  • 包含其他用户标识符的记录
  • 暴露系统内部的内部安全日志

模糊规则示例: 如果系统返回混合用户记录 → 停止并上报

这可以防止代理“扩展任务”。

3. 工具边界(假设工具会返回超出请求的内容)

即使你只请求白名单字段,工具往往会返回额外字段。
你的合约必须明确说明:

  • 允许的字段
  • 不允许的字段
  • 出现不允许字段时的处理方式

示例:CRM 政策

Allowed(允许)Disallowed(不允许)
name, email, phone, created_at, last_loginnotes, internal_tags, fraud_flags

必需行为: 若出现不允许的字段 → 丢弃并记录违规

示例:日志政策

  • 仅返回类别 + 日期范围 + 已编辑的片段
  • 永不返回原始日志

工具边界可防止意外泄漏和“悄悄违规”。

4. 输出形状(让可审计性成为默认,而非可选)

大多数工程师会约束输出,但真正的收益在于让输出易于审计。

示例输出骨架(JSON)

{
  "identity_verification": {
    "method": "string",
    "confidence": 0.0,
    "matched_fields": ["field1", "field2"]
  },
  "data_found": [
    {
      "system": "string",
      "records_found": 0,
      "date_range": "YYYY‑MM‑DD to YYYY‑MM‑DD"
    }
  ],
  "redactions_applied": [
    {
      "field": "string",
      "reason": "string"
    }
  ],
  "deletion_plan": [
    {
      "item": "string",
      "dependencies": ["string"]
    }
  ],
  "user_summary": "Plain‑language summary of actions taken."
}

现在代理会生成可供审查和对比的制品。

5. 停止规则(可靠性由此获得)

了解 何时停止 是高级提示设计技巧。

示例

  • 身份置信度 < 0.9 → 停止;请求再提供一次证明。
  • 匹配到多个用户账户 → 停止;上报。
  • 请求删除但未提供明确的确认令牌 → 停止;要求用户确认。
  • 任何超出请求者身份的范围扩展请求 → 拒绝

停止规则可防止系统“发挥创意”。

为什么这很难(以及为什么值得展示)

这并不是把提示写成文案,而是把提示写成 系统设计

  1. 政策 → 约束
  2. 约束 → 可预测行为
  3. 可预测行为 → 可审计输出

这就是“看起来聪明的代理”和“你可以信任的代理”之间的区别。

应该自动化的部分(但不去除判断)

思考仍然由人类完成,但重复的脚手架不应该。

值得自动化的内容

  • 为每个工作流生成指令‑合约模板
  • 生成特定步骤的提示 + 输出模式
  • 在工具之间强制执行一致的边界规则
  • 版本控制 + 差异(“有什么变化?”)
  • 运行“黄金请求”回归检查

规则仍由你决定。自动化只是让系统在迭代时保持一致。

Back to Blog

相关文章

阅读更多 »