InsurenceGPT / README.md
Kappa7077's picture
Update README.md
105a34a verified
---
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](#insuregpt)
- [目錄](#目錄)
- [專案介紹](#專案介紹)
- [環境與安裝](#環境與安裝)
- [資料準備](#資料準備)
- [上傳資料到 Embedding Database](#上傳資料到-embedding-database)
- [使用方式](#使用方式)
- [使用 Streamlit 啟動應用程式](#使用-streamlit-啟動應用程式)
- [使用方式](#使用方式-1)
- [注意事項](#注意事項)
## 專案介紹
InsureGPT 結合了以下三個主要模組:
1. **資料準備**以 JSON 檔案格式整理保險相關資料,資料中包含文件 ID、詳細的 metadata(大分類、子類別、描述、適用對象、保障範圍、特色等)以及文件內容。
2. **上傳資料**使用 `create_database.py` 腳本將 JSON 資料載入 ChromaDB,並利用 FlagEmbedding 模型生成文本的向量表示,確保資料可供後續檢索使用。
3. **基於 Streamlit 的 GPT like 實作**
使用 `app.py` 搭配 Streamlit 建立一個互動式保險顧問應用。當使用者輸入問題時,系統會判斷是否需要透過 RAG 功能檢索資料庫,並整合檢索結果與使用者問題發送給 Google Gemini 模型產生回答。
## 環境與安裝
```bash
git lfs install
git clone https://huggingface.co/spaces/Kappa7077/InsurenceGPT
cd InsurenceGPT
pip install -r requirements.txt
```
## 資料準備
請先準備一份符合下列格式的 JSON 檔案,範例格式如下:
```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 的文件則進行更新,否則新增記錄
* 輸出載入或更新狀態,並顯示資料庫中總筆數
### 使用方式
在終端機中執行以下指令:
```bash
python create_database.py <json_path> <chromadb_path> <collection_name>
```
例如:
```bash
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 模型生成回答
### 使用方式
在終端機中執行以下指令啟動應用程式:
```bash
streamlit run app.py
```
啟動後,請依照網頁上的介面輸入問題,即可獲得 InsureGPT 提供的保險諮詢服務。
## 注意事項
* **API 金鑰設定** :請確認 `app.py` 中的 Google Gemini API 金鑰(`GEMINI_API_KEY`)已正確設定,否則模型可能無法正常呼叫。
* **資料更新** :如需更新保險資料,請修改 JSON 檔案後,重新執行 `create_database.py` 將最新資料上傳至 ChromaDB。
* **專案用途** :本專案僅供學術及實驗用途,實際應用前請進行充分測試與驗證,以確保資訊準確性及安全性。
```
```