我终于让 LLMs 返回完美 JSON(2025 版)——不使用 hack,不使用 Regex,只输出干净的结果
Source: Dev.to

LLM JSON 输出的问题
如果你在实际项目中使用过 LLM——尤其是 LangChain + TypeScript——你可能已经体会到以下挫败感:
- JSON 损坏
- JSON 周围被额外文本包裹
- 随机出现的“创意”输出
- 生产环境中解析器崩溃
我在构建 AI 应用、RAG 聊天机器人以及使用 Next.js、LangChain、Supabase Vector Store、Pusher 等技术的 SaaS 平台时,亲身经历了这些问题。我尝试了各种提示技巧来强制严格的 JSON 结构:
- “仅返回有效的 JSON。”
- 添加严格指令以及注意事项
- 正则清理
- 后处理管道
没有一种方法能够可靠地工作。
为什么仅靠提示不足以解决
仅靠提示永远无法保证返回有效的 JSON。LLM 并非为始终遵守格式规则而设计,依赖提示工程会导致结果不稳定。
2025 解决方案:LangChain .withStructuredOutput() + Zod
面向生产的解决方案是将 LangChain 的 withStructuredOutput() 方法与 Zod 模式结合使用。这会强制模型返回:
- 100 % 有效的 JSON
- 完全类型化的数据
- 符合模式的响应
- 没有额外文本或格式问题
它兼容多种提供商:
- Google Gemini
- OpenAI(GPT‑4o、o‑mini)
- Groq(Llama 3.1)
- Anthropic Claude
你将学到的内容
.withStructuredOutput()的内部工作原理- 步骤详解的 Next.js 16 + TypeScript 实现
- 带有完善错误处理的 API 路由
- 用于严格输出验证的 Zod 模式
- 使用 shadcn/ui 的简洁 UI 示例
- 为什么该方法比旧的 hack 更快、更便宜、更可靠
完整指南
🔗 如何在 LangChain 中使用 TypeScript 强制返回完美 JSON(2025 版)