明星机器人初创公司 Figure,携手 OpenAI 发布令人震撼的全新机器人演示。短短几周内,自 3 月 1 日宣布获得 OpenAI 等巨头投资后,Figure 迅速融合了 OpenAI 的前沿多模态大模型技术。这一突破让我萌生了一个大胆想法——自制一个由大模型加持的玩具,姑且叫他 Figure 3000 吧。
话不多说,先看看我的 Figure 01 平替版 Figure 3000 效果怎么样。
视频演示:https://mpvideo.qpic.cn/0bc3beaeqaaaoeamjwpznjsvacodjaeqasaa.f10002.mp4?
大家可以看到,虽然效果上对标 Figure 01 还是有些差距的,但是 Figure 3000 在成本上做到了遥遥领先,千元以内没有对手:
我也把 DIY 的过程记录下来,希望能帮助到大家。
先说说工作原理吧,方便大家理解,主要有三个关键步骤:
在开始制作你的 LLM(大型语言模型)玩具之前,了解所需的硬件、软件和技术知识至关重要。本节将指导你准备所有必需品,确保顺利开始。
FoloToy Core:GPT AI 语音交互核心板,作为项目的大脑,使得玩具能够与 AI 进行语音互动。(购买时,请提供我的促销代码 F-001-2 以获得折扣。)
玩具模具: 必须包含基础部件,如麦克风、扬声器、按钮、开关和电源等。这里我用了火火兔 G6 模具,因为它的外观和尺寸都很适合我的项目。家里的小朋友也喜欢这个玩具。
利用你自己的机器,比如 MacBookPro,确保你的玩具有一个可靠的后端来处理和响应语音交互。或者,用云服务器,比如阿里云、腾讯云等,步骤是一样的。
要让你的玩具变得生动,你需要访问特定的 AI 服务。对于这个项目,我选择了使用阿里灵杰 AI 开放服务,因为它提供了免费的语音识别和语音合成服务。你也可以选择其他服务。对于大型语言模型,我用了本地部署的 llama2,你可以根据自己喜好选择,基本上都是兼容的。
如果你使用的是各种大语言模型,你需要注册并获取 API 密钥,类似 sk-xxx,这个是你调用 API 的凭证。阿里的灵杰 AI 开放服务,你需要注册、创建应用并获取 app_key,access_key_id,access_key_secret。
现在是时候将所有部件组合起来,制作你自己的 LLM(大型语言模型)玩具了。
总体步骤如下,建议先观看视频教程[1]。
强大的后端支持是使你的 LLM 玩具理解和响应语音命令的关键。本节将教你如何克隆服务器代码库、配置服务器以及启动 Docker 容器,以确保你的玩具拥有稳定的后端支持。
首先从 GitHub 克隆 Folo 服务器代码库。
git clone git@github.com:FoloToy/folotoy-server-self-hosting.git
然后在 docker-compose.yml 文件中将基础服务器配置更改为你自己的配置。
名称 | 描述 | 示例 |
---|---|---|
AUDIO_DOWNLOAD_URL | 音频文件的 URL。 | http://192.168.x.x:8082 |
SPEECH_UDP_SERVER_HOST | 服务器的 IP 地址。 | 192.168.x.x |
LLM_TYPE | LLM 服务类型 | ollama |
OLLAMA_API_BASE | LLM API 地址 | http://host.docker.internal:11434 |
OLLAMA_MODEL | LLM 模型 | llama2 |
STT_TYPE | 语音识别服务类型 | aliyun-asr |
ALIYUN_ASR_ACCESS_KEY_ID | 阿里云语音识别的 access_key_id | xxx |
ALIYUN_ASR_ACCESS_KEY_SECRET | 阿里云语音识别的 access_key_secret | xxx |
ALIYUN_ASR_APP_KEY | 阿里云语音识别的 app_key | xxx |
TTS_TYPE | 语音合成服务类型 | aliyun-tts |
ALIYUN_TTS_ACCESS_KEY_ID | 阿里云语音合成的 access_key_id | xxx |
ALIYUN_TTS_ACCESS_KEY_SECRET | 阿里云语音合成的 access_key_secret | xxx |
ALIYUN_TTS_APP_KEY | 阿里云语音合成的 app_key | xxx |
注:阿里云的语音识别和语音合成的配置用同一个配置就行。
然后在 config/roles.json
文件中配置你的角色,这里是一个最小示例,完整配置请参考 FoloToy 文档。
{
"1": {
"start_text": "Hello, I'm Figure 3000. What can I do for you?",
"prompt": "You are a helpful assistant."
}
}
接着启动 docker 容器。
docker compose up -d
我在自己的机器上运行 Folo 服务器,如果你想在云端运行,几乎是相同的操作。需要注意的一点是,你需要将 1883、8082、8085、18083 和 8083 端口对公网开放,大部分云服务商都有防火墙设置,可以在控制台设置。
更多信息,请参考 FoloToy 文档[2]。
在本地运行大型语言模型是一件有趣的事情。你可以运行 Llama 2、Gemma 以及来自世界各地的所有种类的开源大型模型,甚至是你自己训练的模型。使用 ollama,你可以轻松做到这一点。首先安装 ollama,然后运行以下命令以运行 Llama 2 模型。
ollama run llama2
然后,更改角色配置以使用本地 LLM 模型。
{
"1": {
"start_text": "Hello, what can I do for you?",
"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 或其他模型,非常方便。我自己把大部分模型都试了一下,目前gemma:7b
是最香的,期待马斯克的 Grok-1。
一切准备就绪后,就是与你的 LLM 玩具互动的时刻了。开启玩具背后的开关进行通电,耳朵中的蓝色闪烁灯表明玩具已进入配对模式。
打开你的手机或电脑,选择“FoloToy-xxxx”无线网络。片刻之后,你的手机或电脑将自动打开一个配置页面,在这里你可以设置要连接的 WiFi 网络(SSID 和密码),以及 MQTT 服务器地址(如 192.168.x.x)和端口号(保持默认的 1883)。
配置完成并连接到服务器后,按下中间的大圆形按钮开始对话。你停止说话后,FoloToy 将发出哔的一声,表示录音结束。
周围的 7 个圆形小按钮是角色切换按钮。点击后,角色切换即刻生效。
无论是服务器还是玩具,你可能会遇到一些技术问题。本节将提供一些基本的调试技巧和工具,帮助你诊断和解决可能的问题,确保你的 LLM 玩具能够顺畅运行。
要检查服务器日志,请运行以下命令。
docker compose logs -f
在 docker-compose.yml
文件中可以设置 LOG_LEVEL 来控制日志级别。
Folo Toy 提供了基于 USB 串口的简便调试方式。你可以使用 Folo Toy Web 工具 来调试玩具。
玩具上还有一个 LED 灯,它会以不同的颜色指示玩具的状态。
打开 EMQX Dashboard 检查 MQTT 消息以及设备连接状态等。默认的用户名是 admin,密码是 public。无论如何,在你登录后将密码更改为一个安全的密码。
Folo Toy 还有很多高级的玩法,这里做个简单介绍,抛砖引玉。这一部分适合有一定技术基础的用户,如果你是初学者,可以先跳过。
Cloudflare 的 AI 网关让你能够获得对 AI 应用的可见性和控制权。通过将你的应用连接到 AI 网关,你可以通过分析和日志收集了解人们如何使用你的应用,然后利用缓存、速率限制以及请求重试、模型回退等功能来控制应用的规模。首先,你需要创建一个新的 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
字段,你可以自定义角色的语音。
Edge TTS 提供了许多可供选择的语音,像这样配置就行:
{
"1": {
"tts_type": "edge-tts",
"tts_config": {
"voice_name": "zh-CN-shaanxi-XiaoniNeural"
}
}
}
这样你的角色就能说陕西话了。
还有个更好玩的,阿里云云语音合成支持个性化人声定制,你可以用自己的声音进行训练,然后在角色配置文件中使用你的声音。这样就能用自己的分身给小朋友讲故事了,是不是很有趣?
声音训练完后会得到一个声音调用 ID,把这个 ID 放到角色配置文件中的 voice_id
字段就行。
{
"1": {
"tts_type": "aliyun-tts",
"tts_config": {
"voice_id": "voice-xxxxxxx"
}
}
}
对于更高级别的定制,比如知识库的支持。建议使用 Dify,它融合了 Backend as Service 和 LLMOps 的理念,涵盖了构建生成式 AI 原生应用所需的核心技术栈,包括一个内置 RAG 引擎。使用 Dify,你可以基于任何模型自部署类似 Assistants API 和 GPTs 的能力。重点说一下内置的 RAG 引擎,它是一个基于检索的生成式模型,可以用于问答、对话、文档摘要等任务。Dify 包括各种基于全文索引或向量数据库嵌入的 RAG 能力,允许直接上传 PDF、TXT 等各种文本格式。把你的知识库上传,就不用担心玩具不清楚背景知识而瞎扯了。
dify 可以自行部署或者直接使用 cloud 版本。在Folo 上的配置也非常简单:
{
"1": {
"llm_type": "dify",
"llm_config": {
"api_base": "http://192.168.52.164/v1",
"key": "app-AAAAAAAAAAAAAAAAAAa"
}
}
}
从工作原理来说,任意玩具都能够进行改造。Folo Toy 还提供了八爪鱼 AI 开发套件,它可以将任何普通的玩具转变为一个智能对话玩具。这款芯片小巧轻便,可以轻易地放入任何类型的玩具中,无论是毛绒玩具、塑料玩具,还是木制玩具,都能轻松适应。
我 DIY 了个陕西话的仙人掌。发挥你的想象力,你可以把它放进你喜欢的玩具中,动起手来也不是特别复杂:
服务端仍然是用的同一个,可以通过 sn 给不同的玩具分配不同的角色,这里就不展开了,可以查看官网的配置文档。
请注意,绝对不要将密钥公布在如 GitHub 这样的公共平台上,否则密钥可能会被滥用。如果你的密钥被泄露,请立即在平台上删除并重新生成一个新的密钥。
你还可以在 docker-compose.yml
中使用环境变量,并在启动容器时传入,以避免在代码中暴露密钥。
services:
folotoy:
environment:
- OPENAI_OPENAI_KEY=${OPENAI_OPENAI_KEY}
OPENAI_OPENAI_KEY=sk-...i7TL docker compose up -d
如果你希望使 FoloToy 服务器在互联网上公开可用,强烈建议加强 EMQX 服务的安全性,并且只允许通过密码访问 EMQX。
DIY 过程中遇到了各种问题,跟 FoloToy 团队也联系上了,他们的技术支持非常给力,帮助我解决了很多问题。如果想购买这款玩具,可以直接在淘宝上搜索 FoloToy(AI 智趣玩具),产品做得确实不错,这里给他们做个友情推广。
购买 Folo Toy 产品,在联系客服时提供我的促销代码 F-001-2,即可享受折扣。购买 Fofo G6 整机可以节省 20 元,购买 Octopus Dev Suit 可以节省 15 元,其他大部分商品也可享受10元折扣,具体请联系客服咨询。
参考:
[1]: https://www.bilibili.com/video/BV1kC4y157od/
[2]:https://docs.folotoy.com/zh/docs/configuration/roles_config/