设计一款交互式AI故事生成器
还记得我们小时候读过的那些“选择你的冒险”书籍吗?在这些书中,我们可以决定故事接下来会发生什么。故事会根据我们的选择而发展,让读者对所选的精彩情节保持浓厚兴趣。本项目正是由此启发而来。
该项目使用Raspberry Pi Pico来展示故事的一部分,然后由你通过Pico上的选项决定后续发展。Pico与电脑之间通过串行通信进行数据交换。项目对大型语言模型(LLM)施加了诸多限制,例如控制每段生成文本中使用的字数,从而创造出丰富多样的故事内容和选择空间。此外,还可以自由切换不同的LLM,以呈现风格各异的故事类型。
1. 入门指南
本项目主要使用两种硬件:一台Windows电脑和一块带有OLED屏幕的树莓派Pico。电脑需要安装Ollama,并配备一个IDE,以便将代码写入树莓派Pico。我使用了VS Code和Thonny。下图展示了所使用的硬件和软件组件。
2. 硬件设置
PC端无需设置,但树莓派Pico端需要进行一些简单的设置。您需要将Pico的GPIO引脚连接到OLED屏幕模块的母头引脚上,如图所示。
3. 设置 Ollama
Ollama 是一款出色的工具,可用于在您自己的设备上运行大型语言模型(LLM)。它让您能够自由地按需使用,且无需联网。此外,您还可以从多种不同的 LLM 中自由选择适合项目使用的模型。
点击“Windows”选项,将推荐的命令粘贴到 PowerShell 中,或点击“下载适用于 Windows”。
下载完成后,继续进行安装。安装完成后,您应该能看到 Ollama 应用程序。但本指南中,我们将使用命令提示符终端。打开一个命令提示符终端,输入“ollama”,系统将弹出可用命令列表。
下一步是安装一个模型。每个模型都有其独特优势,适用于不同应用场景。对于本项目,我们选择了 llama3.1,因为它在多个领域都表现出色。要安装此模型,您需要运行以下命令:
如果模型尚未安装,执行上述命令即可完成安装;如果已安装,终端将允许您以类似与在线 LLM 对话的方式与该模型交互。不同之处在于,LLM 是在本地运行的。
Ollama 会在本地主机上暴露一个 HTTP API,这意味着我们可以通过任何能够发送 HTTP 请求的代码(如 Postman、Python 代码等)来与已安装的 LLM 交互。我们将利用这一功能,通过树莓派 Pico 与 llama3.1 进行交互。为此,请打开命令行终端并运行以下命令:
这将启动 Ollama 服务器,并显示一些重要信息,例如 Ollama 所运行的端口号。
接下来,我们需要对下载的模型进行定制,使其具备讲故事的能力。为此,我们需要创建一个 Modelfile,这是一种用于生成修改后模型的蓝图。Modelfile 中可以输入多个参数,但在此项目中,我们只关注三个关键参数:要从哪个基础模型获取内容、设置模型响应时的创意程度,以及系统消息。在本项目中,系统消息将包含有关如何限制故事段落以适应树莓派 Pico 的 OLED 屏幕,以及如何传递选项以推进故事发展的说明。
请务必将此文件保存在已知的位置。然后,在打开该文件的目录下打开命令终端,并运行以下命令。
如果您的命令终端是从其他位置打开的,请务必将 './Modelfile' 替换为不同的路径。此外,您也可以将 'storyteller' 更改为任意您喜欢的名字。运行此命令后,即可使用以下命令与您新创建的自定义模型进行交互。
4. 为Ollama模型准备Python代码
当Ollama大语言模型在您的电脑上启动运行后,您需要创建ollama_init.py库,该库将用于您电脑端的Python脚本与LLM进行交互。通过该库,您可以根据选择的类型创建一个实例。随后,LLM会返回一条包含一系列选项的消息,供用户选择,这些选项将被输入到LLM中,循环继续执行。
5. 设置PC端和Pico端代码
PC端和Pico端将拥有相对相似的代码集,以便通过串行通信相互连接。运行在PC端的pc_serial_comm.py包含一个名为PCSside的类,该类将以预设的波特率连接到树莓派Pico的端口。您可以在代码中添加最多3种类型,所选类型将用于生成的故事内容。
在树莓派Pico端,main.py负责将用户选择的选项传递给PC,并显示从PC发送到Pico的故事部分。代码结构为:当大语言模型(LLM)发送包含“QUESTION|”字样的数据时,系统会将其内容拆分为故事文本以及两个选项,以推动故事发展。如果用户按下按钮B,则会向LLM发送消息,提示需要为故事添加结局,该结局将显示在OLED屏幕上。
6. 测试
将Pico连接到电脑,确认其连接的端口号(可通过打开设备管理器轻松验证),然后通过Thonny将git仓库中“pico”文件夹内的文件移动到Pico设备,并将“pc”文件夹中的文件保存在你选择的电脑位置。建议在电脑上安装一个虚拟环境(venv)来安装运行pc_serial_comm.py所需的库。修改pc_serial_comm.py中创建的PCSside实例中的“port”变量,然后运行脚本。你应该会看到Pico的OLED屏幕显示欢迎界面,随后出现可供选择的类型选项,以开始故事。你可以通过按下上下箭头键和按“A”键选择选项,持续进行故事;按下“B”键即可结束故事,系统会给出合适的结局。
结论
就这样,你有了一个非常简单的故事情节生成器。当然,它也存在一些限制,比如需要通过串口连接到运行LLM的电脑,而且故事的创意空间也受限于LLM的大小、所使用的LLM模型以及屏幕上可同时显示的角色数量。不过,这仍是一种有趣的方式,可以展示Pico上LLM的表现效果,同时也是一种不错的了解LLM的好方法。
本文编译自hackster.io





