首页 > 其他分享 >基于ChatGPT的端到端语音聊天机器人项目实战

基于ChatGPT的端到端语音聊天机器人项目实战

时间:2023-06-17 22:31:47浏览次数:46  
标签:Rasa text 机器人 API OpenAI 语音 ChatGPT audio

 企业级ChatGPT开发入门实战

第1课 基于ChatGPT的端到端语音聊天机器人项目实战


1.4 使用FastAPI构建语音聊天机器人后端实战

在后端代码(backend)中调用了OpenAI API及其他的服务,如图1-10所示。

基于ChatGPT的端到端语音聊天机器人项目实战_Chatgpt

图1- 10 后端代码调用OpenAI API

openai_requests.py是一个相对比较简单的代码文件,在生产级开发中,一般都会有一个模型层,会分成前端、后端、模型这三个层次,设置模型层有一个很重要的点,无论是开发还是架构,能力不断进步或者解决问题的过程,其实就是解耦合的一个过程。在实际生产级别,会把模型作为一个具体的服务,在服务内部可以做很多事情,这是模型即服务(model as a service)。我们这个项目有好几个版本,现在给大家展示的版本是一个端到端完整可运行的项目,让大家感受一下,基于大模型驱动的对话机器人的整个开发流程以及具体的实现,从企业级的角度,有前端、后端、模型层,在这里我们简化了这个过程,在代码中,给大家写了非常清晰的注释,结合整个流程图,读者会很清晰的感受到它具体的执行过程以及代码本身的组织方式。

我们主要讲解后端,为了帮助大家学习,在后端跟大家做了很详细的日志记录,将所有的日志都输出到chatbot_backend.log日志文件中,在这里面会显示具体的详细过程。

main.py的代码实现:


1.   # uvicorn main:app

2.   # uvicorn main:app --reload

3.    

4.   # 导入库

5.   from fastapi import FastAPI, File, UploadFile, HTTPException

6.   from fastapi.responses import StreamingResponse

7.   from fastapi.middleware.cors import CORSMiddleware

8.   from decouple import config

9.   import openai

10.   

11.   

12.  # 自定义函数导入

13.  from functions.text_to_speech import convert_text_to_speech

14.  from functions.openai_requests import convert_audio_to_text, get_chat_response

15.  from functions.database import store_messages, reset_messages

16.   

17.  import logging

18.  logging.basicConfig(

19.          level=logging.DEBUG,

20.          format="%(asctime)s %(levelname)s %(message)s",

21.          datefmt="%Y-%m-%d %H:%M:%S",

22.          filename="chatbot_backend.log"

23.      )

24.   

25.  logger = logging.getLogger("Chatbot main.py fle Backend")

26.   

27.  """ 获取环境变量

28.  在这段代码中,config函数用于从环境变量中检索值。

29.  OPEN_AI_ORG和OPEN_AI _KEY环境变量应分别包含OpenAI的组织名称和API密钥。

30.  执行提供的代码后,openai.organization变量将被设置为“my_organization”, 

31.  这些值随后可以在代码中使用,以使用指定的组织和API密钥验证OpenAI API并与之交互。

32.  """

33.   

34.  openai.organization = config("OPEN_AI_ORG")


36.   

37.   

38.  """启动应用程序

39.  在这段代码中,创建了一个FastAPI类的实例,它表示FastAPI应用程序。

40.  此实例将用于定义应用程序的路由、端点和其他配置。

41.  """

42.  # 创建 FastAPI 类的新实例,并将其分配给变量

43.  app = FastAPI()

44.  """

45.  在该示例中,我们从FastAPI模块导入FastAPI类。

46.  然后,我们创建一个新的FastAPI实例,并将其分配给变量应用程序。

47.  这使我们能够使用应用程序实例来定义FastAPI应用程序的行为和路由。

48.  """

49.   

50.  """CORS - Origins

51.  在这段代码中,创建了来源列表,并用URL填充。这些URL表示允许的来源或域

52.  允许向服务器发出请求。CORS(跨来源资源共享)是一种允许web浏览器发出请求的机制

53.  到与提供网页的域不同的域。

54.  通过指定允许的来源,服务器可以控制哪些域被允许访问其资源。

55.  """

