Azure AI 中的文章

语音识别与合成中的延迟问题及解决策略

语音识别和合成的延迟可能是创建无缝和高效应用程序的一个重大障碍。减少延迟不仅可以改善用户体验,还可以提升实时应用程序的整体性能。本文将探讨在一般转录、实时转录、文件转录和语音合成中减少延迟的策略。

1. 网络延迟:将语音资源移近应用程序

导致语音识别延迟的主要因素之一是网络延迟。为了减轻这一延迟,关键是减少应用程序与语音识别资源之间的距离。以下是一些建议:

……

阅读全文

Azure OpenAI 语音聊天

本文介绍使用 Azure AI 语音与 Azure OpenAI 服务实现全语音对话聊天,以及如何改进非阻塞式的对话。

要点

  • Azure AI 语音服务识别文本
  • 将文本发送到 Azure OpenAI,获取流式回复
  • Azure AI 语音服务对流式响应的文本合成语音

代码示例(Python)

以下是 Python 版本的示例,想要了解更多语言的示例,请参考 OpenAI-Speech

安装依赖

1
2
pip install azure-cognitiveservices-speech
pip install openai

添加代码

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import os
import azure.cognitiveservices.speech as speechsdk
from openai import AzureOpenAI

# This example requires environment variables named 
# "OPEN_AI_KEY", "OPEN_AI_ENDPOINT" and "OPEN_AI_DEPLOYMENT_NAME"

# Your endpoint should look like the following:
# https://YOUR_OPEN_AI_RESOURCE_NAME.openai.azure.com/
client = AzureOpenAI(
azure_endpoint=os.environ.get('OPEN_AI_ENDPOINT'),
api_key=os.environ.get('OPEN_AI_KEY'),
api_version="2024-05-01-preview"
)

# This will correspond to the custom name you chose for 
# your deployment when you deployed a model.
deployment_id=os.environ.get('OPEN_AI_DEPLOYMENT_NAME')

# This example requires environment variables 
# named "SPEECH_KEY" and "SPEECH_REGION"
speech_config = speechsdk.SpeechConfig(subscription=os.environ.get('SPEECH_KEY'), 
                                       region=os.environ.get('SPEECH_REGION'))
audio_output_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)
audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)

# Should be the locale for the speaker's language.
speech_config.speech_recognition_language="zh-CN"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, 
                                               audio_config=audio_config)

# The language of the voice that responds on behalf of Azure OpenAI.
speech_config.speech_synthesis_voice_name='zh-CN-YunyiMultilingualNeural'
speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, 
                                                 audio_config=audio_output_config)
# tts sentence end mark
tts_sentence_end = [ ".", "!", "?", ";", "。", "!", "?", ";", "\n" ]

# Prompts Azure OpenAI with a request and synthesizes the response.
def ask_openai(prompt):
    # Ask Azure OpenAI in streaming way
    response = client.chat.completions.create(model=deployment_id, 
                                              max_tokens=200, 
                                              stream=True, 
                                              messages=[
                                                {"role": "user", "content": prompt}
                                              ])
    collected_messages = []
    last_tts_request = None

    # iterate through the stream response stream
    for chunk in response:
        if len(chunk.choices) > 0:
            # extract the message
            chunk_message = chunk.choices[0].delta.content  
            if chunk_message is not None:
                # save the message
                collected_messages.append(chunk_message)  
                # sentence end found
                if chunk_message in tts_sentence_end: 
                    # join the recieved message together to build a sentence
                    text = ''.join(collected_messages).strip() 
                    if text != '': 
                        # if sentence only have \n or space, we could skip
                        print(f"Speech synthesized to speaker for: {text}")
                        last_tts_request = speech_synthesizer
                                                    .speak_text_async(text)
                        collected_messages.clear()
    if last_tts_request:
        last_tts_request.get()

# Continuously listens for speech input to recognize 
# and send as text to Azure OpenAI
def chat_with_open_ai():
    while True:
        print("""Azure OpenAI is listening. 
               Say 'Stop' or press Ctrl-Z to end the conversation.""")
        try:
            # Get audio from the microphone and 
            # then send it to the TTS service.
            speech_recognition_result = speech_recognizer.
                                           recognize_once_async().get()

            # If speech is recognized, send it to Azure OpenAI 
            # and listen for the response.
            if speech_recognition_result.reason == speechsdk.ResultReason
                                                         .RecognizedSpeech:
                if speech_recognition_result.text == "Stop." 
                             or speech_recognition_result.text == "Stop。":
                    print("Conversation ended.")
                    break
                print("Recognized speech: {}".format(
                                            speech_recognition_result.text))
                ask_openai(speech_recognition_result.text)
            elif speech_recognition_result.reason == speechsdk.ResultReason
                                                                  .NoMatch:
                print("No speech could be recognized: {}".format(
                                speech_recognition_result.no_match_details))
                break
            elif speech_recognition_result.reason == speechsdk.ResultReason
                                                                  .Canceled:
                cancellation_details = speech_recognition_result
                                                      .cancellation_details
                print("Speech Recognition canceled: {}".format(
                                               cancellation_details.reason))
                if cancellation_details.reason == speechsdk.CancellationReason
                                                                    .Error:
                    print("Error details: {}".format(
                                        cancellation_details.error_details))
        except EOFError:
            break

# Main
try:
    chat_with_open_ai()
except Exception as err:
    print("Encountered exception. {}".format(err))

非阻塞式改进

前面的示例运行起来的效果是固定一问一答交流的,如果希望实现对话的过程是可以被打断的,可以改变识别语音的代码为非阻塞式。 即把调用 ask_openai 的地方改为创建另一个线程来执行。

……

阅读全文

使用 Semantic Kernel 构建自定义 Copilot

