Amazon 聊天機器人實作導航

我在 Amazon [1] 看到一個聊天機器人的課, 只需要花 1.5 小時. 我想說這時間我行啊, 就跟著跑了一遍流程.

不過呢? 跟某些網課一樣, 它只帶你走流程. 做完之後覺得有點空虛. 所以決定再複習一次我在哪裡? 我是誰? 我做了什麼?

Step 1: 選定 LLM. 在 SageMaker 下找到課程指定的 model (Flan T5 XL), 設置 Inference 用的端點 (endpoint). 也就是下圖中間的部分.

Step 2: 賦予 LLM 網路搜尋的能力. Amazon 的套件叫做 Kendra, 也就是上圖下方偏左的綠色方塊. Kendra 可以從指定的 data source 找資料進來, 例如 shared point, one drive. 這樣就滿有實用性. 但課程建議選 Amazon S3.

Step 3: 賦予語音文字轉換的能力. 採用的套件是 Amazon Lex, 也就是上圖下方偏右的綠色方塊. 預設它的 Inten (意圖?) 會叫 Kendra 去 search. 等等! 那 LLM 在幹啥? 原來會把問題和 Kendra 打包去問 LLM. 官方課程說明如下:

  • Retrieve relevant information from your Kendra index.
  • Package that information along with the original question into a prompt.
  • Send the prompt to your LLM endpoint.
  • Return the LLM’s response to your Lex V2 bot.

到這一步, 網頁上已經可以有 build 和 test 的按鈕可以選. Build 完可以 test, 但回答一般問題的能力很差.

Step 4: 增加 RAG 能力. 在上圖上方的藍色區塊是 Amazon Cloud9 這個 IDE 環境. 我們在這裡編出 RAG 的 code. 它綁定:

  • Your AWS REGION
  • Your Account ID
  • Your Kendra index ID
  • Your Large Language Model endpoint name

然後把它們 build 出一個 docker image, 放到 repository. 不意外地, 它必須是 Amazon 家的 ECR (Elastic Contain Registry).

這一動需要一些時間, 可以休息一下.

這邊的架構採用常見的 RAG + LangChain [3]. 也就是上面架構圖下方的橘色 Lambda 字樣那個方塊. RAG 和 LangChain 是少數沒看見 Amazon logo 的地方.

Step 5: 做好的 Docker 放在哪裡跑呢? 當然要順便推銷一下 Amazon Lambda [2]. 它號稱不用佈署後台就可以執行, 而且有免費方案.

所以我們在 Lambda create function 並指定 image 的 URI 就是 Amazon ECR image repository 底下的 rag-kendra-llm-lex 這個 docker. 然後設定 IAM (Intent, Access Management) 的參數.

Step 6. 搞定後台之後, 接著要搞定前台. 首先在 Amazon 的 Lex, 做一些規定好 (=死) 的設定. 建立出一個名叫 WebAppBot 的機器人. 為了讓 Amazon 前台後台能夠相認, 不意外前台也有一個 ID, 例如: V5R1NOLHRM.

Step 7. 現在前台後台都有了. 還缺什麼呢? 缺一個雲端平台讓人找到 WebAppBot! 這時候 Amazon Cloudformation [4] 就出來了.

等等! 我剛剛以為 Lambda 不就搞定所有了? 可惜並不是. Lambda 處理的是雲端運算的資源. Cloudformation 處理的是 “Speed up cloud provisioning with infrastructure as cod". 也就是寫寫 code 就設定好雲端了. 兩者的功用的不同恰如章節名稱所示.

TASK 4.2: DEPLOY THE IMAGE AS A LAMBDA FUNCTION

Task 5: Deploy a web app with Cloudformation

Cloudformation 的資源叫做 stack, 所以我們 create stack, 取名叫 LexWebApp, 並且指定連到前述 WebAppBot (ID), 和 AccountID.

光是網頁設定還不夠. 此處要真正 build LexWebApp, 例如指定跑在 AMD 還是 X86 上等底層的 code. 這時用到 Amazon CodeBuild.

Step 8. 感覺應該都沒事了. 但課程說 webAPP 不應該連到 LexBot, 而是連到它的 alias. 這樣才能一面背景維護, 又維持服務在線. 所以重 build 連到 alias 的 lambda 了. 在 cloudformation 以 WebAppUrl 指到的 URL launch LexWebApp.

