天天看點

第1課 基于ChatGPT的端到端語音聊天機器人項目實戰-3

作者:矽谷ChatGPT和LLM中心

第1課 基于ChatGPT的端到端語音聊天機器人項目實戰

1.4 使用FastAPI建構語音聊天機器人後端實戰

在後端代碼(backend)中調用了OpenAI API及其他的服務,如圖1-10所示。

第1課 基于ChatGPT的端到端語音聊天機器人項目實戰-3

圖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. from fastapi import FastAPI, File, UploadFile, HTTPException
  5. from fastapi.responses import StreamingResponse
  6. from fastapi.middleware.cors import CORSMiddleware
  7. from decouple import config
  8. import openai
  9. # 自定義函數導入
  10. from functions.text_to_speech import convert_text_to_speech
  11. from functions.openai_requests import convert_audio_to_text, get_chat_response
  12. from functions.database import store_messages, reset_messages
  13. import logging
  14. logging.basicConfig(
  15. level=logging.DEBUG,
  16. format="%(asctime)s %(levelname)s %(message)s",
  17. datefmt="%Y-%m-%d %H:%M:%S",
  18. filename="chatbot_backend.log"
  19. )
  20. logger = logging.getLogger("Chatbot main.py fle Backend")
  21. """ 擷取環境變量
  22. 在這段代碼中,config函數用于從環境變量中檢索值。
  23. OPEN_AI_ORG和OPEN_AI _KEY環境變量應分别包含OpenAI的組織名稱和API密鑰。
  24. 執行提供的代碼後,openai.organization變量将被設定為“my_organization”,openai.api_key變量将被設為“my_api_key”。
  25. 這些值随後可以在代碼中使用,以使用指定的組織和API密鑰驗證OpenAI API并與之互動。
  26. """
  27. openai.organization = config("OPEN_AI_ORG")
  28. openai.api_key = config("OPEN_AI_KEY")
  29. """啟動應用程式
  30. 在這段代碼中,建立了一個FastAPI類的執行個體,它表示FastAPI應用程式。
  31. 此執行個體将用于定義應用程式的路由、端點和其他配置。
  32. """
  33. # 建立 FastAPI 類的新執行個體,并将其配置設定給變量 app
  34. app = FastAPI()
  35. """
  36. 在該示例中,我們從FastAPI子產品導入FastAPI類。
  37. 然後,我們建立一個新的FastAPI執行個體,并将其配置設定給變量應用程式。
  38. 這使我們能夠使用應用程式執行個體來定義FastAPI應用程式的行為和路由。
  39. """
  40. """CORS - Origins
  41. 在這段代碼中,建立了來源清單,并用URL填充。這些URL表示允許的來源或域
  42. 允許向伺服器送出請求。CORS(跨來源資源共享)是一種允許web浏覽器送出請求的機制
  43. 到與提供網頁的域不同的域。
  44. 通過指定允許的來源,伺服器可以控制哪些域被允許通路其資源。
  45. """
  46. # 建立一個名為“origins”的清單,其中包含多個作為字元串的URL
  47. # origins = [
  48. # "http://localhost:5173",
  49. # "http://localhost:5174",
  50. # "http://localhost:4173",
  51. # "http://localhost:3000",
  52. # ]
  53. origins = [
  54. "*",
  55. ]
  56. """
  57. 在上面的示例中,原點清單由三個URL定義,這些URL可以根據應用程式的具體要求進行定制。
  58. 在代碼的後面,源清單可以在CORS中間件或其他配置中使用,以允許來自指定域的跨源請求。
  59. """
  60. """
  61. 在下面的代碼中,将CORS中間件添加到具有所需配置的應用程式中,包括allow_origins、allow_credentials、allow_methods和allow_headers參數。
  62. 這確定了FastAPI應用程式正确處理CORS請求,并允許根據指定的配置進行跨源通信。
  63. CORS中間件被添加到FastAPI應用程式(應用程式)中。
  64. CORS中間件負責處理跨源資源共享并管理HTTP響應中與CORS相關的頭。
  65. 在應用程式對象上調用add_middleware方法來添加CORS中間件。
  66. 使用CORSMiddleware類,并傳遞幾個參數來配置其行為:
  67. allow_origins:指定允許請求的允許來源(域)。它采用了之前定義的起源清單。
  68. allow_credentials:訓示是否允許在CORS請求中發送和接收憑據,如cookie或授權标頭。在本例中,它設定為True。
  69. allow_methods:為CORS請求指定允許的HTTP方法。值[“*”]允許所有方法。
  70. allow_headers:為CORS請求指定允許的HTTP标頭。值[“*”]允許所有标頭。
  71. """
  72. # CORS -中間件
  73. app.add_middleware(
  74. CORSMiddleware,
  75. allow_origins=origins,
  76. allow_credentials=True,
  77. allow_methods=["*"],
  78. allow_headers=["*"],
  79. )
  80. """
  81. 使用HTTPGET方法為/health路徑定義了一個路由處理程式。@app.get-decorator用于将處理程式函數check_health與此特定路由相關聯。
  82. check_health函數是一個異步函數(async-def),用于處理傳入請求并傳回訓示健康狀态的JSON響應。
  83. """
  84. # Check health
  85. @app.get("/health")
  86. async def check_health():
  87. logger.info(f'method check_health in main.py file is invoked')
  88. return {"response": "healthy"}
  89. # 重置對話
  90. @app.get("/reset")
  91. async def reset_conversation():
  92. reset_messages()
  93. logger.info(f'method reset_conversation in main.py file is invoked')
  94. return {"response": "conversation reset"}
  95. """
  96. 使用@app.post裝飾器定義了一個端點,用于處理對/post-audio/的post請求。端點需要一個上傳的音頻檔案,該檔案作為名為file的UploadFile參數接收。
  97. 該代碼執行以下步驟:
  98. 上載的音頻檔案将臨時儲存到磁盤。
  99. 儲存的音頻檔案在讀取模式下以二進制檔案的形式打開(audio_input)。
  100. 使用convert_audio_to_text函數将音頻檔案解碼為文本。保護子句檢查音頻解碼是否成功。否則,将引發HTTP異常。
  101. 使用get_chat_response函數基于解碼的音頻生成聊天響應。消息和聊天響應使用store_messages函數存儲在資料庫或任何其他存儲機制中。另一個保護條款檢查是否獲得了有效的聊天響應。否則,将引發HTTP異常。
  102. 聊天響應使用convert_text_to_speech功能轉換為音頻。guard子句檢查音頻轉換是否成功。否則,将引發HTTP異常。
  103. 定義了一個生成器函數(iterfile)來生成塊中的音頻輸出。音頻輸出作為流式響應傳回,媒體類型設定為“application/octet-stream”。
  104. """
  105. # 使用post請求時不會在浏覽器中播放
  106. @app.post("/post-audio/")
  107. async def post_audio(file: UploadFile = File(...)):
  108. logger.info(f'method post_audio in main.py file is invoked')
  109. # 要處理POST請求的終結點 "/post-audio/"
  110. # 暫時儲存上傳的音頻檔案
  111. with open(file.filename, "wb") as buffer:
  112. buffer.write(file.file.read())
  113. audio_input = open(file.filename, "rb")
  114. # 将音頻檔案解碼為文本
  115. message_decoded = convert_audio_to_text(audio_input)
  116. # 確定音頻解碼成功
  117. if not message_decoded:
  118. logger.error(f'Failed to decode audio method post_audio in main.py file is invoked')
  119. raise HTTPException(status_code=400, detail="Failed to decode audio")
  120. # 根據解碼的音頻擷取聊天響應
  121. chat_response = get_chat_response(message_decoded)
  122. # 将消息存儲在資料庫或任何其他存儲機制中
  123. store_messages(message_decoded, chat_response)
  124. # 確定有效的聊天響應
  125. if not chat_response:
  126. logger.error(f'Failed chat response method post_audio in main.py file is invoked')
  127. raise HTTPException(status_code=400, detail="Failed chat response")
  128. # 将聊天響應轉換為音頻
  129. audio_output = convert_text_to_speech(chat_response)
  130. # 確定音頻輸出成功
  131. if not audio_output:
  132. logger.error(f'Failed audio output method post_audio in main.py file is invoked')
  133. raise HTTPException(status_code=400, detail="Failed audio output")
  134. # 建立一個生成音頻塊的生成器
  135. def iterfile():
  136. yield audio_output
  137. logger.info(f'COMPLETE SUCCESS in method post_audio in main.py file call')
  138. # 将音頻作為具有媒體類型的流式響應傳回 "application/octet-stream"
  139. 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. convert_audio_to_text函數以audio_file作為輸入,它表示要轉換為文本的音頻檔案。
  3. 該功能執行以下步驟:
  4. 它使用OpenAI API通過Whisper模型轉錄音頻檔案。“whisper-1”參數指定用于轉錄的whisper模型的版本。
  5. 轉錄的文本是從OpenAI API收到的響應中提取的。
  6. 轉錄後的文本将作為函數的結果傳回。
  7. """
  8. # Open AI - Whisper
  9. #将音頻轉換為文本
  10. def convert_audio_to_text(audio_file):
  11. logger.info("method convert_audio_to_text in openai_requests.py file is called")
  12. try:
  13. # 使用OpenAI API轉錄使用Whisper模型的音頻檔案
  14. transcript = openai.Audio.transcribe("whisper-1", audio_file)
  15. # 從響應中提取轉錄的文本
  16. message_text = transcript["text"]
  17. # 傳回轉錄後的文本
  18. return message_text
  19. except Exception as e:
  20. logger.error("Error happend in OpenAI Audio Transcribe in method convert_audio_to_text in openai_requests.py file")
  21. 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方法的代碼實作:

  1. import requests
  2. from decouple import config
  3. import logging
  4. logging.basicConfig(
  5. level=logging.DEBUG,
  6. format="%(asctime)s %(levelname)s %(message)s",
  7. datefmt="%Y-%m-%d %H:%M:%S",
  8. filename="chatbot_backend.log"
  9. )
  10. logger = logging.getLogger("Chatbot text_to_speech.py file Backend")
  11. # 從環境變量中擷取`ELEVEN_LABS_API_KEY`的值
  12. ELEVEN_LABS_API_KEY = config("ELEVEN_LABS_API_KEY")
  13. """
  14. 導入請求庫以發出HTTP請求,使用decouple的config函數從環境變量中檢索ELEVEN_LABS_API_KEY的值。
  15. convert_text_to_speech函數采用消息參數并執行以下步驟:
  16. 它定義了請求主體,包括要轉換的文本和語音設定。
  17. 定義了不同語音的語音ID(例如,Voice_shaun、Voice_rachel、Voice_antoni)。
  18. 構造了請求頭和URL端點,包括ELEVEN_LABS_API_KEY。
  19. try-except塊用于處理請求過程中可能發生的任何異常。
  20. requests.post方法用于向Eleven Labs API發送post請求,其中包含提供的正文和頭。
  21. 如果響應的狀态代碼為200(表示成功),則傳回在響應中接收到的内容(音頻資料)。
  22. 如果響應具有任何其他狀态代碼,則傳回None。
  23. """
  24. def convert_text_to_speech(message):
  25. logger.info(f'method convert_text_to_speech in text_to_speech.py file is invoked')
  26. # 定義文本到語音轉換的請求正文
  27. body = {
  28. "text": message,
  29. "voice_settings": {
  30. "stability": 0,
  31. "similarity_boost": 0
  32. }
  33. }
  34. # 為不同的語音定義語音ID
  35. voice_sam = "xxxx"
  36. voice_gavin = " xxxx "
  37. voice_chris = " xxxx "
  38. # 構造請求 頭和UR
  39. headers = {
  40. "xi-api-key": ELEVEN_LABS_API_KEY,
  41. "Content-Type": "application/json",
  42. "accept": "audio/mpeg"
  43. }
  44. endpoint = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_gavin}"
  45. try:
  46. # 向Eleven Labs API發送POST請求
  47. response = requests.post(endpoint, json=body, headers=headers)
  48. except Exception as e:
  49. 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')
  50. return
  51. if response.status_code == 200:
  52. # 傳回響應中接收到的内容(音頻資料)
  53. return response.content
  54. else:
  55. logger.error(f'Error happened when Send the POST request to the Eleven Labs API with code {response.status_code}')
  56. 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. openai.organization = config("OPEN_AI_ORG")
  2. openai.api_key = config("OPEN_AI_KEY")
  3. """
  4. get_chat_response函數采用message_input參數,該參數表示使用者對聊天機器人的輸入消息。
  5. 該功能執行以下步驟:
  6. 它使用get_recent_messages函數從資料庫或存儲中檢索最近的聊天消息。
  7. 它根據使用者提供的message_input建立一個新的使用者消息,并附加與語言使用相關的附加說明。
  8. 新使用者消息将添加到現有消息中。列印這些消息進行調試。
  9. OpenAI聊天完成API使用OpenAI.ChatCompletion.create方法調用,将消息作為輸入傳遞,以生成聊天響應。
  10. 生成的消息文本是從API響應中提取的。
  11. 生成的消息文本将作為函數的結果傳回。
  12. """
  13. # Open AI - Chat GPT
  14. # 擷取聊天響應
  15. def get_chat_response(message_input):
  16. logger.info("method get_chat_response in openai_requests.py file is called")
  17. # 從資料庫或存儲中檢索最近的資訊
  18. messages = get_recent_messages()
  19. # 根據輸入建立新的使用者消息
  20. user_message = {
  21. "role": "user",
  22. "content": message_input + " Please use English to provide your response"
  23. }
  24. # 将新使用者消息附加到現有消息
  25. messages.append(user_message)
  26. # 列印消息以進行調試
  27. print(messages)
  28. logger.info(f'method get_chat_response existing messages {messages}')
  29. try:
  30. # 調用OpenAI聊天完成API生成聊天響應
  31. response = openai.ChatCompletion.create(
  32. model="gpt-3.5-turbo",
  33. messages=messages
  34. )
  35. # 從API響應中提取生成的消息文本
  36. message_text = response["choices"][0]["message"]["content"]
  37. logger.info(f'method get_chat_response message from OpenAI API call {message_text}')
  38. # 傳回生成的消息文本
  39. return message_text
  40. except Exception as e:
  41. logger.error("Exception in calling OpenAI api")
  42. 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解密:原理、源碼及案例》,是您深入學習的好選擇,年底即将重磅出版,歡迎購買!

繼續閱讀