构建一个问答打字机:用户只需输入问题,按回车键,等待2到3秒,答案就会打印出来
不过,前两个版本需要联网,因为它们通过Wolfram Alpha API获取答案;而这个新版本则完全离线运行。因为它在Arduino UNO Q(2GB型号)上运行了一个本地的大语言模型(LLM)。
硬件
这个项目的核心当然就是那台“打字机”本身,它是一台德州仪器的Silent 700(型号745),生产于上世纪70年代中期。
其他仅有的组件是Arduino UNO Q(2GB)以及一个基于MAX3232的RS232-TTL收发器。后者之所以必要,是因为终端工作电压远高于Arduino可安全接触的范围(±15V)。
在之前版本的Termi中,我在这方面相当粗心大意,幸运的是没有造成任何损坏。但为了Termi3,我决定采用正确的方法。
我使用Makera Z1铣削定制的PCB板,充当一个微型保护罩,用于连接Arduino的引脚与RS232收发器及数据线。
如果你对通信细节感兴趣,可以查看我关于Termi2的详细说明。
本地LLM
我希望Termi3能完全离线运行,这就需要一个能够在Arduino UNO Q本地运行的LLM。这本身就是一个挑战,而由于我的设备只有2GB版本,难度更是加大了。
我选择的型号是Llama 3.2-1B,这是一个通用型、参数高达12.3亿的模型,专为低功耗应用设计,非常适合此类场景。
即便如此,响应时间仍然可能相当缓慢。因此,一些技巧有助于让其看起来性能更好。前缀缓存提示符和令牌限制能起到很大作用。但最主要的因素是,它在生成答案之前就开始返回结果。
用户在终端输入内容时,Arduino UNO Q 通过 MAX3232 和位操作接收字符。当字符传入后,STM32 会将它们通过 Arduino 路由器桥接发送到 Linux 端的 Python 脚本,该脚本再将信息传递给 Llama 服务器。一旦收到回车字符,提示符就会被提交。
当 Llama 模型开始生成回复时,它会通过相同的通信链路(反向)将字符回传至终端,终端则会忠实打印这些字符。
从按下回车键到开始显示回复之间的时间仅需 2 到 3 秒,这勉强够快以供使用。但为了保险起见,Arduino 内置的 LED 矩阵会显示状态图标,让用户知道系统正在思考,需要稍等片刻。
完成之后,系统即可重新开始整个流程。
外壳
我非常希望为这个作品打造一个精美的外壳,因此投入了大量精力。我在Autodesk Fusion中设计了结构,然后逐件进行加工制作。
外壳的底座采用一块6061铝合金制成,由我的Bostomatic 312数控铣床加工而成。这块底座重约3500磅,制造于上世纪90年代初。后来我对其进行了升级改装,安装了更现代的控制器,并通过Mach3系统运行。
铣削完成后,我使用Ramco水平带锯将铝块切下。接着用Gorton 9-J手动铣床将底部表面加工成平整,再用同一台机床钻出安装孔,最后用手攻丝完成M3螺纹。
随后对表面进行玻璃珠喷砂处理,使其呈现出漂亮的质感。
中间部分是使用Bambu Lab H2C设备3D打印的PETG材料。我为外表面添加了轻微的毛边纹理,以增强视觉层次感并减少明显的分层线。
顶部部件则是一整块透明亚克力板,由Makera Z1设备铣削而成。
之后,我使用xTool O1 Omni UV打印机在亚克力板顶部添加了图案设计。整体效果看起来非常美观,使整个作品呈现出光滑、精致的外观。
前台
你可能在2026年Open Sauce展会上见过Termi3(在一个更简单的外壳中)。我当时正在那里展出,反响非常热烈——以至于我桌上的其他东西几乎都被忽略了。
人们真的非常喜欢它!我惊讶地发现,年轻人(尤其是十几岁的女孩)似乎对Termi3最感兴趣。我觉得这背后的原因在于它的体验既新颖、复古又富有触感,同时又充满乐趣且易于上手,因此格外吸引人。有点像数码相机和MP3播放器再次流行一样。
但需要指出的是,Termi3其实有点“傻瓜式”。有时候它的回答合理而准确;但有时,答案则从令人困惑到滑稽可笑不等。
这大概也是为什么持续与它互动如此有趣:你想看看它会给出哪些荒唐的回答。
本文编译自hackster.io





