吃「政府電子採購網」公開資料的政府標案 + 補助 AI 工具。 找標案、追蹤、決標行情、對手分析、機關生態、找補助 —— 一站搞定。 應用與資料全在本機;AI 推論可選雲端或地端(完全離線),見〔運作模式〕。
🙏 致敬原作者 邱建勳 本專案的產品概念與功能設計,致敬「領標雷達 BiddingRadar」原作者 邱建勳。 感謝其以電子採購網公開資料打造標案/補助情報工具的構想,本專案受其啟發而重新實作。
一套本機部署的 SPA(單頁應用),把政府公開的招標 / 決標資料 + 各部會補助資料,變成可搜尋、可追蹤、可被 AI 分析的情報系統。五個分頁 + 一個追蹤清單:
| 分頁 | 功能 |
|---|---|
| 🔍 找標案 | 關鍵字 + 篩選搜標案,卡片列出預算 / 截止 / 機關 / 地點 / 官方連結,可 AI 初篩、匯出 CSV |
| 🤖 AI 適合度 | 點一案 → AI 分析:採購資訊、投標門檻、需備文件、風險、checklist |
| 📊 決標行情 | 關鍵字 + 年度查決標,看底價 / 決標金額 / 決標比 / 折讓率 |
| 🏆 找補助 | 丟一段公司描述 → AI 逐條比對 160+ 補助 → 符合 / 可能符合 / 不符合 + 理由 |
| 📈 分析 | 雙模式:廠商分析(參與案件/得標金額/競爭強度/對手得標率)+ 機關生態分析(這個機關都被誰得標、得標集中度) |
| ⭐ 我的追蹤 | 標案 / 補助 / 廠商 / 機關 watchlist + 到期提醒 |
設計原則:資料全來自政府公開來源、限速擷取、本機快取;AI 可選雲端或地端模型,隱私訴求靠地端模式滿足。
應用程式、資料庫、所有擷取資料永遠存在本機。會不會有資料離開本機,只取決於「AI 推論」走哪:
| 模式 | AI 推論在哪 | 資料是否離開本機 |
|---|---|---|
| 雲端模式(預設) | 雲端 LLM(經本機 OpenAI 相容端點) | 僅公開標案原文;公司檔案預設不送 |
| 地端 / 隱私模式 | 本機 LLM | 完全不離開 |
| 純離線模式 | 不跑 AI,只搜尋 / 聚合 | 完全不離開 |
「跑在本機」指應用與資料;唯一彈性是 AI 推論。要 100% 不出機房 → 切地端或純離線。
- 輸入:關鍵字、招標方式、採購金額級距(50 萬以下 / 50–100 / 100–500 / 500–1000 / 1000 萬以上)、排序、地區。
- 結果卡片:標籤、機關、案號、標案名稱、預算、剩餘天數、截止日、地點、官方連結。
- 動作:AI 初步篩選、匯出 CSV、加入追蹤。
點單一標案 → 以標案原文 + 公司檔案產生結構化分析:
- 採購基本資訊(機關、預算、截止、決標方式)
- 投標重點 / 資格門檻(廠商資格、實績、押標金、保證金)
- 需準備文件 checklist
- 風險 / 注意事項
- 一句話建議(適合 / 條件不足 / 不建議)
防幻覺:每個門檻 / 風險須附原文依據片段;查不到的欄位回「未載明」,不得編造。
- 輸入:關鍵字 + 年度。
- 列表:決標公告、機關、標案名稱、決標日、決標金額。
- 行情指標:預算金額、底價(部分案件未公開,需標示並排除統計)、決標金額、決標比(決標÷底價)、平均折讓率((底價−決標)÷底價)、節省金額(底價缺時用 預算−決標)。
- 圖:決標金額分佈、折讓率分佈。
- 公司檔案:自由描述(成立年數、資本額、員工數、產業…)+ 結構化欄位,可存多份。
- AI 配對:對 160+ 補助逐條比對 → 符合 / 可能符合 / 不符合 + 每條理由。
- 建議申請卡片:補助名稱、適用企業、判定理由、主管機關、官方連結。
廠商分析:輸入廠商名稱 → 鎖定統編 → 參與案件數、得標金額總計、競爭強度光譜(得標次數分佈)、得標金額分佈、競標對手表(投標 / 得標 / 得標率 / 金額)。
機關生態分析:輸入機關名稱 → 「這個機關的標案都被誰得標?」→ 參與廠商數、發案件數、得標金額總計、得標集中度(Top 廠商佔比 / CR5 / HHI)、常往來廠商表、採購類別與年度趨勢。用於投標前判斷該機關的盤是否固定、新進者有無空間。
追蹤標案 / 補助 / 廠商;備註、狀態、到期提醒(剩 N 天),排程每日掃描。
┌──────────────────────────────────────────────┐
│ 瀏覽器 React SPA (5 分頁 + 追蹤) │
└──────────────▲───────────────────────────────┘
│ HTTPS / REST
┌──────────────┴───────────────────────────────┐
│ nginx (靜態前端 + 反向代理 /api → backend) │
└──────────────▲───────────────────────────────┘
│
┌──────────────┴───────────────────────────────┐
│ FastAPI backend (Python 3.12) │
│ ├ api/ 搜尋、分析、配對、追蹤路由 │
│ ├ ingest/ 招標/決標客戶端 + 補助維護 │
│ ├ analytics/ 決標行情 / 廠商 / 機關生態聚合 │
│ └ ai/ 可插拔 AI 引擎 + 快取 │
└──────┬─────────────────────────┬──────────────┘
│ │
┌──────▼────────┐ ┌─────────▼──────────┐
│ PostgreSQL │ │ n8n (排程 / ETL) │
│ pg_bigm 中文FTS│◄─同步─│ 每日招標/決標、月補助│
└───────────────┘ │ + 追蹤到期提醒 │
▲ └────────────────────┘
┌──────┴────────┐
│ 可選 本地 LLM │ 離線 / 隱私模式
└───────────────┘
| 層 | 選型 | 說明 |
|---|---|---|
| 前端 | React + Vite + TypeScript + Tailwind | build 後純靜態給 nginx |
| 反代 / 靜態 | nginx | 前端 + /api 同源,免 CORS |
| 後端 | FastAPI + uvicorn + SQLAlchemy + Pydantic | 爬蟲 + AI 編排 + 型別輸出一條龍 |
| 資料庫 | PostgreSQL + pg_bigm(中文檢索) | 可複用既有 PG,只開獨立 schema |
| 排程 / ETL | n8n | 視覺化、可被非工程師維護 |
| AI | 單一 OpenAI 相容介面;AI_ENDPOINT + AI_MODEL 決定走雲端或地端 |
後端只有一個 AIClient,不感知背後模型;換引擎只改設定 |
| 容器 | Docker Compose | 一鍵起整套 |
| 表 | 用途 |
|---|---|
tenders |
招標公告(含中文全文索引) |
awards |
決標公告(底價 / 得標價 / 得標廠商) |
vendors |
廠商(統編 + 統計快取) |
award_bidders |
投標 / 得標明細(廠商分析用) |
agencies |
機關(機關生態分析,名稱正規化 + 統計快取) |
subsidies |
補助資料庫(資格結構化 + 原文) |
companies |
使用者公司檔案 |
subsidy_matches |
AI 補助配對快取 |
tender_analysis |
AI 標案適合度快取 |
tracking |
我的追蹤 |
ingest_log |
ETL 稽核 |
後端只認一個介面:POST {AI_ENDPOINT}/v1/chat/completions(OpenAI 相容)。雲端 / 地端差異全收斂到兩個設定,業務碼不感知背後模型:
| 設定 | 雲端模式(預設) | 地端 / 隱私模式 |
|---|---|---|
AI_ENDPOINT |
OpenAI 相容端點(本機,如 Ollama / LiteLLM) | 地端 LLM 端點 |
AI_MODEL |
雲端模型(初篩 / 複評可分級) | 地端模型 |
| 資料離開本機 | 僅公開標案原文 | 完全不離開 |
換引擎只改設定,不改程式。模型分級(初篩用輕量、複評/適合度用高階)也只是傳不同 AI_MODEL。
- 規則預篩(0 成本):用資本額 / 員工數 / 成立年限 / 產業 / 地區把 160+ 筆砍成需 AI 判讀的少數;明顯不符直接標記。
- AI 批次判讀:剩餘逐條 → 輕量模型結構化輸出
{verdict, score, reason};「可能符合」再用高階模型複評排序。 - 快取:key = 公司檔案雜湊 × 補助版本;檔案沒改不重打。
標案原文 + 公司檔案 → 高階模型 tool-use 回固定 schema;要求附原文依據、防幻覺;快取 key = 標案 × 公司檔案雜湊。
| 來源 | 頻率 | 備註 |
|---|---|---|
| 招標公告 | 每日 + 關鍵字即時查(快取) | 尊重 robots、限速、夜間批次 |
| 決標公告 | 每日 | 供決標行情 + 廠商分析 |
| 補助資料 | 每月 + 人工校正 | 資格條件存結構化 + 原文 |
全為政府公開資料,標註來源、限速擷取、本機快取。
backend/ FastAPI
app/
main.py 入口 + /api/health + ingest 觸發
config.py db.py 設定 / DB(search_path=bidding)
models.py schema.sql ORM + DDL(冪等建表)
ai/client.py 統一 AIClient(OpenAI 相容)
ingest/pcc.py PCC(g0v)招標/決標擷取
ingest/subsidies_seed.json + load_subsidies.py
analytics/ market(決標行情) / vendor(廠商) / agency(機關生態)
services/ suitability(標案AI) / subsidy_match(規則+AI)
api/ tenders / analysis / subsidies / tracking
frontend/ Vite + React,5 分頁 + nginx
docker-compose.yml backend + frontend + worker(n8n)
.env.example 設定範本
cp .env.example .env # 填 DB 連線(預設複用既有 PG)、AI_ENDPOINT/AI_TOKEN
docker compose up -d --build
# 前端 http://localhost:8080 後端 http://localhost:8000/docs n8n http://localhost:5678首次載入資料(擷取為政府公開資料、限速):
# 載入補助樣本
curl -X POST http://localhost:8000/api/ingest/subsidies
# 擷取某關鍵字的招標/決標(供找標案、決標行情、分析)
curl -X POST "http://localhost:8000/api/ingest/tenders?q=冷氣&pages=2"# 後端
cd backend && pip install -r requirements.txt
uvicorn app.main:app --reload
# 前端
cd frontend && npm install && npm run dev # 已把 /api 代理到 :8000| 階段 | 目標 |
|---|---|
| P0 地基 | Compose + DB schema + 招標擷取 PoC |
| P1 | 找標案 + 我的追蹤 |
| P2 | 決標行情 + 分析(廠商 + 機關生態) |
| P3 | 找補助(補助 DB + 規則預篩 + AI 配對) |
| P4 | AI 標案適合度 |
| P5 | 本地 LLM、提醒、一鍵安裝包 |
本系統僅擷取政府公開資料,限速、標註來源、本機快取。所有判定結果以官方公告為準;補助資格隨政策變動,請以主管機關最新公告為依據。
待定(規劃中)。