Skip to content

基於個人寫作風格的 AI 科技評論文章生成器 - 用 AI 寫出你自己的聲音

Notifications You must be signed in to change notification settings

lmanchu/ai-article-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📝 AI Article Generator

基於個人寫作風格的 AI 科技評論文章生成器。從 Hacker News 自動抓取科技新聞,使用本地 AI 模型生成你專屬風格的評論文章。

用 AI 寫出你自己的聲音,而不是聽起來像 AI。

✨ 特色

  • 個人化風格: 基於你的歷史文章分析,生成符合你寫作風格的內容
  • 智能新聞聚合: 自動從 Hacker News 抓取並評分新聞相關度
  • 本地 AI 生成: 使用 Ollama 本地模型,保護隱私
  • Markdown 輸出: 直接整合到 PKM 系統(Obsidian 等)
  • 互動 + 非互動模式: 靈活選擇文章主題

🎯 使用案例

這個專案原本是為 Lman 設計的個人文章生成器:

  • 基於 204 篇 Medium 文章分析(2015-2025)
  • 風格:理性、深度思考、批判性、第一人稱實戰經驗
  • 主題:AI、區塊鏈、創業、產品管理
  • 輸出:1,000-1,500 字繁體中文評論

但你可以輕鬆建立自己的風格! 往下看教學 👇


🚀 快速開始

前置需求

  1. Node.js (v16+)
  2. 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

🎨 建立你的寫作風格(重要!)

這是本專案的核心價值!以下是完整流程:

Step 1: 收集你的歷史文章

收集你過去寫的文章(Medium, 部落格, LinkedIn 等),至少 20-50 篇

格式範例

my-articles/
├── 2023-01-15-ai-trends.md
├── 2023-02-20-blockchain-future.md
├── 2023-03-10-startup-lessons.md
...

Step 2: 分析你的寫作風格

使用 AI 分析你的文章,提取以下資訊:

# 使用 Ollama 分析(範例)
ollama run qwen2.5:14b "
分析以下文章的寫作風格,提取:
1. 常用開場方式(前 2 段)
2. 論述結構(小標題?問句?引言?)
3. 語氣特色(理性/感性?批判/中立?)
4. 常用詞彙和短語
5. 結尾方式

[貼上你的文章內容...]
"

關鍵分析要素

  • 語氣: 理性/感性?批判/中立?專業/親切?
  • 視角: 第一人稱?第三人稱?觀察者?
  • 結構: 引言開場?問句引導?小標題?列表?
  • 長度: 短篇(500 字)、中篇(1000-1500 字)、長篇(2000+ 字)?
  • 主題偏好: 技術?商業?人文?創業?

Step 3: 建立 Persona JSON

根據分析結果,建立 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

Step 4: 更新 config.js

修改 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      // 最長字數
  }
}

Step 5: 測試生成

# 生成第一篇文章
node auto-generate.js 1

# 檢查輸出
cat generated/2025-11-14_*.md

調整建議

  • 如果文章太短 → 增加 num_predict 參數(config.js)
  • 如果風格不符 → 調整 persona.json 的 voice_examplessignature_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 分):

高優先級 (+3 分)

// config.js - INTEREST_KEYWORDS.high
['AI', 'LLM', 'GPT', 'startup', 'privacy', ...]

中優先級 (+2 分)

// config.js - INTEREST_KEYWORDS.medium
['blockchain', 'web3', 'IoT', 'hardware', ...]

低優先級 (+1 分)

// config.js - INTEREST_KEYWORDS.low
['tech trend', 'innovation', 'productivity', ...]

熱度加成

  • HN 分數 > 100: +1 分
  • HN 分數 > 300: 再 +1 分

自動排除 (-5 分)

  • 炒作類:crypto price, pump, moon
  • 垃圾類:follow back, giveaway
  • 八卦類:celebrity gossip, scandal

篩選門檻: 相關度 ≥ 5 分才會顯示(可在 config.js 調整)


⚙️ AI 模型選擇

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:14bqwen2.5:32b
  • 英文: gpt-oss:20bllama3.2:70b
  • 速度優先: llama3.2:3b

🚀 進階功能

整合 PKM 系統

如果你使用 Obsidian 或其他 Markdown 筆記系統:

// config.js
PATHS: {
  output: '/Users/you/Dropbox/PKM-Vault/8-Articles/Generated/',
  // ...
}

生成的文章會自動同步到你的 PKM 系統,可直接在 Obsidian 中編輯。

自動發佈到 Medium & Substack(✅ 已實作)

⚠️ 2025 年更新:

  • Medium: 需要 Integration Token(2025/1/1 後不再發放新 token)
  • Substack: 使用 Puppeteer 瀏覽器自動化(Email-to-Post 已移除)

Step 1: 檢查 Medium Token:

npm run check-medium

Step 2: 發佈到 Substack(Puppeteer 自動化):

# 首次使用(顯示瀏覽器,需登入)
HEADLESS=false npm run publish:substack generated/article.md

# 登入後可用背景模式
npm run publish:substack generated/article.md

Step 3: 發佈到 Medium(如有 token):

# 發佈為草稿
npm run publish:medium generated/article.md --draft

# 直接公開發佈
npm run publish:medium generated/article.md --publish

Step 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

🛠️ 故障排除

問題 1: Ollama 連線失敗

# 確認 Ollama 運行中
ollama list

# 重啟 Ollama
brew services restart ollama

# 測試連線
curl http://localhost:11434/api/tags

問題 2: 生成的文章風格不符

可能原因

  1. Persona JSON 的 voice_examples 不夠精確
  2. 歷史文章樣本太少(<20 篇)
  3. Prompt 需要調整

解決方式

  1. 收集更多你的歷史文章(建議 50+ 篇)
  2. 更精確描述你的 signature_phrases
  3. 調整 article-generator.js 第 74-158 行的 prompt

問題 3: 新聞相關度太低

解決方式

// config.js
FETCH_CONFIG: {
  min_relevance_score: 3  // 降低門檻(預設 5)
}

或擴充你的 INTEREST_KEYWORDS

問題 4: 文章生成過短

解決方式

// config.js
AI_CONFIG: {
  generation_params: {
    num_predict: 3000  // 增加生成長度(預設 2500)
  }
}

📊 成果範例

生成範例(Lman 風格):

統計

  • 平均生成時間: 1-2 分鐘
  • 平均文章長度: 1,200-1,500 字
  • 相關度篩選: 30 則新聞 → 3-5 則高相關

🎯 Roadmap

  • 基本文章生成
  • 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 開發助手

💡 使用提示

  1. 第一次使用:建議先用範例 persona 測試,再建立自己的風格
  2. 風格調整:多生成幾篇,逐步調整 persona.json
  3. 主題選擇:選擇你熟悉的領域新聞,文章品質更高
  4. 人工編輯:AI 生成的文章建議人工審閱後再發佈
  5. 持續優化:根據發佈後的反饋,調整 persona 和 config

快速開始: node index.js

問題回報: GitHub Issues

詳細教學: 參見 docs/HOW-TO-BUILD-PERSONA.md

About

基於個人寫作風格的 AI 科技評論文章生成器 - 用 AI 寫出你自己的聲音

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors