基于 agno 与 Gemini 的音频分类实战:语言识别与置信度路由

发布时间:2026/9/10 21:49:28

基于 agno 与 Gemini 的音频分类实战:语言识别与置信度路由 基于 agno 与 Gemini 的音频分类实战语言识别与置信度路由【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno导读本文围绕 agno 仓库中cookbook/data_labeling/_10_audio_classification的音频分类示例展开讲解如何为音频片段从封闭标签集合中分配单一标签语言识别并通过output_schema约束模型输出为结构化结果、通过confidence字段支持下游路由决策。读完本文你将掌握 agno 中「音频输入Audio 结构化输出Pydantic Schema」这一可复用的分类原语以及如何将其迁移到语种路由、音乐流派打标、客服音频情绪门控等场景。目录音频分类原语从文本分类到音频输入的同一套逻辑运行环境与前置条件基础版basic.py单标签语言识别升级版with_confidence.py带置信度的结构化输出测试结果分析TEST_LOG源码视角Audio、RunOutput与output_schema的底层原理应用场景与扩展方向1. 音频分类原语从文本分类到音频输入的同一套逻辑音频分类在 agno 的数据标注示例中与文本分类共享同一套原语primitive从封闭集合closed set中为一条输入分配一个标签。区别仅在于输入模态——文本分类传入的是字符串而音频分类传入的是Audio媒体对象。正如 README.md 所述Assign a label to an audio clip. Same primitive as text classification with audio input.这种设计让分类任务的逻辑定义标签集合 → 构建 Agent → 传入输入 → 拿到结构化结果完全独立于输入模态因此可以快速把已有的文本分类流程迁移到音频域。从源码结构看这一原语的三个关键支柱分别是支柱作用对应仓库文件Audio媒体类统一封装音频的字节内容、URL、文件路径及元数据media.pyPydantic 模型 Literal定义封闭标签集合与输出结构示例中的Classification模型output_schema让 Agent 按给定 Schema 结构化输出agent.py2. 运行环境与前置条件运行两个示例脚本需要满足以下条件Python 环境已安装 agno 及其依赖requests、pydantic、rich模型 API Key示例使用 Gemini 模型需要配置GOOGLE_API_KEY环境变量网络访问示例脚本从 agno 公共 S3 桶下载测试音频QA-01.mp3。运行命令README.mdpython cookbook/data_labeling/_10_audio_classification/basic.py python cookbook/data_labeling/_10_audio_classification/with_confidence.py按 TEST_LOG.md 记录示例曾在2026-07-18 针对gemini-3.5-flash、agno 2.7.4环境验证通过。模型替换说明两个脚本都通过modelgoogle:gemini-3.5-flash字符串指定模型。README 明确指出只要有具备原生音频输入能力的模型可以替换为其他提供商的模型字符串。3. 基础版basic.py单标签语言识别basic.py 实现最基础的音频分类为一段音频分配一个语言标签。3.1 定义封闭标签集合分类的关键是把输出约束到有限集合内Pydantic 的Literal类型天然适合表达「封闭集合」from typing import Literal from pydantic import BaseModel, Field class Classification(BaseModel): language: Literal[ english, spanish, french, german, mandarin, hindi, other ] Field(..., descriptionPrimary language spoken in the clip)这里Field(..., description...)提供字段语义描述帮助模型理解每个字段的含义Literal则从类型层面锁定可选值域——模型只能返回这 7 个值之一other作为兜底标签避免出现集合外答案。3.2 构建 Agentfrom agno.agent import Agent agent Agent( modelgoogle:gemini-3.5-flash, instructionsYou classify audio clips by spoken language., output_schemaClassification, )关键参数model指定 Gemini 模型支持原生音频输入instructions任务级指令告知 Agent 其职责是「按口语对音频片段分类」output_schema传入 Pydantic 模型类让 Agent 的输出被解析为该 Schema 的实例。3.3 下载音频并运行import requests from agno.agent import Agent, RunOutput from agno.media import Audio url https://agno-public.s3.us-east-1.amazonaws.com/demo_data/QA-01.mp3 audio_bytes requests.get(url).content run: RunOutput agent.run( What language is spoken in this audio?, audio[Audio(contentaudio_bytes)], ) pprint({url: url, result: run.content})运行流程拆解用requests下载 MP3 字节流将字节流包装为Audio(contentaudio_bytes)对象放入audio[...]列表传入agent.run()在run提示词中提出分类问题从返回的RunOutput.content中取出结构化结果Classification实例。4. 升级版with_confidence.py带置信度的结构化输出with_confidence.py 在基础版之上扩展了置信度字段其设计动机见文件头部注释是让下游路由能够区分对待低置信度标签——例如升级到更强模型、或进入人工审核队列。4.1 扩展 Schemaclass Classification(BaseModel): language: Literal[ english, spanish, french, german, mandarin, hindi, other ] Field(..., descriptionPrimary language spoken in the clip) confidence: Literal[high, medium, low] Field( ..., descriptionConfidence in the language label )新增的confidence字段同样是Literal封闭集合high / medium / low与language一起构成二元结构化输出。4.2 用 Instructions 精确定义置信度层级单纯让模型输出 confidence 字段还不够——不同模型对「high」的直觉理解可能不一致。示例通过指令定义每个层级的操作化标准来消除歧义instructions \ Identify the language and report a confidence: - high - clear speech, accent is identifiable, no background interference - medium - speech is audible but accent / dialect is ambiguous - low - very short, heavily accented, mixed-language, or noisy 这套判据是可落地的high语音清晰、口音可辨识、无背景干扰medium语音可听清但口音/方言存在歧义low片段极短、口音浓重、多语混杂或噪声明显。指令将抽象概念置信度映射为可观察的音频特征让不同输入的评分标准保持一致。这对后续「按置信度路由」至关重要——路由逻辑的正确性依赖置信度标注的稳定性。4.3 运行agent Agent( modelgoogle:gemini-3.5-flash, instructionsinstructions, output_schemaClassification, ) run: RunOutput agent.run( Identify the language and report confidence., audio[Audio(contentaudio_bytes)], ) pprint({url: url, result: run.content})5. 测试结果分析TEST_LOGTEST_LOG.md 记录了针对同一段音频QA-01.mp3的两个脚本的实测结果5.1basic.py测试记录项目结果状态PASS测试方式下载 MP3让带output_schema的 Gemini Agent 从封闭 Literal 集合中分配单一语言标签输出Classification(languageenglish)成本指标单次模型调用1921 输入 token / 6 输出 token耗时2.36s5.2with_confidence.py测试记录项目结果状态PASS测试方式同一识别任务Schema 扩展confidenceLiteral 字段并用指令定义各置信度层级以支撑下游路由输出Classification(languageenglish, confidencehigh)成本指标单次模型调用1965 输入 token / 12 输出 token耗时1.67s5.3 观察要点两个脚本均为单次模型调用说明音频分类无需多轮交互结构化输出在单轮内即可完成with_confidence.py仅增加 44 个输入 token来自更长的指令和 6 个输出 token新增字段说明置信度扩展的边际成本极低两次测试对同一段音频都判定为english且置信度版给出high与指令定义中「语音清晰、口音可辨识」的判据一致说明指令约束起到了稳定标注的作用耗时在 2 秒量级适合对延迟敏感的批量标注或实时路由场景。需要说明以上 token 数与耗时为特定测试环境gemini-3.5-flash、agno 2.7.4、单段音频下的实测记录不同模型、音频时长与网络环境下会有差异仅作参考。6. 源码视角Audio、RunOutput与output_schema的底层原理6.1Audio媒体类的统一封装音频输入在 agno 中统一由Audio类承载定义于 media.py注释将其定位为「Unified Audio class for all use cases (input, output, artifacts)」。核心字段包括内容来源三选一url远程地址、filepath本地路径、content原始音频字节统一标准化为bytes格式元数据format如mp3、wav、ogg、mime_type如audio/mpeg、audio/wav音频专属元数据duration时长秒数、sample_rate采样率默认 24000 Hz、channels声道数默认 1输出侧字段transcript模型返回的转写文本、expires_at临时 URL 过期时间戳存储与自定义字段media_reference媒体外置到对象存储时的引用、metadata用户自定义元数据。从validate_and_normalize_content校验器的实现可以推断Audio要求内容来源「恰好一个」URL、文件路径或字节内容三选一并通过model_validator做规范化保证进入模型调用链前的内容形态一致。示例中采用的Audio(contentaudio_bytes)即字节直传方式是最轻量的用法。6.2RunOutput返回结构agent.run()的返回值类型为RunOutput定义于 run/agent.py。该数据类除了content本次示例取用的结构化结果外还包含运行标识run_id、agent_id、session_id、parent_run_id、workflow_id输入回显inputRunInput、messages推理信息reasoning_content、reasoning_steps、reasoning_messages媒体与文件images、videos、audio、files、response_audio引用与指标citations、references、followups、metrics、tools等。也就是说示例脚本只展示了RunOutput的冰山一角——在生产环境中metricstoken 消耗与耗时、messages完整对话记录都是可用的分析数据。6.3output_schema的类型与生效方式output_schema是Agent构造参数之一定义于 agent/agent.py其类型为Optional[Union[Type[BaseModel], Dict[str, Any]]]——即既可以传 Pydantic 模型类也可以传 JSON Schema 字典。示例中传入Classification模型类模型被要求直接产出符合该 Schema 的结构化输出而非自由文本。这一机制是 agno 结构化输出能力在音频任务上的复用在basic.py与with_confidence.py中output_schema与Audio媒体输入协同工作模型在理解音频内容的同时按 Schema 生成 JSON 化结果再由 agno 解析为Classification实例返回。7. 应用场景与扩展方向README 列出的典型场景包括多语言语音信箱系统的语种路由先识别语种再路由到对应语言的 IVR 或座席队列音乐库的流派打标把language标签换成genre标签同一套 Schema 逻辑直接复用客服音频的情绪/语气门控把标签换成tone如 positive / neutral / negative可配合置信度做升级处理。以with_confidence.py的置信度字段为例一个实用的下游路由策略是置信度处理策略high直接采用进入自动分类管道medium采用但标记供后续抽样复核low升级到更强模型重新判断或进入人工审核队列扩展方向还包括将标签集合从Literal迁移到动态配置例如多语言场景中按租户维护语言列表、将置信度扩展为连续分值、或在audio[...]列表中一次传入多段音频实现批量标注。参考文件audio_classification/README.mdaudio_classification/basic.pyaudio_classification/with_confidence.pyaudio_classification/TEST_LOG.mdmedia.py 中 Audio 类定义agent.py 中 output_schema 参数定义run/agent.py 中 RunOutput 类定义【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 21:44:28

