FoloToy AI 玩具是如何工作的?
FoloToy 出品的所有玩具(包括电路板)作为客户端连接玩具服务,玩具服务我们提供了folotoy-server的docker自部署镜像,可以轻易的部署在各种 Linux 发行版系统上,包括 Debian/Ubuntu/CentOS等等,自部署镜像配置下载地址为:
- 自部署镜像:https://github.com/FoloToy/folotoy-server-self-hosting
- 部署教程:https://docs.folotoy.com/zh/docs/installation/start 玩具服务 folotoy-server 主要由以下3个部分组成
- 语音转文本:服务程序通过互联网接收玩具发送的实时录音数据,并调用 STT(声音转文本)API 将声音转换为文本。目前支持的 STT 选项包括:openai-whisper、azure-stt、azure-whisper、dify-stt、aliyun-asr 等,点击查看支持的STT完整列表。
- 调用大模型生成文本:在接收到上述文本后,立即调用 LLM(大型语言模型)API以流式方式获取 LLM 生成的句子。然后,调用 TTS(文本转语音)API 将句子转换为人类语音。目前支持的 LLM 选项包括:openai、 azure-openai、gemini、qianfan、dify或由 One-Api 代理的 LLM,以及与 OpenAI 接口兼容的其他大模型服务,如 moonshot 等, 点击查看支持的LLM或者Agent完整列表。
- 文本转语音:玩具将接收由FoloToy服务器生成的 TTS(文本转语音)音频文件流,并按顺序播放它们。目前支持的 TTS 选项包括: openai-tts、 azure-tts、 elevenlabs、 aliyun-tts、dify-tts、edge-tts(免费)等,点击查看支持的TTS完整列表。
FoloToy AI玩具调用的接口,支持了LLM行业的通行的做法,即完全兼容 OpenAI 的接口,在了解工作原理之后,只需要提供 OpenAI 接口格式相同RESTful接口,给folotoy-server调用,就能实现让玩具使用自定义的STT/LLM/TTS服务,如图所示:
接下来介绍如何实现蓝色圆圈的部分服务
实现和调用自定义服务
实现支持 OpenAI 接口的自定义服务之后可以通过修改 docker-compose.yml 或者 roles.json 文件来调用。docker-compose.yml 为修改全局变量,roles.json 可以针对角色进行修改,roles.json 配置的优先级高于 docker-compose.yml。
自定义 STT 服务
接口说明
自行实现 STT 服务 RESTful 接口说明,详情请参考 OpenAI STT 接口:https://platform.openai.com/docs/api-reference/audio/createTranscription
实现好接口之后需要支持以下的调用:
curl http://api.your_company.com/v1/audio/transcriptions \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/audio.mp3" \
-F model="whisper-1"
配置使用
修改 docker-compose.yml 中的配置让 folotoy-server 使用自行实现的接口,如下:
STT_TYPE: openai-whisper
OPENAI_WHISPER_API_BASE: http://api.your_company.com/v1
OPENAI_WHISPER_KEY: sk-xxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_WHISPER_MODEL: whisper-1
修改好 docker-compose.yml 之后记得执行 sudo docker compose up -d 来重建服务
参考实现
我们提供了开源的实现作为参考
- 使用开源 faster-whisper 实现的 stt 服务:https://github.com/lewangdev/faster-whisper/blob/master/openaiapi.py
- 使用阿里开源的 SenseVoice 实现的 stt 服务:https://github.com/lewangdev/SenseVoice/blob/main/openaiapi.py
自定义 LLM 服务
接口说明
自行实现 LLM 服务 RESTful 接口说明,详情请参考 OpenAI LLM 接口:https://platform.openai.com/docs/api-reference/chat/create,玩具服务仅支持流式接口,即 stream 只能为 true
实现好接口之后需要支持以下的调用:
curl http://api.your_company.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"model": "your_model_name",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
],
"stream": true
}'
配置使用
修改 docker-compose.yml 中的配置让 folotoy-server 使用自行实现的接口,如下:
LLM_TYPE: openai
OPENAI_OPENAI_API_BASE: http://api.your_company.com/v1
OPENAI_OPENAI_MODEL: your_model_name
OPENAI_OPENAI_KEY: sk-xxxxxxxxxxxxxxxxxxxxxxxxx
修改好 docker-compose.yml 之后记得执行 sudo docker compose up -d 来重建服务
参考实现
我们提供了开源的实现作为参考
- 使用开源 ChatGML3 实现的 llm 服务:https://github.com/THUDM/ChatGLM3/blob/main/openai_api_demo/api_server.py
自定义 TTS 服务
接口说明
自行实现 TTS 服务 RESTful 接口说明,详情请参考 OpenAI TTS 接口:https://platform.openai.com/docs/api-reference/audio/createSpeech
实现好接口之后需要支持以下的调用:
curl https://api.openai.com/v1/audio/speech \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-100",
"input": "The quick brown fox jumped over the lazy dog.",
"voice": "guodegang"
}' \
--output speech.mp3
配置使用
修改 docker-compose.yml 中的配置让 folotoy-server 使用自行实现的接口,如下:
TTS_TYPE: openai-tts
# OpenAI TTS
OPENAI_TTS_API_BASE: http://api.your_company.com/v1
OPENAI_TTS_KEY: sk-xxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_TTS_MODEL: tts-100
OPENAI_TTS_VOICE_NAME: guodegang
修改好 docker-compose.yml 之后记得执行 sudo docker compose up -d 来重建服务
参考实现
我们提供了开源的实现作为参考
- 使用网易开源的 EmotiVoice 实现的 tts 服务:https://github.com/netease-youdao/EmotiVoice/blob/main/openaiapi.py
- 使用阿里开源的 CosyVoice 实现的 tts 服务:https://github.com/lewangdev/CosyVoice/blob/main/openaiapi.py
- 使用 MyShell 开源的 OpenVoice 实现的 tts 服务:https://github.com/lewangdev/OpenVoice/blob/v1/openaiapi.py