本文重点介绍如何使用由 Azure OpenAI 服务提供支持的 Semantic Kernel 创建自己的 Copilot。我们将尝试利用大型语言模型(LLM)的优势与外部服务的集成。这将使您了解如何真正实现您的 Copilot 目标,不仅与零售业,而且与任何行业,无论是电力和公用事业,政府和公共部门等。它的整体功能和潜在的应用场景都远超于聊天机器人。

……

阅读全文

GPTs action 中使用 Azure AI Search

OpenAI 的 GPTs 上线有一段时间了,在实际应用中发现 GPTs 内置对知识库的检索能力很一般,对话过程中经常拿不到期望的反馈内容。如果利用 GPTs 的 action 能很好地弥补这个缺陷。

总所周知加强检索知识库离不开 RAG,如果自建 RAG 将会是一个很大的工作量,而且还要考虑到知识库的更新问题。于是想到 Azure AI Search 提供了一个很好的解决方案,可以很方便地将知识库导入到 Azure AI Search 中,然后通过 API 调用来检索知识库。整个过程都不需要编码,所以将 Azure AI Search 与 GPTs action 结合起来是个不错的主意。

……

阅读全文

Azure 机器学习和 DataRobot 联手加速生成式和预测性 AI 的价值

Azure 机器学习 (AzureML) 与价值驱动 AI 领导者 DataRobot 之间的突破性集成,这是最近宣布的合作伙伴关系的结果。这种集成将 Azure 机器学习功能的强大功能与 DataRobot 在加速构建、部署和监视企业级 AI 解决方案的整个生命周期方面的专业知识结合在一起。

DataRobot AI 平台独特地将生成式和预测性 AI 功能结合在一个统一、开放和端到端的环境中。通过新的集成,DataRobot AI 平台现在可以轻松地直接在 Azure Kubernetes 服务 (AKS) 上运行。数据科学家现在可以在 DataRobot Notebooks Code-Assist 中利用 Azure OpenAI 服务的强大功能。他们还可以通过 Azure 机器学习托管的联机终结点为实时和批处理用例部署模型,同时在 DataRobot 中监视这些部署。

……

阅读全文

多种环境部署 Azure 机器学习 Prompt Flow

Prompt Flow 在 Azure 机器学习工作室、Azure AI Studio 和本地开发笔记本电脑上提供,是一种开发工具,旨在简化由 LLM(大型语言模型)提供支持的 AI 应用程序的整个开发周期。Prompt Flow 使提示处于前端和中心,而不是像其他工具那样混淆它们或将它们深埋在抽象层中。这种方法不仅允许开发人员构建编排,还可以像在传统软件开发周期中评估和迭代代码一样评估和迭代他们的提示。

……

阅读全文

新加入 Azure AI Model Catalog 的模型

我们很高兴地看到,在 Azure AI Model Catalog 中增加了几个新的基础和生成AI模型。从 Hugging Face 我们已经推出了一系列稳定的 stable diffusion 模型,falcon 模型,CLIP, Whisper V3, BLIP 和 SAM 模型。除了 Hugging Face 模型,我们还分别添加了 Meta 和 NVIDIA 的 Code Llama 和 Nemotron 模型。我们还将介绍微软研究中心的尖端 Phi 模型。Model Catalog 产生了40个新模型和4个新模式,包括文本到图像和图像嵌入。专业开发人员很快就可以轻松地将最新的 AI 模型(如Meta 的 Llama 2、Cohere 的 Command、G42 的 Jais 以及 Mistral 的高级模型)作为 API 集成到他们的应用程序中。他们还可以使用自己的数据对这些模型进行微调,而无需担心设置和管理GPU基础设施,从而帮助消除配置资源和管理主机的复杂性。

……

阅读全文

基于 LangChain 实现问答

您是否有兴趣与自己的文档聊天,无论是文本文件、PDF 还是网站?LangChain 使您可以轻松地使用文档进行问答。在这篇博文中,我们将探讨四种不同的问答方法,以及您可以为案例考虑的各种选项。

在我们实现问答之前,您可能想知道:什么是 LangChain?简单来说,LangChain 是一种快速与语言模型交互和构建应用程序的开源框架,方便集成许多主流的 LLM 和组件扩展。

……

阅读全文

在 Azure ML 中引入可缩放的企业级基因学工作流

基因学工作流程在生物信息学中至关重要,因为它们可以帮助研究人员分析和解释大量的基因组数据。但是,使用专用软件和复杂的依赖项创建一致且可重复的环境可能具有挑战性,因此与 CI/CD 工具的集成也很困难。

Azure 机器学习 (Azure ML) 是一个基于云的平台,提供一组全面的工具和服务,用于开发、部署和管理机器学习模型。Azure ML 原生提供出色的可重复性和可审核性功能,而没有多少工作流解决方案提供这些功能。它为运行工作流提供了一个高度集成和标准化的环境,确保每个步骤都以一致且可重复的方式执行。此功能对于需要使用具有特定依赖项的某些版本的多个工具和软件包的基因学工作流特别有用。

……

阅读全文

3个加速语言学习的微软 Azure AI 产品功能

Microsoft Azure 认知语音服务平台是技术和服务的综合集合,旨在加速将语音整合到应用程序中,从而扩大市场差异化。可用的服务包括语音转文本、文本转语音、自定义神经语音 (CNV) 对话听录服务、说话人识别、语音翻译、语音 SDK 和语音设备开发工具包 (DDK)。

人工智能教育是一项新兴技术,有可能彻底改变我们教授和学习语言的方式。语言学习最重要的方面之一是准确发音的能力,这就是 Azure 认知语音服务的新发音评估功能的用武之地。另一个关键机会是开发合成双语语音,用于使用自定义神经语音进行语言学习体验,以及我们的语音转文本功能。

……

阅读全文