Skip to content

Latest commit

 

History

208 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

光源智控企業網站

光源智控股份有限公司的雙語企業網站與內部 AI 業務演練系統。專案以 Next.js App Router 建置,包含繁體中文與英文頁面、Jerry 智慧客服(文字/語音/拍照)、以真實實績算出來的資料視覺化、聯絡表單、實績影音,以及受管理員驗證保護的模擬客戶演練後台與數據看板。

主要功能

公開網站

  • /zh-TW/en 雙語企業內容;型別強制兩個語系同時存在
  • 智慧照明產品、EMC、案例、新聞、FAQ、下載與聯絡頁面
  • 完整現場實績影片與延遲載入播放器
  • 資料視覺化:節能率排行、案場類型分布、節能率 × 年減碳散點、年減碳量組成、 感測半徑 vs 通訊半徑、逐時負載示意、follow-me 動線圖。全部由 src/content/site.ts 的 實績資料推導,每張圖都附可展開的資料表;示意性質的圖另有虛線邊框與 「示意圖,非實測數據」徽章
  • Jerry 智慧客服:語意檢索(向量 + 重排)→ 模型回覆 → 事實校驗;支援語音提問、 語音播報與拍照診斷;沒有金鑰時自動降級為規則式回覆,功能不會消失只會標示降級
  • 聯絡表單、Email 通知與限流
  • 明暗主題、響應式版面、鍵盤可及的圖表

內部後台(需登入)

  • 演練工作台 /zh-TW/admin:與 AI 模擬客戶對話、整理需求、組合模擬商品、送出提案並評分; 另有「AI 自動演示」模式,由 AI 顧問與 AI 客戶自動跑完一整場
  • 數據看板 /zh-TW/admin/analytics:KPI、能力雷達、學習曲線、需求覆蓋矩陣、 預算散點、風險旗標,以及 AI 護欄指標(直通率 / 修復率 / 規則兜底率)
  • 沒有 DATABASE_URL 時,兩者都會降級到內建的確定性演示資料,並在畫面上以琥珀色橫幅 標示「演示資料 / Demo data」

