AI语音机器人:通过 Azure Speech 实现类人类的交互

news/2024/9/19 2:27:05/ 标签: 人工智能, 机器人, azure

语音对话的重要性

在竞争日益激烈的客户互动领域,人工智能语音对话正成为重中之重。随着数字参与者的崛起,组织认识到语音机器人的强大力量,它是一种自然而直观的沟通方式,可以提供类似人类的体验,深度吸引用户,并让他们从竞争对手中脱颖而出。无缝客户服务、个性化协助和即时信息访问的需求推动了对高质量语音交互的需求不断增长。此外,随着公司努力保留和扩大收入,跨越语言障碍接触更多样化的客户群变得至关重要,这使得多语言和情境感知语音解决方案成为当今市场的关键差异化因素。

参考链接:
微软Azure AI 语音服务、OpenAI 免费试用申请

创建有效语音机器人解决方案的关键挑战

尽管潜力巨大,但创建真正引起用户共鸣的语音机器人解决方案仍充满挑战。很少有组织能够成功解决阻碍最先进语音机器人发展的关键障碍:

  • 延迟:确保语音交互实时进行,没有明显的延迟,对于保持自然对话至关重要。高延迟会扰乱对话流程,导致用户沮丧和参与度下降。
  • 准确性:准确的语音识别至关重要,尤其是在嘈杂的环境中或用户口音和方言各异的情况下。对口语的误解会导致错误的响应和沟通中断。
  • 成本效益:组织面临的挑战是创建一个能够平衡高级功能与成本效益运营的架构,从而努力看到投资的回报。
  • 个性化、人性化的对话:用户希望语音机器人能够理解上下文、表现出同理心并提供个性化和可理解的响应。要实现这种级别的交互,需要从当今的众多选项中仔细选择合适的 LLM,并实现自定义语音功能以增强对话体验。

通过下一代语音机器人实现类似人类的交互

在以下部分中,我们将探讨如何使用 Azure AI 功能解决这些核心挑战,使企业能够提供超出客户期望的下一代语音体验。以下是一个快速演示,利用 Azure AI Stack 中的一些功能来展示语音机器人参与促销销售对话: 

 

 

提高准确性

适用于不同场景的自定义语音模型

Azure 自定义语音服务使企业能够利用特定领域的词汇、发音指南和定制的声学环境来微调自动语音识别 (ASR) 以满足特定需求。这些自定义功能可提高语音识别准确性并改善各种用例中的用户体验。

自定义语音模型的关键功能

  1. 处理噪音和声学变化:自定义语音模型可以经过训练,在嘈杂的环境和不同的声学条件下(例如繁忙的街道、公共场所或免下车通道)保持准确性。通过使用数据增强技术(例如将干净的音频与背景噪音混合),模型可以针对各种音景变得稳健。
  2. 领域特定词汇:提高对行业特定术语和技术术语的识别能力。自定义语音可以准确处理医疗保健、法律和金融等领域的专业语言,确保正确转录涉及复杂术语的对话。示例:在技术演示或客户支持电话中准确识别专业的科学术语或产品名称。
  3. 自定义发音:定制模型以识别非标准发音和独特术语,例如品牌名称或方言,确保准确转录口语。
  4. 口音和语言支持:调整模型以识别各种口音和方言,增强全球可访问性和用户参与度。
  5. 增强的输出格式:定义特定的文本格式规则,例如数字规范化和亵渎过滤,以满足清晰度和适当性的行业标准。

博客文章缩略图 1,标题为“下一代语音<a class=机器人:通过 Azure Speech 实现类人交互”" class="lia-media-image" height="459" src="https://img-blog.csdnimg.cn/img_convert/933c7b53a64dfe689d1ffef4cf1da906.png" width="998" />

 

使用案例

  • 教育:学术讲座期间提供准确的实时字幕。
  • 医疗保健:可靠的医疗咨询记录。
  • 客户支持:提高呼叫中心处理不同口音的准确性。
  • 媒体:在现场直播中准确报道姓名和地点。

行动号召:利用 Azure 自定义语音增强语音应用程序。解决噪音、复杂术语和口音等挑战,提供无缝、引人入胜的用户体验。 

参考链接:

自定义语音概述 - 语音服务 - Azure AI 服务 | Microsoft Learn

语音工作室 - 自定义语音 - 概述 (microsoft.com)

