Kimi-Audio 多模态音频理解模型 - 音频语义解析与自然语言描述生成
URL/Base64编码/二进制流 三种音频格式prompt 参数引导生成方向输入列名 | 说明 |
|---|---|
audios | 包含音频数据的列,元素类型为字符串或者二进制。 |
处理后的列,元素为每个音频的理解结果。
如参数没有默认值,则为必填参数
参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
audio_src_type | str | audio_url | 音频数据源类型,支持三种格式 可选值:["audio_url", "audio_base64", "audio_binary"] 默认值:"audio_url" |
model_path | str | /opt/las/models | 本地模型文件存储的绝对路径,默认为容器内预置路径。当使用自定义模型时需修改此路径 默认值:"/opt/las/models" |
model_name | str | moonshotai/Kimi-Audio-7B-Instruct | 支持的音频语言模型版本,当前仅支持 Kimi-Audio系列模型 可选值:["moonshotai/Kimi-Audio-7B-Instruct"] 默认值:"moonshotai/Kimi-Audio-7B-Instruct" |
prompt | str | 请分析这段音频的内容。 | 用户理解音频内容的提示词,模型会根据提示词来生成音频的分析结果。 默认值:"请分析这段音频的内容。" |
batch_size | int | 4 | 分组处理的音频数量。较大值可能增加显存消耗。 默认值:4 |
text_temperature | float | 0.0 | 文本生成的温度参数,控制生成文本的随机性。0.0表示确定性生成 默认值:0.0 |
text_top_k | int | 5 | 文本生成时考虑的top-k候选词数量 默认值:5 |
text_repetition_penalty | float | 1.0 | 文本重复惩罚系数,避免生成重复内容 默认值:1.0 |
text_repetition_window_size | int | 16 | 文本重复检测的窗口大小 默认值:16 |
rank | int or None | None | 指定使用的GPU设备编号(多卡环境有效)。例如:0表示第一张GPU,1表示第二张GPU 默认值:None |
下面的代码展示了如何使用 daft 运行算子对音频进行理解和内容分析。
from __future__ import annotations import os import daft from daft import col from daft.las.functions.multimodal.kimi_audio_understanding import KimiAudioUnderstanding from daft.las.functions.udf import las_udf if __name__ == "__main__": if os.getenv("DAFT_RUNNER", "native") == "ray": import logging import ray def configure_logging(): logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S.%s".format(), ) logging.getLogger("tracing.span").setLevel(logging.WARNING) logging.getLogger("daft_io.stats").setLevel(logging.WARNING) logging.getLogger("DaftStatisticsManager").setLevel(logging.WARNING) logging.getLogger("DaftFlotillaScheduler").setLevel(logging.WARNING) logging.getLogger("DaftFlotillaDispatcher").setLevel(logging.WARNING) ray.init(dashboard_host="0.0.0.0", runtime_env={"worker_process_setup_hook": configure_logging}) daft.context.set_runner_ray() daft.set_execution_config(actor_udf_ready_timeout=600) daft.set_execution_config(min_cpu_per_task=0) tos_dir_url = os.getenv("TOS_DIR_URL", "las-cn-beijing-public-online.tos-cn-beijing.volces.com") samples = { "audio_path": [ f"https://{tos_dir_url}/public/shared_audio_dataset/黑神话悟空对话.mp3" ] } audio_src_type = "audio_url" model_path = os.getenv("MODEL_PATH", "/opt/las/models") model_name = "moonshotai/Kimi-Audio-7B-Instruct" prompt = """ 你是一名专业的音频分析助手。请全面理解输入音频,并按以下维度进行有条理的说明: 内容概括:简要描述音频的主要内容、主题或事件。 说话人信息:识别有多少个说话人,并简要描述他们的说话风格、性别或情绪。 情绪与语气:总结音频中情绪状态及其变化(如平静、激动、紧张、愉快)。 关键信息提取:提取音频中的核心信息点或指令,按时间顺序简要列出。 背景环境:分析是否存在背景音乐、噪音或特殊声效,并描述其特征。 请使用结构化自然语言输出,既简洁又完整,避免遗漏重要信息。 """ text_temperature = 0.0 text_top_k = 5 text_repetition_penalty = 1.0 text_repetition_window_size = 16 batch_size = 1 rank = None df = daft.from_pydict(samples) df = df.with_column( "audio_analysis", las_udf( KimiAudioUnderstanding, construct_args={ "audio_src_type": audio_src_type, "model_path": model_path, "model_name": model_name, "prompt": prompt, "text_temperature": text_temperature, "text_top_k": text_top_k, "text_repetition_penalty": text_repetition_penalty, "text_repetition_window_size": text_repetition_window_size, "batch_size": batch_size, "rank": rank, }, num_gpus=1, batch_size=1, concurrency=1, )(col("audio_path")), ) df.show() # ╭────────────────────────────────┬─────────────────────────────────────────────────────────────╮ # │ audio_path ┆ audio_analysis │ # │ --- ┆ --- │ # │ Utf8 ┆ Utf8 │ # ╞════════════════════════════════╪═════════════════════════════════════════════════════════════╡ # │ tos://las-cn-beijing-public-o… ┆ 内容概括:这段音频是一位老人在讲述自己的经历和感受,内容涉及… │ # ╰────────────────────────────────┴─────────────────────────────────────────────────────────────╯