ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

本地小模型的自由感,先从一张清楚的部署边界图开始

本地小模型的自由感,先从一张清楚的部署边界图开始

把手账交给本机上的模型处理,吸引人的地方很具体:断网时仍能工作,原始笔记可以留在自己的设备里。但“装了 Ollama”并不等于每次请求都在本机运行。选中的模型、客户端的回退逻辑和外部工具,都会改变数据去向。

本地和云端不能只靠界面判断

Ollama 在 2026 年 10 月 19 日宣布支持 Clef,并明确列出本地与云端两种运行方式。相同工具名之下,部署边界仍然需要逐项确认。发布说明

不要把下载文件大小、进程内存、统一内存占用和整机功耗混为一谈。模型权重之外还有 KV 缓存、运行时缓冲区与其他应用;首字延迟又受冷加载、上下文长度和硬件影响。没有设备、版本和原始记录,不能承诺“8GB 机器必定流畅”或“首字低于 100ms”。

图中绿色区域表示本地资料与模型文件,橙色路径表示远端服务。它是部署概念图,不是一次断网测试的结果。

给配置加一个会失败的检查

下面程序不发送请求,只检查教学配置是否声明了本地地址、是否禁用了云端回退。保存为 boundary.py 运行,无需模型或第三方包。

from urllib.parse import urlsplit import ipaddress def check(config): url = urlsplit(config["endpoint"]) if url.scheme != "http" or url.username or url.password: raise ValueError("仅接受无嵌入凭据的本机 HTTP 地址") try: local = ipaddress.ip_address(url.hostname).is_loopback except ValueError: local = url.hostname == "localhost" if not local or url.port != 11434 or url.path not in ("", "/"): raise ValueError("推理入口没有指向预期的本机服务") if config.get("cloud_fallback", True): raise ValueError("云端回退仍开启") return True good = {"endpoint": "http://127.0.0.1:11434", "cloud_fallback": False} assert check(good) for bad in [ {"endpoint": "https://example.com", "cloud_fallback": False}, {"endpoint": good["endpoint"], "cloud_fallback": True}, ]: try: check(bad) except ValueError: pass else: raise AssertionError("不安全配置未被拒绝") print("配置检查通过;尚未证明运行时无外连")

地址检查只是一道配置护栏。localhost 可以被系统重新解析;本机网关也可能转发到云端,因此不能靠这个函数证明数据没有离开电脑。运行时还要查看服务配置、所选模型、工具权限和网络连接,并在不含隐私的测试数据上验证断网行为。

一套小而可查的离线工作角

先下载所需模型与文档,再关闭云端功能,重新启动服务。Ollama 的 FAQ 提供本地模式与 OLLAMA_NO_CLOUD 配置,也说明服务默认绑定 127.0.0.1。实际使用时应确认启动日志,而不是只看开关位置。官方 FAQ

把“模型不存在”“服务未启动”“内存不足”和“输入过长”作为四种不同失败反馈。提示用户保存草稿并稍后重试,通常比无提示切换外部服务更合适。日志不要默认记录手账全文;备份文件也属于隐私边界。

本文只实跑了配置判断,未启动 Ollama、下载权重、测 GPU、测功耗或做网络抓包。自由感不必依赖一个夸张的跑分:知道资料去了哪里、失败后草稿还在,就是值得认真设计的体验。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进