自定义模型微调的样本训练数据

https://docs.nvidia.com/deeplearning/riva/user-guide/docs/tutorials/asr-noise-augmentation-offline.h...

 

个人声音创作

自定义 AI 语音

Azure AI 文本转语音功能 使开发人员能够将文本转换为类似人类的合成语音。神经 TTS 是一种文本转语音系统,它使用深度神经网络使计算机的声音与人类的录音几乎无法区分。它提供类似人类的自然韵律和清晰的单词发音,这大大减少了与 AI 系统交互时的听力疲劳。借助 Azure 个人语音功能,用户可以创建自定义的 AI 语音,以复制他们自己或特定的角色。通过提供简短的语音样本,您可以生成一个独特的语音模型,该模型能够合成 100 多个地区 90 多种语言的语音。此功能对于个性化虚拟助手等应用程序特别有益,通过使用观众熟悉且可理解的声音来增强用户参与度和互动性。创建后,个人语音可以在应用程序中使用 ssml:

 

<span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript"><span style="color:#00e0e0">if</span> blnPersonalVoice<span style="color:#fefefe">:</span>speaker_profile_id <span style="color:#00e0e0">=</span> <span style="color:#abe338">"e04805d2-b81c-48ed-ac6b-1fa099edf0f3"</span>ssml <span style="color:#00e0e0">=</span> <span style="color:#abe338">"<speak version='1.0' xml:lang='hi-IN' xmlns='http://www.w3.org/2001/10/synthesis' "</span> \<span style="color:#abe338">"xmlns:mstts='http://www.w3.org/2001/mstts'>"</span> \<span style="color:#abe338">"<voice name='DragonLatestNeural'>"</span> \<span style="color:#abe338">"<mstts:ttsembedding speakerProfileId='%s'/>"</span> \<span style="color:#abe338">"<mstts:express-as style='cheerful' styledegree='5'>"</span> \<span style="color:#abe338">"<lang xml:lang='%s'> %s </lang>"</span> \<span style="color:#abe338">"</mstts:express-as>"</span> \<span style="color:#abe338">"</voice></speak> "</span> % <span style="color:#fefefe">(</span>speaker_profile_id<span style="color:#fefefe">,</span> locale<span style="color:#fefefe">,</span> <span style="color:#abe338">text</span><span style="color:#fefefe">)</span>result_future <span style="color:#00e0e0">=</span> synthesizer.speak_ssml_async<span style="color:#fefefe">(</span>ssml<span style="color:#fefefe">)</span><span style="color:#00e0e0">else</span><span style="color:#fefefe">:</span>result_future <span style="color:#00e0e0">=</span> synthesizer.speak_text_async<span style="color:#fefefe">(</span><span style="color:#abe338">text</span><span style="color:#fefefe">)</span>result <span style="color:#00e0e0">=</span> await loop.run_in_executor<span style="color:#fefefe">(</span>None<span style="color:#fefefe">,</span> result_future.<span style="color:#00e0e0">get</span><span style="color:#fefefe">)</span></code></span></span>

 

号召行动:探索如何在您的应用程序中实现个性化语音功能,以增强用户体验和参与度!

参考链接:

What is personal voice? - Azure AI services | Microsoft Learn

认知服务语音-sdk/samples/custom-voice at master · Azure-Samples/cognitive-services-speech...

使用语音合成标记语言 (SSML) 实现语音和声音 - 语音服务 - Azure AI 服务 | ...

 

通过实时音频合成实现低延迟

为了实现无缝、低延迟的语音交互,利用 Azure Speech SDK 和 OpenAI 的流式传输功能进行实时音频合成至关重要。通过以小块形式处理响应并在每个块准备就绪后立即合成音频,您可以提供流畅的对话体验。

来自 Azure OpenAI 的流响应

首先从 OpenAI 实时流式传输文本响应:

  • 流响应:使用 OpenAI 的流式传输功能接收生成的部分文本响应。
  • 缓冲和过程:积累文本直到检测到完整的想法(以标点符号表示),然后开始合成。
