文章提出,在标签分类和文档字段抽取中,可让模型选择已有候选项或输入片段,减少自由生成带来的格式与取值偏差。这类指针式方法限制了答案范围,但不等于保证选择正确。
你已经把答案给了 LLM。那它为什么还要从头写一遍?
把一张客服工单和四个标签发给模型,问它哪个标签最合适。它会逐个 token 写回 {"label": "billing"}。可“billing”这个词从一开始就在你的 prompt 里。
信息提取也是如此。发票号码就在 PDF 里,模型却要把它重新敲一遍给你。通常,它能敲对。
LLM 一次读完你的 prompt,再逐个 token 写出答案,每生成一个 token,都要再跑一遍模型。这也是输出比输入贵的原因:在 Anthropic 的价目表上,Sonnet 5.5 每百万输入 token 收费 2 美元,每百万输出 token 收费 10 美元。
对于一个简短的标签,成本并不是真正的问题。问题在于,写作者什么都能写:“Billing”、“billing_dispute”、“Sure! The label is billing.”。于是你得加上 parser、重试、schema。JSON mode 能帮上一些忙,但正如一篇指南所说,它是“对格式的约束,不是对正确性的保证”。
指针的工作方式不同。它只读一遍输入,然后给已经存在的内容打分:可以是你提供的每个标签,也可以是文档中每一个可能的文本片段。答案只能来自输入。

这并不是什么新思路。Pointer Networks(2015)就会选取输入中的元素作为输出。SQuAD(2016)把每个答案定义为“对应阅读段落中的一段文本”。BERT 的做法是给每个 token 打分,判断它作为答案起点或终点的可能性。直到今天,命名实体识别仍然会返回起始和结束偏移量。
ScaleDown 于 10 月 13 日推出了四个小型任务模型,称为 Constrained Decoding Models。他们与 LangChain 合作发布的文章这样概括这个想法:“CDM 针对单一任务训练,只返回该任务允许的答案,比如你提供的列表中的一个标签,或输入中的文本片段。”
根据 ScaleDown 的文档:
Classify 按每个标签的评分标准为你的文本打分,返回 top_label,以及总和为 1.0 的各项分数。它负责指向答案。
Extract 返回“从输入中提取的原样文本片段”,同时提供置信度和起始、结束偏移量。它负责指向答案。
Summarize 做的是“流畅的改写,而不是挑选原文中的句子”。它负责写作。
Compress 用来压缩长上下文。文档没有说明它是挑选原文,还是重新改写。
所以,这个思路只适用于四个模型中的两个。关于命名还要说明一点:“constrained decoding”通常指屏蔽常规 LLM 的部分 token,让它无法违反你的 schema,比如 Outlines、XGrammar 的做法。在这里,它是一个产品名称。
速度快当然好。更重要的是,指向原文的答案自带证据。如果 Extract 说发票号码位于第 8 到第 17 个字符,你就可以从自己的字符串中截取这一段,核对结果。而一个写出来的答案,即使有两位数字被调换,看起来也和正确答案没什么区别。

放在主 LLM 周围,辅助它工作。小模型处理日常任务,通用模型负责那些确实需要写作的事情。

循环检测来自 LangChain 的示例:当 Classify 给“looping”的评分超过 0.8 时,就停止运行。但这只有在 0.8 这个分数对你的数据有实际意义时才有效。ScaleDown 没有公布校准数据,而且 Classify“总会返回一个胜出标签,即使模型并不确定”。因此,要加上一个 other 标签,并用几百条你自己的样本进行评估。
TypeSafe 的 Jev、OpenAI 的 Decisions API 和 Cloudflare 的 Clef 都能回答有明确类型的问题,并给出概率。这对应的是 Classify 的那一半。它们都没有在文档中说明支持指向文本片段。

答案必须存在于输入中。“这张发票上一共有多少件商品?”需要做加法。指针没有可以指向的答案。
标签合法,不代表标签正确。它也可能指错。
Summarize 会写作,Compress 则没有说明。不要以为“无法凭空编造文本”这一特性也适用于它们。
那些亮眼的数字来自 ScaleDown 自己。推文声称速度快 200 倍、成本低 467 倍。ScaleDown 自己的基准测试文档则声称,准确率提高 8% 到 19.5%,速度提高到 2.2 倍至 13.9 倍。这两组说法目前都还没有经过独立验证。
你的文本会离开自己的服务器。这是一项托管 API 服务。
想深入了解?可以阅读那篇带有交互示例的详细博客:smiit.in/writing/answer-is-in-the-input
Jev:不会说话的 AI,以及为什么这恰恰是它的价值所在
你的 AI 编程会话,每多发一条消息就会更贵。原因在这里。
你的哪些 LLM 调用,其实是在做选择题?欢迎在评论区告诉我。
如果需要进一步处理,你可以考虑屏蔽此人和/或举报滥用行为。