使用AI制作我自己的智能助手应用程序

2023-01-12 19:25 1751 阅读 ID:686
磐创AI
磐创AI

介绍

智能助手允许你通过语音交互快速从网络收集信息。

在制作智能助手时,我想制作一个带有图形用户界面的网络应用程序,我可以使用我的语音与智能助手进行交互。

在这篇文章中,我详细介绍了我如何制作这个应用程序,我使用了什么工具以及我应用的方法。用于这个小项目的许多工具可以用于其他许多项目。

方法

为了制作智能助手,我使用了OpenAI的GPT-3。GPT-3是OpenAI训练的大规模语言模型。它是经过预训练的,能够很好地推广到各种各样的用例。

我的目标是制作一个应用程序,通过它我可以使用我的语音与GPT-3交互。

应用程序的总体流程图如下所示:

为了将我的声音传递给OpenAI,我首先需要将我的语言传递给文本。因此,首先我使用Streamlit应用程序录制我的声音。然后我对录音进行编码,并将其传递给AssemblyAI,以便转录。我收到转录并将其传递给OpenAI。然后,我可以获取响应并在应用程序上显示。

为了通过应用程序与这些服务进行通信,我使用了它们的API。

什么是API?

应用程序接口(API)是软件程序相互通信的方式。为了让他们进行交互,API提供了一组协议和工具来帮助交互成功。

这两个服务都有Python中的API,所以我可以很容易地将这两种服务集成到应用程序中。

API允许我访问由公司开发和托管的服务、工具和AI模型。我可以向他们发送一个请求,说明我希望他们的模型为我处理什么,然后我会得到他们预训练模型输出的响应。

如何使用API?

为了实时转录音频,我使用了AssemblyAI Websocket API。与HTTPS连接不同,Websocket连接允许双向发送和接收来自API服务器的请求。这样我可以实时转录数据。

为了建立WebSocket连接,我使用了Python中的异步库“asyncio”和“websockets”库。下面是代码的外观:

async with websockets.connect(
   self.URL,
   extra_headers=(("Authorization", assemblyAI_key),),
   ping_interval=5,
   ping_timeout=20
) as _ws:
   r = await asyncio.sleep(0.1)
   session_begins = await _ws.recv()

在上面的代码中,我连接到WebSocket URL,并尝试接收连接确认(见上文session_begins)。

连接后,我可以定义发送和接收函数,这将允许我以我想要的方式与API通信。

async def send():
         while st.session_state["init"] == True:
             data = self.stream.read(self.FRAMES_PER_BUFFER, exception_on_overflow = False)
             data = base64.b64encode(data).decode("utf-8")
             json_data = json.dumps({"audio_data":str(data)})
             r = await _ws.send(json_data)
         return True

  async def receive():

         while st.session_state["init"] == True:
              result_str = await _ws.recv()
              if (json.loads(result_str)["message_type"] == "FinalTranscript") and (json.loads(result_str)['text'] != ""):

                  promt = json.loads(result_str)["text"]
                  response = openai.Completion.create(
                     engine = "text-davinci-002",
                     prompt = promt,
                     n=5,
                     temperature = 0
                  )

                  response_test = response.choices[0].text

send_result, receive_result = await asyncio.gather(send(), receive())

在send函数中,我首先收集音频,将其编码为utf-8,然后使用WebSocket发送。使用音频文件或API时,utf-8编码非常标准。

在接收函数中,我首先从音频文件中接收转录的文本,然后将该文本发送到OpenAI并接收来自GPT-3的响应。

使用Streamlit构建应用程序

Streamlit可用于快速构建web应用程序。该应用程序的目标是提供一个图形用户界面(GUI),以便用户无需使用任何代码即可与智能助手无缝交互。

现在我将详细介绍我用于制作应用程序的代码结构。我总是将Streamlit应用程序打包在一个类中。这就是整个代码结构的样子:

class app:
   def __init__(self):
      ...
      self.pipeline()

   def pipeline(self):
         self.initialize_tool()
         self.buttons()
         self.load_past()
         asyncio.run(self.send_receive())

   def initialize_tool(self):
      st.set_page_config(page_title="Interactive AI", page_icon="🤖")
      st.markdown('<h1 style="color: white">SMART ASSISTANT TOOL</h1>', unsafe_allow_html=True)
      ...

   def clear_chat(self):
      ...

   def buttons(self):
      ...

   async def send_receive(self):
         ...
         async def send():
               ...
         async def receive():
               ...

if __name__ == '__main__':
    app()

该应用程序包含两个按钮。第一个是记录按钮,第二个是清晰的聊天按钮。

录制按钮开始录制你的语音,然后转录并将文本发送到OpenAI。然后,应用程序会将响应显示为聊天对话。

该应用程序保存对话记录,聊天记录存储在.txt文件中。当按下清除聊天按钮时,.txt文件将被清除。

我无法在这里展示的应用程序的最后一个附加功能是文本到语音。当机器人做出反应时,它会读出句子。为此,我使用了pyttsx3库。

与工具交互

上面是应用程序的屏幕截图。顶部是应用程序的两个按钮。要与智能助手交互,你可以按记录并说出你的消息。消息的转录显示在左侧,GPT-3的响应显示在右侧。

这位聪明的助手显然名叫莎拉,今年26岁。该应用程序似乎运行良好,它可以检测我的声音,并以全面的方式显示它。智能助手可以处理更复杂的查询:

智能助手在处理基本缩略语时没有问题。机器人还了解现代公司的背景:

结论

在本文中,我介绍了我如何制作智能助手应用程序。该应用程序能够记录你的声音,转录它,将转录传递到OpenAI的GPT-3,并读出你的响应。

我详细介绍了应用程序的流程,以及应用程序是如何在streamlit上编程的。最后,我介绍了我与智能助手的一些交互示例。总的来说,我认为这个应用程序很有用,而且运行良好。

感谢阅读!

免责声明:作者保留权利,不代表本站立场。如想了解更多和作者有关的信息可以查看页面右侧作者信息卡片。
反馈
to-top--btn