56.  # 创建一个名为“origins”的列表,其中包含多个作为字符串的URL

57.  # origins = [

58.  #     "http://localhost:5173",

59.  #     "http://localhost:5174",

60.  #     "http://localhost:4173",

61.  #     "http://localhost:3000",

62.  # ]

63.   

64.  origins = [

65.      "*",

66.  ]

67.  """

68.  在上面的示例中,原点列表由三个URL定义,这些URL可以根据应用程序的具体要求进行定制。

69.  在代码的后面,源列表可以在CORS中间件或其他配置中使用,以允许来自指定域的跨源请求。

70.  """

71.   

72.   

73.  """

74.  在下面的代码中,将CORS中间件添加到具有所需配置的应用程序中,包括allow_origins、allow_credentials、allow_methods和allow_headers参数。

75.  这确保了FastAPI应用程序正确处理CORS请求,并允许根据指定的配置进行跨源通信。

76.  CORS中间件被添加到FastAPI应用程序(应用程序)中。

77.  CORS中间件负责处理跨源资源共享并管理HTTP响应中与CORS相关的头。

78.  在应用程序对象上调用add_middleware方法来添加CORS中间件。

79.  使用CORSMiddleware类,并传递几个参数来配置其行为:

80.  allow_origins:指定允许请求的允许来源(域)。它采用了之前定义的起源列表。

81.  allow_credentials:指示是否允许在CORS请求中发送和接收凭据,如cookie或授权标头。在本例中,它设置为True。

82.  allow_methods:为CORS请求指定允许的HTTP方法。值[“*”]允许所有方法。

83.  allow_headers:为CORS请求指定允许的HTTP标头。值[“*”]允许所有标头。

84.   

85.  """

86.  # CORS -中间件

87.  app.add_middleware(

88.      CORSMiddleware,

89.      allow_origins=origins,

90.      allow_credentials=True,

91.      allow_methods=["*"],

92.      allow_headers=["*"],

93.  )

94.   

95.   

96.  """

97.  使用HTTPGET方法为/health路径定义了一个路由处理程序。@app.get-decorator用于将处理程序函数check_health与此特定路由相关联。

98.  check_health函数是一个异步函数(async-def),用于处理传入请求并返回指示健康状态的JSON响应。

99.  """

100.    # Check health

101.    @app.get("/health")

102.    async def check_health():

103.        logger.info(f'method check_health in main.py file is invoked')

104.        return {"response": "healthy"}

105.     

106.     

107.    # 重置对话

108.    @app.get("/reset")

109.    async def reset_conversation():

110.        reset_messages()

111.        logger.info(f'method reset_conversation in main.py file is invoked')

112.        return {"response": "conversation reset"}

113.     

114.    """

115.    使用@app.post装饰器定义了一个端点,用于处理对/post-audio/的post请求。端点需要一个上传的音频文件,该文件作为名为file的UploadFile参数接收。

116.    该代码执行以下步骤:

117.    上载的音频文件将临时保存到磁盘。

118.    保存的音频文件在读取模式下以二进制文件的形式打开(audio_input)。

119.    使用convert_audio_to_text函数将音频文件解码为文本。保护子句检查音频解码是否成功。否则,将引发HTTP异常。

120.    使用get_chat_response函数基于解码的音频生成聊天响应。消息和聊天响应使用store_messages函数存储在数据库或任何其他存储机制中。另一个保护条款检查是否获得了有效的聊天响应。否则,将引发HTTP异常。

121.    聊天响应使用convert_text_to_speech功能转换为音频。guard子句检查音频转换是否成功。否则,将引发HTTP异常。

122.    定义了一个生成器函数(iterfile)来生成块中的音频输出。音频输出作为流式响应返回,媒体类型设置为“application/octet-stream”。

123.     

124.     

125.     

126.    """

127.     

128.    # 使用post请求时不会在浏览器中播放

129.    @app.post("/post-audio/")

130.    async def post_audio(file: UploadFile = File(...)):

131.        logger.info(f'method post_audio in main.py file is invoked')

132.        # 要处理POST请求的终结点

133.     

134.        # 暂时保存上传的音频文件

