---
title: Kuwa AI 安裝過程筆記
image: https://hackmd.io/_uploads/SJnQJCKVA.png
---
# 寫在前面
- 以下為自行安裝 Kuwa 於 MacBook Air (M2, 2023) 的隨手筆記,多數的步驟在其他平台和作業系統也可以直接使用,但不排除會有需要因應作業系統不同而修改的可能性。
- 本篇文章所使用的 Kuwa 版本為 0.3.0 (released on May 19, 2024)
- 對於本篇文章有任何建議,皆可透過 comment 的方法直接提出,歡迎大家一起共編讓這篇文章的內容可以更完整
# 安裝 & 執行 Kuwa
- Kuwa AI: https://kuwaai.org/
- 安裝方法
- 從 Source codes 開始(windows & Linux)
- https://github.com/kuwaai/genai-os?tab=readme-ov-file#installation-guide
- windows 簡易執行版
- https://github.com/kuwaai/genai-os/blob/main/windows/README.md
- Docker 版本 (建議) (Mac OS 的機器只能選這個)
- https://github.com/kuwaai/genai-os/blob/main/docker/README.md
- 使用 Docker 方式安裝
- 先下載相關程式
```bash
git clone https://github.com/kuwaai/genai-os/
cd genai-os/docker
```
- 將預設的 `.admin-password.sample`, `.db-password.sample`, `.env.sample` 三個檔案複製一份成檔名移除副檔名 `.sample` 的新檔案
```bash
cp .admin-password.sample .admin-password
cp .db-password.sample .db-password
cp .env.sample .env
```
- 依據網站說明,修改這三個檔案的內容
- `.admin-password`: 設定成未來系統管理員的密碼
- `.db-password`: 設定成未來系統資料庫的密碼
- `.env`: 環境變數設定(若只是自行測試,可先不用修改)
```bash
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 共五個應用程式的服務
```bash
./run.sh
```
- 需要等待一段時間將這幾個 containers 跑起來,之後可以在 Docker dashboard 上看到跑起來容器
![Untitled3](https://hackmd.io/_uploads/ByIZ10tEC.png)
以及跑起來的映像檔
![Untitled2](https://hackmd.io/_uploads/rJKMkCYNR.png)
- 接著打開瀏覽器,輸入 http://localhost (或剛剛設定的機器網址),就可以看到 Kuwa 已經跑起來了!
![Untitled](https://hackmd.io/_uploads/SJnQJCKVA.png)
- 若要登入 Kuwa,先點選右上角的 Sing in,接著輸入剛剛設定的管理者登入email信箱,以及系統管理員密碼,就可以成功登入,並且看到預設的 Gemini Pro 模組已經安裝好放在桌面上了
![Untitled](https://hackmd.io/_uploads/SJIbW0Y4A.png)
# 在Kuwa中新增 LLM 模型
## 新增使用 ChatGPT API 的雲端模型
- 我們使用原始安裝後唯一有跑起來的 geminipro 模組做為參考範例,先產生一個接下來要使用的 OpenAI GPT-4 的設定檔
```bash
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](http://run.sh) 檔案中的 confs 陣列中,接著重新執行 run.sh 程式即可
- 接著登入 Kuwa 後,在 room 裡面就可以看到多了一個 OpenAI gpt-4-turbo 的模組了
![Untitled](https://hackmd.io/_uploads/r1gm-0FVR.png)
- 點選這個新增模組後,我們可以請它自我介紹驗明正身 XD
![Untitled](https://hackmd.io/_uploads/ByxNbAKNA.png)
## 新增使用透過 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 的設定檔
```bash
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 的設定檔
```bash
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 設定檔
```bash
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 的設定檔
```bash
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 的設定檔
```bash
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 的設定檔
```bash
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 設定檔
```bash
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 的目錄下)
```bash
cd src/toolchain/
pip3 install -r requirements.txt
```
2. 假設原始文件存放在 ~/example/docs/ 目錄下,產生的向量資料庫預定要存放在 ~/example/database/ 目錄下,則執行下列指令
```bash
python3 construct_vector_db.py ~/example/docs/ ~/example/database/
```
3. 執行過程中,倘若出現 `ModuleNotFoundError: No module named 'six.moves'` 的錯誤,代表 six 這個模組的安裝可能有問題,可以先手動解除安裝後再重先安裝
```bash
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 的功能。
# 參考資料
- Kuwa 架設模型教學:https://github.com/kuwaai/genai-os/blob/main/src/executor/README_TW.md
- Kuwa RAG Toolchain:https://github.com/kuwaai/genai-os/blob/main/src/toolchain/README_TW.md
# 致謝
感謝以下夥伴協助測試/驗證/修改/建議:詠翔、登傑、智漢、瑞恩