Azure语音交互专业版

Polar Sponsor
爱发电 赞助
.NET 9.0

企业级实时语音AI工具,支持函数调用、自定义语音、电话音频、高级会话与中断处理。

Azure语音交互专业版

功能概述

Azure语音交互专业版是一项面向实际任务的技能,主要用于Azure语音交互专业版是企业级实时语音AI工具,在免费版基础上提供函数调用、自定义语音、电话音频格式、高级会话管理等专业能力;适用于企业智能客服、电话客服中心、品牌定制化语音交互等高阶场景;

核心要点

  • 免费版与专业版对比;
  • 实时语音通信;
  • 文本/音频输出;

使用与执行

自定义语音;标准/自定义/个人语音;电话音频格式;G.711/8kHz/16kHz;VAD配置。

结果检查与注意事项

它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Azure语音交互专业版

概述

Azure语音交互专业版是企业级实时语音AI工具,在免费版基础上提供函数调用、自定义语音、电话音频格式、高级会话管理等专业能力。适用于企业智能客服、电话客服中心、品牌定制化语音交互等高阶场景。

免费版与专业版对比

能力 免费版 专业版
实时语音通信 支持 支持
文本/音频输出 支持 支持
函数调用 不支持 支持
自定义语音 不支持 标准/自定义/个人语音
电话音频格式 不支持 G.711/8kHz/16kHz
VAD配置 基础server_vad server_vad + 语义VAD
手动轮次模式 不支持 支持
中断处理 不支持 支持
对话历史管理 基础 完整(创建/删除/截断)
认证方式 API Key API Key + 托管身份
事件处理 基础事件 完整事件体系

核心能力

1. 函数调用(Function Tools)

import json
from azure.ai.voicelive.models import FunctionTool

async def voice_assistant_with_tools():
    async with connect(
        endpoint=os.environ["AZURE_COGNITIVE_SERVICES_ENDPOINT"],
        credential=AzureKeyCredential(os.environ["AZURE_COGNITIVE_SERVICES_KEY"]),
        model="gpt-4o-realtime-preview"
    ) as conn:
        # 配置带函数工具的会话
        await conn.session.update(session=RequestSession(
            instructions="你是智能客服助手,可以查询订单和天气信息。",
            modalities=["text", "audio"],
            voice="shimmer",
            input_audio_format="pcm16",
            output_audio_format="pcm16",
            turn_detection={
                "type": "server_vad",
                "threshold": 0.5,
                "prefix_padding_ms": 300,
                "silence_duration_ms": 500
            },
            tools=[
                FunctionTool(
                    type="function",
                    name="get_order_status",
                    description="查询订单状态",
                    parameters={
                        "type": "object",
                        "properties": {
                            "order_id": {"type": "string", "description": "订单号"}
                        },
                        "required": ["order_id"]
                    }
                ),
                FunctionTool(
                    type="function",
                    name="get_weather",
                    description="查询天气信息",
                    parameters={
                        "type": "object",
                        "properties": {
                            "location": {"type": "string", "description": "城市名"}
                        },
                        "required": ["location"]
                    }
                )
            ]
        ))

        # 事件处理(含函数调用)
        async for event in conn:
            match event.type:
                case "response.function_call_arguments.done":
                    # AI请求调用函数
                    result = await handle_function(event.name, event.arguments)
                    await conn.conversation.item.create(item={
                        "type": "function_call_output",
                        "call_id": event.call_id,
                        "output": json.dumps(result)
                    })
                    await conn.response.create()  # 触发后续响应

                case "response.audio_transcript.delta":
                    print(event.delta, end="", flush=True)

                case "response.audio.delta":
                    audio = base64.b64decode(event.delta)
                    await play_audio(audio)

                case "response.done":
                    break

async def handle_function(name, arguments):
    """处理AI请求的函数调用"""
    args = json.loads(arguments)
    if name == "get_order_status":
        return {"order_id": args["order_id"], "status": "已发货", "eta": "明天到达"}
    elif name == "get_weather":
        return {"location": args["location"], "temp": "25℃", "condition": "晴"}
    return {"error": "未知函数"}

输入: 用户提供函数调用(Function Tools)所需的指令和必要参数。 处理: 按照skill规范执行函数调用(Function Tools)操作,遵循单一意图原则。 输出: 返回函数调用(Function Tools)的执行结果,包含操作状态和输出数据。

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作

2. 电话音频格式支持

# 电话客服系统配置(G.711格式)
async def telephony_voice_bot():
    async with connect(
        endpoint=os.environ["AZURE_COGNITIVE_SERVICES_ENDPOINT"],
        credential=AzureKeyCredential(os.environ["AZURE_COGNITIVE_SERVICES_KEY"]),
        model="gpt-4o-realtime-preview"
    ) as conn:
        await conn.session.update(session={
            "instructions": "你是电话客服,请简洁专业地回答。",
            "modalities": ["text", "audio"],
            "voice": "shimmer",
            "input_audio_format": "g711_ulaw",   # 电话音频格式
            "output_audio_format": "g711_ulaw",
            "turn_detection": {
                "type": "server_vad",
                "threshold": 0.5,
                "silence_duration_ms": 600
            }
        })
        # ... 事件处理逻辑

输入: 用户提供电话音频格式支持所需的指令和必要参数。 处理: 按照skill规范执行电话音频格式支持操作,遵循单一意图原则。 输出: 返回电话音频格式支持的执行结果,包含操作状态和输出数据。

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作

3. 中断处理与手动轮次

# 用户中断处理
async def interruptible_assistant():
    async with connect(...) as conn:
        await conn.session.update(session={
            "instructions": "你是语音助手。",
            "modalities": ["text", "audio"],
            "voice": "alloy",
            "turn_detection": {"type": "server_vad", "threshold": 0.5}
        })

        async for event in conn:
            if event.type == "input_audio_buffer.speech_started":
                # 用户开始说话 → 取消当前AI响应
                await conn.response.cancel()
                await conn.output_audio_buffer.clear()
                print("[用户打断,已停止当前回复]")

            elif event.type == "response.audio.delta":
                audio = base64.b64decode(event.delta)
                await play_audio(audio)

# 手动轮次模式(无VAD)
async def manual_turn_mode():
    async with connect(...) as conn:
        # 关闭自动VAD
        await conn.session.update(session={"turn_detection": None})

        # 手动发送音频并提交
        audio_chunk = await read_audio_from_microphone()
        b64_audio = base64.b64encode(audio_chunk).decode()
        await conn.input_audio_buffer.append(audio=b64_audio)
        await conn.input_audio_buffer.commit()  # 结束用户轮次
        await conn.response.create()            # 触发AI响应

输入: 用户提供中断处理与手动轮次所需的指令和必要参数。 处理: 按照skill规范执行中断处理与手动轮次操作,遵循单一意图原则。 输出: 返回中断处理与手动轮次的执行结果,包含操作状态和输出数据。

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作

4. 自定义语音集成

from azure.ai.voicelive.models import AzureStandardVoice, AzureCustomVoice

# 使用Azure标准语音
await conn.session.update(session={
    "voice": AzureStandardVoice(
        voice_name="zh-CN-XiaoxiaoNeural",
        voice_type="AzureStandardVoice"
    )
})

# 使用自定义语音(品牌专属语音)
await conn.session.update(session={
    "voice": AzureCustomVoice(
        voice_name="my-brand-voice",
        voice_type="AzureCustomVoice",
        custom_voice_endpoint="https://"
    )
})

输入: 用户提供自定义语音集成所需的指令和必要参数。 处理: 按照skill规范执行自定义语音集成操作,遵循单一意图原则。 输出: 返回自定义语音集成的执行结果,包含操作状态和输出数据。 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:企业级实时语音、支持函数调用、高级会话与中断处、语音交互专业版、面向企业团队与专、业开发者的高级实、时语音、核心能力、主动调用外部、API、个人语音、Use、when、接口对接、Webhook、系统连接时使用、不适用于逆向工程等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作

使用场景

场景一:企业智能客服系统

企业客服中心部署AI语音助手,支持查询订单、天气等功能调用。

async def enterprise_customer_service():
    async with connect(
        endpoint=os.environ["AZURE_COGNITIVE_SERVICES_ENDPOINT"],
        credential=DefaultAzureCredential(),
        model="gpt-4o-realtime-preview",
        credential_scopes=["https://cognitiveservices.azure.com/.default"]
    ) as conn:
        await conn.session.update(session=RequestSession(
            instructions="你是XX公司智能客服。可以查询订单状态、产品信息、退换货政策。保持专业友好的语气。",
            modalities=["text", "audio"],
            voice="shimmer",
            input_audio_format="pcm16",
            output_audio_format="pcm16",
            turn_detection={
                "type": "azure_semantic_vad",  # 语义VAD,更准确的端点检测
                "threshold": 0.5
            },
            tools=[
                FunctionTool(type="function", name="query_order",
                    description="查询订单状态",
                    parameters={"type": "object",
                        "properties": {"order_id": {"type": "string"}},
                        "required": ["order_id"]}),
                FunctionTool(type="function", name="query_product",
                    description="查询产品信息",
                    parameters={"type": "object",
                        "properties": {"product_name": {"type": "string"}},
                        "required": ["product_name"]}),
                FunctionTool(type="function", name="return_policy",
                    description="查询退换货政策",
                    parameters={"type": "object", "properties": {}})
            ]
        ))

        async for event in conn:
            if event.type == "response.function_call_arguments.done":
                result = await handle_service_function(event.name, event.arguments)
                await conn.conversation.item.create(item={
                    "type": "function_call_output",
                    "call_id": event.call_id,
                    "output": json.dumps(result)
                })
                await conn.response.create()
            elif event.type == "input_audio_buffer.speech_started":
                await conn.response.cancel()
                await conn.output_audio_buffer.clear()
            elif event.type == "response.done":
                pass  # 继续监听

场景二:电话客服AI语音机器人

电话客服系统接入AI语音,处理来电咨询。

async def telephony_bot():
    async with connect(
        endpoint=os.environ["AZURE_COGNITIVE_SERVICES_ENDPOINT"],
        credential=AzureKeyCredential(os.environ["AZURE_COGNITIVE_SERVICES_KEY"]),
        model="gpt-4o-realtime-preview"
    ) as conn:
        # 电话音频格式配置
        await conn.session.update(session={
            "instructions": "你是电话客服机器人,回答简洁明了。",
            "modalities": ["text", "audio"],
            "voice": AzureStandardVoice(voice_name="zh-CN-YunxiNeural"),
            "input_audio_format": "g711_ulaw",  # 电话格式
            "output_audio_format": "g711_ulaw",
            "turn_detection": {
                "type": "server_vad",
                "threshold": 0.5,
                "silence_duration_ms": 700  # 电话场景适当延长静默时间
            }
        })

        # 对话历史管理
        await conn.conversation.item.create(item={
            "type": "message",
            "role": "system",
            "content": [{"type": "input_text", "text": "当前来电号码: 138xxxx1234"}]
        })

        # ... 事件处理

场景三:品牌定制语音体验

品牌应用使用专属定制语音,提供独特交互体验。

async def branded_voice_experience():
    async with connect(
        endpoint=os.environ["AZURE_COGNITIVE_SERVICES_ENDPOINT"],
        credential=DefaultAzureCredential(),
        model="gpt-4o-realtime-preview",
        credential_scopes=["https://cognitiveservices.azure.com/.default"]
    ) as conn:
        # 品牌定制语音
        await conn.session.update(session={
            "instructions": "你是XX品牌的专属语音助手,体现品牌温暖专业的调性。",
            "modalities": ["text", "audio"],
            "voice": AzureCustomVoice(
                voice_name="brand-exclusive-voice",
                custom_voice_endpoint="https://"
            ),
            "input_audio_format": "pcm16",
            "output_audio_format": "pcm16",
            "turn_detection": {"type": "azure_semantic_vad_multilingual"}
        })
        # ... 事件处理

快速开始

  1. 阅读## 核心能力章节了解skill功能
  2. 按## 依赖说明配置环境
  3. 执行所需能力对应的命令
  4. 参考## 错误处理章节处理异常
  5. 查看## FAQ解答常见疑问

1. 环境准备

pip install azure-ai-voicelive aiohttp azure-identity

2. 托管身份认证配置

# 使用DefaultAzureCredential(推荐企业使用)
export AZURE_COGNITIVE_SERVICES_ENDPOINT="https://.api.cognitive.microsoft.com"
# 通过Azure CLI登录
az login

3. 函数调用语音助手

import asyncio, os, json, base64
from azure.ai.voicelive.aio import connect
from azure.ai.voicelive.models import RequestSession, FunctionTool
from azure.identity.aio import DefaultAzureCredential

async def main():
    async with connect(
        endpoint=os.environ["AZURE_COGNITIVE_SERVICES_ENDPOINT"],
        credential=DefaultAzureCredential(),
        model="gpt-4o-realtime-preview",
        credential_scopes=["https://cognitiveservices.azure.com/.default"]
    ) as conn:
        await conn.session.update(session=RequestSession(
            instructions="你是智能助手。",
            modalities=["text", "audio"],
            voice="alloy",
            tools=[FunctionTool(type="function", name="get_time",
                description="获取当前时间",
                parameters={"type": "object", "properties": {}})]
        ))
        async for event in conn:
            if event.type == "response.function_call_arguments.done":
                if event.name == "get_time":
                    await conn.conversation.item.create(item={
                        "type": "function_call_output",
                        "call_id": event.call_id,
                        "output": json.dumps({"time": "2026-01-18 10:00"})
                    })
                    await conn.response.create()
            elif event.type == "response.done":
                break

asyncio.run(main())

命令参数说明

  • -CN-XiaoxiaoNeural: 命令参数,用于指定操作选项
  • -CN-YunxiNeural: 命令参数,用于指定操作选项

示例

音频格式对比

格式 采样率 适用场景
pcm16 24kHz 默认,高质量
pcm16-8000hz 8kHz 电话
pcm16-16000hz 16kHz 语音助手
g711_ulaw 8kHz 电话(美国)
g711_alaw 8kHz 电话(欧洲)

VAD选项对比

VAD类型 说明 适用场景
server_vad 基于阈值的服务器端检测 通用场景
azure_semantic_vad 语义级端点检测 高精度场景
azure_semantic_vad_multilingual 多语言语义检测 多语言应用

语音类型对比

类型 说明 适用场景
内置语音 alloy/echo/shimmer等 通用
AzureStandardVoice Azure神经语音 生产环境
AzureCustomVoice 自定义训练语音 品牌专属
AzurePersonalVoice 个人语音克隆 个性化

最佳实践

  1. 函数工具设计:函数描述清晰,参数定义完整,便于AI正确调用
  2. 中断处理:始终实现speech_started中断处理,提升用户体验
  3. VAD选择:电话场景用server_vad,高精度场景用语义VAD
  4. 音频格式:电话系统使用G.711,高质量应用使用PCM16 24kHz
  5. 托管身份:企业部署优先使用DefaultAzureCredential,避免硬编码密钥
  6. 对话历史:利用conversation.item.create注入上下文信息
  7. 错误处理:捕获ConnectionClosed和ConnectionError,实现重连机制

常见问题

Q1:函数调用不触发怎么办?

检查函数工具的description是否清晰,parameters定义是否正确。AI需要理解何时调用哪个函数。

Q2:电话音频质量不佳怎么办?

确保使用正确的G.711格式(美国用ulaw,欧洲用alaw),适当调整silence_duration_ms。

Q3:自定义语音如何创建?

在Azure Speech Studio中训练自定义语音模型,获取endpoint后通过AzureCustomVoice配置。

Q4:语义VAD和普通VAD有什么区别?

语义VAD基于语义理解检测用户是否说完,比基于阈值的普通VAD更准确,尤其适合长句或停顿较多的场景。与免费版配置完全兼容,可直接复用免费版的认证信息。

依赖说明

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux
  • Python版本: 3.8及以上

依赖详情

依赖项 类型 是否必需 获取方式
LLM API API 必需 由Agent内置LLM提供
Python 3 运行时 必需 python.org 下载安装
azure-ai-voicelive Python SDK 必需 pip install azure-ai-voicelive
aiohttp Python库 必需 pip install aiohttp
azure-identity Python库 必需 pip install azure-identity
Azure认知服务 云服务 必需 Azure门户创建资源

API Key 配置

  • AZURE_COGNITIVE_SERVICES_ENDPOINT:Azure认知服务端点URL
  • AZURE_COGNITIVE_SERVICES_KEY:API密钥(API Key认证)
  • 支持DefaultAzureCredential托管身份认证(企业推荐)
  • 与免费版使用相同的端点配置,完全兼容

可用性分类

  • 分类: MD+EXEC(纯Markdown指令,核心功能需要exec命令行执行能力)
  • 说明: 基于Markdown的AI Skill,通过自然语言指令驱动Agent执行专业实时语音交互任务。支持函数调用、自定义语音、电话音频格式等企业级功能,通过Python异步SDK调用Azure VoiceLive服务。与免费版完全兼容,可直接复用免费版的认证配置与基础会话流程。
  • API Key通过环境变量配置: export API_KEY=your_key

错误处理

错误场景 原因 处理方式
配置错误 参数缺失或格式错误 检查依赖说明中的配置要求
运行时错误 运行环境不满足 确认运行环境符合依赖说明
网络错误 连接超时或不可达 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案

已知限制

  • 需要API Key,无Key环境无法使用
  • 依赖云服务,需要网络连接

相关专题

更多
Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

0

18

Docker Desktop镜像构建教程
Docker Desktop镜像构建教程

想使用Docker Desktop将本地项目构建成Docker镜像?本专题围绕镜像构建的实际操作展开,介绍Dockerfile编写、构建命令使用、镜像标签设置和构建日志查看等内容,同时整理镜像无法生成、依赖安装失败及构建缓存异常等问题的排查思路。

2026.11.03

0

11

Docker Desktop容器创建指南
Docker Desktop容器创建指南

本专题聚焦Docker Desktop容器创建与运行配置,介绍通过本地镜像或远程镜像创建容器的方法,以及容器启动、终端访问、日志查看和基础管理等操作。针对端口冲突、参数配置不当、容器无法启动等情况,也整理了相应的排查方向。

2026.11.03

0

11

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

码上飞入口地址合集
码上飞入口地址合集

本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。

2026.11.03

0

10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

0

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

0

17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习