全部產品
Search
文件中心

Hologres:AI_TRANSCRIBE

更新時間:Jun 26, 2026

AI_TRANSCRIBE 是 Hologres 提供的語音轉文本 AI 函數,支援將音頻檔案轉換為結構化文本資料。該函數基於阿里雲百鍊(Bailian)語音辨識模型,提供多種時間粒紋切分模式,滿足不同業務情境需求。

適用情境

  • 會議記錄轉錄:將會議錄音轉換為文本,便於存檔和檢索。

  • 字幕產生:以句子為粒度切分,產生帶時間戳記的字幕檔案。

  • 說話人分離:識別多說話人音頻中的不同說話者,適用於會議紀要。

  • 語言學習:逐詞回放、跟讀練習,支援語言學習產品。

使用限制

  • Hologres V4.2 及以上版本。

  • 已配置 OSS 存取權限(如需訪問 OSS 音頻檔案)。

  • 在 Hologres 控制台已添加語音辨識模型,詳見託管模型。按照託管模型部署流程在控制台部署模型即可。

函數文法

AI_TRANSCRIBE(model, audio_file [, options])

參數說明

參數

資料類型

是否必填

說明

model

TEXT

是

模型名稱,需要先在Hologres控制台部署模型,詳見託管模型。

audio_file

FILE

是

音頻檔案,通過 to_file() 函數或 Object Table 擷取。

options

JSONB

否

配置選項,必須顯式使用 ::jsonb 類型轉換。

options 參數

參數

資料類型

預設值

說明

timestamp_granularity

TEXT

'none'

時間粒紋模式:'none'、'sentence'、'speaker'、'word'。

時間粒紋模式

timestamp_granularity 參數支援以下取值:

  • none(預設):將音頻檔案轉換為一段完整的長文本,適用於 RAG 情境。輸出包含 text 和 duration 欄位。

  • sentence:以句子為粒度切分識別結果,適用於字幕產生。輸出包含 segments 數組,每項含 start、end、text 欄位。

  • speaker:說話人分離模式,識別不同說話者,適用於會議紀要。輸出包含 segments 數組,每項額外含 speaker_id 欄位。

  • word:精確到每個詞的時間戳記,適用於音視頻搜尋和語言學習。輸出包含 segments 數組,每項含單詞級 start、end、text 欄位。

說明

options 參數必須顯式使用 ::jsonb 類型轉換,否則會報函數歧義錯誤。

正確樣本:

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

錯誤樣本(缺少 ::jsonb):

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

使用樣本

說明

以下樣本中使用的音頻檔案來自 AliMeeting 開源會議語音資料集。您需要將樣本中的 OSS 路徑、Endpoint 和 RAM 角色 ARN 替換為實際值。

說明

樣本中使用 oss-cn-beijing-internal.aliyuncs.com 作為 OSS Endpoint,因為 FunASR 模型服務部署在 cn-beijing 地區。使用內網 Endpoint 時,OSS Bucket 需與模型服務在同一地區。

樣本1:基礎轉錄(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'
  )
);

返回結果:

{
  "text": "那個就是你找我是什麼事啊?小蔣是這樣的,呃今天叫你過來就是關於留學生交流會這個流程,呃就是說看你有什麼想法怎麼規劃的,我們彼此交流一下。",
  "duration": 15.2
}

樣本2:句子級切分(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
);

返回結果:

{
  "duration": 15.2,
  "segments": [
    {"start": 0.16, "end": 3.48, "text": "那個就是你找我是什麼事啊?"},
    {"start": 3.72, "end": 15.04, "text": "小蔣是這樣的,呃今天叫你過來就是關於留學生交流會這個流程,呃就是說看你有什麼想法怎麼規劃的,我們彼此交流一下。"}
  ]
}

樣本3:說話人分離(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
);

返回結果:

