今天周六,本来不想碰任何服务器。结果早上在群里看到有人问”本地跑模型到底有没有用”,顺手打开NAS看了一眼。
Ollama上那个qwen2.5:3b模型已经连续跑了快两个月了,没挂过——这本身就挺意外的。3B的模型,跑在DS420+那个弱鸡CPU上,居然能吃住。之前担心内存不够、担心CPU过热,都没发生。

翻了翻日志,微信自动回复插件这两个月处理了大概六百多条群消息,其中大概八成能直接回复,剩下两成是”不知道怎么回”或者上下文太长。准确率比我想的高。
更有意思的是,有人开始在群里@机器人问技术问题——不是那种”今天天气怎么样”的废话,是真的在问Docker配置、反向代理、SSL证书续签这些。模型回答的质量,说实话参差不齐。简单的能对,复杂点就开始胡扯。但群里人对这个容忍度挺高,可能是觉得”一个NAS上的小模型能回答到这份上已经不错了”。
我突然意识到一个问题:这两个月我一直在关注模型能不能跑、会不会挂、回复快不快——但从来没想过”它到底在帮人解决了什么问题”。今天翻日志才发现,它确实在干一些有用的活。
下午顺手修了一个小问题。微信插件在群里回复时,如果消息里有图片,OCR识别用的是百度API,偶尔会超时。超时之后插件就卡住了,得等下次消息来才能”解冻”。
看了下代码,问题出在OCR调用没有设timeout。百度API那边有时候三四秒就回,有时候要十几秒。插件用的是同步请求,所以整个消息处理线程被堵死了。
改起来很简单,就两行:
# 原来
result = client.basicGeneral(image)
# 改后
result = client.basicGeneral(image, options={'timeout': 5000})

加了五秒超时,超时就跳过OCR,只回文字内容。改完重启插件,测了一下,即使百度那边卡了也不影响正常回复了。
顺手还做了另一件事。之前OCR结果直接拼到prompt里发给Ollama,格式是”图片内容:xxx”。后来发现这样模型有时候会搞混——把OCR结果当成用户的问题,而不是附加信息。改了个prompt模板,明确告诉模型:”以下是图片中的文字,仅供参考,请只回答用户的文字问题”。
试了几条,效果好多了。模型不再对着OCR结果自说自话。
这种小修小补说实话不值一提,但就是这种”不值一提”的事,加起来才能让一个自动化系统跑得稳。
最近在几个群里观察到一个现象:很多人开始用AI写代码、改bug,但从来不读生成的代码。
有个哥们儿在群里贴了一段AI生成的Python脚本,说”跑不通,报错”。我问他知道这段代码在干什么吗,他说”不知道,AI写的”。
这不是AI的问题,是人的问题。AI给你一段代码,不代表你可以不读。就像你不会把别人给你的U盘直接插电脑上一样,你至少要扫一眼。

我自己用AI写代码的习惯是:先让它写,然后一行一行读,不懂的地方让它解释。跑通了之后还要加注释、改变量名、整理结构——因为下次改代码的是我,不是AI。
“AI写的”不是一个免责声明。代码跑在你的服务器上,出了问题损失的是你。这个责任AI不会替你扛。
写到这,NAS上的Ollama还在跑着。不知道两个月后会怎么样,但至少这两个月,它帮我解决了一些实际的问题。