從零打造屬於自己的 RAG-based LLM Line Bot 系列(一):介紹與規格

起心動念

Kaishen Tseng
Jan 7, 2024

在這個系列文章中(預計會有五篇),我會分享如何從頭開始開發一個 RAG-based 的 Line Bot,包含

  1. 介紹與規格(此篇)
  2. 系統架構與事前準備
  3. 用於 RAG 的資料準備與處理
  4. RAG-based LLM Line Bot 開發
  5. 將 Line Bot 發佈到 Heroku(完整程式碼)

目錄

起心動念

最近成為父親後,除了日常的照顧,隨著孩子的成長,我遇到了各種問題,例如腸絞痛影響餵奶、副食品準備和處理嗆到或噎到的情況,以及每個階段要注意的發展指標等。

雖然這些問題似乎在網上都可以找到答案,但也帶來了一些困擾,因為有些資訊合理但缺乏實際驗證,而某些問題沒有絕對正確的答案,只有適不適合。資訊過多也使得每次查詢都需要花時間整理。

於是我想到一個念頭:「為何不自己開發一個專精於育兒領域的聊天機器人呢?」這個機器人可以快速搜尋並整理結果,同時限制參考的資料只來自我信任的來源。

有了 ChatGPT,這個念頭變得不再那麼困難。只需準備好資料來源,使用檢索增強生成(RAG)減少模型的幻覺,再搭配 Line 介面,我有機會實現這個目標。

用一句話簡短描述目標的話,大概是

開發一個 Line Bot,根據使用者的問題,在預先選取的資訊來源下回答。

Generated by Bing Image Creator

也出於個人興趣和需求,因為這類議題的熱度實在是高到無法忽視,找到一個自己需要且有興趣的主題,更容易持續推進下去。

成果展示

因為是使用 Line Bot 作為輸入方式,所以介面和一般 Line 帳號的對話沒有什麼不同。現在,我打算透過一個實例來清楚比較直接使用 ChatGPT 和 RAG-LLM Bot 的區別。

例如以下這個問題,

Q: 嬰兒該使用螃蟹車呢?

先來看看使用 ChatGPT 的回答。

ChatGPT 3.5

ChatGPT 認為這是有爭議的題目,且提出優點和缺點。不過最後沒有並提供一個結論去建議是否該使用。

接著再來看有使用 RAG 的 LLM Bot 回覆的結果。

這份回答參考了幾位專注於嬰兒發展的醫師和專業人士在其 YouTube 頻道的影片中提供的解答。透過 Line Bot 返回的資源文件中,我發現了一部由 Sunny Huang — IBCLC 製作的影片,其中詳細討論了為何不建議使用螃蟹車的原因,並提供了相應的資料和實驗數據。由於我對這位專業人士的信任,這份回答因此更加具有說服力。再加上有來源文件的支持,這讓我對這個回答更有信心。

以下影片示範在 Line 上面互動的結果

規格文件

簡單統整這個專案的規格來幫助開發過程聚焦。(由 ChatGPT 主要產生)

概述

  1. 目的:定義並描述開發一個 Line Bot 育兒助手的需求、功能、性能和技術要求。
  2. 範圍:本文件適用於將 ChatGPT 應用於取用 Youtube 字幕,使用檢索增強生成(RAG)技術,整合 Line 作為互動介面。

功能需求

  1. 用戶介面:
    -
    提供 Line Bot 介面,以支援用戶的互動。
    - 支援文字輸入,能夠理解自然語言。
  2. 能理解用戶查詢需求:
    -
    使用 Langchain 搜尋引擎,實現資訊的快速搜尋和統整。
    - 使用 RAG 避免資訊的幻覺(Hallucination)。
  3. 資料源管理:
    - 允許管理預先選取的資訊來源,確保資訊的可靠性和準確性。

技術堆疊(Tech Stack)

  1. 整合 ChatGPT 作為語言生成模型。
  2. 使用 Langchain 實現資訊檢索。
  3. 應用 RAG 技術提高檢索結果的品質。

測試和品質保證

就先不做測試了…

小結

這是系列文章的第一篇,主要介紹了這個專案的構想過程、成果展示,以及相關的開發文件和所採用的技術。

在下一篇文章中,我們將正式深入探討開發的構想和設定,包括系統架構和事前準備(如相關服務的帳號和 Token)。請點擊這裡閱讀下一篇文章。

對這個系列感興趣的讀者們,請繼續保持關注,我們下次見!

--

--