Files
yingfungsolar/docs/superpowers/specs/2026-09-12-ai-blog-template-deepseek-design.md
philip-cat 6dedb5469f Move seed.sql out of migrations and add SEO structured data
- Relocate seed.sql to scripts/ so wrangler d1 migrations apply
  doesn't treat it as a migration; update package.json, setup.mjs,
  README, and all AGENTS.md references.
- Add src/lib/schema-org.ts builders (LocalBusiness, FAQPage,
  BlogPosting, BreadcrumbList) and emit JSON-LD via Base.astro.
- Add lastmod to sitemap entries.
- Set real site domain, worker route, and D1/KV ids.
- Improve image loading hints and heading semantics across site
  components; switch BlogIndex to client:idle.
2026-09-13 16:21:59 +08:00

121 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI Blog 通用化(Template-ready)+ 轉用 DeepSeek 官方 (Design Spec)
- **日期**2026-09-12
- **狀態**:已與客戶確認方向
- **背景**:本網站打算做成可重用 template,套用到唔同公司。但現時 AI Blog 嘅 system prompt 硬編碼咗「香港村屋太陽能公司『盈豐太陽能』」,只啱太陽能公司用。同時客戶想由 DeepInfra 轉用 DeepSeek 官方供應商。
- **本 spec 只涵蓋 AI Blog 生成**;其他太陽能硬編碼內容(`config.ts`、其他 seed、前台文案)唔喺今次範圍。
- **相關**`2026-09-11-structure-ai-deploy-design.md`(AI Blog 原始設計)依然有效,本 spec 係其「通用化 + 供應商」修訂。
---
## 1. 目標與非目標
### 目標
1. **提示詞通用化**`src/lib/ai.ts``buildSystemPrompt` 唔再綁死任何行業/公司;角色同公司資料一律由後台設定提供,令同一套 code 可套用到任何行業。
2. **轉用 DeepSeek 官方**:預設供應商改成 `https://api.deepseek.com``deepseek-flash`,並處理 DeepSeek「思考模式預設開啟」對生成嘅影響。
3. **後台易輸入**`/admin/ai` 為公司背景同寫作風格加格式指引,令新公司開箱即用。
### 非目標 (Out of scope)
- 輸出格式維持 `TITLE / CONTENT / META_DESC`**唔加** SECTION、**唔加** AI 封面圖(同原 spec 一致)。
- 關鍵字佇列、`generate-next`、Tavily 研究、供應商設定 UI 行為不變。
- 唔改關鍵字 discovery/排程生成(維持唔做)。
- `config.ts`、其他太陽能 seed 內容唔郁。
---
## 2. 提示詞模型(結構化欄位)
沿用現有「結構化欄位」做法(同 webtemplate 一致),唔引入完整可編輯 prompt 模板:
| 欄位 | 來源 | 角色 |
|---|---|---|
| `ai_context_prompt` | 後台 | 角色/寫作風格/語氣/目標受眾(可寫行業) |
| `ai_business_context` | 後台 | 公司事實(grounding):公司名稱/行業/業務範圍/主要地區/主要產品服務/目標客群/特色定位 |
| SEO/GEO 規則 + 輸出格式) | `ai.ts` code | 通用、唔綁行業,維持穩定輸出 |
`buildSystemPrompt` 組合順序維持:`contextPrompt → businessContext → research → 通用任務指示`
通用任務指示(取代原硬編碼角色):
```
你係一位專業嘅 SEO 內容寫手。請根據上面嘅公司背景同寫作風格,
就以下主題寫一篇 800–1200 字嘅繁體中文(香港廣東話書面語)博客文章。
主題:<topic>
要求:
- 標題要放焦點關鍵字,首 100 字內再出現一次,關鍵字密度約 1–2%。
- 用 ## / ### 分段,段落清晰易讀。
- 開頭先畀一段總結(summary-first),再展開。
- 內容要實用、準確,符合公司業務;唔好作出未經證實嘅承諾或數字。
- 適合 SEO 同 AI 搜尋(GEO):用問答式小標題、必要時用列表。
輸出格式(必須嚴格跟隨,唔要加額外說明):
TITLE: <文章標題>
CONTENT:
<Markdown 正文,唔需要重複標題>
META_DESC: <160 字以內 SEO 描述>
```
語言維持「繁體中文(香港)」(本網站只做中文);如需調整語言/語氣,經 `ai_context_prompt` 指定。
---
## 3. DeepSeek 供應商
### 3.1 預設值
| Key | 舊值 | 新值 |
|---|---|---|
| `ai_base_url` | `https://api.deepinfra.com/v1/openai` | `https://api.deepseek.com` |
| `ai_chat_model` | `deepseek-ai/DeepSeek-V3-0324` | `deepseek-flash` |
DeepSeek base URL 係 OpenAI 相容,現有 `callChat` 會自動接 `/chat/completions`,無需改 endpoint 邏輯。
模型選擇:`deepseek-flash`DeepSeek-V4.1-Flash)——快、平、支援繁體中文,適合每日 SEO blog。後台仍可自行改為 `deepseek-v4-pro` 或其他供應商。
### 3.2 思考模式
DeepSeek 思考模式**預設開啟**effort `high`),會令:`temperature` 失效、reasoning token 佔用 `max_tokens`(有機會正文被截斷)。
決策:**生成時關閉思考模式**。
- `callChat` 只在 `baseUrl``deepseek.com` 時加 `thinking: { type: "disabled" }`,保留 `temperature: 0.7`
- 其他 OpenAI 相容供應商**唔會**收到非標準 `thinking` 參數,維持兼容。
- `max_tokens``2200` 提升到 `4000`(中文 8001200 字連 Markdown 需要)。
### 3.3 現行已部署 D1
`site_settings` 由 DB 讀取,code 預設只在 key 缺失時生效。已部署 DB 仍有舊 deepinfra 值,處理方式:
- **部署後手動**去 `/admin/ai` 改 Base URL+模型;`AI_API_KEY` secret 換成 DeepSeek key`wrangler secret put AI_API_KEY`)。
- **唔重跑 `db:seed`**seed 用 `INSERT OR REPLACE`,會覆蓋所有後台改過嘅設定。
---
## 4. 檔案改動
| 檔案 | 改動 |
|---|---|
| `src/lib/ai.ts` | 通用化 `buildSystemPrompt`;預設 baseUrl/model 改 DeepSeek`callChat` 加 conditional thinking disabled、`max_tokens: 4000` |
| `src/schemas/ai.ts` | `ai_base_url` / `ai_chat_model` 預設值同步 |
| `scripts/seed.sql` | `ai_base_url` / `ai_chat_model` 改預設;`ai_business_context` 改通用格式範本 |
| `src/pages/admin/ai.astro` | 模型/URL 預設值同步;公司背景+寫作風格加 placeholder/格式說明 |
| `src/lib/AGENTS.md`、根 `AGENTS.md` | 更新 AI Blog 合約描述(DeepSeek 預設、通用提示詞) |
---
## 5. 驗證
- `npm run build`(唯一 build 驗證)。
- `npm run dev`:4321):`.dev.vars` 填 DeepSeek `AI_API_KEY` → 登入 `/admin/ai` → 用通用公司背景 + 一個主題生成,確認:
1. 草稿成功寫入並 redirect 去編輯頁;
2. 唔再出現太陽能字眼(除非公司背景自己寫);
3. 無 timeout、正文完整(未被 max_tokens 截斷)。
---
## 6. 決策記錄
- 提示詞採「結構化欄位」而唔係完整可編輯 prompt 模板:保輸出格式穩定、最貼近 webtemplate、改動最少(YAGNI)。
- 模型預設 `deepseek-flash`:成本/速度平衡;`deepseek-v4-pro` 貴約 34 倍。
- 關閉思考模式:格式最穩定、最快、最便宜;temperature 生效。