2024 年自制大语言模型玩具指南
2024 年到了,DIY LLM 玩具?现在完全是一件事了。不需要任何技术魔法,只需要你的好奇心。我冒险尝试,将一些编码与大量的乐趣混合在一起,然后“砰”地创建了我自己的会说话的玩具。如果您想轻松打造人工智能伙伴,那么您来对地方了。让我们一起揭开科技的神秘面纱,让您的人工智能朋友栩栩如生。在技术与日常生活日益交织的世界中,创建自己的大语言模型玩具不仅可以揭开人工智能的神秘面纱,还可以为您提供通往互动技术奇迹的个性化大门。
我们先来看看最终的效果。
老实说,这真是太棒了。准备开始?让我们深入了解一下吧!
它是如何工作的?
共有三个关键步骤:
- 录音:通过 UDP 接收玩具发送的实时录音数据,并调用 STT(Sound-To-Text)API 将声音转换为文本。
- 思考:收到前面的文本后,立即调用 LLM(Large-Language-Model)API,以流式方式获取 LLM 生成的句子。然后,调用 TTS(文本转声音)API 将句子转换为人类语音。
- 播放音频:玩具会接收 FoloToy Server 生成的 TTS(Text-To-Sound)音频文件流,并按照顺序播放。
开发前准备
在开始制作 LLM 玩具之前,了解必要的硬件、软件和技术知识至关重要。本节将指导您准备所有必需品以确保顺利开始。
硬件
Folotoy Core:ChatGPT AI 语音对话核心板作为您项目的大脑,实现与 AI 的语音交互。
玩具组件:麦克风、扬声器、按钮、开关和电源等必需品是必需的。我将使用 Alilo Honey Bunny G6 进行即用型设置。
八爪鱼 AI 开发套件(其他选择):非常适合那些希望用人工智能功能改造现有玩具的人。
购买时,请提供我的促销代码 F-001–9 以获得折扣。
服务器
利用您自己的机器(例如 MacBook Pro),确保您的玩具拥有可靠的后端来处理和响应语音交互。或者,Google Cloud Engine (GCE) 等云服务可以扩展您的项目以实现更广泛的应用。
知识
- Docker(必需):了解 Docker 对于在容器中部署软件、使项目可移植和可扩展至关重要。我用它来启动 Folo 服务器。
- Git(必需):版本控制对于管理项目的代码库至关重要。我用它来管理 Folo 服务器代码库。
- MQTT(可选):如果您的目标是高级定制,熟悉 MQTT(一种轻量级消息协议)将有利于玩具和服务器之间的通信。
- EMQX(可选):适用于 IoT、IIoT 和车联网的开源 MQTT 代理。用于管理您的玩具。
- ollama(可选):如果 你想在本地运行大型语言模型,这是一个不错的选择。
服务与注册
为了让你的玩具变得栩栩如生,你需要访问特定的人工智能服务。对于这个项目,我选择使用 OpenAI 的产品:
- TTS(文本转语音):OpenAI 的 Whisper 服务将 AI 的文本响应转换为语音,使交互变得自然。
- LLM(大型语言模型):利用 OpenAI 的模型来理解和生成类似人类的文本响应。
- STT(语音转文本):OpenAI 的 TTS 服务将口语单词转录为文本,使 AI 能够理解语音命令或查询。
最重要的是,您需要在OpenAI 平台上注册并创建密钥,像 sk-...i7TL
。
组装你的玩具
现在是时候将所有部分组合在一起并制作您自己的 LLM 玩具了。
大致步骤如下,建议先观看视频教程。
- 检查 Alilo G6 的录音和播放是否正常。
- 使用螺丝刀拧下 Alilo G6 背面的 6 颗螺丝。
- 小心地打开 Alilo G6 的外壳,拔掉主板上的所有插头,先拔掉电源插头,插头上有胶水,可以用美工刀轻轻地切开,一定不要割伤手。
- 拧下主板上的 4 颗螺丝并将其取下。
- 将原来的主板更换为 FoloToy 的主板,并拧紧 3 颗螺丝固定。
- 插入麦克风、灯光、扬声器和电源插座,最后插入电源插座。
- 插入所有插座后,请勿关闭外壳或安装螺丝。首先打开兔子尾巴上的开关,看看新安装的灯是否能亮起并呈蓝色慢闪。
- 如果没有问题,安装外壳并拧紧螺丝即可完成更换过程。
设置服务器
强大的后端支持是让您的 LLM 玩具理解并响应语音命令的关键。本节将教您如何克隆服务器代码库、配置服务器以及启动 Docker 容器,以确保您的玩具拥有稳定的后端支持。 首先从 GitHub 克隆 Folo 服务器代码库。
git clone [email protected]:FoloToy/folotoy-server-self-hosting.git
然后将文件docker-compose.yml
中的基本服务器配置更改为您自己的。
名称 | 描述 | 示例 |
---|---|---|
OPENAI_OPENAI_KEY | 您的 OpenAI API 密钥。 | sk-...i7TL |
OPENAI_TTS_KEY | 您的 OpenAI API 密钥。 | sk-...i7TL |
OPENAI_WHISPER_KEY | 您的 OpenAI API 密钥。 | sk-...i7TL |
AUDIO_DOWNLOAD_URL | 音频文件的 URL。 | http://192.168.xx:8082 |
SPEECH_UDP_SERVER_HOST | 您的服务器的 IP 地址。 | 192.168.xx |
然后在config/roles.json
文件中配置你的角色,这里是一个最小的例子,完整的配置请参考Flotoy 文档 。
{
"1": {
"start_text": "你好,需要帮忙吗?",
"prompt": "You are a helpful assistant."
}
}
然后启动 Docker 容器。
docker compose up -d
我在自己的机器上运行 Folo 服务器,如果你想在云端运行,几乎是一样的。需要注意的一点是,您需要将端口 1883、8082、8085、18083 和 8083 暴露到公共网络。 有关更多信息,请参阅 Flotoy 文档。
与你的玩具聊天
一切准备就绪后,就可以与您的 LLM 玩具进行互动了。
打开玩具背面的开关即可开机。耳朵里的蓝色闪烁灯表示玩具已进入配对模式。
打开手机或电脑,选择“FoloToy-xxxx ”无线网络。稍后,您的手机或电脑将自动打开一个配置页面,您可以在其中设置要连接的 WiFi 网络(SSID 和密码),以及服务器地址(如 192.168.xx)和端口号(保留默认的 1883)。
配置网络并连接到服务器后,按中间的大圆形按钮开始对话。当您停止说话后,FoloToy 会发出一声蜂鸣声来指示录音结束。 周围的 7 个圆形小按钮是角色切换按钮。点击后,角色切换生效。
调试
无论是服务器还是玩具,都可能会遇到一些技术问题。本节将提供一些基本的调试技巧和工具,帮助您诊断和解决可能出现的问题,确保您的 LLM 玩具能够顺利运行。
服务器调试
要检查服务器日志,请运行以下命令。
docker compose logs -f
可以在 docker-compose.yml
文件中设置 LOG_LEVEL 来控制日志级别。
玩具调试
Folo Toy 提供了一种通过 USB 串口调试玩具的简单方法。您可以使用Folo Toy Web Tool来调试玩具。
- 使用 USB 线将玩具与计算机连接。
- 打开 Folo Toy Web Tool,然后单击“控制台”按钮连接到玩具。
- 连接后,您应该能够在控制台中看到设备的实时日志。 玩具上还有一个 LED,它会亮起不同颜色来指示玩具的状态 。
MQTT 调试
打开 EMQX Dashboard 查看 MQTT 消息。默认用户名是 admin,密码是 public。不管怎样,登录后请将密码更改为安全的密码。
高级定制
对于想要进一步探索和定制自己的 LLM 玩具的高级用户,本节将介绍如何在本地运行大型语言模型、使用 CloudFlare AI Gateway 等工具以及定制角色的声音。这将为您打开 DIY LLM 玩具更广阔的世界。
本地运行大语言模型
在本地运行大型语言模型是一件有趣的事情。您可以运行 Llama 2、Gemma 以及来自世界各地的各种开源大型模型,甚至是您自己训练的模型。使用 ollama,你可以轻松做到。 先安装 ollama,然后运行以下命令运行 Llama 2 模型。
ollama run llama2
然后,更改角色配置以使用本地 LLM 模型。
{
"1": {
"start_text": "你好,需要帮忙吗?",
"prompt": "You are a helpful assistant.",
"llm_type": "ollama",
"llm_config": {
"api_base": "http://host.docker.internal:11434",
"model": "llama2"
}
}
}
api_base 应该是你的 ollama 服务器地址,并且不要忘记重新启动 Folo 服务器以使更改生效。
docker compose restart folotoy
就这样,将模型更改为 Gemma 或您喜欢的其他模型,然后享受它。
使用 CloudFlare AI 网关
Cloudflare 的 AI 网关让您能够了解并控制您的 AI 应用程序。通过将您的应用程序连接到 AI Gateway,您可以通过分析和日志记录来了解人们如何使用您的应用程序,然后通过缓存、速率限制以及请求重试、模型回退等功能来控制应用程序的扩展方式。
首先,您需要创建一个新的 AI 网关。
然后编辑docker-compose.yml
文件将 OPENAI_OPENAI_API_BASE 更改为您的 AI 网关的地址,如下所示:
services:
folotoy:
environment: OPENAI_OPENAI_API_BASE=https://gateway.ai.cloudflare.com/v1/${ACCOUNT_TAG}/${GATEWAY}/openai
然后,您可以通过仪表板查看有关请求、令牌、缓存、错误和成本的指标。
以及一个日志记录页面,用于查看各个请求,例如提示、响应、提供程序、时间戳以及请求是否成功、缓存或是否存在错误。 太棒了,不是吗?
角色语音定制
您可以通过更改角色配置文件中的voice_name
字段来自定义角色的语音。
{
"1": {
"tts_type": "openai-tts",
"tts_config": {
"voice_name": "alloy"
}
}
}