TypeLLM输出类型全解析:7种字段类型实现零幻觉JSON Schema约束输出

发布时间:2026/10/23 5:53:42
TypeLLM输出类型全解析:7种字段类型实现零幻觉JSON Schema约束输出 【免费下载链接】TypeLLMTypeLLM: LLMs with type-safe generation项目地址https://gitcode.com/gh_mirrors/ty/TypeLLM点击查看免费下载TypeLLM 是一个让大语言模型按类型说话的开源框架它不改模型架构和权重通过 JSON Schema 约束让 LLM 输出零幻觉的结构化结果。本文完整解析 TypeLLM 支持的 7 种字段类型string、integer、number、boolean、enum 选择、object、array带你快速上手类型安全生成type-safe generation告别模型说一套、程序收到另一套的解析噩梦。为什么需要类型安全的 LLM 输出普通 LLM 输出的是自由文本下游程序要靠正则、prompt 技巧和后处理来猜出结构化数据稍有不慎就得到格式错误、数值越界或根本不存在的枚举值。TypeLLM 的思路是把类型直接交给解码器。每个字段由 JSON Schema 片段描述模型在生成时就被限制在合法候选内——枚举值只能从列表里选、布尔只能是 true/false、数值按有界十进制逐位解码。配合 SGLang 的共享前缀 KV 缓存多个字段一次调用批量完成token 成本极低。核心卖点一览✅无越界幻觉选择类字段永远落在允许的候选值内⚡输出 token 开销可忽略枚举/布尔字段各只花 1 个输出 token依赖感知执行depends_on声明依赖图独立字段并行运行可选思考模式需要推理的字段可先想后答thinking: auto自动选档️图片输入支持视觉语言模型还能返回图像中目标的位置框7 种字段类型速览TypeLLM 的 7 种输出字段类型及返回值对照如下来源README.md#L193-L207字段类型Schema 写法返回的 Python 值文本{type: string}str整数{type: integer}int数值{type: number}float布尔{type: boolean}bool枚举选择{type: string, enum: [meal, travel]}候选类型之一str/int/float对象{type: object, properties: {...}}dict数组{type: array, items: {...}}list1️⃣ string自由文本与枚举选择string是最灵活的类型分两种用法不带enum自由文本生成默认最多 128 token可用text_max_tokens放宽带enum枚举选择候选 2~26 个上限见 typellm/schema.py#L12 的MAX_ENUM_CHOICES答案必然是其中之一。questions { expense_type: { type: string, enum: [meal, travel, equipment], instructions: What type of expense is this?, }, } # 结果必然是 meal、travel 或 equipment绝无第四种枚举还支持choices写法为每个候选附加描述帮助模型理解含义。想要答案有多确定给该字段加return_probabilities: True即可拿到每个候选的概率和confidence置信度。2️⃣ integer 与 number有界数值解码不需要把 0~999999 全列成枚举。integer返回int、number返回float模型用有界十进制逐位解码数字默认最多 32 位numeric_max_digits可调。total: {type: number, instructions: Extract the total amount in GBP.} # {total: 324.5}进阶技巧给number字段加levels带顺序标签的等级还能得到评分Score字段——返回各等级概率加权后的分数如1.1表示介于有替代方案和完全阻塞之间。3️⃣ boolean是/否判断boolean只输出True或False适合是否符合政策是否已付款这类二值判断。同样支持return_probabilities拿到两者的概率分布配合temperature还可做有随机性的采样。4️⃣ object 与 array嵌套结构化数据object把多个带类型的属性聚合成一个值属性内部照样可用enum、thinking、depends_onarray返回不定数量的同构条目每条最多 50 个支持minItems/maxItems约束条目可以是枚举值也可以是对象。employees: { type: array, items: {type: object, properties: { name: {type: string}, role: {type: string}, }}, instructions: Return all employees., } # {employees: [{name: Ada, role: CTO}, ...]}输入太长放不下一次调用时用continue_from把上一段已得的条目传进去数组会接着长、永不改写已有条目。5️⃣ 组合拳nullable 与字段依赖任意类型加null如[number, null]即可表达可能缺失没有值时返回Nonedepends_on让字段引用上游结果形成依赖图——先跑system再并行跑severity和deployment_related最后跑依赖二者的rollbackwhen条件字段依赖字段的取值满足条件才执行否则跳过并记入response.skipped还支持按confidence判断答案够不够确定。字段编译的完整逻辑见 typellm/schema.pyDecision/ArrayField数据类typellm/schema.py#L24 起。实战一张皱巴巴的收据14 个类型化字段官方示例 examples/receipt/receipt.py 把一张真实拍摄的餐厅收据照片喂给模型一次generate()调用同时读出string三行商品名含原样保留的拼写错误integer行数、数量number小计、折扣、总额、现金、找零boolean是否现金支付通过depends_on由前序字段计算出的派生字段折扣百分比、找零是否正确、一句话报销备注在 Qwen3.8-27B 上不开思考 6.6 秒匹配 11/13开思考 27.7 秒匹配 12/13所有数值都精确命中。完整输出见 examples/receipt/result.json 与 examples/receipt/result_thinking.json运行说明在 examples/receipt/README.md。精度验证JevBench 231 题基准测试零幻觉只是底线答得准才是本事。TypeLLM 在 231 道公开 JevBench 任务上的成绩不开思考 195/231开思考228/23198.70%且未做任何微调。方法与配置细节见 evals/jevbench/METHOD.md逐题答案见 evals/jevbench/README.md。快速上手pip install -U typellmfrom typellm import TypeLLMClient client TypeLLMClient(http://127.0.0.1:30000, modelQwen/Qwen3.8-27B) response client.generate( contextReceipt from Hilton London. Total: £324.50, questions{ merchant: {type: string, instructions: Return only the merchant name.}, total: {type: number, instructions: Extract the total amount in GBP.}, expense_type: {type: string, enum: [meal, travel, equipment]}, reimbursable: {type: boolean}, }, ) print(response.result) # {merchant: Hilton London, total: 324.5, expense_type: travel, reimbursable: True}客户端实现位于 typellm/runtime.py一次性请求可用便捷函数run_schema。行为测试覆盖在 tests/ 目录其中 tests/test_structured.py 专门验证 object/array 等结构化类型。选型建议7 种字段类型怎么选你的场景推荐字段类型分类打标签、路由工单stringenum加choices描述更稳金额、数量、百分比number/integer合规判断、是否通过boolean加return_probabilities摘要、备注、自由描述string纯文本一组相关属性打包object不定数量条目技能列表、员工清单array可能缺失的字段任意类型 null一句话总结能枚举就枚举能布尔就布尔数值交给 integer/number结构用 object/array 打包——把每个字段都钉死在类型里TypeLLM 的解码器就会把幻觉挡在门外。参考资料项目总览与更新日志README.md类型定义与依赖图执行typellm/schema.py、typellm/runtime.py收据实战示例examples/receipt/receipt.py结构化类型测试tests/test_structured.pyJevBench 基准与逐题答案evals/jevbench/赞分享【免费下载链接】TypeLLMTypeLLM: LLMs with type-safe generation项目地址https://gitcode.com/gh_mirrors/ty/TypeLLM点击查看免费下载相关推荐TypeChat Schema Engineering 实战指南用 TypeScript 类型约束 LLM 输出并抑制幻觉TypeChat Schema Engineering 实战指南用 TypeScript 类型约束 LLM 输出并抑制幻觉 TypeChat 以类型为核心大模型AI 应用后端mistral.rs JSON Schema 约束生成实战用 Rust 客户端实现类型化结构化输出mistral.rs JSON Schema 约束生成实战用 Rust 客户端实现类型化结构化输出 在需要让大模型输出严格符合某种数据格式的场景如地址解析、推理引擎模型推理服务AI Agent多模态TypeLLM源码解析单token分类选择与受限数字解码如何实现类型安全输出TypeLLM源码解析单token分类选择与受限数字解码如何实现类型安全输出 TypeLLM 是一个让大语言模型LLM产出 类型安全输出type saf上一篇探秘HuJSON高效、易用的JSON解析库下一篇探索MAME4iOS复古游戏爱好者的移动乐园创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询