La fonction AI_AUDIO_TRANSCRIBE transcrit l'audio en texte. Utilisez cette fonction pour indexer les enregistrements d'appels du service client, générer des comptes rendus de réunion, traiter les messages vocaux et archiver le contenu de podcasts.
Avant de transcrire vos propres enregistrements, assurez-vous d'avoir respecté les obligations de notification d'enregistrement et d'avoir obtenu les autorisations nécessaires. Nous vous recommandons d'utiliser des URL multimédias éphémères avec le principe du moindre privilège, et de limiter la durée de conservation de l'audio original et du texte transcrit conformément à votre politique de rétention des données du service client.
Format de commande
REST API
REST API
@id="c0004a7x2t"
{
"model_name": "qwen3-asr-flash",
"texts": ["<audio_url>"],
"params": {
"language": "zh",
"enable_itn": true,
"max_concurrency": 1
}
}
@id="cmdpysecaud01"
@id="cmdpyhaud0001"
Python
Python
@id="cmdpycodaud01"
schema = MilvusClient.create_schema(auto_id=True, enable_dynamic_field=False)
schema.add_field("id", DataType.INT64, is_primary=True)
schema.add_field("audio_url", DataType.VARCHAR, max_length=4096)
schema.add_field("transcript", DataType.VARCHAR, max_length=4096)
schema.add_field("dummy_vector", DataType.FLOAT_VECTOR, dim=2)
schema.add_function(
Function(
name="transcribe_audio",
function_type=texttransform_function_type(),
input_field_names=["audio_url"],
output_field_names=["transcript"],
params={
"provider": "aliyun_milvus",
"model_name": "qwen3-asr-flash",
"task": "ai_audio_transcribe",
"language": "zh",
"enable_itn": "true",
},
)
)
Paramètres
| @id="p0048a7x2t" Paramètre | @id="p0050a7x2t" Description |
@id="p0010a7x2t" model_name |
@id="p0012a7x2t" Obligatoire. Utilisez qwen3-asr-flash. |
@id="p0015a7x2t" texts |
@id="p0017a7x2t" Obligatoire pour REST. Tableau d'URL audio. Ne doit pas contenir de chaînes vides. Les résultats correspondent à l'ordre d'entrée. |
@id="p0020a7x2t" language |
@id="p0022a7x2t" Facultatif. Code de la langue source, par exemple zh ou en. |
@id="p0025a7x2t" enable_itn |
@id="p0027a7x2t" Facultatif. Booléen. Si activé, normalise les nombres parlés et les expressions similaires sous forme écrite. |
@id="p0030a7x2t" timeout_sec / max_concurrency |
@id="p0032a7x2t" Facultatif. Contrôle respectivement le délai d'expiration de l'appel et le nombre de traitements simultanés pour plusieurs fichiers audio. |
@id="p0035a7x2t" media_type |
@id="p0037a7x2t" Peut être omis ou défini sur audio. Toute autre valeur provoque une erreur. |
| @id="p0040a7x2t" Autres | @id="p0042a7x2t" Les paramètres de modèle personnalisés tels que prompt et temperature ne sont pas pris en charge. L'accessibilité de l'URL audio, ainsi que les formats et durées pris en charge, dépendent des limitations du service de modèle. |
Valeurs de retour
data.output.outputs renvoie le texte transcrit correspondant à chaque entrée audio, dans l'ordre. usage.audio_tokens indique l'utilisation des jetons audio, et usage.seconds indique la durée audio traitée.
{
"code": 0,
"data": {
"output": {"outputs": ["<transcript>"]},
"usage": {"audio_tokens": 256, "total_tokens": 256, "seconds": 45}
}
}
Exemple : Transcrire un enregistrement du service client
L'exemple suivant convertit un message d'accueil de hotline en texte pour l'archivage des versions et la révision manuelle, afin de vérifier si les heures de service, les notifications d'enregistrement et autres contenus sont clairement exprimés. Les champs qui n'apparaissent pas dans la transcription doivent être marqués comme « non confirmé » et ne peuvent pas être complétés par le modèle.
Le fichier public par défaut welcome.mp3 est un message d'accueil en chinois ; l'exemple utilise language=zh. Lorsque vous remplacez AIFUNC_AUDIO_URL, mettez également à jour AIFUNC_AUDIO_LANGUAGE avec la langue source réelle. L'exemple cURL nécessite jq.
REST API
REST API
@id="c0058a7x2t"
#!/usr/bin/env bash
set -euo pipefail
MILVUS_REST_BASE_URL="http://c-xxxx.milvus.aliyuncs.com:19530"
MILVUS_AUTH_TOKEN="<yourUsername>:<yourPassword>"
post_json() {
local path="$1"
local body="$2"
curl -X POST \
"$MILVUS_REST_BASE_URL$path" \
-H "Authorization: Bearer $MILVUS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d "$body"
}
MODEL_NAME="qwen3-asr-flash"
AUDIO_URL="${AIFUNC_AUDIO_URL:-https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3}"
BODY=$(cat <<JSON
{
"model_name": "$MODEL_NAME",
"texts": ["$AUDIO_URL"],
"params": {"language": "zh", "enable_itn": true, "max_concurrency": 1}
}
JSON
)
RESPONSE_BODY="$(post_json "/v2/vectordb/ai/audio_transcribe" "$BODY")"
if command -v jq >/dev/null 2>&1; then
echo "$RESPONSE_BODY" | jq .
[ "$(echo "$RESPONSE_BODY" | jq -r '.code // -1')" = "0" ] || exit 1
else
echo "$RESPONSE_BODY"
fi
@id="pt0059a7x2t"
@id="h0060a7x2t"
Python
Python
@id="c0061a7x2t"
from __future__ import annotations
from typing import Any
from pymilvus import DataType, Function, FunctionType, MilvusClient
MILVUS_URI = "http://c-xxxx.milvus.aliyuncs.com:19530"
MILVUS_TOKEN = "<yourUsername>:<yourPassword>"
DUMMY_VECTOR_DIM = 2
TEXTTRANSFORM_FUNCTION_TYPE = 9
def texttransform_function_type() -> Any:
for type_name in ("TEXTTRANSFORM", "TEXT_TRANSFORM", "TextTransform"):
function_type = getattr(FunctionType, type_name, None)
if function_type is not None:
return function_type
# Alibaba Cloud Milvus provides TEXTTRANSFORM as a hosted extension (function type value 9);
# some pymilvus versions do not yet have this enum member built in, while Function(...) validates via FunctionType(...).
existing = getattr(FunctionType, "_value2member_map_", {}).get(TEXTTRANSFORM_FUNCTION_TYPE)
if existing is not None:
return existing
extension = int.__new__(FunctionType, TEXTTRANSFORM_FUNCTION_TYPE)
extension._name_ = "TEXTTRANSFORM"
extension._value_ = TEXTTRANSFORM_FUNCTION_TYPE
FunctionType._value2member_map_[TEXTTRANSFORM_FUNCTION_TYPE] = extension
FunctionType._member_map_["TEXTTRANSFORM"] = extension
return extension
def add_id(schema: Any) -> None:
schema.add_field("id", DataType.INT64, is_primary=True)
def add_dummy_vector(schema: Any) -> None:
schema.add_field("dummy_vector", DataType.FLOAT_VECTOR, dim=DUMMY_VECTOR_DIM)
def run_texttransform_example(*, client, collection_name, input_fields, output_field, function_name, function_params, rows) -> None:
if client.has_collection(collection_name):
client.drop_collection(collection_name)
schema = MilvusClient.create_schema(auto_id=True, enable_dynamic_field=False)
add_id(schema)
for name, data_type, max_length in input_fields:
field_params = {"max_length": max_length} if max_length is not None else {}
schema.add_field(name, data_type, **field_params)
output_name, output_data_type, output_max_length = output_field
output_params = {"max_length": output_max_length} if output_max_length is not None else {}
schema.add_field(output_name, output_data_type, **output_params)
add_dummy_vector(schema)
schema.add_function(
Function(
name=function_name,
function_type=texttransform_function_type(),
input_field_names=[name for name, _, _ in input_fields],
output_field_names=[output_name],
params=function_params,
)
)
index_params = client.prepare_index_params()
index_params.add_index(field_name="dummy_vector", index_type="AUTOINDEX", metric_type="COSINE")
client.create_collection(collection_name=collection_name, schema=schema, index_params=index_params)
client.insert(collection_name, rows)
client.flush(collection_name)
fields = [name for name, _, _ in input_fields] + [output_name]
for row in client.query(collection_name, filter="", output_fields=fields, limit=len(rows)):
print(row)
MODEL_NAME = "qwen3-asr-flash"
client = MilvusClient(uri=MILVUS_URI, token=MILVUS_TOKEN)
run_texttransform_example(
client=client,
collection_name="simple_ai_audio_transcribe_schema",
input_fields=[("audio_url", DataType.VARCHAR, 4096)],
output_field=("transcript", DataType.VARCHAR, 4096),
function_name="transcribe_audio",
function_params={"provider": "aliyun_milvus", "model_name": MODEL_NAME, "task": "ai_audio_transcribe", "language": "zh", "enable_itn": "true"},
rows=[{"audio_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3", "dummy_vector": [0.1, 0.2]}],
)
Résultat attendu : data.output.outputs[0] contient une transcription de message d'accueil non vide ne dépassant pas 10 000 caractères, qui peut être écrite dans le champ transcript de l'archive de version de la hotline (retour de test réel, rendu en anglais : Welcome to Alibaba Cloud. ; l'API renvoie la transcription dans la langue source de l'audio).
{"code": 0, "data": {"output": {"outputs": ["Welcome to Alibaba Cloud."]}}}
Pour le scénario Python, nommez le champ d'entrée audio_url et le champ de sortie transcript. La fonction effectue automatiquement la transcription lors de l'insertion.