# 宇之然 · 项目进度总览 > 本文件为项目进度唯一真理源,所有进度信息以此为准。 > 其他文档中的进度描述一律以本文为准。 **最后更新**:2026-06-23 (v25) --- ## 一、项目总览 | 项目 | 内容 | |------|------| | 品牌 | 宇之然 — 科技沟通万物,愿世间百态回归自然 | | 技术栈 | FastAPI + SQLAlchemy + PostgreSQL 16 + Vue 3 (CDN) + Element Plus | | 平台服务 | 运行中 (端口 8001) | | 策略阶段 | 全球-本土对比研究(2026-04-15 升级) | | Git 提交 | 170 commits · 4 tags (v1.0.0~v1.0.4) · main 分支 | --- ## 二、里程碑完成情况 | 里程碑 | 说明 | 计划 | 实际 | 状态 | |--------|------|------|------|------| | M1 | 项目框架搭建完成 | 2026-04-10 | 2026-04-10 | ✅ | | M2 | 首批选题确定 | 2026-04-12 | 2026-04-10 | ✅ | | M3 | 首篇文章发布 | 2026-04-14 | 2026-04-14 | ✅ | | M4 | 首月发布4篇 | 2026-05-10 | 2026-06-18 | ✅ 4篇完成 | --- ## 三、发布记录 | 编号 | 标题 | 日期 | 平台 | 状态 | |------|------|------|------|------| | 001 | 种菜一年,焦虑降了43%:我在阳台治愈了自己 | 2026-04-14 | 知乎/微信/小红书 | ✅ 已发布 [知乎链接](https://zhuanlan.zhihu.com/p/2026998296120411553) | | TOPIC-BBB1CC | 城市农业新趋势:东京垂直农场与上海阳台种菜对比研究 | 2026-04-21 | 知乎/微信/小红书 | ✅ 已发布 | | A01 | 远程工作2026中国指南:从"不可能"到"可行"的路径图 | 2026-04-23 | 知乎/微信/小红书 | ✅ 已发布 | --- ## 四、模块进度 ### 4.1 平台系统 | 模块 | 状态 | 说明 | |------|------|------| | 后端 API (auth/topics/articles/publishing/calendar/metrics/assets/tasks/platform_config/admin) | ✅ 完成 | 核心 11 个 API 模块,JWT 认证 | | 扩展 API (cases/audit/llm_configs/system_configs/optimizer_logs/task_logs/task_configs) | ✅ 完成 | 新增案例库、审计、LLM配置、任务配置、任务运行记录模块 | | 前端页面 (仪表盘/选题/日历/数据/素材/任务/平台/系统管理/用户/日志/文章) | ✅ 完成 | Vue 3 + Element Plus SPA | | 数据库 (PostgreSQL 16) | ✅ 运行中 | `yzr_nr` 库 | | 服务 | ✅ 运行中 | 端口 8001 | | 数据库迁移 (SQLite→PostgreSQL) | ✅ 完成 | 2026-05-08 | | PWA 离线支持 | ✅ 完成 | manifest.json + Service Worker + 离线页面 | | articles 表 + 数据迁移 | ✅ 完成 | 48 篇文章从文件系统迁入 DB,释放文件已清理 | ### 4.2 内容生产 | 模块 | 状态 | 说明 | |------|------|------| | 选题库 | ✅ 完成 | 10 个旧选题 (001~010) + 20 个新选题 (4 大支柱) | | 文章草稿 (001 系列) | ✅ 完成 | 大纲/初稿/优化版/微信版 四版齐备 | | 配图生产 | ✅ 完成 | 10 张 SVG + 10 张 PNG,含压缩版 | | 合规审查 | ✅ 完成 | 评分 9.2/10,引用来源补充完成 | | 多平台发布 (001 / BBB1CC / A01) | ✅ 完成 | 知乎/微信/小红书 三平台均已发布 | | 银发科技适配指南 | ⏳ 写作中 | drafts 中 302 行初稿 | | F01 AI写作实战 | ✅ 已入库 | 三平台文章已存入 articles 表,待审查通过后发布 | | F02 平台差异策略 | ✅ 已入库 | 三平台文章已存入 articles 表,待审查通过后发布 | ### 4.3 自动化系统 | 脚本 | 状态 | 说明 | |------|------|------| | publish_to_zhihu.sh | ✅ 可用 | 知乎自动发布 | | publish_to_wechat_mp.sh | ✅ 可用 | 微信公众号自动发布 | | generate_images.py / image_generator.py | ✅ 可用 | SVG + PNG 配图生成 | | compliance_checker.py | ✅ 可用 | 合规审查(敏感词/平台规则/品牌规范) | | compliance_optimizer.py | ✅ 重构 | 移除 manual_review,改为迭代LLM修复(最多3次),合规分回写入Topic;解硬编码 provider,改从 env 读取;关键词过滤从宽泛改为精准 | | creator.py / writer.py / outline.py / research.py | ✅ 优化 | 全链路LLM提示词优化(SEO/平台适配/真人感) | | collector.py / collector_db_integration.py | ✅ 可用 | 趋势采集 | | wecom_notifier.py | ✅ 可用 | 企业微信通知 | | db_helper.py | ✅ 扩展 | update_topic_status 支持保存 compliance_score | | search_utils.py | ✅ 重构 | 移除 _call_mcp(opencode MCP),新增 360/搜狗/微信搜索(免 API Key),百度千帆日限提升至 200 | | opencode_search.py / mcp_search_server.py | ❌ 已删除 | opencode 搜索配额耗尽,替换为 360/搜狗/微信等免 Key 源 | | web_search.py | ✅ 保留 | 本地缓存 + Bing 搜索(闲置备用) | ### 4.4 流水线流程 | 步骤 | 触发方式 | 说明 | |------|---------|------| | 内容采集 | 定时 01:30 | 热点趋势采集→生成选题建议→存入选题库 | | 内容创作 | 手动点击 / 定时 03:30 (原 02:00) | 研究→大纲→撰写文章→合规审查→存入 articles 表 | | 合规审查 | 手动点击 / 定时 04:30 (原 03:00) | 从 articles 表读取 draft→合规检查→LLM迭代修复(最多3次)→状态→待发布 | | 信息源优化 | 定时 05:00 | AI评估采集类别与信息源配置,给出调整建议 | | 指标同步 | 定时 06:00 | 同步统计数据 | | 发布 | 手动点击 | 仅待发布状态可选 | --- ## 五、当前任务队列 ### ✅ 已完成 | 任务 | 完成日期 | 备注 | |------|---------|------| | 审查流程优化(移除 manual_review) | 2026-05-14 | 改为迭代LLM修复(最多3次),合规分回写Topic | | 内容采集加入定时调度 | 2026-05-14 | scheduler 新增 scheduled_collect 01:30 | | 全链路LLM提示词优化 | 2026-05-14 | 覆盖trends/topic_selector/research/outline/writer/nvidia_client/compliance 共8文件≈24个提示词,增强SEO/平台推荐/真人感 | | 导航布局重构 | 2026-05-16 | navbar + navigation 合并为 uni-nav,单行 top-bar 自适应 PC/H5,10 页迁移完成 | | 文章管理页面 (articles.html) | 2026-05-16 | 新增 articles API (list/detail/delete) + 完整管理页面,支持筛选/搜索/预览/删除 | | CSS架构统一整合 | 2026-05-16 | reset/body/layout/card/page-header/filter/toolbar 移入 theme-modern.css(86→127行),10页内联CSS总量从~660行降至~400行;preview对话框CSS归一化;删除 dead JS;index.html双style块合并为单一亮色主题 | | Phase 1.1 配图集成到创作流水线 | 2026-05-16 | image_generator.py 支持 --topic-id 参数, DB读写图片路径; Article 新增 images JSON字段+迁移; creator.py 新增配图步骤; API GET /api/articles/{topic_id}/images; 文章页预览显示封面图 | | Phase 1.3 统一前端体验 | 2026-05-16 | users.html 补 loading+空状态; index.html 渲染loadingStats+fetchModules错误提示; metrics.html 渲染loadingDashboard | | Phase 2.1 发布审批 UI | 2026-05-16 | 后端 MultiPublishRequest 多平台发布 API; 前端发布确认弹窗+平台勾选 | | Phase 2.2 日历关联文章状态 | 2026-05-16 | 后端 enrich_entry 添加 topic_status+platform_icon; 前端日历卡片显示平台图标+Topic状态标签; 修复 el-tag 缺少闭合 | | emoji 替换为 Element Plus 图标 | 2026-05-16 | icon-components.js 注册 25 个 SVG 图标组件; 11 页 emoji → `` 批量替换 | | H5 卡片布局补全 | 2026-05-16 | metrics.html 热门选题/平台对比/选题推荐三表加 H5 卡片视图 | | Phase 3.1 平台数据对接 | 2026-05-16 | scripts/sync_metrics.py (估计算法); scheduler 新增 scheduled_metrics_sync 06:00 | | Phase 3.2 数据看板增强 | 2026-05-16 | Chart.js 集成: 趋势折线图/状态环形图/平台对比柱状图 | | Phase 4 多租户隔离 (JWT+API 层) | 2026-05-16 | org_id 注入 JWT payload; 12 个 API 模块添加 org 过滤; 创建选题自动继承用户 org; 管理端组织 CRUD | | Phase 4 前端多租户 | 2026-05-16 | admin.html 新增组织管理标签页 (列表/创建/编辑/删除); users.html 增加组织列+H5卡片显示 | | Phase 4 预置数据修复 | 2026-05-16 | initial_data.py 管理员用户添加 org_id; opencode-go LLM config 补全 user_prompt_template | | PlatformConfig 模型字段扩展 | 2026-05-17 | 增加 requires_image/image_count_min/image_count_max/image_width/image_height/min_words/max_words; schemas/initial_data/前端表单同步; database.py 迁移 | | 微信公众号正文配图 | 2026-05-17 | writer.py wechat 分支在 h1 后插入 `` 占位 | | 合规检查从 DB 读平台规则 | 2026-05-17 | compliance_checker.py 接受 platform_config 参数; compliance_optimizer.py 从 DB 加载平台配置传入 checker | | 登录页居中修复 | 2026-05-18 | login.html body 添加 login-body 类 | | 模块状态重复修复 | 2026-05-18 | system.py 重命名/去重,状态改查 jobs 而非日志文件 | | 仪表盘"近期计划"卡片 | 2026-05-18 | index.html 新增日历 7 天预告卡片 | | 日志/用户合并到系统管理 | 2026-05-18 | admin.html 增加用户管理+运行日志标签页;uni-nav 10→8 项 | | 日历页增强 | 2026-05-18 | 指南横幅/即将到来列表/空状态/操作提示 | | 任务页优化+分页 | 2026-05-18 | 6个定时任务/topic_title/STAGE_NAMES/前端分页 | | 选题页前端分页 | 2026-05-18 | paginatedTopics computed + el-pagination | | 后端 tasks API 改造 | 2026-05-18 | offset 参数 + topic_title 字段 | | admin 全标签页分页 | 2026-05-18 | 案例/类别/信息源/组织/用户 5 标签统一分页(10条/页)+总数显示 | | 选题预览修复 | 2026-05-18 | 补全 startEdit/cancelEdit/saveContent 方法;修复滚动条;strip .tags | | 任务状态卡死修复 | 2026-05-18 | 后台线程改用独立 DB session;前端 5s 自动轮询;中间进度 30% 显示 | | 预览平台切换修复 | 2026-05-18 | 补全 switchPlatform 方法 | | 超时任务自动清理 | 2026-05-18 | 启动时标记运行>1h 任务为 failed;已清理 21 个卡死任务 | | metrics 冗余统计移除 | 2026-05-18 | 删除与仪表盘重复的 4 个概览卡片 | | writer max_tokens 提升 | 2026-05-19 | 标题/标签 max_tokens 500→1000,修复推理模型思考链占用导致输出截断 | | 预览滚动条修复 | 2026-05-19 | 改用 height:68vh 替代 flex+calc,避免 Element Plus 对话框内滚动冲突 | | 定时任务 DB 化 | 2026-05-22 | TaskLog 新增 module_id/error_trace/triggered_by/result_data;TaskConfig 模型新建含 params/schedule/enabled;scheduler.py 全 7 个任务执行前后写 TaskRun;modules/status 从 DB 读取 | | 平台配置弹窗修复 | 2026-05-22 | el-dialog 移入 tab 内部(与表格同级)解决响应式问题;表单字段补全 | | AI 思考内容清洗 | 2026-05-22 | 新建 content_cleaner.py 集中管理清洗规则;writer.py/compliance_optimizer.py 统一引用;THINKING_PATTERNS 增强;strip_ai_preface 处理代码围栏块 | | 复制正文去噪音 | 2026-05-22 | copyContent 只提取 p/h1-h4/li 元素,去 style/svg/script/img | | platforms.html 入口合并 | 2026-05-22 | uni-nav 移除"平台"独立入口;admin.html 恢复"平台配置"tab 加启用中/全部筛选 | | opencode_search.py 日志 | 2026-05-22 | 补 FileHandler + StreamHandler,解决管理后台显示"从未运行" | | scheduler.json 导入修复 | 2026-05-22 | 补 import json,修复 sources(05:00) 执行时报错阻断 metrics(06:00) | | Scheduler 日志修复(僵尸行) | 2026-05-28 | _log_task 始终 INSERT 新行,所有 _run_* 保存 log_id 后 UPDATE 同一行,消除重复 running 状态 | | Systemd 服务化 | 2026-05-28 | yzr-platform.service(Restart=always,崩溃自动恢复);单 worker(--workers 1)防调度器冲突;Type=exec + KillMode=control-group 防僵尸进程 | | LLM 提供商量换 + 任务级模型选择 | 2026-05-28 | opencode-go 换 nvidia qwen3.5-397b-a17b(默认)+ sensenova deepseek-v4-flash(合规审查);llm_configs 加 is_default;所有 _run_* 方法开头调用 _set_task_llm_provider 设置 LLM_TASK_PROVIDER | | 合规审查修复 | 2026-05-28 | compliance_optimizer.py 移除硬编码 provider;补 import os(之前导致 NameError);关键词过滤从宽泛改为精准,避免误拦正常内容 | | 搜索提供商重构 | 2026-05-28 | 移除 opencode MCP(配额耗尽),新增 360/搜狗/微信搜索(免 Key),百度千帆日限 50→200 | | opencode 冗余代码清理 | 2026-06-02 | 删除 opencode_search.py / mcp_search_server.py / _call_mcp / 前后端所有 opencode/MCP 引用;禁用搜索缓存定时任务 | | 任务抽屉产出记录优化 | 2026-06-03 | drawer 产出结果 tab 优先显示日志消息(last_message),过滤 None/空值;修复 tasks.py 因 opencode 清理导致的 SyntaxError;清理 DB 中旧搜索缓存的 56 条 TaskLog + 1 条 TaskConfig | | Hermes gateway 用户级服务恢复 | 2026-06-04 | 系统级服务 → 用户级(MemoryMax=1G 生效);删除 system 级文件;linger + default.target.wants 开机自启 | | v-cloak 修复 Vue 模板闪烁 | 2026-06-04 | 9 页 `
` + `theme-modern.css` 的 `[v-cloak]` 规则,消除原始模板代码闪烁 | | **sensenova 多模型 + 模型级 rate limit** | **2026-06-04** | `LLMConfig` 加 `rate_limit`/`rate_limit_window_minutes`;seed 3 模型:deepseek-v4-flash(500次/5h)、6.7-flash-lite(1500次/5h)、u1-fast(1500次/5h);进程内 rate limiter;`LLM_TASK_MODEL` 环境变量实现任务级模型选择;`ai_image_generator.py` 已固定用 `sensenova-u1-fast` | ### ✅ 已完成 | 任务 | 完成日期 | 备注 | |------|---------|------| | GEO/SEO 结构化元数据注入 | 2026-06-09 | writer.py 的 `inject_geo_metadata()` 向 HTML 注入 JSON-LD Article schema、meta description/keywords、OG tags | | 大纲提示词 SEO 关键词增强 | 2026-06-09 | outline.py 新增 `_extract_seo_keywords()` 从研究笔记提取关键词;outline prompt 加入 GEO 数据引用要求 | | 搜索排名追踪 | 2026-06-09 | `SearchRanking` 模型(文章ID/关键词/排名位置/AI引用);`rank_tracker.py` 定时任务(每日 07:00)查 Bing 排名;`/api/seo/rankings` API;admin.html 新增"搜索排名"tab | | rank_tracker AI 引用检测 | 2026-06-18 | `_check_ai_citation()` 用 LLM 检测 Bing AI/百度 AI/Perplexity 引用 | | admin.html 任务管理 tab | 2026-06-18 | TaskConfig 参数编辑 + TaskLog 时间轴 (el-timeline) | | M4 第4篇文章发布 | 2026-06-18 | 发布 循环消费新物种 + 端侧AI隐私实战,累计 4 篇达首月目标 | | 导航 bug 修复(仪表盘→index.html) | 2026-06-18 | DB menu 中"仪表盘"path 从 `/` → `index.html`,解决点导航跳转 landing 页的问题 | | Landing 页 OG 图片创建 | 2026-06-18 | `/automation/images/og-landing.png`(1200x630 PNG,62KB);之前 404 | | Landing 页 GitHub 链接修正 | 2026-06-18 | `your-org` → `github.com` | | v23 全部功能验收 | 2026-06-18 | 12 页 200 OK、org_id 隔离生效、RBAC(require_role)11路由、菜单7项正确、factory/insights 新页、dashboard 重设计 | ## 十一、外推营销系统(v24 · 2026-06-21) ### 从「内容生产」到「外部推广」 **背景**:平台此前只覆盖平台内生产的内容的 SEO/GEO 优化,无法对用户已有的外部网站、公众号、小程序等做 SEO 推广。v24 新增完整的外部推广模块。 ### 新增数据模型(6 张表) | 模型 | 表名 | 说明 | |------|------|------| | `ExternalProduct` | `external_products` | 外部推广产品(website/article/wechat_account/miniprogram)| | `PromotionCampaign` | `promotion_campaigns` | 推广活动,关联产品和关键词 | | `CampaignKeyword` | `campaign_keywords` | 关键词跟踪(搜索量/难度/排名)| | `SEOAudit` | `seo_audits` | SEO 审计报告(6 维度评分)| | `KeywordRanking` | `keyword_rankings` | 多引擎关键词排名记录 | | `OptimizationTask` | `optimization_tasks` | AI 生成的优化建议 | ### API 端点(20 个) | 端点 | 功能 | |------|------| | `GET/POST/PUT/DELETE /api/external/products` | 产品 CRUD | | `GET/POST/PUT/DELETE /api/external/campaigns` | 活动 CRUD | | `GET/POST/PUT/DELETE /api/external/keywords` | 关键词 CRUD | | `GET /api/external/audits` | SEO 审计记录列表 | | `GET /api/external/audits/{id}` | 审计详情(含优化建议)| | `GET /api/external/rankings` | 关键词排名列表 | | `GET /api/external/rankings/overview` | 排名概览统计 | | `GET /api/external/optimization-tasks` | 优化建议列表 | | `PATCH /api/external/optimization-tasks/{id}` | 更新任务状态 | | `GET /api/external/overview` | 外推营销总览 | ### SEO 审计脚本 `scripts/seo_auditor.py` — 自动抓取目标网站并分析: | 维度 | 权重 | 检测项 | |------|------|--------| | Meta 标签 | 20% | title/description/keywords/OG tags | | 标题结构 | 15% | H1/H2 存在性、层级连续性 | | 内容质量 | 25% | 字数、图片 alt、关键词密度 | | 性能 | 10% | 渲染阻塞资源、图片尺寸 | | 链接 | 10% | 内链/外链/断链/nofollow | | 移动端 | 20% | viewport、响应式、字号 | 审计结果自动保存到 DB,生成可追踪的 OptimizationTask。 ### 关键文件变更 | 文件 | 改动 | |------|------| | `platform/backend/app/models.py` | 新增 6 个模型(ExternalProduct/PromotionCampaign/CampaignKeyword/SEOAudit/KeywordRanking/OptimizationTask)| | `platform/backend/app/schemas.py` | 新增 18 个 Pydantic schema 类 | | `platform/backend/app/api/external_promotion.py` | **新建** — 20 个 API 端点 | | `platform/backend/app/main.py` | 注册 external_promotion router | | `platform/frontend/campaigns.html` | **新建** — 外推营销 SPA 页面(6 Tab)| | `platform/frontend/uni-nav.js` | 导航增加「外推营销」入口 | | `scripts/seo_auditor.py` | **新建** — SEO 审计自动化脚本 | --- ## 十二、内容策略聚焦改造(v25 · 2026-06-23) ### 从「6领域分散」到「3领域聚焦」 **背景**:此前内容覆盖可持续生活、数字游民、个人成长等 6 个领域,资源分散、品牌辨识度低。v25 聚焦「宇之然」品牌核心方向:AI 与前沿科技。 **聚焦的 3 个领域:** | 领域 | 方向 | 覆盖话题 | |------|------|---------| | AI与效率 🤖 | AI 工具、工作流、效率方法 | AI工具实测、AI前沿资讯、效率方法论 | | 科技人文 🔬 | AI 伦理、科技反思 | 数据隐私、人机关系、数字生活反思 | | 未来工作方式 💼 | 远程工作、职业转型 | AI时代职场、一人企业、技能升级 | ### Phase 1 — 代码改造(6 个文件) | 文件 | 改动 | |------|------| | `initial_data.py` | TopicField 从 6 个缩减为 3 个;CollectorCategory 从 8 个环保类改为 5 个 AI/科技类;PlatformConfig allowed_tags 全部替换为 AI/效率/科技标签 | | `prompt_loader.py` | `sources_optimization` 提示词从"可持续生活领域"改为"AI与科技人文领域" | | `config/sources.yaml` | 全部信息源替换为 AI/科技相关(36氪RSS、少数派RSS、5 组 AI 搜索词、1 个本地案例库) | | `collector.py` | `DEFAULT_CHINA_PAINS` 从 8 个(7 环保 + 1 AI)改为 5 个 AI 焦点;`map_category_to_field` 返回 AI 领域;移除 4 处"可持续性"日志/默认值 | | `topic_selector.py` | `DEFAULT_TREND_DOMAIN_MAP` 从 12 条(含可持续生活/个人成长/副业/家庭教育)改为 11 条纯 AI/科技映射 | | `migrate_content_focus.py` | **新建** — Phase 2 DB 迁移脚本 | ### Phase 2 — DB 迁移 | 操作 | 影响 | |------|------| | TopicField | 更新 3 个新领域字段(排序/描述/图标),停用 5 个旧领域(可持续生活系统/可持续生活/数字游民/个人成长/个人知识工厂) | | Topic | 47 个 Topic 中 43 个已迁移到新领域(4 个无法映射的归入"AI与效率") | | Article | 删除 15 篇与旧可持续领域关联的旧文章 | | CollectorCategory | 创建 3 个新分类(AI前沿资讯/AI工具实测/AI与职场),更新 2 个(AI生活化/科技人文),停用 12 个旧分类(循环消费/低碳出行/干净饮食/零浪费生活/绿色家电与节能/碳普惠/环保科技产品/自我丰容/适我主义/情绪价值与心理健康/沉浸式新生活/数字游民与自由职业) | | CollectorSource | 停用 1 个旧源,创建 2 个新 AI 搜索源 | | PlatformConfig | 3 个平台(知乎/微信/小红书)的 allowed_tags 全部替换为 AI/科技标签 | | TrendFieldMapping | 同步 11 条新映射,停用旧映射 | ### Phase 3 — 文件清理 | 项目 | 数量 | 释放空间 | |------|------|---------| | 日志文件 (`automation/logs/`) | 400 个 | 2.5 MB | | 旧选题卡片 (`content/ideas/`) | 11 个文件 | 96 KB | | 可持续采集原始数据 (`sustainability_raw/`) | 多子目录 | 224 KB | | 旧数据文件 (`sustainability_cases.json/topics.json`) | 2 个 | - | | 旧草稿/大纲/研究笔记 (`drafts/outlines/research/`) | 91 个文件 | 740 KB | | 通知记录 (`notifications/`) | 1 个 | 4 KB | ### Phase 4 — 重启验证 - 服务运行中:HTTP 200 ✅ - API 认证正常 ✅ - TopicFields 仅返回 3 个活跃领域 ✅ - Topic 总计 47 个,全部关联新领域 ✅ - Articles 已清理(0 篇过时文章)✅ - CollectorCategories 仅 5 个 AI 分类活跃 ✅ ### 关键架构决策 - `collector.py` 类名(SustainabilityCollector/SustainabilitySource/SustainabilityCase)保留未改——减少中断风险,功能已从 sustainable 转向 AI/tech,重命名需要跨 20+ 文件修改 - DB 种子数据按 `if count() == 0` 判断,已有数据的库通过独立迁移脚本处理 - 旧数据优先保留(硬删除可能影响引用完整性),标记 `is_active=False` 而非删除 ### 品牌调性与内容深化(v25.1 · 2026-06-23 第二次迭代) **问题诊断**:第一次聚焦改造后,内容方向虽已收敛到 AI 3 领域,但存在品牌割裂("宇之然"调性偏人文自然 vs 内容全是纯工具测评)、AI 赛道竞争红海、平台策略错配(公众号叙事体不适合写 AI 工具)等深层问题。 **Phase A — 品牌调性注入(最核心改动)** | prompt | 改动 | 预期效果 | |--------|------|---------| | `section_expansion_zhihu` | 加入独家数据要求+观点交锋,不只是介绍工具而是探讨技术如何改变人 | 在拥挤的 AI 知乎赛道上做出壁垒 | | `section_expansion_wechat` | 从「AI 工具叙事」→「科技人文思辨」:用「我」口吻写 AI 时代的困惑、顿悟或观察 | 对齐品牌调性,摆脱"AI 测评不适合叙事体"的结构性矛盾 | | `section_expansion_xiaohongshu` | 每个结论配亲测数据/对比/结果 | 用真实数据对抗同质化 | | `title_optimize_zhihu` | 增加观点交锋感+立场态度 | 从"工具文标题"→"辩论帖标题" | | `title_optimize_wechat` | 改为科技叙事方向,参考风格:「AI帮我写周报的第3个月,我终于发现哪里不对了」 | 对齐公众号新定位 | | `title_optimize_xhs` | 每条标题含数字/时间/效果结果感 | 提高点击率 | **Phase B — SEO/GEO 长尾关键词** - `collector.py`: `DEFAULT_CHINA_PAINS` 每个痛点扩展 3-5 个长尾问题("AI写周报""AI提示词怎么写""35岁学AI来得及吗") - `topic_selector.py`: `DEFAULT_TREND_DOMAIN_MAP` 从 11 条→18 条(新增 Prompt/提示词/AI编程/AI写作/数据隐私/AI教育/一人企业) **Phase C — 差异化信息源** 在 `sources.yaml` 中新增 5 个与通用 AI 媒体形成区分的源: | 新源 | 差异化定位 | |------|-----------| | 机器之心 RSS | AI 学术前沿,区别于大众科技媒体 | | AI 学术论文搜索(arXiv 中文) | 一手论文解读内容源 | | 独立开发者搜索 | 独特的小众 AI 产品视角 | | 行业数据报告搜索 | 自采数据的基础来源 | | AI 产品动态搜索 | 第一手产品更新信息 | **Phase D — 栏目化内容机制** 为「AI工具实测周报」等固定栏目铺平道路: - Topic 模型新增 `series` 字段(VARCHAR, optional, indexed) - API 端点 `/api/topics` 新增 `?series=` 筛选参数 - 前端 topics.html 搜索区增加「栏目」下拉筛选器 - `database.py` 新增 ALTER TABLE 迁移(`topics.series`) **Phase E — 公众号发布流水线**([需提供 WeChat APP_ID/APP_SECRET]) - 已安装 `/wechat-mp-publisher` 技能,支持远程 MCP 中转 - `wechat.env` 和 `mcp.json` 尚未配置 ### 关键文件变更汇总 | 文件 | 变更类型 | 说明 | |------|---------|------| | `scripts/prompt_loader.py` | 修改 | 6 个 prompt 品牌调性注入(section_expansion×3 + title_optimize×3) | | `platform/backend/app/initial_data.py` | 修改 | 领域描述人文化、采集搜索词长尾化、平台格式说明更新 | | `scripts/collector.py` | 修改 | DEFAULT_CHINA_PAINS 长尾关键词扩展 | | `scripts/topic_selector.py` | 修改 | DEFAULT_TREND_DOMAIN_MAP 从 11→18 条 | | `config/sources.yaml` | 修改 | 新增机器之心/arXiv/独立开发者/行业报告/AI产品动态 5 个差异源 | | `platform/backend/app/models.py` | 修改 | Topic 模型新增 series 字段 | | `platform/backend/app/schemas.py` | 修改 | TopicBase/TopicCreate/TopicUpdate 新增 series | | `platform/backend/app/api/topics.py` | 修改 | list_topics 新增 series 查询参数 | | `platform/backend/app/database.py` | 修改 | ALTER TABLE 添加 topics.series 列 | | `platform/frontend/topics.html` | 修改 | 搜索区新增栏目下拉筛选器 | | `scripts/migrate_content_focus.py` | 新建 | DB 迁移脚本(Phase 2 遗留) | ### Phase F — 数据库旧数据清理(2026-06-23 第三次迭代) 品牌优化完成后,发现旧数据库中存在大量迁移遗留的错配数据——32 个旧选题(循环消费/碳普惠/可持续方向)被 `migrate_content_focus.py` 的 fallback 逻辑错误地分配到了「AI与效率」领域,并持有 66 篇关联文章和 5 个任务。 | 操作 | 数量 | |------|------| | 删除旧选题(sustainability/carbon 方向) | 32 个 | | 删除关联文章 | 66 篇 | | 删除关联任务 | 5 条 | | 停用 orphan 领域(科技人文交叉/测试) | 2 个 | | 删除 5 个旧 TopicField + 5 条 stale TrendFieldMapping | 10 条 | | **剩余数据** | **15 个选题 / 9 篇文章 / 3 个活跃领域 / 11 条 TrendFieldMapping** | 所有保留选题均为 AI/tech 方向,与聚焦的 3 领域一致。TopicFields 表从 10 行精简到 3 行,TrendFieldMapping 从 16 行精简到 11 行(全 active),无任何悬空引用。 --- > 过时文档统一移入 `archive/`,防止误导。 | 日期 | 路径 | 原因 | |------|------|------| | 2026-05-12 | `tasks/todo.md` → `archive/tasks/todo.md.2026-04-10` | 内容停滞于 2026-04-10,信息过时 | | 2026-05-12 | `content/ideas/001-compliance.md` → `archive/content/ideas/` | 001 已发布,合规报告无须保留在活跃目录 | | 2026-05-12 | `content/ideas/001-research.md` → `archive/content/ideas/` | 001 已发布,研究笔记无须保留在活跃目录 | | 2026-05-12 | `content/publishing/001-images.md` → `archive/content/` | 配图已生成,规划稿无须保留在活跃目录 | --- ## 七、内容质量升级(v19 · 2026-06-05) ### 三平台差异化内容架构 **背景**:此前三平台共用同一篇 markdown,仅做浅层适配(加 emoji/换人称),导致知乎缺深度、公众号缺情感、小红书过长。 **核心改动:** 1. **writer.py** — `generate_full_markdown()` → `generate_platform_markdown(platform)`,每平台调用独立的 `section_expansion_{platform}` prompt - 知乎:`section_expansion_zhihu` — 数据分析深度,400-800字/节,「你」视角 - 公众号:`section_expansion_wechat` — 个人叙事对话感,300-500字/节,「我」口吻 - 小红书:`section_expansion_xiaohongshu` — 精炼干货,100-200字/节,直接给方法+可 emoji - 去掉公众号中「我们→我→你」的强制替换 2. **prompt_loader.py** — 新增 3 个平台独立 section_expansion 提示词,标题提示词去套路化(去除「直接输出」「不要其他文字」等 AI 味指令) 3. **平台字数提升** — min/max 大幅上调(知乎 3000-8000, 公众号 2000-4000, 小红书 400-1000),存于 `platform_configs` 表,后台可改 4. **compliance_checker.py** — AI 套话从 DB `content_clean_rules(rule_type='ai_telltale')` 加载,后台可动态管理;人称规则去掉「大家」误报 5. **config_items.py** — DEFAULT_CONTENT_CLEAN_RULES 新增 30+ 条 ai_telltale 规则 6. **initial_data.py** — PlatformConfig 字数迁移(已有库也会更新) 7. **AGENTS.md** — 文档化三平台差异化架构 **验证**:33/33 测试通过 ## 八、GEO/SEO 升级(v20 · 2026-06-09) ### 为 AI 搜索时代而生 **背景**:ChatGPT、Perplexity、百度 AI 搜索等生成式引擎正在取代传统搜索。内容被 AI 引用的价值大于单纯的关键词排名。此版本让流水线生产的内容天然符合 AI 搜索偏好。 ### GEO 结构化数据 每篇生成的 HTML 自动注入: - **JSON-LD Article schema** — `@context: schema.org`,含 headline/description/datePublished/author/publisher/keywords - **SEO meta tags** — ``, `` - **Open Graph tags** — `og:title`, `og:description`, `og:type`, `og:site_name`, `article:published_time` - **平台专用** — wechat/xiaohongshu 额外注入 `og:image` ### 大纲 SEO 增强 - outline prompt 新增 `seo_keywords` 变量(从研究笔记自动提取) - 每章要求至少融入 1 个 SEO 关键词 - 新增 GEO 要求:每章包含可引用数据点,增加被 AI 搜索引用的概率 ### 搜索排名追踪 | 模块 | 说明 | |------|------| | `SearchRanking` 模型 | 记录 article_id/keyword/position/url_found/ai_cited/search_engine | | `scripts/rank_tracker.py` | 对所有已发布文章,自动生成搜索查询 → 调用 Bing API 查排名 → 写入 DB | | 定时任务 | `scheduled_rank_tracker` 每日 07:00 自动运行 | | 管理后台 | admin.html 新增「搜索排名」tab,展示概览统计(累计检查/有排名/AI引用/最佳排名)+ 排名列表 | ### 关键文件 | 文件 | 改动 | |------|------| | `scripts/writer.py` | 新增 `inject_geo_metadata()`, `_extract_description()`, `_extract_tags_list()` — 在 `generate_platform_html()` 末尾注入 | | `scripts/outline.py` | 新增 `_extract_seo_keywords()` — 传入 outline prompt | | `scripts/prompt_loader.py` | outline_generation 提示词加入 `seo_keywords` 变量 + GEO 数据点要求 | | `scripts/rank_tracker.py` | 新建 — Bing 排名查询 + DB 写入 | | `platform/backend/app/models.py` | 新增 `SearchRanking` 模型 | | `platform/backend/app/api/search_rankings.py` | 新建 — `/api/seo/rankings` + `/api/seo/rankings/overview` | | `platform/backend/app/core/scheduler.py` | 新增 `scheduled_rank_tracker` 07:00 | | `platform/frontend/admin.html` | 新增「搜索排名」tab(统计卡片 + el-table 排名列表) | ## 九、GEO 进阶升级(v21 · 2026-06-15) ### AI 搜索引用追踪(GEO Engine Optimization) **背景**:v20 实现了搜索排名追踪(Bing)和基础元数据注入,v21 将范围扩展到 AI 搜索引用检测、GEO 就绪度评分、FAQ/HowTo 结构化数据注入。 ### 1. 数据模型扩展 | 模型 | 字段 | 说明 | |------|------|------| | `SearchRanking` | `ai_search_engine` / `citation_snippet` / `citation_url` / `geo_score` / `content_type` | 原有排名模型新增 AI 搜索字段和内容类型 | | `GeoReadinessScore`(新建) | `article_id/total_score(0-100)/has_schema/has_faq_format/has_howto_format/has_citations/word_count/readability_score/heading_structure_score` | 6 维度 GEO 就绪度评估 | 就绪度评分权重:结构化数据 30 + FAQ 格式 20 + HowTo 格式 15 + 引用 15 + 标题结构 10 + 内容长度 10 = 100 分 ### 2. AI 搜索引用追踪脚本 `scripts/geo_tracker.py` — 对所有已发布文章,通过 LLM 模拟查询 DeepSeek/ChatGPT/Perplexity 检测是否被引用: - 筛选 `status=published` 的文章提取标题/关键词 - 对每篇文章调用 `call_llm` 查询各 AI 引擎是否收录并引用 - 记录引用片段(citation_snippet)和引用 URL - 计算 GEO 就绪度评分(6 维度 0-100) - 写入 `SearchRanking(search_engine="geo")` 和 `GeoReadinessScore` 表 ### 3. FAQ/HowTo Schema 自动注入 扩展 `writer.py` 的 `inject_geo_metadata()`: - 新增 `_detect_content_type(content)` — 检测内容类型:article/listicle/howto/faq/review(基于关键词统计) - 新增 `_extract_faq_pairs(content)` — 从 Q:/A:格式提取问答对 - 新增 `_extract_howto_steps(content)` — 从步骤/Step 格式提取步骤 - 根据检测到的类型自动注入对应的 JSON-LD schema: - **FAQPage** — `mainEntity` 数组(Question + AcceptedAnswer) - **HowTo** — `step` 数组(HowToStep + HowToDirection) - **ItemList** — `itemListElement` 数组(ListItem + position + name) ### 4. GEO API 端点 | 端点 | 功能 | |------|------| | `GET /api/seo/geo/overview` | AI 引用总数/引用率/引擎分布/平均就绪度评分 | | `GET /api/seo/geo/readiness` | GEO 就绪度评分列表(含各维度分数) | | `POST /api/seo/geo/track` | 手动触发 GEO 追踪 | ### 5. 定时任务注册 `scheduler.py` 新增 `scheduled_geo_tracker` 每日 07:30 自动运行 ### 6. 管理后台 GEO 看板 admin.html 新增「GEO 就绪度」标签页包含: - **统计卡片**:GEO 检查次数 / AI 引用次数 / AI 引用率 / 平均就绪度评分 - **引擎分布**:按 AI 引擎(DeepSeek/ChatGPT/Perplexity)展示检查数和引用数 - **就绪度评分表格**:文章标题/总分(彩色标签)/结构化数据✓✗/FAQ✓✗/HowTo✓✗/引用✓✗/字数/可读性/标题结构/检查时间 - **手动追踪按钮**:`POST /api/seo/geo/track` ### 关键文件变更 | 文件 | 改动 | |------|------| | `scripts/geo_tracker.py` | **新建** — AI 搜索引用追踪 + GEO 就绪度评分全流程 | | `scripts/writer.py` | 扩展 `inject_geo_metadata()`:新增 `_detect_content_type`/`_extract_faq_pairs`/`_extract_howto_steps`,根据内容类型自动注入 FAQPage/HowTo/ItemList schema | | `platform/backend/app/models.py` | `SearchRanking` 扩展 5 字段 + 新建 `GeoReadinessScore` 模型 | | `platform/backend/app/api/search_rankings.py` | 新增 3 个 GEO 端点(overview/readiness/track) | | `platform/backend/app/core/scheduler.py` | 注册 `scheduled_geo_tracker` 07:30 | | `platform/frontend/admin.html` | 新增「GEO 就绪度」tab(统计卡片 + 引擎分布 + 评分表格 + 手动追踪) | ### 验证 33/33 测试全部通过 ## 十、产品官网改造(v22 · 2026-06-16) ### 从「管理后台」到「产品网站」 **背景**:此前项目以登录页面作为首屏,访客第一眼看到的是管理系统的登录框,没有品牌传达和产品介绍。改造后,未登录用户看到的是一个完整的产品官网,登录后进入管理后台(工作台)。 ### 路由架构 | 路径 | 页面对应 | 访问权限 | |------|---------|---------| | `/` | **产品官网** — 品牌 Landing Page | 公开 | | `/index.html` | **工作台** — 原有的仪表盘(现为 workspace) | 需登录 | | `/login.html` | 登录页(品牌化处理) | 公开 | | `/topics.html`, `/articles.html` 等 | 各管理功能页 | 需登录 | ### 产品官网(Landing Page) 创建 `platform/frontend/landing.html` — 独立的完整产品网页,不依赖 Vue/Element Plus: - **导航栏**:固定顶部,毛玻璃背景,Logo + 产品功能/工作流程/支持平台/定价/常见问题链接 + 登录/免费使用按钮 - **Hero 区域**:大标题「让内容在 AI 时代主动找到你的客户」,背景渐变+辉光效果,三个核心数据展示 - **产品功能**:6 张特性卡片(三平台创作/GEO 优化/独立站 SEO/效果追踪/全自动流水线/合规保障) - **工作流程**:3 步流程说明(配置选题→自动生产→追踪优化) - **支持平台**:知乎/微信公众号/小红书/独立站 - **定价**:3 档定价(入门版 ¥299/月、专业版 ¥799/月、企业版 ¥2,499/月) - **常见问题**:6 个 FAQ(GEO 说明/三平台差异化/零经验使用/AI 套话/API Key/数据安全) - **CTA 区块**:渐变背景 + 行动号召按钮 - **页脚**:产品/支持/法律三栏 ### 关键架构改动 | 文件 | 改动 | |------|------| | `platform/frontend/landing.html` | **新建** — 完整产品官网(~30KB,无外部依赖) | | `platform/backend/app/main.py` | 新增 `/` 路由显式返回 `landing.html`(优先于 StaticFiles 的默认 index.html) | | `platform/frontend/login.html` | 登录成功跳转 `/` → `/index.html`;已登录检测跳转 `/` → `/index.html` | | `platform/frontend/uni-nav.js` | 仪表盘导航链接 `/` → `/index.html`;`navigate` 函数修复前缀处理 | | `platform/frontend/articles.html` | 未登录重定向 `/` → `/login.html` | | `platform/frontend/topics.html` | 未登录重定向 `/` → `/login.html` | | `platform/frontend/sw.js` | 移除 `/` 预缓存;HTML 文档改为 Network First 策略确保新版实时加载 | ### 响应式设计 - **桌面端**(>768px):完整导航 + 多列布局 - **平板/手机端**(≤768px):汉堡菜单(侧滑展开)、单列布局、缩小 hero 字体 - **小屏手机**(≤480px):全屏宽内容、堆叠布局 ### 验证 - 33/33 测试全部通过 - HTTP 访问验证:`/` 返回 landing.html(31070 bytes),`/index.html` 返回工作台仪表盘 - 登录流程验证:登录后跳转 `/index.html` - 服务已重启生效 ## 十一、工作台改造与数据隔离(v23 · 2026-06-17) ### 从「管理工具」到「内容工作台」 **背景**:此前平台虽功能完整但偏向管理后台视角,缺乏面向内容创作者的工作台体验;且所有业务数据缺乏组织隔离(org_id),多组织共存时数据混淆。 ### Wave 1 — 数据隔离基础设施 | 改动 | 文件 | |------|------| | 10 个业务模型追加 `org_id` 列 | `models.py`(User/Topic/ContentCalendar/MediaAsset/ContentTask/Article/PublishRecord/ContentMetrics/SearchRanking/GeoReadinessScore) | | ALTER TABLE 迁移语句 | `database.py`(5 条 `ADD COLUMN IF NOT EXISTS`) | | Schema 追加 `org_id` | `schemas.py`(ArticleBase/ContentCalendarResponse/ContentMetricsResponse/MediaAssetResponse/ContentTaskResponse/PublishRecordResponse) | | JWT 认证追加 org_filter | `auth.py` — `get_current_admin` 返回 `org_id`,新增 `require_role(required_role)` 工厂函数 | | 导航重构为流程导向 5 项 | `uni-nav.js` — 工作台/内容工厂/数据洞察/资产库/系统管理 | ### Wave 2 — API 隔离 + 新前端页面 | 改动 | 说明 | |------|------| | `articles.py` | Article 创建 upsert 时从 JWT 自动注入 org_id | | `publishing.py` | PublishRecord 创建时从关联 Topic 继承 org_id | | `metrics.py` | ContentMetrics 创建时继承 Topic.org_id | | `calendar.py` | ContentCalendar CRUD 添加 org_id 校验 | | `tasks.py` | ContentTask 创建时自动注入 org_id | | `search_rankings.py` | GEO 端点添加 org_filter | | `factory.html` | **新建** — 内容工厂流水线页面(3Tab:待创作/进行中/待审查) | | `insights.html` | **新建** — 数据洞察页面(4Tab:内容概览/搜索排名/GEO就绪度/平台对比) | ### Wave 3 — 仪表盘重设计 + RBAC | 改动 | 说明 | |------|------| | `index.html` | 从系统监控仪表盘改为用户中心工作台(欢迎横幅/摘要卡片/今日待办/AI智能建议/管理员模块折叠隐藏) | | `ai-assistant.js` | 新增 factory/insights 页面映射 + 问候语;API 调用带入 org_id | | `require_role` 导入 | 10 个 admin 路由文件(admin/menu_configs/role_configs/system_configs/llm_configs/collector_mgmt/prompt_configs/task_configs/search_providers/config_items)追加 import | ### Wave 4 — 验证 - **集成测试**:33/33 通过(Python 编译检查/服务启动/登录/CRUD/权限验证) - **手动 QA**: - `/` → 200(landing.html) - `/index.html` → 200(工作台仪表盘) - `/factory.html` → 200(内容工厂) - `/insights.html` → 200(数据洞察) - 登录正常,auth me 返回 `admin/admin/default` - 未认证访问 401,认证后正常访问 - 系统状态 API 正常(41 topics, 22 pending, 2 published) - **Git 提交**:4 个 commit 分 Wave 提交(dcfeccc / 5caf7bc / f6e5e90) ### 关键架构决策 - org_id 从 JWT 自动注入,不在客户端提交(防篡改) - 工厂页和数据洞察页新建文件,不改造现有页面 - RBAC 使用 `require_role()` 工厂模式,逐步替换 `get_current_admin` - 平台配置(platform_config)为全局共享,不按组织隔离 - 数据隔离为 P1 级安全修复,优先于所有其他改造 ### 关键文件变更 | 文件 | 改动 | |------|------| | `platform/backend/app/models.py` | 10 个模型追加 org_id(941 行)| | `platform/backend/app/database.py` | ALTER TABLE 迁移逻辑(170 行)| | `platform/backend/app/api/auth.py` | org_filter + require_role(196 行)| | `platform/backend/app/schemas.py` | 6 个响应 schema 追加 org_id(637 行)| | `platform/frontend/index.html` | 用户中心仪表盘重设计 | | `platform/frontend/factory.html` | **新建** 内容工厂流水线页 | | `platform/frontend/insights.html` | **新建** 数据洞察页(945 行)| | `platform/frontend/uni-nav.js` | 流程导向导航(333 行)| | `platform/frontend/ai-assistant.js` | 页面映射 + org_id 感知 | | `platform/backend/app/api/*.py` | 10 个路由文件追加 require_role | --- ## 十二、规范说明 ### 规划文档 | 文档 | 位置 | 说明 | |------|------|------| | 升级计划 | `docs/upgrade-plan.md` | 分 4 阶段的技术升级路线图 | ### 文档管理原则 1. **单一真理源**:PROGRESS.md 为唯一进度文档,进度信息不出现于第二个文档中。 2. **及时归档**:阶段完成后,对应过程文档移入 `archive/`(含日期后缀),避免误导。 3. **一致性**:README.md 仅引用 PROGRESS.md 摘要,不独立维护进度状态。 4. **可追溯**:archive 保留完整历史,按 `YYYY-MM-DD` 子目录组织。 5. **及时更新**:每次新工作结束(或次日开始前)更新 PROGRESS.md,确保最后更新日期与实际同步。 ### 工作流程 ``` 梳理需求/任务 → 读取 PROGRESS.md 了解当前状态 ↓ 按 PROGRESS.md 执行开发 ↓ 阶段任务完成 → 更新 PROGRESS.md + 归档冗余文档 ↓ 如需 → 同步 README.md 摘要 ```