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 的语音交互。
玩具组件:麦克风、扬声器、按钮、开关和电源等必需品是必需的。我将使用火火兔 G6 进行即用型设置。
八爪鱼 AI 开发套件(其他选择):非常适合那些希望用人工智能功能改造现有玩具的人。
邀请码 F-001–6 有惊喜。
服务器
利用您自己的机器(例如 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 git@github.com: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"
}
}
}
在OpenAI TTS 语音列表中找到您喜欢的语音。 Edge tts 有多种声音可供选择,配置如下:
{
"1": {
"tts_type": "edge-tts",
"tts_config": {
"voice_name": "en-NG-EzinneNeural"
}
}
}
知识库支持
用于更高级别的定制,例如知识库支持。推荐使用 Dify,它结合了后端即服务和 LLMOps 的概念,涵盖了构建生成式 AI 原生应用程序所需的核心技术堆栈,包括内置的 RAG 引擎。借助 Dify,您可以基于任何模型自行部署 Assistants API 和 GPT 等功能。
我们重点关注内置的 RAG 引擎,它是一个基于检索的生成模型,可用于问答、对话和文档摘要等任务。 Dify 包含基于全文索引或向量数据库嵌入的各种 RAG 功能,允许直接上传 PDF 和 TXT 等各种文本格式。上传你的知识库,这样你就不用担心玩具因为不了解背景知识而胡言乱语了。 Dify 可以自行部署,也可以直接使用云版本。 Folo 上的配置也非常简单:
{
"1": {
"llm_type": "dify",
"llm_config": {
"api_base": "http://192.168.52.164/v1",
"key": "app-AAAAAAAAAAAAAAAAAAa"
}
}
}
定制玩具形状
从工作原理上来说,任何玩具都可以进行改造。 Folo Toy 还提供 Octopus AI 开发套件,可以将任何普通玩具变成智能说话玩具。该芯片体积小、重量轻,可以轻松安装到任何类型的玩具中,无论是毛绒玩具、塑料玩具还是木制玩具。
我 DIY 了一个陕西仙人掌。发挥你的想象力,你可以把它放进你喜欢的玩具里,而且做起来也不是特别复杂:
- 打开玩具
- 将 Octopus AI 开发套件放入其中
- 关闭玩具
服务器仍然使用相同的服务器。可以通过 sn 给不同的玩具分配不同的角色,这里不再展开。您可以在官网查看配置文档。
安全说明
请注意,切勿将密钥放在公共场所,例如 GitHub,否则会被滥用。如果您的密钥泄露,请立即在 OpenAI 平台上将其删除并生成新的密钥。 您还可以在docker-compose.yml
中使用环境变量,并在启动容器时传入,以避免暴露代码中的密钥。
services:
folotoy:
environment:
- OPENAI_OPENAI_KEY=${OPENAI_OPENAI_KEY}
OPENAI_OPENAI_KEY=sk-...i7TL docker compose up -d
如果您希望在 Internet 上公开使用 FoloToy 服务器,强烈建议保护 EMQX 服务并仅允许使用密码访问 EMQX。了解更多关于 EMQX 安全。
结论
制作自己的 LLM 玩具是进入人工智能和技术世界的激动人心的旅程。无论您是 DIY 爱好者还是初学者,本指南都提供了创建真正互动和个性化内容的路线图。
对于那些喜欢现成解决方案的人,可以淘在宝 AI智趣玩具 buy 成品。此选项无需组装即可提供相同的交互体验。 Folo 玩具还提供许多其他产品,可以在此处找到。
referral 码 F-001–6 可享受优慧价。
踏上这一创意之旅,将您的人工智能伴侣带入生活,挖掘法学硕士玩具在教育、娱乐等领域的巨大潜力。
参考链接: