Skip to content

Repository files navigation

決策迭代器 — 網頁版

把任何決策(商業或職涯)當成一個要持續迭代的產品來跑,並且把 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 嵌入,不需登入就能給人檢視

30 秒啟動(本機)

前提:Node.js 18+ 已安裝

cd D:\aiproject\decision-iterator-web
npm install

# 複製環境變數範本
Copy-Item .env.local.example .env.local

接著選擇啟動模式:

模式 A:零成本試玩(mock 大腦,驗流程)

# 編輯 .env.local,確認以下兩行:
# LLM=mock
# STORAGE=fs
# (不需要填 ANTHROPIC_API_KEY)

npm run dev

打開 http://localhost:3000,建立 session、對話、確認看板更新。Mock 大腦會回覆固定繁中文字並更新狀態,完整走完 tool-use 迴圈。

模式 B:真大腦(Anthropic API)

# 編輯 .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

模式 C:真大腦(OpenAI / ChatGPT 訂閱,吃訂閱 token)

用本機已登入的 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/sessionsGET/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    ← 完整狀態(原子寫入)

部署:Supabase + Vercel

1. 建立 Supabase 專案

  1. 前往 https://supabase.com 建立新專案
  2. 進入 SQL Editor,貼上並執行 supabase/migration.sql(建立 sessions 表)
  3. 取得以下兩個值(Project Settings → API):
    • Project URLhttps://xxxx.supabase.co
    • service_role key(不是 anon key)

RLS 提醒migration.sql 的 RLS 預設未啟用(單人使用)。若部署後要加帳號系統,依照檔案末尾的 RLS 範本啟用後才上線。

2. 安裝 Supabase 套件

npm install @supabase/supabase-js

@supabase/supabase-jspackage.json 中為 optionalDependencies,本機 STORAGE=fs 時不需安裝。切換到 Supabase 前需手動安裝。

3. 設定環境變數並部署到 Vercel

# 登入 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_ 前綴暴露到前端。

4. 驗證

部署後打開 Vercel 提供的 URL,建立一個 session 並對話,確認:

  • 聊天可串流回應
  • /d/[id]/dashboard.html 有內容
  • Supabase 控制台的 sessions 表有新增資料

.env.local 完整範本

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 授權——可自由使用、修改、散布(含商用),附帶專利授權條款;散布時須保留版權與授權聲明、標示修改處。

About

把決策當成可迭代的產品來跑,並把 AI 的整條思考鍊攤在陽光下逐格檢查——issue tree、優先級評分、證據判定、紅旗,即時渲染到可分享看板。Next.js 16 + Anthropic Claude。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages