Skip to content

TigerAI-Taiwan/AI_Coding_BiddingSystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 

Repository files navigation

標案通 BidGo

吃「政府電子採購網」公開資料的政府標案 + 補助 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、加入追蹤。

🤖 AI 適合度分析

點單一標案 → 以標案原文 + 公司檔案產生結構化分析:

  1. 採購基本資訊(機關、預算、截止、決標方式)
  2. 投標重點 / 資格門檻(廠商資格、實績、押標金、保證金)
  3. 需準備文件 checklist
  4. 風險 / 注意事項
  5. 一句話建議(適合 / 條件不足 / 不建議)

防幻覺:每個門檻 / 風險須附原文依據片段;查不到的欄位回「未載明」,不得編造。

📊 決標行情

  • 輸入:關鍵字 + 年度。
  • 列表:決標公告、機關、標案名稱、決標日、決標金額。
  • 行情指標:預算金額、底價(部分案件未公開,需標示並排除統計)、決標金額、決標比(決標÷底價)、平均折讓率((底價−決標)÷底價)、節省金額(底價缺時用 預算−決標)。
  • 圖:決標金額分佈、折讓率分佈。

🏆 找補助

  • 公司檔案:自由描述(成立年數、資本額、員工數、產業…)+ 結構化欄位,可存多份。
  • 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 一鍵起整套

資料模型(PostgreSQL,獨立 schema)

用途
tenders 招標公告(含中文全文索引)
awards 決標公告(底價 / 得標價 / 得標廠商)
vendors 廠商(統編 + 統計快取)
award_bidders 投標 / 得標明細(廠商分析用)
agencies 機關(機關生態分析,名稱正規化 + 統計快取)
subsidies 補助資料庫(資格結構化 + 原文)
companies 使用者公司檔案
subsidy_matches AI 補助配對快取
tender_analysis AI 標案適合度快取
tracking 我的追蹤
ingest_log ETL 稽核

AI 設計

統一 AI 介面(單一 AIClient)

後端只認一個介面:POST {AI_ENDPOINT}/v1/chat/completions(OpenAI 相容)。雲端 / 地端差異全收斂到兩個設定,業務碼不感知背後模型:

設定 雲端模式(預設) 地端 / 隱私模式
AI_ENDPOINT OpenAI 相容端點(本機,如 Ollama / LiteLLM) 地端 LLM 端點
AI_MODEL 雲端模型(初篩 / 複評可分級) 地端模型
資料離開本機 僅公開標案原文 完全不離開

換引擎只改設定,不改程式。模型分級(初篩用輕量、複評/適合度用高階)也只是傳不同 AI_MODEL

補助配對(兩段式,控成本)

  1. 規則預篩(0 成本):用資本額 / 員工數 / 成立年限 / 產業 / 地區把 160+ 筆砍成需 AI 判讀的少數;明顯不符直接標記。
  2. AI 批次判讀:剩餘逐條 → 輕量模型結構化輸出 {verdict, score, reason};「可能符合」再用高階模型複評排序。
  3. 快取: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            設定範本

啟動(Docker Compose)

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

Roadmap

階段 目標
P0 地基 Compose + DB schema + 招標擷取 PoC
P1 找標案 + 我的追蹤
P2 決標行情 + 分析(廠商 + 機關生態)
P3 找補助(補助 DB + 規則預篩 + AI 配對)
P4 AI 標案適合度
P5 本地 LLM、提醒、一鍵安裝包

合規

本系統僅擷取政府公開資料,限速、標註來源、本機快取。所有判定結果以官方公告為準;補助資格隨政策變動,請以主管機關最新公告為依據。


License

待定(規劃中)。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors