adk-insurance-recommendation-agent
Health Uyari
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 7 GitHub stars
Code Gecti
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
基於 Google ADK 與 MCP Toolbox 的保險科技推薦 Agent 原型。核心 Agent 能理解保險需求、主動追問,並透過受控 SQL 工具查詢醫療、意外、家庭與收入保障產品。後端採 FastAPI 提供 SSE 串流與 WebSocket 即時互動,前端以 Next.js 呈現對話介面。知識庫結合 PostgreSQL 與 pgvector 實現 FAQ 語意搜尋與 RAG 查詢,並支援多模態 Live Agent 語音互動。安全層涵蓋 JWT 驗證、PII 脫敏與 SHA-256 雜湊鏈防篡改稽核日誌。品質保證採 ADK evalsets 評估驅動開發,部署支援 Docker Compose、Cloud Run 與 Terraform 多環境配置。
保險推薦 Agent
這是一個以 Google ADK 為核心的保險推薦 Agent 範例專案。系統整合 FastAPI、Next.js、MCP Toolbox、PostgreSQL/pgvector 與 Gemini/Vertex AI,示範如何建立具備產品查詢、FAQ 語意搜尋、會話記憶、稽核紀錄、PII 保護,以及即時語音/影像互動能力的 AI Agent。
👉 線上展示專案:https://lastingyeh.github.io/adk-insurance-recommendation-agent/
這份 README 的目標是讓使用者快速完成三件事:
- 了解這個專案解決什麼問題。
- 在本機把系統跑起來。
- 知道要深入架構、測試或部署時該看哪些文件。
核心功能
- Google ADK Agent:理解保險需求、主動追問、查詢產品並產生推薦回覆。
- MCP Toolbox:透過受控 SQL 工具查詢保險產品、推薦規則與 FAQ 知識庫。
- FastAPI 後端:提供 REST API、SSE 串流回覆與 WebSocket 即時互動。
- Next.js 前端:提供保險推薦對話介面、Live mode 與 Agent 狀態視覺化。
- PostgreSQL + pgvector:儲存產品、FAQ、Session、Audit Log 與向量資料。
- Multimodal Live Agent:支援即時語音、畫面與互動式對話。
- 安全與合規設計:包含 JWT 驗證、PII redaction、public state filtering 與 audit hash chain。
- 評估驅動開發:使用 ADK evalsets 驗證推薦品質、安全性、session-aware 行為與 Live mode。
- 雲端部署準備:提供 Docker Compose、Cloud Run 與 Terraform dev/staging/prod 部署入口。
系統架構

Frontend (Next.js)
|
| REST / SSE / WebSocket
v
FastAPI Backend
|
+-- Google ADK Runner
| |
| +-- Insurance Agent
| +-- Session tools
| +-- MCP Toolbox tools
|
+-- Session Service
+-- User Service
+-- Audit Log Service
+-- Live Agent Service
|
v
PostgreSQL / pgvector
|
+-- Insurance products
+-- Recommendation rules
+-- FAQ knowledge
+-- Session state
+-- Audit logs

技術組成
| 類別 | 技術 |
|---|---|
| Agent 框架 | Google ADK |
| LLM / 多模態模型 | Gemini / Vertex AI |
| 後端 API | FastAPI, Uvicorn |
| 前端 | Next.js 15, React 19, NextAuth.js |
| 資料庫 | PostgreSQL, pgvector |
| 工具層 | MCP Toolbox for Databases |
| 驗證 | JWT, NextAuth |
| 基礎設施 | Docker Compose, Cloud Run, Terraform |
| 測試與評估 | pytest, ADK eval, Locust |
| 套件管理 | uv, npm |
專案目錄
.
├── app/ # 後端 Agent 與 FastAPI 應用程式
│ ├── api/ # REST、SSE、WebSocket 路由與資料格式
│ ├── app_utils/ # Telemetry 與部署輔助工具
│ ├── prompts/ # Agent system prompt
│ ├── security/ # 驗證、PII 保護與 public state filtering
│ ├── services/ # Agent 執行、Live mode、Session、User 與 Audit Log 服務
│ ├── streaming/ # WebSocket upstream/downstream 處理
│ ├── tools/ # ADK session tools
│ ├── agent.py # Agent factory 與 ADK app 註冊
│ ├── config.py # 執行時設定
│ └── container.py # Dependency container
├── db/ # 資料庫 schema、seed data 與 MCP Toolbox 設定
├── deployment/ # Terraform 與部署文件
├── docs/ # 架構與功能文件
├── frontend/ # Next.js 前端應用程式
├── scripts/ # 設定、資料建立與 FAQ ingestion 腳本
├── tests/ # Unit、integration、security、API、load 與 eval 測試
├── docker-compose.yml # 本機容器編排
├── Dockerfile.backend # 後端容器映像設定
├── Dockerfile.toolbox # Toolbox 容器映像設定
├── Makefile # 主要開發指令入口
├── pyproject.toml # Python 專案設定與依賴
└── .env.example # 環境變數範本
前置需求
本機開發前請先安裝:
- Python 3.12
- uv
- Node.js 20 或更新版本
- npm
- Docker 與 Docker Compose
- Google Cloud credentials:使用 Vertex AI、embedding、雲端部署或 Toolbox 語意搜尋時需要
先建立本機環境設定檔:
cp .env.example .env
接著依照你的環境修改 .env。
快速開始
方式一:使用 Docker Compose 啟動
如果你想一次啟動資料庫、Toolbox、後端與前端,建議使用這個方式。
cp .env.example .env
make up-build
啟動後可開啟:
前端介面:http://localhost:3000
後端 API:http://localhost:8080
健康檢查:http://localhost:8080/healthz
就緒檢查:http://localhost:8080/readyz
停止服務:
make down
查看服務紀錄:
make logs
方式二:分開啟動服務
如果你正在開發後端或前端,建議用這個方式。
cp .env.example .env
make install-all
make db-up
make db-seed
make db-ingest
啟動後端:
make run-fastapi
在另一個終端機啟動前端:
make ui-install
make ui-dev
開啟:
前端介面:http://localhost:3000
後端 API:http://localhost:8080
環境變數
應用程式會從環境變數讀取執行設定。請以 .env.example 為範本。
| 變數 | 用途 |
|---|---|
GOOGLE_GENAI_USE_VERTEXAI |
設為 1 時使用 Vertex AI。 |
GOOGLE_CLOUD_PROJECT |
Google Cloud project ID。 |
GOOGLE_CLOUD_LOCATION |
Google Cloud region,例如 us-central1。 |
GOOGLE_API_KEY |
本機使用 API key 模式時的 Google GenAI API key。 |
GOOGLE_APPLICATION_CREDENTIALS |
需要 service account 時使用的憑證檔案路徑。 |
ADK_APP_NAME |
ADK application name,預設為 app。 |
DATABASE_URL |
容器或部署環境使用的主要資料庫 URL。 |
ADK_SESSION_DB_URI |
ADK Session service 使用的資料庫 URL。 |
ADK_MEMORY_MODE |
設為 in_memory 可使用非持久化 session;預設使用資料庫。 |
MODEL_NAME |
文字推薦模型,預設為 gemini-2.5-flash。 |
LIVE_MODEL_NAME |
WebSocket Live mode 使用的多模態模型。 |
TOOLBOX_SERVER_URL |
MCP Toolbox server URL。 |
JWT_SECRET |
後端 JWT signing secret;正式環境請使用高強度值。 |
NEXTAUTH_SECRET |
前端 NextAuth secret;正式環境請使用高強度值。 |
AUDIT_LOG_ENABLED |
設為 1 時啟用 audit logging。 |
AUDIT_DB_PATH |
Audit log 使用的資料庫 URL。 |
AUDIT_HASH_SALT |
Audit hash chain 與敏感資料雜湊使用的 salt。 |
PII_REDACTION_ENABLED |
設為 1 時啟用 PII redaction。 |
ENABLE_CLOUD_TRACING |
啟用後將 trace 傳送到 Google Cloud Trace。 |
ENABLE_CLOUD_LOGGING |
啟用後將 log 傳送到 Google Cloud Logging。 |
BQ_ANALYTICS_DATASET |
設定後啟用 BigQuery Agent Analytics plugin。 |
常用開發指令
大部分常見工作都可以透過 Makefile 執行。
| 指令 | 說明 |
|---|---|
make help |
顯示可用指令。 |
make install |
建立 Python 3.12 virtual environment 並安裝核心依賴。 |
make install-all |
安裝核心、dev、eval 與 GCP 依賴。 |
make sync |
同步 Python 依賴。 |
make env-check |
檢查本機工具與環境設定。 |
make db-up |
啟動本機 PostgreSQL 與 MCP Toolbox 容器。 |
make db-setup |
啟動資料庫、建立測試使用者並匯入 FAQ embeddings。 |
make run-fastapi |
在 port 8080 啟動 FastAPI 後端。 |
make ui-install |
安裝前端依賴。 |
make ui-dev |
在 port 3000 啟動 Next.js 前端。 |
make up |
啟動所有 Docker Compose 服務。 |
make up-build |
重新建置並啟動所有 Docker Compose 服務。 |
make down |
停止 Docker Compose 服務。 |
make logs |
追蹤 Docker Compose logs。 |
make clean |
清除 Python cache 與 pytest cache。 |
make clean-all |
清除產生的 cache 與本機 virtual environment。 |
API 概覽
後端提供健康檢查、驗證、Session 管理、Agent SSE 串流與 Live Agent WebSocket API。
| 方法 | 路徑 | 用途 |
|---|---|---|
GET |
/healthz |
基本健康檢查。 |
GET |
/readyz |
檢查 Session store、Toolbox 等依賴是否就緒。 |
POST |
/auth/token |
登入並取得 JWT access token。 |
POST |
/api/agent/run |
執行 Agent,並透過 SSE 回傳串流結果。 |
GET |
/apps/{app_name}/users/{user_id}/sessions |
列出使用者 sessions。 |
POST |
/apps/{app_name}/users/{user_id}/sessions |
建立或初始化 session。 |
GET |
/apps/{app_name}/users/{user_id}/sessions/{session_id} |
取得指定 session。 |
DELETE |
/apps/{app_name}/users/{user_id}/sessions/{session_id} |
刪除指定 session。 |
WS |
/api/agent/live/ws/{session_id} |
啟動多模態 Live Agent session。 |
使用者、Session 與 Agent endpoint 都需要驗證。前端會透過 /auth/token 取得 token,並在後續請求中轉送給後端。
前端
前端位於 frontend/,使用 Next.js 與 NextAuth。
常用指令:
make ui-install
make ui-dev
make ui-build
重要目錄:
frontend/app/:頁面路由與 API proxy routes。frontend/components/:主要 UI 元件,包含 user mode、workbench、waveform、state tree 與 timeline views。frontend/hooks/:audio、camera、screen capture 與 Live Agent hooks。frontend/lib/:proxy、markdown、mock data、session storage 與 auth recovery helpers。
資料庫與 MCP Toolbox
資料庫相關檔案位於 db/。
| 檔案 | 用途 |
|---|---|
db/schema.sql |
產品、推薦規則、FAQ 與向量資料的主要 schema。 |
db/audit_schema.sql |
Audit log schema。 |
db/seed.sql |
本機開發使用的 seed data。 |
db/tools.local.yaml |
本機 MCP Toolbox tool definitions。 |
db/tools.cloud.yaml |
雲端 MCP Toolbox tool definitions。 |
MCP Toolbox 提供的受控工具包含:
search_medical_productssearch_accident_productssearch_family_protection_productssearch_income_protection_productsget_product_detailget_recommendation_rulessearch_faq
匯入 FAQ embeddings:
make db-ingest
安全與合規
專案包含以下安全與合規設計:
- 使用 JWT 驗證後端 API 存取。
- 在受保護 endpoint 檢查 user/session ownership。
- 透過
app/security/pii.py進行 PII redaction。 - 使用 public state filtering,避免敏感 session data 外洩到前端。
- 透過
app/services/audit_log_service.py記錄 audit logs。 - 支援 audit hash chain,讓稽核紀錄具備防竄改檢查能力。
- 可設定 audit retention 與 hashing salt。
正式環境請務必替換本機範例 secret:
JWT_SECRET
NEXTAUTH_SECRET
AUDIT_HASH_SALT
DATABASE_URL
AUDIT_DB_PATH
不要提交 .env、service account key 或任何產生的 secret 檔案。
測試
執行完整 Python 測試:
make check
執行特定測試群組:
make test-api
make test-security
make test-audit
測試涵蓋 unit、integration、API、security、load 與 eval,主要位於 tests/。
評估
ADK evalsets 位於 tests/eval/evalsets/。
執行預設評估:
make eval
執行所有評估:
make eval-all
執行特定評估群組:
make eval-core
make eval-extended
make eval-safety
make eval-session-aware
make eval-live
評估範圍包含核心推薦、延伸情境、安全行為、session-aware memory 與 Live mode 互動。
部署
部署相關檔案位於 deployment/。
| 路徑 | 用途 |
|---|---|
deployment/docs/ |
部署、CI/CD 與環境文件。 |
deployment/terraform/bootstrap/ |
GitHub / Cloud Build 等 bootstrap resources。 |
deployment/terraform/dev/ |
Dev environment Terraform。 |
deployment/terraform/staging/ |
Staging environment Terraform。 |
deployment/terraform/prod/ |
Production environment Terraform。 |
deployment/terraform/modules/agent_infrastructure/ |
共用 infrastructure module。 |
常用部署指令:
make tf-gen-config
make tf-plan ENV_NAME=dev
make tf-apply ENV_NAME=dev
make build-push
make gcp-deploy ENV_NAME=dev
部署前,請在 .env 設定必要的 GCP 變數:
GOOGLE_CLOUD_PROJECT
GOOGLE_CLOUD_LOCATION
ARTIFACT_REPOSITORY
ENV_NAME
GITHUB_OWNER
GITHUB_REPO_NAME
常見問題
缺少 .env
從範本建立:
cp .env.example .env
後端尚未就緒
檢查:
http://localhost:8080/readyz
如果 readiness check 失敗,確認 PostgreSQL 與 MCP Toolbox 已啟動:
make db-up
make toolbox-logs
前端連不到後端
檢查以下變數:
NEXT_PUBLIC_API_URL
FASTAPI_BASE_URL
FASTAPI_BASE_URL_DOCKER
NEXTAUTH_URL
本機瀏覽器通常使用:
http://localhost:8080
登入或驗證失敗
先確認測試使用者已建立:
make db-seed
也請確認 JWT_SECRET 與 NEXTAUTH_SECRET 在後端與前端設定一致。
FAQ 語意搜尋失敗
確認 Google credentials 已設定,並且 FAQ embeddings 已匯入:
make db-ingest
Port 已被占用
預設 port 如下:
前端:3000
後端:8080
Toolbox:5001
PostgreSQL:5432
請停止占用服務,或在 .env 中調整對應 port 變數。
文件索引
- 後端架構:
docs/features/backend-agent-design.md - 前端設計:
docs/features/frontend.md - 即時串流架構:
docs/features/live-streaming-architecture.md - MCP Toolbox 與資料庫工具:
docs/features/mcp-toolboxs.md - Observability:
docs/features/obs.md - Evaluation:
docs/features/evaluation.md - Testing:
docs/features/testing.md - 部署指南:
deployment/docs/README.md - 開發與部署計畫:
deployment/docs/plan.md - CI/CD 說明:
deployment/docs/cicd.md - Workload Identity Federation 設定:
deployment/docs/wif-setup.md
貢獻方式
提交變更前,建議先執行:
make check
make test-security
make eval
程式品質檢查:
make lint
如果修改 Agent 行為,請同步新增或更新 tests/eval/evalsets/ 中的 evalset,讓推薦品質與安全行為可以被持續驗證。
授權
可自由使用、修改與散布程式碼,但若分享完整程式碼請註明出處喔 ^^。
免責聲明
本專案僅用於原型設計、AI 技術展示、學術研究與雲端系統架構示範。所有保險推薦結果、規則、商品條款與保費計算皆為虛構 or 僅供初步參考,不可直接用於真實金融或保險業務。實際投保與保險諮詢仍需以保險公司官方商品說明、要保書、健康告知書與保險公司核保結果為準。
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi