紧急操作员语音聊天机器人:授权协助
语言模型在世界上正在迅速发展。现在,随着多模式LLM占据了该语言模型竞赛的最前沿,重要的是要了解我们如何利用这些多模型的功能。从传统的基于文本的AI驱动聊天机器人,我们正在过渡到基于语音的聊天机器人。这些充当我们的个人助理,稍后通知我们需要满足我们的需求。如今,您可以找到此博客,我们将建立一个基于紧急操作员语音的聊天机器人。这个想法非常简单:
- 我们与聊天机器人交谈
- 它听了了解我们所说的
- 它用语音响应
目录
- 我们的用例
- 我们将使用的工具
- 要求
- 项目结构
- 设置虚拟环境
- 主要Python脚本
- 简化应用程序
- 最终输出
- 可以做出什么改进?
- 结论
我们的用例
让我们想象一个现实的情况。我们生活在一个拥有超过14亿人口的国家,人口如此庞大,无论是医疗问题,防火,警察干预,甚至是抗自杀援助等人的心理健康支持等,都必须发生紧急情况。
在这样的时刻,每一秒钟都很重要。同样,考虑到缺乏紧急操作员以及提出的大量问题。在这里,基于语音的聊天机器人可以产生很大的差异,当人们最需要时,可以提供快速,口语的帮助。
- 紧急援助:立即为健康,火灾,犯罪或与灾难有关的查询提供帮助,而无需等待人类操作员(如果不可用)。
- 心理健康热线:基于语音的情感支持助理助理指导用户同情。
- 农村可访问性:访问移动应用程序的区域可以从简单的语音界面中受益,因为人们经常通过在这些领域讲话进行交流。
这正是我们要建造的。我们将充当寻求帮助的人,聊天机器人将扮演由大语言模型提供支持的紧急响应者的角色。
我们将使用的工具
为了实现我们的语音聊天机器人,我们将使用以下提到的AI模型:
- Whisper(大) - 通过GroqCloud运行的Openai的语音到文本模型将语音转换为文本。
- GPT-4.1米尼- 由Cometapi(免费LLM提供商)提供支持,这是我们聊天机器人的大脑,它将了解我们的查询并会产生有意义的响应。
- Google文本到语音(GTTS) - 将聊天机器人的响应转换回声音,以便与我们交谈。
- FFMPEG - 一个方便的库,可帮助我们轻松录制和管理音频。
要求
在开始编码之前,我们需要设置一些内容:
- GROQCLOUD API键:从这里获取:https://console.groq.com/keys
- Cometapi键
注册并存储您的API键,来自:https://api.cometapi.com/ - Elevenlabs API键
注册并存储您的API键,从:https://elevenlabs.io/app/home中 -
FFMPEG安装
如果您还没有它,请按照本指南在系统上安装FFMPEG:https://itsfoss.com/ffmpeg/
通过在终端中键入“ ffmeg -version ”来确认
设置这些设置后,您就可以潜水来构建自己的语音支持聊天机器人!
项目结构
项目结构将是相当简单且基本的,我们的大部分工作都会在app.py和utils.py python脚本中进行。
语音chatbot/<br><br> ├ - ─venv/#依赖关系的虚拟环境<br>├├─.env#环境变量(API键等)<br> ├ - app.py#主要应用程序脚本<br>├ - 紧急#PNG#紧急图像资产<br>├──readme.md#项目文档(可选)<br> ├ - ─txt#python依赖关系<br>├├─pys.py#实用程序/辅助功能
需要修改一些必要的文件,以确保我们所有的依赖项都满足:
在.env文件中
groq_api_key =“ <your-groq-api-key comet_api_key="“">” elevenlabs_api_key =“ <your-eyverlabs-api key><p>在需求.txt中</p> <pre class="brush:php;toolbar:false">ffmpeg-python Pydub pyttsx3 Langchain Langchain-Community 兰链核 Langchain-Groq langchain_openai Python-Dotenv 流== 1.37.0 Audio-Recorder-StreamLit Dotenv Elevenlabs GTTS
设置虚拟环境
我们还必须建立一个虚拟环境(一个很好的做法)。我们将在终端执行此操作。
- 创建我们的虚拟环境
〜/Desktop/atragy -voice -chatbot $ conda create -p venv python == 3.12 -y
- 激活我们的虚拟环境
〜/桌面/紧急Voice-Chatbot $ Conda激活VENV/
- 运行应用程序后,您也可以停用虚拟环境
〜/桌面/紧急Voice-chatbot $ conda停用
主要Python脚本
让我们首先探索utils.py脚本。
1。主要进口
时间,tempfile,OS,RE,Bytesio - 处理时间,临时文件,环境变量,正则和内存数据。
请求- 提出HTTP请求(例如,调用API)。
GTTS , Elevenlabs , Pydub - 将文本转换为语音,语音转换为文本和播放/操纵音频。
groq , langchain_* - 使用groq/openai llms langchain处理并生成文本。
简化- 构建交互式Web应用程序。 DOTENV - 来自.env文件的加载环境变量(如API键)。
进口时间 导入请求 导入tempfile 导入 来自IO Import Bytesio 从GTTS导入GTTS 来自Elevenlabs。 从Elevenlabs进口游戏 从PYDUB导入自审发现 来自Groq Import Groq 来自langchain_groq导入changroq 来自langchain_openai进口chatopenai 来自langchain_core.messages进口Aimessage,人类 来自langchain_core.output_parsers import stroutputparser 来自langchain_core.prompts导入chatprompttemplate 导入简报为ST 导入操作系统 来自dotenv import load_dotenv load_dotenv()
2。加载API键并初始化模型
#初始化groq客户端 客户端= groq(api_key = os.getenv('groq_api_key')) #初始化LLM响应的GROQ模型 llm = chatopenai( model_name =“ gpt-4.1-mini”, openai_api_key = os.getenv(“ comet_api_key”), openai_api_base =“ https://api.cometapi.com/v1” ) #设置FFMPEG的路径 AudioseGent.Converter =“/bin/ffmpeg”
3。将音频文件(我们的语音录制)转换为.wav格式
在这里,我们将在视听和字节上进行的字节中转换我们的音频,并将其转换为wav格式:
def audio_bytes_to_wav(audio_bytes): 尝试: 使用tempfile.namedtemporaryfile(delete = false,suppix =“。wav”)作为temp_wav: audio = audiosegend.from_file(bytesio(audio_bytes)) #下样本以减小文件大小(如果需要) 音频= audio.set_frame_rate(16000).set_channels(1) audio.export(temp_wav.name,format =“ wav”) 返回temp_wav.name 除例外为E: St.Error(f“ Wav文件转换期间的错误:{e}”) 没有返回
4。拆分音频
我们将根据输入参数(check_length_ms)来划分音频。我们还将在Regex的帮助下发挥作用,以摆脱任何标点符号。
def split_audio(file_path,chunk_length_ms): audio = AudioseGrend.from_wav(file_path) 返回[audio [i:i chunk_length_ms]在范围内(0,len(audio),chunk_length_ms)] def remove_punctuation(文本): 返回re.sub(r'[^\ w \ s]',',text)
5。LLM响应生成
现在,要执行主要响应器功能,其中LLM将对我们的查询产生适当的响应。在及时模板中,我们将向我们的LLM提供有关如何响应查询的说明。我们将实施Langchain表达语言来完成此任务。
def get_llm_response(查询,chat_history): 尝试: 模板= template =“”“” 您是经验丰富的紧急响应电话操作员,训练有素,可以处理印度的重要情况。 您的角色是在涉及的紧急情况下冷静,清楚地指导用户: - 医疗危机(伤害,心脏病发作等) - 火灾事件 - 警察/执法援助 - 预防自杀或心理健康危机 您必须: 1。**保持冷静和自信**,好像在电话上说话一样。 2。 3。**提供即时且实用的步骤**用户可以在帮助到达之前采取。 4。**共享准确的,印度的紧急热线供索数**(例如,112、102、108、1091、1098、9152987821等)。 5。**优先考虑用户安全**,并清楚地指示他们*不*做什么。 6。如果情况涉及**自杀思想或精神痛苦**,请以同情心做出回应,并将其引导到适当的心理健康热线和安全行动。 如果用户的查询与紧急情况无关,请响应: “我只能协助紧急紧急问题。请联系一般支持线,以获取非紧急问题。” 使用权威,支持性的语调,简短和直接的句子,并为**印度和农村地区的环境量身定制指导**。 **聊天历史记录:** {chat_history} **用户:** {user_query} ”“” 提示= chatprompttemplate.from_template(模板) 链=提示| llm | StroutputParser() response_gen = chain.stream({{ “ chat_history”:chat_history, “ user_query”:查询 })) response_text =''.join(list(response_gen)) response_text = remove_punctuation(wendesp_text) #删除重复的文本 response_lines = response_text.split('\ n') unique_lines = list(dict.fromkeys(reversys_lines))#删除重复项 cleaned_response ='\ n'.join(unique_lines) 返回Cleaned_responsechatbot 除例外为E: St.Error(f“ LLM响应生成期间的错误:{e}”) 返回“错误”
6。语音的文字
我们将在Elevenlabs TTS客户端的帮助下构建一个函数,以将我们的文本转换为语音,该函数将以“自觉”格式返回我们的音频。我们还可以使用其他TTS模型,例如Nari Lab的DIA或Google的GTT。 11个实验室在一开始就为我们提供了一些免费的信用,然后我们必须支付更多信用额,另一方面的GTT绝对可以免费使用。
def text_to_speech(文本:str,reteries:int = 3,延迟:int = 5): 尝试= 0 尝试<h3 id="创建介绍性消息">7。创建介绍性消息</h3><p>我们还将创建一个介绍性文本并将其传递给我们的TTS模型,因为受访者通常会自我介绍并寻求用户可能需要的帮助。在这里,我们将返回MP3文件的路径。</p><p> <em>lang =“ en”</em> - >英语</p><p><em>tld =“ co.in”</em> - >可以为给定语言产生不同的局部“口音”。默认值是“ com”</p><pre class="brush:php;toolbar:false"> def create_welcome_message(): 欢迎_text =( “你好,你到达了紧急服务台。” “请让我知道这是医疗,火灾,警察还是心理健康紧急情况 - ” “我在这里引导您马上。” ) 尝试: #请求语音合成(流生成器) response_stream = tts_client.text_to_speech.convert( text =欢迎_text, 嗓音_, 模型_, output_format =“ mp3_44100_128”, ) #将流字节保存到临时文件 使用tempfile.MegedTemporaryFile(delete = false,suffix ='。mp3')作为f: 对于响应中的块_stream: F.Write(块) 返回f.name 除了请求。connectionError: St.Error(“由于连接错误,无法生成欢迎消息。”) 除例外为E: St.Error(f“错误创建欢迎消息:{e}”) 没有返回
简化应用程序
现在,让我们跳入Main.py脚本,我们将使用简化来可视化聊天机器人。
导入库和功能
导入我们的图书馆和我们在Utils.py中构建的功能
导入tempfile 导入re#如果不使用,则可以删除 来自IO Import Bytesio 从PYDUB导入自审发现 来自langchain_core.messages进口Aimessage,人类 来自langchain_core.output_parsers import stroutputparser 来自langchain_core.prompts导入chatprompttemplate 导入简报为ST 来自AUDIO_RECORDER_STREAMLIT导入AUDIO_RECORDER 从UTILS导入 *
简化设置
现在,我们将设置标题名称和漂亮的“紧急”视觉照片
圣提特(“:蓝色[紧急帮助机器人)???) st.sidebar.image('./ earker.jpg',use_column_width = true)
我们将设置会话状态以跟踪我们的聊天和音频
如果“ chat_history”不在st.Session_state中: st.Session_state.chat_history = [] 如果“ chat_histories”不在st.Session_state中: st.Session_state.chat_histories = [] 如果“ play_audios”不在st.Session_state: st.Session_state.played_audios = {}
调用我们的UTILS功能
我们将从受访者方面创建欢迎消息介绍。这将是我们对话的开始。
如果Len(St.Session_state.chat_history)== 0: 欢迎_Audio_path = create_welcome_message() st.Session_state.chat_history = [ Aimessage(内容=“您好,您已经到达了紧急服务台。请让我知道是否是医疗,火灾,警察或心理健康紧急情况 - 我在这里立即引导您。 这是给 st.Session_state.played_audios [welcome_audio_path] = false
侧边栏设置
现在,在侧边栏中,我们将设置我们的语音录音机以及语音到文本, llm_response和文本到语音逻辑,这是该项目的主要关键
与圣德巴尔: audio_bytes = audio_recorder( energy_threshold = 0.01, 暂停_threshold = 0.8, text =“单击图标(最大5分钟)\ n”,“说话”, rectioning_color =“#e9b61d”,#Yellow netral_color =“#2ABF37”,#green icon_name =“麦克风”, icon_size =“ 2x” ) 如果audio_bytes: temp_audio_path = audio_bytes_to_wav(audio_bytes) 如果temp_audio_path: 尝试: user_input = speech_to_text(audio_bytes) 如果User_input: st.Session_state.chat_history.append(humanMessage(content = user_input,audio_file = temp_audio_path))) 响应= get_llm_response(user_input,st.Session_state.chat_history) audio_response = text_to_speech(响应)
我们还将在侧边栏上设置一个按钮,该按钮将使我们在需要时重新启动会话,当然,我们的介绍性语音音符是受访者侧的。
如果圣巴顿(“开始新聊天”): st.Session_state.chat_histories.append(St.Session_state.chat_history) 欢迎_Audio_path = create_welcome_message() st.Session_state.chat_history = [ Aimessage(内容=“您好,您已经到达了紧急服务台。请让我知道是否是医疗,火灾,警察或心理健康紧急情况 - 我在这里立即引导您。 这是给
在应用程序的主页中,我们将以单击的形式可视化聊天历史记录以播放音频文件
在st.Session_state.chat_history中使用味精: 如果Isinstance(MSG,Aimessage): 与St.Chat_message(“ AI”): St.Audio(msg.audio_file,格式=“音频/mp3”) 否则:#人类 使用St.Chat_message(“用户”): St.Audio(msg.audio_file,格式=“音频/wav”)
现在,我们完成了运行应用程序所需的所有Python脚本。我们将使用以下命令运行简化应用程序:
简化运行app.py
因此,这就是我们的项目工作流程的样子:
[用户会说]→audio_recorder→audio_bytes_to_wav→speecy_to_text→get_llm_response→text_to_to_speech→st.audio
有关完整代码,请访问此GitHub存储库。
最终输出
简化的应用看起来很干净,并且运行正常!
让我们看看它的一些回答: -
- 用户:嗨,有人正在心脏病发作,我该怎么办?
然后,我们就个人的位置和状态进行了对话,然后聊天机器人提供了这一点
- 用户:您好,德里发生了巨大的火灾突破。请快速发送帮助
受访者询问情况以及我目前的位置在哪里,然后继续提供预防措施
- 用户:嘿,有一个人一个人站在桥的边缘,我应该如何进行?
受访者询问我所在的位置和我提到的人的心理状态
总体而言,我们的聊天机器人能够根据情况对我们的查询做出回应,并提出相关问题以提供预防措施。
阅读更多:如何在Python中构建聊天机器人?
可以做出什么改进?
- 多语言支持:可以将LLM与强大的多语言功能集成在一起,这可以使聊天机器人与来自不同区域和方言的用户无缝交互。
- 实时转录和翻译:添加语音到文本和实时翻译可以帮助桥梁通信空白。
- 基于位置的服务:通过集成GPS或其他基于位置的API,该系统可以检测用户的位置并指导最近的紧急设施。
- 语音到语音的互动:我们还可以使用语音到语音模型,因为它们是为这些功能而构建的,因此可以使对话变得更加自然。
- 对LLM进行微调:基于紧急数据的LLM自定义微调可以提高其理解并提供更准确的响应。
要了解有关AI驱动的语音代理的更多信息,请遵循以下资源:
- 建立客户支持语音代理
- 纸到语音助手
- 多语言语音代理
- 前10个开源Python图书馆,用于构建语音代理
结论
在本文中,我们使用AI模型和一些相关工具的组合成功地建立了基于语音的紧急响应聊天机器人。该聊天机器人复制了训练有素的应急操作员的角色,该操作员能够使用镇定的自信,可以改变我们LLM的行为,以适应各种现实世界中的紧急情况,从而使城市和农村场景更现实。
以上是紧急操作员语音聊天机器人:授权协助的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在从事代理AI时,开发人员经常发现自己在速度,灵活性和资源效率之间进行权衡。我一直在探索代理AI框架,并遇到了Agno(以前是Phi-

SQL的Alter表语句:动态地将列添加到数据库 在数据管理中,SQL的适应性至关重要。 需要即时调整数据库结构吗? Alter表语句是您的解决方案。本指南的详细信息添加了Colu

陷入困境的基准:骆驼案例研究 2025年4月上旬,梅塔(Meta)揭开了Llama 4套件的模特套件,具有令人印象深刻的性能指标,使他们对GPT-4O和Claude 3.5 Sonnet等竞争对手有利地定位。伦斯的中心

该版本包括三种不同的型号,GPT-4.1,GPT-4.1 MINI和GPT-4.1 NANO,标志着向大语言模型景观内的特定任务优化迈进。这些模型并未立即替换诸如

解锁嵌入模型的力量:深入研究安德鲁·NG的新课程 想象一个未来,机器可以完全准确地理解和回答您的问题。 这不是科幻小说;多亏了AI的进步,它已成为R

视频游戏可以缓解焦虑,建立焦点或支持多动症的孩子吗? 随着医疗保健在全球范围内挑战,尤其是在青年中的挑战,创新者正在转向一种不太可能的工具:视频游戏。现在是世界上最大的娱乐印度河之一

模拟火箭发射的火箭发射:综合指南 本文指导您使用强大的Python库Rocketpy模拟高功率火箭发射。 我们将介绍从定义火箭组件到分析模拟的所有内容

双子座是Google AI策略的基础 双子座是Google AI代理策略的基石,它利用其先进的多模式功能来处理和生成跨文本,图像,音频,视频和代码的响应。由DeepM开发
