Day 5: 当 LLM 开始胡说八道:如何设计 Clawdbot 的防御层

Day 5: 当 LLM 开始胡说八道:如何设计 Clawdbot 的防御层

标题备选

  1. 当 LLM 开始胡说八道:如何设计 Clawdbot 的防御层
  2. 给你的 AI 装上"熔断器":容错机制的实战指南
  3. 不要盲信 AI 的 JSON:构建基于校验器的鲁棒工作流

正文内容

我们在前几天建立了模块化架构,也加上了日志追踪。现在,我们要面对 AI Agent 最大的不可控因素:幻觉 (Hallucination) 和不确定性

即使是 Claude 3.5 这样强大的模型,偶尔也会"抽风"。 比如,你让它抓取股价,它没找到,为了完成任务,它可能编一个数字给你。 或者你让它返回 JSON,它却返回了一段 Python 代码。

如果你直接把 AI 的输出写进生产数据库,那就是在埋雷。

容错不是可选项,是必选项。 我们需要构建三层防御体系。

第一层防御:结构化验证 (Validator)

原则:永远不要信任 LLM 的输出。

不管你在 Prompt 里强调了多少遍"只返回 JSON",你都必须在代码层做校验。不要只用 try-catch JSON.parse(),那太弱了。你需要 Schema 校验。

在 Python 里,Pydantic 是神器。

from pydantic import BaseModel, Field, ValidationError

class ProductItem(BaseModel):
    name: str = Field(description="商品名称")
    price: float = Field(description="价格,必须是数字")
    in_stock: bool = Field(description="是否有货")

# 模拟 LLM 的输出(这次它犯蠢了,价格给成了中文)
llm_output = {"name": "Switch", "price": "三百块", "in_stock": "Yes"}

try:
    # 这步会直接抛出详细错误,而不是把垃圾数据写进库里
    product = ProductItem(**llm_output) 
except ValidationError as e:
    print("AI 输出格式错误,启动修复流程...")

这层防御能挡住 90% 的格式错误。

第二层防御:自我修正循环 (Self-Correction Loop)

当第一层校验失败时,不要直接报错退出。把错误信息扔回给 AI,让它自己改。

这是一种非常有效的 Pattern:

  1. AI 生成结果 A。
  2. 代码校验 A,发现错误:price should be float
  3. 将错误信息 + 原始 Prompt 再次发给 AI:"你上次生成的结果有误,报错是...,请修正。"
  4. AI 生成结果 B。

通常一次修正就能解决问题。这让你的工作流具有了"自愈"能力。

第三层防御:任务熔断 (Circuit Breaker)

如果 AI 连续修正了 3 次还是错怎么办? 或者 API 连续超时 5 次怎么办? 或者今天的 Token 消耗突然达到了平常的 10 倍怎么办?

这时候,必须熔断。停下来,发报警,转人工。

不要让错误的循环无休止地运行下去,这不仅烧钱,还可能污染大量数据。

熔断策略示例:

  • 重试上限: 每个步骤最多重试 3 次。
  • 成本熔断: 单次任务 Token 消耗超过 $2 强制停止。
  • 错误率熔断: 如果过去 1 小时失败率超过 50%,暂停整个 Cron Job。

总结:防御性编程

在传统编程中,输入通常是可控的。 在 AI 编程中,输入(环境)和处理逻辑(模型)都是概率性的。

所以,Clawdbot 的稳定性不来自于模型本身有多强,而来自于你的**外围包裹代码(Wrapper Code)**有多厚实。

  • Validator 确保数据类型正确。
  • Retry Loop 解决偶发性抽风。
  • Circuit Breaker 防止灾难性损耗。

只有做好了这三层防御,你才敢在周末放心地去睡觉,而不是担心周一早上被老板叫去修数据。

明天,我们聊聊如何管理这些复杂的配置——把 Prompt 当代码管


标签:#AI安全 #容错设计 #Pydantic #Clawdbot #鲁棒性

← 返回博客列表