把任何決策(商業或職涯)當成一個要持續迭代的產品來跑,並且把 AI 的整條思考鍊攤在陽光下,讓你逐格檢查它推理得合不合理,而不是只丟給你一個結論。
一般跟 AI 討論決策,你只看得到最後那段文字答案——中間它假設了什麼、憑什麼這樣排優先級、哪些是有證據支持的、哪些是它自己也心虛的,全部藏在黑箱裡。你很難判斷「這個結論到底可不可信」。
這個工具把決策拆成一份結構化的狀態(SessionState),每一步推理都是可檢視的物件,並即時渲染到看板上。你看的不是 AI 的結論,而是它得出結論的整個過程:
| 思考環節 | 看板上呈現什麼 | 你可以據此判斷 |
|---|---|---|
| 框定(frame) | 原始問題、真正要決定什麼、關係人、賭注、成功標準 | AI 有沒有搞錯問題、有沒有偷換題目 |
| 拆解(issue tree / 假設樹) | 每個假設、指標、實驗都是一個 node,帶父子關係 | 推理有沒有跳步、分支合不合理、有沒有漏掉重要面向 |
| 優先級(priority) | 每個 node 標 impact × likelihood ÷ cost 分數 |
AI 為什麼先追這條、憑什麼覺得它重要——分數攤開給你看 |
| 證據(evidence) | 每個假設掛著證據,標 supports / refutes / mixed |
哪些結論有料支撐、哪些只是 AI 的臆測 |
| 狀態(status) | node 標 open / testing / confirmed / refuted / parked |
哪些已驗證、哪些還是空中樓閣 |
| 洞見(insights) | 從哪些 node 收斂出結論、幅度多大、為什麼 | 結論是不是真的從證據長出來的,還是硬湊的 |
| 紅旗(redFlags) | AI 自己標記的疑點與風險 | AI 有沒有誠實面對自己的不確定性 |
| 時間軸(timeline) | 每次重新框定、注入新想法、切換視角都留痕 | 思路怎麼演化的、被你打斷後有沒有真的調整 |
核心價值:思考鍊每一格都可稽核。假設沒證據就顯示 open、優先級分數不合理就一眼看穿、AI 心虛的地方會進 redFlags。你不用信任結論,你可以驗證推理。而且任何一回合都能打斷、注入新思考、要它重新規劃(dynamic workflow)。
Next.js 16 應用程式,瀏覽器裡的決策大腦:
/列表頁 — 所有 decision session,可新建、刪除/s/[id]聊天頁 — 跟 AI 對話推演,串流回應,看板即時更新/d/[id]/dashboard.html看板頁 — 整條思考鍊的視覺化,靜態 HTML 可獨立分享或 iframe 嵌入,不需登入就能給人檢視
前提:Node.js 18+ 已安裝
cd D:\aiproject\decision-iterator-web
npm install
# 複製環境變數範本
Copy-Item .env.local.example .env.local接著選擇啟動模式:
# 編輯 .env.local,確認以下兩行:
# LLM=mock
# STORAGE=fs
# (不需要填 ANTHROPIC_API_KEY)
npm run dev打開 http://localhost:3000,建立 session、對話、確認看板更新。Mock 大腦會回覆固定繁中文字並更新狀態,完整走完 tool-use 迴圈。
# 編輯 .env.local:
# ANTHROPIC_API_KEY=sk-ant-...
# LLM=real
# STORAGE=fs
# MODEL=claude-sonnet-4-6 ← 可改成 claude-opus-4-8
npm run dev取得金鑰:https://console.anthropic.com/settings/keys
成本提醒:真模型按 token 計費。System prompt 與工具定義已啟用 prompt caching(
cache_control: ephemeral),跨請求重複部分可節省約 80-90% 輸入成本。帳單查詢:https://console.anthropic.com/settings/billing
用本機已登入的 codex CLI 當大腦,走 ChatGPT 訂閱額度,不走 API 計費。適合已是 ChatGPT Plus/Pro 訂閱者。
# 前提:本機已安裝並登入 codex CLI(~/.codex/auth.json 存在)
# npm install -g @openai/codex → codex login
# 編輯 .env.local:
# LLM=codex
# STORAGE=fs
# CODEX_MODEL= ← 留空用 codex 預設模型(最強,如 gpt-5.6-sol);要降就填,如 gpt-5.1
npm run dev運作方式:codex exec --output-schema 強制模型吐出 { reply, state } 結構化 JSON,src/lib/llm/codex.ts 解析後接回既有的 tool-use 編排迴圈——聊天頁、看板、對話歷史全部照舊。
限制(重要):模式 C 靠本機 codex 二進位檔+登入態,只能單機/本機跑。部署到 Vercel 等無 codex、無 ChatGPT 登入的環境會失敗——那裡請用模式 B(Anthropic API)。
模型預設最強、可往下降:不設
CODEX_MODEL就用 codex~/.codex/config.toml的模型(你的最強預設);要省 token 或加速就在.env.local設較低模型。成本:吃 ChatGPT 訂閱額度而非 API 帳單,但 codex 每次呼叫本身開銷較大(含 codex 自己的 system prompt,單輪約 2 萬 token 起跳)。
| URL | 說明 |
|---|---|
/ |
Session 列表 + 新建表單(可刪除) |
/s/[id] |
聊天頁(串流,client component;重整後回填對話歷史) |
/d/[id]/dashboard.html |
看板頁(靜態 HTML,可獨立分享或 iframe 嵌入) |
/d/[id]/session-state.json |
狀態 JSON(看板每 2 秒輪詢,no-store) |
API:GET/POST /api/sessions、GET/DELETE /api/s/[id]、POST /api/s/[id]/message(串流)。
看板 URL 可直接複製給他人瀏覽,不需登入。
每輪對話存在 session state 的 chatLog 欄位,並在下一輪以真正的 user/assistant 輪次送進模型 context(預設帶最近 20 輪)。這是多輪推演的前提——少了它,模型每輪都只看得到狀態 JSON,答不出「我剛剛說了什麼」。
chatLog 是伺服器端擁有的欄位:模型透過 update_session_state 寫回的是整份狀態、不含 chatLog,由 src/lib/orchestrate.ts 補回,避免歷史被覆蓋。網頁與 LINE 共用同一份歷史。
在 .env.local 設定:
MODEL=claude-sonnet-4-6 # 預設,速度快、成本低
MODEL=claude-opus-4-8 # 更深入推理,成本較高
也可在聊天頁 POST body 帶 model 欄位動態切換(API 層支援)。
STORAGE=fs 時,session 資料存在專案根目錄下:
D:\aiproject\decision-iterator-web\.data\sessions\<session-id>\
session-state.json ← 完整狀態(原子寫入)
- 前往 https://supabase.com 建立新專案
- 進入 SQL Editor,貼上並執行
supabase/migration.sql(建立sessions表) - 取得以下兩個值(Project Settings → API):
- Project URL:
https://xxxx.supabase.co - service_role key(不是 anon key)
- Project URL:
RLS 提醒:
migration.sql的 RLS 預設未啟用(單人使用)。若部署後要加帳號系統,依照檔案末尾的 RLS 範本啟用後才上線。
npm install @supabase/supabase-js
@supabase/supabase-js在package.json中為optionalDependencies,本機STORAGE=fs時不需安裝。切換到 Supabase 前需手動安裝。
# 登入 Vercel CLI(如未安裝:npm install -g vercel)
vercel login
# 設定環境變數(在 Vercel 上)
vercel env add ANTHROPIC_API_KEY
vercel env add LLM # 填 real
vercel env add STORAGE # 填 supabase
vercel env add SUPABASE_URL
vercel env add SUPABASE_SERVICE_ROLE_KEY
# 部署
vercel --prod或在 Vercel Dashboard(https://vercel.com/dashboard)的 Project → Settings → Environment Variables 逐一填入後,從 GitHub 推送觸發自動部署。
SUPABASE_SERVICE_ROLE_KEY是服務端金鑰,絕對不要用NEXT_PUBLIC_前綴暴露到前端。
部署後打開 Vercel 提供的 URL,建立一個 session 並對話,確認:
- 聊天可串流回應
/d/[id]/dashboard.html有內容- Supabase 控制台的
sessions表有新增資料
ANTHROPIC_API_KEY=sk-ant-...
LLM=mock # mock | real(Anthropic)| codex(ChatGPT 訂閱)
STORAGE=fs
SUPABASE_URL=
SUPABASE_SERVICE_ROLE_KEY=
CODEX_MODEL= # 僅 LLM=codex;留空=最強預設,填低模型可往下降
(即 .env.local.example 的內容)
- Framework:Next.js 16 + React 19(App Router)
- 語言:TypeScript strict
- 樣式:Tailwind CSS 4
- LLM:Anthropic SDK(
@anthropic-ai/sdk)或本機 codex CLI(吃 ChatGPT 訂閱,src/lib/llm/codex.ts) - 儲存:fs adapter(本機)或 Supabase adapter(生產)
- 串流:
ReadableStream+getReader()(NodeJS runtime,不走 edge)
本專案採 Apache License 2.0 授權——可自由使用、修改、散布(含商用),附帶專利授權條款;散布時須保留版權與授權聲明、標示修改處。