基於個人寫作風格的 AI 科技評論文章生成器。從 Hacker News 自動抓取科技新聞,使用本地 AI 模型生成你專屬風格的評論文章。
用 AI 寫出你自己的聲音,而不是聽起來像 AI。
- 個人化風格: 基於你的歷史文章分析,生成符合你寫作風格的內容
- 智能新聞聚合: 自動從 Hacker News 抓取並評分新聞相關度
- 本地 AI 生成: 使用 Ollama 本地模型,保護隱私
- Markdown 輸出: 直接整合到 PKM 系統(Obsidian 等)
- 互動 + 非互動模式: 靈活選擇文章主題
這個專案原本是為 Lman 設計的個人文章生成器:
- 基於 204 篇 Medium 文章分析(2015-2025)
- 風格:理性、深度思考、批判性、第一人稱實戰經驗
- 主題:AI、區塊鏈、創業、產品管理
- 輸出:1,000-1,500 字繁體中文評論
但你可以輕鬆建立自己的風格! 往下看教學 👇
- Node.js (v16+)
- Ollama - 本地 AI 模型運行環境
# macOS brew install ollama # 啟動 Ollama ollama serve # 下載推薦模型 ollama pull qwen2.5:14b ollama pull gpt-oss:20b
# 1. Clone 專案
git clone https://github.com/lmanchu/ai-article-generator.git
cd ai-article-generator
# 2. 建立輸出資料夾
mkdir -p generated cache
# 3. 建立你的寫作風格(見下方教學)
# 或使用範例 persona
cp personas/lman-writing-style.example.json personas/my-style.json
# 4. 更新 config.js 路徑
# 編輯 config.js,設定你的 persona 路徑互動模式(推薦新手):
node index.js非互動模式(快速生成):
# 選擇第 2 則新聞生成
node auto-generate.js 2這是本專案的核心價值!以下是完整流程:
收集你過去寫的文章(Medium, 部落格, LinkedIn 等),至少 20-50 篇。
格式範例:
my-articles/
├── 2023-01-15-ai-trends.md
├── 2023-02-20-blockchain-future.md
├── 2023-03-10-startup-lessons.md
...
使用 AI 分析你的文章,提取以下資訊:
# 使用 Ollama 分析(範例)
ollama run qwen2.5:14b "
分析以下文章的寫作風格,提取:
1. 常用開場方式(前 2 段)
2. 論述結構(小標題?問句?引言?)
3. 語氣特色(理性/感性?批判/中立?)
4. 常用詞彙和短語
5. 結尾方式
[貼上你的文章內容...]
"關鍵分析要素:
- 語氣: 理性/感性?批判/中立?專業/親切?
- 視角: 第一人稱?第三人稱?觀察者?
- 結構: 引言開場?問句引導?小標題?列表?
- 長度: 短篇(500 字)、中篇(1000-1500 字)、長篇(2000+ 字)?
- 主題偏好: 技術?商業?人文?創業?
根據分析結果,建立 personas/my-style.json:
{
"name": "你的名字",
"writing_period": "2020-2025",
"article_count": 50,
"platforms": ["Medium", "部落格"],
"core_style": {
"tone": "你的語氣(如:理性、批判性、幽默)",
"voice": "你的視角(如:第一人稱敘事,分享實戰經驗)",
"approach": "你的寫作手法(如:問題導向,引導讀者思考)",
"length": "你的慣用字數(如:1000-1500 字)"
},
"twitter_curator_style": {
"voice_examples": [
"你的經典語錄 1(會被引用在文章中)",
"你的經典語錄 2",
"你的經典語錄 3",
"你的經典語錄 4(建議 5-10 句)"
]
},
"signature_phrases": {
"opening": [
"你常用的開場 1(如:這幾年觀察下來...)",
"你常用的開場 2(如:有個有趣的現象...)",
"你常用的開場 3"
],
"emphasis": [
"你常用的強調詞 1(如:說穿了,就是...)",
"你常用的強調詞 2(如:關鍵在於...)",
"你常用的強調詞 3"
],
"closing": [
"你常用的結尾 1(如:值得深思。)",
"你常用的結尾 2(如:拭目以待。)",
"你常用的結尾 3"
]
},
"topic_evolution": {
"2020-2022": "早期主題(如:技術教學、工具介紹)",
"2023-2025": "近期主題(如:產品思考、創業心得)"
},
"expertise": {
"primary": ["你的主要專長領域 1", "領域 2"],
"secondary": ["你的次要領域 1", "領域 2"],
"avoid": ["你不擅長或不想寫的主題"]
}
}完整範例請參考 personas/lman-writing-style.example.json。
修改 config.js 來匹配你的興趣和風格:
// 1. 設定你的 persona 路徑
PATHS: {
persona: '/path/to/your/personas/my-style.json',
output: '/path/to/your/output/', // 可設定到 Obsidian vault
// ...
}
// 2. 設定你的興趣關鍵詞
INTEREST_KEYWORDS: {
high: ['你最關心的主題 1', '主題 2', ...], // +3 分
medium: ['次要主題 1', '主題 2', ...], // +2 分
low: ['一般關注的主題'] // +1 分
}
// 3. 設定文章長度(根據你的習慣)
ARTICLE_CONFIG: {
target_word_count: {
min: 800, // 最短字數
ideal: 1200, // 理想字數
max: 1800 // 最長字數
}
}# 生成第一篇文章
node auto-generate.js 1
# 檢查輸出
cat generated/2025-11-14_*.md調整建議:
- 如果文章太短 → 增加
num_predict參數(config.js) - 如果風格不符 → 調整 persona.json 的
voice_examples和signature_phrases - 如果主題不相關 → 調整
INTEREST_KEYWORDS - 如果語氣不對 → 修改
core_style.tone和開場/結尾用語
article-generator/
├── index.js # 主程式(互動模式)
├── auto-generate.js # 非互動模式
├── article-generator.js # 文章生成邏輯
├── news-aggregator.js # 新聞抓取與評分
├── config.js # 配置檔案
├── package.json # NPM 資訊
├── personas/
│ ├── lman-writing-style.example.json # Lman 的範例 persona
│ └── my-style.json # 你的 persona(需自建)
├── generated/ # 生成的文章
├── cache/ # 快取
├── docs/
│ └── HOW-TO-BUILD-PERSONA.md # 詳細教學
└── README.md # 本文件
新聞會根據標題關鍵詞計算相關度(0-10 分):
// config.js - INTEREST_KEYWORDS.high
['AI', 'LLM', 'GPT', 'startup', 'privacy', ...]// config.js - INTEREST_KEYWORDS.medium
['blockchain', 'web3', 'IoT', 'hardware', ...]// config.js - INTEREST_KEYWORDS.low
['tech trend', 'innovation', 'productivity', ...]- HN 分數 > 100: +1 分
- HN 分數 > 300: 再 +1 分
- 炒作類:crypto price, pump, moon
- 垃圾類:follow back, giveaway
- 八卦類:celebrity gossip, scandal
篩選門檻: 相關度 ≥ 5 分才會顯示(可在 config.js 調整)
config.js 中可配置多個備援模型:
AI_CONFIG: {
models: [
'qwen2.5:14b', // 推薦:中文支援最佳
'gpt-oss:20b', // 備援:思考過程詳細
'llama3.2:3b' // 輕量:速度快但品質較低
],
generation_params: {
temperature: 0.7, // 創意度(0.5-0.9)
top_p: 0.9,
num_predict: 2500 // 生成長度
}
}推薦配置:
- 繁體中文:
qwen2.5:14b或qwen2.5:32b - 英文:
gpt-oss:20b或llama3.2:70b - 速度優先:
llama3.2:3b
如果你使用 Obsidian 或其他 Markdown 筆記系統:
// config.js
PATHS: {
output: '/Users/you/Dropbox/PKM-Vault/8-Articles/Generated/',
// ...
}生成的文章會自動同步到你的 PKM 系統,可直接在 Obsidian 中編輯。
- Medium: 需要 Integration Token(2025/1/1 後不再發放新 token)
- Substack: 使用 Puppeteer 瀏覽器自動化(Email-to-Post 已移除)
Step 1: 檢查 Medium Token:
npm run check-mediumStep 2: 發佈到 Substack(Puppeteer 自動化):
# 首次使用(顯示瀏覽器,需登入)
HEADLESS=false npm run publish:substack generated/article.md
# 登入後可用背景模式
npm run publish:substack generated/article.mdStep 3: 發佈到 Medium(如有 token):
# 發佈為草稿
npm run publish:medium generated/article.md --draft
# 直接公開發佈
npm run publish:medium generated/article.md --publishStep 4: 一鍵多平台發佈:
# Substack(Puppeteer 自動化)
HEADLESS=false node publish.js generated/article.md --platforms=substack
# Medium + Substack(需要 Medium token)
node publish.js generated/article.md \
--platforms=medium,substack \
--medium:draft完整設定指南: 參見 PUBLISHING-SETUP.md
注意: Puppeteer 首次使用需安裝依賴:
npm install# 確認 Ollama 運行中
ollama list
# 重啟 Ollama
brew services restart ollama
# 測試連線
curl http://localhost:11434/api/tags可能原因:
- Persona JSON 的
voice_examples不夠精確 - 歷史文章樣本太少(<20 篇)
- Prompt 需要調整
解決方式:
- 收集更多你的歷史文章(建議 50+ 篇)
- 更精確描述你的
signature_phrases - 調整
article-generator.js第 74-158 行的 prompt
解決方式:
// config.js
FETCH_CONFIG: {
min_relevance_score: 3 // 降低門檻(預設 5)
}或擴充你的 INTEREST_KEYWORDS。
解決方式:
// config.js
AI_CONFIG: {
generation_params: {
num_predict: 3000 // 增加生成長度(預設 2500)
}
}生成範例(Lman 風格):
統計:
- 平均生成時間: 1-2 分鐘
- 平均文章長度: 1,200-1,500 字
- 相關度篩選: 30 則新聞 → 3-5 則高相關
- 基本文章生成
- Hacker News 整合
- 個人化 Persona
- PKM 系統整合
- Medium API 自動發佈(需現有 token)✨
- Substack Puppeteer 自動發佈 ✨ NEW
- Medium Puppeteer 自動發佈(給沒有 token 的用戶)
- LinkedIn 自動發佈(BrowserOS)
- Dev.to API 整合
- Twitter 摘要自動推廣
- 多語言支援(目前僅繁中)
- Web UI 界面
- 批次生成模式
- TechCrunch, The Verge 新聞源
歡迎提交 Issue 或 Pull Request!
特別歡迎:
- 更多新聞來源整合(TechCrunch, Product Hunt 等)
- 其他語言的 Persona 範例(英文、日文等)
- 自動發佈功能實作(Medium, LinkedIn API)
- UI/UX 改進
MIT License
Lman - AI & Blockchain Entrepreneur, IrisGo.AI CoFounder
專案由 Iris (Claude Code) 協助開發 🤖
- Ollama - 本地 AI 模型運行環境
- Hacker News - 優質科技新聞來源
- Claude Code - AI 開發助手
- 第一次使用:建議先用範例 persona 測試,再建立自己的風格
- 風格調整:多生成幾篇,逐步調整 persona.json
- 主題選擇:選擇你熟悉的領域新聞,文章品質更高
- 人工編輯:AI 生成的文章建議人工審閱後再發佈
- 持續優化:根據發佈後的反饋,調整 persona 和 config
快速開始: node index.js
問題回報: GitHub Issues
詳細教學: 參見 docs/HOW-TO-BUILD-PERSONA.md