<span style="color:#333333"><span style="background-color:#ffffff"><span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript">completion <span style="color:#00e0e0">=</span> client.chat.completions.create<span style="color:#fefefe">(</span>model<span style="color:#00e0e0">=</span>open_ai_deployment_name<span style="color:#fefefe">,</span> messages<span style="color:#00e0e0">=</span>message_text<span style="color:#fefefe">,</span> stream<span style="color:#00e0e0">=</span>True<span style="color:#fefefe">)</span>async def process_stream<span style="color:#fefefe">(</span><span style="color:#fefefe">)</span><span style="color:#fefefe">:</span>text_buffer <span style="color:#00e0e0">=</span> <span style="color:#abe338">""</span><span style="color:#00e0e0">for</span> event <span style="color:#00e0e0">in</span> completion<span style="color:#fefefe">:</span><span style="color:#00e0e0">if</span> choice <span style="color:#fefefe">:</span><span style="color:#00e0e0">=</span> event.choices[<span style="color:#00e0e0">0</span>].delta.content<span style="color:#fefefe">:</span>text_buffer <span style="color:#00e0e0">+</span><span style="color:#00e0e0">=</span> choice<span style="color:#00e0e0">if</span> any<span style="color:#fefefe">(</span>p <span style="color:#00e0e0">in</span> text_buffer <span style="color:#00e0e0">for</span> p <span style="color:#00e0e0">in</span> <span style="color:#abe338">",;.!?"</span><span style="color:#fefefe">)</span><span style="color:#fefefe">:</span>await text_to_speech_streaming<span style="color:#fefefe">(</span>text_buffer.strip<span style="color:#fefefe">(</span><span style="color:#fefefe">)</span><span style="color:#fefefe">)</span>text_buffer <span style="color:#00e0e0">=</span> <span style="color:#abe338">""</span>  <span style="color:#d4d0ab"># Clear buffer</span>
</code></span></span></span></span>

使用推送模型设置音频输出

使用推送模型,在合成音频数据后立即进行流式传输:

 

<span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript"><span style="color:#d4d0ab"># Custom class to handle pushed audio data</span>
<span style="color:#abe338">class</span> CustomPushAudioStream<span style="color:#fefefe">(</span>PushAudioOutputStreamCallback<span style="color:#fefefe">)</span><span style="color:#fefefe">:</span>def write<span style="color:#fefefe">(</span>self<span style="color:#fefefe">,</span> audio_buffer<span style="color:#fefefe">:</span> memoryview<span style="color:#fefefe">)</span> <span style="color:#00e0e0">-</span><span style="color:#00e0e0">></span> int<span style="color:#fefefe">:</span><span style="color:#d4d0ab"># Handle the received audio data (e.g., play it, save it)</span>print<span style="color:#fefefe">(</span>f<span style="color:#abe338">"Received audio buffer of size: {len(audio_buffer)}"</span><span style="color:#fefefe">)</span><span style="color:#00e0e0">return</span> len<span style="color:#fefefe">(</span>audio_buffer<span style="color:#fefefe">)</span><span style="color:#d4d0ab"># Create a global SpeechSynthesizer with custom push stream</span>
push_stream <span style="color:#00e0e0">=</span> CustomPushAudioStream<span style="color:#fefefe">(</span><span style="color:#fefefe">)</span>
audio_config <span style="color:#00e0e0">=</span> AudioConfig<span style="color:#fefefe">(</span>stream<span style="color:#00e0e0">=</span>push_stream<span style="color:#fefefe">)</span>
synthesizer <span style="color:#00e0e0">=</span> SpeechSynthesizer<span style="color:#fefefe">(</span>speech_config<span style="color:#00e0e0">=</span>speech_config<span style="color:#fefefe">,</span> audio_config<span style="color:#00e0e0">=</span>audio_config<span style="color:#fefefe">)</span><span style="color:#d4d0ab"># Function to perform text-to-speech synthesis</span>
async def text_to_speech_streaming<span style="color:#fefefe">(</span><span style="color:#abe338">text</span><span style="color:#fefefe">)</span><span style="color:#fefefe">:</span>result <span style="color:#00e0e0">=</span> synthesizer.speak_text_async<span style="color:#fefefe">(</span><span style="color:#abe338">text</span><span style="color:#fefefe">)</span>.<span style="color:#00e0e0">get</span><span style="color:#fefefe">(</span><span style="color:#fefefe">)</span><span style="color:#00e0e0">if</span> result.reason <span style="color:#00e0e0">=</span><span style="color:#00e0e0">=</span> ResultReason.SynthesizingAudioCompleted<span style="color:#fefefe">:</span>print<span style="color:#fefefe">(</span>f<span style="color:#abe338">"Synthesis complete for: {text}"</span><span style="color:#fefefe">)</span>elif result.reason <span style="color:#00e0e0">=</span><span style="color:#00e0e0">=</span> ResultReason.Canceled<span style="color:#fefefe">:</span>print<span style="color:#fefefe">(</span><span style="color:#abe338">"Synthesis canceled."</span><span style="color:#fefefe">)</span>
</code></span></span>

 

