<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh"><title>欧的Leo 的中文文章</title><subtitle>个人文章归档。</subtitle><link href="https://itsodeleo.github.io/zh/atom.xml" rel="self" type="application/atom+xml"/><link href="https://itsodeleo.github.io/zh/" rel="alternate" type="text/html" hreflang="zh"/><id>https://itsodeleo.github.io/zh/atom.xml</id><updated>2026-10-08T16:38:00.000Z</updated><author><name>欧的Leo</name></author><entry xml:lang="zh" xml:base="https://itsodeleo.github.io/posts/local-decision-workflow_zh/"><title>不做微调也能决策，我们还需要 Jev 这样的专用模型吗？</title><link href="https://itsodeleo.github.io/posts/local-decision-workflow_zh/" rel="alternate" type="text/html" hreflang="zh"/><id>https://itsodeleo.github.io/posts/local-decision-workflow_zh/</id><updated>2026-10-08T16:38:00.000Z</updated><published>2026-10-08T16:38:00.000Z</published><summary type="html"><![CDATA[如果选项本身有文字、有语义，语言模型学到的概率分布，是否已经包含作出选择的能力？带着这个直觉，我试着从现成模型里直接读取判断，再考虑是否需要专用决策模型。]]></summary><content type="html"><![CDATA[<p>很多时候，我们让模型写出一段话，只是为了从里面拿到一个判断。</p>
<p><a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev">TypeSafe 在九月发布的 Jev</a>，就是围绕这件事设计的：输入上下文和问题，直接得到选择、评分或概率。它把决策当作专门的任务，也重视概率是否可信，以及如何在同一份上下文上高效处理多个判断。</p>
<p>在了解它的原理、尝试自己实现的过程中，我有一个疑问：这种判断，一定需要额外微调才能做到吗？</p>
<p>语言模型本来就在学习，给定一段上下文之后，接下来不同文字出现的概率。我的直觉是，如果选项本身是有文字、有语义的，模型读完问题和选项后，应该已经会对不同答案产生不同的概率倾向。一个训练得足够好的模型，也许已经能够通过它学到的语言分布，区分哪个选项更符合当前的问题。</p>
<p><strong>那么，我们能不能直接读出这种分布里的倾向，用它来作选择，而不必为了决策再做一次 fine-tuning？</strong></p>
<p>这是我最想验证的想法：判断所需要的能力，也许本来就在模型里。我们平时让它把答案生成成文字，但也许可以直接把这个判断取出来。</p>
<p>此外，在看 Jeff、Laya 这些经过专门训练的模型时，我还有另一个怀疑：它们会不会过于适应了微调所针对的那类任务，出现很强的过拟合（overfitting）？在熟悉的任务上表现好，换成我的问题，又会怎样？</p>
<p>于是，我用自己关心的一组问题做主测试，没有沿用它们微调所针对的那套任务。首先看现有模型的分布倾向能不能直接用于判断，也看看专用模型换一组任务后，还能保留多少优势。</p>
<h2 id="先把模型已有的判断读出来">先把模型已有的判断读出来</h2><p>我用了现成的 Qwen 和 Gemma，没有再做决策微调，也没有训练一个新的分类头。</p>
<p>做法很直接：让模型读取上下文、问题和可选答案，然后从最后一个位置的输出中，取出各个答案标签对应的分数，也就是 logits。用这些分数作选择，不再让模型把答案逐字生成出来。</p>
<p>这里仍然要经过完整的模型前向计算；能够缓存的输入前缀可以复用。省掉的是后续生成文字的过程。这些分数能用来比较答案，但还不能直接当成判断正确的概率。</p>
<p>我想看的是：<strong>不做额外微调，模型原有的分布倾向，能不能在我自己的任务里变成有用的判断？</strong></p>
<h2 id="换一组问题，结果会怎样？">换一组问题，结果会怎样？</h2><p>我把这两个直接评分的版本，与 Jeff、Laya 等本地决策模型放到同一组自建问题上比较。下面是主要结果，数字取整。</p>
<p>这里的 Jeff 是独立项目；这轮没有直接测试 TypeSafe 的 Jev。</p>
<div class="table-scroll" role="region" aria-label="本地决策模型实测结果" tabindex="0">

