--- tags: tokenhunt --- # TokenHunt: 你多餘的 token 可能是某個專案的解方 > 把你多餘的 AI Token,貢獻給需要的公民科技專案。 --- ### 想要貢獻專案? - 歡迎在共筆上加入討論,或者是到 g0v slack 上私訊 peter @g0v slack - Github: https://github.com/Jia-wei-cui/TokenHunt/tree/main ## 目錄 1. [專案背景與動機](#一專案背景與動機) 2. [核心概念](#二核心概念) 3. [使用者旅程](#三使用者旅程) 4. [功能規劃](#四功能規劃) 5. [資料結構](#五資料結構) 6. [技術架構](#六技術架構) 7. [部署方式](#七部署方式) 8. [API 設計](#八api-設計) 9. [未來擴充方向](#九未來擴充方向) 10. [授權](#十授權) --- ## 一、專案背景與動機 g0v 社群長期以來累積了大量有意義的公民科技專案,然而許多坑主在推進專案時,會遇到需要 AI 協助處理的任務——例如逐字稿整理、公文解析、資料清理、多語翻譯等,卻因為缺乏足夠的 AI API token 額度而卡關。 另一方面,社群中有不少人持有各種 AI 服務的訂閱方案(Claude Pro、ChatGPT Plus、Gemini Advanced 等),每個月都有用不完的 token 額度閒置。 **TokenHunt 想做的事很簡單:讓這兩群人找到彼此。** 這是一個「AI Token 版的賞金獵人平台」,以開源精神運作,不收取任何費用,純粹作為社群資源的媒合橋樑。 --- ## 二、核心概念 ### 角色定義 | 角色 | 說明 | |------|------| | **坑主(Project Owner)** | g0v 專案維護者,有 AI 協助需求,將任務整理成 Issue 登記於平台 | | **Token 獵人(Hunter)** | 有多餘 token 的社群成員,自願接球解決 Issue | | **幫忙看一下(Reviewer)**| 協助審核成果品質的第三方,可為人工審核或用token 請 AI 幫忙 |(未來下一步新增) ### 運作精神 - **純自願** — 沒有金錢交易,獵人用自己的 token 貢獻 - **透明公開** — 使用的 prompt、token 用量、產出內容均公開,供社群學習 - **低門檻** — 用 GitHub 帳號登入即可參與,不需要另外申請帳號 - **開源** — 平台本身以 CC-BY 4.0 授權釋出,歡迎 fork 與改作 --- ## 三、使用者旅程 ### 坑主流程 ``` 1. 用 GitHub 登入 2. 登記專案(填入專案名稱、連結) 3. 建立 Issue └─ 填寫:問題描述、背景說明、期望產出格式 └─ 標注:建議 AI 工具、難度、token 估計量 4. 等待獵人接球 5. 收到成果後進行驗收 6. 驗收通過 → Issue 關閉 ``` ### 獵人流程 ``` 1. 用 GitHub 登入 2. 瀏覽 Issue Board(可依工具、難度、狀態篩選) 3. 找到適合自己的 Issue → 點擊「接球」 4. 系統鎖定 Issue(7 天時限),其他人暫時無法認領 5. 用自己的 AI token 處理任務 6. 提交成果 └─ 上傳產出內容 └─ 公開使用的 Prompt(供社群學習) └─ 回報實際使用 token 量 7. 坑主驗收通過 → 獲得聲譽點數 ``` --- ## 四、功能規劃 ### MVP(第一階段) - **Issue Board** — 列表展示,支援多維篩選與關鍵字搜尋 - **Issue 詳情頁** — 問題描述、背景、期望產出、認領與提交操作 - **Issue 建立表單** — 坑主登記新任務 - **GitHub OAuth 登入** — 統一身份驗證,無需另行註冊 - **認領機制** — 一次只能一人認領,7 天完成時限,避免多人重工 - **成果提交** — 含產出內容、Prompt 記錄、token 用量 - **坑主驗收** — 通過或退回修改 - **聲譽系統(後端預留)** — 資料庫記錄但前端暫不顯示 ### Issue 狀態流程 ``` open(開放) └─→ claimed(認領中) ← 獵人點擊接球 └─→ review(審核中) ← 獵人提交成果 ├─→ done(已完成) ← 坑主驗收通過 └─→ claimed(退回) ← 坑主要求修改 ``` ### 第二階段(預留結構) - **Reviewer 機制** — 人工或 AI 做第一層審核,減輕坑主負擔 - **積分與補償機制** — 獵人累積積分可兌換社群資源(API 贊助、活動票等) - **Token 贊助池** — 企業或個人贊助 token,由平台統一分配 - **g0v Slack 通知** — 新 Issue 自動推送到 `#general` 頻道 - **與 GitHub Issues 整合** — Issue 可連結到實際 PR 或 HackMD 文件 --- ## 五、資料結構 ### Users(使用者) | 欄位 | 類型 | 說明 | |------|------|------| | `id` | INTEGER | 主鍵 | | `github_id` | INTEGER | GitHub 帳號 ID | | `username` | TEXT | GitHub 用戶名 | | `avatar_url` | TEXT | 頭像 URL | | `reputation` | INTEGER | 聲譽點數(預留) | | `points` | INTEGER | 積分(預留,供未來補償機制) | | `created_at` | TEXT | 建立時間 | ### Projects(專案) | 欄位 | 類型 | 說明 | |------|------|------| | `id` | INTEGER | 主鍵 | | `name` | TEXT | 專案名稱 | | `slug` | TEXT | 唯一識別碼(如 `budget.g0v.tw`) | | `description` | TEXT | 專案簡介 | | `github_url` | TEXT | GitHub 連結 | | `owner_id` | INTEGER | 坑主 user ID | | `created_at` | TEXT | 建立時間 | ### Issues(任務) | 欄位 | 類型 | 說明 | |------|------|------| | `id` | INTEGER | 主鍵 | | `title` | TEXT | Issue 標題 | | `project` | TEXT | 所屬專案 slug | | `description` | TEXT | 問題描述 | | `background` | TEXT | 背景說明 | | `expected_output` | TEXT | 期望產出格式 | | `tool` | TEXT | 建議 AI 工具(claude / gpt / gemini / other) | | `difficulty` | TEXT | 難度(easy / medium / hard) | | `token_estimate` | TEXT | token 估計量(人類可讀,如 `~80K`) | | `status` | TEXT | 狀態(open / claimed / review / done) | | `owner_id` | INTEGER | 坑主 user ID | | `claimed_by` | INTEGER | 認領獵人 user ID | | `claim_deadline` | TEXT | 認領截止時間 | | `created_at` | TEXT | 建立時間 | ### Submissions(提交成果) | 欄位 | 類型 | 說明 | |------|------|------| | `id` | INTEGER | 主鍵 | | `issue_id` | INTEGER | 對應 Issue | | `contributor_id` | INTEGER | 提交獵人 user ID | | `content` | TEXT | 產出內容或連結 | | `prompt_used` | TEXT | 使用的 Prompt(公開) | | `actual_tokens` | INTEGER | 實際使用 token 數 | | `status` | TEXT | 審核狀態(pending / accepted / rejected) | | `reviewer_id` | INTEGER | Reviewer(預留) | | `reviewer_note` | TEXT | 審核備注(預留) | | `created_at` | TEXT | 建立時間 | --- ## 六、技術架構 ``` ┌─────────────────────────────────────────────┐ │ 使用者瀏覽器 │ │ HTML / CSS / Vanilla JS │ │ 中英雙語(i18n 模組) │ └──────────────────┬──────────────────────────┘ │ HTTPS ┌──────────────────▼──────────────────────────┐ │ Cloudflare 邊緣網路 │ │ │ │ ┌─────────────────┐ ┌──────────────────┐ │ │ │ Cloudflare Pages│ │Cloudflare Workers│ │ │ │ (靜態前端) │ │ (API 後端) │ │ │ │ │ │ │ │ │ │ / │ │ /api/* │ │ │ │ /pages/* │ │ - auth (OAuth) │ │ │ └─────────────────┘ │ - issues CRUD │ │ │ │ - projects CRUD │ │ │ │ - stats │ │ │ └────────┬─────────┘ │ │ │ │ │ ┌────────▼─────────┐ │ │ │ Cloudflare D1 │ │ │ │ (SQLite 資料庫) │ │ │ └──────────────────┘ │ └─────────────────────────────────────────────┘ │ ┌─────────▼─────────┐ │ GitHub OAuth │ │ 身份驗證服務 │ └───────────────────┘ ``` ### 技術選型理由 | 技術 | 選擇 | 理由 | |------|------|------| | 前端框架 | 純 HTML/CSS/JS | 零依賴、部署簡單、g0v 社群易於貢獻 | | 後端 | Cloudflare Workers | 免費方案足夠 MVP、全球低延遲、無伺服器維護成本 | | 資料庫 | Cloudflare D1 | Workers 原生支援、免費方案 5GB、SQLite 語法熟悉 | | 前端 Hosting | Cloudflare Pages | 與 Workers 同平台、GitHub 自動部署、免費 | | 身份驗證 | GitHub OAuth | g0v 社群成員幾乎都有 GitHub 帳號 | | CI/CD | GitHub Actions | 免費、push 即部署 | ### Session 機制 登入後以 **HS256 JWT** 存放於 `HttpOnly` Cookie,有效期 30 天。Worker 端每次請求驗證 JWT,不需要額外的 session store。 --- ## 七、部署方式 ### 前置準備 **1. 建立 GitHub OAuth App** 前往 `GitHub → Settings → Developer settings → OAuth Apps → New OAuth App` ``` Application name: TokenHunt Homepage URL: https://your-domain.pages.dev Callback URL: https://your-domain.pages.dev/api/auth/callback ``` **2. 建立 Cloudflare D1 資料庫** ```bash npm install -g wrangler wrangler login wrangler d1 create tokenhunt-db # 複製輸出的 database_id,填入 wrangler.toml wrangler d1 execute tokenhunt-db --file=db/schema.sql ``` **3. 設定環境變數** ```bash wrangler secret put GITHUB_CLIENT_ID # GitHub OAuth Client ID wrangler secret put GITHUB_CLIENT_SECRET # GitHub OAuth Client Secret wrangler secret put JWT_SECRET # 任意隨機字串(用於簽署 JWT) ``` **4. 修改 `wrangler.toml`** ```toml [vars] BASE_URL = "https://your-domain.pages.dev" ``` ### 部署指令 ```bash # 部署 API Worker wrangler deploy # 前端:在 Cloudflare Pages 建立專案 # - 連接 GitHub repo # - Build command: (留空) # - Build output directory: frontend ``` ### GitHub Actions 自動部署 在 GitHub repo `Settings → Secrets and variables → Actions` 加入: ``` CLOUDFLARE_API_TOKEN # 從 Cloudflare Dashboard 建立(Workers & Pages 權限) CLOUDFLARE_ACCOUNT_ID # 從 Cloudflare Dashboard 右側複製 ``` 之後每次 push 到 `main` 分支,前端與 Worker 會自動同步部署。 --- ## 八、API 設計 所有 API 回傳 JSON,格式統一為: ```json { "ok": true, "data": { ... } } { "ok": false, "error": "Error message" } ``` ### Issues | Method | Path | 權限 | 說明 | |--------|------|------|------| | `GET` | `/api/issues` | 公開 | 列出 Issues,支援 `status` / `tool` / `difficulty` / `q` 篩選 | | `GET` | `/api/issues/:id` | 公開 | 取得單一 Issue 詳情 | | `POST` | `/api/issues` | 登入 | 建立新 Issue | | `POST` | `/api/issues/:id/claim` | 登入 | 認領 Issue(鎖定 7 天) | | `POST` | `/api/issues/:id/submit` | 認領者 | 提交成果 | | `POST` | `/api/issues/:id/accept` | 坑主 | 驗收通過,Issue 關閉 | ### Projects | Method | Path | 權限 | 說明 | |--------|------|------|------| | `GET` | `/api/projects` | 公開 | 列出所有專案 | | `GET` | `/api/projects/:id` | 公開 | 取得單一專案 | | `POST` | `/api/projects` | 登入 | 建立新專案 | ### Auth | Method | Path | 說明 | |--------|------|------| | `GET` | `/api/auth/github` | 發起 GitHub OAuth 流程 | | `GET` | `/api/auth/callback` | GitHub OAuth callback,寫入 session | | `GET` | `/api/auth/me` | 取得目前登入使用者資訊 | | `GET` | `/api/auth/logout` | 登出(清除 cookie) | ### 其他 | Method | Path | 說明 | |--------|------|------| | `GET` | `/api/stats` | 取得統計數字(開放 Issues 數、專案數、已貢獻 token 總量) | --- ## 九、未來擴充方向 ### 短期(第二階段) **Reviewer 機制** 資料庫已預留 `submissions.reviewer_id` 欄位。坑主可指定信任的 reviewer,或開放社群成員申請 reviewer 資格,在坑主驗收前做第一層品質把關。 **g0v Slack 通知整合** 每當有新 Issue 建立,自動發送訊息到 g0v Slack `#general` 或 `#ai-tools` 頻道,提高曝光率。 **積分制度** `users.points` 已預留。設計獎勵規則: - 成果被接受 → +10 點 - 被坑主評為「高品質」 → +5 點 - 坑主每成功收到成果 → +2 點(鼓勵出好題) ### 中期 **Token 贊助池** 企業或個人捐出 API key 或儲值點數,由平台代為管理,分配給特定 Issue 使用,解決獵人需要自掏腰包的問題。 **補償機制** 積分可兌換: - Anthropic / OpenAI API 儲值贊助 - g0v 黑客松活動門票 - 社群周邊商品 **AI 輔助估算** Issue 建立時,由 AI 根據任務描述自動估算所需 token 量,降低坑主填寫難度。 **GitHub Issues 雙向同步** 坑主可選擇將 TokenHunt Issue 與 GitHub repo 的實際 Issue 連動,提交成果時自動附上 PR 連結。 ### 長期 **多語系擴充** 目前支援中文 / 英文,未來可加入台語、客語等本土語言介面,呼應公民科技的在地精神。 **跨社群延伸** 以 g0v 為起點,評估向其他地區的公民科技社群(如 Code for Japan、mySociety)推廣類似模式。 --- ## 十、授權 本專案以 **CC-BY 4.0** 授權釋出。 --- *TokenHunt 是 g0v 社群的一個實驗性專案。如有任何想法或建議,歡迎開 Issue 或在 g0v Slack 找我們討論。*