专注打磨,推动本地模型

Armin Ronacher 新闻

摘要

本文批评了当前用于编程助手的本地AI模型现状,认为虽然可运行性有所改善,但由于缺少工具参数流式传输等功能以及推理引擎间的过度碎片化,用户体验大打折扣,远不如使用托管API那般精致。

<p>我真心希望本地模型能够发挥作用。</p> <p>我希望它们能实实在在地发挥作用——当我打开编程助手,选择一个本地模型,并得到足够有竞争力的体验,以至于我不会在五分钟后立刻切换回托管API。我有很多理由希望如此,但坦白说,最重要的是:我们在这方面还处于非常早期的阶段,而将所有实验锁定在普通开发者之外,这让我非常不安。</p> <p>令人沮丧的是,目前这仍然比应有的难度大得多,但原因与任务复杂性或模型质量关系不大。</p> <p>我们在本地推理方面有很多活动,这很好。我们有优秀的项目、快速的内核,人们在做出色的量化工作。很多聪明人在让这一切变得更好,但对于尝试在编程助手中使用本地模型的人来说,体验却比应有的更差。</p> <p>将API密钥输入<a href="https://pi.dev/">Pi</a>并使用托管模型是一个非常枯燥的操作。你选择提供商,粘贴密钥,然后就不用再考虑如何获取token了。而在本地做同样的事情,即使你有一台高端Mac和大量内存,体验也完全不同。你选择推理引擎,然后模型,然后量化,然后模板,然后上下文大小,然后你必须在栈的不同部分扔进去一堆JSON配置,然后你发现其中一个选择悄悄地让模型变差,或者某些东西根本不起作用。</p> <p>这就是我关注的差距。</p> <h2>可运行不等于完成</h2> <p>很多本地模型的工作致力于让模型可运行。这是必要的,但并不等同于让它们感觉完善。我给你们一个非常简单的例子来说明这个差距:工具参数流式传输。</p> <p>不管出于什么原因,大多数本地运行的东西都不支持工具参数流式传输。我无法完全解释原因,但其后果实际上非常显著。如果你不熟悉这些API的工作方式,最简单的理解是它们在生成token时立即发出。对于文本来说这很简单,但对于工具调用来说,尽管completions API支持这一点,但通常没有这样做。因此,你只能等到模型完成整个工具调用的流式传输后才能看到对文件所做的编辑。</p> <p>这有很多坏处:</p> <ul> <li> <p><strong>死连接是奇怪的连接:</strong>本地模型很慢,所以如果你5分钟没有收到任何token,你无法判断是连接断开了还是只是没有输出。这意味着你需要将不活动超时增加到毫无意义的程度。</p> </li> <li> <p><strong>你看不到会发生什么:</strong>如果你比较亲力亲为,看不到系统在后台慢慢构思的bash调用意味着潜在的无效token,也意味着你无法及时中断它,直到为时已晚。</p> </li> <li> <p><strong>这根本不是最先进的。</strong>我们可以做得更好,并且应该追求最佳体验。工具参数流式传输与其他地方的token流式传输同样重要。</p> </li> </ul> <p>让模型吐出token不需要很长时间,但让体验从头到尾都很好确实需要更多的精力。</p> <h2>碎片化</h2> <p>本地栈在许多引擎和层面上碎片化。有llama.cpp、Ollama、LM Studio、MLX、Transformers、vLLM以及许多其他组件,具体取决于硬件和偏好。这些都是了不起的项目!问题不在于它们存在或数量那么多(尽管坦白说,我有一种强烈的旧Python打包即视感),问题在于,对于一个给定的模型,你得到的具体行为取决于一长串的小决策,而大多数用户没有精力去处理。</p> <p>聊天模板渲染是否完全正确?推理token的处理方式是否符合预期?工具调用格式是否正确翻译?上下文窗口是否真实?KV缓存对于编程助手是否实际工作?我从Hugging Face上选的量化模型对吗?你是否无意中因为模型与硬件不匹配而浪费了大量性能?流式使用在所有通道上是否正常?模型是否需要其之前的推理内容保留在助手消息中?编程助手是否为它正确设置?</p> <p>你还需要安装许多不同的东西,而不仅仅是你的编程助手。</p> <p>所有这些事情都很重要。它们非常重要。</p> <p>结果是人们尝试本地模型,得到的结果既不是对模型的公平评估,也不是精致的产品体验,这导致人们既否定本地模型,精力也分散到太多独立的努力中,而不是让一个努力从头到尾做得很好。</p> <p>这是一种建立信心的糟糕方式。</p> <h2>临界质量不足</h2> <p>与我们的总体“慢下来”口号一致,我想再次重申这个行业的发展速度有多快。</p> <p>每周都有新的模型和新的“感觉良好”的东西。注意力立即转移到让下一个东西运行起来,而不是让一个东西在一个框架中运行得非常好。我理解这种兴奋和多巴胺冲击,但这也意味着在任何一个模型、硬件、推理引擎、框架组合上积累的临界质量太少,以至于无法发现当整个栈围绕它构建时它能变得多好。</p> <p>托管模型提供商不会给你一堆权重然后让你自己解决剩下的问题,我们也需要为本地模型采用这种思路。我希望有人选择一个模型,将其与一个服务路径配对,直接集成到编程助手中。最初只针对一种硬件配置,然后扩展到更多。坚决地选一个赢家。如果工具调用失败,那就是产品bug,无论它在栈的哪个环节失败,都会被修复。如果模型的推理流格式错误,那是产品bug。如果延迟远高于应有水平,那是产品bug。我们需要开始将这种心态应用于本地模型。</p> <p>而且不是针对所有模型!这就是关键。让我们选择一个赢家,全力打磨它。学习让这一个配置变得优秀需要什么,然后将这些经验应用到下一个配置。</p> <h2>DS4赌注</h2> <p>这就是为什么我对<a href="https://github.com/antirez/ds4">ds4.c</a>感到兴奋。它是Salvatore Sanfilippo特意为Mac(128GB+ RAM)上的DeepSeek V4 Flash打造的狭窄推理引擎。它不是通用的GGUF运行器,也不试图成为框架。它是一个模型特定的原生引擎,带有Metal路径、模型特定加载、提示渲染、KV处理、服务器API粘合代码和测试。</p> <p>DeepSeek V4 Flash是这种实验的良好候选,因为它具有本地使用中不寻常的属性组合。它足够大,能够感觉与许多较小的密集模型有显著不同,但又足够稀疏,活跃参数数量使其可以运行。它有非常大的上下文窗口。由于ds4.c只针对Mac和Metal,它可以将KV缓存移到SSD中,这极大地帮助了编程助手预期的工作负载。</p> <p>要运行<code>ds4.c</code>,你不需要MLX、Ollama或任何其他东西。它是一整套包。</p> <h2>将其嵌入Pi</h2> <p>这促使我构建了<a href="https://github.com/mitsuhiko/pi-ds4">pi-ds4</a>,这是一个Pi扩展,用于直接嵌入w</p>
查看原文
查看缓存全文

