🔥 Boring 實戰展示:10 分鐘讓你見識 AI 開發的未來
「不會寫程式沒關係,Boring 幫你搞定一切。」
這不是誇大——這是 Vibe Coding 的真諦。
🎯 什麼是 Boring?
想像你有一個架構師級別的 AI 軍師,它不只會寫程式碼,還會:
🏛️ 設計架構 → 在寫程式碼之前,先幫你規劃全局
🔍 審查代碼 → 像資深工程師一樣 Review 你的代碼
🛡️ 保護安全 → 自動檢測安全漏洞和敏感資訊外洩
🔄 自動修復 → 一鍵解決 Lint、格式、測試問題
🧠 學習你的風格 → 記住你喜歡怎麼寫程式碼
一句話總結:Boring = 你的 AI 開發團隊(架構師 + 資深工程師 + QA)
🚀 實戰案例 1:從 0 到 1 建立專案
場景:你想建立一個 FastAPI 後端
傳統方式:
Boring 方式:
你: "幫我建立一個 FastAPI 認證服務,要有 JWT 和 OAuth2"
Boring 架構師:
"等等,在開始之前我需要了解幾個問題..."
🤔 問題 1: 資料庫要用什麼?PostgreSQL 還是 SQLite?
🤔 問題 2: 需要支援社交登入嗎(Google/GitHub)?
🤔 問題 3: Token 過期時間多久?
你: "PostgreSQL,要 GitHub 登入,Token 24 小時"
Boring:
✅ 生成架構設計...
✅ 建立專案結構...
✅ 實作認證邏輯...
✅ 撰寫測試...
✅ 驗證通過!
📁 你的專案已準備就緒:
src/
├── main.py # FastAPI 入口
├── auth/
│ ├── jwt.py # JWT 實作
│ ├── oauth.py # GitHub OAuth
│ └── middleware.py # 認證中介軟體
├── models/ # 資料模型
└── tests/ # 測試(覆蓋率 85%)
核心指令 (Vibe Coder Style):
🛠️ 實戰案例 2:自動修復代碼問題
場景:你的代碼有一堆 Lint 錯誤
傳統方式:
Boring 方式:
你: "/quick_fix"
Boring:
🔍 掃描中...
📊 發現 47 個問題:
- 23 個格式問題
- 15 個未使用的 import
- 9 個類型問題
⚡ 自動修復中...
✅ 47/47 問題已修復
✅ 格式化完成
✅ 所有測試通過
總耗時:8.3 秒
這背後發生了什麼:
boring-route "/quick_fix"
↓
boring_verify → 找出所有問題
↓
boring_auto_fix → 自動修復
↓
ruff format → 格式化
↓
pytest → 確認沒壞掉
💡 V14.0 提示:使用
boring-routeCLI 或自然語言對話,系統會自動路由到正確的工具。
🔒 實戰案例 3:安全掃描與防護
場景:你不小心把 API Key 寫死在程式碼裡
傳統方式:
Boring 方式:
你: "/security_scan"
Boring:
🔍 安全掃描中...
🚨 發現 3 個嚴重問題!
┌─────────────────────────────────────────────────┐
│ HIGH: 發現硬編碼的 API Key │
│ 位置: src/config.py:23 │
│ 內容: STRIPE_API_KEY = "sk_live_..." │
│ 建議: 使用環境變數 os.getenv("STRIPE_API_KEY") │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ MEDIUM: 使用已知有漏洞的套件 │
│ 套件: requests==2.25.0 (CVE-2023-32681) │
│ 建議: 升級到 requests>=2.31.0 │
└─────────────────────────────────────────────────┘
🛡️ 是否自動修復?[Y/n]
🧠 實戰案例 4:RAG 語義搜尋
場景:你接手一個 10 萬行的遺留專案
傳統方式:
Boring 方式:
你: "我想找處理 JWT Token 驗證的函數"
Boring (🌟 **Universal Router 自動路由到 `boring_rag_search`**)::
🔍 語義搜尋結果:
1️⃣ src/auth/jwt.py:45 - validate_token()
相關度: 98%
"驗證 JWT token 的簽名和過期時間"
2️⃣ src/middleware/auth.py:23 - require_auth()
相關度: 87%
"裝飾器,確保 request 帶有有效 token"
3️⃣ src/utils/security.py:78 - decode_jwt()
相關度: 82%
"解碼 JWT payload,返回 user_id"
📊 依賴關係圖:
decode_jwt() ← validate_token() ← require_auth()
↑
routes/users.py
🔄 實戰案例 5:安全重構(Transaction)
場景:你要重構核心模組,但怕搞砸
傳統方式:
Boring 方式:
你: "/safe_refactor 重構認證模組,改用策略模式"
Boring:
📦 開始事務...
💾 已建立還原點 [txn-a8f3c2]
🏛️ 架構師分析:
"策略模式很適合這個場景,因為..."
💻 Coder 開始重構...
🔍 Reviewer 審查中...
⚠️ 發現潛在問題: 缺少向後兼容
💡 建議: 保留舊函數作為 alias
🧪 驗證結果:
✅ 測試通過 (58/58)
✅ Lint 通過
✅ 類型檢查通過
✅ 重構完成!
是否提交?[Y/n/rollback]
你: "rollback" # 如果後悔了
Boring:
⏪ 已回滾到 [txn-a8f3c2]
📄 所有檔案已還原
🧠 實戰案例 7:自動學習與進化 (Auto-Learning V14.0 Updated)
場景:AI 老是犯同樣的錯
傳統方式:
你: "這不對,這裡要用 `check_password_hash` 不是 `check_password`"
AI: "抱歉我改..."
(第二天,新的對話)
AI: "我又用了 `check_password`..."
(你崩潰...)
Boring 方式 (Auto-Sense Mode):
你: "這不對,這裡要用 `check_password_hash`"
Boring: (修正代碼)
[系統背景運作]:
🔍 偵測到用戶修正 -> 提取模式 -> 存入知識庫
(第二天,新的對話)
你: "幫我寫登入功能"
Boring:
✅ 讀取專案記憶...
💡 發現學習模式: "Password Hashing Preference"
"好的,我會使用 `check_password_hash` 進行驗證..."
主動教學: 你也可以主動教它:
🤖 實戰案例 8:Multi-Agent 協作
場景:複雜任務需要多個角色
你: "建立一個完整的用戶管理系統,包含 CRUD、權限控制和 Audit Log"
Boring:
═══════════════════════════════════════
🏛️ ARCHITECT PHASE
═══════════════════════════════════════
設計決策:
• 採用 RBAC 權限模型
• Audit Log 使用 Event Sourcing
• 用戶資料採用軟刪除
生成文件:
• implementation_plan.md
• database_schema.sql
• api_spec.yaml
═══════════════════════════════════════
💻 CODER PHASE
═══════════════════════════════════════
實作進度:
[████████░░] 80%
已完成:
✅ User CRUD endpoints
✅ Role model & permissions
✅ Audit event dispatcher
進行中:
🔄 Permission decorator
═══════════════════════════════════════
🔍 REVIEWER PHASE
═══════════════════════════════════════
審查報告:
┌──────────────────────────────────────┐
│ 程式碼品質: ⭐⭐⭐⭐☆ (4.2/5) │
│ 測試覆蓋率: 78% │
│ 安全評估: 通過 │
│ 效能評估: 良好 │
└──────────────────────────────────────┘
建議:
• 考慮加入 rate limiting
• 建議對敏感操作加入 2FA
⚡ 常用快捷指令速查表
| 想做什麼 | 輸入 | Boring 會做什麼 |
|---|---|---|
| 🚀 新專案開發 | /vibe_start |
完整 Spec-Driven 流程 |
| 🔧 修復所有問題 | /quick_fix |
Lint + Format + Test |
| 🛡️ 安全掃描 | /security_scan |
SAST + Secret Detection |
| 🔍 搜尋代碼 | /semantic_search |
RAG 語義搜尋 |
| 🔄 安全重構 | /safe_refactor |
Transaction + Verify |
| 📊 品質評估 | /evaluate_code |
LLM Judge 評分 |
| 💾 智能提交 | /smart_commit |
Auto-generate commit msg |
| 🗺️ 查看進度 | /roadmap |
生成甘特圖 |
| 🧠 學習風格 | /learn_patterns |
AI 學習你的寫法 |
| ❓ 健康檢查 | /vibe_check |
專案健康度評分 |
🎮 互動式對話範例
範例 1:Debug 一個詭異的 Bug
你: 我的 API 回傳 500,錯誤是 "TypeError: 'NoneType' object is not iterable"
Boring:
🔍 分析錯誤...
📍 Root Cause 定位:
位置: src/services/user.py:67
函數: get_user_orders()
問題:
orders = db.query(Order).filter_by(user_id=user_id).all()
return [order.to_dict() for order in orders] # ← 這裡爆了
原因:
當 user_id 不存在時,返回 None 而非空列表
🏛️ 架構師建議:
這是典型的「Null Object Pattern」缺失。
建議永遠返回空列表 [] 而非 None,
讓調用方可以安全地遍歷。
修復:
orders = db.query(Order).filter_by(user_id=user_id).all() or []
是否自動修復?[Y/n]
範例 2:效能優化建議
你: "/optimize_performance"
Boring:
🔍 掃描效能問題...
⚠️ 發現 N+1 Query 問題
位置: src/routes/users.py:34
問題程式碼:
users = User.query.all()
for user in users:
orders = user.orders # 每個 user 都觸發一次 DB query
建議:
users = User.query.options(
joinedload(User.orders)
).all()
預估效能提升: 10x (100 users → 1 query vs 101 queries)
🏆 為什麼選擇 Boring?
| 特性 | 傳統 AI 助手 | Boring |
|---|---|---|
| 代碼生成 | ✅ | ✅ |
| 架構設計 | ❌ | ✅ 架構師人設 |
| 需求釐清 | ❌ | ✅ SpecKit 五部曲 |
| 安全掃描 | ❌ | ✅ SAST + Secret Detection |
| 自動修復 | ❌ | ✅ 一鍵修復 |
| 代碼審查 | ❌ | ✅ Multi-Agent Review |
| 風險控制 | ❌ | ✅ Shadow Mode |
| 可回滾 | ❌ | ✅ Transaction |
| 語義搜尋 | ❌ | ✅ RAG Vector Search |
| 學習適應 | ❌ | ✅ 知識庫持久化 |
🚀 馬上開始
🎮 方式 1:MCP/Smithery(推薦!最簡單)
直接在 Gemini CLI 或 Cursor 中使用,無需額外設定:
然後在 Gemini CLI 中直接對話:
✅ 不需要 PROMPT.md
✅ 不需要 boring-setup
✅ 互動式對話,隨時可停
🤖 方式 2:自主循環模式(進階用戶)
用於 全自動、長時間 開發任務,在 CMD/PowerShell 中執行:
# Step 1: 安裝 (只需一次)
pip install boring-aicoding
# Step 2: 建立專案結構 (只有這種模式需要 boring-setup!)
# 注意:在 CMD 執行 boring start 前,*必須* 先執行 boring-setup 初始化專案!
boring-setup my-awesome-app
cd my-awesome-app
# Step 3: 編輯 PROMPT.md,告訴 AI 要做什麼
# Step 4: 啟動自主循環
boring start # 使用自動偵測的 CLI
boring start --provider claude-code # 使用 Claude Code CLI
boring start --provider gemini-cli # 使用 Gemini CLI
boring-setup 做了什麼?
my-awesome-app/
├── PROMPT.md # ✅ 必要 - 你要寫的任務說明
├── @fix_plan.md # 任務清單
├── GEMINI.md # 專案說明
└── .boring/brain/ # AI 知識庫
📊 兩種方式比較
| MCP/Smithery | boring start |
|
|---|---|---|
| 安裝方式 | npx @smithery/cli ... |
pip install boring-aicoding (必須) |
需要 boring-setup |
❌ 不需要 | ✅ 需要 |
需要 PROMPT.md |
❌ 不需要 | ✅ 需要 |
| 運行方式 | 對話式 | 全自動循環 |
| 適合場景 | 互動開發 | 長時間自動開發 |
| 中斷方式 | 隨時 | Ctrl+C |
注意:如果你只使用 Smithery 安裝,是無法在終端機執行
boring start的!只有 pip 安裝才會提供boring指令。
🎯 記住這句話
「專業玩家不記 Tool 名稱,因為 Prompt 已經幫你準備好所有戰術組合。」
你只需要告訴 Boring 你想要什麼,剩下的交給它。
Built with ❤️ by the Boring206
📚 延伸閱讀
最後更新: V14.0.0