InsurenceGPT / README.md
Kappa7077's picture
Update README.md
105a34a verified

A newer version of the Streamlit SDK is available: 1.52.2

Upgrade
metadata
title: InsurenceGPT
emoji: 👀
colorFrom: green
colorTo: indigo
sdk: streamlit
sdk_version: 1.42.0
app_file: app.py
pinned: false

Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference

InsureGPT

InsureGPT 是一個基於 Retrieval Augmented Generation (RAG) 機制的免費專案,旨在提供保險專業諮詢服務。透過整合保險資料庫與 Google Gemini 生成模型,使用者可以藉由互動問答獲得專業的保險建議與方案推薦。此專案亦可透過修改資料庫內容及主程式碼中的背景設定,應用於其他領域。

目錄

專案介紹

InsureGPT 結合了以下三個主要模組:

  1. 資料準備以 JSON 檔案格式整理保險相關資料,資料中包含文件 ID、詳細的 metadata(大分類、子類別、描述、適用對象、保障範圍、特色等)以及文件內容。
  2. 上傳資料使用 create_database.py 腳本將 JSON 資料載入 ChromaDB,並利用 FlagEmbedding 模型生成文本的向量表示,確保資料可供後續檢索使用。
  3. 基於 Streamlit 的 GPT like 實作 使用 app.py 搭配 Streamlit 建立一個互動式保險顧問應用。當使用者輸入問題時,系統會判斷是否需要透過 RAG 功能檢索資料庫,並整合檢索結果與使用者問題發送給 Google Gemini 模型產生回答。

環境與安裝

git lfs install
git clone https://huggingface.co/spaces/Kappa7077/InsurenceGPT 
cd InsurenceGPT
pip install -r requirements.txt

資料準備

請先準備一份符合下列格式的 JSON 檔案,範例格式如下:

[
  {
    "id": "doc_001",
    "metadata": {
      "大分類": "保險基本資訊",
      "子類別": "第三責任險(含體傷、財損)",
      "描述": "當騎車導致第三人(非自己)受傷、身故或財損時,提供賠償保障。",
      "適用對象": "對方駕駛,對方乘客,對方車輛",
      "保障範圍_體傷": "賠償第三人因事故造成的醫療費用、後續治療或死亡補償。",
      "保障範圍_財損": "補償因事故導致的財物損失,例如對方車輛或財產毀損。",
      "特色": "可涵蓋第三人的醫療與財務損失,推薦外送員與高頻騎士加保。"
    },
    "text": "{\n  \"類別\": \"第三責任險(含體傷、財損)\",\n  \"描述\": \"當騎車導致第三人(非自己)受傷、身故或財損時,提供賠償保障。\",\n  \"適用對象\": [\n    \"對方駕駛\",\n    \"對方乘客\",\n    \"對方車輛\"\n  ],\n  \"保障範圍\": {\n    \"體傷\": \"賠償第三人因事故造成的醫療費用、後續治療或死亡補償。\",\n    \"財損\": \"補償因事故導致的財物損失,例如對方車輛或財產毀損。\"\n  },\n  \"特色\": \"可涵蓋第三人的醫療與財務損失,推薦外送員與高頻騎士加保。\"\n}"
  },
  {
    "id": "doc_002",
    "metadata": {
      "大分類": "保險基本資訊",
      "子類別": "強制險",
      "描述": "政府規定必須投保的基本保險,保障機車事故造成的駕駛人以外的受害者(行人、乘客、對方車輛駕駛)。",
      "適用對象": "對方駕駛,對方乘客,我方乘客",
      "保障範圍_體傷": "保障受害人(非駕駛)因事故造成的醫療與身故補償。",
      "保障範圍_身故": "受害人死亡時提供家屬撫恤金。",
      "特色": "法規強制要求,所有機車皆須投保,為最基本的保障方案。"
    },
    "text": "{\n  \"類別\": \"強制險\",\n  \"描述\": \"政府規定必須投保的基本保險,保障機車事故造成的駕駛人以外的受害者(行人、乘客、對方車輛駕駛)。\",\n  \"適用對象\": [\n    \"對方駕駛\",\n    \"對方乘客\",\n    \"我方乘客\"\n  ],\n  \"保障範圍\": {\n    \"體傷\": \"保障受害人(非駕駛)因事故造成的醫療與身故補償。\",\n    \"身故\": \"受害人死亡時提供家屬撫恤金。\"\n  },\n  \"特色\": \"法規強制要求,所有機車皆須投保,為最基本的保障方案。\"\n}"
  }
]

請依照實際需求更新文件內容與結構。

上傳資料到 Embedding Database

使用 create_database.py 腳本將 JSON 資料載入至 ChromaDB,主要流程包括:

  • 讀取 JSON 檔案中的保險資料
  • 利用 FlagEmbedding 模型產生每筆資料的嵌入向量
  • 若資料庫中已存在相同 ID 的文件則進行更新,否則新增記錄
  • 輸出載入或更新狀態,並顯示資料庫中總筆數

使用方式

在終端機中執行以下指令:

python create_database.py <json_path> <chromadb_path> <collection_name>

例如:

python create_database.py data.json ./chroma_db insurance_database

其中:

  • <json_path> 為 JSON 資料檔案路徑
  • <chromadb_path> 為向量資料庫的儲存路徑
  • <collection_name> 為資料庫中集合的名稱

使用 Streamlit 啟動應用程式

app.py 為基於 Streamlit 的互動式應用程式,主要功能包括:

  • 提供使用者輸入保險相關問題的介面
  • 根據使用者問題判斷是否需要進行資料庫檢索(RAG 功能)
  • 使用 FlagEmbedding 模型產生使用者輸入的嵌入向量
  • 從 ChromaDB 中查詢並檢索相關保險文件
  • 整合檢索到的內容與問題,並發送給 Google Gemini 模型生成回答

使用方式

在終端機中執行以下指令啟動應用程式:

streamlit run app.py

啟動後,請依照網頁上的介面輸入問題,即可獲得 InsureGPT 提供的保險諮詢服務。

注意事項

  • API 金鑰設定 :請確認 app.py 中的 Google Gemini API 金鑰(GEMINI_API_KEY)已正確設定,否則模型可能無法正常呼叫。
  • 資料更新 :如需更新保險資料,請修改 JSON 檔案後,重新執行 create_database.py 將最新資料上傳至 ChromaDB。
  • 專案用途 :本專案僅供學術及實驗用途,實際應用前請進行充分測試與驗證,以確保資訊準確性及安全性。