集成现代 AI 语音交互的树莓派项目。对 IoT 爱好者有参考价值,但应用场景相对狭窄。
注意:这个项目正在不断开发中。如果你发现任何问题,欢迎提交 issue 或 pull request,我会尽力帮助!
另外,你也可以随意 fork/clone/复制这个项目仓库,做出自己的修改!希望新添加的 docker 支持能让部署更容易,方便你找到修改的思路。我承诺很快会发布一个视频教程。
还有一点需要说明:由于 llama cpp 不再积极支持视觉模型,摄像头功能已被临时移除。
Pi-Card 是一个完全运行在 Raspberry Pi 上的 AI 助手。它能够执行标准 LLM(如 ChatGPT)在对话场景中能做的事情。另外,如果配备了摄像头,你还可以让 Pi-Card 拍照、描述它看到的内容,然后询问关于该图像的问题。
Raspberry Pi - Camera Audio Recognition Device.(树莓派 - 摄像头音频识别设备)
如果你能想到更好的方式来强行解释这个缩写,请提交 issue 或 pull request。
Pi-Card 运行在你的 Raspberry Pi 上。
使用唤醒词。一旦运行 main.py,系统就会监听你的唤醒词。一旦说出唤醒词,你就正式开始一段对话。在这段对话中,你不需要不断重复唤醒词。系统会继续监听你的命令,直到你说出"stop"、"exit"或"goodbye"这样的词语。更多相关信息和自定义选项可在 config.py 文件中找到。
使用按钮。如果你能找到一块面包板、一些电线和一个按钮,用按钮来处理对话会是一种更流畅(在我看来)的交互方式。操作方式是按下按钮,然后说出你的命令。按钮是一个简单的 GPIO 按钮,可以按照 main_button.py 文件中的说明进行设置。
聊天机器人具有可配置的对话记忆功能,这意味着如果你想让助手重复它说过的内容,或者在某个之前的话题上展开讨论,你都可以这样做。为了获得更快的响应,你可以在 config.py 文件中将记忆大小设置为更小的数值。
该系统设计目标是成为一个有趣的项目,也可以是一个相当有用的 AI 助手。由于一切都在本地完成,它不会像云端系统那样功能强大或响应迅速。不过,在过去的一年里,小型 LLM 模型已经取得了显著进展,这种进步很可能会继续,这也意味着这个项目也会随之改进!
主要原因是我想创建一个完全离线的语音助手,看看它在相对廉价的 Raspberry Pi 硬件上有多高效。我认为这个项目最难的部分是让它运行得足够快,所以如果我能让它这样工作,类似的东西可以在越来越强大的硬件上完成,而且速度会更快。
下载好仓库、安装好依赖后,按照其他设置说明进行操作,你可以通过以下命令运行主程序:
python main.py
或者:
python main_button.py
程序运行后,你可以通过说出唤醒词来开始与助手的对话。默认的唤醒词是"raspberry"、"barry"、"razbear"(即转录可能意外识别的词语),但你可以在 config.py 文件中将其更改为任何你想要的词语。如果使用按钮版本,你可以按下按钮来开始对话,或者随时打断助手的回复。请注意,这些选项(如唤醒词是什么、GPIO 按钮是哪个)都是我为自己的使用设置的。欢迎你自己修改!
要在 docker 容器中运行项目,可以使用以下命令:
sudo docker-compose build
sudo docker-compose up
这是最近添加的功能,可能不完全正常工作。同时,它仅适用于唤醒词版本,不确定如何将 GPIO 访问传递给容器。
为了保持系统尽可能快速和精简,我们尽可能使用 cpp 实现。一些例子是用于音频转录的 whisper.cpp 和用于视觉功能的 llama.cpp。
请在你喜欢的任何地方克隆这些仓库,并将其路径添加到 config.py 文件中。
克隆后,请按照设置说明让模型运行。下面给出了一些指引:
为了使 pi-card 更像一个真正的助手,它可以访问一些工具。这些是通过 tool-bert 实现的,tool-bert 是一个经过微调的 BERT 版本,可以决定何时访问外部信息。关于如何制作此版本的更多信息可以在这里找到。
该模型很容易安装,但要启用工具访问,请查看 .env.example 文件了解需要哪些密钥和秘密。
对于 whisper.cpp,你需要按照 README 中的快速入门指南进行操作。
如果你能将摄像头连接到 Raspberry Pi,你可以启用视觉模型。如果你有摄像头,你可以要求 pi-card 拍张照片,并描述它看到的内容。
这是通过在 config.py 文件中将 vision_model 设置为 vlm 来完成的。同时,你还需要下载该模型的相应版本,即 Qwen2-VL-2B-Instruct。
由于此模型具有动态输入图像 token 大小,通过使拍摄的照片更小,我们可以加快推理时间。这有很大的潜力,可以在 Raspberry Pi 上使用 VLM。有关如何下载 llama.cpp、量化版本和执行代码的信息,请参见这里。
硬件设置非常简单。你需要一个 Raspberry Pi 5 Model B、一个 USB 麦克风和一个扬声器。
USB 麦克风和扬声器可以插入 Raspberry Pi 的 USB 接口。摄像头可以连接到 Raspberry Pi 上的摄像头接口。
我的设置使用了以下硬件:
请注意 Pi 5 的摄像头接口是新的,因此需要新的摄像头连接器。同时,虽然这个项目重点是让它在 Raspberry Pi 5 上运行,但它应该也能在其他设备上工作。
摄像头连接器是可选的,但如果你想使用摄像头功能,需要购买一个。
对于 GPIO 按钮的设置,我发现这个教程的前几分钟非常有用。
随意使用你自己的硬件,这只是我用的方案!
即将推出,但我计划在这里添加关于当前已实现的内容以及未来可以做的事情的说明。下面是一些快速说明。我已经开始制作一个 notion 板来跟踪进度,但还不完整。可以在这里查看。