Simulink风电场无功控制建模与仿真实践

1. 项目背景与核心挑战小型风电场接入无限电网时,无功功率控制是确保系统稳定运行的关键技术。不同于传统发电机组,风力发电具有间歇性和波动性特点,这使得电网电压调节面临新的挑战。在Simulink环境下搭建仿真模型,能够有效验证控…

2026/9/10 21:44:28

ACSL-7210-06RE光耦特性与高速隔离通信设计

1. ACSL-7210-06RE光耦器件的基本特性解析ACSL-7210-06RE是一款采用CMOS工艺制造的双通道双向高速光耦合器,在现代工业自动化和通信系统中扮演着关键角色。这款器件最显著的特点是能够在两个独立通道上实现双向信号隔离传输,数据传输速率可达10Mbps&…

2026/9/10 22:29:34

Flipper Zero 乱码排查记录:一个根因,四处改动

Flipper Zero 乱码排查记录:一个根因,四处改动 【免费下载链接】flipperzero-firmware Flipper Zero firmware source code 项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware Flipper Zero 固件(flipperzero-f…

2026/9/10 22:29:34

降重降AI两不误!2026这3款降AIGC网站太强了!

谁还在为AI生成论文的AI率太高发愁?明明用AI省了时间,结果查重时AIGC率超标,直接被老师打回重写,熬夜改到崩溃真的太窒息了!最近被问最多的就是“有没有可以自动降AI率的论文生成工具”,作为过来人&#xf…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码