行动号召:通过首先流式传输来自 OpenAI 的响应,然后立即将音频输出推送到播放,您可以在语音交互中实现低延迟和高响应度。这种基于推送的流式传输方法非常适合实时动态对话,可确保自然且引人入胜的用户体验。

参考链接: 

利用新的文本转语音功能让您的语音聊天机器人更具吸引力 (microsoft.com)

如何使用语音 SDK 降低语音合成延迟 - Azure AI 服务 | Microsoft Learn

 

用户体验提升

OpenAI 集成的智能提示

OpenAI 与 Azure AI Speech 的集成通过智能提示增强了用户体验,使交互更具吸引力和个性化。利用自然语言处理功能,这些系统可以理解上下文并实时生成相关响应,从而实现客户支持或虚拟助理场景中的无缝对话。此外,通过指示 OpenAI 包含标点符号,语音机器人可以利用流式传输功能生成具有适当停顿和语调的音频响应。这不仅使交互更加自然,而且还通过在合成过程中逐步播放音频来减少延迟,从而增强整体用户体验。

 

<span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript"><span style="color:#00e0e0">*</span><span style="color:#00e0e0">*</span>Conversation Protocol<span style="color:#00e0e0">*</span><span style="color:#00e0e0">*</span><span style="color:#00e0e0">1</span>. You converse <span style="color:#00e0e0">with</span> customer <span style="color:#00e0e0">in</span> simple<span style="color:#fefefe">,</span> short <span style="color:#fefefe">,</span> sentences.<span style="color:#00e0e0">2</span>. You use punctuations frequently <span style="color:#00e0e0">-</span> <span style="color:#fefefe">,</span>;.!?<span style="color:#00e0e0">3</span>. You generate <span style="color:#abe338">text</span> so <span style="color:#00e0e0">that</span> <span style="color:#00e0e0">in</span> <span style="color:#00e0e0">the</span> begining you have a small phrase ending <span style="color:#00e0e0">in</span> punctuations <span style="color:#fefefe">,</span>;.!?</code></span></span>

 

号召行动:了解如何将智能提示集成到您的应用程序中以提升客户互动并简化沟通流程!

 

通过实时语音转文本流实现低延迟

使用 Azure Speech SDK 进行实时语音转文本 (STT) 流式传输PushAudioInputStream可实现语音的即时转录,从而提供响应迅速且自然的用户体验。此方法非常适合需要快速反馈的场景,例如客户支持、实时转录和交互式语音系统。

主要优点

即时反馈:使用PushAudioInputStream实时 STT 可确保语音在说出后立即转录,保持对话的流畅性并增强整体用户体验。

 