技術

  • Next.js 15 App Router、React 19、TypeScript strict(全倉 0 個 any@ts-ignoreeslint-disable
  • Tailwind CSS v4、CSS Modules(後台)、Framer Motion
  • 自建的 LLM 平台層 src/lib/llm:供應商解析、模型鏈與備援、逾時與預算、個資遮蔽; chat / vision / embed / rerank / STT / TTS 六種任務共用同一套契約
  • 圖表全部是手寫 SVG 與 CSS,沒有圖表函式庫
  • PostgreSQL / Neon + Drizzle ORM(僅內部演練系統)
  • NextAuth(管理員驗證)
  • 測試:Node 內建 test runner

本機啟動

需要 Node.js 20+ 與 pnpm。

git clone https://github.com/JerryTsai0708/illumination-intelligence.git
cd illumination-intelligence
pnpm install --frozen-lockfile
cp .env.example .env.local
pnpm dev

瀏覽 http://localhost:3000/zh-TW。Windows 請把 cp 改成 copy

網站在完全沒有外部服務時仍可建置與瀏覽:公開頁面不查資料庫、不呼叫模型。 Jerry 的模型能力、Email 寄送、資料庫與管理後台各自需要對應的環境變數,缺少時一律降級而非報錯。

環境變數

所有可用變數都列在 .env.example,該檔的註解就是說明文件。常用設定:

  • NEXT_PUBLIC_SITE_URL:正式網站網址(同時決定 sitemap 與 OG 卡片的絕對路徑)。
  • GPTGE_BASE_URLGPTGE_API_KEY:新部署的 GPT.GE 預設閘道;文字與模擬對話預設使用 gpt-4o-mini
  • LLM_MODEL_CHAT / _EMBED / _RERANK / _STT / _TTS:各任務的模型鏈,逗號分隔, 第一個是主模型、其餘為備援。Jerry 測試通道視覺診斷固定使用 GPT.GE gpt-5.6-sol
  • ASSISTANT_MODE留空即可。語意是「有金鑰就啟用模型;只有明確填入 mock 才強制 改用內建規則」。填了 mock 會讓 Jerry 全程走規則式回覆,而畫面上只會少一個模型徽章, 現場很難察覺。
  • LLM_PROVIDERopenai-compatiblesiliconflowgptgeopenaigemini。 指定的供應商若沒有金鑰會被忽略,自動退回解析順序。
  • CONTACT_TO_EMAILCONTACT_FROM_EMAIL 與 Resend 或 SMTP 變數:聯絡表單通知。
  • DATABASE_URL:PostgreSQL / Neon 連線字串(只有演練系統與聯絡線索會用到)。
  • NEXTAUTH_SECRETADMIN_EMAILADMIN_PASSWORD:管理後台驗證。缺 NEXTAUTH_SECRET 時後台會顯示一頁設定說明,而不是 500。
  • RATE_LIMIT_*ASSISTANT_*_RATE_LIMIT_*SIMULATOR_*_RATE_LIMIT_*:各端點限流。 公開展場請調高 Jerry 的上限,全場觀眾共用同一個出口 IP。
  • LOGIN_BACKOFF_*:管理員登入失敗的指數退避。

請勿把 .env.local、API key、資料庫密碼或真實客戶資料提交到 Git。

Jerry 模型服務

Jerry 在沒有任何金鑰時仍然可用:走規則式回覆 + 關鍵字檢索,並在 UI 上標示為降級模式。 設定金鑰之後會自動啟用完整路徑:

  1. 語意檢索:text-embedding-3-small 建索引 → rerank 模型重排 → 取前 4 條已核准知識
  2. 模型回覆:把知識、對話與線索草稿組成提示詞,輸入先經過個資遮蔽與注入偵測
  3. 事實校驗:節能率、認證、價格、保固、回收期等宣稱必須有知識條目佐證, 否則要求模型改寫一次,仍不合格就整段丟棄改用規則式安全回覆

模型失敗、逾時或額度不足時一律回到規則式備用回覆,對話不會中斷。

預設閘道(OpenAI-compatible):

GPTGE_BASE_URL=https://api.gpt.ge/v1
GPTGE_API_KEY=your_server_side_key
LLM_MODEL_CHAT=gpt-4o-mini
LLM_MODEL_EMBED=text-embedding-3-small

SiliconFlow legacy fallback(僅在未設定 GPTGE_API_KEY 時使用):

LLM_PROVIDER=siliconflow
OPENAI_COMPATIBLE_BASE_URL=https://api.siliconflow.cn/v1
OPENAI_COMPATIBLE_API_KEY=your_server_side_key
OPENAI_COMPATIBLE_MODEL=deepseek-ai/DeepSeek-V3.2
OPENAI_COMPATIBLE_FALLBACK_MODEL=deepseek-ai/DeepSeek-V4-Flash

Jerry 的照片診斷使用獨立的 GPT.GE gpt-5.6-sol 憑證,不會改變文字對話設定。端點固定為 https://api.gpt.ge/v1、模型固定為 gpt-5.6-sol;只需在伺服器端設定以下金鑰,請勿加上 NEXT_PUBLIC_,也不要把真實金鑰寫入 .env.example 或提交到 Git:

VISION_OPENAI_COMPATIBLE_API_KEY=your_server_side_vision_key

演練器也使用相同的 GPT.GE gpt-4o-mini 閘道。SIMULATOR_OPENAI_COMPATIBLE_* 僅作為 legacy fallback,只有未設定 GPTGE_API_KEY 時才會使用。

視覺診斷只在持有有效簽名 Cookie 的繁中 Jerry 模擬測試通道開放,正式 Jerry 與英文頁面都不顯示照片工具。啟用測試通道時仍須另外設定既有的 JERRY_SIMULATION_TEST_ENABLEDJERRY_SIMULATION_TEST_TOKENJERRY_SIMULATION_TEST_COOKIE_SECRET;只有視覺金鑰並不會公開照片功能。照片觀察只是 GPT.GE gpt-5.6-sol 的初步判讀,必須由測試者以文字確認後,才會進入原有七項需求評估。

Gemini 範例:

LLM_PROVIDER=gemini
GEMINI_API_KEY=your_server_side_key
GEMINI_MODEL=gemini-3-flash-preview

API key 只能放在伺服器端環境變數,不可使用 NEXT_PUBLIC_ 前綴。

多模態

能力 端點 說明
拍照診斷(僅繁中 Jerry 簽名測試通道) POST /api/assistant/vision 需有效測試 Cookie;4MB / 2048px 上限、magic-byte 型別檢查、EXIF 與 XMP 剝除後才送出。照片不落盤、不進資料庫,觀察結果須由使用者文字確認後才更新七項評估
語音提問 POST /api/assistant/voice/transcribe whisper 轉寫 + 繁體正規化 + 專有名詞校正
語音播報 POST /api/assistant/voice/speak TTS,模型鏈可備援
能力探測 GET /api/assistant/capabilities 前端據此決定顯示哪些控制項;沒有金鑰的能力直接隱藏按鈕,不會出現「按了就報錯」

聯絡表單寄送

正式收件人設定如下,寄件服務可選擇 Resend 或 SMTP:

CONTACT_TO_EMAIL=y2008412@hotmail.com
CONTACT_FROM_EMAIL="Illumination Intelligence <noreply@your-domain.com>"
RESEND_API_KEY=your_server_side_key

若使用 SMTP,請改為填寫 SMTP_HOSTSMTP_PORTSMTP_USERSMTP_PASS。 設定 CONTACT_REQUIRE_EMAIL=true 可要求郵件寄送成功後才接受表單。 沒有任何寄送服務時,線索會寫入本機 spool,回應中的 delivery.durable 會據實回報。

資料庫

pnpm db:migrate
pnpm db:seed

遷移檔位於 drizzle/,來源是 src/db/schema.ts(六張 simulation_* 表)。 模擬客戶、商品與金額均為內部演練資料,不代表正式商品、報價或對外承諾。 資料架構與「哪些表其實不存在」請見 docs/cms-architecture.md

驗證

pnpm exec tsc --noEmit
pnpm lint
pnpm test
pnpm build

部署

專案可直接部署至 Vercel。將所需環境變數設在 Vercel Project Settings,再執行正式部署。 注意 ILLUM_BUILD_* 是建置期的設定快照,補完環境變數之後必須重新建置才會生效。 vercel.json 指定了 hkg1 區域與 60 秒 maxDuration,這兩項都需要付費方案。 不要把 Vercel 或其他平台的秘密值寫入倉庫。

文件

檔案 內容
docs/demo-runbook.md 現場示範的完整操作手冊:環境檢查、動線、話術、Plan B
docs/project-structure.md 目錄與模組地圖
docs/cms-architecture.md 內容與資料架構,含資料庫真實邊界
docs/design-system.md 色彩 token、資料視覺化色票、可及性規則
docs/jerry-knowledge-base.md Jerry 知識庫治理與維護流程
docs/simulator-usage-guide.md 演練系統使用說明
docs/seo-strategy.md SEO 策略與現況
design-qa.md 視覺與可及性驗收紀錄

授權範圍

程式碼依 MIT License 開放使用。

公司名稱、商標、Logo、品牌圖案、照片、影片、客戶案例、公司簡報、文案、資料與其他品牌資產不包含在 MIT 授權內,權利由光源智控股份有限公司保留。詳細邊界請見 ASSET-LICENSE.md。Fork 此專案公開使用前,請替換這些公司資產與內容。

參與貢獻

請先閱讀 CONTRIBUTING.md。安全問題請依 SECURITY.md 私下回報,不要在公開 Issue 放入密鑰、漏洞細節或客戶資料。

Jerry Evaluation Operations

The internal Jerry evaluation workflow is documented in docs/jerry-evaluation-operations.md. It uses GPTGE_API_KEY and GPTGE_BASE_URL from .env.local or Vercel environment settings only. Never commit API keys or tokens. Evaluation runs and candidates do not publish changes to public Jerry.

About

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages