第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的代碼實作:
- # uvicorn main:app
- # uvicorn main:app --reload
- # 導入庫
- from fastapi import FastAPI, File, UploadFile, HTTPException
- from fastapi.responses import StreamingResponse
- from fastapi.middleware.cors import CORSMiddleware
- from decouple import config
- import openai
- # 自定義函數導入
- from functions.text_to_speech import convert_text_to_speech
- from functions.openai_requests import convert_audio_to_text, get_chat_response
- from functions.database import store_messages, reset_messages
- import logging
- logging.basicConfig(
- level=logging.DEBUG,
- format="%(asctime)s %(levelname)s %(message)s",
- datefmt="%Y-%m-%d %H:%M:%S",
- filename="chatbot_backend.log"
- )
- logger = logging.getLogger("Chatbot main.py fle Backend")
- """ 擷取環境變量
- 在這段代碼中,config函數用于從環境變量中檢索值。
- OPEN_AI_ORG和OPEN_AI _KEY環境變量應分别包含OpenAI的組織名稱和API密鑰。
- 執行提供的代碼後,openai.organization變量将被設定為“my_organization”,openai.api_key變量将被設為“my_api_key”。
- 這些值随後可以在代碼中使用,以使用指定的組織和API密鑰驗證OpenAI API并與之互動。
- """
- openai.organization = config("OPEN_AI_ORG")
- openai.api_key = config("OPEN_AI_KEY")
- """啟動應用程式
- 在這段代碼中,建立了一個FastAPI類的執行個體,它表示FastAPI應用程式。
- 此執行個體将用于定義應用程式的路由、端點和其他配置。
- """
- # 建立 FastAPI 類的新執行個體,并将其配置設定給變量 app
- app = FastAPI()
- """
- 在該示例中,我們從FastAPI子產品導入FastAPI類。
- 然後,我們建立一個新的FastAPI執行個體,并将其配置設定給變量應用程式。
- 這使我們能夠使用應用程式執行個體來定義FastAPI應用程式的行為和路由。
- """
- """CORS - Origins
- 在這段代碼中,建立了來源清單,并用URL填充。這些URL表示允許的來源或域
- 允許向伺服器送出請求。CORS(跨來源資源共享)是一種允許web浏覽器送出請求的機制
- 到與提供網頁的域不同的域。
- 通過指定允許的來源,伺服器可以控制哪些域被允許通路其資源。
- """
- # 建立一個名為“origins”的清單,其中包含多個作為字元串的URL
- # origins = [
- # "http://localhost:5173",
- # "http://localhost:5174",
- # "http://localhost:4173",
- # "http://localhost:3000",
- # ]
- origins = [
- "*",
- ]
- """
- 在上面的示例中,原點清單由三個URL定義,這些URL可以根據應用程式的具體要求進行定制。
- 在代碼的後面,源清單可以在CORS中間件或其他配置中使用,以允許來自指定域的跨源請求。
- """
- """
- 在下面的代碼中,将CORS中間件添加到具有所需配置的應用程式中,包括allow_origins、allow_credentials、allow_methods和allow_headers參數。
- 這確定了FastAPI應用程式正确處理CORS請求,并允許根據指定的配置進行跨源通信。
- CORS中間件被添加到FastAPI應用程式(應用程式)中。
- CORS中間件負責處理跨源資源共享并管理HTTP響應中與CORS相關的頭。
- 在應用程式對象上調用add_middleware方法來添加CORS中間件。
- 使用CORSMiddleware類,并傳遞幾個參數來配置其行為:
- allow_origins:指定允許請求的允許來源(域)。它采用了之前定義的起源清單。
- allow_credentials:訓示是否允許在CORS請求中發送和接收憑據,如cookie或授權标頭。在本例中,它設定為True。
- allow_methods:為CORS請求指定允許的HTTP方法。值[“*”]允許所有方法。
- allow_headers:為CORS請求指定允許的HTTP标頭。值[“*”]允許所有标頭。
- """
- # CORS -中間件
- app.add_middleware(
- CORSMiddleware,
- allow_origins=origins,
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
- )
- """
- 使用HTTPGET方法為/health路徑定義了一個路由處理程式。@app.get-decorator用于将處理程式函數check_health與此特定路由相關聯。
- check_health函數是一個異步函數(async-def),用于處理傳入請求并傳回訓示健康狀态的JSON響應。
- """
- # Check health
- @app.get("/health")
- async def check_health():
- logger.info(f'method check_health in main.py file is invoked')
- return {"response": "healthy"}
- # 重置對話
- @app.get("/reset")
- async def reset_conversation():
- reset_messages()
- logger.info(f'method reset_conversation in main.py file is invoked')
- return {"response": "conversation reset"}
- """
- 使用@app.post裝飾器定義了一個端點,用于處理對/post-audio/的post請求。端點需要一個上傳的音頻檔案,該檔案作為名為file的UploadFile參數接收。
- 該代碼執行以下步驟:
- 上載的音頻檔案将臨時儲存到磁盤。
- 儲存的音頻檔案在讀取模式下以二進制檔案的形式打開(audio_input)。
- 使用convert_audio_to_text函數将音頻檔案解碼為文本。保護子句檢查音頻解碼是否成功。否則,将引發HTTP異常。
- 使用get_chat_response函數基于解碼的音頻生成聊天響應。消息和聊天響應使用store_messages函數存儲在資料庫或任何其他存儲機制中。另一個保護條款檢查是否獲得了有效的聊天響應。否則,将引發HTTP異常。
- 聊天響應使用convert_text_to_speech功能轉換為音頻。guard子句檢查音頻轉換是否成功。否則,将引發HTTP異常。
- 定義了一個生成器函數(iterfile)來生成塊中的音頻輸出。音頻輸出作為流式響應傳回,媒體類型設定為“application/octet-stream”。
- """
- # 使用post請求時不會在浏覽器中播放
- @app.post("/post-audio/")
- async def post_audio(file: UploadFile = File(...)):
- logger.info(f'method post_audio in main.py file is invoked')
- # 要處理POST請求的終結點 "/post-audio/"
- # 暫時儲存上傳的音頻檔案
- with open(file.filename, "wb") as buffer:
- buffer.write(file.file.read())
- audio_input = open(file.filename, "rb")
- # 将音頻檔案解碼為文本
- message_decoded = convert_audio_to_text(audio_input)
- # 確定音頻解碼成功
- if not message_decoded:
- logger.error(f'Failed to decode audio method post_audio in main.py file is invoked')
- raise HTTPException(status_code=400, detail="Failed to decode audio")
- # 根據解碼的音頻擷取聊天響應
- chat_response = get_chat_response(message_decoded)
- # 将消息存儲在資料庫或任何其他存儲機制中
- store_messages(message_decoded, chat_response)
- # 確定有效的聊天響應
- if not chat_response:
- logger.error(f'Failed chat response method post_audio in main.py file is invoked')
- raise HTTPException(status_code=400, detail="Failed chat response")
- # 将聊天響應轉換為音頻
- audio_output = convert_text_to_speech(chat_response)
- # 確定音頻輸出成功
- if not audio_output:
- logger.error(f'Failed audio output method post_audio in main.py file is invoked')
- raise HTTPException(status_code=400, detail="Failed audio output")
- # 建立一個生成音頻塊的生成器
- def iterfile():
- yield audio_output
- logger.info(f'COMPLETE SUCCESS in method post_audio in main.py file call')
- # 将音頻作為具有媒體類型的流式響應傳回 "application/octet-stream"
- 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方法的代碼實作:
- """
- convert_audio_to_text函數以audio_file作為輸入,它表示要轉換為文本的音頻檔案。
- 該功能執行以下步驟:
- 它使用OpenAI API通過Whisper模型轉錄音頻檔案。“whisper-1”參數指定用于轉錄的whisper模型的版本。
- 轉錄的文本是從OpenAI API收到的響應中提取的。
- 轉錄後的文本将作為函數的結果傳回。
- """
- # Open AI - Whisper
- #将音頻轉換為文本
- def convert_audio_to_text(audio_file):
- logger.info("method convert_audio_to_text in openai_requests.py file is called")
- try:
- # 使用OpenAI API轉錄使用Whisper模型的音頻檔案
- transcript = openai.Audio.transcribe("whisper-1", audio_file)
- # 從響應中提取轉錄的文本
- message_text = transcript["text"]
- # 傳回轉錄後的文本
- return message_text
- except Exception as e:
- logger.error("Error happend in OpenAI Audio Transcribe in method convert_audio_to_text in openai_requests.py file")
- return
上段代碼中第148行,調用get_chat_response方法,根據解碼的音頻文本,發送給OpenAI的API接口,擷取聊天響應。
上段代碼中第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接口,并設定API keys和環境的内容,包括OPEN_AI_KEY、ELEVEN_LABS_API_KEY等。
text_to_speech.py的convert_text_to_speech方法的代碼實作:
- import requests
- from decouple import config
- import logging
- logging.basicConfig(
- level=logging.DEBUG,
- format="%(asctime)s %(levelname)s %(message)s",
- datefmt="%Y-%m-%d %H:%M:%S",
- filename="chatbot_backend.log"
- )
- logger = logging.getLogger("Chatbot text_to_speech.py file Backend")
- # 從環境變量中擷取`ELEVEN_LABS_API_KEY`的值
- ELEVEN_LABS_API_KEY = config("ELEVEN_LABS_API_KEY")
- """
- 導入請求庫以發出HTTP請求,使用decouple的config函數從環境變量中檢索ELEVEN_LABS_API_KEY的值。
- convert_text_to_speech函數采用消息參數并執行以下步驟:
- 它定義了請求主體,包括要轉換的文本和語音設定。
- 定義了不同語音的語音ID(例如,Voice_shaun、Voice_rachel、Voice_antoni)。
- 構造了請求頭和URL端點,包括ELEVEN_LABS_API_KEY。
- try-except塊用于處理請求過程中可能發生的任何異常。
- requests.post方法用于向Eleven Labs API發送post請求,其中包含提供的正文和頭。
- 如果響應的狀态代碼為200(表示成功),則傳回在響應中接收到的内容(音頻資料)。
- 如果響應具有任何其他狀态代碼,則傳回None。
- """
- def convert_text_to_speech(message):
- logger.info(f'method convert_text_to_speech in text_to_speech.py file is invoked')
- # 定義文本到語音轉換的請求正文
- body = {
- "text": message,
- "voice_settings": {
- "stability": 0,
- "similarity_boost": 0
- }
- }
- # 為不同的語音定義語音ID
- voice_sam = "xxxx"
- voice_gavin = " xxxx "
- voice_chris = " xxxx "
- # 構造請求 頭和UR
- headers = {
- "xi-api-key": ELEVEN_LABS_API_KEY,
- "Content-Type": "application/json",
- "accept": "audio/mpeg"
- }
- endpoint = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_gavin}"
- try:
- # 向Eleven Labs API發送POST請求
- response = requests.post(endpoint, json=body, headers=headers)
- except Exception as e:
- 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')
- return
- if response.status_code == 200:
- # 傳回響應中接收到的内容(音頻資料)
- return response.content
- else:
- logger.error(f'Error happened when Send the POST request to the Eleven Labs API with code {response.status_code}')
- 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方法:
- …
- openai.organization = config("OPEN_AI_ORG")
- openai.api_key = config("OPEN_AI_KEY")
- …
- """
- get_chat_response函數采用message_input參數,該參數表示使用者對聊天機器人的輸入消息。
- 該功能執行以下步驟:
- 它使用get_recent_messages函數從資料庫或存儲中檢索最近的聊天消息。
- 它根據使用者提供的message_input建立一個新的使用者消息,并附加與語言使用相關的附加說明。
- 新使用者消息将添加到現有消息中。列印這些消息進行調試。
- OpenAI聊天完成API使用OpenAI.ChatCompletion.create方法調用,将消息作為輸入傳遞,以生成聊天響應。
- 生成的消息文本是從API響應中提取的。
- 生成的消息文本将作為函數的結果傳回。
- """
- # Open AI - Chat GPT
- # 擷取聊天響應
- def get_chat_response(message_input):
- logger.info("method get_chat_response in openai_requests.py file is called")
- # 從資料庫或存儲中檢索最近的資訊
- messages = get_recent_messages()
- # 根據輸入建立新的使用者消息
- user_message = {
- "role": "user",
- "content": message_input + " Please use English to provide your response"
- }
- # 将新使用者消息附加到現有消息
- messages.append(user_message)
- # 列印消息以進行調試
- print(messages)
- logger.info(f'method get_chat_response existing messages {messages}')
- try:
- # 調用OpenAI聊天完成API生成聊天響應
- response = openai.ChatCompletion.create(
- model="gpt-3.5-turbo",
- messages=messages
- )
- # 從API響應中提取生成的消息文本
- message_text = response["choices"][0]["message"]["content"]
- logger.info(f'method get_chat_response message from OpenAI API call {message_text}')
- # 傳回生成的消息文本
- return message_text
- except Exception as e:
- logger.error("Exception in calling OpenAI api")
- return
1.5 ChatGPT語音聊天機器人改進
但是這裡面有一個很重要的問題,從企業級的角度,模型産出的結果可能不符合你的預期,這邊有三種情況,第一種是滿意度不高,模型給的回複可能是一部分是正确的,但另外一部分是很有問題的;第二種是模型給的結果是錯的;第三種是模型給的結果根本就不相關。不相關和錯誤的結果,其實是兩種類型,因為不相關表明模型根本就不了解你輸入的内容是什麼,這也再次說明了提示詞的重要性。如果出現這種情況,怎麼去處理?基于大模型應用程式的開發,結果是很重要的新的上下文,這類似于貝葉斯Bayesian,整個Transformer架構是NLP思想的一個實作,如果它出現了問題,三種類型是部分正确、錯誤以及不相關,無論是什麼資訊,模型進一步優化它的結果新的上下文,這是貝葉斯Bayesian基本思想的一個表現。
作者收到美國一個大學教授分享的一篇MIT的論文,論文背後有很多數學的部分,相信這篇論文應該是一個非常愉悅的閱讀體驗,因為作者最近在做一個很重要的工作,是有狀态提示詞(stateful prompting),如果讀者感興趣,可以跟作者進一步深度交流,MIT這篇論文的基本思想和現在的思維鍊提示詞(CoT)不一樣,它針對目前已有的問題,使用一種鍊式的過程,把不同對話中的提示詞形成一個鍊條,然後基于這個鍊條形成一個上下文,類似于天氣預報,昨天的天氣情況大機率會影響今天的天氣,今天的天氣和昨天的天氣大機率會影響明天的天氣,論文使用了這個思想。從項目的角度或者做企業級最佳實踐的角度,無論使用模型,還是對模型本身的結果進行優化,其實一個核心性的元件,都是更明确清晰的上下文,而結果無論是部分正确或部分錯誤、還是錯誤的結果、或者完全不相關的結果,這些都是至關重要的上下文。大家通過樸素貝葉斯的思想,比較容易知道機率模型,在重試的時候,不要以簡單粗暴方式重試,而應該拿上這個結果,加上你的判斷進行重試,你看見那個結果,告訴它不正确,然後你重新生成,這也會有效果,在很多情況下,你應該設立好自己的架構,一個很重要的技術叫Langchain,它做的一個很重要的工作,就是幫你封裝了部分此類的操作。
本節跟大家分享了一個很重要的企業級的最佳實踐,通過提供一個端到端的項目,大家體驗一下基于大模型驅動的應用程式。
《企業級ChatGPT開發入門實戰直播21課》報名課程請聯系:
Gavin老師:NLP_Matrix_Space
Sam老師:NLP_ChatGPT_LLM
我們的兩本最新書籍年底即将出版:
- 《企業級Transformer&ChatGPT解密:原理、源碼及案例》
- 《企業級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解密:原理、源碼及案例》,是您深入學習的好選擇,年底即将重磅出版,歡迎購買!