跳到主要内容

安全、拒答与降级

进阶

在生产环境中,你的代码必须能处理 Claude 不会(或无法)按预期作答的情况。处理得好,用户毫无察觉;处理得差,就是一次崩溃或一段令人困惑的回复。

两种不同的情形

  • 模型拒答 — Claude 拒绝某个请求(例如它判定该请求有害)。响应会发出这一信号(通常通过拒答的 stop_reason/内容)。把它当作一种正常结果,而非错误。
  • 分类器/安全拦截 — 一个独立的安全层可能拦截内容。它的表现可能与模型拒答不同。

弄清楚你遇到的是哪一种,能让你做出恰当的应对,而不是盲目重试。

优雅地处理

resp = client.messages.create(...)
if getattr(resp, "stop_reason", None) == "refusal":
# Don't show a raw/empty result. Offer a safe fallback or a clarifying ask.
show_user("I can't help with that as asked. Here's what I can do instead…")
else:
render(resp)

减少不必要的拒答

  • 补充正当的上下文。 当意图是善意的时候,一个请求仍可能在模式上匹配到某些敏感内容;说明真实、正当的目的会有帮助。
  • 写得具体。 含糊或带有冒犯意味的措辞会招致谨慎对待。
  • 不要硬刚。 如果某个请求确实不被允许,拒答就是正确的——设计一条优雅的路径,而不是试图越狱。

降级模式

  • 用一个 澄清性问题 代替死胡同。
  • 提供一个 安全的替代方案("我可以改为总结这些公开信息")。
  • 对于流水线,在置信度/合规性较低时 转交人工

下一步