# 语音查询

您可以将短音频片段发送至 Typesense,并将其作为查询文本的基础。语音片段需要以 base64 编码数据的形式发送,Typesense 将通过预配置的语音查询模型对其进行转录。

# 配置语音查询模型

要使用语音查询功能,我们首先需要为集合关联一个语音查询模型:

{
    "name": "products",
    "fields": [
        {"name": "name", "type": "string"}
    ],
    "voice_query_model": {
        "model_name": "ts/whisper/base.en"
    }
}

# 使用语音查询进行多搜索

您的音频文件必须是 16 kHz 16 位 WAV 格式。在 base64 编码之前,您应该先将音频文件转换为该格式。 您可以使用以下脚本通过 ffmpeg 进行转换:

ffmpeg -i <your_file> -ar 16000 -ac 1 -c:a pcm_s16le voice_query.wav

然后通过 multi_search API 发送 base64 编码的音频数据。

TIP

由于 GET /documents/search 端点对查询文本长度有限制,您应该使用多搜索来处理语音查询。

{
    "searches": [
        {
            "collection": "products",
            "query_by": "name",
            "voice_query": "<base64 encoded audio file>"
        }
    ]
}

与文本嵌入模型类似,如果您为 Typesense 配置了 GPU 支持 或在 Typesense Cloud 上选择支持 GPU 的实例,Whisper 模型将在 GPU 上运行。

以下是一个简单的脚本,您可以使用 sox 从命令行录制 5 秒语音片段,进行 base64 编码,并通过 curl 请求发送到 Typesense:

VOICE_QUERY=$(sox -d -r 16000 -b 16 -c 1 -e signed-integer output.wav trim 0 5 && cat output.wav | base64)

curl 'http://localhost/multi_search' \
      -X 'POST' \
      -H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}" \
      --data-binary '
          {
            "searches": [
              {
                "collection": "products",
                "query_by": "name",
                "voice_query": "'${VOICE_QUERY}'"
              }
            ]
          }
      '