<span style="background-color:#2b2b2b"><span style="color:#f8f8f2"><code class="language-applescript">
speech_config <span style="color:#00e0e0">=</span> speechsdk.SpeechConfig<span style="color:#fefefe">(</span>subscription<span style="color:#00e0e0">=</span>speech_key<span style="color:#fefefe">,</span> region<span style="color:#00e0e0">=</span>speech_region<span style="color:#fefefe">)</span><span style="color:#d4d0ab"># Create a push audio input stream and audio configuration</span>
stream <span style="color:#00e0e0">=</span> speechsdk.audio.PushAudioInputStream<span style="color:#fefefe">(</span><span style="color:#fefefe">)</span>
audio_config <span style="color:#00e0e0">=</span> speechsdk.audio.AudioConfig<span style="color:#fefefe">(</span>stream<span style="color:#00e0e0">=</span>stream<span style="color:#fefefe">)</span><span style="color:#d4d0ab"># Create the SpeechRecognizer with push stream input</span>
speech_recognizer <span style="color:#00e0e0">=</span> speechsdk.SpeechRecognizer<span style="color:#fefefe">(</span>language<span style="color:#00e0e0">=</span>lang<span style="color:#fefefe">,</span> speech_config<span style="color:#00e0e0">=</span>speech_config<span style="color:#fefefe">,</span> audio_config<span style="color:#00e0e0">=</span>audio_config<span style="color:#fefefe">)</span><span style="color:#d4d0ab"># Global list to store recognized text</span>
<span style="color:#abe338">text</span> <span style="color:#00e0e0">=</span> []<span style="color:#d4d0ab"># Callback function to handle recognized speech</span>
def handle_recognized<span style="color:#fefefe">(</span>evt<span style="color:#fefefe">)</span><span style="color:#fefefe">:</span><span style="color:#00e0e0">if</span> evt.result.reason <span style="color:#00e0e0">=</span><span style="color:#00e0e0">=</span> speechsdk.ResultReason.RecognizedSpeech<span style="color:#fefefe">:</span><span style="color:#abe338">text</span>.append<span style="color:#fefefe">(</span>evt.result.<span style="color:#abe338">text</span><span style="color:#fefefe">)</span>print<span style="color:#fefefe">(</span>f<span style="color:#abe338">"Recognized: {evt.result.text}"</span><span style="color:#fefefe">)</span><span style="color:#d4d0ab"># Connect the callback function to the recognized event</span>
speech_recognizer.recognized.connect<span style="color:#fefefe">(</span>handle_recognized<span style="color:#fefefe">)</span><span style="color:#d4d0ab"># Start continuous recognition</span>
speech_recognizer.start_continuous_recognition<span style="color:#fefefe">(</span><span style="color:#fefefe">)</span></code></span></span>

 

参考链接:

语音 SDK 音频输入流概念 - Azure AI 服务 | Microsoft Learn

 

采用流式架构的实时中断处理

在对话式 AI 中,妥善处理中断对于创建自然的对话流至关重要。借助流式架构,语音机器人可以实时检测并响应用户中断。通过在流式传输机器人响应的同时持续监控人类语音,系统可以在检测到用户讲话时立即停止播放。这可确保机器人不会继续打断用户说话,使交互更加自然,减少挫败感。利用 Azure Speech SDK 的实时功能,开发人员可以构建机器人,不仅可以在用户输入时停止 TTS 流,还可以准确管理对话上下文并无缝切换回聆听模式,从而增强整体用户体验。

号召行动:如何在语音机器人中实现实时中断处理可以创造更自然、响应更快的交互,从而提高用户满意度!

 

通过实时分类实现说话人识别

实时语音区分是一项强大的功能,可以区分音频流中的说话者,使系统能够识别和转录特定说话者的语音片段。此功能在会议或多参与者讨论等场景中特别有用,因为知道谁说了什么可以提高清晰度和理解力。通过采用单通道音频流,该技术可以准确识别不同的声音并将其与相应的对话关联起来,从而提供包含说话者标签的结构化转录输出。

行动号召:探索如何通过集成实时日记化来改善呼叫分析和增强客户互动,从而提升您的呼叫中心运营!

参考链接:

https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/announcing-general-availability-of-...

 

多语言能力

自动语言检测和翻译

Azure 自动语言检测和翻译功能可实现实时翻译,无需用户指定输入语言,从而显著增强了用户交互。此功能允许应用程序无缝识别口语,从而促进多语言场景中的交流。语音翻译 API 可以在单个会话中处理多种语言,根据需要自动在它们之间切换,同时以文本或音频形式提供准确的翻译。此外,Azure AI 文本转语音提供 400 多种声音和 140 多种语言和区域设置。单个预构建的逼真神经语音具有 多语言 支持,可以轻松以同一种声音阅读多种语言的内容。 

行动号召:了解如何通过整合自动语言检测和翻译来提升您在不同市场的客户互动!

参考链接:Announcing-video-translation-and-speech-translation-api

 

结论

Azure AI 创新助力成功之路

Azure AI Speech、Azure AI Speech 和 Azure Open AI 的创新为语音机器人领域的持续成功铺平了道路。

 

博客文章缩略图 2,标题为“下一代语音<a class=机器人:通过 Azure Speech 实现类人交互”" class="lia-media-image" height="522" src="https://img-blog.csdnimg.cn/img_convert/e74063792f765aae0912b6f8a15c9d11.png" width="998" />

