要让一切跑起来,需要准备几个部分。
我从 Hugging Face 下载 Qwen 模型和 llama.cpp 源代码,构建中间模型,最后将它转换成 llama.cpp 使用的 GGUF 格式。过程虽然涉及一些技术步骤,但并不复杂。最费时间的是下载 18 GB 数据。
然后,我启动 llama_server,在浏览器里打开它……
它就在那里。
一个带聊天框的网页。
我给自己搭了一个聊天机器人。
这件事既酷,又没那么有意思。
毕竟我已经有 ChatGPT,它的知识和能力要强得多。
当然,我首先开始问它各种问题。
我问了一些常识问题。它了解历史人物(例如 Rudolf Steiner)、地理、科学,还有编程……
答案是:它懂得相当多。
光是这一点就已经很令人惊讶。它没有查询 Google,也没有调用网上的巨型 AI 服务。模型和它所知道的东西,就在我自己的电脑里。
然后,我问它是否知道 Patrick Loeber 的 AI 贪吃蛇教程。
它知道我在说什么。
这引起了我的注意。
Patrick Loeber 的项目对我来说很熟悉。我自己的 Snake Lab 项目,正是从研究让 AI 学会玩贪吃蛇的实验发展而来的。所以,我不再只是问模型一些冷知识,而是开始和它聊我真正了解的主题。
它居然能给出有见地的回应。
真酷。
问题是,我手里仍然只是一个聊天机器人。
我可以提问,它可以回答。这很了不起,但并不是我真正感兴趣的事情。
我想在程序代码里使用 LLM。
于是我写了一个很粗糙的对话循环。
当时并没有什么宏伟计划。我只是想写一个程序:向模型发送提示词,获取回复,然后用这个回复做点事情。
这就引出了一个重要的工程问题:
我应该让它做什么?
显然,我的答案是:
让它为数字写俳句。
程序生成一个随机数,再连同“为这个数字写一首俳句”的提示一起发送给 LLM。
模型写出俳句。
程序将结果写入日志文件。
A new age starts today
Apollo touches the moon's face
New world begins to shine
1970
接着,它又生成一个数字。
再一个。
再一个。
很快,我就拥有了一台本地运行大语言模型的电脑,模型在那里沉思随机整数,并为它们写诗。
说不上有什么实际用途。
但它能用。
真正重要的并不是俳句,而是这个循环:
这是我第一次不再只是与 AI 聊天。
而是把 AI 放进了程序内部。
我的第一个本地 LLM 实验没有产生任何实际价值。
它只是在为随机数字写俳句。
但那个小实验回答了我真正关心的问题。
我可以在本地运行 LLM,从自己的软件与它通信,把信息交给它,获取回复,记录回复,再重复整个过程,而无须一直坐在聊天窗口前。
那时候,我还没有 Ax3l。
甚至连完整的构想都还没有。
我只有一个循环。
以及一个写满俳句的日志文件。