UNPKG

article-writer-cn

Version:

AI 驱动的智能写作系统 - 专注公众号/自媒体文章创作

1,181 lines (915 loc) 29.6 kB
# Article Writer - 技术设计方案 ## 一、架构对比分析 ### 1.1 Novel-Writer 核心架构 ``` novel-writer/ ├── CLI系统 (cli.ts) │ ├── init命令 - 项目初始化 │ ├── upgrade命令 - 版本升级 │ ├── plugins命令 - 插件管理 │ └── check命令 - 环境检查 │ ├── 命令生成系统 (scripts/build/) │ ├── generate-commands.sh - 多平台命令生成 │ └── 模板转换 (Markdown → TOML) │ ├── 插件系统 (src/plugins/) │ ├── PluginManager - 插件加载/注入 │ └── config.yaml - 插件配置规范 │ ├── 斜杠命令 (templates/commands/) │ ├── constitution.md - 创作宪法 │ ├── specify.md - 故事规格 │ ├── clarify.md - 澄清决策 │ ├── plan.md - 创作计划 │ ├── tasks.md - 任务分解 │ ├── write.md - 章节写作 │ └── analyze.md - 综合验证 │ └── 支持文件 ├── memory/ - 记忆系统(constitution等) ├── spec/ - 规范和预设 └── scripts/ - 执行脚本(bash/powershell) ``` **核心优势:** 1. **跨平台命令系统** - 一套模板生成13个平台的命令 2. **插件热加载** - 动态注入命令到各AI平台 3. **脚本预检机制** - 命令执行前验证状态 4. **完善的文件管理** - 分层的配置和数据结构 ### 1.2 Article-Writer 架构设计 ``` article-writer/ ├── CLI系统 (保留并改造) │ ├── content init - 项目初始化 │ ├── content workspace - 工作区管理 │ ├── content materials - 素材库管理 │ └── content upgrade - 版本升级 │ ├── 命令生成系统 (复用) │ └── 保持不变,继续支持13个平台 │ ├── 插件系统 (扩展) │ ├── PluginManager (保留) │ └── 新增插件: │ ├── materials-manager - 素材库管理 │ ├── image-generator - 配图生成 │ └── research-assistant - 信息搜索 │ ├── 斜杠命令 (重构) │ ├── specify.md - 保存需求 │ ├── research.md - 信息搜索 ⭐ │ ├── topic.md - 选题讨论 ⭐ │ ├── collab-doc.md - 协作文档 │ ├── style-learn.md - 风格学习 │ ├── collect.md - 素材搜索 ⭐ │ ├── write.md - 创作初稿 │ ├── audit.md - 三遍审校 ⭐ │ └── images.md - 文章配图 ⭐ │ └── 支持文件 ├── memory/ (改造) │ ├── constitution.md - 写作原则 │ ├── style-reference.md - 风格参考 │ └── personal-voice.md - 个人语料 ├── materials/ (新增核心模块) │ ├── raw/ - 原始数据(CSV/JSON) │ ├── indexed/ - 主题索引 │ └── archive/ - 历史文章 ├── _knowledge_base/ (新增) │ └── 调研结果保存 └── spec/ (简化) └── presets/ - 工作区模板、审校规范 ``` ## 二、核心模块设计 ### 2.1 两层判断系统 #### 第一层: 工作区路由 (根目录 CLAUDE.md) ```typescript // 伪代码逻辑 interface WorkspaceDetection { detectWorkspace(): WorkspaceType { const cwd = process.cwd() // 检测当前目录 if (cwd.includes('workspaces/wechat')) { return 'wechat' } else if (cwd.includes('workspaces/video')) { return 'video' } else if (cwd.includes('workspaces/general')) { return 'general' } else { // 在根目录,询问用户 return 'ask-user' } } loadWorkspaceConfig(type: WorkspaceType): WorkspaceConfig { // 读取对应工作区的 CLAUDE.md const configPath = `workspaces/${type}/CLAUDE.md` return parseConfig(configPath) } } ``` **实现方式:** ```markdown <!-- 根目录 CLAUDE.md --> # 写作助手 - 工作区路由 当用户发起写作任务时: 1. **检测当前目录位置** - 使用 `pwd` 命令获取当前路径 - 判断是否在 `workspaces/wechat|video|general/` 中 2. **加载工作区配置** - 如果在工作区内,读取该工作区的 `CLAUDE.md` - 如果在根目录,询问用户: ``` 请选择工作区: 1. 公众号写作 (wechat) 2. 视频脚本 (video) 3. 通用内容 (general) 或输入新文章主题,我将帮你创建项目 ``` 3. **执行工作区特定流程** - 公众号: 9步流程 + 配图需求 - 视频: 简化流程 + 分镜说明 - 通用: 灵活配置 ``` #### 第二层: 任务类型识别 (工作区 CLAUDE.md) ```markdown <!-- workspaces/wechat/CLAUDE.md --> # 公众号写作工作区 ## 任务类型判断 当用户发起任务时,先判断类型: ### A. 新写作任务(有完整brief) **识别特征:** 用户提供了详细的写作需求/商单brief **执行流程:** 完整9步流程 1. `/specify` 保存brief 2. `/research` 信息搜索 3. `/topic` 选题讨论 ... (完整流程) ### B. 新写作任务(无brief只有需求) **识别特征:** 用户只给了主题或简单描述 **执行流程:** 先补充brief 1. 询问关键信息(目标读者、字数、风格等) 2. 生成brief草稿,让用户确认 3. 保存后进入完整流程 ### C. 修改已有文章 **识别特征:** 用户说"修改XX文章""优化XX部分" **执行流程:** 简化流程 1. 读取原文 (`articles/*/draft.md` 或 `final.md`) 2. 理解修改需求 3. 应用修改并输出对比 ### D. 文章审校/降AI味 **识别特征:** 用户说"审校""降低AI味""检查质量" **执行流程:** 跳转审校命令 1. 直接调用 `/review` 命令 2. 询问审校模式(content/style/detail) 3. 输出修改建议 ### E. 快速咨询 **识别特征:** 用户问问题,但不涉及文件操作 **执行流程:** 直接回答 - 不创建文件 - 不启动完整流程 - 快速响应后结束 ``` ### 2.2 个人素材库系统 #### 数据结构设计 ``` materials/ ├── raw/ # 原始数据(不可编辑) │ ├── jike-all.csv # 即刻动态导出 │ │ 格式: 时间,内容,链接,点赞数 │ ├── weibo-posts.json # 微博导出 │ └── xiaohongshu-notes.json # 小红书笔记 │ ├── indexed/ # 主题索引(手动整理) │ ├── ai-tools.md # AI工具相关素材集合 │ │ 结构: │ │ ## Claude Code使用体验 │ │ - 原始动态: "用了两周,确实比Cursor好" │ │ - 发布时间: 2024-12-10 │ │ - 适用场景: 开头引入、工具对比 │ │ │ ├── product-dev.md # 产品开发经验 │ └── personal-views.md # 个人观点库 │ └── archive/ # 历史文章存档 └── 2024/ ├── 12/ │ └── claude-code-review.md └── 11/ ``` #### 素材搜索实现 **方法A: 搜索原始CSV (推荐)** ```bash # scripts/bash/collect.sh #!/bin/bash MATERIALS_DIR="materials/raw" KEYWORD="$1" # 检查素材库 if [ ! -d "$MATERIALS_DIR" ]; then echo "❌ 素材库未初始化" echo "运行: content materials init" exit 1 fi # 列出可搜索数据源 echo "📚 可用数据源:" ls -1 "$MATERIALS_DIR" # 搜索示例 echo "" echo "💡 搜索示例:" echo " 使用 Grep 工具搜索关键词:" echo " pattern: '高德|扫街榜|地图'" echo " path: 'materials/raw/jike-all.csv'" echo " output_mode: 'content'" echo " -n: true # 显示行号" ``` **命令模板 (`/collect`)** ```markdown --- description: 从个人素材库搜索真实经历和观点 scripts: sh: .specify/scripts/bash/collect.sh --- # 个人素材库搜索 ## 执行流程 ### 1. 分析当前文章主题 从 `articles/*/specification.md` 或用户需求中提取关键词。 **示例:** - 文章主题: "高德扫街榜使用体验" - 提取关键词: ["高德", "扫街榜", "地图", "导航"] ### 2. 搜索原始数据 (方法A - 推荐) 使用 **Grep** 工具搜索 CSV 文件: ``` pattern: "高德|扫街榜|地图" path: "materials/raw/jike-all.csv" output_mode: "content" -i: true # 忽略大小写 -n: true # 显示行号 -C: 2 # 显示上下文(前后2行) ``` **返回示例:** ``` 123: 2024-11-20,高德扫街榜太上头了,连续打卡三天...,https://... 156: 2024-12-01,地图导航还是高德准,百度老出错,https://... ``` ### 3. 查询主题索引 (方法B - 辅助) 如果是常见主题,直接读取已整理的索引: ``` Read file_path="materials/indexed/ai-tools.md" ``` 查找相关章节,例如: ```markdown ## 高德地图使用体验 - **原始动态**: "扫街榜功能让遛弯变成了游戏,每天多走2000步" - **发布时间**: 2024-11-15 - **观点**: 游戏化设计激励效果显著 - **适用场景**: 产品设计案例、用户激励讨论 ``` ### 4. 展示搜索结果 将搜索到的素材展示给用户: ``` 🔍 找到 3 条相关素材: 1️⃣ [2024-11-20] 高德扫街榜使用体验 "连续打卡三天,发现这个功能太上头..." 2️⃣ [2024-12-01] 地图导航对比 "地图导航还是高德准,百度老出错..." 3️⃣ [2024-11-15] 游戏化设计案例 "扫街榜让遛弯变成游戏,每天多走2000步" 💡 我将在以下场景使用这些素材: - 文章开头: 用素材1引入个人经历 - 观点支撑: 用素材3说明游戏化激励效果 - 对比论证: 用素材2增强可信度 是否继续? (yes/no) ``` ### 5. 融入文章 **重要原则:** - ✅ 改写成长文逻辑(扩展、解释、升华) - ✅ 保持真实性(不夸大、不编造) - ❌ 禁止直接复制粘贴 - ❌ 禁止拼接多条动态 **改写示例:** ❌ **直接粘贴** (生硬): > 我在即刻发过:"高德扫街榜太上头了,连续打卡三天"。 ✅ **改写融入** (自然): > 最近迷上了高德的扫街榜功能。这个看似简单的打卡机制,让我每天遛弯都多了一份期待——路过新街道就能点亮地图,连续三天打卡还有徽章奖励。不知不觉,每天多走了2000步。 ## 常见使用场景 ### 场景1: 文章开头引入 **需求:** 用真实经历代替抽象开场 **搜索:** 主题相关的个人体验 **改写:** 扩展成200-300字的引入段落 ### 场景2: 观点支撑 **需求:** 增强观点可信度 **搜索:** 个人评价、使用感受 **改写:** 结合论点展开说明 ### 场景3: 案例展示 **需求:** 提供具体案例 **搜索:** 真实项目经历 **改写:** 补充背景和结果 ### 场景4: 结尾升华 **需求:** 个人洞察总结 **搜索:** 深度思考类动态 **改写:** 提炼核心观点 ## 注意事项 1. **优先使用最新素材** - 时间越近越真实 2. **避免过度引用** - 每篇文章最多使用3-5条素材 3. **保持语境一致** - 素材语气要与文章整体风格匹配 4. **标注时间节点** - 如需要,可说明"去年""最近"等时间信息 5. **尊重隐私** - 如涉及他人,进行匿名化处理 ``` ### 2.3 三遍审校机制 #### 审校模式设计 ```markdown --- description: 三遍审校机制 - 系统化降低AI检测率 argument-hint: [模式:content|style|detail] [文件路径] allowed-tools: Read(//workspaces/**/articles/**), Write(//workspaces/**/articles/**) --- # 三遍审校命令 ## 模式选择 用户可以指定审校模式,或按推荐顺序依次执行: ### 模式1: content (内容审校) **目标:** 确保事实准确、逻辑清晰、结构合理 **检查清单:** - [ ] 事实准确性 - 数据、时间、产品名称无误 - 版本号、功能描述与实际一致 - 引用信息有来源(检查 `_knowledge_base/`) - [ ] 逻辑一致性 - 论点与论据对应 - 前后无矛盾表述 - 因果关系成立 - [ ] 结构合理性 - 开头hook有效(前3段抓人) - 中间论证充分 - 结尾呼应主题 - 无跑题内容 - [ ] 真实性验证 - 所有案例、数据来自真实素材或调研 - 标记可疑的"AI编造"内容 - 检查是否有未溯源的数据 **输出格式:** ``` 📋 内容审校报告 ✅ 通过项 (5项) - 产品名称准确 - 数据有来源(见 _knowledge_base/claude-code-2025-01-15.md) - ... ⚠️ 需修改 (2项) 【位置】第3段第2句 【问题】"显著提升开发效率" - 过于抽象,无数据支撑 【建议】替换为具体数字,如"平均每个项目节省3-5小时" 【来源】检查 materials/ 是否有相关测试数据 【位置】第7段 【问题】时间线混乱 - 先提"去年"再提"最近",实际都是2024年 【建议】统一时间表述 是否应用修改? (yes/no/edit) ``` ### 模式2: style (风格审校 - 降AI味核心) **目标:** 删除AI痕迹,增加真实感和个性化 **检查清单:** - [ ] 删除AI套话 - "在当今时代" - "综上所述" - "值得注意的是" - "随着...的发展" - "不仅...而且..."(高频出现) - [ ] 拆解AI句式 - "不是...而是..."连续出现 → 改为多样化表达 - 长排比句(3个以上) → 拆短或改为并列 - 对称结构过多 → 打破规律 - [ ] 替换书面词汇 - "显著提升" → 具体数字 + 简单动词 - "充分利用""用好" - "进行XX操作" → 直接用动词 - "呈现出XX特征""XX很明显" - [ ] 口语化改造 - 长句拆短(超过30字必拆) - 加入口语词("其实""说实话""你看") - 使用反问句增强互动感 - [ ] 加入真实细节 - 抽象描述 → 具体数字/场景 - 泛泛而谈 → 个人经历 - 中立客观 → 明确态度 - [ ] 增强个性化 - 从 `memory/personal-voice.md` 提取语言习惯 - 加入个人观点(从 `materials/indexed/personal-views.md`) - 使用标志性表达方式 **对比示例库:** ❌ **AI化写法:** > 在当今AI技术飞速发展的时代,编程工具也在不断进化。通过充分利用Claude Code的能力,可以显著提升开发效率,不仅能够加快编码速度,而且能够提高代码质量。值得注意的是,这种提升不是简单的工具替代,而是工作流程的全面优化。 ✅ **自然化改写:** > Claude Code出了两周,我每天都在用。 > > 说实话,比Cursor好用不少。之前每个项目平均要敲5小时代码,现在缩短到2-3小时。不是打字快了,而是AI理解我的意图更准了——一个需求描述,直接生成70%能用的代码。 > > 最明显的变化:再也不用来回改bug了。 **输出格式:** ``` 🎨 风格审校报告 📊 AI特征统计: - 套话出现: 8处 - AI句式: 12处 - 书面词汇: 15处 - 平均句长: 28字 (建议<25字) - 段落过长: 3处 --- ⚠️ 高优先级修改 (AI味浓重) 【位置】第1段 ❌ 原文: "在当今AI技术飞速发展的时代,编程工具也在不断进化..." ✅ 改为: "Claude Code出了两周,我每天都在用。" 【理由】删除套话,用真实使用时长代替空洞开场 【位置】第3段第2句 ❌ 原文: "通过充分利用Claude Code的能力,可以显著提升开发效率" ✅ 改为: "用好Claude Code,每个项目能省3-5小时" 【理由】替换书面词汇 + 加入具体数字 【位置】第5段 ❌ 原文: "不仅能够加快编码速度,而且能够提高代码质量" ✅ 改为: "代码写得快了,bug还少了" 【理由】拆解AI句式,口语化改造 --- 🔧 中优先级修改 (可优化) 【位置】第7段 ❌ 原文: "这种提升不是简单的工具替代,而是工作流程的全面优化" ✅ 改为: "关键不是工具本身,是整个开发流程都变了" 【理由】"不是...而是..."是AI常用句式,且过于书面 【位置】第9段 ❌ 原文: "值得注意的是,功能覆盖度达到90%以上" ✅ 改为: "说实话,我测了50个功能,能用的有45个,覆盖率90%" 【理由】删除套话,加入真实测试细节 --- 💡 个性化建议: 1. 从 materials/indexed/ai-tools.md 找到你的真实评价,融入第4段 2. 在第8段加入个人态度(例如:"我觉得XX很重要") 3. 结尾太中立,建议明确立场(推荐/不推荐) 应用所有修改? (yes/no/edit/skip-to-detail) ``` ### 模式3: detail (细节打磨) **目标:** 优化标点、排版、节奏,提升阅读体验 **检查清单:** - [ ] 句子长度控制 - 统计每句字数 - 标记超过30字的长句 - 建议拆分点 - [ ] 段落长度优化 - 手机阅读友好(3-5行) - 重点信息独立成段(单句成段) - 避免超过100字的段落 - [ ] 标点自然化 - 减少逗号连接(改为句号) - 适度使用感叹号(表达情绪) - 问号互动(1-2个反问句) - [ ] 节奏变化 - 长短句搭配 - 快慢结合(紧凑段落+舒缓段落) - 高潮前的铺垫 **输出格式:** ``` ✨ 细节打磨报告 📏 长度统计: - 平均句长: 23字 ✅ - 最长句: 38字 ⚠️ (第4段第3句) - 平均段长: 65字 ✅ - 最长段: 145字 ❌ (第7段) --- 🔧 需调整 【长句拆分】 ❌ 第4段第3句 (38字): "Claude Code的核心优势在于它不仅能够理解代码上下文,还能根据项目结构提供针对性的建议和优化方案" ✅ 拆分建议: "Claude Code的核心优势是什么? 理解代码上下文。 不止如此,它还能根据项目结构,给出针对性的建议。" 【段落拆分】 ❌ 第7段 (145字,过长): "测试过程中我发现..." ✅ 拆分建议: - 前半部分(测试过程)独立成段 - 中间(发现问题)独立成段 - 后半部分(解决方案)独立成段 【标点优化】 ❌ 第5段: "功能很强大,操作很简单,效率很高,体验很好" ✅ 改为: "功能强大。操作简单。效率高,体验好。" (句号增加节奏感,避免流水账) --- 🎵 节奏建议: - 第2-3段节奏过慢(都是长句),建议加入短句调节 - 第6段可作为高潮段,前面加铺垫(第5段末尾增加悬念) - 结尾太急促,建议补充一段过渡 应用修改? (yes/no) ``` ### 组合执行 用户可以一次性执行全部三遍审校: ``` /review all ``` AI将依次执行 content → style → detail,中间暂停让用户确认修改。 ## 审校后验证 完成三遍审校后,可选: 1. **AI检测验证** - 调用腾讯朱雀API,查看AI浓度 2. **可读性评分** - 基于句长、段长、节奏评分 3. **对比报告** - 生成审校前后对比文档 ``` 📊 审校效果报告 AI检测率: - 审校前: 85% - 审校后: 28% ✅ 可读性评分: - 句长: 8.5/10 (优秀) - 段长: 9/10 (优秀) - 节奏: 7/10 (良好) 修改统计: - 删除套话: 8处 - 拆解AI句式: 12处 - 口语化改造: 15处 - 加入真实细节: 6处 - 拆分长句: 5处 - 优化段落: 3处 ✅ 已达到发布标准 ``` ``` ### 2.4 信息搜索与知识管理 #### `/research` 命令设计 ```markdown --- description: 多渠道信息搜索,保存到知识库 scripts: sh: .specify/scripts/bash/check-network.sh allowed-tools: WebSearch, WebFetch, Write(//knowledge_base/**) --- # 信息搜索与知识管理 ## 执行条件 当满足以下任一条件时,**必须**执行信息搜索: - 涉及新产品/新技术(2024年后发布) - 涉及专业领域知识(需要权威资料) - 用户明确要求调研 - brief中包含"需要真实数据" ## 搜索流程 ### 1. 确定搜索主题 从 brief 或用户需求中提取关键主题: ``` 主题: Claude Code 关键词: Claude Code, Anthropic, AI编程工具, Cursor对比 时间范围: 2024年11月至今 ``` ### 2. 多渠道搜索 按优先级依次搜索: **优先级1: 官方信息** - 产品官网 - 官方博客/文档 - 官方发布公告 **优先级2: 权威媒体** - TechCrunch - The Verge - Hacker News **优先级3: 社区讨论** - Reddit (r/programming, r/MachineLearning) - Twitter/X - GitHub Discussions **优先级4: 中文社区** - 少数派 - V2EX - 掘金 ⚠️ **禁止使用:** 知乎、百度(信息质量低,AI生成内容多) ### 3. 信息验证 对每条信息进行验证: - [ ] 信息源可靠性(官方>媒体>社区) - [ ] 发布时间(越新越好) - [ ] 交叉验证(至少2个来源确认) - [ ] 是否为一手信息 ### 4. 保存到知识库 文件命名格式: `主题-YYYY-MM-DD.md` **模板:** ```markdown # 主题 - 信息调研 ## 元信息 - **调研时间**: 2025-01-15 - **调研人**: AI (Claude) - **下次更新建议**: 2025-02-15 (产品迭代后) - **可信度评分**: 8/10 ## 核心信息 ### 产品基本信息 - **名称**: Claude Code - **开发商**: Anthropic - **发布时间**: 2024年12月 - **版本**: Beta - **来源**: [Anthropic官网](https://...) ### 核心特性 1. **功能A** - 描述: ... - 来源: [TechCrunch报道](https://...) - 验证: ✅ 官方确认 2. **功能B** - 描述: ... - 来源: [Reddit讨论](https://...) - 验证: ⚠️ 社区反馈,未官方确认 ### 竞品对比 | 维度 | Claude Code | Cursor | 来源 | |-----|------------|--------|------| | 价格 | $20/月 | $20/月 | 官网 | | ... | ... | ... | ... | ### 用户评价 **正面反馈:** - "速度比Cursor快" - [Reddit](https://...), 23 upvotes - "理解上下文更准" - [Twitter](https://...), 156 likes **负面反馈:** - "偶尔会卡顿" - [Reddit](https://...), 12 upvotes ## 关键数据 - **用户数量**: 未公开 - **GitHub Stars**: 12.5K (截至2025-01-15) - **定价**: $20/月 (Pro), $0/月 (Free, 限额) ## 信息源列表 1. [Anthropic官方](https://...) - 官方,可靠度10/10 2. [TechCrunch报道](https://...) - 媒体,可靠度9/10 3. [Reddit讨论](https://...) - 社区,可靠度7/10 ## 待补充 - [ ] 实际性能测试数据(需自己测试) - [ ] 与GPT-4o对比(缺少权威对比) - [ ] 企业版定价(未公开) ## 使用建议 写作时可引用: - 产品基本信息(核心特性) - 竞品对比数据 - 真实用户评价(带来源) 避免引用: - 未验证的社区猜测 - 过时信息(2024年11月前) ``` ### 5. 向用户报告 ``` 📚 信息搜索完成 已保存到: _knowledge_base/claude-code-2025-01-15.md 🔍 搜索统计: - 搜索渠道: 5个 - 有效信息: 23条 - 权威来源: 3个 - 社区反馈: 8个 ✅ 高可信度信息 (8条) - Claude Code 核心特性 (官方) - 定价信息 (官方) - TechCrunch 评测 (媒体) ... ⚠️ 中可信度信息 (12条) - Reddit 用户评价 (需交叉验证) - 性能对比 (非官方测试) ... ❌ 缺失信息 (3条) - 企业版定价 (未公开) - 实际性能数据 (需测试) 💡 建议: 1. 可直接使用高可信度信息写作 2. 中可信度信息需标注"据用户反馈" 3. 缺失信息需补充测试或明确说明"未公开" 继续下一步? (yes/查看详情/补充调研) ``` ``` --- ## 三、CLI命令设计 ### 3.1 初始化命令 ```bash # 创建新项目 content init my-article # 创建并选择工作区 content init my-article --workspace wechat # 安装插件 content init my-article --plugins materials-manager,image-generator # 导入已有素材库 content init my-article --import-materials ~/jike-export.csv ``` ### 3.2 工作区管理 ```bash # 初始化工作区 content workspace init wechat "我的公众号" # 切换工作区 content workspace switch video # 查看工作区配置 content workspace config wechat # 列出所有工作区 content workspace list ``` ### 3.3 素材库管理 ```bash # 初始化素材库 content materials init # 导入CSV content materials import ~/Downloads/jike-all.csv --type jike # 建立主题索引 content materials index ai-tools # 统计素材数量 content materials stats ``` --- ## 四、数据流设计 ### 4.1 完整写作流程数据流 ``` [用户需求] ↓ [specify] → _briefs/项目名-brief.md ↓ [research] → WebSearch → _knowledge_base/主题-日期.md ↓ [topic] → 读取: brief + knowledge_base → 输出: 3-4个选题 + 大纲 ↓ [用户选择选题2] ↓ [collab-doc] → _协作文档/项目名-协作文档.md ↓ [collect] → Grep: materials/raw/*.csv → Read: materials/indexed/*.md → 输出: 相关素材列表 ↓ [write] → 读取: brief + knowledge + materials → 输出: articles/001-主题/draft.md ↓ [audit style] → 读取: draft.md → 输出: 修改建议 + 对比 → 更新: draft.md ↓ [audit detail] → 读取: draft.md → 输出: 优化建议 → 更新: draft.md ↓ [images] → 读取: draft.md → 生成: articles/001-主题/images/*.png → 更新: draft.md (插入图片引用) ↓ [发布] final.md ``` ### 4.2 文件依赖关系 ``` articles/001-主题/ ├── specification.md # 依赖: _briefs/*.md ├── tasks.md # 依赖: specification.md ├── draft.md # 依赖: tasks.md + _knowledge_base/*.md + materials/** ├── final.md # 依赖: draft.md (审校后) └── images/ # 依赖: draft.md (分析配图需求) ``` --- ## 五、关键技术实现 ### 5.1 命令模板生成脚本改造 保留 `scripts/build/generate-commands.sh` 的核心逻辑,修改模板路径: ```bash # novel-writer 原逻辑 TEMPLATES_DIR="templates/commands" COMMANDS=( "constitution" "specify" "clarify" "plan" "tasks" "write" "analyze" ) # article-writer 改造 TEMPLATES_DIR="templates/commands" COMMANDS=( "specify" "research" "topic" "collab-doc" "style-learn" "collect" "write" "audit" "images" ) ``` ### 5.2 插件系统扩展 在 `PluginManager` 基础上,新增材料插件支持: ```typescript // src/plugins/manager.ts 扩展 class MaterialsPlugin extends Plugin { async install() { // 1. 复制插件文件 await this.copyFiles([ { source: 'commands/collect.md', target: '.claude/commands/' }, { source: 'commands/materials-import.md', target: '.claude/commands/' } ]) // 2. 初始化素材库目录 await fs.ensureDir('materials/raw') await fs.ensureDir('materials/indexed') await fs.ensureDir('materials/archive') // 3. 创建示例索引 await this.createSampleIndex() } async createSampleIndex() { const template = `# AI工具相关素材 ## 使用说明 将你的真实经历、观点按主题整理在这里,AI写作时可以引用。 ## Claude Code 使用体验 - **原始动态**: "用了两周,确实比Cursor好" - **发布时间**: 2024-12-10 - **观点**: 理解上下文更准,速度快 - **适用场景**: 开头引入、工具对比 ## Cursor 使用问题 - **原始动态**: "Cursor偶尔会卡顿,尤其是大项目" - **发布时间**: 2024-11-20 - **观点**: 稳定性待提升 - **适用场景**: 对比论证、问题分析 ` await fs.writeFile('materials/indexed/ai-tools.md', template) } } ``` --- ## 六、性能优化 ### 6.1 素材库搜索优化 **问题:** CSV文件过大(>10MB)时,Grep搜索可能较慢 **解决方案:** 1. **分片索引** - 每月一个CSV文件,减少单文件大小 2. **SQLite缓存** - 首次导入时建立SQLite索引,加速后续搜索 3. **热门主题预加载** - 常用主题提前提取到indexed/ ```typescript // materials/indexed/.cache/index.db (SQLite) CREATE TABLE materials ( id INTEGER PRIMARY KEY, source TEXT, -- 'jike' | 'weibo' content TEXT, -- 动态内容 publish_time TEXT, keywords TEXT, -- 提取的关键词 theme TEXT -- 关联的主题 ); CREATE INDEX idx_keywords ON materials(keywords); CREATE INDEX idx_theme ON materials(theme); ``` ### 6.2 命令执行缓存 对于调研类命令,避免重复搜索: ```typescript // _knowledge_base/.cache/search-history.json { "claude-code": { "last_search": "2025-01-15", "file": "claude-code-2025-01-15.md", "freshness": "fresh" // fresh | stale | expired } } ``` AI执行 `/research` 时,先检查缓存: - fresh (< 7天) - 直接使用 - stale (7-30天) - 询问是否更新 - expired (> 30天) - 强制重新搜索 --- ## 七、测试策略 ### 7.1 单元测试 ```typescript // tests/commands/collect.test.ts describe('MaterialsSearch', () => { it('should search CSV by keywords', async () => { const result = await materialsSearch('高德|扫街榜') expect(result.length).toBeGreaterThan(0) expect(result[0]).toHaveProperty('content') }) it('should fallback to indexed files', async () => { const result = await materialsSearch('ai-tools') expect(result.source).toBe('indexed') }) }) ``` ### 7.2 集成测试 ```bash # tests/integration/full-workflow.sh #!/bin/bash # 完整流程测试 content init test-article --workspace wechat cd test-article/workspaces/wechat # 模拟用户输入 echo "写一篇关于Claude Code的文章" | claude /specify claude /research claude /topic # 选择选题1 claude /collect claude /write claude /review style claude /images # 验证输出 test -f articles/001-claude-code/final.md || exit 1 echo "✅ Full workflow test passed" ``` --- ## 八、部署与发布 ### 8.1 NPM包发布 ```json { "name": "article-writer-cn", "version": "0.1.0", "bin": { "content": "dist/cli.js" }, "scripts": { "build": "tsc && npm run build:commands", "build:commands": "bash scripts/build/generate-commands.sh" } } ``` ### 8.2 用户安装流程 ```bash # 安装 npm install -g article-writer-cn # 初始化项目 content init my-blog --workspace wechat # 导入素材库 cd my-blog content materials import ~/Downloads/jike-export.csv # 在AI助手中使用 # Claude Code: /specify, /research, /topic... ``` --- **技术方案完成,可进入开发阶段!**