OK! 這就是我對這個課程的理解. 它用了置入性行銷的手法, 把自家的產品介紹了一輪. 我有學到新的東西嗎? 有, 我對 Amazon 賣的東西更理解了. 但是在技術上, 有點空虛就是了. 所以我又用了一天來回顧我花的 1.5 小時, 讓它更有意義一點!

[REF]

  1. https://explore.skillbuilder.aws/
  2. https://aws.amazon.com/tw/pm/lambda/
  3. RAG實作教學,LangChain + Llama2 |創造你的個人LLM
  4. https://aws.amazon.com/tw/cloudformation/

當機的連假

這個連假花了不少時間在修復電腦. 主要是一時手癢升級了 Windows 10. 去年升級過一次, 結果順利後悔了. 想不到再次想升級 Windows 10 就開不了機了.

這次 Windows 有一個開機按 F8 就 roll back 的選項. 結果退回去之後, 電腦就有點不太正常. “為何了安全起見", 我想到開機的 RAID 也好久沒修了, 順便修一下. 結果沒注意到 RAID 不能隨便解除, 解除設錯的 RAID, 這下就真的完全開不起來了.

於是乎只好拿出 Windows 8 的光碟片重裝, 裝好之後想再升一次 Windows 10, 結果 Microsoft 說這片是非法的… 哀! 要不是電腦常當, 我會重裝那麼多次嗎? 幸好我還有一個從 Microsoft 市集買的序號, 這個還沒用太多次. 裝上就可以升 Windows 10 了. 另外把 Office 360 等等全部線上重裝. 果然在雲端本舖買的比較穩當.

接著就把雲端的備份一一抓回來. 話說 Amazon Cloud Drive 便宜沒好貨, 一次只能下載 1,000 個檔案或是 5GB. 又或者要把全部雲端的檔案一次全抓下來. 嗯, 雲端已經備份 7.X TB 了, 只有買一顆 Seagate 8TB 冷儲存的硬碟才有可能. 

所謂冷儲存就是寫一次之後不太更新, 後續以唯獨為主. 因為這顆 NTD 8,499 的 8TB 是疊瓦式 (Shingled Magnetic Recording,SMR) 的硬碟, 每一個磁區是重疊的. 讀的時候讀取頭只要讀一小塊就知道 0 或 1, 所以重疊也無所謂. 寫的時候因為寫入頭比較大, 寫了第 n 軌, 就會破壞第 n+1 軌, 更新了第 n +1 軌, 就會拖累 n + 2 軌…, 依此類推, 一直到寫到地老天荒…不疊瓦的邊界為止, 因此寫的時候非常慢.

另外一個投機的方式是隨便找一個不太小的目錄來放 Amazon 雲端, 下載的檔案如果不是需要的就刪掉, 只留下要的檔案, 這樣也可以以小博大. 寫個小程式可以做到這件事. 但我真正要的只是部落格和相簿. 這兩個我都備了 N 份, 殺百留一似乎不划算. 於是我就手動慢慢下載, 解開了 5 萬張照片後, 現在已經恢復到 2011 年了, 哈! 哈! 哈! 嗚嗚嗚!

這次因為要修 blog, 乾脆從 AppServ 2.5.10 進版到 8.1.0. 整個 UI 長相都大不相同了. 有幾張圖沒救回來, 但至少解決了長久以來 PHP5 不敢進版的心頭大患, 這次一口氣跳到 PHP7. 不過聽說 PHP 技術也快被淘汰了, 下次進版不知道要換哪種語言?

—- 2016/03/13 ———–

因為新版的 Appserv 8.2.0 太常當機, 今天改為 XAMPP 來服務. 基本上把原來 Appserv/www/phpMyAdmin 搬到 XAMPP/phpMyAdmin, 把 Appserv/www 搬到 XAMPP/www, MySQL 底下的 data 也要跟著搬一次. 然後修改 XAMPP/httpd.conf 的 /htdocs 為 /www, 網頁就出來了. 當然安裝的時候也做了手腳, 不能用  XAMPP 目錄安裝, 還是謊稱它為 Appserv. 不然我怕某些 hard link 會找不到圖.

另外, XAMPP 裡面的東西實在好多, 比 Appserv 複雜好幾倍. 這個 Appserv 的作者應該也是好人吧! 只是 bug 太多了. https://www.appservnetwork.com/en/ 上面的 8.2.0 的目錄是錯的, 下載了還是 8.1.0, 要手動 hack 一下. 他沒有訪客留言板, 無法請他更正, 在此跟大家說一下.