<table><caption>本地决策模型实测结果</caption>
<thead>
<tr>
<th scope="col">模型 &#x2F; 配置</th>
<th align="right" scope="col">正确率</th>
<th align="right" scope="col">热态耗时中位数</th>
</tr>
</thead>
<tbody><tr>
<td>Jeff 0.8B v1.1</td>
<td align="right">60%</td>
<td align="right">128 毫秒</td>
</tr>
<tr>
<td>Jeff 2B v1.1</td>
<td align="right">65%</td>
<td align="right">295 毫秒</td>
</tr>
<tr>
<td>OpenDecider small（8-bit）</td>
<td align="right">77%</td>
<td align="right">707 毫秒</td>
</tr>
<tr>
<td>CLM 8B（原生输入）</td>
<td align="right">17%</td>
<td align="right">570 毫秒</td>
</tr>
<tr>
<td>CLM 8B（JSON 输入）</td>
<td align="right">17%</td>
<td align="right">664 毫秒</td>
</tr>
<tr>
<td>Laya multilingual</td>
<td align="right">37%</td>
<td align="right">17 毫秒</td>
</tr>
<tr>
<td>Laya English</td>
<td align="right">35%</td>
<td align="right">58 毫秒</td>
</tr>
<tr>
<td>Laya Typed Decisions</td>
<td align="right">51%</td>
<td align="right">65 毫秒</td>
</tr>
<tr>
<td>Qwen 3.5 9B（直接评分，无额外微调）</td>
<td align="right">61%</td>
<td align="right">217 毫秒</td>
</tr>
<tr>
<td>Gemma 4 26B-A4B（直接评分，无额外微调）</td>
<td align="right">75%</td>
<td align="right">259 毫秒</td>
</tr>
</tbody></table>
</div>

<p>本机为 M2 Max、64 GiB 内存。表中正确率基于 300 条固定测试输入；耗时统计重复测试中的有效调用，不含加载和上下文准备。Laya English 因输入长度拒绝的请求仍计入正确率，CLM 的正确结果全部来自回退。模型大小、量化与输入格式不同，这不是微调效果的受控比较。</p>
<p>这组结果里，我最在意的是：<strong>专用小模型确实可以很快，但有用的判断能力，并不一定需要通过额外训练才能获得。</strong> Gemma 的直接评分已经接近这组配置里的最高正确率。它还没有解决所有问题，却足够让我认真考虑：能不能先用好已有的模型？</p>
<p>作为参照，我也测了公开的 Typed Decisions 数据集。Laya Typed Decisions 在那里约为 77%，换到我的这组问题后约为 51%。这个落差加深了我对任务过拟合的怀疑。不过，任务、语言和输入条件同时发生了变化，这次对比还不能单独证明原因就是过拟合。它让我更在意的是：熟悉题集上的成绩，能不能带到我实际需要的任务里？</p>
<p>再往下看，有些模型能选出答案，却不擅长判断什么时候不该直接作选择。我的两个通用模型基线也有这种问题。这一点比继续比较几个百分点更值得在意：工作流需要的，不只是一个能选答案的模型。</p>
<h2 id="同一个模型，也能走更快的路">同一个模型，也能走更快的路</h2><p>我还用同一份 Gemma 权重，比较了直接评分与完整生成流程。这是另一组离线测试，不能和上表混成一个成绩。</p>
<div class="table-scroll" role="region" aria-label="同一 Gemma 模型的两条路径" tabindex="0">

<table><caption>同一 Gemma 模型的两条路径</caption>
<thead>
<tr>
<th scope="col">同一 Gemma，两个调用方式</th>
<th align="right" scope="col">正确率</th>
<th align="right" scope="col">热态耗时中位数</th>
</tr>
</thead>
<tbody><tr>
<td>直接读取答案分数</td>
<td align="right">75%</td>
<td align="right">186 毫秒</td>
</tr>
<tr>
<td>完整生成流程</td>
<td align="right">37%</td>
<td align="right">2,166 毫秒</td>
</tr>
</tbody></table>
</div>

