切勿直接信任大语言模型的输出。以下是我为每个智能体设置的验证层。

发布日期:2026-07-01 10:44:57   浏览量 :6
发布日期:2026-07-01 10:44:57  
6

在我审查过的几乎每个人工智能代理代码库中,都存在一种我见过的故障模式:代理接收到模型响应后,盲目信任其中包含的 JSON 数据,并调用 .result.items[0].id——结果在凌晨两点抛出 Cannot read properties of undefined(无法读取未定义的属性)错误,因为模型在某种边界情况下返回了 {"result": null}

模型并没有幻觉出内容。它幻觉出了结构

这种情况出奇地常见,而解决方案并不是“使用更好的提示词”。真正的解决方案是在原始模型输出和执行操作的代码之间加入一个验证层。

为什么结构化输出还不够

Claude 和 GPT-4 都支持结构化输出模式,可以约束模型生成符合给定模式的合法 JSON。这确实非常有用,你应该使用它。但它并不能完全解决问题,原因有二:

1. JSON 格式合法并不等于语义合法。

模型可以生成完全符合你的模式且格式合法的 JSON,但内容仍然是错误的。一个本应是通用唯一识别码(UUID)的字符串字段,可能包含一个虚构的标识符,导致数据库查询失败。一个标记为 confidence_score(置信度分数)的整数字段,其值可能是 847,而你的代码期望的是一个 0 到 1 之间的浮点数。模式强制的是类型,而非语义。

2. 并非所有大型语言模型调用都使用结构化输出。

如果你正在进行多步推理、思维链步骤、工具调用解析,或者处理来自不支持原生 JSON 模式的模型的输出,你就需要解析自由文本响应。你需要稳健地处理这种情况。

模式:解析、验证、分类

我现在构建的每个代理调用都会经过三个阶段:

原始模型输出
     ↓
  [解析]   – 从文本中提取结构
     ↓
 [验证] – 断言结构符合预期
     ↓
 [分类] – 对结果进行分类,以便调用者能够处理

以下是我实际使用的 TypeScript 实现:

import { z } from "zod";

// 1. 定义你期望的模式
const AnalysisResultSchema = z.object({
  sentiment: z.enum(["positive", "negative", "neutral"]),
  confidence: z.number().min(0).max(1),
  key_points: z.array(z.string()).

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据