135.        with open(file.filename, "wb") as buffer:

136.            buffer.write(file.file.read())

137.        audio_input = open(file.filename, "rb")

138.     

139.        # 将音频文件解码为文本

140.        message_decoded = convert_audio_to_text(audio_input)

141.     

142.        # 确保音频解码成功

143.        if not message_decoded:

144.            logger.error(f'Failed to decode audio method post_audio in main.py file is invoked')

145.            raise HTTPException(status_code=400, detail="Failed to decode audio")

146.     

147.        # 根据解码的音频获取聊天响应

148.        chat_response = get_chat_response(message_decoded)

149.     

150.        # 将消息存储在数据库或任何其他存储机制中

151.        store_messages(message_decoded, chat_response)

152.     

153.        # 确保有效的聊天响应

154.        if not chat_response:

155.            logger.error(f'Failed chat response method post_audio in main.py file is invoked')

156.            raise HTTPException(status_code=400, detail="Failed chat response")

157.     

158.        # 将聊天响应转换为音频

159.        audio_output = convert_text_to_speech(chat_response)

160.     

161.        # 确保音频输出成功

162.        if not audio_output:

163.            logger.error(f'Failed audio output method post_audio in main.py file is invoked')

164.            raise HTTPException(status_code=400, detail="Failed audio output")

165.     

166.        # 创建一个生成音频块的生成器

167.        def iterfile():

168.            yield audio_output

169.     

170.        logger.info(f'COMPLETE SUCCESS in method post_audio in main.py file call')

171.        # 将音频作为具有媒体类型的流式响应返回

172.        return StreamingResponse(iterfile(), media_type="application/octet-stream")


main.py代码实现了一个聊天机器人的后端服务,使用了Python的FastAPI框架和OpenAI的API。在最开始做设计的时候,FastAPI是最高效、也是最友好的框架,main.py代码的主要功能,初始化日志记录器,使用Python的logging模块记录日志;设置OpenAI的API密钥和组织;创建FastAPI应用程序实例;配置CORS中间件,以允许跨域请求;实现一个用于检查服务健康状态的端点/health;实现一个用于重置会话的端点/reset,该端点将清除所有之前的聊天记录;实现一个用于处理音频上传请求的端点/post-audio/,并将上传的音频文件转换为文本,然后将文本发送给聊天机器人,接收聊天机器人的响应并将其转换为音频输出。记录所有端点的调用情况和错误情况,使用日志记录器记录日志。

该代码的主要实现方法是使用FastAPI框架提供的装饰器来定义端点和处理函数,可以轻松地实现RESTful API的功能。此外,还使用了Python的logging模块来记录日志,以帮助开发人员更好地了解服务的运行状况和问题。另外,该代码使用了OpenAI的API来实现自然语言处理的功能,这是一种快速和方便的方式来实现聊天机器人的功能,实现了一个功能齐全,易于使用的聊天机器人后端服务。

上段代码中第140行,调用convert_audio_to_text方法,将用户的音频文件解码为文本。

OpenAI自己有Whisper的功能,可以做ChatGPT或者OpenAI API的开发,OpenAI有一个transcribe的方式,使用Whisper进行音频和文字的转换,这种API的调用,大家都不会有问题,而且注释也写得非常清楚。

openai_requests.py的convert_audio_to_text方法的代码实现:


1.    

2.   """

3.   convert_audio_to_text函数以audio_file作为输入,它表示要转换为文本的音频文件。

4.   该功能执行以下步骤:

5.   它使用OpenAI API通过Whisper模型转录音频文件。“whisper-1”参数指定用于转录的whisper模型的版本。

6.   转录的文本是从OpenAI API收到的响应中提取的。

7.   转录后的文本将作为函数的结果返回。

8.    

9.   """

10.  # Open AI - Whisper

11.  #将音频转换为文本

12.  def convert_audio_to_text(audio_file):

13.      logger.info("method convert_audio_to_text in openai_requests.py file is called")

14.      try:

15.          #  使用OpenAI API转录使用Whisper模型的音频文件

16.          transcript = openai.Audio.transcribe("whisper-1", audio_file)

17.   

18.          # 从响应中提取转录的文本