缓存时间: 2026/05/16 03:28

# 专注打磨本地模型 来源:https://lucumr.pocoo.org/2026/5/8/local-models/ 写于2026年5月8日 我真的很、真的很想让本地模型好用起来。 我希望它们在非常实际的意义上好用:我可以打开我的编码代理,选一个本地模型,得到足够有竞争力的体验,这样我就不会五分钟后立刻切回托管的API。我想要这个的原因有很多,但最直白地讲,是因为我们在这件事上还处于非常早期的阶段,而把所有实验都锁在普通开发者之外的想法让我非常不安。 令人沮丧的是,现在这件事仍然比它应该的要难得多,但原因与任务复杂度或模型质量关系不大。 我们在本地推理方面有大量的活动,这很棒。我们有好的项目、快的内核,人们在做很好的量化工作。很多非常聪明的人正在让这一切变得更好,然而,对于试图在编码代理中实现这一切的人来说,体验却远比它理应达到的更差。 把API密钥粘贴到Pi(https://pi.dev/)然后使用托管模型是一个非常无趣的操作。你选择提供商,粘贴密钥,然后就不用再操心如何获取token了。在本地做同样的事情,即使你有一台高配Mac且内存很大,也完全是另一种体验。你选择一个推理引擎,然后选一个模型,然后选量化方式,然后选模板,然后选上下文大小,然后你不得不把一堆JSON配置扔到栈的不同部分,接着你发现其中某个选择悄悄让模型变差了,或者某个东西完全无法工作。 这就是我关心的差距。 ## 能跑不等于完成 很多本地模型的工作优化目标是让模型能跑起来。这是必要的,但这和让它们给人完工的感觉不是一回事。我给你一个非常基本的例子来说明这个差距:工具参数流式输出。 不知为何,你在本地运行的大部分东西都不支持工具参数流式输出。我很难解释原因,但其后果实际上出奇地重要。如果你不熟悉这些API的工作方式,最简单的理解是它们会在token可用时立即发出。对于文本来说这很简单,但对于工具调用来说,通常并不这样处理,尽管补全API是支持的。结果就是,你只有在模型完成整个工具调用的流式输出后,才能看到对文件所做的编辑。 这很糟糕,原因有很多: - **连接断了是一种奇怪的连接:**本地模型很慢,所以如果你5分钟内没有收到任何token,你就无法判断是连接断了还是只是没有东西过来。这意味着你需要把非活动超时时间增加到毫无意义的程度。 - **你不会看到将要发生什么:**如果你比较亲力亲为,看不到系统在后台慢慢构思的bash命令意味着可能浪费token,也意味着你无法及时中断它,直到为时已晚。 - **这根本不是最先进的。**我们可以做得更好,而且我们应该力求拥有最好的体验。工具参数流式输出和其他地方的token流式输出同样重要。 让模型吐出token不需要很长时间,但要让端到端的体验变得出色,确实需要投入更多精力。 ## 碎片化 本地栈碎片化严重,涉及许多引擎和层。有llama.cpp、Ollama、LM Studio、MLX、Transformers、vLLM,以及许多其他取决于硬件和口味的组件。这些都是了不起的项目!问题不在于它们存在,也不在于数量众多(尽管坦白说,这让我想起了老式Python打包的糟糕感觉),问题在于,对于给定的模型,你获得的实际行为取决于一连串小的决策,而大多数用户根本没有精力去处理。 聊天模板渲染是否完全正确?推理token是否按预期方式处理?工具调用格式是否正确翻译?上下文窗口是否真实?KV缓存是否能真正用于编码代理?我从Hugging Face上选的量化模型是否正确?你是否因为模型与你的硬件不匹配而无意中损失了大量性能?流式使用是否在所有通道上正常工作?模型是否需要将其之前的推理内容保留在助手消息中?编码代理是否为其正确设置? 除了你的编码代理之外,你还需要安装许多不同的东西。 所有这些事情都很重要。非常重要。 结果是,人们尝试一个本地模型,得到的结果既不是对模型的公平评估,也不是精致的产品体验,这导致人们要么否定本地模型,要么精力分散到太多独立的努力中,而不是集中精力把一件事从头到尾做好。 这是一种建立信心的糟糕方式。 ## 缺乏临界质量 与我们“慢下来”的总体原则一致,我想再次强调这个行业的飞速发展。 每周都有新模型和新“vibeslopped”的东西。注意力立刻转移到让下一个东西跑起来,而不是让一个东西在一个框架里跑得非常好。我理解这种兴奋和多巴胺冲击,但这同时也意味着太少的人气积累在任何一个模型、硬件、推理引擎、框架组合上,去发现当整个栈都围绕它构建时,它能变得多好。 托管模型提供商不会给你一堆权重然后让你自己解决其余问题,对于本地模型我们也需要采用这种思路。我希望有人选择一个模型,将其与一个服务路径配对,直接嵌入到编码代理中。一开始只针对一种硬件配置,然后扩展到更多。坚定地选一个赢家。如果工具调用失败,那就是一个产品bug,无论它发生在栈的哪个位置,都要修复。如果模型的推理流格式错误,那就是一个产品bug。如果延迟比应该的要差得多,那就是一个产品bug。我们需要开始将这种心态应用到本地模型上。 而且不是针对每个模型!这就是重点。让我们选一个赢家,然后把它打磨到极致。学会让那个配置变好需要什么,然后将这些经验用到下一个配置上。 ## 押注DS4 这就是我对ds4.c(https://github.com/antirez/ds4)感到兴奋的原因。这是Salvatore Sanfilippo特意为DeepSeek V4 Flash设计的一个窄范围推理引擎,仅限128GB以上内存的Mac运行。它不是一个通用的GGUF运行器,也不是一个框架。它是一个模型特定的原生引擎,包含Metal路径、模型特定加载、提示渲染、KV处理、服务器API胶合代码和测试。 DeepSeek V4 Flash是这类实验的好候选,因为它具有一些对于本地使用来说不寻常的属性组合。它足够大,感觉上与许多较小的密集模型有显著不同,但又足够稀疏,使得活跃参数数量使其可以运行。它有一个非常大的上下文窗口。由于ds4.c只针对Mac和Metal,它可以将KV缓存移到SSD中,这极大地帮助了编码代理预期的工作负载。 要运行`ds4.c`,你不需要MLX、Ollama或任何其他东西。它是一个完整的包。 ## 嵌入Pi 这促使我构建了pi-ds4(https://github.com/mitsuhiko/pi-ds4),这是一个Pi扩展,将整个东西直接嵌入到Pi中。利用ds4本身,并在编码代理中大量自用,零配置。目标是回答这个问题:如果Pi将本地模型视为一等提供商,而不是一堆手动配置,那么本地模型体验能变得多好? 该扩展注册`ds4/deepseek-v4-flash`,按需编译并启动`ds4-server`,如果需要则下载并构建运行时,根据机器选择量化方式,在Pi使用期间保持租约,暴露日志,并通过看门狗在无客户端连接时关闭服务器。它现在甚至不给你旋钮,因为我想弄清楚如何自动设置旋钮。 这并不是要掩盖本地推理的复杂性。而是要将复杂性集中在一个可以改进的地方,因为我们需要沿着整个栈改进很多东西才能让它工作得更好。 我认为我们可以在缓存方面做得更好,如果大家齐心协力,可能还能获得一些性能提升。 ## 聚焦与学习 我想做的实验不是“本地模型能跑吗?”因为我们已经知道它能跑。我想知道的是,对于首先拥有高配Mac的人,我们能否尽可能接近托管提供商的易用性,并具备良好的工具调用性能:如何让缓存良好工作,如何改进在这些模型中暴露工具的方式,然后逐步扩展到更多的硬件配置和后续模型。 我也希望每个人都能用到这个。工程师需要锤子,而一把锁在另一个国家数据中心的订阅后面的锤子是不合格的。我知道一台能运行这个的Mac的价格本身也是天文数字,但我认为价格更有可能降下来。更糟的是,苹果目前由于内存短缺甚至不卖内存那么大的Mac Studio。所以是的,ds4.c最初将面向一小部分人。 但尽管如此,重要的是有一批人开始集中精力在一件事上,摆弄它,改进它,不被锁住,公开透明,最重要的是不受超大规模云服务商所提供内容的限制。 但如果你有合适的硬件并且关心本地代理,我很希望你在pi中尝试一下: ``` pi install https://github.com/mitsuhiko/pi-ds4 ``` 我希望这能成为一个有用的强制函数,真正打磨一个编码代理体验。但真正焦点应该是ds4.c本身(https://github.com/antirez/ds4)。 这篇条目标记为ai(https://lucumr.pocoo.org/tags/ai/)和thoughts(https://lucumr.pocoo.org/tags/thoughts/) 复制为(https://lucumr.pocoo.org/2026/5/8/local-models.md)/查看(https://lucumr.pocoo.org/2026/5/8/local-models.md)markdown

相似文章

现在运行本地模型已经很不错了

Hacker News Top

作者报告说,运行本地AI模型如今已经表现出色,最近发布的GPT-OSS和Gemma 4等模型使得在本地进行自主编码的准确率达到了前沿模型的大约75%,与几个月前相比有了显著提升。

本地模型只是故事的一半。我也想要本地的代理记忆

Reddit r/AI_Agents

文章认为,虽然本地 AI 模型易于获取,但真正的代理所有权需要本地、可检查的记忆系统,而非供应商控制的云存储。作者倡导使用 MemOS Local 和 Hermes Agent 等工具,在本地保留执行轨迹和习得技能,以获得更好的控制力和可调试性。

2026年中本地模型

Reddit r/LocalLLaMA

2026年中本地AI模型的技术概览,重点介绍开放权重模型如何通过混合专家模型和稀疏注意力机制的进步缩小了与前沿模型的差距,从而实现高效的本地推理。