Azure 尖端技术为语音机器人开发中的关键挑战提供了全面的解决方案。凭借低延迟、高准确度、经济高效的扩展和类似人类的交互,Azure 使企业能够提供响应迅速且引人入胜的语音体验,满足并超越客户期望。通过利用这些功能,组织可以增强其沟通策略并推动有意义的用户参与。


http://www.ppmy.cn/news/1521017.html

相关文章

Gin框架中的单个路由中间件:深入理解Next与Abort

Gin是一个高性能的Go语言Web框架&#xff0c;它提供了灵活的中间件机制来处理HTTP请求。在Gin中&#xff0c;中间件可以对请求进行预处理和后处理&#xff0c;而c.Next()和c.Abort()是控制请求处理流程的两个关键方法。本文将通过一个示例详细介绍这两个方法的使用和作用。 1.…

关于一个早期的计算机网络的理解

电脑网络这个新鲜玩意儿&#xff0c;到底是怎样的呢&#xff1f; 2017年11月30日星期四&#xff0c; 我以前回答过这个问题&#xff0c; 简单点举个例子来理解&#xff0c;电脑网络就很形象的被说明了&#xff0c; 它本身就是一张网&#xff0c;一张看不见摸不着但还能用得着的…

图像去噪实验:基于全变分(TV)模型的MATLAB实现

一、背景 全变分模型在图像处理领域中被广泛用于去除噪声&#xff0c;同时保持图像边缘的清晰度。 二、实验步骤 图像的读取、噪声添加、去噪处理以及结果的显示。 三、实验仿真结果图 四、结论 全变分模型是一种有效的图像去噪方法&#xff0c;它能够在去除噪声的同时&#…

【WPF动画】

关于 WPF 中 System.Windows.Media.Animation 命名空间下常用动画类的简要介绍、使用方法和适用场景的表格 使用场景解释&#xff1a;示例代码1示例代码2&#xff1a;使用 Storyboard 组合多个动画代码解释应用场景 动画类描述使用示例适用场景DoubleAnimation用于为 double 类…

驱动开发系列17 - PCI总线

一:概述 PCI(外设计算机互连)或PCIe总线是现代计算机的主要组成部分,了解它的工作原理对于理解许多Linux设备驱动程序非常重要。 关于PCI总线本身有很多好的信息(在维基百科和其他地方),而Linux内核中也有关于PCI处理子系统实际实现的文档。然而,这两种现有来源…

云原生 | 在 Kubernetes 中使用 Cilium 替代 Calico 网络插件实践指南!

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 简述介绍 什么是 Cilium? Cilium 是一款开源软件,它基于一种名为eBPF的新的Linux内核技术提供动力,用于透明地保护使用 Docker 和 Kubernetes 等Linux 容器管理平台中部署的应用程序服务之间的网络连接,Ciliu…

深度解析RAG技术在大模型时代的原理与实践

RAG的概念 QCon北京2024上涉及了很多大模型应用落地场景&#xff0c;出现比较多的应用模式关键词是&#xff1a;AI Agent和RAG&#xff08;RAG也常被在Agent的Cot或是Mutil-Agent协作的流程中&#xff09;。 &#xff0c;那什么是RAG&#xff1f; 本文将基于RAG的核心组件、…

Web攻防之应急响应(二)

目录 前提 &#x1f354;学习Java内存马前置知识 内存马 内存马的介绍 内存马的类型众多 内存马的存在形式 Java web的基础知识&#xff1a; Java内存马的排查思路&#xff1a; &#x1f354;开始查杀之前的需要准备 1.登录主机启动服务器 2.生成jsp马并连接成功 …

Python实现 ElGamal 加密算法

目录 使用 Python 实现 ElGamal 加密算法的博客引言ElGamal 加密算法的工作原理Python 面向对象实现 ElGamal 算法代码解析示例场景&#xff1a;安全消息传输代码解析Python 代码的扩展和优化总结 使用 Python 实现 ElGamal 加密算法的博客 引言 ElGamal 加密算法 是一种基于…

绿色无广告,纯净体验——2024年优质免费视频剪辑软件

如果你习惯一个视频网站的时候&#xff0c;工作上遇到问题也会第一时间在视频网站上进行搜索解决方案。就比如我同事就很喜欢在短视频网站上搜索Office软件的一些操作步骤。如果你也想分享这类视频&#xff0c;那么我们一起探讨下有哪些适合抖音剪辑的视频剪辑工具。 1.福昕视…