{
  "duration": 45.6,
  "segments": [
    {"start": 0.5, "end": 8.2, "speaker_id": 0, "text": "大家好,今天我們討論一下專案進度。"},
    {"start": 8.5, "end": 20.3, "speaker_id": 1, "text": "好的,我這邊前端開發已經完成了80%,預計下周可以聯調。"},
    {"start": 20.8, "end": 35.1, "speaker_id": 0, "text": "後端進度怎麼樣?能跟上嗎?"},
    {"start": 35.5, "end": 45.2, "speaker_id": 2, "text": "後端介面已經準備好了,等前端聯調。"}
  ]
}

樣本4:詞級時間戳記(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
);

返回結果(部分):

{
  "duration": 15.2,
  "segments": [
    {"start": 0.16, "end": 0.52, "text": "那個"},
    {"start": 0.52, "end": 0.88, "text": "就是"},
    {"start": 0.88, "end": 1.24, "text": "你"},
    {"start": 1.24, "end": 1.60, "text": "找"},
    {"start": 1.60, "end": 1.96, "text": "我"},
    {"start": 1.96, "end": 2.32, "text": "是"},
    {"start": 2.32, "end": 2.68, "text": "什麼"},
    {"start": 2.68, "end": 3.04, "text": "事"},
    {"start": 3.04, "end": 3.48, "text": "啊"}
  ]
}

樣本5:結合 Object Table 批量轉錄

-- 建立 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'
);

-- 重新整理 Object Table
REFRESH OBJECT TABLE audio_files;

-- 轉錄所有音頻檔案
SELECT
  object_uri,
  AI_TRANSCRIBE('fun_asr', file, '{"timestamp_granularity": "sentence"}'::jsonb) AS transcription
FROM audio_files
LIMIT 2;

返回結果:

         object_uri          |                          transcription
-----------------------------+--------------------------------------------------------------
 R8003_M8001_N_SPK8002.wav  | {"duration": 15.2, "segments": [{"start": 0.16, "end": 3.48, "text": "那個就是你找我是什麼事啊?"}, {"start": 3.72, "end": 15.04, "text": "小蔣是這樣的,呃今天叫你過來就是關於留學生交流會這個流程,呃就是說看你有什麼想法怎麼規劃的,我們彼此交流一下。"}]}
 R8007_M8010_N_SPK8054.wav  | {"duration": 45.6, "segments": [{"start": 0.5, "end": 8.2, "text": "大家好,今天我們討論一下專案進度。"}, {"start": 8.5, "end": 20.3, "text": "好的,我這邊前端開發已經完成了80%,預計下周可以聯調。"}]}
(2 rows)

樣本6:結合 Dynamic Table 實現音頻自動增量轉錄

使用 Dynamic Table 增量重新整理模式處理音頻檔案,實現音頻檔案的增量處理,有效降低資源消耗,廣泛適用於大規模音頻處理的情境例如客服互動、智能駕駛中人機互動音頻等。

-- 建立 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'
);

-- 重新整理 Object Table
REFRESH OBJECT TABLE audio_files;

-- 建立 Dynamic Table 自動轉錄新檔案
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;

-- 等待自動重新整理或手動觸發
REFRESH DYNAMIC TABLE audio_transcriptions;

-- 查詢轉錄結果
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;

查詢轉錄結果樣本:

         object_uri          | duration | start_time | end_time |                    text
-----------------------------+----------+------------+----------+--------------------------------------------
 R8003_M8001_N_SPK8002.wav  | 15.2     | 0.16       | 3.48     | 那個就是你找我是什麼事啊?
 R8003_M8001_N_SPK8002.wav  | 15.2     | 3.72       | 15.04    | 小蔣是這樣的,呃今天叫你過來就是關於留學生交流會這個流程,呃就是說看你有什麼想法怎麼規劃的,我們彼此交流一下。
 R8007_M8010_N_SPK8054.wav  | 45.6     | 0.5        | 8.2      | 大家好,今天我們討論一下專案進度。
 R8007_M8010_N_SPK8054.wav  | 45.6     | 8.5        | 20.3     | 好的,我這邊前端開發已經完成了80%,預計下周可以聯調。
(4 rows)