Try   HackMD

寫在前面

  • 以下為自行安裝 Kuwa 於 MacBook Air (M2, 2023) 的隨手筆記,多數的步驟在其他平台和作業系統也可以直接使用,但不排除會有需要因應作業系統不同而修改的可能性。
  • 本篇文章所使用的 Kuwa 版本為 0.3.0 (released on May 19, 2024)
  • 對於本篇文章有任何建議,皆可透過 comment 的方法直接提出,歡迎大家一起共編讓這篇文章的內容可以更完整

安裝 & 執行 Kuwa

  • Kuwa AI: https://kuwaai.org/
  • 安裝方法
  • 使用 Docker 方式安裝
    • 先下載相關程式

      ​​​​​​​​git clone https://github.com/kuwaai/genai-os/
      ​​​​​​​​cd genai-os/docker
      
    • 將預設的 .admin-password.sample.db-password.sample.env.sample 三個檔案複製一份成檔名移除副檔名 .sample 的新檔案

      ​​​​​​​​cp .admin-password.sample .admin-password
      ​​​​​​​​cp .db-password.sample .db-password
      ​​​​​​​​cp .env.sample .env
      
    • 依據網站說明,修改這三個檔案的內容

      • .admin-password: 設定成未來系統管理員的密碼

      • .db-password: 設定成未來系統資料庫的密碼

      • .env: 環境變數設定(若只是自行測試,可先不用修改)

        ​​​​​​​​​​​​DOMAIN_NAME=localhost # 機器的domain name
        ​​​​​​​​​​​​PUBLIC_BASE_URL="http://${DOMAIN_NAME}/" # 機器的網址
        ​​​​​​​​​​​​
        ​​​​​​​​​​​​ADMIN_NAME="Kuwa Admin" # 管理者名稱
        ​​​​​​​​​​​​ADMIN_EMAIL="admin@${DOMAIN_NAME}" # 管理者的登入 email 信箱
        
    • 執行 run.sh,此時會執行預設的 compose/base.yaml、compose/pgsql.yaml、compose/gemini.yaml、compose/docqa_webqa.yaml、compose/searchqa.yaml 共五個應用程式的服務

      ​​​​​​​​./run.sh
      
    • 需要等待一段時間將這幾個 containers 跑起來,之後可以在 Docker dashboard 上看到跑起來容器

      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More →

      以及跑起來的映像檔

      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More →

    • 接著打開瀏覽器,輸入 http://localhost (或剛剛設定的機器網址),就可以看到 Kuwa 已經跑起來了!

      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More →

    • 若要登入 Kuwa,先點選右上角的 Sing in,接著輸入剛剛設定的管理者登入email信箱,以及系統管理員密碼,就可以成功登入,並且看到預設的 Gemini Pro 模組已經安裝好放在桌面上了

      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More →

在Kuwa中新增 LLM 模型

新增使用 ChatGPT API 的雲端模型

  • 我們使用原始安裝後唯一有跑起來的 geminipro 模組做為參考範例,先產生一個接下來要使用的 OpenAI GPT-4 的設定檔

    ​​​​cp gemini.yaml chatgpt.yaml
    
  • 接著編輯這個新的 chatgpt.yaml 檔案,總共需要修改下列幾個地方:

    • 將第二行 gemini-executor: 改成 chatgpt-executor:

    • 將環境變數 EXECUTOR_TYPE 從原本的 geminipro 改成 chatgpt,這邊可以參考 genai-os/src/executor/ 目錄下的檔案名稱,為目前已支援的 EXECUTOR_TYPE

    • 將環境變數 EXECUTOR_ACCESS_CODE 從原本的 gemini-pro 改成 gpt-4-turbo,這邊只要是不重複使用的代號即可,建議可使用所欲使用的模型版本號碼

    • 將環境變數 EXECUTOR_NAME 從原本的 Gemini Pro 改成 OpenAI GPT-4,這邊所設定的代號,未來會出現在 Kuwa 的網頁介面中,因此以簡單易懂為原則

    • command 的內容加入指定 gpt-4-turbo 模型,從原本的

      command: ["api_key", ……

      改成

      command: ["model", "gpt-4-turbo","api_key", ……

    • 由於 OpenAI GPT-4 需使用 API key 才能存取,因此在 command 的 api_key 中,將原本的 <YOUR_GLOBAL_API_KEY_HERE> 改成你的 OpenAI API key

  • 設定完畢後,將 chatgpt.yaml 的主檔名 (chatgpt) 加入 run.sh 檔案中的 confs 陣列中,接著重新執行 run.sh 程式即可

  • 接著登入 Kuwa 後,在 room 裡面就可以看到多了一個 OpenAI gpt-4-turbo 的模組了

    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →

  • 點選這個新增模組後,我們可以請它自我介紹驗明正身 XD

    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →

新增使用透過 Ollama 安裝的在地版模型

Ollama 提供一個在地端快速部署 LLM 的平台,使用時可以先透過 Ollama 的 Library 網頁搜尋想要使用的 LLM,並且使用 ollama pull MODEL_NAME 的指令直接下載,接著便可以透過 Ollama 提供的類 ChatGPT 的 OpenAI API 相容方式提供 API 服務,預設的 API 網址為 http://localhost:11434/v1 ,同時 API Key 為 ollama

我們以 Microsoft Phi 3 mini 這個 LLM 為例(其他的 LLM 請比照辦理即可),首先使用ollama pull phi3 的指令下載模型後,接著我們按照下列方式加入 Kuwa:

  • 我們使用原始安裝後唯一有跑起來的 geminipro 模組做為參考範例,先產生一個接下來要使用的 ollama-phi3 的設定檔

    ​​​​cp gemini.yaml ollama-phi3.yaml
    
  • 接著編輯這個新的 ollama-phi3.yaml 檔案,總共需要修改下列幾個地方:

    • 將第二行 gemini-executor: 改成 ollama-phi3-executor:

    • 將環境變數 EXECUTOR_TYPE 從原本的 geminipro 改成 chatgpt

    • 將環境變數 EXECUTOR_ACCESS_CODE 從原本的 gemini-pro 改成 ollama-phi3,這邊只要是不重複使用的代號即可,建議可使用所欲使用的模型版本號碼

    • 將環境變數 EXECUTOR_NAME 從原本的 Gemini Pro 改成 Ollama Phi3,這邊所設定的代號,未來會出現在 Kuwa 的網頁介面中,因此以簡單易懂為原則

    • command 的內容加入指定的模型、API 網址、API key,變成:

      command: ["model", "phi3", "base_utl", "http://host.docker.internal:11434/v1", "api_key", "ollama"]

    • 請注意,原本在 Ollama 中所提示的 API 網址為http://[localhost](http://localhost):11434/v1,但由於我們是使用 Docker 的模式載入這個 LLM,在容器中無法使用 localhost 連到直接跑在機器上面的服務,因此需將 localhost 改成機器本身的 IP address,或者直接使用 Docker 提供的機器名稱 host.docker.internal,就可以連到直接跑在機器上面的服務

  • 設定完畢後,將 ollama-phi3.yaml 的主檔名 (ollama-phi3) 加入 run.sh 檔案中的 confs 陣列中,接著重新執行 run.sh 程式即可

  • 接著登入 Kuwa 後,在 room 裡面就可以看到多了一個 Ollama Phi3 的模組了

新增使用透過 LM Studio 安裝的在地版模型

LM Studio 提供一個在地端快速部署 LLM 的平台,使用時可以先透過 LM Studio 的 Search 功能尋找想使用的開放模型,接著可以直接點選 Download 下載,然後可以透過 LM Studio 的 Local Server 功能,將想要啟動的 LLM 模型掛載到本機上,並透過類 ChatGPT 的 OpenAI API 相容方式提供 API 服務,預設的 API 網址為 http://localhost:11434/v1 ,同時 API Key 為 lm-studio

我們以 Microsoft Phi 3 mini 這個 LLM 為例(其他的 LLM 請比照辦理即可),首先在 LM Studio 下載 microsoft/Phi-3-mini-4k-instruct-gguf 完成後,並在 Local Server 中載入這個模型,接著我們按照下列方式加入 Kuwa:

  • 我們使用原始安裝後唯一有跑起來的 geminipro 模組做為參考範例,先產生一個接下來要使用的 lmstudio-microsoft-phi3-mini 的設定檔

    ​​​​cp gemini.yaml lmstudio-microsoft-phi3-mini.yaml
    
  • 接著編輯這個新的 lmstudio-microsoft-phi3-mini.yaml 檔案,總共需要修改下列幾個地方:

    • 將第二行 gemini-executor: 改成 lmstudio-microsoft-phi3-mini-executor:

    • 將環境變數 EXECUTOR_TYPE 從原本的 geminipro 改成 chatgpt

    • 將環境變數 EXECUTOR_ACCESS_CODE 從原本的 gemini-pro 改成 lmstudio-microsoft-phi3-mini,這邊只要是不重複使用的代號即可,建議可使用所欲使用的模型版本號碼

    • 將環境變數 EXECUTOR_NAME 從原本的 Gemini Pro 改成 LM Studio MS-Phi3-mini,這邊所設定的代號,未來會出現在 Kuwa 的網頁介面中,因此以簡單易懂為原則

    • command 的內容加入指定的模型、API 網址、API key,變成:

      command: ["model", "microsoft/Phi-3-mini-4k-instruct-gguf", "base_utl", "http://host.docker.internal:11434/v1", "api_key", "lm-studio"]

    • 請注意,原本在 LM Studio 中所提示的 API 網址為http://[localhost](http://localhost):11434/v1,但由於我們是使用 Docker 的模式載入這個 LLM,在容器中無法使用 localhost 連到直接跑在機器上面的服務,因此需將 localhost 改成機器本身的 IP address,或者直接使用 Docker 提供的機器名稱 host.docker.internal,就可以連到直接跑在機器上面的服務

  • 設定完畢後,將 lmstudio-microsoft-phi3-mini.yaml 的主檔名 (lmstudio-microsoft-phi3-mini) 加入 run.sh 檔案中的 confs 陣列中,接著重新執行 run.sh 程式即可

  • 接著登入 Kuwa 後,在 room 裡面就可以看到多了一個 LM Studio MS-Phi3-mini 的模組了

新增地端 GGUF 格式的 LLM 模型

Kuwa 提供 llamacpp 的 executor,可以直接載入本機端使用 GGUF 檔案格式的 LLM 模組,我們以 Google Gemma 7B 為例,設定的方法如下:

  • 前往 https://huggingface.co/google/gemma-7b/tree/main 下載 Google Gemma 7B 的 GGUF 檔案,檔名為 gemma-7b.gguf,並將其存在 $HOME/gguf 目錄下。

  • 我們使用原始安裝後所附的 llamacpp.yaml 做為參考範例,先產生一個接下來要使用的 llamacpp-gemma-7b.yaml 設定檔

    ​​​​cp llamacpp.yaml llamacpp-gemma-7b.yaml
    
  • 接著編輯這個新的 llamacpp-gemma-7b.yaml 檔案,總共需要修改下列幾個地方:

    • 將第二行 llamacpp-executor: 改成 llamacpp-gemma-7b-executor:
    • 將環境變數 EXECUTOR_ACCESS_CODE 改成 llamacpp-gemma-7b,這邊只要是不重複使用的代號即可,建議可使用所欲使用的模型版本號碼
    • 將環境變數 EXECUTOR_NAME 改成 Llamacpp Gemma-7B,這邊所設定的代號,未來會出現在 Kuwa 的網頁介面中,因此以簡單易懂為原則
    • command 的設定中,將原本的 /var/model/taide-4bit.gguf 改成 /var/model/gemma-7b.gguf
    • volumes 的設定中,將原本的 /path/to/taide/model.gguf 改成 ${HOME}/gguf/gemma-7b.gguf,再將/var/model/taide-4bit.gguf 改成 /var/model/gemma-7b.gguf
  • 設定完畢後,將 llamacpp-gemma-7b.yaml 的主檔名 (llamacpp-gemma-7b) 加入 run.sh 檔案中的 confs 陣列中,接著重新執行 run.sh 程式即可

  • 接著登入 Kuwa 後,在 room 裡面就可以看到多了一個 Llamacpp Gemma-7B 的模組了

新增 TAIDE 模型的幾種方法

方法一:使用 TAIDE 官方的 API 服務(需向 TAIDE 申請開通)

  • 目前 TAIDE 使用類 ChatGPT 的 OpenAI API 相容方式提供 API 服務,因此可直接先使用 geminipro 的參考範例,產生一個接下來要使用的 TAIDE 的設定檔
cp gemini.yaml taide.yaml
  • 接著編輯這個新的 taide.yaml 檔案,總共需要修改下列幾個地方:
    • 將第二行 gemini-executor: 改成 taide-executor:

    • 將環境變數 EXECUTOR_TYPE 從原本的 geminipro 改成 chatgpt

    • 將環境變數 EXECUTOR_ACCESS_CODE 從原本的 gemini-pro 改成 taide-Llama3-TAIDE-LX-8B-Chat-Alpha1,這邊只要是不重複使用的代號即可,建議可使用所欲使用的模型版本號碼

    • 將環境變數 EXECUTOR_NAME 從原本的 Gemini Pro 改成 TAIDE Llama3-TAIDE-LX-8B-Chat-Alpha1,這邊所設定的代號,未來會出現在 Kuwa 的網頁介面中,因此以簡單易懂為原則

    • command 的內容加入指定的 LLM 模型,以及 API 的網址,從原本的

      command: ["api_key", ……

      改成

      command: ["model", "Llama3-TAIDE-LX-8B-Chat-Alpha1","base_url", "https://xxxxx.xxx.xxx.xxx/api/v1","system_prompt", "你是一個來自台灣的AI助理,你的名字是TAIDE,樂於以台灣人的立場幫助使用者,會用繁體中文回答問題。”, "api_key", ……

    • 由於 TAIDE API 需使用 API key 才能存取,因此在 command 的 api_key 中,將原本的 <YOUR_GLOBAL_API_KEY_HERE> 改成你的 TAIDE token

  • 設定完畢後,將 taide.yaml 的主檔名 (taide) 加入 run.sh 檔案中的 confs 陣列中,接著重新執行 run.sh 程式即可
  • 接著登入 Kuwa 後,在 room 裡面就可以看到多了一個 TAIDE Llama3-TAIDE-LX-8B-Chat-Alpha1 的模組了

方法二:使用透過 Ollama 安裝的在地版 TAIDE

我們以 Ollama 官方網站上提供的 ryan4559/llama3-taide-lx-8b-chat-alpha1-4bit 這個 TAIDE 版本為例,首先使用ollama pull ryan4559/llama3-taide-lx-8b-chat-alpha1-4bit 的指令下載模型後,接著我們按照下列方式加入 Kuwa:

  • 我們使用原始安裝後唯一有跑起來的 geminipro 模組做為參考範例,先產生一個接下來要使用的 ollama-taide 的設定檔

    ​​​​cp gemini.yaml ollama-taide.yaml
    
  • 接著編輯這個新的 ollama-phi3.yaml 檔案,總共需要修改下列幾個地方:

    • 將第二行 gemini-executor: 改成 ollama-taide-executor:

    • 將環境變數 EXECUTOR_TYPE 從原本的 geminipro 改成 chatgpt

    • 將環境變數 EXECUTOR_ACCESS_CODE 從原本的 gemini-pro 改成 ollama-taide,這邊只要是不重複使用的代號即可,建議可使用所欲使用的模型版本號碼

    • 將環境變數 EXECUTOR_NAME 從原本的 Gemini Pro 改成 Ollama TAIDE,這邊所設定的代號,未來會出現在 Kuwa 的網頁介面中,因此以簡單易懂為原則

    • command 的內容加入指定的模型、API 網址、API key,變成:

      command: ["model", "ryan4559/llama3-taide-lx-8b-chat-alpha1-4bit", "base_utl", "http://host.docker.internal:11434/v1", "api_key", "ollama"]

    • 請注意,原本在 Ollama 中所提示的 API 網址為http://[localhost](http://localhost):11434/v1,但由於我們是使用 Docker 的模式載入這個 LLM,在容器中無法使用 localhost 連到直接跑在機器上面的服務,因此需將 localhost 改成機器本身的 IP address,或者直接使用 Docker 提供的機器名稱 host.docker.internal,就可以連到直接跑在機器上面的服務

  • 設定完畢後,將 ollama-taide.yaml 的主檔名 (ollama-taide) 加入 run.sh 檔案中的 confs 陣列中,接著重新執行 run.sh 程式即可

  • 接著登入 Kuwa 後,在 room 裡面就可以看到多了一個 Ollama TAIDE 的模組了

方法三:使用透過 LM Studio 安裝的在地版 TAIDE

我們以 Llama3-TAIDE-LX-8B-Chat-Alpha1 這個 LLM 為例,首先在 LM Studio 下載 ZoneTwelve/Llama3-TAIDE-LX-8B-Chat-Alpha1-GGUF 完成後(LM Studio 上有許多其他載點,可自行選擇),並在 Local Server 中載入這個模型,接著我們按照下列方式加入 Kuwa:

  • 我們使用原始安裝後唯一有跑起來的 geminipro 模組做為參考範例,先產生一個接下來要使用的 lmstudio-llama3-taide-lx-8b-chat-alpha1 的設定檔

    ​​​​cp gemini.yaml lmstudio-llama3-taide-lx-8b-chat-alpha1.yaml
    
  • 接著編輯這個新的 lmstudio-llama3-taide-lx-8b-chat-alpha1.yaml 檔案,總共需要修改下列幾個地方:

    • 將第二行 gemini-executor: 改成 lmstudio-llama3-taide-lx-8b-chat-alpha1-executor:

    • 將環境變數 EXECUTOR_TYPE 從原本的 geminipro 改成 chatgpt

    • 將環境變數 EXECUTOR_ACCESS_CODE 從原本的 gemini-pro 改成 lmstudio-Llama3-TAIDE-LX-8B-Chat-Alpha1-GGUF,這邊只要是不重複使用的代號即可,建議可使用所欲使用的模型版本號碼

    • 將環境變數 EXECUTOR_NAME 從原本的 Gemini Pro 改成 LM Studio Llama3-TAIDE-LX-8B-Chat-Alpha1-GGUF,這邊所設定的代號,未來會出現在 Kuwa 的網頁介面中,因此以簡單易懂為原則

    • command 的內容加入指定的模型、API 網址、API key,變成:

      command: ["model", "ZoneTwelve/Llama3-TAIDE-LX-8B-Chat-Alpha1-GGUF", "base_url", "http://host.docker.internal:11434/v1", "api_key", "lm-studio", "system_prompt", "你是一個來自台灣的AI助理,你的名字是TAIDE,樂於以台灣人的立場幫助使用者,會用繁體中文回答問題。”]

    • 請注意,原本在 LM Studio 中所提示的 API 網址為http://[localhost](http://localhost):11434/v1,但由於我們是使用 Docker 的模式載入這個 LLM,在容器中無法使用 localhost 連到直接跑在機器上面的服務,因此需將 localhost 改成機器本身的 IP address,或者直接使用 Docker 提供的機器名稱 host.docker.internal,就可以連到直接跑在機器上面的服務。

  • 設定完畢後,將 lmstudio-llama3-taide-lx-8b-chat-alpha1.yaml 的主檔名 (lmstudio-llama3-taide-lx-8b-chat-alpha1) 加入 run.sh 檔案中的 confs 陣列中,接著重新執行 run.sh 程式即可

  • 接著登入 Kuwa 後,在 room 裡面就可以看到多了一個 LM Studio Llama3-TAIDE-LX-8B-Chat-Alpha1-GGUF 的模組了

方法四:新增地端 GGUF 格式的 TAIDE 模型

  • 前往 https://huggingface.co/taide/Llama3-TAIDE-LX-8B-Chat-Alpha1-4bit/tree/main 下載基於 Llama3 的 TAIDE 8B 4bit 版本的 GGUF 檔案,檔名為 taide-8b-a.3-q4_k_m.gguf,並將其存在 $HOME/gguf 目錄下。

  • 我們使用原始安裝後所附的 llamacpp.yaml 做為參考範例,先產生一個接下來要使用的 llamacpp-taide.yaml 設定檔

    ​​​​cp llamacpp.yaml llamacpp-taide.yaml
    
  • 接著編輯這個新的 llamacpp-gemma-7b.yaml 檔案,總共需要修改下列幾個地方:

    • 將第二行 llamacpp-executor: 改成 llamacpp-taide-executor:
    • 將環境變數 EXECUTOR_ACCESS_CODE 改成 llamacpp-taide,這邊只要是不重複使用的代號即可,建議可使用所欲使用的模型版本號碼
    • 將環境變數 EXECUTOR_NAME 改成 Llama3-TAIDE-LX-8B-Chat-Alpha1-4bit,這邊所設定的代號,未來會出現在 Kuwa 的網頁介面中,因此以簡單易懂為原則
    • command 的設定中,將原本的 /var/model/taide-4bit.gguf 改成 /var/model/taide-8b-a.3-q4_k_m.gguf
    • volumes 的設定中,將原本的 /path/to/taide/model.gguf 改成 ${HOME}/gguf/taide-8b-a.3-q4_k_m.gguf,再將/var/model/taide-4bit.gguf 改成 /var/model/taide-8b-a.3-q4_k_m.gguf
  • 設定完畢後,將 llamacpp-taide.yaml 的主檔名 (llamacpp-taide) 加入 run.sh 檔案中的 confs 陣列中,接著重新執行 run.sh 程式即可

  • 接著登入 Kuwa 後,在 room 裡面就可以看到多了一個 Llama3-TAIDE-LX-8B-Chat-Alpha1-4bit 的模組了

在 Kuwa 中針對特定內容進行問答

針對單一檔案/網頁內容進行問答 (DocQA/WebQA)

Kuwa 已內建針對單一檔案或單一網頁進行內容讀取,然後透過 LLM 針對內容進行互動問答的功能,若要開啟使用這兩個功能 (DocQA 和 WebQA),必須編輯 docker/compose/docqa_webqa.yaml 的內容,並設定其中的參數

  1. "--model":這邊可以使用原本在 run.sh 中已經放入 confs 陣列中啟動執行的其中一種語言模型,只要將該語言模型對應的 .yaml 檔案中的 EXECUTOR_ACCESS_CODE 的設定值,放入 "--model" 中即可。
  2. 請注意,docqa_webqa.yaml 中的 EXECUTOR_ACCESS_CODE 預設值為 doc-qa;web-qa,這個設定請不要修改,否則將無法正常運作 。

待完成所有設定後,接著在 docker/run.sh 中將 docqa_webqa 放入 confs 陣列中,然後執行 run.sh ,即可在 Kuwa 中執行 DocQA 和 WebQA 的功能。

針對網頁搜尋結果進行摘要 (SearchQA)

Kuwa 同時也內建了搜尋網頁並將結果透過 LLM 進行摘要的功能,若要開啟使用這個功能 (SearchQA),必須編輯 docker/compose/searchqa.yaml 的內容,設定 SearchQA 所使用的兩個重要元件:

  1. 大型語言模型:這邊可以使用原本在 run.sh 中已經放入 confs 陣列中啟動執行的其中一種語言模型,只要將該語言模型對應的 .yaml 檔案中的 EXECUTOR_ACCESS_CODE 的設定值,放入 searchqa.yaml 的 "--model" 中即可。
  2. Google Custom Search Engine:該服務可以設定的網域進行搜尋,並將結果提供給所指定的大型語言模型進行進一步處理。若要使用此服務,需首先登入該服務的網頁 (https://programmablesearchengine.google.com/) 設定一個新的 Custom Search Engine,並且得到一個 Search engine ID;接著再到 API key 的申請網頁 (https://developers.google.com/custom-search/v1/introduction) 申請專屬的 Google API Key。最後,在 searchqa.yaml 的 "--google_cse_id" 中置入 Search engine ID,並在 "--google_api_key" 中置入 Google API Key 即可。
  3. 請注意,searchqa.yaml 中的 EXECUTOR_ACCESS_CODE 預設值為 search-qa,這個設定請不要修改,否則將無法正常運作。

待完成所有設定後,接著在 docker/run.sh 中將 searchqa 放入 confs 陣列中,然後執行 run.sh ,即可在 Kuwa 中執行 SearchQA 的功能。

針對特定資料庫進行問答 (DBQA)

Kuwa 也有提供 RAG 的功能,可以針對特定的資料庫(a.k.a. 一堆檔案,目前支援 pdf, doc, docx, html 等格式)進行讀取後,轉成機器可讀的向量資料庫,接著在使用者詢問時,可以根據已轉化後的資料庫內容,尋找對應的原始文件內容,再透過大型語言模型的語言能力,完成語法正確的問題回應。為了讓 Kuwa 完成這一系列工作,需進行下列步驟:

  1. 將原始文件集轉成向量資料庫

    1. 安裝所需要的相關套件 (假設目前在 genai-os 的目錄下)

      ​​​​​​​​cd src/toolchain/
      ​​​​​​​​pip3 install -r requirements.txt
      
    2. 假設原始文件存放在 ~/example/docs/ 目錄下,產生的向量資料庫預定要存放在 ~/example/database/ 目錄下,則執行下列指令

      ​​​​​​​​python3 construct_vector_db.py ~/example/docs/ ~/example/database/
      
    3. 執行過程中,倘若出現 ModuleNotFoundError: No module named 'six.moves' 的錯誤,代表 six 這個模組的安裝可能有問題,可以先手動解除安裝後再重先安裝

      ​​​​​​​​pip3 uninstall six; pip3 install --user six  
      
  2. 使用 Kuwa 的 DBQA 功能提供問答服務

    編輯 docker/compose/dbqa.yaml 的內容,並設定其中兩個參數

    1. "--model":這邊可以使用原本在 run.sh 中已經放入 confs 陣列中啟動執行的其中一種語言模型,只要將該語言模型對應的 .yaml 檔案中的 EXECUTOR_ACCESS_CODE 的設定值,放入 "--model" 中即可。
    2. volumes 的設定中,將原本的 </path/to/vector-database> 改成 ${HOME}/example/database/
    3. 請注意,dbqa.yaml 中的 EXECUTOR_ACCESS_CODE 預設值為 dbqa,這個設定請不要修改,否則將無法正常運作

    待完成所有設定後,接著在 docker/run.sh 中將 dbqa 放入 confs 陣列中,然後執行 run.sh ,即可在 Kuwa 中執行 DBQA 的功能。

參考資料

致謝

感謝以下夥伴協助測試/驗證/修改/建議:詠翔、登傑、智漢、瑞恩