19.          message_text = transcript["text"]

20.   

21.          # 返回转录后的文本

22.          return message_text

23.      except Exception as e:

24.          logger.error("Error happend in OpenAI Audio Transcribe in method convert_audio_to_text in openai_requests.py file")

25.          return


上段代码中第148行,调用get_chat_response方法,根据解码的音频文本,发送给 接口,获取聊天响应。

上段代码中第151行,收到信息之后,调用store_messages方法,将消息存储在数据库或任何其他存储机制中,这边存储在stored_data.json文件中,可以看见系统和用户的交互的内容。

stored_data.json的文件记录:


[{'role': 'assistant', 'content': "As an AI language model, I don't have emotions, so I don't have good or bad days. However, I'm always ready to helpwith any task you need assistance with."},{'role': 'user', ' content': 'Hi, how are you doing today?'},{'role': 'assistant', 'content': "Hello! As an AI language model, I'm just a computer program, soI don't have emotions or feelings. But I " m functioning properly and ready to assist you with any task you need help with!"},{'role': 'user', 'content': "Wow, that's great to know. So what can you do? Tell me what specifically you can do for me.Please use English to provide your response"}]


上段代码中第159行,调用convert_text_to_speech方法,将聊天响应转换为音频,在text_to_speech.py文件的convert_text_to_speech方法中调用了api.elevenlabs.io接口,并设置 环境的内容, 。

text_to_speech.py的convert_text_to_speech方法的代码实现:


1.   import requests

2.   from decouple import config

3.    

4.   import logging

5.   logging.basicConfig(

6.           level=logging.DEBUG,

7.           format="%(asctime)s %(levelname)s %(message)s",

8.           datefmt="%Y-%m-%d %H:%M:%S",

9.           filename="chatbot_backend.log"

10.      )

11.   

12.  logger = logging.getLogger("Chatbot text_to_speech.py file Backend")

13.   

14.  # 从环境变量中获取`ELEVEN_LABS_API_KEY`的值

15.  ELEVEN_LABS_API_KEY = config("ELEVEN_LABS_API_KEY")

16.   

17.  """

18.  导入请求库以发出HTTP请求,使用decouple的config函数从环境变量中检索ELEVEN_LABS_API_KEY的值。

19.  convert_text_to_speech函数采用消息参数并执行以下步骤:

20.  它定义了请求主体,包括要转换的文本和语音设置。

21.  定义了不同语音的语音ID(例如,Voice_shaun、Voice_rachel、Voice_antoni)。

22.  构造了请求头和URL端点,包括ELEVEN_LABS_API_KEY。

23.  try-except块用于处理请求过程中可能发生的任何异常。

24.  requests.post方法用于向Eleven Labs API发送post请求,其中包含提供的正文和头。

25.  如果响应的状态代码为200(表示成功),则返回在响应中接收到的内容(音频数据)。

26.  如果响应具有任何其他状态代码,则返回None。

27.  """

28.   

29.  def convert_text_to_speech(message):

30.   

31.      logger.info(f'method convert_text_to_speech in text_to_speech.py file is invoked')

32.      # 定义文本到语音转换的请求正文

33.      body = {

34.          "text": message,

35.          "voice_settings": {

36.              "stability": 0,

37.              "similarity_boost": 0

38.          }

39.      }

40.   

41.      # 为不同的语音定义语音ID

42.      voice_sam = "xxxx"

43.      voice_gavin = " xxxx "

44.      voice_chris = " xxxx "

45.   

46.      # 构造请求 头和UR

47.      headers = {

48.          "xi-api-key": ELEVEN_LABS_API_KEY,

49.          "Content-Type": "application/json",

50.          "accept": "audio/mpeg"

51.      }

52.      endpoint = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_gavin}"

53.   

54.      try:

55.          # 向Eleven Labs API发送POST请求

56.          response = requests.post(endpoint, json=body, headers=headers)

57.      except Exception as e:

58.          logger.error(f'Error happened when Send the POST request to the Eleven Labs API in method convert_text_to_speech in text_to_speech.py file is invoked')

59.          return

60.   

61.      if response.status_code == 200:

62.          # 返回响应中接收到的内容(音频数据)

63.          return response.content

64.      else:

65.          logger.error(f'Error happened when Send the POST request to the Eleven Labs API with code {response.status_code}')

66.          return


为了帮助大家学习,我们重点看一下和OpenAI大模型的交互,设置OPEN_AI_ORG、OPEN_AI_KEY等相关的内容,调用gpt-3.5-turbo模型,输入模型信息,这个信息本身,我们统一称之为提示词,它有4大核心的组件。gpt-3.5-turbo大模型是大家做实验的时候经常使用的,不过作者现在所在的公司及所做的项目,正常都使用GPT4,GPT4才是一个真正划时代的大模型,因为它的推理能力太强大了。

openai_requests.py的get_chat_response方法:


1.   …

2.   openai.organization = config("OPEN_AI_ORG")


4.   …

5.   """

6.   get_chat_response函数采用message_input参数,该参数表示用户对聊天机器人的输入消息。

7.   该功能执行以下步骤:

8.   它使用get_recent_messages函数从数据库或存储中检索最近的聊天消息。

9.   它根据用户提供的message_input创建一个新的用户消息,并附加与语言使用相关的附加说明。

10.  新用户消息将添加到现有消息中。打印这些消息进行调试。

11.  OpenAI聊天完成API使用OpenAI.ChatCompletion.create方法调用,将消息作为输入传递,以生成聊天响应。

12.  生成的消息文本是从API响应中提取的。

13.  生成的消息文本将作为函数的结果返回。

14.   

15.  """

16.  # Open AI - Chat GPT

17.  # 获取聊天响应

18.  def get_chat_response(message_input):

19.      logger.info("method get_chat_response in openai_requests.py file is called")

20.      # 从数据库或存储中检索最近的信息

21.      messages = get_recent_messages()

22.   

23.      # 根据输入创建新的用户消息

24.      user_message = {

25.          "role": "user",

26.          "content": message_input + "  Please use English to provide your response"

27.      }

28.   

29.      # 将新用户消息附加到现有消息

30.      messages.append(user_message)

31.   

32.      # 打印消息以进行调试

33.      print(messages)

34.      logger.info(f'method get_chat_response existing messages {messages}')

35.   

36.      try:

37.          # 调用OpenAI聊天完成API生成聊天响应

38.          response = openai.ChatCompletion.create(

39.              model="gpt-3.5-turbo",

40.              messages=messages

41.          )

42.   

43.          # 从API响应中提取生成的消息文本

44.          message_text = response["choices"][0]["message"]["content"]

45.   

46.          logger.info(f'method get_chat_response message from OpenAI API call {message_text}')

47.          # 返回生成的消息文本

48.          return message_text

49.      except Exception as e:

50.          logger.error("Exception in calling OpenAI api")

51.          return


1.5 ChatGPT语音聊天机器人改进

但是这里面有一个很重要的问题,从企业级的角度,模型产出的结果可能不符合你的预期,这边有三种情况,第一种是满意度不高,模型给的回复可能是一部分是正确的,但另外一部分是很有问题的;第二种是模型给的结果是错的;第三种是模型给的结果根本就不相关。不相关和错误的结果,其实是两种类型,因为不相关表明模型根本就不理解你输入的内容是什么,这也再次说明了提示词的重要性。如果出现这种情况,怎么去处理?基于大模型应用程序的开发,结果是很重要的新的上下文,这类似于贝叶斯Bayesian,整个Transformer架构是NLP思想的一个实现,如果它出现了问题,三种类型是部分正确、错误以及不相关,无论是什么信息,模型进一步优化它的结果新的上下文,这是贝叶斯Bayesian基本思想的一个表现。

作者收到美国一个大学教授分享的一篇MIT的论文,论文背后有很多数学的部分,相信这篇论文应该是一个非常愉悦的阅读体验,因为作者最近在做一个很重要的工作,是有状态提示词(stateful prompting),如果读者感兴趣,可以跟作者进一步深度交流,MIT这篇论文的基本思想和现在的思维链提示词(CoT)不一样,它针对目前已有的问题,使用一种链式的过程,把不同对话中的提示词形成一个链条,然后基于这个链条形成一个上下文,类似于天气预报,昨天的天气情况大概率会影响今天的天气,今天的天气和昨天的天气大概率会影响明天的天气,论文使用了这个思想。从项目的角度或者做企业级最佳实践的角度,无论使用模型,还是对模型本身的结果进行优化,其实一个核心性的组件,都是更明确清晰的上下文,而结果无论是部分正确或部分错误、还是错误的结果、或者完全不相关的结果,这些都是至关重要的上下文。大家通过朴素贝叶斯的思想,比较容易知道概率模型,在重试的时候,不要以简单粗暴方式重试,而应该拿上这个结果,加上你的判断进行重试,你看见那个结果,告诉它不正确,然后你重新生成,这也会有效果,在很多情况下,你应该设立好自己的框架,一个很重要的技术叫Langchain,它做的一个很重要的工作,就是帮你封装了部分此类的操作。

本节跟大家分享了一个很重要的企业级的最佳实践,通过提供一个端到端的项目,大家体验一下基于大模型驱动的应用程序。

 

 


《企业级ChatGPT开发入门实战直播21课》报名课程请联系:

Gavin老师:NLP_Matrix_Space

Sam老师:NLP_ChatGPT_LLM

我们的两本最新书籍年底即将出版:

l  《企业级Transformer&ChatGPT解密:原理、源码及案例》

l  《企业级Transformer&Rasa解密:原理、源码及案例》

《企业级Transformer&ChatGPT解密:原理、源码及案例》本书以Transformer和ChatGPT技术为主线,系统剖析了Transformer架构的理论基础、模型设计与实现,Transformer语言模型GPT与BERT,ChatGPT技术及其开源实现,以及相关应用案例。内容涉及贝叶斯数学、注意力机制、语言模型、最大似然与贝叶斯推理等理论,和Transformer架构设计、GPT、BERT、ChatGPT等模型的实现细节,以及OpenAI API、ChatGPT提示工程、类ChatGPT大模型等应用。第一卷介绍了Transformer的Bayesian Transformer思想、架构设计与源码实现,Transformer语言模型的原理与机制,GPT自回归语言模型和BERT自编码语言模型的设计与实现。第二卷深入解析ChatGPT技术,包括ChatGPT发展历史、基本原理与项目实践,OpenAI API基础与高级应用,ChatGPT提示工程与多功能应用,类ChatGPT开源大模型技术与项目实践。

ChatGPT 技术:从基础应用到进阶实践涵盖了ChatGPT技术和OpenAI API的基础和应用,分为8个章节,从ChatGPT技术概述到类ChatGPT开源大模型技术的进阶项目实践。

1.     ChatGPT技术概述:主要介绍了GPT-1、GPT-2、GPT-3、GPT-3.5和GPT-4的发展历程和技术特点,以及ChatGPT技术的基本原理和项目案例实战。

2.     OpenAI API基础应用实践:主要介绍了OpenAI API模型及接口概述,以及如何使用OpenAI API进行向量检索和文本生成。

3.     OpenAI API进阶应用实践:主要介绍了如何使用OpenAI API基于嵌入式向量检索实现问答系统,如何使用OpenAI API对特定领域模型进行微调。

4.     ChatGPT提示工程基础知识:主要介绍了如何构建优质提示的两个关键原则,以及如何迭代快速开发构建优质提示。

5.     ChatGPT提示工程实现多功能应用:主要介绍了如何使用ChatGPT提示工程实现概括总结、推断任务、文本转换和扩展功能。

6.     ChatGPT提示工程构建聊天机器人:主要介绍了聊天机器人的应用场景,以及如何使用ChatGPT提示工程构建聊天机器人和订餐机器人。

7.     类ChatGPT开源大模型技术概述:主要介绍了类ChatGPT开源大模型的发展历程和技术特点,以及ChatGLM项目案例实践和LMFlow项目案例实践。

8.     类ChatGPT开源大模型进阶项目实践:主要介绍了类ChatGPT开源大模型的进阶项目实践,包括基于LoRA SFT+RM+RAFT技术进行模型微调、基于P-Tuning等技术对特定领域数据进行模型微调、基于LLama Index和Langchain技术的全面实践,以及使用向量检索技术对特定领域数据进行模型微调。

本书适用于NLP工程师、AI研究人员以及对Transformer和ChatGPT技术感兴趣的读者。通过学习,读者能够系统掌握Transformer理论基础,模型设计与训练推理全过程,理解ChatGPT技术内幕,并能运用OpenAI API、ChatGPT提示工程等技术进行项目实践。

Transformer作为目前NLP领域最为主流和成功的神经网络架构,ChatGPT作为Transformer技术在对话系统中的典型应用,本书内容涵盖了该领域的最新进展与技术。通过案例实践,使理论知识变成技能,这也是本书的独特之处。

 

《企业级Transformer&Rasa解密:原理、源码及案例》:是一本深入介绍Rasa对话机器人框架的实战开发指南。本书分为两卷,第一卷主要介绍基于Transformer的Rasa Internals解密,详细介绍了DIETClassifier和TED在Rasa架构中的实现和源码剖析。第二卷主要介绍Rasa 3.X硬核对话机器人应用开发,介绍了基于Rasa Interactive Learning和ElasticSearch的实战案例,以及通过Rasa Interactive Learning发现和解决对话机器人的Bugs案例实战。

第一卷中介绍了Rasa智能对话机器人中的Retrieval Model和Stateful Computations,解析了Rasa中去掉对话系统的Intent的内幕,深入研究了End2End Learning,讲解了全新一代可伸缩的DAG图架构的内幕,介绍了如何定制Graph NLU及Policies组件,讨论了自定义GraphComponent的内幕,从Python角度分析了GraphComponent接口,详细解释了自定义模型的create和load内幕,并讲述了自定义模型的languages及Packages支持。深入剖析了自定义组件Persistence源码,包括自定义对话机器人组件代码示例分析、Resource源码逐行解析、以及ModelStorage、ModelMetadata等逐行解析等。介绍了自定义组件Registering源码的内幕,包括采用Decorator进行Graph Component注册内幕源码分析、不同NLU和Policies组件Registering源码解析、以及手工实现类似于Rasa注册机制的Python Decorator全流程实现。讨论了自定义组件及常见组件源码的解析,包括自定义Dense Message Featurizer和Sparse Message Featurizer源码解析、Rasa的Tokenizer及WhitespaceTokenizer源码解析、以及CountVectorsFeaturizer及SpacyFeaturizer源码解析。深入剖析了框架核心graph.py源码,包括GraphNode源码逐行解析及Testing分析、GraphModelConfiguration、ExecutionContext、GraphNodeHook源码解析以及GraphComponent源码回顾及其应用源码。

第二卷主要介绍了基于Rasa Interactive Learning和ElasticSearch的实战案例,以及通过Rasa Interactive Learning发现和解决对话机器人的Bugs案例实战。介绍了使用Rasa Interactive Learning来调试nlu和prediction的案例实战,使用Rasa Interactive Learning来发现和解决对话机器人的Bugs案例实战介绍了使用Rasa Interactive Learning透视Rasa Form的NLU和Policies的内部工作机制案例实战,使用ElasticSearch来实现对话机器人的知识库功能,并介绍了相关的源码剖析和最佳实践,介绍了Rasa微服务和ElasticSearch整合中的代码架构分析,使用Rasa Interactive Learning对ConcertBot进行源码、流程及对话过程的内幕解密,介绍了使用Rasa来实现Helpdesk Assistant功能,并介绍了如何使用Debug模式进行Bug调试,使用Rasa Interactive Learning纠正Helpdesk Assistant中的NLU和Prediction错误,逐行解密Domain和Action微服务的源码。

本书适合对Rasa有一定了解的开发人员和研究人员,希望通过本书深入了解Rasa对话机器人的内部工作原理及其源代码实现方式。无论您是想要深入了解Rasa的工作原理还是想要扩展和定制Rasa,本书都将为您提供有价值的参考和指导。

《企业级Transformer&ChatGPT解密:原理、源码及案例》、《企业级Transformer&Rasa解密:原理、源码及案例》,是您深入学习的好选择,年底即将重磅出版,欢迎购买!

 

 

标签:Rasa,text,机器人,API,OpenAI,语音,ChatGPT,audio
From: https://blog.51cto.com/u_10561036/6506653

相关文章

  • 在线免费chatgpt网页版-支持gpt4
    为了吸引更多的用户体验最先进的自然语言处理技术,我们推出了在线免费ChatGPT。这是一个基于OpenAI训练的大型语言模型,它可以提供智能响应、自然对话和语音识别等功能。不仅如此,我们还提供了完全免费的使用权限,任何人都可以随时进行使用。作为一款智能聊天机器人,ChatGPT具有很多......
  • 零代码编程:用ChatGPT打造小宇宙播客下载软件2.0
    之前用ChatGPT写了一个简单的小宇宙播客下载应用,但是实际使用一段时间后,发现有几个问题,比如:如果文件名中有一些特殊符号,下载不成功;有些m4a格式的也下载不成功;文件大下载的慢;根据这些情况,进行完善,利用ChatGPT生成了小宇宙播客下载软件2.0版本:在ChatGPT输入如下提示词:你现在是一个Pyt......
  • 【路径规划】基于A星算法结合floyd和动态窗口法实现机器人栅格地图路径规划附matlab代
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • AI自动写书神器,3个ChatGPT插件让你轻松赚钱!
    AI自动写书神器,3个ChatGPT插件让你轻松赚钱!你是否想过,有一天,你可以只给一个主题,让AI自动搜集资料并写出一本电子书?你是否想过,有一天,你可以不用动笔,就能成为畅销书作者?你是否想过,有一天,你可以利用AI的智慧和创造力,轻松赚取被动收入?如果你的答案是肯定的,那么恭喜你,你的梦想已经成为......
  • 语音社交源码知识语音房间功能的实现
    当今,快节奏的社会为现在的很多年轻人带来了压力,每到深夜或是压力大的时候,很多人都想找人倾诉一下自己心里的悲伤与痛苦,以此来释放一下自己的压力,然而,这是一个独生子女的社会,大部分家庭都只有一个孩子,并且每天工作繁忙又加班到很晚的人根本没有时间或是精力去交朋友,所以这些人没有人......
  • 语音社交源码知识语音房间功能的实现
       当今,快节奏的社会为现在的很多年轻人带来了压力,每到深夜或是压力大的时候,很多人都想找人倾诉一下自己心里的悲伤与痛苦,以此来释放一下自己的压力,然而,这是一个独生子女的社会,大部分家庭都只有一个孩子,并且每天工作繁忙又加班到很晚的人根本没有时间或是精力去交朋友,所以这......
  • 在freeSwitch中,实现来电对接百度语音翻译
    要在FreeSWITCH中实现来电对接百度语音翻译,可以使用FreeSWITCH提供的mod_vbr(VoiceBiometricRecognition)模块结合开发者可以使用的百度API接口来实现。下面是基本的实现步骤:安装mod_vbr模块首先需要在FreeSWITCH中安装mod_vbr模块。可以通过以下命令进行安装:sudoapt-geti......
  • 疯狂GC的第二种处理方式-ChatGPT的学习之四
    疯狂GC的第二种处理方式-ChatGPT的学习之四摘要上一个脚本太复杂了.而且要改启动脚本.课间休息跟人扯淡聊起来chatGPT发现他的语法很有用但是思路不太对.不过突然根据文档里写的想到了一个新的思路.获取GC信息whiletruedate>>/zhaobsh/gcutiljstat-gcutil`jps|......
  • ChatGPT拒绝做这5件事,还有20件它也不会做!
    导读:自从ChatGPT和其他生成式AI应用程序出现以来,我们一直在探索我们可以用它们做什么。看起来ChatGPT可以做任何事情。但在本文中,我们将探讨ChatGPT不会或无法做的事情。本文字数:1800,阅读时长大约:10分钟自从ChatGPT和其他生成式AI应用程序出现以来,我们一直在探索我们可以用它......
  • 基于MFCC特征提取和神经网络的语音信号识别算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:     2.算法涉及理论知识概要        在语音识别(SpeechRecognition)和话者识别(SpeakerRecognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scaleFrequencyCepstralCoefficients,简称MFCC)。根据人耳听觉机理......