交互式技术博客写作 Skill,8 步引导从选题到发布全流程。支持知乎专栏风和论文风两种风格,内置 AI 生图、URL 抓取、去 AI 味等工具。
Use Skill: tech-blog-writer
cd skill
./install-trae.sh# 抓取任意网页,解析为 LLM 可读的 markdown
python3 skill/tech-blog-writer.py fetch https://example.com -o article.md
# 微信公众号专用(需先用 Chrome DevTools 获取 HTML)
python3 skill/tech-blog-writer.py fetch-html /tmp/page.json "https://mp.weixin.qq.com/s/xxx" -o article.md| 步骤 | 内容 | 说明 |
|---|---|---|
| 1 | 选择工作模式 | 自动(网络获取候选)/ 手动(指定 URL 或主题) |
| 2 | 获取原始内容 | URL → WebFetch → trafilatura 解析 → 原始素材 |
| 3 | 选择文章风格 | 7 种风格 + 模型选择(专用写作模型 / 主 Agent) |
| 4 | 生成初稿 | 按风格硬规则生成,禁止虚构(论文风) |
| 5 | 人工审阅修改 | 用户确认,可反复迭代 |
| 6 | 配图与可视化 | 6a 配色 → 6b 配图方式(AI 生图 / SVG / Mermaid) |
| 7 | 选择发布渠道 | 掘金 / 知乎 / 微信公众号 / 个人博客 / GitHub |
| 8 | 发布文章 | 保存 post.md + 按渠道提供发布指导 |
- 知乎专栏风:强烈第一人称、主观判断、个人经验融入正文(禁止独立反思章节)
- 论文风:客观中立、引用真实案例、严禁虚构个人经历
- 还有深度科普、Newsletter、教程实战、安全分析、工具推荐等风格
支持多后端自动降级:Gemini 3-Pro → gpt-image-2 → Seedream
from scripts.lib.image_gen import build_prompt, generate_image
from pathlib import Path
prompt = build_prompt("文章标题", "核心视觉概念", style="hero")
result = generate_image(prompt, Path("pipeline/2026-05-20"), filename="hero.png")用 trafilatura 将任意网页解析为 LLM 可读的 markdown,支持微信公众号。
双协议封装(OpenAI / Anthropic),自动重试 + fallback + 成本台账。
| 方案 | 主色 | 辅色 | 成功 | 背景 |
|---|---|---|---|---|
| 经典蓝橙(默认) | #3B6FE0 |
#F2A65A |
#5BB47A |
#FAFAF7 |
| 深空暗夜 | #6C5CE7 |
#FDCB6E |
#00B894 |
#2D3436 |
| 薄荷清新 | #00B4D8 |
#FF6B6B |
#2EC4B6 |
#F8F9FA |
| 莫兰迪 | #8D9DB6 |
#D4A373 |
#A3B18A |
#FFFCF2 |
blog/
├── skill/ # Skill 核心
│ ├── SKILL.md # Skill 规则定义(Trae 读取此文件)
│ ├── skill.yaml # Skill 配置
│ ├── tech-blog-writer.py # CLI 入口(fetch / fetch-html)
│ ├── install-trae.sh # Trae IDE 安装脚本
│ └── docs/ # Skill 文档
├── scripts/
│ ├── lib/
│ │ ├── config.py # YAML 配置加载
│ │ ├── log.py # 日志
│ │ ├── llm.py # LLM API 封装(OpenAI / Anthropic)
│ │ ├── image_gen.py # AI 生图(多后端 + 自动降级)
│ │ └── db.py # SQLite(LLM 调用台账)
│ └── fetchers/
│ └── url.py # URL 内容抓取(trafilatura)
├── config/
│ └── models.yaml.example # 模型配置模板
├── style/
│ ├── keywords.yaml # 领域锚词
│ ├── blocklist_l1.txt # 一级禁用词
│ ├── blocklist_l2.txt # 二级谨慎词
│ ├── blocklist_titles.txt # 标题黑名单
│ └── voice_samples.md # 个人语气样本
├── pipeline/ # 每日产物 (.gitignore)
├── .env.example # 环境变量模板
└── pyproject.toml
复制 .env.example → .env,按需填入 API Key:
LLM_API_KEY= # LLM 网关 API Key
GEMINI_API_KEY= # Gemini 生图
OPENAI_IMAGE_API_KEY= # OpenAI 生图config/models.yaml 配置模型分配:
models:
writer: {provider: jd_openai, name: GLM-5.1} # 写作
reasoner: {provider: jd_openai, name: DeepSeek-V4-Flash} # 推理
image:
primary: {provider: jd_openai, name: Gemini 3-Pro-Image-Preview}
fallback: {provider: jd_openai, name: gpt-image-2}- Python >= 3.11
- trafilatura >= 2.0(URL 抓取)
- httpx >= 0.27(HTTP 客户端)
- pyyaml >= 6.0(配置解析)
- python-dotenv(环境变量)
- rich(可选,美化 CLI 界面)
个人项目,暂无 license。