教學 04:建立 RAG Workflow¶
前面的教學都是用 Agent 來實現知識庫問答——Agent 自行決定何時查詢工具。本教學換個角度,改用工作流程以固定的步驟達成類似目標,並在最後比較兩種做法的取捨。
本教學分兩個階段建立問答工作流程。第一階段建立基本工作流程,由 LLM 直接根據訓練知識回答問題;第二階段加入檢索器任務,讓 LLM 根據知識庫中的文件來回答,提高回答的準確性。
事前準備
開始本教學前,請先完成前置準備:建立知識庫。您需要在該教學中建立的 labor_qa 知識庫與 default-embedding-retriever。
您將建立的內容¶
flowchart LR
Start([Start]) --> RetrieverAction[RetrieverAction<br/>Retriever]
RetrieverAction --> LLMAction[LLMAction<br/>LLM]
LLMAction --> End([End]) 第一部分:建立基礎問答 Workflow¶
在這個部分,您將建立一個最簡單的工作流程:輸入問題,由 LLM 直接回答。這是加入檢索功能前的基礎版本。
步驟 1:建立空白 Workflow¶
- 從側邊欄進入「工作流程」。
- 點擊「+」按鈕,選擇「從空白開始」。
- 填寫表單:
- 工作流程名稱:輸入名稱(例如
tutorial_labor_qa_workflow) - 附註:選填
- 工作流程名稱:輸入名稱(例如
- 點擊「儲存」按鈕。

步驟 2:新增問題輸入欄位¶
- 點擊畫布上的「開始」節點,開啟設定面板。
- 在「輸入結構」區塊,點擊「+」開啟新增屬性對話框。
- 填寫對話框:
- 類型:
字串 - 名稱:
question - 必填:開啟
- 類型:
- 點擊「儲存」按鈕。

步驟 3:開啟 LLMAction 訊息設定¶
畫布上預設包含一個「LLMAction」節點。您需要設定它的提示詞,讓它接收使用者的問題。
- 點擊「LLMAction」節點,開啟設定面板。
- 在「對話」區塊,點擊「使用者」列的編輯()圖示。
- 在「編輯對話」對話框中,點擊「default-prompt」列的編輯()圖示。

步驟 4:設定提示詞樣板¶
在「編輯內容」對話框中:
- 將「提示詞來源」設定為
自訂提示詞樣板。 - 在「樣板」欄位輸入:
{{ question }} - 在「樣板變數」中,確認
question.$對應到$.question。 - 點擊「儲存」按鈕關閉各對話框。

樣板變數的運作方式
樣板中的 {{ question }} 是一個佔位符。「樣板變數」表格告訴系統要代入什麼值: question.$ 對應 $.question,也就是使用者執行工作流程時輸入的 question 欄位。替換後的內容才會傳送給 LLM。
步驟 5:儲存並執行 Workflow¶
- 點擊右上角的「動作」下拉選單。
- 選擇「更新」以儲存工作流程。
- 選擇「執行應用程式」開啟執行頁面。

步驟 6:輸入問題測試¶
-
在執行頁面的「Question」欄位輸入測試問題,可直接複製以下範例問題:
醫院跟小志說醫師不適用勞基法,所以工作時間跟報酬可以自由約定這樣的嗎? -
點擊「開始」按鈕。

步驟 7:查看 LLM 回答¶
工作流程執行完成後,輸出區域會在「LLMAction Result → Message」下顯示 LLM 的回答。

這個回答完全來自 LLM 的訓練知識。若問題需要依據特定文件或企業內部資料才能正確回答,LLM 可能給出不完整甚至錯誤的答案。第二部分將透過加入檢索功能來解決這個問題。
第二部分:加入檢索(RAG)¶
您將在「開始」與「LLMAction」節點之間插入 RetrieverAction 節點。它會從知識庫中取得相關文件,並將這些文件作為參考資料傳給 LLM。
步驟 1:新增 RetrieverAction¶
- 回到工作流程編輯頁面。
- 在左側的「新增狀態」面板中,展開「檢索與排序」。
- 將「檢索器」拖曳至畫布上,放置在「開始」與「LLMAction」節點之間。畫布應顯示:開始 → RetrieverAction → LLMAction。

步驟 2:設定 RetrieverAction¶
- 點擊「RetrieverAction」節點開啟設定面板。
- 填寫設定:
- 檢索器:
default-embedding-retriever - 知識庫:
labor_qa - 查詢來源:
自訂查詢樣板 - 樣板:
{{ question_for_retriever }} - 樣板變數:
question_for_retriever.$→$.question
- 檢索器:

檢索器與知識庫必須一致
這裡選擇的檢索器(default-embedding-retriever)與知識庫(labor_qa),必須與前置教學中建立載入器時指定的組合相同。若不一致,檢索將會失敗。
步驟 3:測試 RetrieverAction¶
在完成完整的 RAG 串接前,先確認 RetrieverAction 可以正確連線到知識庫。
- 點擊「RetrieverAction」面板標題列的「測試任務」 按鈕。
-
在「測試輸入」中輸入問題(可直接複製下方範例),點擊「開始」按鈕。
醫院跟小志說醫師不適用勞基法,所以工作時間跟報酬可以自由約定這樣的嗎? -
執行完成後,確認「狀態」顯示「成功」,且「Docs」區塊包含非空結果。

「Docs」有結果代表工作流程已正確連接到知識庫。
步驟 4:了解資料流¶
畫布上現在有兩個任務,具備建立 RAG 所需的全部元件。

點擊「RetrieverAction」節點,切換到「輸入與輸出」頁籤,可以看到檢索器將結果存放在 $.RetrieverActionResult,檢索出的文件位於 $.RetrieverActionResult.docs。
後續任務可以引用這些變數:
| 變數 | 內容 |
|---|---|
$.question | 使用者輸入的原始問題 |
$.RetrieverActionResult.docs | 從知識庫檢索到的文件 |

步驟 5:將檢索結果傳入 LLM¶
- 點擊「LLMAction」節點開啟設定面板。
- 在「對話」中,點擊「使用者」列的編輯()圖示,再開啟「default-prompt」。
- 在「樣板變數」中,點擊「+」新增一個變數:
- 名稱:
reference.$ - 值:
$.RetrieverActionResult.docs
- 名稱:
- 點擊「儲存」按鈕。

步驟 6:更新提示詞樣板¶
在「樣板」欄位改寫對 LLM 的指示,加入 {{ reference }}(檢索到的文件)與 {{ question_for_llm }}(使用者的問題),並要求 LLM 根據參考資料來回答。可直接複製以下樣板貼上:
你是一名為市政府勞工服務的窗口人員,負責回答民眾的問題。
你做出的回答,必須完全基於參考資料。
如果參考資料不足以回答該問題,請回答「資料不足,無法回答。」
問題:{{ question_for_llm }}
參考資料:{{ reference }}
點擊「儲存」按鈕關閉對話框。

步驟 7:儲存並執行 RAG Workflow¶
- 點擊「動作」→「更新」儲存。
- 點擊「動作」→「執行應用程式」。
-
輸入問題(可直接複製下方範例),點擊「開始」按鈕。
醫院跟小志說醫師不適用勞基法,所以工作時間跟報酬可以自由約定這樣的嗎? -
輸出區域會顯示兩個部分:
- RetrieverAction Result — 從知識庫檢索到的文件
- LLMAction Result — LLM 根據參考文件所做出的回答

現在的回答直接來自您的索引文件,而非 LLM 的一般訓練知識。
總結¶
| 階段 | 工作流程 | 回答來源 |
|---|---|---|
| 第一部分 | Start → LLMAction | LLM 訓練知識 |
| 第二部分 | Start → RetrieverAction → LLMAction | 知識庫文件 |
RAG Workflow 與 QA Agent 的差異¶
同樣是知識庫問答,這個工作流程與教學 01 的 QA Agent 在運作方式上有明顯不同:
| RAG Workflow(本教學) | QA Agent(教學 01) | |
|---|---|---|
| 執行模式 | 固定圖:開始 → 檢索器 → LLM → 結束 | 循環:Agent 自行決定何時呼叫工具 |
| 對話方式 | 單輪(一次輸入,一次輸出) | 多輪(保留完整對話記錄) |
| 工具使用 | 檢索器固定執行 | Agent 自行決定是否及何時檢索 |
| 適合情境 | 可預期、可重複的固定流程 | 開放式問答與追問對話 |
帶著走:學會這個之後可以做什麼
工作流程適合每一步都要可預期、可重複的場景——例如批次處理、固定格式的報告生成、需要稽核每個步驟的流程。當你需要的是「每次都走相同步驟、輸出穩定一致」時,選工作流程;當你需要的是「能靈活追問、自行判斷的對話」時,選 Agent。掌握這個取捨,就能依情境為每個任務挑選正確的工具。
下一步¶
恭喜,你已完成整個 Workshop 系列!你現在具備從知識庫、Agent、MCP 工具到工作流程的完整實作經驗。
- 回顧 Workshop 概覽
- 參考最佳實踐,把這些做法應用到你自己的情境