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 来重建服务

参考实现

我们提供了开源的实现作为参考

自定义 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 来重建服务

参考实现

我们提供了开源的实现作为参考

自定义 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 来重建服务

参考实现

我们提供了开源的实现作为参考