96SEO 2026-08-01 18:06 2
LLM 天生擅长生成自然语言文本,但当需要把它的输出接入程序逻辑时自由文本就变成了障碍。你需要的是一个可以 JSON.parse 的结构化对象,而不是一段散文。

这篇文章以 ChatCrystal 的两个真实场景为例。介绍两种让 LLM 输出结构化 JSON 的方案,并针对上述痛点提供实战解决思路。
至于优点。兼容任何模型 至于缺点,LLM 不一定严格遵守格式,需要额外的容错逻辑。
典型流程:
// 从 LLM 响应中提取 JSON
const jsonMatch = rawResponse.match;if {
const result = JSON.parse;}
**问题明显**:
再看主要优势。
// 定义 schema
import { generateObject } from 'ai';import { z } from 'zod';const MySchema = z.object({
至于title。z.string,score: z.number.min.max,});// 调用 generateObject
const { object } = await generateObject({
至于model,getLanguageModel。schema: MySchema,system: '你是一个评分助手',prompt: '请对下面内容打分:...',maxRetries: 3,});// 使用结果
console.log;// string
console.log;// number
generateObject 背后做了什么?老实说,
Zod 是 TypeScript 世界里最常用的运行时校验库。用它既能在编译期得到类型推断,又能在运行时验证数据合法性。下面是 ChatCrystal 摘要生成所用 schema 示例:
const SummarizeSchema = z.object({
title这方面,z.string.describe,key_conclusions: z.array).describe。code_snippets: z.array(
z.object({
language : z.string,code : z.string,description:z.string
})
).describe,tags : z.array).describe
});
"关系发现" 场景中加入了更多技巧,例如限定枚举值和数值范围,以避免拼写错误或无效数字:
const RelationElementSchema = z.object({
target_note_id:z.number.describe。relation_type:z.enum().describe,confidence:z.number.min.max
.describe,description:z.string
.describe
});
"schema" 定义"输出什么格式",而 system prompt 则约束"输出什么内容". 好的 system prompt 能明显提高整体质量。其实,
const SYSTEM_PROMPT =
你是一个技术对话分析专家。
擅长从 AI 编程助手的对话中提炼结构化知识。按理说,;
一句话定位角色与能力边界,让模型快速切换风格与深度。
``
const SYSTEM_PROMPT =
### 标题 用一句话概括对话主要主题。
遇到的问题、考虑过方案;实施要点:具体改动,说起来,可复用知识:通用经验
即便 z.describe 已提供字段说明,用自然语言展开可以进一步效果更好——相当于给模型“写作教程”。
const SYSTEM_PROMPT =
`## 注意事项
- 使用与对话相同语言撰写。- 如果记录标注 “中间省略 N 条消息”,仅基于可见内容。- 技术术语、函数名、包名保留原文,不翻译。`,
负面约束一样关键,它能让模型避免误解上下文。
`maxRetries` 参数让 SDK 自动重试不符合 schema 的响应,从而大幅减少手工循环代码。当验证失败时 SDK 会将错误反馈给模型。让其在下一轮尝试修正,更加优雅且节省 token 消耗。
| ChatCrystal 配置示例 | |||||
|---|---|---|---|---|---|
| 场景 | maxOutputTokens | maxRetries | 备注 | ||
| 摘要 | 800 | 5 | 一次性操作。可接受多次重试 | ||
| 关系发现 | 1200 | 1 | 自动触发任务,不宜阻塞队列 | ||
`generateObject` 确保了 **格式** 正确,但语义上的正确性仍需业务层确认。例如 “幻觉 ID” 或 “无意义置信度”。下面展示二次过滤流程:
// 获取原始关系数组
const { object : rawRelations } = await generateObject({
model这方面。getLanguageModel,output:'array',schema : RelationElementSchema,system : RELATIONSYSTEMPROMPT,prompt,maxRetries :1
});
// 二次业务校验 const filteredRelations = rawRelations .filter && rel.confidence>= MIN_CONFIDENCE) .slice;老实说,
js async function summarizeConversation{ const {object} = await generateObject({ model这方面。getLanguageModel,schema:SimplifySchema,system:SYSTEM_PROMPT,prompt : transcript,maxOutputTokens :800,maxRetries :5 });
// 后处理统一小写标签及去除空字符串 return { ...object,tags:Object.keys=>{acc=true;return acc},{}))。raw_response :JSON.stringify };}
js // 请求上下文已包含新笔记 & 已有笔记列表
const {object : rawRelations} = await generateObject({ 从model来看。getLanguageModel,output:'array',// 顶层期望数组而非对象 schema : RelationElementSchema,system : RELATIONSYSTEMPROMPT,prompt,maxOutputTokens :1200,maxRetries :1 // 如失败直接报错避免阻塞队列 });
| # | AWS | Azure | GCP | OpenAI | Claude …, | ||||
|---|---|---|---|---|---|
| ① | Tighten format constraints via Zod + `.describe`. | ||||
| ② | Create a concise system role message. | ||||
| ③ | Add natural‑language field instructions in system message. | ||||
| ④ | |||||
| ⑤ | |||||
👀 开源社区讨论链接 ↪️ github.com/.../issue/...>
• Ollama vs OpenAI vs Claude 摘要横评 — 对比不同厂商在 structured output 上表现差异。
• Vercel AI SDK 官方文档 — generateObject,ai,zod。retry policy.
• 项目地址:https://github.com/ZengLiangYi/chat-crystal
• 有疑问欢迎在 GitHub Issues 或私信交流,很乐意解答。
©2026 ChatCrystal Team · All Rights Reserved.)
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback