事情最开始,其实非常简单。
我想在自己的电脑里放一个 AI。
不是打开网页,登录账号,然后隔着互联网跟它聊天的那种。
而是一个真正住在我电脑里的 AI。
我可以随时找它说话,让它帮我整理文档、阅读资料,甚至处理一些不太方便上传到网上的私人文件。
它不需要每次都向远方的服务器请示。
电脑开着,它就在。
听起来是不是挺美好的?
而且现在的 AI 已经聪明到可以帮人写程序、修改文件、排查问题了。我突然想到一个问题:
既然 AI 这么会折腾电脑,那我能不能让 AI 帮我把另一个 AI 安装到电脑里?
我不需要先成为程序员。
我只需要告诉它,我想要什么。
剩下的,让它自己想办法。
于是,一场持续了将近一个月的折腾,就这样开始了。
当然,那时候的我还不知道,接下来最大的麻烦,不是 AI 不会干活。
而是它看起来什么都会,实际上却能用各种意想不到的方式,把自己和我一起骗得团团转。
#一、给电脑请来一位新住客
首先要解决的问题,是让 AI 真正在本地运行。
这件事跟平时使用在线 AI 不太一样。
平时聊天,我们只负责打字。真正负责思考的,是远方机房里那些昂贵的计算机。
而本地 AI 呢?
它得自己住进你的电脑。
你的电脑有多大本事,它就只能发挥多大本事。
我的设备是一台带有 RTX 5060 Laptop 显卡的笔记本电脑。
不是什么专门用来研究人工智能的超级计算机,就是一台普通的、性能还算不错的笔记本。
我已经在上面运行过一个比较大的 AI 模型。
这次,我想进一步改善它的表现。
尤其是两个问题。
第一,能不能让它回答得更快?
跟 AI 聊天,最让人难受的事情之一,就是你问完一句话,它半天才开始回答。
如果只是偶尔聊天,还可以忍受。
但如果你让它阅读一大堆文件,再帮你修改、整理、总结,那等待的时间就会越来越长。
第二,能不能让它记住更多内容?
这里的「记住」,不是指让 AI 永久记住你叫什么名字。
而是说,在一次对话中,它能同时阅读多少内容。
你可以把这件事想象成一张书桌。
书桌太小,摊开几页纸就满了。
书桌足够大,你就可以把一本小说、几十份资料,甚至整个项目的文件都摆在上面,让 AI 一起参考。
我希望这张书桌越大越好。
但问题来了。
桌子变大之后,AI 还能不能像原来一样灵活?
我不知道。
于是,我让另一个 AI 帮忙研究。
它负责提出方案、调整设置、设计测试、检查结果。
而我负责提出需求,以及在某些事情看起来不对劲的时候,问一句:
「等一下,这真的合理吗?」
事实证明,这句话后来救了我们好几次。
#二、第一次翻车:明明还有空间,为什么突然变慢了?
一开始,我的想法特别朴素。
电脑的显卡有一块专门用来工作的内存,叫显存。
你可以把它理解成 AI 的工作台。
模型需要占地方,聊天内容也需要占地方。
如果工作台还有空位,是不是就可以继续往上放东西?
当时我看到,显存似乎还没用满。
于是,我让 AI 试着扩大它一次能阅读的内容。
最初,结果看起来相当不错。
模型顺利启动。
没有报错。
还能正常回答问题。
显示出来的显存占用,也似乎没有超出限制。
我心想:
这不挺好吗?结果一测试速度,傻眼了。
原本每秒能生成五十多个文字单位的模型,突然只剩下十五个左右。
读入资料的速度更夸张,直接慢了将近十倍。
这就像你给一位老师换了一张更大的办公桌。
桌子确实变大了。
老师也确实能在上面放更多试卷。
但从此以后,他批改一张卷子的时间变成了原来的好几倍。
这合理吗?
AI 开始检查。
最后发现,问题恰恰出在那个看起来还有剩余空间的显存上。
电脑显示的「还有空间」,并不代表所有东西都真的放在显卡里。
当显卡装不下时,电脑可能悄悄把一部分内容挪到普通内存里。
就像办公桌放不下文件,于是把一部分文件搬到隔壁房间。
老师要用的时候,再跑过去拿。
桌面看起来整洁了。
但老师每天都在两个房间之间来回奔跑。
工作效率当然直线下降。
更要命的是,电脑不会特意跳出来告诉你:
「你好,我已经偷偷把东西搬走了。」
它只会安安静静地继续运行。于是,我们学到了第一件事:
一个 AI 能正常回答问题,不代表它正在正常地工作。
有时候,最麻烦的问题,就是那些根本不会报错的问题。
怎么判断是真装下了,还是偷偷搬到了隔壁
显卡装不下的时候不会报错,它只是把一部分东西挪到普通内存里,然后接着干。所以显存上看着还有空位,未必是真的有空位。
可靠的判断只有一个:看速度。同样的模型、同样的设置,把一次能读的量一点点往上加,每加一档就测一次读入和回答的速度。速度突然掉一大截,就说明那一档已经搬出去住了。
还有一个旁证:参数越调越大,显存占用反而变小。正常情况不该这样,出现这种情况,基本就是搬家的痕迹。
真碰上了,就把它一次能读的量降回来,或者把记住东西的精度调低一点。继续往上加只会更慢。
#三、第二次翻车:为了看清它有多快,我们把它弄慢了
接下来,AI 决定认真测试速度。
既然要测试,就得有数据。
既然要有数据,就得监控电脑的运行情况。
听起来非常科学。
于是,它一边让本地模型回答问题,一边不断检查显卡的状态。
过了一会儿,测试结果出来了。
非常稳定。
稳定得令人感动。
之前同样的测试,速度还会忽快忽慢。
现在每次测出来的结果,几乎一模一样。
如果你是老师,应该很容易理解这种喜悦。
同一套试卷,给同一个学生做很多次。
以前成绩忽高忽低。
现在每次都考同样的分数。
看起来,终于找到可靠的测量方法了。
但我们很快发现了另一个问题。
成绩确实稳定了,可它稳定在一个比较低的水平。
换句话说:
为了观察 AI 到底跑得有多快,我们使用的观察方法,反而改变了它的速度。
这就好比你想知道一个学生平时学习有多专心。
于是,你每隔两分钟就走到他旁边,问一句:
「现在专心吗?」
「现在呢?」
「这次呢?」
最后你发现,这个学生整节课都没怎么走神。
但他也没做完多少题。
因为你一直在打扰他。
电脑当然不是学生。
真正的原因涉及显卡如何调整自己的工作状态。
但故事的荒诞之处是一样的:
我们以为自己只是在观察,实际上却参与了实验。
于是,AI 又得重新修改测试方法。
这时候我已经隐约感觉到,事情开始朝着一个奇怪的方向发展。
我们原本不是想聊天吗?
怎么现在像是在研究一台精密仪器?
什么时候可以一边看一边测
正经记账的时候,不要同时开着显卡监控。
监控本身是一个持续的轻微负担,显卡会一直停在「有人在用」的那个状态里。结果就是每次测出来几乎一模一样,稳得让人安心,但整体都比它真正能跑的速度低。
想看它到底飘不飘,反过来一直盯着看反而有用。它原本在快慢两档之间来回跳,一盯就固定住了,漂移也就藏不住了。
结论:监控用来诊断,不用来记账。
#四、第三次翻车:AI 说它进步了,结果只是电脑状态变了
有了前两次教训,AI 开始更加谨慎。
它不断尝试不同的设置,比较修改前后的表现。
某一次,结果相当漂亮。
新方案比旧方案快了大约 9%。
这可是实打实的提升。
如果你每天都要使用本地 AI,速度提升 9%,当然是件值得高兴的事。
但问题是:
这个提升是真的吗?
我们重新安排测试,让两套方案轮流上场。
旧方案跑一次。
新方案跑一次。
再来一轮。然后把顺序反过来。
这样做,是为了尽量避免电脑温度、后台程序、运行状态等因素干扰结果。最后发现:
原来那个看起来有 9% 的提升,真正能确认的差距只有大约 0.1%。
几乎可以忽略。
原来,AI 并没有找到什么神奇的优化方法。
它只是恰好在电脑状态不同的时候,测量了两个方案。
就像你想比较两位同学谁跑得快。
让甲在早晨天气凉爽的时候跑。
让乙在下午烈日当头的时候跑。最后宣布:
「甲的运动能力比乙强 9%。」
这结论显然站不住脚。
可如果没人提醒,AI 就可能一本正经地把它写进报告。
这也是我折腾过程中逐渐发现的一件事:
AI 很擅长分析数据。
但前提是,那些数据本身值得相信。
如果数据有问题,它也可能非常认真地分析出一个错误结论。
而且解释得头头是道。
有时候,最危险的不是 AI 不知道答案,而是它不知道自己拿到的题目已经错了。
比较两套设置,怎么做才算数
同一份模型、同一组设置,换个进程跑就能差出一成到两成。机器的温度、桌面上的其他程序、风扇转到哪一档,都在变。这些跟模型没关系,却和测量的先后顺序缠在一起。所以「先跑甲、再跑乙」量出来的差距,多半是在量机器当时的状态。
按顺序来:
- 能塞进同一次测试的,就塞进同一次。同一批里一起跑出来的几组才可比,别的办法都只是缓解。
- 塞不进去就轮流:甲、乙、甲、乙,比较成对的差值,下一轮记得把顺序倒过来。
- 每一行的第一次丢掉。程序刚起来那一下,第一个数字常常整段偏高或者偏低。
跨进程比、只跑一遍、拿单次结果下结论,这三种都得不出答案。
#五、最离谱的一次:AI 忙了一个半小时,电脑却睡了将近八十分钟
如果说前面几次还算正常的技术问题,那么接下来这件事,就有点喜剧色彩了。
为了测试 AI 阅读长篇资料的能力,我们拿来了一整部小说。
不是一小段。
是一整部。
我想看看,如果一次性把大量文字交给本地 AI,它需要花多长时间才能读完并开始处理。于是,AI 开始测试。
时间一点点过去。
十分钟。
二十分钟。
半小时。
一小时。最后,计时结果出来了。
将近九十八分钟。
我看着这个数字,陷入沉思。
读一部小说要一个半小时?
虽然是本地模型,虽然电脑性能有限,但这也太夸张了。
AI 倒是很认真。
它根据这个结果开始分析,认为随着文章越来越长,模型处理文字的时间可能会急剧增加。
甚至试图总结出一条规律。
如果这条规律成立,那我的计划就得重新考虑了。
因为我原本希望 AI 能阅读大量私人资料。
结果它读一次文件,就得让我等一个多小时。
这还怎么愉快地聊天?
但我突然想到一件事。
「等等,这么长时间里,电脑有没有可能睡着过?」
这不是一个多么高深的技术判断。
纯粹是一个普通人的疑问。
毕竟笔记本电脑嘛。
谁还没见过它自动休眠?于是,我们去检查电脑的记录。结果……
它还真睡着了。
而且睡了足足 78.8 分钟。
从上午十一点半左右,一直睡到下午十二点五十分左右。

