Todos os produtos
Search
Central de documentação

Hologres:AI_TRANSCRIBE

Última atualização: Jun 28, 2026

A função AI_TRANSCRIBE converte arquivos de áudio em dados de texto estruturados. Baseada em modelos de reconhecimento de fala do Alibaba Cloud Model Studio, ela oferece diversos modos de granularidade de timestamp para atender a cenários como transcrição de reuniões, geração de legendas e diarização de falantes.

Cenários

  • Transcrição de reuniões: converta gravações de reuniões em texto para arquivamento e pesquisa.

  • Geração de legendas: segmente o áudio no nível da frase e gere legendas com timestamps.

  • Diarização de falantes: identifique diferentes interlocutores em áudios com múltiplas vozes, ideal para atas de reunião.

  • Aprendizado de idiomas: habilite a reprodução palavra por palavra e exercícios de leitura acompanhada para aplicativos de ensino de línguas.

Limites

  • Hologres V4.2 ou superior.

  • Configure o acesso ao OSS para ler arquivos de áudio armazenados nesse serviço.

  • Implante um modelo de reconhecimento de fala no console do Hologres usando o processo de implantação de modelos gerenciados. Não é necessário configurar uma chave de API. Para mais informações, consulte Modelos gerenciados.

Sintaxe

AI_TRANSCRIBE(model, audio_file [, options])

Parâmetros

Parâmetro

Tipo de dado

Obrigatório

Descrição

model

TEXT

Sim

Nome do modelo. Implante-o no console do Hologres como modelo gerenciado antes de usá-lo. Para mais detalhes, consulte Modelos gerenciados.

audio_file

FILE

Sim

Arquivo de áudio obtido pela função to_file() ou por uma Object Table.

options

JSONB

Não

Opções de configuração. Exige conversão explícita com ::jsonb.

Opções

Parâmetro

Tipo de dado

Padrão

Descrição

timestamp_granularity

TEXT

'none'

Modo de granularidade do timestamp. Valores válidos: 'none', 'sentence', 'speaker' e 'word'.

Modos de granularidade de timestamp

O parâmetro timestamp_granularity aceita os seguintes valores:

  • none (padrão): converte todo o arquivo de áudio em um único bloco de texto. Adequado para cenários de RAG. A saída contém os campos text e duration.

  • sentence: segmenta a transcrição no nível da frase. Ideal para gerar legendas. O resultado inclui um array segments em que cada item contém os campos start, end e text.

  • speaker: identifica diferentes interlocutores em áudios com várias vozes. Adequado para atas de reunião. A resposta apresenta um array segments no qual cada elemento também inclui o campo speaker_id.

  • word: fornece timestamps no nível da palavra. Útil para busca em áudio e vídeo e para aplicações de aprendizado de idiomas. A saída traz um array segments com os campos start, end e text referentes a cada palavra.

Nota

O parâmetro options exige conversão explícita com ::jsonb. Caso contrário, ocorrerá um erro de função ambígua.

Uso correto:

SELECT AI_TRANSCRIBE('fun_asr', file, '{"timestamp_granularity": "sentence"}'::jsonb);

Uso incorreto (falta o ::jsonb):

SELECT AI_TRANSCRIBE('fun_asr', file, '{"timestamp_granularity": "sentence"}');
-- Error: function ai_transcribe(unknown, file, unknown) is not unique

Exemplos

Nota

Os arquivos de áudio dos exemplos abaixo pertencem ao conjunto de dados aberto de fala em reuniões AliMeeting. Substitua o caminho do OSS, o endpoint e o ARN da função RAM pelos seus próprios valores.

Os exemplos usam oss-cn-beijing-internal.aliyuncs.com como endpoint do OSS porque o serviço do modelo FunASR está implantado na região China (Beijing). Ao usar um endpoint interno, o bucket do OSS deve estar na mesma região do serviço de modelo.

Exemplo 1: Transcrição básica (modo none)

SELECT AI_TRANSCRIBE(
  'fun_asr',
  TO_FILE(
    'oss://xxxx/audio/alimeeting_audio/R8003_M8001_N_SPK8002.wav',
    'oss-cn-beijing-internal.aliyuncs.com',
    'acs:ram::xxx:role/xxxx'
  )
);

Saída de exemplo:

{
  "text": "So what did you need to see me about? Well, the thing is, I called you in today to discuss the student exchange event planning. I'd like to hear your thoughts on how to organize it, so we can exchange ideas.",
  "duration": 15.2
}

Exemplo 2: Segmentação no nível da frase (modo sentence)

SELECT AI_TRANSCRIBE(
  'fun_asr',
  TO_FILE(
    'oss://xxxx/audio/alimeeting_audio/R8003_M8001_N_SPK8002.wav',
    'oss-cn-beijing-internal.aliyuncs.com',
    'acs:ram::xxx:role/xxxx'
  ),
  '{"timestamp_granularity": "sentence"}'::jsonb
);

Saída de exemplo:

{
  "duration": 15.2,
  "segments": [
    {"start": 0.16, "end": 3.48, "text": "So what did you need to see me about?"},
    {"start": 3.72, "end": 15.04, "text": "Well, the thing is, I called you in today to discuss the student exchange event planning. I'd like to hear your thoughts on how to organize it, so we can exchange ideas."}
  ]
}

Exemplo 3: Diarização de falantes (modo speaker)

SELECT AI_TRANSCRIBE(
  'fun_asr',
  TO_FILE(
    'oss://xxxx/audio/alimeeting_audio/R8007_M8010_N_SPK8054.wav',
    'oss-cn-beijing-internal.aliyuncs.com',
    'acs:ram::xxx:role/xxxx'
  ),
  '{"timestamp_granularity": "speaker"}'::jsonb
);

