使我的肿胀,毁容的手弄滑,我坐在沙发上,无法开车去商店拿起一些绷带和药物,以造成严重的痛苦。我拉起了最近的商店的网站,并开始键入我要寻找的物品。那是我的非主导之手。
我放弃了。我只是痛苦太多了,我永远花了我永远在线订购这些物品进行交付。
您可能已经发现了这个问题。我不能足够快地打字并且不耐烦。我的手和手指的大小散落着,药房也失去了生意,因为我无法订购我需要的东西。
您可能想知道我是如何摔断的,这与在Python建立代理辅助机器人有什么关系。为了长时间短篇小说,有人意外地猛击了我手上的车门。看起来还不错,直到几个小时后开始变成蓝色,疼痛变得巨大。
我没有很快去急诊室,没有人带我去。因此,我做了一些人会做的事情,我的手上放了一个冰袋,希望肿胀会下降。
nope,没有工作!
当我开始惊慌失措时。那一刻,我几乎没有拿起手机,那就是当我尝试用好手订购紧急物品时。
我放弃了超级沮丧。
这将是使用语音到文本聊天机器人的绝佳机会,因此代理商可以更快地帮助我,而不是单独订购每个项目并将每个物品添加到在线结帐购物车中。
输入python。
使用Python中的聊天机器人使用语音到文本提供商进行代理辅助
我现在非常丑陋的手启发了此博客文章教程的想法。我心想,我的生活怎么会变得更轻松 - 以最简单,最简单的方式更漂亮?
我很想刚按下一个按钮并与客户服务聊天,因此可以订购我的物品。通过聊天,我不是卑鄙的类型,而是说话,他们根据我的说法给我发送了回应。这几乎是使用AI语音到文本技术的代理辅助聊天机器人。
在本教程中,我建立了一个命令行实现,该实现看起来像是使用Deepgram,语音识别提供商,基于机器学习和Python的Chatterbot,Chatterbot。
如果您想查看完整的代码,请跳到博客文章的末尾。在进入代码说明之前,让我们看看为什么我们可能需要语音到文本和聊天机器人。
为什么我们需要使用python的客户协助的AI语音到文本
您可能需要自动语音识别(ASR)的原因有很多,包括:
-
增加可访问性 - 语音到文本使技术在各种情况下更容易获得技术。
-
它比键入要快。
-
提高了生产率和盈利能力 - 说到时间,这对所有参与者来说都是一个很好的生产率和盈利能力。
这些只是几个,但是还有更多用例。
为什么我们需要使用Python的聊天机器人客户协助
许多公司需要聊天以及电话支持,并使用聊天机器人与客户进行互动。聊天机器人的一些优点是:
-
他们有24/7的可用性 - 它们每天都有时间可供客户回答他们的问题。
-
收集和分析数据 - 可以从聊天机器人会议上更快地收集和分析数据,从而改善客户体验。
现在,我们知道为什么语音到文本和聊天机器人都很重要,所以让我们深入研究技术,并发现使用Python构建我们的代理 - 助手聊天机器人的工具。
语音到文本聊天机器人与Python
在开始编码之前,我需要先设置一些东西。
-
步骤1 - 确保使用或以下3.9的Python版本与我们选择的Chatbot Python库,Chatterbot。
-
步骤2 - 来自我们的控制台的Grab a Deepgram API Key。 Deepgram是一位语音识别提供商,可转录已录制或现场流的音频从语音到文本。
-
步骤3 - 在我的计算机上创建一个名为
python-agent-bot
的目录,并使用代码编辑器(例如VS代码)打开它。 -
步骤4 - 目录内部创建一个新的python文件。我叫我的
chatbot.py
。 -
步骤5 - 建议创建虚拟环境并在其中安装所有Python库,但不需要。有关创建虚拟环境的更多信息,请查看此博客文章。
-
步骤6 - 以这样的
pip
在虚拟环境中安装以下python库:
pip install chatterbot==1.0.2
pip install pytz
pip install pyaudio
pip install websockets
很棒!现在,设置了所有内容,让我们按部分逐步浏览Python代码。确保将其添加到文件chatbot.py
。
在这里,我们正在导入带有Chatterbot的语音到文本聊天机器人所需的必要的Python软件包和库。
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
import pyaudio
import asyncio
import websockets
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.ERROR)
复制并粘贴您在控制台中创建的深色API键,然后在此处添加:
DEEPGRAM_API_KEY = ‘YOUR_DEEPGRAM_API_KEY_GOES_HERE`
以下是Pyaudio所需的设置,要从您的计算机麦克风中获取音频:
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 8000
创建聊天机器人的新实例,然后开始训练聊天机器人以响应您。
bot = ChatBot('Bot')
trainer = ListTrainer(bot)
trainer.train([
'Hi',
'Hello',
'I need to buy medication.',
'Sorry you are not feeling well. How much medication do you need?',
'Just one, please',
'Medication added. Would you like anything else?',
'No Thanks',
'Your order is complete! Your delivery will arrive soon.'
])
Pyaudio需要此回调,该回调将项目放入队列而不会阻止。
audio_queue = asyncio.Queue()
def callback(input_data, frame_count, time_info, status_flag):
audio_queue.put_nowait(input_data)
return (input_data, pyaudio.paContinue)
接下来,我们使用Pyaudio访问机器上的麦克风。
async def microphone():
audio = pyaudio.PyAudio()
stream = audio.open(
format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = CHUNK,
stream_callback = callback
)
stream.start_stream()
while stream.is_active():
await asyncio.sleep(0.1)
stream.stop_stream()
stream.close()
在这里,Websocket被处理并击中DeepGram API端点。在嵌套的receiver
函数中,我们获得了成绩单,客户所说的内容,并打印代理的响应。
async def process():
extra_headers = {
'Authorization': 'token ' + DEEPGRAM_API_KEY
}
async with websockets.connect('wss://api.deepgram.com/v1/listen?encoding=linear16&sample_rate=16000&channels=1', extra_headers = extra_headers) as ws:
async def sender(ws):
try:
while True:
data = await audio_queue.get()
except Exception as e:
print('Error while sending: ', str(e))
raise
async def receiver(ws):
async for msg in ws:
msg = json.loads(msg)
transcript = msg['channel']['alternatives'][0]['transcript']
if transcript:
print('Customer(you):', transcript)
if transcript.lower() == "okay":
print('Agent: bye')
break
else:
response=bot.get_response(transcript)
print('Agent:', response)
await asyncio.wait([
asyncio.ensure_future(microphone()),
asyncio.ensure_future(sender(ws)),
asyncio.ensure_future(receiver(ws))
])
最后,我们调用main
函数执行我们的代码。
def main():
asyncio.get_event_loop().run_until_complete(process())
if name == '__main__':
main()
运行程序并尝试一下,从您的终端键入python3 chatbot.py
。首先说Hi
,然后代理将在打字消息中响应Hello
,依此类推。
这是对话的样子的一个例子:
我希望您喜欢本教程以及Python中语音和聊天机器人所带来的所有可能性。完整的代码如下。
完整的语音到文本聊天机器人与Python
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
import pyaudio
import asyncio
import websockets
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.ERROR)
DEEPGRAM_API_KEY = "YOUR-DEEPGRAM-API-KEY"
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 8000
bot = ChatBot('Bot')
trainer = ListTrainer(bot)
trainer.train([
'Hi',
'Hello',
'I need to buy medication.',
'Sorry you are not feeling well. How much medication do you need?',
'Just one, please',
'Medication added. Would you like anything else?',
'No Thanks',
'Your order is complete! Your delivery will arrive soon.'
])
audio_queue = asyncio.Queue()
def callback(input_data, frame_count, time_info, status_flag):
audio_queue.put_nowait(input_data)
return (input_data, pyaudio.paContinue)
async def microphone():
audio = pyaudio.PyAudio()
stream = audio.open(
format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = CHUNK,
stream_callback = callback
)
stream.start_stream()
while stream.is_active():
await asyncio.sleep(0.1)
stream.stop_stream()
stream.close()
async def process():
extra_headers = {
'Authorization': 'token ' + DEEPGRAM_API_KEY
}
async with websockets.connect('wss://api.deepgram.com/v1/listen?encoding=linear16&sample_rate=16000&channels=1', extra_headers = extra_headers) as ws:
async def sender(ws):
try:
while True:
data = await audio_queue.get()
except Exception as e:
print('Error while sending: ', str(e))
raise
async def receiver(ws):
async for msg in ws:
msg = json.loads(msg)
transcript = msg['channel']['alternatives'][0]['transcript']
if transcript:
print('Customer(you):', transcript)
if transcript.lower() == "okay":
print('Agent: bye')
break
else:
response=bot.get_response(transcript)
print('Agent:', response)
await asyncio.wait([
asyncio.ensure_future(microphone()),
asyncio.ensure_future(sender(ws)),
asyncio.ensure_future(receiver(ws))
])
def main():
asyncio.get_event_loop().run_until_complete(process())
if name == '__main__':
main()
如果您对此帖子或Deepgram周围的其他任何反馈,我们很乐意收到您的来信。请在我们的GitHub discussions中告诉我们。