企业级ChatGPT开发入门实战
第1课 基于ChatGPT的端到端语音聊天机器人项目实战
1.4 使用FastAPI构建语音聊天机器人后端实战
在后端代码(backend)中调用了OpenAI API及其他的服务,如图1-10所示。
图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