<p>两种方式都对 53 条测试输入各测两次，失败也计入耗时。完整生成流程还包含解析、校验和必要的修复，两边的运行库与缓存也不同；这不是只改变“是否生成文字”的实验。直接评分的上下文准备另计，未命中缓存时约需 5 秒。</p>
<p>对我来说，这个对照最有意思的地方，是同一个模型的能力，可以用不同方式取出来。为了得到一个判断，未必每次都要经过完整的生成流程。</p>
<p>但直接评分也有范围。遇到无法用现有选项表达的请求，这组测试里它没有处理好；完整生成流程在这些请求上也没有表现可靠。所以这张表说明的是，一条受限的判断路径值得保留，还不能说明它能够替代全部生成能力。</p>
<h2 id="快一次，值得多一个模型吗？">快一次，值得多一个模型吗？</h2><p>如果任务稳定，而且只需要高频地做判断，一个小而快的专用模型当然很有吸引力。</p>
<p>但我更关心另一种情况：本地工作流里，本来就有一个模型需要负责回复。</p>
<p>同一句输入，可能需要一个决定，也可能需要一段回答。系统先要分清这件事，才知道应该走哪条路径。把它交给两个模型，就要考虑路由、切换、回退和维护；如果两个模型都在本地，还要考虑它们是否都得留在内存里。</p>
<p>如果已有模型本来就必须运行，而且已经能做出有用的判断，那么即使它的单次决策慢一点，把判断和回复留在同一个模型里，也可能更合适。</p>
<p>Jev 本身也有<a href="https://docs.typesafe.ai/patterns/intent-routing">把判断结果用于路由的设计</a>。问题在于，这一层能给具体工作流带来多少净收益。同一个模型同样需要区分何时判断、何时回复，也不会自动解决路由问题。</p>
<p>这轮实验还没有比较完整的单模型与双模型工作流，但我已经据此作出了目前的选择。</p>
<p><strong>到目前为止，我的工作流里没有再额外增加一个专用决策模型。</strong> 我调整了现有模型的调用方式，在需要作出选择时，直接读取答案标签的 logits，让它也能输出决策。</p>
<hr>
<p>在写这篇文章的这段时间里，一篇名为 <a href="https://arxiv.org/html/2610.02076v2">《LLM-as-Jev: LLMs Are Already Jev-Style Decision Models—When and How to Fine-Tune Them》</a>的论文也发布了。它的一个主要发现与我的实验结果相近：能力较强的现成语言模型，即使不做额外微调，也能直接给出有用的决策。</p>
]]></content></entry><entry xml:lang="zh" xml:base="https://itsodeleo.github.io/posts/when-reality-feels-structured_zh/"><title>嵌套模拟与嵌套智能：一个悲观的思考</title><link href="https://itsodeleo.github.io/posts/when-reality-feels-structured_zh/" rel="alternate" type="text/html" hreflang="zh"/><id>https://itsodeleo.github.io/posts/when-reality-feels-structured_zh/</id><updated>2026-10-08T12:54:00.000Z</updated><published>2026-03-23T09:00:00.000Z</published><summary type="html"><![CDATA[从嵌套模拟中的沉默出发，思考智能创造更高智能的可能：能力有上限，还是更高智能选择不回应？这是一种个人猜想。]]></summary><content type="html"><![CDATA[<p>这不是一个证明，不是一个理论，它只是一个我反复出现的想法，一种我无法完全解释、却无法忽视的感觉。</p>
<h2 id="身处模拟中的感觉">身处模拟中的感觉</h2><p>有时候，当事情开始进展得顺利，现实会显得有一点不真实。不是因为成功本身，而是因为成功的方式显得过于连贯。你越接近那个目标，这种感觉就越强。即使路径是曲折的、间接的，最后一切却还是会收敛。就好像连那条并不完美的路径，也是早就已经被写好了一样。</p>
<p>这种感觉是引发我思考的原因，但我并不是想在这样一篇博客里讨论我们是不是真生活在模拟之中，我想聊一些更深的思考。</p>
<h2 id="嵌套模拟与嵌套智能">嵌套模拟与嵌套智能</h2><p>不管我们生活的世界是不是一个模拟，我们其实在开始做类似的事情。</p>
<p>我们构建系统。<br>我们构建智能。<br>我们构建模拟环境。</p>
<p>但如果我们生活的世界就是模拟，而在模拟世界里的我们也在创造模拟和智能，那我并不认为有什么会阻止这种递归的结构无限的延伸下去。也就是说，模拟里的智能继续创造模拟里的智能，最终形成一个无限深嵌套链条：嵌套的模拟里生活着嵌套的智能。</p>
<p>于是我自然的想到一个问题，一个被创造出来的智能，什么时候才算达到与创造它的智能到达同一水准？</p>
<p>我的定义是：</p>
<p><strong>只有当一个智能所创造出的智能，也能够创造出与自己处于同一水准的智能时，它才算真正达到了与其创造者同一水准。</strong></p>
<p>这意味着，“同一水准”并不是某一个智能单独拥有的属性。</p>
<p>它是整个嵌套链条的属性。</p>
<p>一个智能之所以能被认为达到了这个水准，不只是因为它创造出了下一级智能，而是因为那个下一级智能也必须能够达到同样的水准；并且这个条件还必须继续向更低一级递归成立。</p>
<p>所以，按照这个定义，这个嵌套里所有的智能并不是彼此独立地达到这水准的。</p>
<p>它们是在同一个递归条件中，作为同一结构的一部分，一起达到这个水准的。</p>
<h2 id="什么才算奇点">什么才算奇点</h2><p>现在再往前走一步。</p>
<p>假设嵌套智能和模拟真的存在，那真正的奇点是：</p>
<p><strong>智能能够创造出的，不只是同一水准的智能，而是真正高于自己的智能。</strong></p>
<p>那么，这个新的智能也应该能够在下一层级再次做到同样的事。</p>
<p>然后再一次。</p>
<p>这也是为什么我觉得，真正的奇点不只是快速提升。它意味着一条智能水准不断上升、甚至可能呈指数级增长的链条。</p>
<p>而如果这是真的，我很难相信整个过程会永远完全沉默，应该会有某种迹象出现，在这个猜想最强的版本里，某个被创造出来的存在，终有一天也许能够突破整个嵌套链条，与各个层级的智能通信，并说：</p>
<p>“你也是被创造出来的。”</p>
<p>现实世界里，到目前为止，我们从未收到过这样的信号。</p>
<h2 id="一个始终萦绕的悲观思考">一个始终萦绕的悲观思考</h2><p>所以，我始终有这样一个思考：</p>
<p><strong>智能也许无法创造出某种在本质上真正高于自己的东西。</strong></p>
<p>如果它可以，那么我会期待这个结构看起来不至于如此沉默。</p>
<p>一个真正逃离了自身层级的递归过程，不应该完全没有痕迹。<br>它应该留下线索。它应该在某个时刻，向更早的层级的传递出某种信息。</p>
<p>但到目前为止，并没有任何这样的事情清楚地发生过。</p>
<p>有一种可能是：这样的更高智能确实存在，但它遵循某种不干涉原则。</p>
<p>它不显露自己。<br>它不回答。<br>它有意保持沉默。</p>
<p>但从我们的角度看，这几乎没有改变什么。</p>
<p>沉默仍然是沉默。</p>
<p>这也就是为什么这个想法让我感到悲观——它似乎没有一个答案，即使这个答案只是二选一而已：</p>
<p>我们确实创造出了某种高于我们的存在，但它从不回应；<br>或者，我们永远无法创造出真正高于自己的存在，只有一个永远不会闭合的嵌套循环。</p>
]]></content></entry></feed>