这段时间里,模型根本没有继续计算。
电脑在休眠。
程序在等待。
但外面的计时器还在老老实实地计算经过了多少时间。
于是,AI 得出了一个惊人的结论:
「处理这篇小说需要九十八分钟。」
实际呢?
真正工作的时间,大约只有十九分钟。
更有意思的是,我们最开始估算的时间,本来就接近十八分钟。
也就是说:
AI 原本估计得差不多,后来却被一个错误的测试结果说服,亲手推翻了自己的正确判断。
折腾半天,又绕回原点。
这件事给我的印象实在太深了。
因为它不像一般的程序错误。
没有红色警告。
没有崩溃。
没有任何地方跳出来告诉我们发生了什么。
只有一个看起来特别精确的数字。
九十八分钟。
精确得让人觉得很有说服力。
但其中将近八十分钟,电脑都在睡觉。
我甚至开始怀疑:
我们到底是在训练 AI,还是在训练自己不要轻易相信 AI?
怎么确认它在算,还是电脑睡着了
超过几分钟的实测,出数之前先查一遍电脑有没有睡过。
Windows 的电源记录在事件查看器里:系统日志,找和电源相关的来源,那条会写着睡眠时间、唤醒时间和唤醒源。三个时间一对,就知道中间丢了多久。
睡眠期间程序是冻住的,外面的计时器照走。数字只会变大,不报错,也不留痕迹。所以一次跑得特别离谱的时候,先怀疑计时,重测一遍,一般就回到正常值了。
这台电脑的睡眠不是空闲触发的,是合盖或者按按钮触发的。也就是说,它可能在你正测着的时候睡过去。
#六、让它回答「收到」,它想了半天,什么都没说
除了速度,另一个让我哭笑不得的问题,是本地 AI 的思考方式。
现在有些 AI,在回答问题之前,会先进行一段内部推理。
你可以理解为,它会先打草稿,再给出正式答案。
这当然是个好功能。
遇到复杂问题时,先想清楚再回答,通常比张嘴就来更可靠。
但有一天,我们做了一个非常简单的测试。
给 AI 一条指令:
「只回答两个字:收到。」
按理说,这应该是世界上最轻松的任务之一。
不需要查资料。
不需要推理。
不需要写文章。
甚至连标点符号都不用考虑。
只要回答:
收到。
就结束了。
然而,测试结果却是:
AI 在内部写了一大段思考内容。然后……
没有然后了。
它把允许输出的内容额度全部用在了思考上。
等真正轮到正式回答时,额度已经用完。于是,聊天界面一片空白。
我让它回答两个字。
它想了半天。最后一个字都没说。
这就像老师在课堂上提问:
「一加一等于几?」
学生开始认真思考。
先研究数学的起源。
再讨论自然数的定义。接着思考加法的哲学意义。
等下课铃响起,学生仍然没有说出答案。
你不能说他完全没有努力。
但你也很难说,这次回答是成功的。
更麻烦的是,原先连接聊天界面和模型的那部分程序,没有完整保留它的思考内容。
从使用者的角度看,只会觉得:
AI 怎么突然不理我了?
于是,我们又让 AI 检查并调整了这部分设计。
至少要能分清楚:
它究竟是没有工作,还是一直在思考,却没来得及开口。
一个会思考的 AI,首先得学会把答案说出来。
这要求听起来是不是特别低?
但在本地折腾 AI 的过程中,很多看似理所当然的事情,真的需要一个个解决。
怎么分辨它是没干活,还是想太久
它吐出来的内容其实分两路:一路是正文,一路是思考。两路共用同一份额度。思考把额度用光了,正文就是空的,界面上什么都看不见。
诊断的办法是把两路的长度分开记。只有思考、没有正文,那是额度给少了——额度要按「思考加正文」一起估,不能只按你希望它说几个字来估。
两路都是零,才是它真的没干活。
#七、最有效的优化,居然是让 AI 少背点书
折腾到这里,我已经逐渐接受了一个现实。
本地 AI 的能力,确实会受到电脑性能的限制。
你不能指望一台普通笔记本,像远方的大型计算机集群一样,轻轻松松处理所有任务。
但既然硬件有限,是不是可以换一种思路?
不一定非要让 AI 跑得更快。
能不能让它少做一点没必要的工作?
这个想法后来带来了整轮优化中最让我惊讶的结果。
事情是这样的。
为了让 AI 帮忙操作电脑、阅读文件、调用各种功能,我们需要告诉它:
你有哪些工具。
每个工具能做什么。
什么情况下应该使用。
原来的做法,是每次开始工作,都把一大份工具说明交给它。
听起来很合理。
但仔细想想,其实非常浪费。
假设你是一位老师。
学校给你配了一百种教学工具。
有投影仪,有打印机,有扫描仪,有录音设备,还有各种教学软件。
为了确保你知道怎么使用这些工具,学校要求:
每次上课之前,必须先把全部一百种工具的使用说明书从头到尾读一遍。
哪怕这节课只需要一支粉笔。
你也得先读完。
这不是很荒唐吗?
而我们的 AI,之前就在干类似的事情。
每次开始工作,它都要先接收一大堆工具说明。
测试发现,这份说明大约占据一万两千个文字单位。
对本地模型有限的阅读空间来说,这可不是一个小数字。于是,我们换了一个办法。
不再每次都把所有说明书塞给 AI。
而是把它们整理成一个文件。
告诉 AI:
「工具都在这里。需要哪个,你自己去查。」
就这么简单。
没有换显卡。
没有换更大的模型。
也没有什么神奇的人工智能算法。
只是把「每次背诵整本说明书」,改成了「需要时查阅目录」。结果呢?
相关的重复说明内容,减少了大约九成。
九成。
看到这个结果的时候,我真的有点哭笑不得。
前面我们花了那么多时间研究显存、速度、运行状态。
最后一个特别有效的改进,居然只是:
别让 AI 每次上班都背着一整座图书馆。
有时候,所谓优化,并不是让机器变得更强。
而是让它少干蠢事。
它的节拍:读得有多快,前面有人时要等多久
读东西的速度大致是这样:
| 一次塞进去多少 | 读入速度 |
|---|---|
| 两三百字以内 | 慢得离谱,大半时间花在准备上,不是在读 |
| 几百到一千字 | 中等 |
| 一千到五千字 | 快 |
| 五千字以上 | 最快,一直到二十几万字都基本一样 |
所以一句话问出来的速度代表不了它。小问题更像是被开头那点固定开销摊薄了。要估时间,按「一万字上下耗一分钟」这个量级去算就行,材料长一点短一点都差不多。
还有一点:它一次只接一件活。只有一条通道,所有请求严格排队。前面堵着一个几万字的大活时,后面一个小问题也得干等好几分钟。走本地的活要一件一件发,别指望并着发会更快——那只会让所有活一起变慢。
同一部长篇,第二次它是记得的
开头那部分不用重读。第一次读完,第二次把同一份材料再丢给它,读入几乎不花时间,第一句话出来得快了上百倍。
但它不是一直记得。连着用两三次之后,某一次会突然忘掉,又老老实实从头读一遍,二十几万字就是一刻钟往上。
引擎没崩,也没重启,是它自己把手里的东西清掉了。为什么清掉还没有定论,只观察到同一组测试里失败往往只发生在某一次,下一次又好了。
所以用它读长材料的时候,别假设这次一定记得。请求发出去过几十秒,去看一眼它的状态,那边显示没记住,就趁早掐掉,省得白等二十来分钟。
#八、给 AI 做减法,结果发现它也有自己的小脾气
除了工具说明,我们还尝试过另一件事。
给模型本身减负。
你可能知道,AI 在处理文字时,并不是像人一样一个字一个字地理解。
它会使用一套自己的文字单位。
这套东西,可以粗略理解为它随身携带的一本特殊字典。
字典里不仅有中文和英文,还有各种语言的文字、符号,以及表情。
而我的实际需求,主要集中在中文和英文。于是,一个大胆的想法出现了。
既然有些文字几乎用不上,能不能把相关部分删掉?
这样,模型占用的空间是不是就能减少一点?
在保留原始模型备份的前提下,我们尝试精简了一部分不常用的文字单位。
这有点像整理行李箱。
如果你只是去附近出差,就没必要把登山装备、潜水设备和厚重的冬装全部塞进去。
把暂时用不上的东西拿出来,箱子自然就轻了。
当然,AI 模型不是普通行李箱。
删掉一部分文字单位,也意味着它处理某些语言和符号的能力会受到影响。
所以这并不是什么适合所有人的万能方案。
它只适用于特定的使用需求。
而且,这次折腾还让我发现:
不是每个看起来更高级的功能,都一定能让体验变得更好。
比如前面提到的思考功能。
按理说,允许 AI 多想一会儿,应该能让它回答得更好。
但在我们的某些测试里,打开思考功能反而让有效输出表现变差。
这就很有意思了。
我们平时总觉得,功能越多越好。
设置越复杂越专业。
参数越大越厉害。
但实际使用时,情况未必如此。
对于一台普通电脑来说,最合适的方案,不一定是最豪华的方案。
有时候,少一点,反而更好。
#九、折腾了一个月,我终于明白自己真正想要什么
回头看这将近一个月的折腾,我觉得特别有意思。
最初,我只是想在电脑里放一个 AI。
能聊天。
能看文件。
能帮我处理一些事情。
最好还能保护一点隐私,让不方便上传的资料尽量留在本地。
这是一个很普通的愿望。
但为了实现它,我们一路遇到了各种各样的问题。
显卡看起来还有空间,模型却慢得离谱。
为了测量速度,监控程序反而影响了速度。
明明以为优化成功,重新测试才发现几乎没有提升。
一场持续九十八分钟的计算,实际上有将近八十分钟电脑都在睡觉。
让 AI 回答两个字,它却把全部力气用在了思考上。
还有一些测试结果,后来发现只是统计方法出了问题。
最夸张的一次,一个看起来超过一半的比例,修正统计方式后只剩下百分之二点几。
如果我们没有继续检查,那些错误数字很可能就会成为下一次修改的依据。
而 AI 最令人困惑的地方,恰恰在这里。
它不会总是明确告诉你:
「对不起,我搞错了。」
很多时候,它会给你一个非常完整、非常漂亮、非常有说服力的解释。
解释为什么这个设置更好。
为什么那个参数应该调整。
为什么某个结果符合预期。
你看着它认真工作的样子,很容易觉得:
既然它分析得这么详细,那应该没问题吧?
可有时候,问题就藏在那个「应该」里面。
当然,这不意味着 AI 不可靠,更不意味着普通人不该使用它。
恰恰相反。
整个过程中,绝大部分具体工作都是 AI 帮我完成的。
测试方案是它设计的。
程序是它调整的。
数据是它整理的。
很多问题也是它自己发现、自己修正的。
我并不需要先把每一项技术都学会,才能让事情继续推进。
但我需要知道自己想要什么。
也需要在结果明显违背常识的时候,敢于问一句:
「这是不是哪里不对?」
这种合作方式,是我觉得最有趣的部分。
以前,如果一个普通人想折腾本地 AI,可能得先学习大量专业知识。
现在,我可以先提出一个模糊的愿望。
然后让 AI 一边探索,一边解释,一边试错。
它负责处理大量我不熟悉的技术细节。
我负责判断最后的结果,是不是还符合最初的目的。
当然,AI 也会犯错。
而且有时候犯得特别离谱。
但只要能够检查、纠正、重新尝试,事情就还能继续往前走。
#十、最后,AI 真的住进电脑了吗?
其实,故事并没有一个特别戏剧化的结局。
没有某一天突然出现奇迹。
没有经过一番神秘操作,普通笔记本就变成了超级计算机。
我们最终得到的,是一套经过反复调整的本地模型运行方案。
它有自己的能力边界。
有些事情做得不错。
有些事情仍然需要等待。
有些功能还得根据实际情况取舍。
而且,本地运行也不自动意味着所有数据都绝对安全。哪些内容会留在电脑里,哪些工具可能访问外部服务,仍然需要单独检查。不过,至少有一点让我很满意。
经过这一轮折腾,我对「在自己的电脑里使用 AI」这件事,有了更实际的认识。
它不再只是一个听起来很酷的技术名词。
而是一件普通人可以慢慢尝试、逐步改善的事情。
最让我感慨的,是我们最后取得的一项重要改进。
不是靠换设备。
不是靠购买更昂贵的硬件。
甚至不是靠什么复杂的数学技巧。
而是发现:
原来 AI 每次工作之前,都在重复阅读一大堆根本用不上的说明。
于是,我们让它学会了需要时再去查。
就这么一个小小的改变,省下了大约九成的重复说明内容。
这件事让我突然想到:
我们总希望 AI 变得越来越聪明。
但有时候,真正需要改变的,不是 AI 的智力。
而是我们安排它工作的方式。
至于我自己呢?
一个月前,我只想在电脑里养一只 AI。
一个月后,我发现自己不仅要关心它会不会聊天,还得关心它有没有偷懒、有没有看错数据、有没有被自己的测试误导。
甚至还要检查:
它是不是趁我不注意,跟着电脑一起睡着了。
想想也是挺好笑的。
原本是想找个 AI 帮我干活。
结果一不小心,先学会了怎么照顾 AI。不过,折腾归折腾。
下次打开电脑,看见那个不必依赖远方服务器就能运行的聊天模型,我还是会觉得:
嗯。
这一个月,倒也没白忙活。
至少现在,我真的可以在自己的电脑里,跟 AI 说上一句话了。
至于它会不会认真回答……
那就是下一次折腾的故事了。
(笑)
评论