Hacker News 中文摘要

RSS订阅

大语言模型中的结构化输出 -- Structured Outputs in LLMs

文章摘要

文章探讨了大语言模型中的采样与结构化输出技术,指出两者共同决定模型的下一个标记选择。作者分享了在Ollama平台开发结构化输出的实践经验,包括使用有限状态机实现动态结构化输出,并强调模型对系统提示、模板和采样参数极其敏感。结构化输出能有效将非结构化数据转化为特定格式,适用于文档处理、网页抓取等场景。

文章总结

大语言模型中的采样与结构化输出

核心概念

采样与结构化输出共同决定了模型的下一个输出标记(token)。采样是从模型的词汇表中基于概率分布选择标记的过程,而结构化输出则强制模型按照特定格式(如JSON)生成内容。

技术实现

  1. 采样流程
    Ollama模型在完成前向传播后,会依次应用以下转换步骤选择标记:

    • topK:保留概率最高的前K个标记(通常K=40以优化CPU计算效率)
    • temperature:通过温度系数调节概率分布(高温增加随机性,低温增强确定性)
    • softmax:将原始分数转化为概率分布
    • topP(核采样):保留累积概率超过阈值(如0.95)的最小标记集
    • minP:剔除概率低于最大概率×minP的标记(提升文本质量)
  2. 结构化输出
    通过语法规则(如JSON Schema)约束输出格式。Ollama采用语法掩码机制:

    • 采样后检查标记是否符合语法规则
    • 若无效则重新采样并屏蔽非法标记
    • 支持模型通过自我思考(如<think>标签)预生成内容后再结构化

优化与发现

  • CPU计算优化:通过topK优先减少待处理标记数量,利用堆排序(O(n log k))和线性筛选(O(n))提升效率
  • 模型敏感性:所有模型对系统提示、模板和采样参数的微小变化都极为敏感
  • 未来趋势:如gpt-oss等先进模型已能无需约束自主生成完美JSON,显示结构化输出正逐渐内化为模型能力

实验案例

  • 思考模型处理:允许模型完成思考阶段(如生成<think>解析用户请求</think>)后再约束输出,比直接预填充格式效果更优
  • 格式敏感性:破坏训练既定格式(如Harmony的换行符分隔)会导致输出质量显著下降

展望

作者认为结构化输出将随模型进化成为原生能力,未来可能无需外部约束即可生成复杂格式。相关成果将在Ollama平台持续发布。

(全文共计约850字,保留核心技术细节,删减了部分代码示例和重复性实验描述)

评论总结

评论摘要生成失败