Saída de exemplo:

{
  "duration": 45.6,
  "segments": [
    {"start": 0.5, "end": 8.2, "speaker_id": 0, "text": "Hi everyone, let's discuss the project progress today."},
    {"start": 8.5, "end": 20.3, "speaker_id": 1, "text": "Sure. The frontend development is 80% complete on my end. I expect to start integration testing next week."},
    {"start": 20.8, "end": 35.1, "speaker_id": 0, "text": "How about the backend? Can you keep up with the timeline?"},
    {"start": 35.5, "end": 45.2, "speaker_id": 2, "text": "The backend APIs are ready. We are waiting for the frontend integration."}
  ]
}

Exemplo 4: Timestamps no nível da palavra (modo word)

SELECT AI_TRANSCRIBE(
  'fun_asr',
  TO_FILE(
    'oss://xxxx/audio/alimeeting_audio/R8003_M8001_N_SPK8002.wav',
    'oss-cn-beijing-internal.aliyuncs.com',
    'acs:ram::xxx:role/xxxx'
  ),
  '{"timestamp_granularity": "word"}'::jsonb
);

Saída de exemplo (parcial):

{
  "duration": 15.2,
  "segments": [
    {"start": 0.16, "end": 0.52, "text": "So"},
    {"start": 0.52, "end": 0.88, "text": "what"},
    {"start": 0.88, "end": 1.24, "text": "did"},
    {"start": 1.24, "end": 1.60, "text": "you"},
    {"start": 1.60, "end": 1.96, "text": "need"},
    {"start": 1.96, "end": 2.32, "text": "to"},
    {"start": 2.32, "end": 2.68, "text": "see"},
    {"start": 2.68, "end": 3.04, "text": "me"},
    {"start": 3.04, "end": 3.48, "text": "about"}
  ]
}

Exemplo 5: Transcrição em lote com Object Table

-- Create an Object Table
CREATE OBJECT TABLE audio_files WITH (
  path = 'oss://xxxx/audio/alimeeting_audio/',
  oss_endpoint = 'oss-cn-beijing-internal.aliyuncs.com',
  role_arn = 'acs:ram::xxx:role/xxxx'
);

-- Refresh the Object Table
REFRESH OBJECT TABLE audio_files;

-- Transcribe all audio files
SELECT
  object_uri,
  AI_TRANSCRIBE('fun_asr', file, '{"timestamp_granularity": "sentence"}'::jsonb) AS transcription
FROM audio_files
LIMIT 2;

Saída de exemplo:

         object_uri          |                          transcription
-----------------------------+--------------------------------------------------------------
 R8003_M8001_N_SPK8002.wav  | {"duration": 15.2, "segments": [{"start": 0.16, "end": 3.48, "text": "So what did you need to see me about?"}, {"start": 3.72, "end": 15.04, "text": "Well, the thing is, I called you in today to discuss the student exchange event planning. I'd like to hear your thoughts on how to organize it, so we can exchange ideas."}]}
 R8007_M8010_N_SPK8054.wav  | {"duration": 45.6, "segments": [{"start": 0.5, "end": 8.2, "text": "Hi everyone, let's discuss the project progress today."}, {"start": 8.5, "end": 20.3, "text": "Sure. The frontend development is 80% complete on my end. I expect to start integration testing next week."}]}
(2 rows)

Exemplo 6: Transcrição incremental com Dynamic Table

Use uma Dynamic Table com atualização incremental para processar arquivos de áudio. Essa abordagem reduz o consumo de recursos e é adequada para cenários de processamento de áudio em grande escala, como interações de atendimento ao cliente e sistemas de voz veicular em direção autônoma.

-- Create an Object Table
CREATE OBJECT TABLE audio_files WITH (
  path = 'oss://xxxx/audio/alimeeting_audio/',
  oss_endpoint = 'oss-cn-beijing-internal.aliyuncs.com',
  role_arn = 'acs:ram::xxx:role/xxxx'
);

-- Refresh the Object Table
REFRESH OBJECT TABLE audio_files;

-- Create a Dynamic Table to automatically transcribe new files
CREATE DYNAMIC TABLE audio_transcriptions
WITH (freshness = '10 minutes')
AS SELECT
  object_uri,
  AI_TRANSCRIBE('fun_asr', file, '{"timestamp_granularity": "sentence"}'::jsonb) AS transcription
FROM audio_files;

-- Wait for automatic refresh or trigger manually
REFRESH DYNAMIC TABLE audio_transcriptions;

-- Query the transcription results
SELECT
  object_uri,
  transcription->>'duration' AS duration,
  (jsonb_array_elements(transcription->'segments'))->>'start' AS start_time,
  (jsonb_array_elements(transcription->'segments'))->>'end' AS end_time,
  (jsonb_array_elements(transcription->'segments'))->>'text' AS text
FROM audio_transcriptions
WHERE transcription->'segments' IS NOT NULL
LIMIT 10;

Saída da consulta de exemplo:

         object_uri          | duration | start_time | end_time |                    text
-----------------------------+----------+------------+----------+--------------------------------------------
 R8003_M8001_N_SPK8002.wav  | 15.2     | 0.16       | 3.48     | So what did you need to see me about?
 R8003_M8001_N_SPK8002.wav  | 15.2     | 3.72       | 15.04    | Well, the thing is, I called you in today to discuss the student exchange event planning.
 R8007_M8010_N_SPK8054.wav  | 45.6     | 0.5        | 8.2      | Hi everyone, let's discuss the project progress today.
 R8007_M8010_N_SPK8054.wav  | 45.6     | 8.5        | 20.3     | Sure. The frontend development is 80% complete on my end. I expect to start integration testing next week.
(4 rows)