magisk+lsposed hook okhttp3采集小红书app端接口(包含完整源码)(2024-09-03)

摘要&#xff1a; 本文介绍如何通过hook OkHttp3框架来拦截并处理应用的网络响应&#xff0c;特别是在某书APP中&#xff0c;通过深入理解Okhttp3的API&#xff0c;hook RealCall以获取请求和响应数据&#xff0c;实现关键词搜索、笔记和用户等数据的回传操作。 一、原理介…

商品信息的标准化

销售环节的数字化见效最快 现在&#xff0c;企业的数字化是非常热的话题&#xff0c;工业&#xff14;.&#xff10;&#xff0c;人工智能&#xff0c;物联网&#xff0c;机器人都是企业数字化转型的主要方向&#xff0c;但是某些时候&#xff0c;我们走的太远&#xff0c;却忘…

2409vue,vue3.5更新

原文 今天,很高兴地发布Vue3.5! 此次要版本不包含破坏更改,只包括内部改进和有用的新函数.这里包含一些亮点. 反应式系统优化 在3.5中,Vue的响应式系统经历了另一次重大重构,实现了更好性能并显著提高了(-56%)内存使用率而行为不变. 此重构还解决了在SSR时,因挂起计算而导…

微服务中的服务降级与熔断机制

目录&#xff1a; 1、简介2、服务降级2.1. Hystrix基础配置2.2. 启用Hystrix2.3. 实现服务降级2.4. 配置Hystrix 3、熔断机制3.1. 配置熔断器3.2. 查看Hystrix Dashboard 1、简介 在微服务架构中&#xff0c;服务降级与熔断机制是保证系统稳定性和可靠性的关键技术。当系统中的…

flowable 国产数据库并发性能优化

最近在生产环境有用户反馈系统流转速度较慢&#xff0c;这边用的是金仓数据库&#xff0c;这边查了数据库的慢sql日志&#xff0c;最后发现问题&#xff0c;以下是部分慢sql的执行时间截图 主要都是流转过程中更新执行表和历史变量表执行时间较长&#xff0c;于是查了表的默认索…

2024年全国铁路(铁路、高铁、地铁)矢量数据集

数据更新时间​&#xff1a;2024年6月​&#xff1b; ​数据范围&#xff1a;全国各省&#xff08;不包含台湾&#xff09;; 数据格式​&#xff1a;shp; ​数据包含类型&#xff1a;铁路、高铁、地铁 数据​坐标信息&#xff1a; EPSG Code 4326 大地基准面 D_WGS_1…

【OpenGL】 理解makeCurrent函数

背景 用QT学校OpenGL绝对可以事半功倍&#xff0c;QT提供了一系列对OpenGL的支持&#xff0c;包括OPenGL窗口类&#xff0c;对OpenGL函数的面向对象的封装等。 总体说明 在Qt框架中&#xff0c;makeCurrent 是QOpenGLContext类的一个方法&#xff0c;它封装了这些平台特定的…

CSS解析:盒模型

在网页上实现元素布局涉及很多技术。在复杂网站上&#xff0c;可能会用到浮动元素、绝对定位元素以及其他各种大小的元素&#xff0c;甚至也会使用较新的CSS特性&#xff0c;比如Flexbox或者网格布局。 在此之前我们要打好基础&#xff0c;深刻理解浏览器是如何设置元素的大小…

Update Azure OpenAI npm Package to 2023-12-01-preview Version

题意&#xff1a;将 Azure OpenAI npm 包更新到 2023-12-01-preview 版本 问题背景&#xff1a; I am currently using the azure-openai npm package in my project with version 2023-03-15-preview. As per the latest updates, version 2023-12-01-preview is available a…

使用 SCSS 或 LESS 相比于纯 CSS 的好处

使用 SCSS 或 LESS 相比于纯 CSS 有以下几个好处&#xff1a; 变量支持&#xff1a; SCSS/LESS&#xff1a;可以定义变量用于存储颜色、字体大小、间距等值&#xff0c;便于在整个样式文件中复用。例如&#xff0c;可以定义一个颜色变量 $primary-color: #3498db;&#xff0c;然…