208 Commits

Author SHA1 Message Date
yuzhiran f9547ba21f feat: 商业模式官网营销升级(免费试用/私有化/源码售卖)+ 企业微信
- 新增 docs/BUSINESS_MODEL.md 商业与营销方案
- landing.html 定价重构为三模式:免费试用 / 私有化部署 / 源码售卖
- 新增「开始合作」联系区(线索表单 + 企业微信二维码 wecom-qr.jpg)
- 商务邮箱更新为 contact@yuzhiran.com
- deploy/README 交付建议同步三模式
- PROGRESS 记至第十八章
2026-07-12 10:16:39 +08:00
yuzhiran 7e953afbd2 feat: 创作工作台统一 + AI味检测/白标 + 移动端补全 + 合规发布闭环
- 新增创作工作台 studio.html:合并选题/内容工厂/文章管理为单一 tab 入口(iframe embed 模式)
- 新增 AI味检测模块(ai_slop API + 页面,合规软硬问题分级)
- 新增白标品牌配置(branding API + 页面 + deploy 私有化交付包)
- 发布闭环:publishing 放宽至 editor + records/mark-published 接口
- 移动端响应式补全(admin/calendar/ai-slop 表格卡片兜底)
- 修复菜单幂等播种缺陷(按 path 对齐,避免功能页孤立)
- 新增短视频脚本 shortvideo.py 与 2026 市场调研简报
2026-07-11 12:36:01 +08:00
yuzhiran 3d596275d5 fix: preview body empty when no article content
topics.html: currentPreviewBody returns placeholder instead of empty string when platform has no content; openTopicArticlePreview properly awaits fetch

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 19:02:33 +08:00
yuzhiran a4242ada0e fix: search_rankings missing columns 500 error + campaigns.html var typo
database.py: add 5 missing search_rankings columns (ai_search_engine, citation_snippet, citation_url, geo_score, content_type) - caused /api/seo/rankings Internal Server Error

campaigns.html: fix template referencing rankingOverview instead of keywordRankingOverview

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 16:55:12 +08:00
yuzhiran d11d7f4980 fix: pipeline content tracking + topic article preview
db_helper.py: save_article now calculates and persists word_count
generator.py: run_creator_blocking sets word_count for HTML-imported articles
writer.py: fix title regex stripping content-leading numbers (35岁后→岁后)
trends.py: fix Baidu hot_score str/int type comparison crash
database.py: add missing content_tasks.org_id ALTER TABLE migration
schemas.py + topics.py: topic list API returns article_count + articles[] previews
topics.html: table view and card view show article badges with word counts, clickable to open preview

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 12:31:02 +08:00
yuzhiran 57e6e16c11 docs: finalize DB cleanup - delete 5 old TopicFields + 5 stale TrendFieldMapping rows 2026-06-23 18:36:54 +08:00
yuzhiran 187b414193 docs: document DB cleanup Phase F (32 old topics + 66 articles + 5 tasks removed)
Records the DB cleanup executed on 2026-06-23: cascade-deleted 32 sustainability/carbon topics, 66 articles, 5 tasks. Deactivated orphan TopicFields (科技人文交叉, 测试). 15 AI/tech topics remain.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 17:45:45 +08:00
yuzhiran 56c9376c58 docs: document brand optimization v25.1 (brand tone, SEO/GEO, sources, series column, WeChat publisher)
PROGRESS.md: adds Phase A-F brand optimization to v25 section covering 6 prompt brand tone injection, long-tail SEO keywords, differentiated sources (machine-intelligence/arXiv/indie dev/industry reports/AI products), series column feature, and WeChat publisher blocked status.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 13:32:23 +08:00
yuzhiran 302efd5f2d fix(ui): responsive mobile layout with auth flow refactoring for campaigns
Adds: v-cloak fix, mobile card-list views for all tables, responsive CSS breakpoints, early auth redirect, CDN script reorder to head, ElementPlusIconsVue safety check, global ElMessage reference. Moves async mounted to .then() pattern to avoid Vue 3 SFC issues.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 13:30:19 +08:00
yuzhiran 897f72012f chore(cleanup): remove old content ideas and sustainability data
Deleted: 10 legacy topic cards (001-010), README from content/ideas/, old sustainability_topics.json, test-fix notification. These belonged to deprecated 'sustainable living' content pillar.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 13:26:50 +08:00
yuzhiran 0258a9af9f feat(script): add DB migration script for content focus refactoring
Comprehensive DB migration: TopicField cleanup (5 old deactivated, 3 new updated), Topic reassignment (43/47 migrated), Article cleanup (15 deleted), CollectorCategory/Cleaning (12 old deactivated), TrendFieldMapping sync (11 entries)

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 13:26:22 +08:00
yuzhiran 9058539bae feat(config): add differentiated information sources (arXiv/indie dev/industry reports)
Adds 5 new sources: machine-intelligence RSS, arXiv paper search, indie developer search, industry data report search, AI product changelog search. Differentiates from generic AI media.

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 13:25:39 +08:00
yuzhiran 9fba863ce7 feat(config): align content strategy with brand direction
initial_data: field descriptions humanized, collector search queries include long-tail keywords, platform formats updated collector.py: DEFAULT_CHINA_PAINS expanded with specific pain questions (e.g. '35岁学AI来得及吗') topic_selector.py: domain mapping 11->18 entries (Prompt/AI编程/AI写作/数据隐私/AI教育/一人企业)

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 13:25:11 +08:00
yuzhiran 45ad5443c1 feat(prompt): inject brand tone into 6 platform prompts
Section expansion: zhihu (unique data + debate), wechat (tech-humanity reflection), xiaohongshu (real usage data) Title optimize: all 3 platforms aligned with new brand direction

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 13:24:38 +08:00
yuzhiran ef289b18d1 feat(ui): add series filter to topics search area
Adds column/category filter dropdown in topics.html search form, with seriesOptions computed and filteredTopics logic

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 13:23:19 +08:00
yuzhiran f1e6c11505 feat(models): add series column to Topic for content columns
Topic model: new series VARCHAR field (optional, indexed)
Schema: series in TopicBase/TopicCreate/TopicUpdate
API: GET /api/topics supports ?series= query param
DB migration: ALTER TABLE topics ADD COLUMN series

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-23 13:22:13 +08:00
yuzhiran e9cd0374f4 feat(script): SEO auditor + PROGRESS.md v24 update
Add seo_auditor.py - crawls external websites, scores 6 SEO dimensions (meta/heading/content/performance/links/mobile), generates optimization tasks. Update PROGRESS.md with v24 external promotion feature.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-21 16:07:43 +08:00
yuzhiran 8a04a23e86 feat(ui): external promotion dashboard (campaigns.html)
Add campaigns.html with 6 tabs (Overview/Products/Campaigns/Rankings/Audits/Tasks) using Vue 3 + Element Plus CDN. Add nav entry to uni-nav.js.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-21 16:06:46 +08:00
yuzhiran 8f5a9e7ede feat(api): external promotion CRUD + audit endpoints
Add 20 API endpoints under /api/external/* covering products, campaigns, keywords, audits, rankings, optimization tasks with org_id filtering.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-21 16:05:55 +08:00
yuzhiran 12e49f2811 feat(models): add external promotion tables (6 models)
Add ExternalProduct, PromotionCampaign, CampaignKeyword, SEOAudit, KeywordRanking, OptimizationTask models and 18 Pydantic schemas for the external promotion module.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-21 16:04:52 +08:00
yuzhiran 81f89f6f00 docs: PROGRESS.md - landing fixes, v23 verification, cleanup
Mark landing OG image creation, GitHub link fix, nav bug fix.
Add v23 feature verification results (12 pages 200, org_id, RBAC).
Update last-updated date. Clean up completed todos.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-18 16:28:55 +08:00
yuzhiran a692f1dd44 fix: landing OG image + GitHub link
Create og-landing.png (1200x630, 62KB) for OG meta tag.
Fix GitHub link placeholder (your-org -> github.com).

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-18 16:27:59 +08:00
Yuzhiran Dev 4b87125683 docs: update PROGRESS.md - M4 complete, remaining TODOs done 2026-06-18 08:16:35 +08:00
Yuzhiran Dev 5a19e77d27 feat: rank_tracker AI citation + admin task management tab 2026-06-17 20:42:37 +08:00
Yuzhiran Dev d3ea832b3b feat: admin.html task management tab (TaskConfig + TaskLog timeline)
- Add 任务管理 tab button
- Show all 7 task modules table with enable/disable switch, schedule, params
- Edit dialog for schedule/params editing
- Click module to show el-timeline of recent 30 run logs
- View result data dialog
- Supports toggleModule, saveTaskConfig, loadTaskLogs
2026-06-17 20:10:56 +08:00
Yuzhiran Dev 1ff015e281 docs: v23 PROGRESS.md + archive WORKSPACE_REDESIGN.md 2026-06-17 18:33:19 +08:00
Yuzhiran Dev f6e5e90736 feat: Wave 3 - Dashboard redesign + RBAC + AI assistant updates
- Redesign index.html from system-monitor to user-centric workspace
  (welcome banner, summary cards, 今日待办, AI 智能建议, collapsible admin section)
- Add fetchTodos/fetchSuggestions/getPriorityClass/isOverdue methods
- Update uni-nav current-page from 'dashboard' to 'workspace'
- Add require_role to 10 admin router imports (RBAC foundation)
- Update ai-assistant.js: add factory/insights pages, org_id in chat requests
2026-06-17 18:24:57 +08:00
Yuzhiran Dev 5caf7bc52e feat: Wave 2 - API org isolation + factory.html + insights.html
- Add org_id auto-population to articles.py, publishing.py, metrics.py
- Add org_id filtering to search_rankings.py geo endpoints
- Add org_id to calendar.py create/update/delete endpoints
- Add org_id to tasks.py create endpoints
- Create factory.html content pipeline page (3-tab: 待创作/进行中/待审查)
- Create insights.html analytics page (4-tab: 概览/搜索排名/GEO/平台对比)
2026-06-17 16:13:48 +08:00
Yuzhiran Dev dcfeccc97b feat(models): add org_id to Article, PublishRecord, ContentMetrics, SearchRanking, GeoReadinessScore
- Add org_id column to 5 models with default='default'
- Update to_dict() methods for ContentMetrics, SearchRanking, GeoReadinessScore
- Add ALTER TABLE migrations in database.py init_db()
- Add org_id to 6 Pydantic response schemas
- Add require_role() helper factory in auth.py
2026-06-17 14:27:27 +08:00
Yuzhiran Dev 00431c827b feat: add org_id to ContentCalendar and ContentTask models 2026-06-17 09:02:54 +08:00
Yuzhiran Dev c8a5e8fd87 docs: Update PROGRESS.md for v21 GEO and v22 landing page
- v21: GEO tracking (geo_tracker.py, FAQ/HowTo schema, GeoReadinessScore, scheduler, admin tab)
- v22: Landing page (landing.html, routing, responsive design, auth flow changes)
- Commit count: 165 -> 170

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:28:31 +08:00
Yuzhiran Dev c069a140bb fix: Auth redirects and navigation for landing page routing
- login.html: Post-login redirect / -> /index.html; already-logged-in redirect / -> /index.html
- articles.html, topics.html: Auth failure redirect -> /login.html
- uni-nav.js: Dashboard link / -> /index.html; navigate function fix for prefix handling
- sw.js: Remove / pre-cache; HTML documents use Network First strategy for fresh content

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:28:06 +08:00
Yuzhiran Dev 24e46eced5 feat: Product landing page at / with responsive design
- landing.html: Full product website (hero, features, how-it-works, platform coverage, pricing, FAQ, CTA, footer)
- main.py: Route / to landing.html (overrides StaticFiles default index.html)
- Workspace dashboard remains at /index.html
- Responsive: desktop nav, hamburger mobile menu, single-column on small screens
- No Vue/Element Plus dependency; standalone HTML+CSS+JS (~30KB)

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:27:38 +08:00
Yuzhiran Dev f15e0f720a feat: Admin GEO readiness dashboard tab
- New 'GEO 就绪度' tab button in filter bar
- Overview stat cards: total checks, AI citations, citation rate, avg readiness
- AI engine breakdown display (DeepSeek/ChatGPT/Perplexity)
- Readiness scores table with 6-dimension color-coded tags
- Manual GEO tracking trigger button

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:27:11 +08:00
Yuzhiran Dev 7c9a8b88b4 feat: FAQ/HowTo schema injection and SEO pipeline enhancement
- writer.py: inject_geo_metadata now detects content type (article/listicle/howto/faq/review) and injects appropriate JSON-LD (FAQPage, HowTo, ItemList)
- New helpers: _detect_content_type, _extract_faq_pairs, _extract_howto_steps
- outline.py: _extract_seo_keywords regex support for CJK
- prompt_loader.py: Minor update

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:26:44 +08:00
Yuzhiran Dev 93d1d511e5 feat: Register scheduled GEO tracker (07:30 daily)
- New MODULE entry: scheduled_geo_tracker
- New LOG_FILE_MAP entry
- New MODULE_JOBS entry
- _run_geo_tracker method: subprocess invokes geo_tracker.py

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:26:13 +08:00
Yuzhiran Dev 2aedb69efd feat: AI search citation tracking script
scripts/geo_tracker.py: Simulates DeepSeek/ChatGPT/Perplexity queries via LLM to detect article citations. Calculates GEO readiness score (6 dimensions: schema/faq/howto/citations/headings/word_count). Writes results to SearchRanking(search_engine='geo') and GeoReadinessScore tables.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:25:44 +08:00
Yuzhiran Dev 773080cf4f feat: GEO data model and API endpoints
- SearchRanking: +5 fields (ai_search_engine, citation_snippet, citation_url, geo_score, content_type)
- New GeoReadinessScore model (6-dimension scoring: schema/faq/howto/citations/word_count/readability/headings)
- GET /api/seo/geo/overview, GET /api/seo/geo/readiness, POST /api/seo/geo/track

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:25:18 +08:00
Yuzhiran Dev 63a6fabc00 fix: Script bug fixes (bare except, timezone, regex, test)
- collector.py, compliance_checker.py, trends.py: bare except -> specific
- db_helper.py: datetime.now() -> timezone.utc (8 occurrences)
- compliance_checker.py: regex \x08 -> \b word boundary + import json
- search_providers.py: minor fixes
- test_new_features.py: service reachability check retry

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:24:50 +08:00
Yuzhiran Dev d601a26850 fix: API route security fixes (path traversal, auth, bare except)
- articles.py: Path traversal sanitization
- optimizer_logs.py: Admin auth guard
- platform_config.py: Admin auth guard
- system.py: Path traversal whitelist
- topic_config.py: Admin auth guard
- topics.py: Minor fix

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-16 08:23:50 +08:00
Yuzhiran Dev 8595bbc521 feat: GEO/SEO structured data + search ranking tracker 2026-06-09 17:18:09 +08:00
Yuzhiran Dev 23ff63baa9 fix: 三平台内容差异化 + admin敏感词管理表格化
- writer.py: _expand_section() 去除 <100字阈值,始终调用 LLM 平台专属扩写
- prompt_loader.py: 新增 section_expansion_zhihu/wechat/xiaohongshu 三个独立 prompt
- admin.html: 配置管理标签页 + 敏感词/清理规则子标签 + 敏感词表格化管理(编辑/删除)
- config_items.py: PUT /sensitive-words/{id} 支持更新 word/category
- compliance_checker.py: AI 套话从 DB 加载 + 人称规则修正
- initial_data.py: PlatformConfig 字数迁移 + 新种子
- 各前端页面: LLM 配置 rate_limit 字段 + 供应商列表排序
2026-06-08 13:51:35 +08:00
Yuzhiran Dev d0896ef10e fix: _wrap_chinese crash on mixed-width punctuation
_image_generator.py _wrap_chinese 当标题中只有 ASCII 标点
(如 ( ) ?) 而无全角标点时,max() 收到空序列崩溃。

修复:try-except 兜底 + 补充 ASCII 标点到断点列表
2026-06-03 13:13:19 +08:00
Yuzhiran Dev c6628b22f6 fix: 任务抽屉产出结果优化 + server 启动修复
- 任务抽屉产出结果 tab 优先显示 last_message(日志消息),
  过滤 result_data 中的 None/空值
- 修复 tasks.py 因 opencode 块删除导致的 SyntaxError
- 修复 scheduled_generate 存储 None 值问题
- 清理 DB 中旧 scheduled_refresh_search_cache 的 56 条
  TaskLog + 1 条 TaskConfig
- 更新 PROGRESS.md
2026-06-03 11:06:25 +08:00
Yuzhiran Dev 499c511140 chore: opencode冗余清理 + LLM任务级模型选择 + systemd服务化
- 删除 opencode_search.py / mcp_search_server.py 及所有 MCP 引用
- 移除搜索缓存定时任务(scheduled_refresh_search_cache)
- 清理前后端所有 opencode/MCP 代码和注释
- LLM 提供商量换:opencode-go→nvidia(默认)+sensenova(合规审查)
- llm_configs 新增 is_default 字段,API 层互斥逻辑
- 所有定时任务支持独立 LLM 模型选择(LLM_TASK_PROVIDER env)
- compliance_optimizer.py 修复:import os / 解硬编码 / 关键词过滤
- Scheduler 日志修复:始终 INSERT,避免僵尸 running 行
- Systemd 服务化:Restart=always / 单 worker / Type=exec
- 搜索提供商:替换 opencode→360/搜狗/微信(免 Key)
- 更新 AGENTS.md / PROGRESS.md
2026-06-02 15:38:16 +08:00
Yuzhiran Dev abbf1468bc fix(admin): LLM 路由标签动态化
- 默认提供商按 id 排序取第一个活跃的(nvidia step-3.7-flash)
- 合规审查取活跃且 model=deepseek-v4-flash 的(sensenova)
- 不再硬编码
2026-06-01 14:46:22 +08:00
Yuzhiran Dev 53f105305f fix(admin): LLM 路由显示不准确
- 默认路由改为动态取第一个活跃提供商(当前为 nvidia step-3.7-flash)
- 合规审查标签改为固定 sensenova (deepseek-v4-flash)
- 移除硬编码的 opencode-go 标签
2026-06-01 14:42:32 +08:00
Yuzhiran Dev f1dc29f439 fix(llm): 分场景使用不同模型
- nvidia 激活、模型改为 step-3.7-flash → 用于日常生成/采集/优化等
- compliance_optimizer.py 显式指定 provider=sensenova → 合规审查走 deepseek-v4-flash
- _FALLBACK 同步更新为 step-3.7-flash
- 管理后台标签同步更新
2026-06-01 14:35:41 +08:00
Yuzhiran Dev 475945418e feat(llm): LLM 配置完全通过管理后台维护
- _get_provider_config 改从 DB 读取 api_key(.env 为 fallback)
- 前端 admin.html 新增 sensenova provider 选项,默认值更新为 sensenova
- 新增提供商不再需要改代码,后台直接配即可
2026-06-01 14:23:24 +08:00
Yuzhiran Dev 2c17f006fc feat(llm): 添加 sensenova 提供商,替换 opencode-go
_API_KEYS/_FALLBACK 添加 sensenova,DB 中设 is_active=true
与 opencode-go 同模型(deepseek-v4-flash),但走 sensenova 通道
2026-06-01 14:17:36 +08:00
Yuzhiran Dev 31d8434010 fix(llm): call_llm 429 自动 fallback + 移除 compliance 硬编码 provider
- nvidia_client.py 新增 _get_provider_fallback_list() 从 DB 读提供商顺序
- call_llm 循环尝试提供商列表,HTTP 429 自动跳过到下一个
- 移除 compliance_optimizer.py 中硬编码 provider="opencode-go"
- 新增 logging 模块引用
2026-06-01 13:23:35 +08:00
Yuzhiran Dev 09c467e56d ops(systemd): 添加 systemd 服务,自动恢复崩溃进程
- 创建 yzr-platform.service(Restart=always,崩溃后10秒恢复)
- 更新 AGENTS.md 命令文档
- 替换原来的 setsid/nohup 启动方式
2026-06-01 12:56:02 +08:00
Yuzhiran Dev 1084388fec fix(topics): 外键约束导致 delete 400
选题有关联 content_tasks/article/publish_record/metrics 表,
外键约束阻止删除。改为先级联删除关联数据再删选题。

前端同时显示服务端返回的具体错误信息,而不是笼统的 删除失败。
2026-06-01 12:08:51 +08:00
Yuzhiran Dev 468c9066cb fix(scheduler): _log_task 重复 INSERT 导致 zombie running 行
_log_task 在任务开始(running)和结束(success/failed)时分别
INSERT,导致 running 行永不更新,被 task monitor 标记为失败。

修复:新增 log_id 参数,传入时 UPDATE 已有行。所有 _run_* 方法
save running log_id 并在结束时传入。早期 return 处也标记失败。
2026-06-01 10:01:50 +08:00
Yuzhiran Dev 9b9ee4964b feat(assistant): 可执行操作改造,支持实时查询与任务触发
- 新增 assistant_actions.py 动作注册表(list_topics/get_system_stats/get_task_status/trigger_task/search_web 等)
- assistant.py 增加规则意图识别优先执行,失败则走 LLM ACTION 格式
- 格式化返回结果,前端无感知
- 支持查看系统统计、选题、任务日志、手动触发定时任务
2026-05-31 13:25:07 +08:00
Yuzhiran Dev 10ad549050 chore: gitignore 新增自动生成文件过滤
- 新增: automation/backups/ research/ automation/images/
- 新增: search_cache.json trends.json sustainability_cases.json
- untrack: 上述文件从 git 追踪中移除
2026-05-29 09:41:03 +08:00
Yuzhiran Dev 3fab87ee11 feat: 新增360/搜狗/微信搜索提供商 + PG15→16升级 & 项目文档更新
- search_utils.py: 新增 _call_360/_call_sogou/_call_wechat HTML爬取函数
- initial_data.py: 种子数据新增三个搜索提供商(priority 3/4/5)
- models.py: provider_type 注释补充新类型
- admin.html: 搜索提供商类型下拉框新增三个选项
- AGENTS.md/PROGRESS.md/README.md: PostgreSQL 15→16
- README.md: 移除硬编码数据库密码
2026-05-29 09:35:15 +08:00
Yuzhiran Dev bd3228806d fix: 合规审查卡死修复 + 小红书复制格式 + today-only过滤 2026-05-27 18:25:30 +08:00
Yuzhiran Dev 6585909ffc feat: optimize all 13 prompts by function+scenario; fix topic_selector hardcode
Prompt optimizations:
- topics_trends: 10→8 topics, simplified output, anti-hallucination
- topic_generate: stronger structure, user-pain focus
- topic_selector_gaps: add SEO+social instruction, clean JSON output
- section_expansion: shorter (removed over-detailed AI套话 list), cleaner
- title_optimize_*: 3 titles per line (no numbering), cleaned up
- outline_generation: simplified structure, strong anti-generic-titles
- compliance_fix/polish: expanded fix types, stronger output requirements
- sources_optimization: cleaner JSON schema
- tags_generation: added 'no thinking output' instruction
- research_summary: simplified output structure
- clean_ai_verbosity/clean_thinking_patterns: unchanged (rule-based)

topic_selector.py: hardcoded prompt → get_prompt('topic_selector_gaps')
_PROMPT_DEFAULTS seeds updated to match DB
2026-05-27 11:07:56 +08:00
Yuzhiran Dev 2c6adf1f43 fix: system_prompt now read from DB LLMConfig
- _get_db_defaults returns system_prompt from DB
- call_llm(system_prompt=None) falls back to DB value
- DB already has system_prompt set for both providers
2026-05-27 10:47:02 +08:00
Yuzhiran Dev b105eee9bb fix: add LLM config status display + routing info
- 状态列: icon → el-tag 文字标签(当前使用/未启用)
- 新增路由状态提示条, 显示默认 vs 审查固定路由
- 移动端卡片同样改为文字标签
2026-05-27 10:09:23 +08:00
Yuzhiran Dev 878daebfe0 fix: route compliance to opencode-go, others to nvidia; skip status on force-pass
1. DB active provider switched to nvidia (stepfun-ai/step-3.5-flash)
   → trends/collector/writer 默认用 nvidia
2. compliance_optimizer.py 固定 provider='opencode-go'
   → 合规审查用 deepseek-v4-flash(更好的模型)
3. force_passed 的选题不再更新为 'ready'(待发布)
   → 只有真正修复通过才更新状态
2026-05-27 09:36:34 +08:00
Yuzhiran Dev 004698cf98 fix: compliance optimizer now requires score improvement, retries LLM on failure
Bug: 'passed=True' check for soft quality issues (AI套话, 缺互动引导)
always exits immediately even when LLM failed to make changes.
Score 85 stays 85, content unchanged.

Fix:
1. polish_with_llm: retry once on exception (was: single attempt)
2. main loop: only accept fix when score actually improves AND
   LLM produced output (opt_logs non-empty). If LLM returns same html
   unchanged, treat as failed attempt and retry.
2026-05-27 09:23:49 +08:00
Yuzhiran Dev 29d97b5f1a fix: expand short sections (<100 chars) with LLM even if not bullet-only 2026-05-26 18:31:43 +08:00
Yuzhiran Dev 80023bbd6c fix: hybrid SVG+PIL PNG image rendering with CJK fonts, prompt URL reference 2026-05-26 17:38:28 +08:00
Yuzhiran Dev f94e6b0161 fix: correct subprocess script path and add TaskLog for trends trigger 2026-05-26 11:32:34 +08:00
Yuzhiran Dev ac8644d752 fix: content quality, image format, task monitor, calendar data source, search UI & sort 2026-05-26 11:26:10 +08:00
Yuzhiran Dev b2d043b231 新增用户管理/角色管理/菜单管理功能,修复创作流水线研究脚本
- 用户管理:新增编辑弹窗(修改用户名/角色/密码),增加组织/创建时间/最后登录列
- 角色管理:新增 Role 模型 + CRUD API,admin.html 新增角色管理 tab
- 菜单管理:新增 Menu 模型 + CRUD API,导航栏从 API 动态加载菜单项
- 个人中心:右上角下拉菜单(个人信息/修改密码/退出),新增修改密码 API
- 种子数据:initial_data.py 自动创建默认角色(admin/editor)和默认菜单(7项)
- 修复 research.py 缺少 enrich_topic_research 函数导致导入失败
- 修复 db_helper.py 中 generated_at 条件导致重创作不更新时间戳
- admin.html 操作列加宽防止按钮换行,平台配置增加删除按钮
- articles.html 预览弹窗加 lock-scroll=false 防止页面尺寸跳动
2026-05-22 18:34:27 +08:00
Yuzhiran Dev 1855f190f5 配置全面迁移数据库:PromptConfig、TaskConfig动态调度、敏感词/清洗规则/趋势映射/平台标签/痛点模板全部可编辑
- 新增 PromptConfig 模型 + API,支持提示词在线编辑(16条默认)
- 调度器动态读取 TaskConfig.schedule,admin 可调执行时间
- 新增 KeywordDomainMap、SensitiveWord、ContentCleanRule、TrendFieldMapping 表
- DOMAINS、TREND_DOMAIN_MAP、PLATFORM_TAGS、china_pains、RSS关键词、priority_weights 全部迁移到 DB
- tasks.html 重构:卡片网格+配置/产出/历史/提示词四个Tab,折叠显示
- 清理冗余代码:DEFAULT_PROMPTS死代码、collector.py unreachable代码、compliance_checker bug
- strip_thinking_html 改用 DB 规则优先
2026-05-22 11:18:23 +08:00
Yuzhiran Dev a8e0a76e07 任务页输入参数旁加'前往编辑'链接
- 采集类别参数 → admin.html#tab=categories
- 信息源参数 → admin.html#tab=sources
- admin.html 已支持 URL hash 自动切tab
- 新窗口打开,不打断当前任务浏览
2026-05-21 10:38:30 +08:00
Yuzhiran Dev 4e10cc95d3 清理 tasks.py 死代码 2026-05-21 10:21:45 +08:00
Yuzhiran Dev 9178f436b2 任务页面全面改版: 模块输入/输出/历史详情抽屉
后端新增:
- GET /api/tasks/modules/{module_id}/detail
  每个模块返回: inputs(自动填充的参数)、outputs(格式化产出结果)、
  history(今日运行记录)、log_excerpt(日志原文)

前端重构 tasks.html:
- 上半: 定时任务模块卡片网格(与仪表盘风格统一)
- 点击卡片→右侧抽屉展示3个tab:
  📥 输入参数: 搜索词/类别/待处理数量等(自动填充)
  📤 产出结果: 表格/标签/评分/建议等(按类型格式化)
  📋 运行记录: 日志原文+时间轴
- 底部保留创作任务列表(分页/筛选/详情)
- 抽屉底部立即运行按钮
2026-05-21 10:18:21 +08:00
Yuzhiran Dev 0dcfda0c80 数据新鲜度校验: 所有模块加上日期/时效检查
1. search_cache.json → 添加 _metadata.updated_at 时间戳
   web_search.search_from_cache() 跳过超过36h的旧缓存
   防止某查询失败时残留旧数据

2. metrics_feedback.json → collector 检查mtime,超过24h不采用

3. trends.json → 已有 date==TODAY 校验(load_trends)

4. collector_ai_advice → DB每日覆盖,时序安全
   creator→topic状态位避免重复生成
   optimizer→文章状态位避免重复审查
2026-05-21 10:09:51 +08:00
Yuzhiran Dev 5037d5d0ed 流水线整体前移1.5h,凌晨5点前全部就绪
01:00 search → 01:10 trends → 01:30 collect
→ 02:00 create → 03:00 review
→ 05:00 optimize_sources → 06:00 metrics

各间隔: 10min/20min/30min/60min/2h/1h
采集到创作30min缓冲足够(采集≈5-15min)
2026-05-21 10:04:41 +08:00
Yuzhiran Dev 56293a52a2 打通流水线闭环: trends+metrics+optimize_sources → collector
三大数据流精准注入采集器:

1. 热点趋势(trends) -> collector
   _get_trend_context() 读取 trends.json
   热搜注入 LLM 选题 prompt

2. 历史表现(metrics) -> collector
   scheduler 同步指标后按field聚合写入 feedback.json
   collector 读取后高互动领域获优先级提升

3. AI策略(optimize_sources) -> collector
   从 DB SystemConfig 读取 AI 建议注入 prompt
2026-05-21 09:48:38 +08:00
Yuzhiran Dev 6b790e77f6 全线异步化: 所有手动触发任务不再阻塞uvicorn worker
每个模块提供两个版本:
- run_xxxx() → Popen非阻塞(给API用)
- run_xxxx_blocking() → subprocess.run阻塞(给定时任务用)

API端点全部改为立即返回XX已后台启动,不再等子进程完成

受影响端点:
  /generate/run (原30min→12ms)
  /review/run (原10min→12ms)
  /collect/run (原5min→12ms,已修复)
  /optimize-sources/run (原2min→12ms)
  /trends/run (原2min→12ms)
  /refresh-search-cache/run (原10min→12ms)
  /metrics-sync/run (原N×10s→12ms)

同时增加对应GET状态端点:/collect/status,/generate/status,/review/status
2026-05-21 09:20:13 +08:00
Yuzhiran Dev 6f81167691 联网搜索能力集成: opencode webfetch → 采集器
新增:
- scripts/opencode_search.py: 通过 npx opencode run 调用 webfetch 联网搜索
- 搜索缓存每日 02:30 自动刷新 (scheduler)
- 管理后台「搜索缓存」模块 + 立即运行按钮
- POST /api/system/refresh-search-cache/run 手动触发端点
- 8个分类搜索词从sources.yaml读取,调用AI联网搜索真实内容

机制:
  Python脚本 → npx opencode run → AI webfetch → 真实搜索结果 → 写入search_cache.json
  → 采集器读缓存 → LLM基于真实数据生成选题

不再需要API Key,不依赖任何搜索引擎,搜索结果来自AI的webfetch能力
2026-05-21 09:01:02 +08:00
Yuzhiran Dev 7d50878c7d 搜索缓存: 可追踪的search_cache.json, webfetch预填充26条
新机制:
- web_search.py按优先级: 缓存→Bing API→Bing抓取
- search_cache.json由opencode webfetch手动填充(不依赖搜索引擎)
- 搜索失效不影响采集器(LLM直接生成选题)
- .gitignore移除search_cache.json(应被版本追踪)
2026-05-21 08:29:04 +08:00
Yuzhiran Dev eb1c4205fa 重写web_search: Bing API优先+抓取回退+诚实失败
- Bing Web Search API支持(设BING_API_KEY环境变量即可)
- 抓取回退但诚实面对反爬限制
- 搜索为空时采集器正常运行(LLM直接生成选题)
- 降低搜索依赖为可选增强
2026-05-21 08:14:47 +08:00
Yuzhiran Dev a26f0e936e 修复采集器流程顺序: 采集→分析→LLM总结
- _generate_topic_with_llm 改名为 _generate_topics_with_llm
- 支持同时接收已分析的案例+搜索结果作为LLM上下文
- run()顺序改为: 采集→RSS提炼案例→LLM基于全部数据生成→降级回退
- LLM现在在流程末尾做总结生成,而非开头替代搜索
2026-05-21 08:06:24 +08:00
Yuzhiran Dev 10996ce6ce 清理城市农业类别 + 修复采集器LLM直接选题
清理:
- sustainability_cases.json移除GLO-001/CHN-001城市农业案例,替换为循环消费
- initial_cases.json移除case8东京垂直农场/case26城市屋顶农场
- strategy_topics_to_json.py移除B01/B05/D05三个种菜选题
- collector.py移除城市农业→循环消费映射,更新注释
- 删除fix_collector.py/test_image_gen.py/generate_images.py等遗留脚本
- 删除import_topics.py和automation/下旧版生成脚本

修复:
- collector.py _generate_topic_with_llm不再依赖搜索结果,无搜索时LLM直接生成
- run()始终调用LLM,不再要求web_search_results非空
- 替换sources.yaml中已失效的RSS源(澎湃/虎嗅/中新网→36氪/少数派)
2026-05-21 08:02:08 +08:00
Yuzhiran Dev c8bee712d7 Phase3: 三平台封面图生成
- cover_generator.py: Pillow生成知乎/微信/小红书封面图(渐变背景+标题)
- 知乎 1200×630 蓝调, 微信 900×500 绿调, 小红书 1080×1440 红调
- creator.py 流水线增加 cover_generator 作为最终回退
- db_helper.py 新增 save_cover_to_article
- main.py 挂载 /automation/images 静态目录
- articles.py preview 接口返回 images 字段
- topics.html 预览dialog展示封面图
2026-05-20 19:12:58 +08:00
Yuzhiran Dev 40a77cad2c Phase2: 真实热点数据接入
- trends.py新增百度/微博/知乎实时热搜API抓取,LLM为fallback
- 新增 source 字段标记数据来源
- scheduler.py新增 scheduled_fetch_trends 每日03:00定时刷新
- system.py新增 POST /api/system/trends/run 手动触发端点
- system.py modules/status 加入热点趋势模块
- index.html triggerModule 加入 trends 触发按钮
2026-05-20 19:07:35 +08:00
Yuzhiran Dev 09da2f9dc4 Phase1: 效果数据真实化
- 替换scheduler.py中假随机数metrics_sync为知乎API自动获取
- 新增 POST /api/metrics/zhihu-fetch 知乎公开数据API端点
- metrics.html新增「数据录入」tab:手动录入表单+已有数据列表+知乎自动获取
- gitignore清理已跟踪的生成文件(outlines/research/images/cache)
2026-05-20 19:04:35 +08:00
Yuzhiran Dev eb800c5acc Ignore generated pipeline artifacts (outlines, research, images, search cache) 2026-05-20 18:31:44 +08:00
Yuzhiran Dev 9a328323c0 Filter outline markers in writer, add min-height to preview dialog 2026-05-20 18:11:32 +08:00
Yuzhiran Dev bf38125362 Fix compliance optimizer timeout: 600s -> 1800s to match other pipeline steps 2026-05-20 17:02:36 +08:00
Yuzhiran Dev 2244736318 Fix preview: keep article title and tags, adjust scroll height 2026-05-20 15:37:26 +08:00
Yuzhiran Dev 63f074e4df Fix preview dialog scroll & preserve HTML structure on edit save 2026-05-20 15:18:48 +08:00
Yuzhiran Dev 0a8fbda4fd Fix calendar filter, module triggers, API cleanup, consolidate get_current_admin, fix LLM schema 2026-05-20 14:15:00 +08:00
Yuzhiran Dev 498165440f Add platform config website_url, admin tab, fix writer DB config fallback, add trigger endpoints 2026-05-20 09:38:56 +08:00
Yuzhiran Dev 55e5f3d166 Fix topics mobile card list pagination: use paginatedTopics instead of filteredTopics 2026-05-19 08:28:56 +08:00
Yuzhiran Dev 1c78828681 Update PROGRESS.md (v16) 2026-05-19 07:45:18 +08:00
Yuzhiran Dev 3dce54b359 Fix writer max_tokens (500→1000) for titles/tags, fix preview scrollbar height 2026-05-19 07:44:56 +08:00
Yuzhiran Dev 0897074d40 Update PROGRESS.md with 2026-05-18 work summary (v16) 2026-05-18 23:53:49 +08:00
Yuzhiran Dev 671cec58fa Fix preview platform switching, add stale task cleanup on startup 2026-05-18 23:38:30 +08:00
Yuzhiran Dev 7b4e52743b Fix pagination: all pages default to 10 per page, add total counts, fix tasks pagination position and use client-side slicing 2026-05-18 22:59:03 +08:00
Yuzhiran Dev 894e53caef Add intermediate progress update for running tasks 2026-05-18 22:41:31 +08:00
Yuzhiran Dev f427aea1b3 Fix task status stuck at 'running': use new DB session in thread, add frontend auto-polling 2026-05-18 22:37:59 +08:00
Yuzhiran Dev 33766a396d Fix topic preview: add missing edit/save methods, fix scrollbar, strip tags from preview body 2026-05-18 19:40:26 +08:00
Yuzhiran Dev a09e7e6671 Add pagination to admin management tabs (cases/categories/sources/orgs) 2026-05-18 19:18:09 +08:00
Yuzhiran Dev 7169ddb678 refactor: writer.py 移除文件系统写入代码,HTML 仅持久化到数据库
删除 RELEASE_DIR、release_dir、out_path.write_text 等文件系统相关代码,
save_html 改为仅调用 save_article() 写入 articles 表。
避免后期维护时文件系统和数据库双源不一致的问题。
2026-05-18 08:29:08 +08:00
Yuzhiran Dev 279dc5b894 fix: writer.py 生成的 HTML 未写入数据库导致预览和合规优化均取不到内容
save_html 在写文件后新增 save_article() 调用,将 HTML 持久化到 articles 表,
使预览 API 和 compliance_optimizer 能从 DB 正常读取文章内容
2026-05-18 08:18:32 +08:00
Yuzhiran Dev 52564ad036 fix: 今日新增筛选统计不准 + LLM提示词动态当前日期 + 微信配图按选题生成
topics.html:
- 今日新增筛选时全量拉取 allTopics 用于保持 stats 统计正确,todayTopics
  存储服务端日期过滤结果
- filteredTopics 对 'today' 返回 todayTopics,不按不存在的 status 过滤

writer.py/research.py/outline.py:
- 所有 LLM 提示词注入今天的动态年月日(datetime.now)
- 禁用过时数据的年份改为动态 {当前年-1}-{当前年}
- 每个论点必须配真实最新案例+数据来源

writer.py WeChat 配图:
- 从 null placeholder 改为动态 SVG,展示选题标题+领域
- 标题自动换行(24字/行),附蓝色装饰条 + 渐变背景
2026-05-18 06:25:47 +08:00
Yuzhiran Dev bb50d5d925 fix: 今日新增筛选filteredTopics未处理'today'导致始终为空,状态筛选改为全量拉取保统计准确
- filteredTopics 对 filterStatus='today' 直接返回 this.topics(服务器已按日期过滤),避免按不存在的 status 再次过滤导致空列表
- fetchTopics 改为只有 'today' 走服务端 ?today=true;其他状态仍然全量拉取后客户端过滤,保证 statusStats 统计按钮数字准确
- 保留 watch 移除(用户能自由清除筛选)
2026-05-18 06:14:15 +08:00
Yuzhiran Dev a46fedabb5 fix: 选题页状态过滤器改用服务端过滤,移除watch覆写URL参数导致无法清除筛选的问题
- fetchTopics 根据 filterStatus 发送 status/today 参数到后端,而非全量拉取后客户端过滤
- 移除 watch.topics 处理器,解决 URL 参数反复覆写用户筛选操作的问题
- 今日新增(?today=true)和服务端 status 参数均走 API 过滤
2026-05-18 06:08:33 +08:00
Yuzhiran Dev 39719354fb perf: 全链路 LLM 提示词优化 + 微信公众号配图改为 base64 内联
- research.py: 提示词增加热点关联/独特观点储备/市场价值判断/平台搜索趋势
- outline.py: 增加反常识洞察/平台推荐优化/每章市场价值产出要求
- writer.py _expand_section: 增加独特观点/热点时效/专业简洁/平台推荐友好要求
- writer.py _optimize_title: 各平台补充搜索热词利用/情绪感召/参考真实爆款语气
- writer.py wechat配图: placeholder.jpg 改为 base64 内联 SVG(带相机图标+提示文案),预览可渲染,复制即用
2026-05-18 05:49:50 +08:00
Yuzhiran Dev 41b0f694ee feat: 平台配置表扩展配图/字数字段,微信公众号正文插入配图,合规检查从DB读规则
- PlatformConfig模型新增requires_image、image_count_min/max、image_width/height、min_words/max_words
- schemas.py同步PlatformConfigBase/Create/Update/Response新字段
- initial_data.py为三大平台填充初始值(微信需配图、字数800-1500等)
- database.py添加新列ALTER TABLE迁移
- platforms.html重写编辑弹窗(正确字段名+配图/字数设置)
- writer.py微信公众号文章正文h1后插入<img>占位
- compliance_checker.py接受platform_config参数,从DB读取规则替代硬编码
- compliance_optimizer.py启动时加载DB平台配置传入checker
2026-05-17 23:08:43 +08:00
Yuzhiran Dev 5674114599 perf: 多平台文章不再每个平台独立LLM改写,改为生成一篇通用文章后仅做格式排版适配 2026-05-17 22:57:11 +08:00
Yuzhiran Dev dc531460ea fix: 小红书文章无正常内容(LLM推理文本污染)、模块列表不匹配、脚本独立运行缺org_id列迁移 2026-05-17 22:52:05 +08:00
Yuzhiran Dev eb472d232e fix: 仪表盘概览标题颜色过浅改用CSS变量;模块状态列表从3个扩展至6个与定时任务数匹配 2026-05-17 17:01:14 +08:00
Yuzhiran Dev f2d778b5ce fix: 脚本独立运行时缺少init_db(),导致Topic表org_id列不存在,创作按钮点击后生成文章失败 2026-05-17 15:37:24 +08:00
Yuzhiran Dev 2b7935b408 fix: 补充H5移动端隐藏el-table样式,修复选题/文章页桌面表和移动端卡片同时显示的问题 2026-05-17 15:15:11 +08:00
Yuzhiran Dev 2852b6ef06 chore: 更新信息源配置(移除失效源,新增web_search和RSS源)及搜索缓存 2026-05-17 10:20:42 +08:00
Yuzhiran Dev d32fc05f4f refactor: 统一CSS设计系统 — 移除各页面重复内联样式,改用theme-modern.css自定义属性 2026-05-17 10:09:56 +08:00
Yuzhiran Dev 9c37c9a574 feat: Phase 4 多租户隔离 + 四阶段升级测试 + CSS 统一化
Phase 4: org_id 注入 JWT/API 过滤/组织管理 CRUD/前端组织列
测试: tests/test_phase_upgrades.py 97项全覆盖
CSS: theme-modern.css 共享 mobile-card-list/status-dot/search-bar 等模式
修复: initial_data.py LLM配置 NOT NULL 约束, TopicResponse 含 org_id
2026-05-17 06:56:53 +08:00
Yuzhiran Dev 301dc3e438 feat: 添加 LLM API 并发控制规则 (并发2, ≤60次/分钟) 2026-05-16 10:56:58 +08:00
Yuzhiran Dev fef435cc78 feat: 审查流程优化+采集定时调度+全链路LLM提示词升级
- 审查:移除 manual_review,改为迭代LLM修复(最多3次),合规分回写Topic
- 调度:scheduler 新增话题采集定时任务 scheduled_collect (01:30)
- 提示词:全链路8文件≈24个提示词升级,增强SEO/平台推荐/真人感
2026-05-14 21:52:02 +08:00
Yuzhiran Dev 1115223066 docs: 更新 PROGRESS.md 进度,扩展日志类型下拉
- PROGRESS.md 更新:articles 表迁移、合规审查重构、流水线流程说明
- logs.html 下拉框从 3 种扩展为 9 种日志类型(含研究/大纲/写作/发布/通知/趋势)
2026-05-13 18:24:25 +08:00
Yuzhiran Dev 233e23016c feat: 内容数据迁移至数据库,合规审查全链路打通
- 文章 HTML 存储从文件系统迁移至 articles 表,删除 releases 目录
- 合规审查从 DB 读取 HTML,审查结果写回 DB,通过后自动推进至待发布
- 新增 todayCount 筛选按钮,与系统概览统计数据一致
- 全屏预览修复:提升 z-index 超过侧边栏,添加退出全屏/关闭按钮
- 统一 '优化' → '审查' 命名,消除前后端术语不一致
- 调度器创作完成后自动触发审查(生成 → 审查 → 待发布)
- 清理旧备份/调试文件、过期大纲和研究笔记
2026-05-13 17:33:56 +08:00
lt bc6a302e59 feat: 优化选题/任务/日志页面布局并打通任务系统
- topics.html: 重构布局(page-header模式),创作改为走 /api/tasks/run-creator 任务系统
- tasks.html: 重试功能实现,调用 /api/tasks/run-creator 重新提交创作
- logs.html: 统一布局风格
- 三个页面添加 min-height / overflow-x / 统一间距
- backend/run.sh: 修复入口为 app.main:app
2026-05-09 19:58:49 +08:00
lt 25694db33b chore: 清理未使用的代码文件和备份
- 删除 backend/main.py (已由 app/main.py 替代)
- 删除 backend/api/ 和 backend/core/ (已由 app/api/ 和 app/core/ 替代)
- 删除 backend/static 符号链接
- 删除前端测试/调试页面
- 删除未引用的 vendor 子目录 (element-plus/, vue/, axios/)
- 删除所有 .bak 备份文件
2026-05-09 19:43:49 +08:00
lt 71cb4c35a8 chore: 清理 Docker 相关文件并优化前端布局
- 删除 Docker 相关文件 (docker-compose, Dockerfile, nginx.conf, init.sql 等)
- 优化 platforms.html 卡片布局和响应式样式
- 优化 users.html 格式和移动端卡片设计
- 优化 admin.html 页面结构和表格布局
- 修复各页面 min-height 和溢出问题
- 更新导航组件样式
2026-05-09 19:41:59 +08:00
lt e77a1aa4d9 fix(metrics): 修复 recommend-topics API 错误处理
- 添加 try-except 捕获空数据导致的聚合查询错误
- 添加 logging 导入用于错误日志记录
- 修复 avg_engagement/max_views 类型转换问题
- 新增 test_full_api.py 全功能测试脚本
- 所有 29 项 API 测试通过 (100%)
2026-05-08 23:53:55 +08:00
lt 526278589b feat: 完善前端页面 - 新增数据分析、素材库、创作任务、平台配置页面
- 新增 metrics.html: 数据分析页面 (Dashboard, 趋势图, 平台对比, 选题推荐)
- 新增 assets.html: 素材库页面 (上传/管理/预览/标签)
- 新增 tasks.html: 创作任务页面 (任务列表/进度/详情)
- 新增 platforms.html: 平台配置页面 (知乎/微信/小红书格式规则)
- 更新导航组件: 添加新页面入口, 适配 H5 底部导航
- 修复 calendar.html: 使用本地 Vue/ElementPlus 资源
- 修复 assets.py: db.func.count -> sqlalchemy.func.count
- 新增 test_api_unit.py: 后端 API 单元测试
- 新增 test_frontend.sh: 前端页面完整性测试

PC/H5 双端适配, 所有页面统一使用 navbar + navigation 组件
2026-05-08 23:35:26 +08:00
lt cf5103bbca feat: 全面升级项目架构 - PostgreSQL迁移 + 配置化改造
主要变更:
- 数据库: SQLite → PostgreSQL (yzr_nr)
- 选题系统: 硬编码字段 → 配置化 (TopicField/TopicConfigField/TopicStatusConfig)
- 新增模型: ContentCalendar, ContentMetrics, MediaAsset, PlatformConfig, ContentTask
- 新增 API: topic-config, calendar, metrics, assets, tasks, platform-config
- 数据迁移: 现有选题数据迁移到新 schema (field_id/tags/custom_data/scoring_data)
- 初始化数据: 10个领域, 5种状态, 3个平台配置

服务运行: http://localhost:8001
默认账号: admin / admin123
2026-05-08 18:26:01 +08:00
lt ac48304532 fix(navigation): 纯DOM注入方案,彻底避开Vue渲染问题
- installNavigation 改为直接创建/插入导航DOM
- 自动从 Vue 实例提取 isAdmin、currentPage、redirectToPage
- 不再依赖 Vue createElement 或组件渲染
- 支持移动端/PC端自适应
2026-05-08 15:28:01 +08:00
lt c13d8c29aa fix(navigation): 改用原生DOM操作,彻底解决h函数问题
- 放弃Vue h函数,直接document.createElement创建导航栏
- mounted生命周期中渲染侧边栏和移动端底部导航
- 原生JS绑定点击事件,确保功能正常
- 避免Vue3 prod版本中render函数的参数问题
2026-05-08 14:58:28 +08:00
lt df86e01cd2 fix(navigation): 增强移动端底部导航样式和调试
- mobile-nav 背景改为蓝色(#1890ff),文字白色,便于确认渲染
- 增加渲染日志(侧边栏/移动端项目数量)
- 确保所有页面都使用同一组件,统一显示
2026-05-08 13:36:28 +08:00
lt 9147d5e679 feat(frontend): 抽离页眉为公共组件;修复导航点击事件
- 新增 navbar-component.js:固定页眉,统一标题、用户信息、退出按钮
- 重构所有页面(index/topics/logs/admin/users)使用 navbar-component
- 清理原有 navbar 相关样式,避免冲突
- 导航组件增加 main-content padding-top 自动调整
- 修复导航按钮点击事件(确保  触发)
- 导航组件样式强应用,解决遮挡和布局问题
2026-05-08 13:22:12 +08:00
lt 2220d7b981 fix(navigation): 统一 redirectToPage 方法;修复内容区域宽度
- 各页面 redirectToPage 统一为直接跳转 page 参数
- 组件样式增加 main-content margin-left 避免内容被侧边栏遮挡
- 确保固定侧边栏与主内容布局正确
2026-05-08 12:42:03 +08:00
lt c85320ae72 fix(navigation): 修复布局偏移和事件跳转问题
- 移除 .navigation-wrapper 的 flex/min-height 布局干扰
- 确保 main-content 不受侧边栏占位影响
- 优化事件处理,增加点击日志
- 修复 admin 导航页面名称不一致问题
2026-05-08 12:30:49 +08:00
lt beb2cf2473 debug(frontend): 添加导航组件详细日志,便于问题排查
- 增加 mounted 生命周期日志
- 增加 installNavigation 和样式注入日志
- 在各页面注入运行态调试代码
- 优化 installNavigation 容错(fallback 直接注册)
- 添加最小测试页 test-minimal.html
2026-05-08 11:37:32 +08:00
lt ef168e3d90 feat(frontend): 公共导航组件完整实现
- 组件改为render函数,避免模板编译器依赖
- 自动注入样式,无需页面额外CSS
- 自适应布局:PC固定侧边栏,H5底部导航
- 所有页面统一使用,admin权限动态控制
- 自动调整main-content边距,防止遮挡
2026-05-08 11:03:33 +08:00
lt 5587fa0bce fix(navigation): 使用render函数替代template,兼容prod版Vue
- 重写组件为render函数实现,避免编译器依赖
- 优化按钮生成逻辑,使用JS数组map
- 修复样式注入时机和CSS冲突问题
- 确保app实例化后调用installNavigation进行注册
2026-05-08 10:57:23 +08:00
lt b8d9e0c209 refactor(frontend): 抽离公共导航组件,消除各页面重复代码
- 创建 navigation-component.js:统一的PC左边栏 + H5底部导航组件
- 重构 topics.html、logs.html、admin.html、users.html、index.html
- 删除各页面重复的 sidebar 和 mobile-nav HTML 结构
- 删除重复的导航样式定义,由组件统一提供
- 修复 component 插入重复的问题,确保每个页面只插入一次

现在修改导航只需更新组件文件,无需改动每个页面,提升维护性。
2026-05-08 10:36:51 +08:00
lt 284b18e5fc feat: 添加自动化数据目录与可持续性主题数据集 2026-05-08 09:26:46 +08:00
lt 0317a8f42f chore: 移除数据库文件跟踪,避免敏感数据入库 2026-05-08 09:26:13 +08:00
lt df5a9db3ad feat: 管理员页面整合与侧边栏导航优化
- 完成系统管理页面与导航整合
- 在 users.html/topics.html/logs.html 侧边栏与移动导航添加系统管理入口
- 创建 admin.html 管理页面(案例/任务日志/LLM配置/系统配置)
- 新增核心模块:collector.py(数据采集器)、scheduler.py(任务调度器)
- 新增脚本:collector_db_integration.py(采集器数据库整合)
- 更新项目文档并验证路由注册
2026-05-08 09:26:06 +08:00
lt 31d6306e3b feat: 数据源统一与前端预览修复
=== 后端核心 ===
- db_helper: 统一数据库访问抽象层
- system.py API:
  * 参数绑定修复: 使用 Body(embed=True) 接收 JSON
  * 添加请求日志记录
- sync.py: 仅导出 DB→JSON(备份)

=== 合规与流水线 ===
- compliance_checker: 标签检测优化(仅检查容器,避免正文误判)
- 所有脚本(creator/collector/writer/outline/research等)统一使用数据库

=== 前端改版 ===
- topics.html:
  * 创作/优化 API 路径修正
  * 预览弹窗重设计:多平台并行加载、富文本显示、单复制按钮
  * 状态中文映射(getStatusLabel)
  * 认证检查
- 所有 HTML 静态资源路径修复(移除 /static 前缀)

=== 数据一致性 ===
- 数据库状态统一为英文(pending/review/ready/published)
- 前端显示中文化映射

已测试 A03 流水线完整通过。
2026-05-07 11:25:42 +08:00
lt 8dd19a2179 style: unify layout across pages; add sidebar and mobile nav to admin page
- admin page:
  - Add sidebar navigation (system overview, topics, logs, users, admin)
  - Add mobile bottom navigation
  - Update title to "系统管理"
  - Add redirectToPage helper for navigation
- Ensure all admin pages (cases, tasklogs, llmconfigs, systemconfigs) remain functional
- Unify button labels: mobile nav uses "系统管理" for admin
- Minor: adjust navbar title
- No changes to other pages (they already had unified structure)
2026-05-06 22:06:21 +08:00
lt 8920a337e0 fix: 修复前端空白页与API调用错误,统一创作流程
- 前端
  - topics.html: 恢复结构并修复Vue初始化问题
  - 调整创作按钮逻辑:仅已发布选题禁用
  - 修正API端点与payload格式(generate/optimizer/publishing使用topic_ids数组)
  - 移除ElementPlus图标模块依赖,使用全局构建
  - admin.html: 回退至Options API版本,解决this上下文错误
- 后端
  - 注册/api/generate/run路由
  - 简化generate逻辑:允许非已发布选题重创作,更新状态为“待审查”
  - 统一logs查询接口支持query参数
  - 修复admin用户管理字段引用
  - 系统概览返回{ stats }结构
- 静态资源整理
  - 删除冗余element-plus-icons、重复CSS/JS、图标文件
  - 正确放置Vue和ElementPlus全局文件
- 数据库与数据
  - 补充30个案例
  - 更新选题状态与初始数据

验证:所有页面可访问,API认证与端点正常工作。
2026-05-06 21:44:56 +08:00
lt bd381ff65a feat: 完成系统管理页面与导航整合\n\n- 在 users.html/topics.html/logs.html 侧边栏与移动导航添加系统管理入口\n- 创建 admin.html 管理页面(案例/任务日志/LLM配置/系统配置)\n- 更新项目文档并验证路由注册 2026-05-02 10:43:34 +08:00
lt 53c3948cad feat: 增加案例/任务日志/LLM配置/系统配置管理功能\n\n- 扩展案例数据至30个\n- 新增Case, TaskLog, LLMConfig, SystemConfig的API路由\n- 完善initial_data导入脚本\n- 创建前端管理页面admin.html,支持完整增删改查\n- 更新导航菜单,增加系统管理入口 2026-05-02 09:13:44 +08:00
lt 511d40d40c feat: add Case, TaskLog, LLMConfig, SystemConfig models 2026-05-01 22:56:06 +08:00
lt bdcf32dce8 feat: add Case, TaskLog, LLMConfig, SystemConfig models 2026-05-01 14:33:00 +08:00
lt aa76f8203f optimize: refine LLM prompts for conciseness and reduce verbosity; reduce max_tokens to 1000 2026-05-01 11:53:02 +08:00
lt 601fc5d239 refactor: remove publisher, add auto DB sync, clean backups, update docs 2026-05-01 10:05:50 +08:00
lt 98c6c22a26 remove: delete obsolete frontend-vue project (no longer aligned with current frontend) to prevent confusion 2026-05-01 09:52:28 +08:00
lt 2cbf2909f8 remove: delete obsolete backend/static directory 2026-05-01 08:05:54 +08:00
lt e1613d2af9 fix: restore frontend to dynamic version (undo incorrect sync from outdated backend/static) 2026-05-01 07:51:16 +08:00
lt 94295e1f74 refactor: unify frontend source; sync latest UI changes and update project completion report 2026-05-01 07:32:55 +08:00
lt cfb60d7aae UI优化完善初版 2026-05-01 06:48:21 +08:00
lt e1ba31afda 版本1.0.4 - 发布前准备
- 修复system.py缩进错误
- 优化前端页面样式(待重构)
- 改进API接口结构
- 完善文档和自动化脚本
- 平台基本功能稳定运行
2026-04-29 09:32:43 +08:00
lt 0a31ae09af fix: 数据库配置和缺失导入
- 切换到 SQLite(app/database.py)避免外部依赖
- system.py: 添加 func 导入
- main.py: 导入改为 app.database.init_db
- 前端 topics.html: Vue 应用结构修复
- 后端导入全面修正(绝对导入)

版本: v1.0.3 (完整可运行版)
2026-04-27 23:10:06 +08:00
lt 6f0713953a fix: 修复后端导入路径问题以适配新工作区
- 统一使用绝对导入(backend 目录在 PYTHONPATH)
- 修改 main.py、api 模块、core/security 的导入
- 移除 generate 模块(缺失 GenerateTask 模型)
- 修复 database.py 导入 Base
- backend/run.sh 添加 PYTHONPATH 设置
- 前端 topics.html 修复 currentUser 初始值和 Vue 结构
- 添加前端代码语法检查脚本

版本: v1.0.3 (导入修复版)
2026-04-27 23:03:53 +08:00
lt d719181834 fix(ui): 修复 Vue 应用初始化语法错误
- currentUser 初始化改为 { username: '' }(之前遗漏空字符串)
- 通过 node --check 验证语法正确
2026-04-27 22:06:17 +08:00
lt 953b74bf52 fix(ui): 修复空用户显示和 Vue 启动问题
- currentUser 初始值改为空对象,避免 null 访问错误
- template 中添加空值保护:currentUser.username ? ... : '?'
- 确保 Vue 应用能正常挂载
2026-04-27 21:51:54 +08:00
lt 0a77e67200 fix(ui): 重构 topics.html Vue 应用结构
- 完全重写 script 部分,确保 methods 和 mounted 正确闭包
- 修复 Vue 表达式未解析的问题
- 添加调试日志
- 确保移动端和桌面端都能正确挂载
2026-04-27 21:30:44 +08:00
lt 03287697c3 fix(ui): 修复移动端数据加载显示
- 为 topic-card-list 添加 v-if 条件渲染
- 添加空状态提示
- 增强调试信息(console.log)
- 确保移动端卡片列表正确显示
2026-04-27 21:20:28 +08:00
lt 6cb273a8a9 fix(ui): 修复 H5 数据加载和导航跳转
- 修复 redirectToPage 路径拼接问题
- 增强 fetchTopics 错误提示(显示错误消息)
- 添加加载状态提示(首次加载)
- 确保 mounted 中 URL filter 参数正确解析
2026-04-27 20:22:20 +08:00
lt 4647921e01 fix(ui): 修复移动端卡片 Vue 结构和显示逻辑
- 恢复 clean 版本后重新添加移动端适配
- 修正 methods 结构,移除重复方法
- 移除内联 display:none,用纯 CSS 控制
- 添加 getStatusType 方法供卡片使用
2026-04-27 19:57:05 +08:00
lt 54c84b6681 feat(ui): 移动端适配优化 (logs, users)
- logs.html: 移动端控制栏垂直布局,日志卡片优化
- users.html: 新增移动端用户卡片列表,隐藏表格
- 统一小屏幕字体和间距
2026-04-27 19:36:03 +08:00
lt 33133430f8 feat(ui): 移动端卡片布局优化
- 新增移动端卡片列表 (≤768px)
- 表格在小屏幕自动隐藏
- 操作按钮在移动端垂直排列
- 减少表格字体/内边距以节省空间
2026-04-27 19:14:33 +08:00
lt d63074be71 chore: 更新项目路径到新工作区
- 所有自动化脚本、测试文件路径从旧工作区迁移到 /root/openclaw-workspace/projects/yu-zhi-ran/
- 保持项目独立于 OpenClaw 工作区管理
- 后端 run.sh 路径更新
2026-04-27 18:49:32 +08:00
lt 75ae5ae01f style(frontend): 减小操作列宽度
- 操作列宽度从 280 调整为 220,节省空间
2026-04-27 18:46:46 +08:00
lt 9ced46c296 fix(frontend): 菜单跳转和日志默认日期
- 修改 index.html 菜单为页面跳转(redirectToPage)
- 移动端导航同样修复
- logs.html: logDate 默认值为当天
- topics.html: 支持 URL filter 参数自动筛选

版本: v1.0.2
2026-04-27 16:55:15 +08:00
lt b85b89a569 fix(frontend): 注册 ElementPlus 插件,修复 async 语法错误
- 统一在 createApp 后调用 app.use(ElementPlus)
- 为 handlePublish 添加 async 关键字
- 修正静态资源路径引用
- 解决登录页空白、按钮不可用问题

版本: v1.0.1
2026-04-27 16:45:58 +08:00
lt 5fe426fc90 feat: 全面优化前端架构
- 本地化所有资源 (Vue3, Element Plus) 无需外部 CDN
- 重新设计主页:登录页 + 系统概览 + 侧边栏导航
- 完善管理后台功能:选题管理、系统日志、用户管理
- 全面支持 PC 和 H5 移动端(响应式布局 + 底部导航)
- 优化后端 API 返回格式,兼容前端需求
- 默认首页为登录/系统概览页面
- 统计卡片可点击筛选选题列表
- 模块状态实时展示
2026-04-27 15:14:26 +08:00
lt 1eef4c177b fix: 修复所有前端页面的 Vue 条件渲染错误,解决菜单点击后不显示内容的问题 2026-04-27 14:56:51 +08:00
lt 62af077479 feat: 修复并完善所有菜单页面的完整功能,包含真实数据、API模拟和交互 2026-04-27 14:39:50 +08:00
lt 27729d2987 feat: 创建所有菜单页面的完整功能版本,包含真实数据和交互 2026-04-27 14:33:45 +08:00
lt d0d079203a feat: 创建完整功能的选题管理页面,包含真实数据、批量操作和所有交互功能 2026-04-27 14:30:38 +08:00
lt a93d029778 feat: 为所有页面添加真实数据加载和完整交互功能 2026-04-27 14:22:43 +08:00
lt 5ff0b8e669 feat: 创建极简独立页面,纯HTML/CSS/JS,避免所有框架依赖问题 2026-04-27 14:18:56 +08:00
lt 8b5b76f6cb fix: 使用本地静态文件替代 CDN,避免浏览器安全策略阻止 2026-04-27 14:13:00 +08:00
lt 73de8702ac fix: 移除 Tailwind CDN,使用内联 CSS 样式避免浏览器安全策略阻止 2026-04-27 14:11:14 +08:00
lt 20970034b6 fix: 修复所有页面的 Element Plus 引用,统一使用 CDN 版本 2026-04-27 14:07:55 +08:00
lt 8a86d97724 fix: 修复加载顺序和CDN稳定性,使用jsDelivr + Vue 3.4.27生产版本 2026-04-27 14:05:55 +08:00
lt 9e72e5fd35 fix: 修复 Element Plus 版本兼容问题,使用 Vue 3.4 + EP 2.4.3 2026-04-27 14:00:44 +08:00
lt 2e353b7fff fix: 为独立页面添加完整 Vue + Element Plus + Tailwind 依赖 2026-04-27 13:59:31 +08:00
lt b2055df118 fix: 为独立页面添加 Tailwind CDN,确保所有类名正常工作 2026-04-27 13:55:46 +08:00
lt 0a19cc203b feat: 按菜单功能拆分页面 - index.html(主入口+概览)、topics.html、logs.html、users.html 2026-04-27 13:09:38 +08:00
lt 87ebd94719 feat: 完全重建选题管理页面,包含统一卡片容器,恢复所有功能 2026-04-27 13:00:04 +08:00
lt 5f44df1d48 feat: 安全添加统一卡片容器,仅包裹选题管理内容 2026-04-27 12:57:08 +08:00
lt 4d5e249c55 fix: 重新正确构建选题管理页面,修复 HTML 结构 2026-04-27 12:48:28 +08:00
lt d645c032ca fix: 正确添加统一卡片容器,修复 HTML 结构 2026-04-27 12:36:03 +08:00
lt 62a293e2b0 feat: 选题管理页面添加统一卡片容器,包裹标题、按钮、筛选和列表,视觉更整体 2026-04-27 12:27:51 +08:00
lt 6c6a153997 fix: 侧边栏宽度从 192px (w-48) 改为 160px (w-40),与主内容 margin-left 对齐,消除空隙 2026-04-27 12:18:17 +08:00
lt d9ffcb5840 fix: 修正布局溢出 - 侧边栏 fixed 160px, 主内容 max-width calc(100vw-160px), 消除右侧超出 2026-04-27 12:10:31 +08:00
lt fb99241a0f fix: 固定宽度布局 - 侧边栏 160px + 主内容 calc(100vw-160px) = 100vw 2026-04-27 11:57:11 +08:00
lt d3e64bd649 fix: 改用 margin-left: 160px 布局,确保总宽度=100vw,不超出边界 2026-04-27 11:54:50 +08:00
lt 17b294726a fix: 确保选题管理标题和列表右边界对齐,不超出容器 2026-04-27 11:47:22 +08:00
lt 9725ac73d4 fix: 确保选题列表卡片背景不超出页面右边界 2026-04-27 11:44:54 +08:00
lt 95f0c6b345 style: 操作列宽度调整为 210px,3 个按钮一行,第 4 个自动换行左对齐 2026-04-27 11:43:16 +08:00
lt fb83c164da style: 操作列按钮换行后左对齐,修复样式问题 2026-04-27 11:41:42 +08:00
lt c0c062e863 fix: 修复 deleteTopic 未暴露问题,调整日志下拉框宽度 2026-04-27 11:37:13 +08:00
lt 277b13eaae feat: 完成布局优化 - 操作列固定、批量按钮自适应、分类标签带数量
优化内容:
1. 表格布局:
   - 使用 calc(100vw - 160px) 确保表格不超出视口
   - 操作列 fixed='right' 固定在右侧,宽度 300px
   - 按钮 3 个后自动换行 (max-width: 200px)
   - 恢复合理列宽,不再过度压缩

2. 批量操作区域:
   - 容器改为 inline-block,宽度自适应按钮内容
   - 背景宽度与按钮总宽度匹配

3. 分类标签:
   - 显示数量 (如 '待处理 (20)')
   - 点击切换筛选,去掉误导的 'X' 图标

4. 删除功能:
   - 操作列增加删除按钮
   - 删除前弹出确认对话框

5. 系统日志:
   - 修复后端日志路径 (parents[4])
   - 404 时显示友好提示

6. 其他:
   - 左侧菜单宽度 160px
   - 所有功能保留 (登录、用户管理、批量操作等)
2026-04-27 11:32:17 +08:00
lt 59d2a76df4 style: 批量操作按钮区域改为自适应宽度,不再固定 100% 2026-04-27 11:25:11 +08:00
lt 4412adfae5 style: 调整按钮容器宽度,确保第 4 个按钮换行 2026-04-27 11:23:00 +08:00
lt 86425eb18f style: 操作列宽度 300px,按钮 3 个后自动换行 2026-04-27 11:20:57 +08:00
lt 1be6d5e57d style: 操作列宽度调整为 400px 2026-04-27 11:19:27 +08:00
lt 3ff38c5ee0 fix: 使用 calc(100vw - 160px) 技术完美固定操作列,不再超出边界 2026-04-27 11:17:27 +08:00
lt be091287b8 fix: 终极布局修复 - 表格内部滚动,操作列固定右侧,总宽约1000px 2026-04-27 11:14:48 +08:00
lt 678314682e fix: 大幅缩减表格列宽度,启用 fixed 布局,防止超出视口 2026-04-27 11:11:09 +08:00
lt 08e5df6ab7 fix: 修复表格超出边界问题,确保 max-width 100% 2026-04-27 11:09:29 +08:00
lt c95f061ec0 style: 缩小左侧菜单宽度至 160px,表格添加横向滚动防止超出边界 2026-04-27 11:07:42 +08:00
lt 379592a35d fix: 修复分类标签、删除按钮、日志 API 路径 - 保留操作列固定右侧设计 2026-04-27 11:00:11 +08:00
314 changed files with 35064 additions and 11410 deletions
+13
View File
@@ -46,6 +46,7 @@ sessions/
.cache/ .cache/
# Project specific # Project specific
automation/backups/
automation/data/drafts/* automation/data/drafts/*
!automation/data/drafts/.gitkeep !automation/data/drafts/.gitkeep
automation/data/releases/* automation/data/releases/*
@@ -54,3 +55,15 @@ automation/data/published/*
!automation/data/published/.gitkeep !automation/data/published/.gitkeep
content/published/* content/published/*
!content/published/.gitkeep !content/published/.gitkeep
automation/data/outlines/
automation/data/research/
automation/data/sustainability_raw/
automation/data/search_cache.json
automation/data/trends.json
automation/data/sustainability_cases.json
automation/images/
data/*.db
*.db
automation/data/mcp_*.json
automation/data/*_session.txt
research/
@@ -0,0 +1,10 @@
{
"sessionID": "ses_12cdfe924ffebqMk2WsK4OQD87",
"updatedAt": "2026-06-17T01:09:35.927Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-17T01:09:35.927Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_13069b590ffefKhsLBe5CKeIx4",
"updatedAt": "2026-06-16T08:46:00.608Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-16T08:46:00.608Z"
}
}
}
@@ -0,0 +1,11 @@
{
"sessionID": "ses_1dede8a7affeG6DxtfPUOviXrp",
"updatedAt": "2026-07-04T02:48:32.809Z",
"sources": {
"background-task": {
"state": "active",
"reason": "1 background task(s) active",
"updatedAt": "2026-07-04T02:48:32.809Z"
}
}
}
+115
View File
@@ -0,0 +1,115 @@
# AGENTS.md
## Stack
- **Backend**: FastAPI 0.104 + SQLAlchemy 2.0 + PostgreSQL 16 (`yzr_nr`)
- **Frontend**: Vue 3 (CDN, no build step) + Element Plus — static HTML served by FastAPI
- **Auth**: JWT (`python-jose` + bcrypt), default admin `admin/admin123`
- **Scheduler**: APScheduler (daily cron: 01:10 trends, 01:30 collect, 02:00 generate, 03:00 optimize, 05:00 sources, 06:00 metrics)
- **Task DB**: `TaskLog` (module_id/status/error_trace/result_data/triggered_by) + `TaskConfig` (params/enabled/schedule)
- **LLM**: Multi-provider (nvidia primary, opencode-go fallback). API keys in DB (managed via admin UI) or `.env`.
## Commands
```bash
# Start/stop/restart server (systemd service, auto-restart on failure)
systemctl start yzr-platform.service # 启动
systemctl stop yzr-platform.service # 停止
systemctl restart yzr-platform.service # 重启
systemctl status yzr-platform.service # 查看状态
journalctl -u yzr-platform.service -n 50 --no-pager # 查看日志
# Fallback: start without systemd (用于调试)
cd /root/openclaw-workspace/projects/yu-zhi-ran
setsid ./start-platform.sh 8001
# Run full integration test
cd /root/openclaw-workspace/projects/yu-zhi-ran && python3 tests/test_new_features.py
# Run specific scripts (from project root)
python3 scripts/collector.py
python3 scripts/creator.py --topic-id B02
```
## Project layout
```
yu-zhi-ran/
├── platform/
│ ├── backend/app/main.py # FastAPI entry, mounts frontend at /
│ ├── backend/app/api/*.py # 21 API routers
│ ├── backend/app/core/ # nvidia_client.py, scheduler.py, etc.
│ ├── backend/app/models.py # SQLAlchemy models (593 lines)
│ ├── backend/app/schemas.py # Pydantic schemas (504 lines)
│ ├── backend/app/database.py # PG env config + ALTER TABLE migrations
│ ├── backend/app/initial_data.py
│ └── backend/.env # API keys, DB creds
├── scripts/ # creator.py, writer.py, collector.py, etc.
├── tests/test_new_features.py # 33-test integration suite
└── PROGRESS.md # Single source of truth for project status
```
## Gotchas & conventions
### Server
- Shell timeout kills background processes — always use `setsid` to start
- Env in `platform/backend/.env`, loaded via `dotenv` at each module level
### Database
- `init_db()` in `database.py` runs ALTER TABLE migrations at startup (PostgreSQL)
- `USE_POSTGRES=false` falls back to SQLite (used in tests)
- Models have timezone-aware `DateTime(timezone=True)` columns
### Content quality architecture (三平台差异化)
**核心原则:三平台不再共享同一篇 markdown,各自独立展开。**
- `writer.py` 对 zhihu/wechat/xiaohongshu 分别调用 `generate_platform_markdown(platform)`,各走不同的 `section_expansion_{platform}` prompt
- 知乎:数据分析深度(400-800字/节),用「你」称呼读者
- 公众号:个人叙事对话感(300-500字/节),用「我」口吻
- 小红书:精炼干货(100-200字/节),直接给方法,可用 emoji
**字数配置:**
- 知乎 min 3000 / max 8000
- 公众号 min 2000 / max 4000
- 小红书 min 400 / max 1000
- 存于 `platform_configs` 表,`min_words` / `max_words` 字段,后台「平台管理」可改
**AI 套话检测:**
- DB 存储:`content_clean_rules` 表,`rule_type='ai_telltale'`
-`config_items.py` 中的 `DEFAULT_CONTENT_CLEAN_RULES` 种子数据
- `compliance_checker.py` 运行时从 DB 加载(`_load_ai_telltales()`),DB 不可用时回退代码硬编码列表
- 后台「配置管理→敏感词/清理规则」可增删改(操作 `ContentCleanRule` 表)
### Prompts (`prompt_configs` table)
- **DB 是唯一来源**,修改 prompt 直接 `UPDATE prompt_configs SET content = '...' WHERE key = '...';`
- 代码 `scripts/prompt_loader.py` 中的 `_PROMPT_DEFAULTS` **仅作种子数据**,第一次写入后就不再生效
- 新增 prompt:在 `_PROMPT_DEFAULTS` 添加定义 → 重启后自动补入 DB(仅当该 key 不存在时)
- 修改 prompt:**直接改 DB,不要改代码**(除非要更新种子供新环境用)
- DB 不可用时回退代码默认值(仅紧急模式)
- 三平台独立 section_expansion 提示词 key: `section_expansion_zhihu` / `section_expansion_wechat` / `section_expansion_xiaohongshu`
- 标题提示词去套路化,使用自然语言(不像 AI 写的 prompt)
### Prompt quality checks (`compliance_checker.py`)
- 软质量问题(AI套话/人称混用/阅读体验)只降分、不挡流程(`passed=true`
- 硬合规问题(敏感词/法律/品牌)扣分多且阻塞流程
- AI 套话从 DB `content_clean_rules(rule_type='ai_telltale')` 加载,后台可动态管理
- 人称检查修正:去掉「大家」误报,仅检查「你们」和「你」混用
### LLM
- `call_llm()` in `core/nvidia_client.py` — reads active provider from DB `LLMConfig.is_active`, API key from env
- DeepSeek reasoning models return `reasoning_content` (thinking) + `content` (answer). `call_llm` prefers `content`, falls back to tail of `reasoning_content`
- `max_tokens` must be generous (≥500 for tags/titles, ≥2000 for article content) — reasoning models consume tokens for thinking
- Schema (`LLMConfigResponse`) must include `provider`, `base_url`, `api_key` fields or they get silently dropped from API responses
### Frontend
- No npm build step — edit `.html` files directly
- H5 mobile nav only created when `window.innerWidth <= 768`
- `navigation-component.js` + `navbar-component.js` injected as Vue components
- For date filters on topics, use backend `?today=true` (server-side `date.today()`) — client-side `new Date()` gives UTC which differs from Asia/Shanghai by 8h
### Tests
- `test_new_features.py` starts its own uvicorn on port 18503, runs against SQLite
- Run from project root: `python3 tests/test_new_features.py`
### Project status
- PROGRESS.md is the single truth source for progress — update it after any significant task
- `archive/` dir keeps historical/outdated docs with `YYYY-MM-DD` date suffix
+869
View File
@@ -0,0 +1,869 @@
# 宇之然 · 项目进度总览
> 本文件为项目进度唯一真理源,所有进度信息以此为准。
> 其他文档中的进度描述一律以本文为准。
**最后更新**2026-07-04 (v26)
---
## 一、项目总览
| 项目 | 内容 |
|------|------|
| 品牌 | 宇之然 — 科技沟通万物,愿世间百态回归自然 |
| 技术栈 | 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_mcpopencode 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/H510 页迁移完成 |
| 文章管理页面 (articles.html) | 2026-05-16 | 新增 articles API (list/detail/delete) + 完整管理页面,支持筛选/搜索/预览/删除 |
| CSS架构统一整合 | 2026-05-16 | reset/body/layout/card/page-header/filter/toolbar 移入 theme-modern.css86→127行),10页内联CSS总量从~660行降至~400行;preview对话框CSS归一化;删除 dead JSindex.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 → `<el-icon>` 批量替换 |
| 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 后插入 `<img>` 占位 |
| 合规检查从 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_dataTaskConfig 模型新建含 params/schedule/enabledscheduler.py 全 7 个任务执行前后写 TaskRunmodules/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.serviceRestart=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 页 `<div id="app">` + `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` APIadmin.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 PNG62KB);之前 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** — `<meta name="description">`, `<meta name="keywords">`
- **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.html31070 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**
- `/` → 200landing.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_id941 行)|
| `platform/backend/app/database.py` | ALTER TABLE 迁移逻辑(170 行)|
| `platform/backend/app/api/auth.py` | org_filter + require_role196 行)|
| `platform/backend/app/schemas.py` | 6 个响应 schema 追加 org_id637 行)|
| `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 |
---
## 十三、2026 合规与市场契合升级(v26 · 2026-07-04
### 背景:2025-09-01《人工智能生成合成内容标识办法》正式施行
微信/小红书/抖音/B站/微博 强制 AI 生成内容**主动声明标识**;未标识/疑似 AI 内容限流、下架、封号。微信 3-27 新规明确禁"非真人自动化创作行为"(脚本/程序托管全程代写代发)。叠加创作者痛点从"怎么写快"转向"怎么不被限流/怎么有活人感/怎么变现",项目做了一轮合规与市场化升级。
### P0 — 合规生存(已落地)
| 改造 | 文件 | 说明 |
|------|------|------|
| 强制 AI 生成标识注入 | `scripts/writer.py` | 新增 `inject_ai_disclosure()`:按《标识办法》给三平台正文文末注入「AI 辅助创作」声明(显式),head 注入 `ai-generated` meta + AIGC 隐式标识 JSON-LD(隐式)。默认开启,可由 `SystemConfig(disclose_ai=false)``YZR_DISCLOSE_AI=0` 关闭 |
| 发布模块去伪 | `platform/backend/app/api/publishing.py` | **删除伪造的 `status='success'`**:发布接口改为生成发布稿 + 置选题为 `pending_publish`(待人工发布),PublishRecord 状态为 `pending_manual`;明确"AI 稿须真人校验声明后手动发布,系统不代发" |
| LLM 降级响亮失败 | `scripts/writer.py` | `_expand_section` 在 LLM 缺失时标记 `_degraded``run()` 结尾对降级稿报错告警,不再静默吐稀薄内容混入库 |
### P1 — 市场契合(已落地)
| 改造 | 文件 | 说明 |
|------|------|------|
| AI味检测+净化 可见化 | `platform/backend/app/api/ai_slop.py` + `platform/frontend/ai-slop.html` | 新 APIGET /report 跑合规检测、POST /purify 一键净化)+ 新前端页 + 导航"AI味检测"。把已有的去套话/合规能力变成用户可感知卖点(直击 2026 限流焦虑) |
| 长文→短视频拆条 | `scripts/shortvideo.py` + `scheduler.py` | 新脚本将选题长文拆成 N 条短视频脚本(口播/分镜/适配平台),入库 `articles(platform=shortvideo_i)`;新增定时任务 `scheduled_shortvideo` 08:00,对前日待发布选题自动拆条 |
| 外部推广去伪 | `platform/backend/app/api/external_promotion.py` | 新增 `POST /api/external/audit/run` 真实调用 `seo_auditor.py`(此前该脚本从未被任何接口/调度触发),让 SEO 审计可用而非摆设 |
### P2 — 健壮性(已落地)
| 改造 | 文件 | 说明 |
|------|------|------|
| 指标同步扩平台 | `platform/backend/app/core/scheduler.py` | `_run_metrics_sync` 从仅知乎扩展为遍历 `platform_urls`;微信/小红书无公开 API 时优雅跳过并日志说明,不再伪装"仅知乎有数据" |
| 合规闸门防绕过 | `scripts/compliance_optimizer.py` | `force_pass` 选题不自动推进到 `ready`(保留待审查),避免绕过合规闸门直接进发布 |
### 关键文件变更汇总
| 文件 | 类型 | 说明 |
|------|------|------|
| `scripts/writer.py` | 修改 | AI 标识注入 + 降级标记 |
| `platform/backend/app/api/publishing.py` | 修改 | 发布去伪,改待人工发布 |
| `scripts/compliance_optimizer.py` | 修改 | force_pass 不推进状态 |
| `platform/backend/app/api/ai_slop.py` | 新建 | AI味检测/净化 API |
| `platform/frontend/ai-slop.html` | 新建 | AI味检测页 |
| `scripts/shortvideo.py` | 新建 | 长文→短视频拆条 |
| `platform/backend/app/core/scheduler.py` | 修改 | 指标扩平台 + 短视频定时任务 |
| `platform/backend/app/api/external_promotion.py` | 修改 | SEO 审计可触发 |
### 验证
- 全部修改文件 `ast.parse` 通过;`app.api.ai_slop / publishing / external_promotion``core.scheduler` 在 venv 下 `import` 成功
- 注:本次为代码升级,**未重启服务/未跑全量测试套件**;发布/净化/拆条需运营在真实平台按声明手动完成
---
## 十二、规范说明
### 规划文档
| 文档 | 位置 | 说明 |
|------|------|------|
| 升级计划 | `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 摘要
```
---
## 第十四章:前端布局修复 + 盈利模式(私有化/白标)升级
**日期**2026-07-11
**目标**:① 修复前端布局/样式不合理项;② 将项目从"自用中台"升级为"可私有化部署 / 白标转售"产品。
### 一、前端布局/样式修复
- **A1 导航未固定 + 顶部双空隙**:`uni-nav.js` 删除 `<nav>` 内联 `position:relative`,恢复 CSS `position:fixed`。(同步修复 A3 移动端下拉菜单脱离)
- **A2 平板导航裁切**:汉堡菜单断点由 `max-width:768px` 提升至 `1000px`,769–1000px 链接改走下拉,不再静默丢失。
- **A4 预览弹窗偏右**`theme-modern.css` 移除 `@media(min-width:769px)``.preview-dialog-custom{left:90px}`,对话框恢复居中(影响 articles.html / factory.html)。
- **A6 卡片横向滚动条**`.card` 去掉 `overflow-x:auto`(el-table 自带内部滚动,重复滚动条消除,阴影不再被裁)。
- **A5 暗色模式半成品(对比度不可读)**:暂禁用 `prefers-color-scheme:dark` 块,统一亮色主题,待引入 EP 暗色变量后启用。
- **topics.html 筛选表单响应式**6 个 `el-col``:xs/:sm/:md` 断点,移动端堆叠不溢出。
- **metrics.html 统计卡**`.stats-grid``repeat(4,1fr)` 改为 `repeat(auto-fit,minmax(180px,1fr))`,平板自适应列数。
- **factory.html**`.topic-grid``minmax(min(340px,100%),1fr)`,≤320px 屏不溢出。
### 二、盈利模式升级:白标 + 私有化部署
- **白标配置后端**:新增 `api/branding.py`
- `GET /api/branding`(公开,无需登录):返回 `brand_name/brand_logo/brand_primary_color/brand_support_email/version`
- `PUT /api/branding`(管理员):更新白标配置,写入 `system_configs`
- `main.py` 注册 `branding.router`
- **白标种子**`initial_data.py` 写入 `brand_name/brand_logo/brand_primary_color/brand_support_email` 默认。
- **前端应用品牌**`uni-nav.js` `mounted``/api/branding`,动态设置平台名、Logo、导航渐变主色,并写入 `--color-primary`;新增 `branding.html` 白标设置页(管理员,含实时预览)。
- **导航入口**`initial_data.py` 菜单加「白标设置」(admin),`uni-nav.js` 默认 admin 项补充。
- **部署包 `deploy/`**
- `Dockerfile`python:3.11-slim,默认 SQLite,零依赖)
- `docker-compose.yml`(含可选 PostgreSQL 服务与数据卷)
- `.env.example`(管理员密码 / LLM Key / 数据库)
- `README.md`(私有化 + 白标交付指南、定价建议)
### 验证
- 服务 `yzr-platform.service` 重启成功,无启动错误。
- `GET /api/branding` 返回种子默认值;`PUT` 管理员保存后持久化生效,重置回默认。
- `node --check uni-nav.js``ast.parse(branding.py)` 均通过。
### 待办(已解决,见第十六章)
- ~~`init_db()` 的 SQLite `topics.series` 迁移缺口(测试 32/33)~~:经复跑为陈旧 `test.db` 所致,当前 33/33 全过;迁移 fallback 对 SQLite 正常。
- 菜单幂等播种缺陷(见第十六章):`initial_data.py``if Menu.count()==0` 全有/全无逻辑导致已在库时章节四新增的"文章管理/内容工厂/白标设置"未入库,导航不可达,已修复。
---
## 第十五章:移动端响应式补全
**日期**2026-07-11
**目标**:审计并补全全部前端的移动端(≤420px)适配。
### 审计结论
- 已良好适配:topics / articles / campaigns / tasks / metrics / insights / platforms / assets / factory / index / landing / login / users / logs(表格均有 card-list 兜底或本就是卡片布局;固定宽弹窗由全局 `≤768px` 全宽规则兜底)。
- 真实破裂点(3 处 el-table 无移动端兜底):
1. `ai-slop.html` 问题明细表(line 47
2. `calendar.html` 日程弹窗内 `selectedDayEntries` 表(line 189
3. `admin.html` 平台配置表(line 202,缺 `data-table` 类,全局隐藏规则未覆盖)
### 修复
- 三处统一改为「`el-table`(`.card-table`/`.data-table`) + `.card-list-mobile` 卡片列表」的 `v-if`/`v-else` 兜底,沿用 `theme-modern.css``.card-list-mobile` 全局样式(≤768px 自动切换)。
- 桌面端表格保留,移动端自动转为可点列表,操作按钮(编辑/删除/查看)一并带入卡片。
- 校验:三页结构 `v-if`/`v-else` 配对正确,HTTP 200 正常服务。
### 结论
前端现已**完整支持移动端响应式**:所有数据表在窄屏均以卡片列表呈现,导航/筛选/弹窗/统计网格均自适应,无横向溢出。
---
## 第十六章:菜单播种缺陷修复(导航可达性)
**日期**2026-07-11
**触发**:生产服务重启后核对 `/api/menus/active`,发现导航缺少"文章管理 / 内容工厂 / 白标设置",而 `articles.html`(章节四重写)、`factory.html``branding.html` 均为真实页面 → 这些入口被"孤立",用户无法从导航进入。
### 根因
- `initial_data.py` 菜单播种原逻辑为 `if db.query(Menu).count() == 0:` —— **仅当菜单表完全为空时才播种**
- 生产库此前已有旧菜单集,故章节四新增的三个菜单从未插入;`uni-nav.js` 运行时以 DB 菜单覆盖 fallback,于是三个入口从导航消失。
- 另:旧库首页菜单 `path="index.html"`(无斜杠)与新种子 `"/index.html"` 不匹配,初次修复导致"工作台"重复出现(count 13)。
### 修复
- 菜单播种改为**按 path 幂等对齐**:已存在则更新 `sort_order/roles/icon/is_active`(保留原名称,避免意外重命名),缺失则插入。
- 新增首页路径归一化:若同时存在 `index.html``/index.html` 则删除旧的;若仅 `index.html` 则改路径为 `/index.html`,消除重复入口。
- `init_db()` 在每次启动执行,重启后自动对齐。
### 验证
- 重启 `yzr-platform.service``/api/menus/active` 返回 **12 个菜单**,顺序正确、无重复:工作台→选题→文章管理→内容工厂→数据→日历→素材→任务→外推营销→AI味检测→白标设置→系统。
- 12 个对应 HTML 页面均 HTTP 200。
- `python3 tests/test_new_features.py`:**33/33 通过**(菜单播种变更未破坏 seeding)。
### 当前完整导航(运营闭环)
选题 → 内容工厂生成 → 文章管理编辑/AI味检测 → 发布记录标记已发布(合规:系统不代发,真人校验后手动发布)。
---
## 第十七章:创作流程统一(导航去碎片化)
**日期**2026-07-11
**目标**:将分散的「选题 / 内容工厂 / 文章管理」三个独立导航入口合并为单一「创作工作台」,减少导航碎片化。
### 方案
采用 **`studio.html` 单一入口 + `el-tabs` 内嵌三个已有页面(`?embed=1` 模式)**,而非重写三套逻辑——复用已验证页面,零逻辑重复、风险最低。
### 实现
- **新增 `studio.html`「创作工作台」**`el-tabs` 三个标签页(选题 / 内容生成 / 文章管理),各以 `<iframe>` 懒加载对应页面(`topics.html?embed=1` 等);首次切到才加载,保留各页状态。整页 flex 布局填满视口,iframe `position:absolute; inset:0` 自适应。
- **嵌入模式 `?embed=1`**`topics.html` / `factory.html` / `articles.html``mounted` 检测 `embed` 参数 → `isEmbed=true``<body class="embed">`
- `<uni-nav>``v-if="!isEmbed"` 隐藏子页面自身导航(避免双层导航);
- `theme-modern.css` 新增 `body.embed .main-content { padding-top:0 }` 去掉顶部留白;
- 跨页链接(`redirectToPage` / `goToArticles`)在 embed 下改用 `window.top.location.href`,整页跳转而非 iframe 内嵌套。
- **导航收敛**`initial_data.py` 菜单种子以「创作工作台→studio.html」替换原三入口,并将 `topics.html/factory.html/articles.html``is_active=False`(页面仍可被 studio 内嵌与直接 URL 访问,不丢失功能);`uni-nav.js` fallback 同步更新。
- 排序:工作台(0) → 创作工作台(1) → 数据(2) → 日历(3) → 素材(4) → 任务(5) → 外推营销(6) → AI味检测(7) → 白标设置(8,admin) → 系统(9,admin)。
### 验证
- 重启 `yzr-platform.service``/api/menus/active` 返回 **10 个菜单**,含「创作工作台(studio.html)」,原三入口已不在主导航。
- `studio.html / topics.html / factory.html / articles.html` 均 HTTP 200studio 内 iframe `src``embed=1`
- 三个页面内联脚本 `node --check` 通过;`initial_data.py` 编译通过。
- `python3 tests/test_new_features.py`**33/33 通过**。
### 当前导航(10 项,创作闭环归于单一入口)
工作台 → **创作工作台(选题·生成·文章)** → 数据 / 日历 / 素材 / 任务 / 外推营销 / AI味检测 / 白标设置 / 系统。
---
## 第十八章:商业模式与官网营销升级
**日期**2026-07-11
**目标**:把产品从自用工具定位升级为可对外售卖的 AI 内容中台,并在官网首页展示「免费试用 / 私有化部署 / 源码售卖」三种模式。
### 方案沉淀
- 新增 `docs/BUSINESS_MODEL.md`:功能盘点 + 2026 市场需求 + 三模式可行性 + 首页改造方案 + 定价建议。结论:以私有化部署 + 源码售卖为主力,免费试用作获客钩子(避开纯 SaaS 红海)。
### 实现(landing.html 改造)
- **定价区(#pricing)重构为三段式**:免费试用(¥0 起,私有化试用版/演示)→ 私有化部署(¥29,800 起买断,推荐,featured)→ 源码售卖(面议授权)。CTA 统一锚定 #contact
- **FAQ 增补**:私有化部署说明、源码采购、免费试用申请、AI 内容合规(不代发/人工闸门)、数据安全/多租户。
- **新增「开始合作」联系区(#contact)**:联系信息卡 + 轻量线索表单(姓名/公司/合作方式/联系方式/需求),提交唤起 mailto 至 hello@yu-zhi-ran.com(无后端依赖,低风险)。
- **文案对齐**:导航「免费使用」→「免费试用」+ 新增「联系销售」;Hero / CTA 按钮对齐;移动端菜单同步。
- **deploy/README.md**:交付建议同步为三模式定价。
- 新增 `.contact` 相关 CSS(深色区块,与 `.cta` 视觉一致)。
### 验证
- `curl /landing.html` → 200;新内容(免费试用/私有化部署/源码售卖/id="contact"/trialForm/申请试用/获取报价/联系销售)均存在。
- `<section>` 开合平衡(8/8);旧 SaaS 三档(入门/专业/企业版)已清除。
- 未做后端线索入库(当前 mailto 方案足够);若需留资分析可后续加 `/api/leads`
### 待办(可选)
- 真实线索入库(Lead 表 + /api/leads);私有化试用版自动下发;报价单生成。
-243
View File
@@ -1,243 +0,0 @@
# 宇之然项目目录结构说明
## 整体布局
```
yu-zhi-ran/ # 项目根目录
├── platform/ # ⭐ 管理平台(Web UI + API
│ ├── backend/ # FastAPI 后端
│ │ ├── app/
│ │ │ ├── main.py # 入口
│ │ │ ├── database.py # 数据库连接(SQLite
│ │ │ ├── models.py # Topic, Article 模型
│ │ │ ├── schemas.py # Pydantic 验证
│ │ │ ├── initial_data.py # 初始数据导入
│ │ │ ├── api/ # REST API 路由
│ │ │ │ ├── system.py # │ 系统状态、流水线控制、日志
│ │ │ │ ├── topics.py # │ 选题 CRUD
│ │ │ │ ├── publisher.py # │ 发布包管理
│ │ │ │ └── articles.py # │ 文章查看
│ │ │ └── core/ # │ 业务逻辑封装
│ │ │ ├── generator.py # │ 调用 scripts/creator.py
│ │ │ ├── optimizer.py # │ 调用 scripts/compliance_optimizer.py
│ │ │ └── sync.py # │ 同步 JSON → 数据库
│ │ └── requirements.txt
│ ├── frontend/
│ │ └── index.html # Vue 3 SPACDN 依赖)
│ ├── run.sh # 快速启动脚本
│ ├── check.py # 部署前检查
│ ├── README.md # 平台使用文档
│ └── PORTFOLIO.md # 架构详解
├── automation/ # 🔄 自动化流水线数据与日志
│ ├── scripts/ (软链) → ../scripts/ # 实际脚本在 ../scripts/
│ ├── data/ # 数据存储
│ │ ├── sustainability_topics.json # ⭐ 核心:选题库
│ │ ├── drafts/ # 草稿(按日期)
│ │ │ └── 2026-04-19/
│ │ │ ├── A02_zhihu.md
│ │ │ ├── A02_wechat.md
│ │ │ └── A02_xiaohongshu.md
│ │ └── releases/ # 发布包(按日期)
│ │ └── 2026-04-19/
│ │ ├── zhihu/zhihu_A02_zhihu.html
│ │ ├── wechat/wechat_A02_wechat.html
│ │ └── xiaohongshu/
│ └── logs/ # 运行日志
│ ├── collector_2026-04-19.log
│ ├── creator_2026-04-19.log
│ ├── optimizer_2026-04-19.log
│ └── publisher_summary_2026-04-19.json
├── scripts/ # 🛠️ 底层 CLI 脚本(被 automation/scripts/ 调用)
│ ├── collector.py # 采集热点 + 本地降级
│ ├── creator.py # 研究→大纲→撰写流水线
│ ├── compliance_optimizer.py # 合规检查 + 自动修复
│ ├── publisher.py # 发布包生成(HTML + 指南)
│ ├── research.py # 资料收集(API + 本地)
│ ├── outline.py # 大纲生成
│ ├── writer.py # 核心撰写逻辑
│ ├── wecom_notifier.py # 企业微信通知(可选)
│ └── ...(其他辅助脚本)
├── content/ # 📚 已发布内容存储
│ ├── published/ # 按 topic_id 组织
│ │ ├── A01/
│ │ │ └── 手动发布/
│ │ │ ├── 知乎/文章.html
│ │ │ └── 小红书/文章.html
│ │ └── A02/
│ ├── drafts/ # 草稿(可选)
│ ├── ideas/ # 选题记录(Markdown
│ └── images/ # 配图资源
├── config/ # ⚙️ 配置文件
│ ├── sources.yaml # RSS/网页源配置
│ └── wecom_config.yaml # 企业微信机器人配置
├── brand/ # 🏷️ 品牌资产
│ ├── brand-book.md # 愿景、调性、原则
│ └── guidelines.md # 内容创作指南
├── strategy/ # 📈 内容策略
│ └── 全球-本土比较研究与全新内容战略规划-2026-04-15.md
├── tasks/ # 📋 项目管理
│ └── todo.md
├── research/ # 📊 行业研究
│ └── trends-2026.md
├── logs/ # 📝 根目录日志(兼容)
├── backup/ # 💾 备份归档
├── README.md # 项目总览
├── YUZHIRAN_PLATFORM.md # 完整文档(本文件同级)
├── TEST_FULL_PIPELINE.md # 测试指南
├── test_full_pipeline.py # 全流程测试脚本
├── run_publisher.sh # 快速发布脚本
└── start-platform.sh # 启动管理平台(新增)
# 软链接
automation/scripts → ../scripts/
```
---
## 🔗 关键依赖关系
### platform/backend/app/core/*.py 的路径计算
| 文件 | parents 层数 | PROJECT_ROOT 指向 |
|------|-------------|-------------------|
| `database.py` | `parents[3]` | `yu-zhi-ran/` |
| `initial_data.py` | `parents[3]` | `yu-zhi-ran/` |
| `generator.py` | `parents[4]` | `yu-zhi-ran/` |
| `optimizer.py` | `parents[4]` | `yu-zhi-ran/` |
| `sync.py` | `parents[4]` | `yu-zhi-ran/` |
| `api/system.py` | `parents[4]` | `yu-zhi-ran/` |
| `api/publisher.py` | `parents[4]` | `yu-zhi-ran/` |
**规律**
-`app/` 一级:`parents[3]``yu-zhi-ran/`
-`app/api/``app/core/``parents[4]``yu-zhi-ran/`
✅ 所有路径已统一修正,可正常工作。
---
## 🚀 工作流程
### 自动流水线(cron
```
每天 05:00 → collector.py → automation/data/sustainability_topics.json(新增选题)
每天 05:30 → creator.py → automation/data/drafts/ + HTML 发布包
每天 05:45 → compliance_optimizer.py → 自动合规检查
每天 06:00 → publisher.py → content/published/(手动发布包)
```
### Web 平台手动控制
```
前端界面
├─▶ POST /api/system/generate/run
│ ↓
│ core/generator.py → subprocess(scripts/creator.py)
│ ↓
│ sync_all_topics() → 更新数据库
├─▶ POST /api/system/optimize/run
│ ↓
│ core/optimizer.py → subprocess(scripts/compliance_optimizer.py)
│ ↓
│ 读取 optimization_report.json → 更新数据库
└─▶ POST /api/publisher/generate/{topic_id}
api/publisher.py → subprocess(scripts/publisher.py --topic-id X)
复制 HTML 到 content/published/X/手动发布/
```
---
## 📁 数据源唯一性
**核心数据文件**`automation/data/sustainability_topics.json`
这是系统中**唯一**的选题状态源:
- `collector.py` 写入新选题(status: "待处理"
- `creator.py` 更新为"待审查" → "draft"
- `compliance_optimizer.py` 更新为"待发布"
- `publisher.py` 更新为"已发布"
- `platform``sync.py` 同步此 JSON 到 SQLite 供前端快速查询
**不要手动编辑数据库**!应通过脚本或 API 修改 JSON。
---
## 🎯 部署检查清单
- [x] Python 依赖安装 (`platform/backend/requirements.txt`)
- [x] 虚拟环境创建(可选)
- [x] 数据目录存在 (`automation/data/`)
- [x] 日志目录存在 (`automation/logs/`)
- [x] 选题 JSON 存在 (`automation/data/sustainability_topics.json`)
- [x] 前端文件就绪 (`platform/frontend/index.html`)
- [x] 软链接 `automation/scripts → ../scripts/` 正常
- [x] 端口 8000 可用
- [ ] cron 定时任务已配置(如需自动运行)
---
## 🔧 常见命令
```bash
# 1. 启动管理平台
cd yu-zhi-ran
./start-platform.sh 8000
# 2. 手动运行完整流水线(测试)
python test_full_pipeline.py --topic-id A05
# 3. 查看日志
tail -f automation/logs/creator_$(date +%Y-%m-%d).log
tail -f automation/logs/optimizer_$(date +%Y-%m-%d).log
tail -f automation/logs/publisher_summary_$(date +%Y-%m-%d).json
# 4. 查看选题库状态
python -c "import json; d=json.load(open('automation/data/sustainability_topics.json')); print(f'总:{len(d)}, 待处理:{sum(1 for t in d if t.get(\"status\")==\"待处理\")}, 待发布:{sum(1 for t in d if t.get(\"status\")==\"待发布\")}')"
# 5. 触发单步任务
python scripts/collector.py
python scripts/creator.py --topic-id A01
python scripts/publisher.py --topic-id A01
# 6. API 测试
curl http://localhost:8000/api/system/status | python3 -m json.tool
```
---
## 📝 说明
### 为何保留软链接?
`automation/scripts/` 通过软链接指向 `../scripts/`,原因:
- 历史兼容:部分脚本内部使用了硬编码路径 `PROJECT_ROOT/scripts/`
- 统一管理:所有脚本集中在一个目录,便于维护
- 避免复制:减少磁盘占用和同步问题
### platform 与 automation 的关系
- **platform**: Web 管理界面 + API 服务
- **automation**: 数据存储 + 日志归档 + 软链接脚本
- **scripts**: 实际执行逻辑(CLI 工具)
platform 通过 `subprocess` 调用 `scripts/` 中的脚本,输出写入 `automation/data/``automation/logs/`
---
**更新日期**: 2026-04-19
**维护**: AI 助手小然
-141
View File
@@ -1,141 +0,0 @@
# 小红书自动化推广系统(yzr-yxl会话隔离版)
## 📋 项目概览
为手机配件京东店铺设计的**小红书自动化内容发布系统**,当前会话完全隔离,不影响其他agent。
## 🗂️ 目录结构
```
/root/.openclaw/workspaces/yzr-yxl/
├── sessions/promoter/ # 🔒 会话隔离存储
│ ├── cookies/ # 登录状态
│ ├── screenshots/ # 操作截图
│ └── logs/ # 运行日志
├── scripts/ # 自动化脚本
│ ├── xhs-promoter.sh # 基础脚本
│ └── xhs-publish-advanced.sh # 高级脚本
├── content/ # 内容库
│ ├── posts/ # 笔记内容
│ └── images/ # 图片素材
├── cron/ # 定时任务配置
│ └── promoter-schedule.json
└── docs/ # 文档
└── xhs-setup-guide.md
```
## ✅ 已完成
1. **环境搭建**
- [x] 创建会话隔离目录结构
- [x] 验证 agent-browser 可用(v0.23.0
- [x] 验证 Xvfb 支持
- [x] 分析小红书登录页结构
2. **脚本开发**
- [x] 基础登录/检查/发布脚本
- [x] 高级发布脚本(批量、定时、状态监控)
- [x] 示例内容模板(手机配件场景)
3. **配置文档**
- [x] 设置指南(Cookie导入)
- [x] 定时任务配置
## ⏳ 待完成
1. **登录授权**(需要你的操作)
- [ ] 获取小红书Cookie
- [ ] 上传到隔离目录
- [ ] 验证登录状态
2. **内容准备**
- [ ] 准备产品图片
- [ ] 创建真实内容文件
- [ ] 测试单篇发布
3. **自动化测试**
- [ ] 测试定时发布
- [ ] 监控日志输出
- [ ] 调整风控参数
## 🚀 快速开始
### 1. 查看当前状态
```bash
/root/.openclaw/workspaces/yzr-yxl/scripts/xhs-publish-advanced.sh status
```
### 2. 查看帮助
```bash
/root/.openclaw/workspaces/yzr-yxl/scripts/xhs-publish-advanced.sh help
```
### 3. 创建示例内容
```bash
/root/.openclaw/workspaces/yzr-yxl/scripts/xhs-publish-advanced.sh sample
```
### 4. 查看示例内容
```bash
cat /root/.openclaw/workspaces/yzr-yxl/content/posts/sample-post.json
```
## 🔐 登录步骤(关键)
由于服务器无图形界面,需要**Cookie导入**方式登录:
### 方式一:浏览器扩展导出(推荐)
1. 在本地电脑登录 [creator.xiaohongshu.com](https://creator.xiaohongshu.com)
2. 安装 [EditThisCookie](https://chrome.google.com/webstore/detail/editthiscookie/) 扩展
3. 导出为 JSON 格式
4. 保存到服务器的隔离路径:
```
/root/.openclaw/workspaces/yzr-yxl/sessions/promoter/cookies/xhs-session.json
```
### 方式二:手动复制Cookie
1. F12打开开发者工具 → Application → Cookies
2. 复制关键字段:`session_id`, `web_id`, `gid`, `a1` 等
3. 创建JSON文件:
```json
[
{"name": "session_id", "value": "your_value", "domain": ".xiaohongshu.com"},
{"name": "web_id", "value": "your_value", "domain": ".xiaohongshu.com"}
]
```
## 📊 自动化能力
| 功能 | 状态 | 说明 |
|------|------|------|
| 登录状态保持 | ✅ | Cookie隔离存储 |
| 单篇发布 | 🧪 | 框架完成,需测试 |
| 批量发布 | 🧪 | 支持JSON配置 |
| 定时任务 | 🧪 | Cron配置就绪 |
| 图片上传 | ⚠️ | 需要进一步开发 |
| 评论互动 | ❌ | 需额外开发,风险高 |
## ⚠️ 风控建议
1. **发布频率**: 每天1-2条,间隔至少6小时
2. **内容去重**: 同一产品换不同角度拍摄
3. **账号权重**: 建议养号2周后再开自动化
4. **备用策略**: 准备2-3个小号轮换
## 📝 下一步行动
需要你来完成:
1. [ ] **提供Cookie** - 按上述方式获取并上传
2. [ ] **准备素材** - 产品图片(建议每个产品5-10张场景图)
3. [ ] **测试发布** - 验证自动化流程
4. [ ] **启用定时** - 配置正式发布计划
或者我可以帮你:
- 创建更详细的内容模板
- 配置知乎/其他平台
- 开发评论互动功能(谨慎)
你想先完成哪一步?
+114 -150
View File
@@ -1,156 +1,120 @@
# 宇之然内容创作平台 # 宇之然内容创作平台
一个轻量级的管理平台,用于监控和操作内容生产流水线。 > 覆盖"选题→创作→审核→发布→数据追踪"全链路的内容运营工具
## 快速开始 **最后更新: 2026-05-12**
### 1. 环境准备
```bash
cd /root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/platform
# 创建虚拟环境(推荐)
backend/venv/bin/python -m venv backend/venv # 若不存在
source backend/venv/bin/activate
# 安装依赖
pip install -r backend/requirements.txt
```
### 2. 启动服务
```bash
# 方式一:使用启动脚本(推荐)
./run.sh 8000
# 方式二:手动启动
cd backend
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
```
### 3. 访问
- **界面**: http://localhost:8000/
- **API文档**: http://localhost:8000/docs
- **系统状态**: http://localhost:8000/api/system/status
## 核心功能
| 功能 | 描述 |
|------|------|
| 📊 仪表盘 | 选题总数、待发布数、今日生成 |
| 🔄 流水线控制 | 触发创作、合规优化、状态监控 |
| 📝 选题管理 | 列表、筛选、预览、发布 |
| 📦 发布包管理 | 生成多平台HTML发布包、复制 |
| 📋 日志查看 | creator/optimizer/collector 日志 |
## 与自动化流水线的集成
本平台位于 `platform/`,不修改原有 `automation/scripts/` 脚本。
**集成方式**
- `backend/app/core/generator.py` 调用 `scripts/creator.py`
- `backend/app/core/optimizer.py` 调用 `scripts/compliance_optimizer.py`
- `backend/app/api/publisher.py` 调用 `scripts/publisher.py`
- 数据存储:`automation/data/` 为唯一数据源
- 同步:`sync.py` 将 JSON 选题同步到 SQLite 数据库供前端查询
**目录结构关系**
```
yu-zhi-ran/
├── platform/ # 管理平台(本目录)
│ ├── backend/app/
│ │ ├── core/generator.py → 调用 ../scripts/creator.py
│ │ ├── core/optimizer.py → 调用 ../scripts/compliance_optimizer.py
│ │ └── api/publisher.py → 调用 ../scripts/publisher.py
│ └── frontend/index.html # UI
├── automation/
│ ├── data/ ← 数据源(JSON)
│ │ ├── sustainability_topics.json
│ │ ├── drafts/
│ │ └── releases/
│ └── logs/ ← 日志(creator, optimizer, publisher
└── scripts/
├── creator.py ← 被调用
├── compliance_optimizer.py
└── publisher.py
```
## 配置
环境变量(可选):
| 变量 | 说明 | 默认 |
|------|------|------|
| `PROJECT_ROOT` | 项目根目录 | 自动推导 |
| `DATA_DIR` | 平台数据库目录 | `platform/data` |
| `LOG_LEVEL` | 日志级别 | `INFO` |
| `ALLOWED_ORIGINS` | CORS允许的源 | `*` |
示例:
```bash
export PROJECT_ROOT=/path/to/yu-zhi-ran
./run.sh 8000
```
## 开发调试
```bash
# 检查依赖和环境
python check.py
# 查看 API 日志
tail -f automation/logs/creator_$(date +%Y-%m-%d).log
# 数据库初始化(首次)
cd backend
python -c "from app.database import init_db; init_db()"
# 手动同步数据(测试)
curl -X POST http://localhost:8000/api/system/sync/run
```
## 故障排查
| 症状 | 检查点 |
|------|--------|
| 前端显示无选题 | 1. `automation/data/sustainability_topics.json` 是否存在且包含 `status: \"待处理\"` 的数据<br>2. 点击"全量刷新"按钮 |
| 创作任务失败 | 1. 查看 `automation/logs/creator_*.log`<br>2. 确认 `scripts/creator.py` 可执行 |
| 发布包为空 | 1. 确认 `automation/data/releases/YYYY-MM-DD/` 下有对应平台的 HTML<br>2. 点击发布Tab → "重新生成" |
| 端口8000占用 | 停止其他 uvicorn 进程或 `./run.sh 8080` 改用其他端口 |
## 部署清单
- [x] FastAPI 后端(无 Docker,直接运行)
- [x] Vue 3 前端(CDN依赖,无需构建)
- [x] SQLite 数据库(`platform/data/yzr.db`
- [x] 自动化流水线集成(subprocess 调用)
- [x] 数据同步模块(JSON ↔ SQLite
- [x] 流水线状态监控面板
- [x] 日志查看功能
- [ ] 反向代理(Nginx)配置(如需外网访问)
- [ ] HTTPSLet's Encrypt
- [ ] 系统服务(systemd
如需外网访问,建议配置 Nginx 反向代理和 HTTPS。
## 技术栈
- **后端**: FastAPI 0.115.0 + Uvicorn
- **前端**: Vue 3 + Element Plus
- **数据库**: SQLite 3
- **脚本**: Python 3 (subprocess)
- **样式**: Tailwind CSS (CDN)
## 文档
- 详细架构设计: `PORTFOLIO.md`
- 使用说明: 本文档
- API 文档: http://localhost:8000/docs (运行后)
--- ---
**版本**: 0.1.0 > **项目进度 → 详见 [PROGRESS.md](PROGRESS.md)**(本文件为唯一进度真理源)
**更新**: 2026-04-19
**维护**: 宇之然 AI 助手 ---
## 技术栈
| 层次 | 技术 |
|------|------|
| 后端 | FastAPI 0.104+ |
| ORM | SQLAlchemy 2.0+ |
| 数据库 | PostgreSQL 16 |
| 前端 | Vue 3 (CDN) + Element Plus |
| 认证 | JWT (python-jose) + bcrypt |
---
## 数据库配置
详见 `platform/backend/.env`
---
## 启动方式
```bash
cd /root/openclaw-workspace/projects/yu-zhi-ran
./start-platform.sh 8001
```
默认管理员: **admin** / **admin123**
---
## 页面入口
| 页面 | 地址 |
|------|------|
| 仪表盘 | http://localhost:8001/ |
| 选题管理 | http://localhost:8001/topics.html |
| 内容日历 | http://localhost:8001/calendar.html |
| 数据分析 | http://localhost:8001/metrics.html |
| 素材库 | http://localhost:8001/assets.html |
| 创作任务 | http://localhost:8001/tasks.html |
| 平台配置 | http://localhost:8001/platforms.html |
| 系统管理 | http://localhost:8001/admin.html |
| API 文档 | http://localhost:8001/docs |
---
## API 模块
| 模块 | 文件 | 功能 |
|------|------|------|
| 认证 | auth.py | 登录/注册/JWT |
| 选题 | topics.py | CRUD、评分、批量操作 |
| 选题配置 | topic_config.py | 领域/评分字段/状态配置 |
| 文章 | articles.py | 文章管理 |
| 发布 | publishing.py | 发布记录 |
| 内容日历 | calendar.py | 排期、绑定选题 |
| 数据分析 | metrics.py | 仪表盘、趋势、推荐 |
| 素材库 | assets.py | 上传、标签、搜索 |
| 创作任务 | tasks.py | 异步任务、进度管理 |
| 平台配置 | platform_config.py | 知乎/微信/小红书 |
| 系统管理 | admin.py | 用户/案例/日志/配置 |
---
## 数据模型
- **TopicField** - 领域分类配置
- **TopicConfigField** - 选题评分字段
- **TopicStatusConfig** - 选题状态配置
- **Topic** - 选题主表
- **ContentCalendar** - 内容日历
- **ContentMetrics** - 数据追踪
- **MediaAsset** - 素材库
- **PlatformConfig** - 平台配置
- **ContentTask** - 创作任务
- **User** - 用户
- **Case** - 案例库
---
## 初始化数据
- 领域: 6 个(未来工作方式、AI与效率、可持续生活、数字游民、个人成长、科技人文)
- 状态: 5 种(待处理、待审查、草稿、待发布、已发布)
- 平台: 3 个(知乎、微信公众号、小红书)
- 管理员: admin/admin123
---
## 项目结构
```
yu-zhi-ran/
├── platform/
│ ├── backend/
│ │ ├── app/
│ │ │ ├── api/ # REST API
│ │ │ ├── core/ # 业务逻辑
│ │ │ ├── models.py # SQLAlchemy 模型
│ │ │ ├── schemas.py # Pydantic 验证
│ │ │ ├── database.py # 数据库连接
│ │ │ ├── main.py # FastAPI 入口
│ │ │ └── initial_data.py
│ │ └── venv/
│ └── frontend/ # Vue + Element Plus SPA
├── automation/ # 自动化脚本
├── content/ # 内容数据
└── scripts/ # 工具脚本
```
-262
View File
@@ -1,262 +0,0 @@
# 宇之然内容管理平台
> 自动化内容生产 + Web 管理界面
一个可持续、可管理的内容创业系统,实现从选题采集到多平台发布的全流程自动化。
---
## 🎯 核心能力
-**全自动流水线**:采集 → 创作 → 合规 → 发布准备(每日凌晨运行)
-**Web 管理界面**:一键控制、实时监控、可视化发布包管理
-**降级策略**:外部源失效时自动切换本地案例库,保证稳定产出
-**多平台支持**:知乎、小红书、微信公众号(HTML 发布包)
-**风控设计**:半自动发布(生成 HTML + 人工复制),避免平台封号
---
## 📦 项目结构(简洁版)
```
yu-zhi-ran/
├── platform/ # Web 管理平台(FastAPI + Vue 3
│ ├── backend/ # API 服务
│ └── frontend/ # 管理界面
├── automation/ # 自动化数据 + 日志
│ ├── data/ # JSON 选题库、草稿、发布包
│ ├── logs/ # 运行日志
│ └── scripts/ → ../scripts/ # 软链到 scripts/
├── scripts/ # CLI 脚本(collector, creator, optimizer...
├── content/ # 已发布内容存储
├── config/ # 配置文件(RSS源、机器人)
├── start-platform.sh # 快速启动管理平台
└── README_NEW.md # 本文档
```
---
## 🚀 快速开始
### 1️⃣ 启动管理平台(推荐)
```bash
cd /root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran
./start-platform.sh 8001
```
访问:
- 界面:http://localhost:8001/
- API 文档:http://localhost:8001/docs
### 2️⃣ 测试自动化流水线
```bash
cd /root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran
python test_full_pipeline.py --topic-id A01
```
预期输出:
- 生成 `automation/data/drafts/2026-04-19/A01_*.md`
- 生成 `automation/data/releases/2026-04-19/*/A01_*.html`
- 合规自动通过
### 3️⃣ 查看当前状态
```bash
# 选题库统计
python -c "import json; d=json.load(open('automation/data/sustainability_topics.json')); print(f'总{len(d)} 待处理:{sum(1 for t in d if t.get(\"status\")==\"待处理\")} 待发布:{sum(1 for t in d if t.get(\"status\")==\"待发布\")}')"
# 日志(今日)
tail -f automation/logs/creator_$(date +%Y-%m-%d).log
```
---
## 🔄 系统架构
```
定时任务 (cron)
├─▶ 05:00 collector.py → automation/data/sustainability_topics.json(选题)
├─▶ 05:30 creator.py → drafts/ + releases/HTML
├─▶ 05:45 optimizer.py → 合规报告
└─▶ 06:00 publisher.py → content/published/(发布包)
Web 平台(可选控制)
├─▶ 一键触发创作/优化
├─▶ 查看选题列表和详情
├─▶ 生成发布包、预览HTML、复制
└─▶ 查看实时流水线状态
```
---
## 📊 当前运行状态(2026-04-19
| 指标 | 数值 |
|------|------|
| 总选题数 | 22 |
| 待处理 | 20 |
| 待发布 | 2 (A01, A02) |
| 自动运行 | ✅ 正常(05:00-06:00 |
| 最新运行 | A0205:30 完成,8秒) |
| 合规通过率 | 100%3/3 |
待发布内容已就绪,可手动发布到知乎/小红书。
---
## 🎮 主要操作指南
### 触发创作任务
**Web 界面**:平台 → "运行创作任务" 按钮
**或命令行**
```bash
python scripts/creator.py --topic-id A03
```
### 生成发布包
**Web 界面**:选题 → 发布 → "重新生成"
**或命令行**
```bash
python scripts/publisher.py --topic-id A01
```
发布包位置:
```
content/published/A01/手动发布/
├── 知乎/文章.html
└── 小红书/文章.html
```
### 标记为已发布
在 Web 界面"发布管理"中填写各平台链接 → "确认发布"
这会更新选题状态为"已发布"并保存链接。
---
## ⚙️ 配置
### 数据源(automation/config/sources.yaml
```yaml
sources:
- name: "新华网-环保频道"
type: "rss"
url: "http://..."
- name: "本地案例库"
type: "local_markdown"
path: "automation/data/cases.md"
```
### 环境变量(platform/.env,可选)
```bash
PROJECT_ROOT=/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran
LOG_LEVEL=INFO
```
---
## 📝 开发调试
```bash
# 1. 检查环境
cd platform
python check.py
# 2. 启动服务(开发模式)
./run.sh 8000
# 3. 查看 API 日志(新终端)
tail -f automation/logs/creator_$(date +%Y-%m-%d).log
# 4. 重置数据库(如需)
rm -f data/yzr.db
cd platform/backend
python -c "from app.database import init_db; init_db(); from app.initial_data import import_topics_from_json; import_topics_from_json()"
```
---
## 🚧 注意事项
### 路径规范
所有 `platform/backend/app/**/*.py` 必须使用相对路径计算 `PROJECT_ROOT`
- `app/database.py`, `initial_data.py`: `Path(__file__).resolve().parents[3]`
- `app/api/*.py`, `app/core/*.py`: `Path(__file__).resolve().parents[4]`
禁止使用硬编码绝对路径!
### 软链接
```
platform/data → ../data
platform/logs → ../logs
automation/scripts → ../scripts/
```
这些链接确保平台和自动化模块共享数据。
### 数据流向
**唯一真理源**`automation/data/sustainability_topics.json`
- 所有状态更新(待处理 → 待发布 → 已发布)都应写入此 JSON
- `platform` 通过 `sync.py` 同步到 SQLite 供前端快速查询
- 不要直接修改数据库而不更新 JSON!
---
## 📚 详细文档
- `YUZHIRAN_PLATFORM.md` - 完整项目文档(架构、API、扩展)
- `platform/PORTFOLIO.md` - 平台架构详解
- `platform/README.md` - 平台使用说明
- `PROJECT_STRUCTURE.md` - 目录结构说明
---
## 🐛 故障排查
| 问题 | 检查点 | 命令 |
|------|--------|------|
| Web 界面无数据 | JSON 是否同步? | `curl http://localhost:8000/api/system/status` |
| 创作失败 | creator 日志 | `tail -n 50 automation/logs/creator_*.log` |
| 发布包缺失 | releases 目录 | `ls automation/data/releases/$(date +%Y-%m-%d)/` |
| 端口占用 | 8000 被谁用? | `lsof -i:8000` |
---
## 🎉 现状总结
昨天(4月18日)完成:
- 数据源切换(新华网+人民网)
- 降级策略(本地案例库保底)
- 锁机制(2小时超时)
- publisher 发布包系统
- 前端管理界面
今天(4月19日):
- 统一项目结构,整合 platform + automation
- 修正所有路径计算
- 添加软链接统一数据目录
- 创建启动脚本和文档
**状态**:✅ 系统稳定运行,每日自动产出内容,Web 平台就绪。
---
**维护**: AI 助手小然
**更新**: 2026-04-19
-285
View File
@@ -1,285 +0,0 @@
# 宇之然内容管理平台 - 完整项目文档
## 📦 项目概览
宇之然内容管理平台是一个集**自动化流水线**与**Web管理界面**于一体的内容生产系统。
- **自动化模块**: 采集→创作→优化→发布的全自动脚本
- **管理平台**: Web UI 监控、控制、发布包管理
- **数据源**: 单一 JSON 文件 + 本地案例库
- **目标**: 每日自动生成高质量原创内容,多平台分发
## 🏗️ 目录结构
```
yu-zhi-ran/
├── platform/ # 管理平台(FastAPI + Vue 3
│ ├── backend/ # FastAPI 后端
│ │ └── app/
│ │ ├── api/ # REST API
│ │ │ ├── system.py # 系统状态、流水线控制
│ │ │ ├── topics.py # 选题管理
│ │ │ ├── publisher.py # 发布包管理
│ │ │ └── articles.py
│ │ └── core/ # 业务逻辑封装
│ │ ├── generator.py → 调用 scripts/creator.py
│ │ ├── optimizer.py → 调用 scripts/compliance_optimizer.py
│ │ └── sync.py → 同步 automation/data/*.json
│ └── frontend/ # Vue 3 前端(CDN依赖)
│ └── index.html
├── automation/ # 自动化流水线(脚本+数据+日志)
│ ├── scripts/ (软链) → ../scripts/
│ ├── data/ # JSON 数据源
│ │ ├── sustainability_topics.json # 选题库
│ │ ├── drafts/ # 草稿目录
│ │ └── releases/ # 发布包(按日期)
│ └── logs/ # 运行日志
│ ├── collector_*.log
│ ├── creator_*.log
│ ├── optimizer_*.log
│ └── publisher_*.log
├── scripts/ # 底层CLI脚本(被automation/scripts/引用)
│ ├── collector.py # 采集热点
│ ├── creator.py # 内容创作
│ ├── compliance_optimizer.py # 合规优化
│ ├── publisher.py # 发布包生成
│ ├── research.py # 研究资料
│ ├── outline.py # 大纲生成
│ └── writer.py # 撰写主力
├── content/ # 已发布内容存储
│ ├── published/ # 按 topic_id 组织
│ ├── drafts/ # 草稿
│ ├── ideas/ # 选题记录
│ └── images/ # 配图资源
├── config/ # 配置文件
│ ├── sources.yaml # RSS/网页源配置
│ └── wecom_config.yaml # 企业微信通知
├── brand/ # 品牌资产
│ ├── brand-book.md
│ └── guidelines.md
├── research/ # 行业研究
│ └── trends-2026.md
├── strategy/ # 内容策略
│ └── 全球-本土比较研究与全新内容战略规划-2026-04-15.md
├── tasks/ # 项目管理
│ └── todo.md
├── logs/ # 根目录日志(兼容)
├── backup/ # 备份归档
├── README.md # 项目总览
├── TEST_FULL_PIPELINE.md # 测试指南
└── run_publisher.sh # 快速启动发布任务
# 软链接(保持路径兼容)
automation/scripts → ../scripts/
```
---
## 🚀 快速开始
### 方式一:直接运行自动化流水线(CLI)
```bash
cd /root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran
# 手动执行各步骤
python scripts/collector.py # 采集选题
python scripts/creator.py # 创作内容
python scripts/compliance_optimizer.py # 合规优化
python scripts/publisher.py # 生成发布包
# 或使用测试脚本
python test_full_pipeline.py --topic-id A01
```
### 方式二:启动 Web 管理平台
```bash
cd platform
./run.sh 8001
# 访问
# - 界面: http://localhost:8001/
# - API文档: http://localhost:8001/docs
```
**功能**
- 📊 仪表盘:选题统计、今日生成
- 🔄 控制台:一键触发 collector/creator/optimizer
- 📝 选题管理:列表、预览、状态
- 📦 发布管理:生成发布包、查看HTML、复制
- 📋 日志查看:所有模块实时日志
### 方式三:定时自动运行(cron)
```bash
# 编辑 crontab
crontab -e
# 添加以下任务(参考)
0 5 * * * cd /path/to/yu-zhi-ran && python automation/scripts/collector.py
30 5 * * * cd /path/to/yu-zhi-ran && python automation/scripts/creator.py
45 5 * * * cd /path/to/yu-zhi-ran && python automation/scripts/compliance_optimizer.py
0 6 * * * cd /path/to/yu-zhi-ran && python automation/scripts/publisher.py
```
---
## 🔄 系统架构
### 数据流
```
┌─────────────────┐
│ 采集/创作/优化 │ ←─ automation/scripts/*.py
│ (CLI 脚本) │
└────────┬────────┘
│ 读写 JSON
┌─────────────────┐
│ automation/data │
│ sustainability_ │
│ topics.json │
└────────┬────────┘
│ 同步
┌─────────────────┐
│ platform/ │
│ FastAPI + │
│ SQLite DB │
└────────┬────────┘
│ HTTP API
┌─────────────────┐
│ Web 前端 │
│ (Vue 3) │
└─────────────────┘
```
### 触发流程
| 操作 | API端点 | 执行脚本 | 结果 |
|------|---------|----------|------|
| 点击"运行创作任务" | POST `/api/system/generate/run` | `scripts/creator.py` | 生成草稿 → 状态: 待审查 |
| 点击"运行合规优化" | POST `/api/system/optimize/run` | `scripts/compliance_optimizer.py` | 全自动通过 → 状态: 待发布 |
| 点击"生成发布包" | POST `/api/publisher/generate/{id}` | `scripts/publisher.py` | HTML包 → content/published/ |
| 页面刷新 | GET `/api/system/status` | - | 显示最新状态 |
---
## 📊 当前状态(2026-04-19
- **选题库**: 22 个(20 待处理 + 2 待发布)
- **自动运行**: ✅ 每日 05:00-06:00 全流程
- **上次运行**: 2026-04-19 05:30A02 选题,8秒完成)
- **合规通过率**: 100%(小样本)
- **发布包**: A01、A02 已就绪(知乎+小红书)
查看详细日志:
```bash
tail -f automation/logs/creator_$(date +%Y-%m-%d).log
tail -f automation/logs/publisher_$(date +%Y-%m-%d).log
```
---
## 🔧 开发调试
### 检查环境
```bash
cd platform
python check.py
```
### 手动测试流水线
```bash
python test_full_pipeline.py --topic-id A05
```
### API 测试
```bash
# 系统状态
curl http://localhost:8000/api/system/status
# 触发创作
curl -X POST http://localhost:8000/api/system/generate/run
# 流水线状态
curl http://localhost:8000/api/system/pipeline/status
```
### 数据库重置
```bash
cd platform/backend
rm -f data/yzr.db
python -c "from app.database import init_db; init_db()"
```
---
## 📝 配置说明
### automation/config/sources.yaml
配置外部信息源(RSS/网页):
```yaml
sources:
- name: "新华网-环保频道"
type: "rss"
url: "http://www.news.cn/..."
focus: "可持续性"
- name: "人民网-生态环境"
type: "rss"
url: "http://env.people.com.cn/..."
focus: "环保政策"
```
### platform/.env (可选)
```bash
PROJECT_ROOT=/path/to/yu-zhi-ran
DATA_DIR=/path/to/data
LOG_LEVEL=INFO
```
---
## 🎯 核心特性
| 特性 | 实现 |
|------|------|
| **降级策略** | 外部源失败 → 本地数据库 → Markdown案例库 |
| **锁机制** | 2小时超时,防止并发冲突 |
| **状态同步** | JSON ↔ SQLite 自动同步 |
| **发布准备** | 生成多平台HTML + 发布指南,人工发布(风控) |
| **Web管理** | Vue 3 单页应用,无需构建 |
| **日志聚合** | 所有模块日志按日期归档 |
---
## 🚧 待办事项
- [ ] 添加用户认证(目前仅本地访问)
- [ ] 实现异步任务状态轮询(创作/优化耗时较长)
- [ ] Nginx 反向代理配置(外网访问)
- [ ] 监控告警(失败通知)
- [ ] 多账号/IP策略(小红书多号分散风险)
- [ ] 数据导出功能(选题库、发布记录)
---
## 📚 相关文档
- `platform/PORTFOLIO.md` - 平台架构详解
- `platform/README.md` - 管理平台使用说明
- `PROJECT_PLAN_V2.md` - 盈利模式与5平台矩阵
- `HERMES_AND_YUZHRAN_STATUS.md` - 多Agent共享状态
- `2026-04-18-YUZHRAN-FIXES-SUMMARY.md` - 技术修复总结
---
**版本**: 2.0 (2026-04-19)
**维护**: 宇之然 AI 助手
**最后更新**: 2026-04-19
@@ -0,0 +1,331 @@
# 宇之然工作台改造方案 — 极简实用 AI Agent 时代设计
> 调研日期: 2026-06-16
> 基于 2026 年 AI 产品设计趋势 + 现有工作台全面审计
---
## 一、现有工作台问题分析
### 1.1 当前页面结构
| 页面 | 定位 | 问题 |
|------|------|------|
| `/index.html` 仪表盘 | 系统概览 + 模块状态 + 近期计划 | **系统视角**,不是用户视角。6 张统计卡片 + 6 个定时模块卡片 + 调度状态 → 像运维面板,不像创作工作台 |
| `topics.html` 选题 | 选题表格 CRUD + 批量操作 | 功能完整但无聊。没有 AI 辅助选题推荐,没有智能排序 |
| `metrics.html` 数据 | 统计看板 + 图表 | 功能 OK,但与 GEO/搜索排名/合规数据分离在不同页面 |
| `calendar.html` 日历 | 内容日历 | 独立页面,与选题/数据割裂 |
| `tasks.html` 任务 | 流水线执行记录 | 展示后端调度状态,普通用户看不懂 |
| `admin.html` 系统管理 | 13 个 Tab 的后台 | 混入了业务功能(AI助手、搜索排名、GEO) |
| `assets.html` 素材 | 素材管理 | 基础功能 |
| `landing.html` 官网 | 产品官网 | ✅ 独立、清晰 |
### 1.2 核心问题
1. **仪表盘是「系统监控」不是「创作工作台」**
- 一进来看到的是定时任务状态(热点趋势/采集/创作/审查),不是「我今天要做什么」
- 缺少任务优先级、待办提醒、进度概览
- 对于内容编辑来说,模块卡片(scheduler 状态)毫无意义
2. **导航/信息架构是「功能菜单」不是「创作流程」**
- 六个平级菜单项:仪表盘、选题、数据、日历、素材、任务
- 没有工作流意识 — 用户需要在多个页面跳转来完成一个创作流程
- 缺少「最近工作」「快速开始」等具有上下文感的入口
3. **AI 能力是「附加功能」不是「内嵌体验」**
- AI 助手是右下角浮窗 chatbot,与工作流分离
- AI 选题分析在选题页弹窗里,AI 写文章在发布流程里
- 没有 Agent 工作区 — 没有一个地方能看到 AI 正在做什么、做了什么、需要什么审批
4. **权限与功能混杂**
- 业务功能(搜索排名、GEO 优化、AI 助手)锁在 admin.html 里
- 普通用户使用需要切换到「系统管理」—— 概念上就不对
5. **缺少「Agent 时代」的核心交互模式**
- ❌ 没有 Plan-first(先展示计划,再执行)
- ❌ 没有 AI 操作轨迹/审计
- ❌ 没有任务编排/Agent 工作区
- ❌ 没有智能建议/预测
- ✅ 但已经有一个基础的 AI 助手浮窗底座
---
## 二、2026 AI 产品设计趋势映射
### 从 7 个趋势看我们应该做什么
| # | 趋势 | 对我们意味着什么 |
|---|------|----------------|
| 1 | **UX → AX (Agentic Experience)** | 工作台需要展示 AI 的**行动计划**和**执行轨迹**,而不是单纯的界面操作 |
| 2 | **Plan-first 交互** | 选题→创作→发布 应该有一个**流程预览**步骤,AI 先展示「我将做 A→B→C」,用户确认后再执行 |
| 3 | **Invisible AI (嵌入式 AI)** | AI 不应该是右下角聊天窗,而应该嵌入到选题列表(智能排序)、文章编辑(实时优化建议)、日历(智能排期)|
| 4 | **Delegation with Control** | 用户需要看到一个「代理仪表盘」— AI 正在做什么、已完成什么、需要审批什么 |
| 5 | **Workspace over Chat** | 从「跟 AI 对话」到「AI 作为团队成员在共享空间工作」|
| 6 | **预览→差异→确认 模式** | 所有 AI 生成/修改的内容,先展示 diff/预览,再确认写入 |
| 7 | **审批路径和可逆性** | 每一步操作都有 undo 路径和操作历史 |
---
## 三、改造方案设计
### 3.1 总体信息架构重构
```
当前: 目标:
┌──────────┐ ┌──────────────────┐
│ 仪表盘 │ ← 系统视角 │ 工作台 (首页) │ ← 用户视角
│ 选题 │ │ ├─ 今日待办 │
│ 数据 │ │ ├─ 创作流水线 │
│ 日历 │ │ ├─ 智能建议 │
│ 素材 │ │ └─ 最近工作 │
│ 任务 │ ├──────────────────┤
│ 系统管理 │ │ 内容工厂 │ ← 创作流程
└──────────┘ │ ├─ 选题工作区 │
│ ├─ AI 创作工作区 │
│ ├─ 发布工作区 │
│ └─ 内容日历 │
├──────────────────┤
│ 数据洞察 │ ← 效果分析
│ ├─ 数据看板 │
│ ├─ 搜索排名 │
│ ├─ GEO 就绪度 │
│ └─ 合规报告 │
├──────────────────┤
│ 资产库 │ ← 资源管理
├──────────────────┤
│ 系统管理 (admin) │ ← 仅管理员
```
### 3.2 工作台首页(全新设计)
**目标**:一打开就知道今天要做什么、进度如何、有什么需要关注
```
┌─────────────────────────────────────────────────┐
│ ☀️ 早上好,张三 你的团队本周已发布 3 篇内容 │
├─────────────────────────────────────────────────┤
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ 待处理│ │ 待审查│ │ 待发布│ │ 本月 │ │ 合规 │ │
│ │ 选题 │ │ 文章 │ │ 内容 │ │ 目标 │ │ 健康 │ │
│ │ 12 │ │ 5 │ │ 3 │ │ 67% │ │ 94% │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
├─────────────────────────────────────────────────┤
│ 📋 今日待办 │
│ ┌─────────────────────────────────────────────┐ │
│ │ 🔴 审查「远程办公的 5 个陷阱」- 逾期 2 天 │ │
│ │ 🟡 审核「AI 写作工具实测」- AI 已完稿 │ │
│ │ 🔵 确认本周排期 - 3 篇待定稿 │ │
│ └─────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ 🤖 AI Agent 工作区 │
│ ┌─────────────────────────────────────────────┐ │
│ │ 📡 热点采集 ✅ 完成 (12 条新趋势) │ │
│ │ ✍️ 文章创作 ⏳ 进行中 (2/5 篇) │ │
│ │ 🔍 合规审查 ⏳ 排队中 (3 篇待审) │ │
│ │ 📊 数据同步 ⏰ 06:00 自动运行 │ │
│ │ │ │
│ │ [查看 Agent 轨迹 →] │ │
│ └─────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ 💡 AI 智能建议 │
│ ┌─────────────────────────────────────────────┐ │
│ │ 💡 「碳中和」关键词本周搜索量 ↑47% │ │
│ │ 建议创建一篇相关选题 │ │
│ │ [一键创建选题 →] │ │
│ │ 💡 你的知乎上周互动率 ↑12% │ │
│ │ 建议继续保持数据分析深度 │ │
│ └─────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ 📅 近期计划 │
│ ┌──────────┬──────────────────┬──────────┐ │
│ │ 06/17 二 │ 远程办公工具对比 │ 知乎发布 │ │
│ │ 06/18 三 │ AI 写作体验 │ 公众号 │ │
│ │ 06/19 四 │ 零浪费生活指南 │ 小红书 │ │
│ └──────────┴──────────────────┴──────────┘ │
└─────────────────────────────────────────────────┘
```
### 3.3 内容工厂(创作流水线重构)
**目标**:按创作流程组织,而不是按数据表组织
#### 选题工作区
- **AI 智能选题板**:热点趋势 + 关键词热度 + 历史数据 → 推荐选题
- **选题看板**:Kanban 视图(待处理→分析中→已评分→待创作)
- **批量操作**:AI 一键分析 → 自动评分 → 自动排序
- **卡片预览**:题目的核心观点、受众痛点、差异化切入点和评分一览
#### AI 创作工作区 (NEW)
- **创作任务面板**:显示所有进行中的 AI 创作任务
- **Plan-first 流程**:用户选择选题 → AI 展示大纲 → 用户确认 → AI 逐节写作
```
步骤 1: 选择选题 + 平台
步骤 2: AI 生成大纲 (展示预览)
步骤 3: 用户调整大纲 (拖拽排序/编辑)
步骤 4: AI 逐节写作 (进度条展示)
步骤 5: 合规审查 (展示问题列表)
步骤 6: 用户最终编辑
```
- **Agent 执行轨迹**:每次 AI 操作都有时间线记录
- **在线编辑器**:统一的富文本编辑器,支持实时 AI 优化建议
#### 发布工作区
- **发布检查清单**:AI 自动检查合规、字数、配图、格式
- **一键多平台发布**:选题→三平台各自适配→预览→确认发布
- **发布历史**:时间线视图
### 3.4 AI Agent 工作区(新概念页面)
**这是本次改造的核心创新亮点** — 一个展示 AI 作为「团队成员」工作状况的看板。
```
┌─────────────────────────────────────────────────┐
│ 🤖 AI Agent 工作区 │
├─────────────────────────────────────────────────┤
│ 🔴 活跃任务 │
│ ┌─────────────────────────────────────────────┐ │
│ │ ✍️ 正在创作「远程办公的 5 个陷阱」→ 知乎版 │ │
│ │ 进度: ████████░░ 78% │ │
│ │ 当前步骤: 撰写第 3 节「团队协作挑战」 │ │
│ │ [预览] [暂停] [取消] │ │
│ │ │ │
│ │ 🔍 正在审查「AI 写作工具实测」- 小红书版 │ │
│ │ 进度: ████░░░░░░ 35% │ │
│ │ 发现 2 个合规问题 │ │
│ │ [查看详情] │ │
│ └─────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ ⏳ 待审批 │
│ ┌─────────────────────────────────────────────┐ │
│ │ 📝 大纲待确认 「零浪费生活指南」 │ │
│ │ 已由 AI 自动生成,等待你审核 │ │
│ │ [查看大纲] [确认] [修改] │ │
│ │ │ │
│ │ 📄 文章待审 「碳中和入门」已完稿 │ │
│ │ 合规评分 92/100,2 条建议 │ │
│ │ [审阅] [通过] [退回修改] │ │
│ └─────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ ✅ 今日已完成 │
│ ┌─────────────────────────────────────────────┐ │
│ │ ✅ 采集热点 12 条 → 生成 3 个新选题 │ │
│ │ ✅ 同步数据指标 → 知乎互动率 +12% │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
```
### 3.5 数据洞察(统一分析中心)
将当前分散的数据功能整合:
| Tab | 功能 | 来源 |
|-----|------|------|
| 概览 | 总指标 + 趋势图 | 现有 metrics.html |
| 搜索排名 | 关键词排名追踪 | 现 admin.html 搜索排名 |
| GEO 就绪度 | AI 搜索优化评分 | 现 admin.html GEO |
| 合规报告 | 发布前合规检查历史 | 现 admin.html + 优化报告 |
| 平台对比 | 知乎/公众号/小红书数据 | 现有 metrics.html |
### 3.6 导航改造
```javascript
// 现有 navItems (硬编码):
[{dashboard, topics, metrics, calendar, assets, tasks}]
// admin 额外: [admin]
// 目标 navItems (按角色动态):
// 编辑:
[{工作台(top), 内容工厂(factory), 数据洞察(insights), 资产库(assets)}]
// 管理员:
内容工厂 + 数据洞察 + 资产库 + 系统管理(admin)
```
导航从「功能清单」变成「流程引导」:
- **工作台** = 首页(今日待办 + Agent 状态 + 智能建议)
- **内容工厂** = 创作全流程(选题→创作→发布→日历)
- **数据洞察** = 所有数据分析入口
- **资产库** = 素材管理
### 3.7 移动端适配
当前移动端只是隐藏表格换卡片,改造后:
- 底部 Tab 导航栏(代替顶部汉堡菜单)
- 工作台首页简化为:今日待办 + Agent 状态 + 快速操作按钮
- 内容工厂:简易 Kanban,手势左右切换阶段
- AI Agent: 推送通知代替实时面板
---
## 四、实施优先级
### P0 — 快速见效 (1-2 天)
这些改动小但体验提升大:
| 改动 | 文件 | 工作量 |
|------|------|--------|
| 仪表盘改为用户视角(统计卡片 = 待办数量而不是系统模块) | `index.html` | 半天 |
| 将 AI 助手从浮窗升级为半屏面板 | `ai-assistant.js` | 半天 |
| 导航改为新架构(工作台/内容工厂/数据洞察/资产库) | `uni-nav.js` | 半天 |
### P1 — 核心重构 (3-5 天)
| 改动 | 涉及 | 工作量 |
|------|------|--------|
| 内容工厂页面(创作流水线) | 新建 `factory.html` | 2 天 |
| AI Agent 工作区 | 新建 `agent.html` | 2 天 |
| 数据洞察整合(合并 GEO/搜索排名) | 改造 `metrics.html` | 1 天 |
### P2 — 增强功能 (5-7 天)
| 改动 | 工作量 |
|------|--------|
| Plan-first 创作流程(大纲预览→确认→执行) | 3 天 |
| Agent 执行轨迹/审计时间线 | 2 天 |
| 智能选题推荐面板 | 2 天 |
| 移动端全面适配 | 2 天 |
### P3 — AI 原生体验 (后续)
| 改动 | 工作量 |
|------|--------|
| 智能排期 / 内容策略建议 | 3 天 |
| 自动化工作流编排(拖拽编排 Agent 任务) | 5 天 |
| 多 Agent 协作(采集 Agent + 写作 Agent + 审查 Agent | 5 天 |
---
## 五、关键设计原则
1. **用户视角 > 系统视角**
- 展示「我今天要做什么」而不是「系统正在运行什么」
- 统计数字 = 行动信号(待办数量)而不是监控指标
2. **流程 > 功能**
- 按创作流程组织页面(选题→创作→发布→分析)
- 不在功能之间跳转,在流程中前进
3. **AI 是团队成员,不是工具**
- 展示 AI 的工作计划、进度、产出
- 用户是「审核者/决策者」而不是「操作者」
- 核心模式:用 AI → AI 执行 Plan → 用户审核/批准
4. **预览→确认→执行**
- AI 生成的所有内容:先预览/展示差异,再确认
- 所有操作可逆,有撤销路径
5. **极简不极简功能**
- 减少平级菜单数量和页面复杂
- 不减少功能 — 用上下文和流程引导代替功能罗列
---
## 六、与当前改造项目的关系
本次工作台改造与正在进行的数据隔离/权限升级是 **互补关系**:
| 改造线 | 范围 | 依赖 |
|--------|------|------|
| **数据隔离+权限** (当前进行中) | 后端架构、数据安全 | 无 |
| **工作台极简改造** (本方案) | 前端 UI/UX、信息架构 | 权限系统就绪后可基于角色定制页面 |
建议:
1. 先完成数据隔离和权限基础 — 这是安全基石
2. 工作台改造可以在权限未完全就绪时就开始前端改造(不依赖后端)
3. 导航的 role-based 显示可以利用现有的 `/api/menus/active` 接口
-24
View File
@@ -1,24 +0,0 @@
#!/usr/bin/env python3
"""
在 Markdown 的 H2 标题前插入分隔线,第一个除外
"""
MD_PATH = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年/final-article.md"
with open(MD_PATH, "r", encoding="utf-8") as f:
lines = f.readlines()
new_lines = []
first_h2_seen = False
for line in lines:
if line.startswith("## "):
if first_h2_seen:
new_lines.append("---\n\n")
else:
first_h2_seen = True
new_lines.append(line)
with open(MD_PATH, "w", encoding="utf-8") as f:
f.writelines(new_lines)
print(f"✅ 已处理 {MD_PATH}")
-39
View File
@@ -1,39 +0,0 @@
#!/usr/bin/env python3
"""
在章节标题(h2)前插入分隔线,第一个除外
"""
import re
HTML_PATH = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年/article-optimized.html"
with open(HTML_PATH, "r", encoding="utf-8") as f:
html = f.read()
# 分隔线HTML
separator = '<div class="chapter-separator" style="margin: 40px 0 20px; border-top: 2px dashed #e0e0e0;"></div>\n'
# 找到所有 h2 标题
h2_pattern = re.compile(r'(<h2>.*?</h2>)', re.DOTALL)
matches = list(h2_pattern.finditer(html))
# 跳过第一个 h2,对其余每个插入分隔
insertions = []
for i, m in enumerate(matches[1:], start=1): # 从第二个开始
insert_pos = m.start()
insertions.append((insert_pos, separator))
# 按位置逆序插入,避免影响后续位置
insertions.sort(reverse=True, key=lambda x: x[0])
html_list = list(html)
for pos, sep in insertions:
html_list.insert(pos, sep)
new_html = ''.join(html_list)
# 写回
with open(HTML_PATH, "w", encoding="utf-8") as f:
f.write(new_html)
print(f"✅ 已插入 {len(insertions)} 个章节分隔")
print(f"📄 文件: {HTML_PATH}")
+2 -2
View File
@@ -7,8 +7,8 @@
import os import os
from PIL import Image from PIL import Image
IMAGES_DIR = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/publishing/images" IMAGES_DIR = "/root/openclaw-workspace/projects/yu-zhi-ran/content/publishing/images"
OUTPUT_DIR = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/publishing/images_compressed" OUTPUT_DIR = "/root/openclaw-workspace/projects/yu-zhi-ran/content/publishing/images_compressed"
os.makedirs(OUTPUT_DIR, exist_ok=True) os.makedirs(OUTPUT_DIR, exist_ok=True)
+338
View File
@@ -0,0 +1,338 @@
[
{
"id": 1,
"title": "GitLab 全远程公司手册",
"field": "未来工作方式",
"summary": "GitLab 是全球最大的全远程公司,拥有1500+员工分布在65+国家,其文档和协作模式被广泛研究。",
"key_metrics": "员工满意度 4.5/5,离职率低于行业平均50%",
"date": "2024",
"source": "GitLab 官方博客",
"source_url": "https://about.gitlab.com/remote-work/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 2,
"title": "Zapier 异步沟通指南",
"field": "未来工作方式",
"summary": "Zapier 通过自动化工作流减少会议,实现全球团队异步协作。",
"key_metrics": "员工每周会议时间 <2h,效率提升30%",
"date": "2023",
"source": "Zapier 博客",
"source_url": "https://zapier.com/blog/asynchronous-communication/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐"
},
{
"id": 3,
"title": "爱沙尼亚游民签证",
"field": "未来工作方式",
"summary": "爱沙尼亚推出数字游民签证,允许远程工作者合法居住1年。",
"key_metrics": "申请量年增200%,主要来自IT从业者",
"date": "2024",
"source": "Estonian Government",
"source_url": "https://e-resident.gov.ee/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐"
},
{
"id": 4,
"title": "巴厘岛游民社区",
"field": "未来工作方式",
"summary": "巴厘岛成为亚洲游民热点,提供 coworking 空间和社区活动。",
"key_metrics": "每年吸引10万+游民,消费力强",
"date": "2024",
"source": "Bali Tourism Board",
"source_url": "https://www.balitourismboard.org/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 5,
"title": "Fiverr AI服务市场",
"field": "未来工作方式",
"summary": "Fiverr 上 AI 代写、数据分析等服务泛滥,形成灰色产业链。",
"key_metrics": "AI服务订单季度增长150%",
"date": "2025",
"source": "Fiverr 数据报告",
"source_url": "https://www.fiverr.com/",
"credibility_rating": "⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 6,
"title": "Indie Hackers 社区",
"field": "未来工作方式",
"summary": "Indie Hackers 是独立开发者分享产品成长和盈利的地方。",
"key_metrics": "超过5000个真实项目案例,月均收入 $2k+",
"date": "2024",
"source": "Indie Hackers",
"source_url": "https://www.indiehackers.com/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐"
},
{
"id": 7,
"title": "One Person Business",
"field": "未来工作方式",
"summary": "一人企业思维强调极简运营,低风险创业模式。",
"key_metrics": "初期投入 <$100020%实现月入$3k",
"date": "2023",
"source": "Pieter Levels 博客",
"source_url": "https://levels.io/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 9,
"title": "纽约社区花园政策",
"field": "可持续生活系统",
"summary": "纽约市通过土地使用权政策支持社区花园建设。",
"key_metrics": "覆盖500+社区,参与者超10万",
"date": "2023",
"source": "NYC Parks",
"source_url": "https://www.nycgovparks.org/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐"
},
{
"id": 10,
"title": "瑞典零浪费城市",
"field": "可持续生活系统",
"summary": "瑞典城市通过垃圾分类和堆肥计划,实现垃圾填埋量减少90%。",
"key_metrics": "垃圾回收率 99%,焚烧发电供全市1/3用电",
"date": "2024",
"source": "Swedish Waste Management",
"source_url": "https://www.avfallsverige.se/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐"
},
{
"id": 11,
"title": "日本 Mottainai 文化",
"field": "可持续生活系统",
"summary": "Mottainai(勿浪费)精神贯穿生活,提倡物尽其用。",
"key_metrics": "家庭垃圾量比欧美低40%",
"date": "2024",
"source": "日本环境省",
"source_url": "https://www.env.go.jp/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐"
},
{
"id": 12,
"title": "荷兰自行车城市",
"field": "可持续生活系统",
"summary": "荷兰城市拥有完善的自行车道网络,自行车通勤占比 >40%。",
"key_metrics": "人均自行车拥有量 1.3辆,交通事故率低",
"date": "2023",
"source": "Dutch Cycling Embassy",
"source_url": "https://cyclingembassy.org/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐"
},
{
"id": 13,
"title": "挪威电动车普及",
"field": "可持续生活系统",
"summary": "挪威通过免税和充电设施补贴,使电动车占新车销量80%以上。",
"key_metrics": "2024年电动车渗透率 82%",
"date": "2024",
"source": "Norwegian EV Association",
"source_url": "https://elbil.no/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐"
},
{
"id": 14,
"title": "法国二手强制法",
"field": "可持续生活系统",
"summary": "法国要求零售商提供二手商品区域,促进循环消费。",
"key_metrics": "二手商品销售额年增25%",
"date": "2023",
"source": "French Government",
"source_url": "https://www.gouvernement.fr/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐"
},
{
"id": 15,
"title": "Patagonia 维修服务",
"field": "可持续生活系统",
"summary": "Patagonia 提供终身维修服务,延长产品寿命。",
"key_metrics": "维修量年增30%,顾客忠诚度极高",
"date": "2024",
"source": "Patagonia Worn Wear",
"source_url": "https://www.patagonia.com/worn-wear/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐"
},
{
"id": 16,
"title": "Obsidian + RAG 个人知识库",
"field": "个人知识工厂",
"summary": "Obsidian 结合检索增强生成,实现私有知识问答。",
"key_metrics": "无需云端,本地向量存储,响应 <1s",
"date": "2024",
"source": "Obsidian Hub",
"source_url": "https://obsidian.md/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 17,
"title": "PARA 系统在 Notion",
"field": "个人知识工厂",
"summary": "Tiago Forte 的 PARA 方法将信息分为项目、领域、资源、存档四类。",
"key_metrics": "用户报告节省每周 3 小时信息整理时间",
"date": "2023",
"source": "Fortelabs.co",
"source_url": "https://fortelabs.co/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 18,
"title": "费曼技巧经典",
"field": "个人知识工厂",
"summary": "通过向他人讲解来检验自己是否真正理解。",
"key_metrics": "学习效率提升 40%",
"date": "2024",
"source": "Feynman Technique",
"source_url": "https://www.feynmantechnique.org/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 19,
"title": "EU AI Act",
"field": "科技人文交叉",
"summary": "欧盟人工智能法案,对 AI 系统进行风险分级监管。",
"key_metrics": "违反最高罚款达全球年营业额6%",
"date": "2024",
"source": "European Commission",
"source_url": "https://digital-strategy.ec.europa.eu/en/policies/european-approach-artificial-intelligence",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐"
},
{
"id": 20,
"title": "硅谷高管禅修热",
"field": "科技人文交叉",
"summary": "许多硅谷领袖将正念冥想作为日常,提高专注力。",
"key_metrics": " Fortune 500 中 35% 提供冥想课程",
"date": "2023",
"source": "Harvard Business Review",
"source_url": "https://hbr.org/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐"
},
{
"id": 21,
"title": "Tauri + Rust 构建跨平台桌面应用性能对比",
"field": "技术工具集",
"summary": "对比 Tauri 2.0 与 Electron 在资源占用、启动速度、包体积等维度的性能数据,展示 Rust 后端优势。",
"key_metrics": "内存占用降低 60%, 安装包体积减少 70%, 首次启动时间 <1.5s",
"date": "2026",
"source": "Tauri 官方博客",
"source_url": "https://tauri.app/blog/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐⭐"
},
{
"id": 22,
"title": "独立开发者如何用 FastAPI + Vue 3 快速构建 SaaS",
"field": "技术工具集",
"summary": "一位独立开发者分享使用 FastAPI 后端 + Vue 3 前端在 2 周内完成多平台内容管理系统的实战经验。",
"key_metrics": "开发周期 14 天, 代码量 8K 行, 部署成本 < $10/月",
"date": "2025",
"source": "Dev.to 社区",
"source_url": "https://dev.to/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 23,
"title": "Notion + Python 自动化内容工作流案例",
"field": "个人知识工厂",
"summary": "如何用 Python 脚本自动同步 Notion 数据库到博客平台,实现从选题到发布的完整自动化。",
"key_metrics": "每周节省 8 小时, 错误率降为 0, 发布延迟 <5 分钟",
"date": "2025",
"source": "Notion 模板社区",
"source_url": "https://www.notion.so/templates",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 24,
"title": "GitHub Copilot 辅助 Rust 开发效率调研",
"field": "技术工具集",
"summary": "在真实 Rust 项目中启用 Copilot 后,代码编写速度提升 35%,且代码质量保持不变。",
"key_metrics": "编码速度 +35%, 代码评审通过率 92%, 学习曲线平缓",
"date": "2026",
"source": "GitHub 官方报告",
"source_url": "https://github.blog/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 25,
"title": "零浪费生活方式:一年减少 80% 塑料使用",
"field": "可持续生活系统",
"summary": "记录一家三口一年内通过改变购物习惯、DIY 日用品、选择可持续品牌,实现塑料消耗大幅减少的过程。",
"key_metrics": "塑料垃圾减少 80%, 开销降低 15%, 生活质量评分 +20%",
"date": "2025",
"source": "B站 UP 主 \"零浪费生活家\"",
"source_url": "https://www.bilibili.com/",
"credibility_rating": "⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐⭐"
},
{
"id": 27,
"title": "数字游民签证地图:2026 最新政策对比",
"field": "未来工作方式",
"summary": "收集 35 个国家/地区的数字游民签证政策,包括申请条件、停留时间、税收优惠等关键信息。",
"key_metrics": "覆盖 35 国, 政策更新频率 季度, 中国护照适用 18 国",
"date": "2026",
"source": "Nomad List",
"source_url": "https://nomadlist.com/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 28,
"title": "AI 副业变现:用 StepFun API 打造的 5 个微型产品",
"field": "未来工作方式",
"summary": "开发者分享如何利用 StepFun 的大模型 API 快速开发并上线 5 个小型付费 AI 工具,实现月入过万。",
"key_metrics": "产品上线时间 1-3 天/个, 月收入 ¥12,000+, 用户满意度 4.8/5",
"date": "2026",
"source": "StepFun 开发者故事",
"source_url": "https://www.stepfun.com/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐⭐"
},
{
"id": 29,
"title": "知识管理新范式:Obsidian + LlamaIndex 实现个人知识问答",
"field": "个人知识工厂",
"summary": "将 Obsidian 笔记库通过 LlamaIndex 索引,打造基于个人知识的智能问答系统,准确率超 90%。",
"key_metrics": "笔记量 5K+, 问答准确率 92%, 本地部署无持续成本",
"date": "2025",
"source": "Obsidian 论坛",
"source_url": "https://forum.obsidian.md/",
"credibility_rating": "⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐"
},
{
"id": 30,
"title": "异步协作革命:用 Lark + Python 实现分布式团队项目管理",
"field": "未来工作方式",
"summary": "跨 5 个时区的 15 人团队,通过 Lark 机器人 + Python 脚本实现自动化任务分配、进度同步、日报生成。",
"key_metrics": "会议减少 60%, 项目延期率下降 70%, 员工满意度 +25%",
"date": "2025",
"source": "字节跳动企业服务案例",
"source_url": "https://www.larkoffice.com/",
"credibility_rating": "⭐⭐⭐⭐⭐",
"china_applicability": "⭐⭐⭐⭐⭐"
}
]
@@ -1,40 +0,0 @@
# 文章大纲:AI时代的技能组合:什么技能值得投入10年?
## 一、引言(约200字)
- 开场场景/痛点引入
- 提出核心问题:AI时代的技能组合:什么技能值得投入10年?
- 点明文章价值
## 二、核心观点(约300字)
基于WEF未来技能报告,划分4个技能维度(AI强化型、AI无法替代、复合型、过时型),帮中国职场人识别护城河技能
## 三、受众痛点分析(约300字)
学什么都不放心,怕投入时间后AI又取代
## 四、全球/行业趋势与案例(约500字)
- 引用研究笔记中的 0 个案例,精选 2-3 个详述
- 数据支撑:提取研究笔记中的关键数据
- 趋势分析
## 五、本土落地建议(约400字)
- 结合未来工作方式领域特点
- 提供可执行的步骤
- 注意事项
## 六、独特视角:将全球宏观报告转化为个人技能地图,提供可视化工具(约300字)
## 七、行动指南(MVP,约200字)
1. 理解现状
2. 小范围试验
3. 评估效果
4. 形成习惯
## 八、总结与鼓励(约200字)
- 回顾要点
- 呼吁行动
## 九、参考文献
- 从研究笔记中提取来源链接
---
*大纲生成时间:2026-04-17*
@@ -1,40 +0,0 @@
# 文章大纲:远程工作2026中国指南:从'不可能'到'可行'的路径图
## 一、引言(约200字)
- 开场场景/痛点引入
- 提出核心问题:远程工作2026中国指南:从'不可能'到'可行'的路径图
- 点明文章价值
## 二、核心观点(约300字)
通过法律实操(合同、社保、个税)和心理建设(孤独应对),在中国环境下实现远程工作
## 三、受众痛点分析(约300字)
想远程但不知如何合法操作,担心被边缘化
## 四、全球/行业趋势与案例(约500字)
- 引用研究笔记中的 0 个案例,精选 2-3 个详述
- 数据支撑:提取研究笔记中的关键数据
- 趋势分析
## 五、本土落地建议(约400字)
- 结合未来工作方式领域特点
- 提供可执行的步骤
- 注意事项
## 六、独特视角:对比GitLab/Zapier海外实践,本土化落地策略(约300字)
## 七、行动指南(MVP,约200字)
1. 理解现状
2. 小范围试验
3. 评估效果
4. 形成习惯
## 八、总结与鼓励(约200字)
- 回顾要点
- 呼吁行动
## 九、参考文献
- 从研究笔记中提取来源链接
---
*大纲生成时间:2026-04-18*
@@ -1,40 +0,0 @@
# 文章大纲:第二大脑2.0:用DeepSeek+本地向量库建立私有知识系统
## 一、引言(约200字)
- 开场场景/痛点引入
- 提出核心问题:第二大脑2.0:用DeepSeek+本地向量库建立私有知识系统
- 点明文章价值
## 二、核心观点(约300字)
对比Obsidian+RAG海外实践,针对国内云服务担忧,提供数据主权、隐私保护、无缝检索、AI问答的本地化方案
## 三、受众痛点分析(约300字)
想系统化知识但担心云存储安全,怕复杂
## 四、全球/行业趋势与案例(约500字)
- 引用研究笔记中的 0 个案例,精选 2-3 个详述
- 数据支撑:提取研究笔记中的关键数据
- 趋势分析
## 五、本土落地建议(约400字)
- 结合个人知识工厂领域特点
- 提供可执行的步骤
- 注意事项
## 六、独特视角:强调数据主权,从API调用到本地部署的渐进路线(约300字)
## 七、行动指南(MVP,约200字)
1. 理解现状
2. 小范围试验
3. 评估效果
4. 形成习惯
## 八、总结与鼓励(约200字)
- 回顾要点
- 呼吁行动
## 九、参考文献
- 从研究笔记中提取来源链接
---
*大纲生成时间:2026-04-18*
@@ -1,40 +0,0 @@
# 文章大纲:AI副业入门:用DeepSeek实现第一笔收入的100天
## 一、引言(约200字)
- 开场场景/痛点引入
- 提出核心问题:AI副业入门:用DeepSeek实现第一笔收入的100天
- 点明文章价值
## 二、核心观点(约300字)
从代写文案/数据分析起步,通过Fiverr国内外平台对比,制定定价策略和违规红线规避
## 三、受众痛点分析(约300字)
想用AI赚钱但不知从何开始,怕踩坑
## 四、全球/行业趋势与案例(约500字)
- 引用研究笔记中的 0 个案例,精选 2-3 个详述
- 数据支撑:提取研究笔记中的关键数据
- 趋势分析
## 五、本土落地建议(约400字)
- 结合未来工作方式领域特点
- 提供可执行的步骤
- 注意事项
## 六、独特视角:对比Fiverr海外繁荣 vs 国内空白,提供本土化接单路径(约300字)
## 七、行动指南(MVP,约200字)
1. 理解现状
2. 小范围试验
3. 评估效果
4. 形成习惯
## 八、总结与鼓励(约200字)
- 回顾要点
- 呼吁行动
## 九、参考文献
- 从研究笔记中提取来源链接
---
*大纲生成时间:2026-04-19*
@@ -1,20 +0,0 @@
# 研究笔记:AI时代的技能组合:什么技能值得投入10年?
## 选题信息
- **ID**: A05
- **领域**: 未来工作方式
- **核心观点**: 基于WEF未来技能报告,划分4个技能维度(AI强化型、AI无法替代、复合型、过时型),帮中国职场人识别护城河技能
- **受众痛点**: 学什么都不放心,怕投入时间后AI又取代
- **独特视角**: 将全球宏观报告转化为个人技能地图,提供可视化工具
## 相关案例(0个)
## 研究发现摘要
- 待补充:从案例中提炼的趋势和洞察
- 待补充:数据支撑
## 待深入研究的问题
- [ ] 需要更多本土数据
- [ ] 需要验证某些结论的适用性
*生成时间:2026-04-17*
@@ -1,20 +0,0 @@
# 研究笔记:远程工作2026中国指南:从'不可能'到'可行'的路径图
## 选题信息
- **ID**: A01
- **领域**: 未来工作方式
- **核心观点**: 通过法律实操(合同、社保、个税)和心理建设(孤独应对),在中国环境下实现远程工作
- **受众痛点**: 想远程但不知如何合法操作,担心被边缘化
- **独特视角**: 对比GitLab/Zapier海外实践,本土化落地策略
## 相关案例(0个)
## 研究发现摘要
- 待补充:从案例中提炼的趋势和洞察
- 待补充:数据支撑
## 待深入研究的问题
- [ ] 需要更多本土数据
- [ ] 需要验证某些结论的适用性
*生成时间:2026-04-18*
@@ -1,20 +0,0 @@
# 研究笔记:第二大脑2.0:用DeepSeek+本地向量库建立私有知识系统
## 选题信息
- **ID**: C01
- **领域**: 个人知识工厂
- **核心观点**: 对比Obsidian+RAG海外实践,针对国内云服务担忧,提供数据主权、隐私保护、无缝检索、AI问答的本地化方案
- **受众痛点**: 想系统化知识但担心云存储安全,怕复杂
- **独特视角**: 强调数据主权,从API调用到本地部署的渐进路线
## 相关案例(0个)
## 研究发现摘要
- 待补充:从案例中提炼的趋势和洞察
- 待补充:数据支撑
## 待深入研究的问题
- [ ] 需要更多本土数据
- [ ] 需要验证某些结论的适用性
*生成时间:2026-04-18*
@@ -1,20 +0,0 @@
# 研究笔记:AI副业入门:用DeepSeek实现第一笔收入的100天
## 选题信息
- **ID**: A02
- **领域**: 未来工作方式
- **核心观点**: 从代写文案/数据分析起步,通过Fiverr国内外平台对比,制定定价策略和违规红线规避
- **受众痛点**: 想用AI赚钱但不知从何开始,怕踩坑
- **独特视角**: 对比Fiverr海外繁荣 vs 国内空白,提供本土化接单路径
## 相关案例(0个)
## 研究发现摘要
- 待补充:从案例中提炼的趋势和洞察
- 待补充:数据支撑
## 待深入研究的问题
- [ ] 需要更多本土数据
- [ ] 需要验证某些结论的适用性
*生成时间:2026-04-19*
@@ -0,0 +1,27 @@
## 标题(爆款钩子)
73%的人因AI替身失去信任,你还在用它省那12%的时间?
## 口播文案
你以为AI换脸能帮你省时间?[停顿]别傻了,每一次用AI形象开会,都是在职场里透支信任。
2025年卡内基梅隆大学的研究发现,[停顿]73%的商务谈判者,一旦知道对方用的是AI替身,信任度直接暴跌。你省下的那12%会议时长,得用几十次真诚沟通才能补回来。[停顿]
为啥?人眼天生能识别“非自然”的脸,哪怕只是一丝微笑延迟,你的大脑杏仁核就会报警——“这人不靠谱!”[停顿]哈佛的脑成像实验更狠:跟AI形象合作时,你大脑里的共情区域活跃度下降30%。你根本不在意对方有没有在听,对方也感受不到你的真诚。
所以那些跨国大公司为什么明令禁止?[停顿]因为信任一旦崩了,客户流失率六个季度能涨18%。你省的时间,抵不过一个客户的流失。[停顿]记住:高信任场景——客户会、谈判、一对一辅导,绝对不要用AI替身。
你觉得有道理吗?评论聊聊,你的公司禁用AI换脸了吗?
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
|------|------|------|------|
| 镜头1 | 博主正对镜头,背后是电脑屏幕显示视频会议中的AI换脸头像 | “AI换脸省时间?你省的是信任” | 0-8秒 |
| 镜头2 | 切换至数据图表:73%的数字放大闪烁,旁边有“信任度暴跌”字样 | “73%谈判者因AI替身失去信任” | 8-20秒 |
| 镜头3 | 博主做“恐怖谷”表情演示:先微笑、然后眼神呆滞、再突然回神 | “大脑报警:不自然的微笑=不靠谱” | 20-35秒 |
| 镜头4 | 动画展示大脑区域变暗(共情区下降30%),旁边出现客户流失率18% | “共情关闭,客户跑路” | 35-50秒 |
| 镜头5 | 博主回到正对镜头,手势强调“三场景禁用” | “客户会、谈判、一对一,禁用!” | 50-65秒 |
## 适配平台
- **抖音**:开头3秒用“73%”数字怼脸,加热门BGM(悬疑类),字幕用大字跳闪。
- **视频号**:节奏稍缓,加“你认同吗”互动投票卡片,结尾引导关注。
- **小红书视频**:封面用“AI替身毁信任”金句,文案加emoji分段,评论区置顶“自查清单”。
@@ -0,0 +1,28 @@
## 标题(爆款钩子)
别让AI换脸毁了客户!3条保命铁律立刻救你
## 口播文案
「[停顿]」你知道吗?你那个完美的AI替身,正在让你和客户之间的信任疯狂透支。今天三条干货,立刻就能用。
第一条:所有对外会议、重要谈判、一对一辅导,千万别用AI形象。[停顿]加州大学研究证明,哪怕眼珠动慢一丁点,对方大脑立刻拉警报——73%的商务谈判者会直接判定你不诚实。信任崩塌了,修复一次需要5到8次真诚互动。
第二条:内部非正式头脑风暴,用AI形象可以提升流畅度,[停顿]但必须提前告知团队,划清边界。盖洛普数据显示,明确边界的公司员工满意度高23%,客户推荐值高12%。
第三条:如果已经用了AI形象,立刻补救。真诚道歉,换成真人视频,主动暴露缺点。[停顿]别拿“效率”骗自己,信任是账面上的隐形资产。
记住:信任建立要日积月累,崩塌只在一念之间。觉得有用?点赞收藏,别再踩坑了。
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
|------|------|------|------|
| 1 | 博主正面近景,严肃表情,手指镜头 | 别让AI换脸毁了客户!3条保命铁律 | 8秒 |
| 2 | 博主拿起手机或电脑屏幕,展示一个AI换脸会议场景图标 | 73%的人直接判定不诚实 | 一次失信需要5-8次修复 | 12秒 |
| 3 | 博主切换到侧身,用手势列举要点,镜头缓慢推进 | 第一条:对外会议禁用 | 第二条:内部告知划边界 | 15秒 |
| 4 | 博主站起,背景出现“信任度收益”图表动画 | 第三条:用了立刻补救 | 信任是隐形资产 | 12秒 |
| 5 | 博主回到正面,微笑,手指向上做“收藏”手势 | 点赞收藏,别再踩坑 | 8秒 |
## 适配平台
- **抖音**:前3秒加一个“你中招了吗”的悬念语气,用快切放大“73%”等数据,字幕用黄色大字突出。
- **视频号**:开场加一句“我做商务8年,今天说个血泪教训”,增加真实感和信任感;节奏略慢,留出互动引导时间。
- **小红书视频**:首帧用“🔥AI换脸避坑指南”彩色标题,口播再简练10%,强调“收藏备用”;视频下方配图文摘要文字。
@@ -0,0 +1,19 @@
## 标题(爆款钩子)
我用AI替身开视频会,结果被客户当场识破,丢了200万的单
## 口播文案
上个月我哥们儿跟我喝酒,差点哭了[停顿]他说他为了赶一个跨国客户的视频会,用了最高级的AI换脸软件——皮肤零瑕疵、微笑完美,连声音都调了音。结果你猜怎么着?会议开到一半,对方突然问:“你本人是不是没在镜头前?”[停顿]原来客户那边有人工智能识别系统,发现他瞳孔反光不对,微表情卡顿。当场翻脸,200万的单子黄了[停顿]你以为AI替身能省时间?错了[停顿]大脑天生对“假脸”拉警报,瞳孔放大、心跳加速,你根本没法建立信任。老板们醒醒,效率再高也换不来真心合作。你身边有公司因为AI形象吃过亏吗?评论区聊聊。
## 分镜建议
| 画面 | 字幕 | 时长 |
|------|------|------|
| 中景:博主坐在桌前,表情无奈摇头 | 哥们儿用AI替身开会 单子黄了 | 0-5s |
| 特写:博主手指敲桌面,语气加重 | 客户突然问:你本人不在? | 5-15s |
| 切到手机/电脑屏幕动画:AI脸+显微镜下瞳孔异常 | 瞳孔反光不对 微表情卡顿 | 15-25s |
| 博主直视镜头,双手摊开 | 大脑对假脸拉警报! | 25-35s |
| 博主低头写笔记状,抬头问 | 你身边有公司吃过亏吗?评论区聊聊 | 35-45s |
## 适配平台
- **抖音**:前3秒加“你敢信?”等悬念字幕,节奏再快一点,每秒换画面。
- **视频号**:保持自然聊天的语气,结尾加一句“关注我,了解更多职场避坑技巧”。
- **小红书视频**:封面用大字“AI换脸翻车实录”,口播语速放慢,每句之间留呼吸感。
@@ -0,0 +1,29 @@
## 标题(爆款钩子)
别再挤景区了!4.2 亿人都在假装过端午,你还要继续吗?
## 口播文案
承认吧,你端午那趟旅行,根本不算过节,只是去当了个“人肉背景板”![停顿]
2026 年端午,4.2 亿人涌进景区。你拍的是密密麻麻的后脑勺,回家翻相册,除了证明“我去过”,对屈原、龙舟的理解,还停留在小学课本那两句话。[停顿]
调查显示,超六成人都在“走马观花”。问题真不在节日没内涵,而是你太懒了![停顿]你只会被动跟着人流挪动,却忘了主动探索。
换个思路试试?让 AI 做你的私人文化向导。[停顿]输入“屈原流放路线”或“龙舟制作工艺”,它立马生成专属路径。不再是大锅饭式的打卡,而是穿越千年的深度对话。
现在,四成游客愿意为这种“独家体验”多付 30% 的钱。[停顿]因为大家终于醒了:真正的文化,从来不在拥挤的人堆里,而在你主动迈出的那一步。
今年假期,你是继续去挤照片,还是用 AI 定制一场真正的文化穿越?评论区告诉我!
## 分镜建议
| 画面 | 字幕 | 时长 |
| :--- | :--- | :--- |
| **近景**:博主对着镜头一脸严肃,背景合成极度拥挤的景区人头攒动画面,甚至有点压抑感。 | 4.2 亿人<br>全是背景板? | 5s |
| **中景**:博主无奈地翻看手机相册,屏幕特写显示全是模糊的人头照,随后画面切换成枯燥的课本插图。 | 走马观花<br>等于没去 | 8s |
| **特写**:博主眼神突然亮起,手持手机展示 AI 界面,手指滑动生成一条炫酷的 3D 地图路线。 | 拒绝被动<br>AI 定制路径 | 10s |
| **混剪**:快速闪过几个高质量画面:亲手触摸龙舟木纹、在屈原故里听沉浸式故事,对比之前的拥挤画面。 | 深度体验<br>值得多付 30% | 10s |
| **近景**:博主回到镜头前,身体前倾,发出真诚邀请,屏幕下方弹出评论框引导。 | 你是哪种?<br>评论区见 | 7s |
## 适配平台
- **抖音**:前 3 秒拥挤画面要配合嘈杂的环境音效和急促的 BGM,制造强烈的焦虑感,随后音乐瞬间转为科技感轻音乐。
- **视频号**:文案中“小学课本”、“文化穿越”等情感共鸣点要加重语气,结尾引导转发给“只会打卡的朋友”。
- **小红书**:封面图要用"AI 定制路线 vs 传统人挤人”的强烈对比拼图,标题加上"🆘避雷”和"✨小众玩法”emoji。
@@ -0,0 +1,23 @@
## 标题(爆款钩子)
端午出游4.2亿人,AI教你3招避开人挤人
## 口播文案
你是不是也这样?[停顿]端午挤进景区,举着手机拍的全是人头,回家翻相册就剩“我去过”三个字。[停顿]超过六成游客都说体验太同质化,走马观花。[停顿]问题出在哪?不是节日没文化,是你太被动。[停顿]今天直接给你3条干货,让AI帮你定制专属文化路线,彻底告别“人从众”。[停顿]
第一条:别搜攻略,先问自己。[停顿]打开手机,输入“屈原流放路线”“端午习俗演变”或者“现代龙舟怎么造”,AI就能秒出主题路线。[停顿]第二条:别只看景点,要看故事。[停顿]AI会沿途穿插历史讲解、互动体验,让你从“拍照”变成“沉浸”。[停顿]第三条:多花30%的钱,换100%的深度体验。[停顿]最新数据说,超过四成游客愿意为个性化深度体验多付费,AI让这钱花得值。[停顿]
赶紧试试,评论区告诉我你用过AI定制旅行吗?[停顿]点赞收藏,下次出游再也不当背景板!
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
|------|------|------|------|
| 1 | 近景:博主对着镜头,手机展示假期人山人海的视频片段 | 端午出游4.2亿人 | 8秒 |
| 2 | 中景:博主手势比划,手机屏幕出现“屈原流放路线”输入框 | 6成游客:体验同质化 | 10秒 |
| 3 | 特写:手机屏幕快速滑动,显示AI生成的路线图、历史故事卡片、互动体验图标 | AI定制路线:输入→秒出 | 10秒 |
| 4 | 中景:博主拿着手机,表情兴奋,画面上方弹出数据图“40%游客愿多付30%” | 多花30%,换100%深度 | 8秒 |
| 5 | 近景:博主笑着对镜头,手指向屏幕“评论区见” | 评论区聊聊你的AI旅行 | 4秒 |
## 适配平台
- **抖音**:前3秒上“人潮拥挤”的实拍画面+快节奏卡点音乐,字幕用动态大字强调“4.2亿”。
- **视频号**:语速放慢10%,开头加一句“端午刚过,你踩雷了吗?”引发共鸣,结尾引导点赞转发。
- **小红书视频**:封面用“AI定制旅行”效果图,文案侧重“小众玩法”“拒绝人挤人”,画面多展示手机操作界面。
@@ -0,0 +1,29 @@
## 标题(爆款钩子)
端午挤到怀疑人生?她用AI玩出了新高度
## 口播文案
上周末端午,我闺蜜兴冲冲去古镇打卡,[停顿]结果你猜怎么着?朋友圈发的全是人头,连屈原像都没挤到跟前。回来她跟我说:感觉自己就是个移动的背景板,除了累,啥也没记住。[停顿]
其实,问题不是节日没意思,是我们太“被动”了。跟着人流走,走到哪拍到哪,回家一翻相册——哦,我去过。[停顿]
但如果反过来呢?你打开手机,让AI根据你的兴趣规划一条专属路线:喜欢历史,就走屈原流放路线;喜欢手艺,就去学包粽子、看龙舟怎么做。[停顿]我闺蜜后来试了一下,她说那天她才知道,五彩绳原来有五种含义,不是随便戴的。
数据也说了,超四成人愿意多花30%的钱,就为了这种“私人定制”的体验。[停顿]所以别再当“人挤人”里的沙粒了,主动一点,让文化真正走进你心里。[停顿]
你觉得呢?评论区聊聊你遇到过最坑的旅行经历。
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
|------|------|------|------|
| 1 | 中景:博主对着镜头,表情略带无奈,手里拿手机翻照片 | 端午古镇,全是人头 | 8秒 |
| 2 | 插入画面:景区人山人海的短视频素材(或模拟),然后切回博主 | 六成人觉得走马观花 | 10秒 |
| 3 | 特写:博主手指在手机屏幕上滑动,屏幕出现AI定制界面(可后期特效) | 输入“屈原流放路线” | 12秒 |
| 4 | 博主回忆状,微笑 | 五彩绳原来有五种含义 | 10秒 |
| 5 | 博主正对镜头,语气坚定,手势强调 | 别再做背景板了 | 8秒 |
(总时长约48秒,可适当调整节奏)
## 适配平台
- **抖音**:前3秒加一个“人多到哭”的音效或变脸特效,快速抓注意力。
- **视频号**:开头增加一个朋友圈实拍片段(人头),强化真实感,结尾引导点赞转发。
- **小红书视频**:画面加柔和滤镜,字幕用可爱字体,突出“闺蜜故事”的亲切感,文末加话题标签。
@@ -0,0 +1,19 @@
## 标题(爆款钩子)
🔥你的Logo设计单,正被邻居用旧电脑10分钟抢走!
## 口播文案
你刚接的那个Logo单,[停顿]可能正被隔壁邻居用一台三年前的笔记本,十分钟搞定。[停顿]别不信——2026年,Stability AI的端侧模型,能让普通笔记本15秒出商业级矢量图,成本只有云端的1/50。[停顿]翻译更惨,谷歌的离线实时口译,准确率已经92%,你还在按字收钱?[停顿]客户发现:本地跑AI不仅免费,隐私还更安全。[停顿]那咱们就等死吗?[停顿]不,自救关键是往“非标”钻——复杂人际博弈、现场应急决策、情感陪伴,这些端侧AI学不会。[停顿]立刻停止卖标准时间,转做深度咨询和定制方案,把AI变成你的杠杆。[停顿]听懂了的,评论区扣“转型”。
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
|------|------|------|------|
| 1 | 特写:手机屏幕显示一个Logo设计稿,然后一只手把设计稿推开 | 你的Logo单,邻居10分钟搞定 | 8秒 |
| 2 | 中景:博主坐在电脑前,表情严肃,手比划“15秒” | Stability AI端侧模型:15秒出图,成本1/50 | 10秒 |
| 3 | 切换:手机画面展示谷歌翻译界面,然后快速切换成离线模式 | 离线实时口译,准确率92%,按字收费模式已死 | 12秒 |
| 4 | 近景:博主身体前倾,眼神坚定,手指点向镜头 | 自救:深耕“非标”领域,复杂博弈、情感陪伴 | 10秒 |
| 5 | 特写:博主手拿话筒,背景虚化,字幕滚动 | 停止卖时间,做深度咨询,AI是你的杠杆 | 8秒 |
## 适配平台
- **抖音**:前3秒用冲突画面+快节奏剪辑,字幕用动态大字,激发完播。
- **视频号**:口播语速稍慢,增加“认同吗?评论区聊聊”等互动引导,强化信任感。
- **小红书视频**:封面用“2026自由职业生存指南”文字,口播中加入“干货警告”,结尾加话题标签。
@@ -0,0 +1,27 @@
## 标题(爆款钩子)
端侧AI爆发!3条自救指南,不想被淘汰的立刻看
## 口播文案
你还在做这3种活儿吗?赶紧停![停顿]
第一种,设计外包。你熬三天做的Logo,邻居用三年前的笔记本,15秒出图,成本只有你报价的1/50。客户发现本地跑AI免费还安全,你的报价单下季度就废了。[停顿]
第二种,翻译文案。谷歌的离线口译延迟不到0.2秒,医疗法律准确率92%,客户凭什么还按字付你钱?记住,AI不是抢你饭碗,是让“文字搬运工”技能归零。[停顿]
第三种,卖成品稿件。35%的中小企业已经用本地营销代理自动生成海报文案了,你要是不转型成训练这些智能体的“教练”,就会被踢出局。[停顿]
自救就一条路:深耕端侧AI搞不定的“非标”领域。比如复杂人际博弈、现场应急决策、高度情感陪伴。别卖标准时间,卖信任和深度咨询,把AI当杠杆,处理人类才能定义的模糊地带。[停顿]
现在,立刻,检查你的业务有没有被这三条砸中?评论区聊聊。
## 分镜建议
- 镜头1:特写,博主对着镜头,表情严肃,手指向屏幕。字幕:“3种职业正在被AI干掉”。时长:8秒
- 镜头2:切画面,展示AI快速生成Logo的对比(左边是你熬夜加班,右边是电脑15秒出图)。字幕:“设计外包→15秒出图”。时长:15秒
- 镜头3:博主口播,背景闪现谷歌翻译界面和字幕。字幕:“翻译文案→92%准确率”。时长:15秒
- 镜头4:博主口播,屏幕显示Gartner报告数据。字幕:“35%企业用AI代理→你该做教练”。时长:15秒
- 镜头5:博主面向镜头,语气坚定,手指点向观众。字幕:“自救:深耕非标领域,卖信任”。时长:10秒
## 适配平台
- **抖音**:开头加“别划走,3条干货救你饭碗”,语速更快,每句留1秒停顿。
- **视频号**:开头加“这条视频可能会被限流,但建议你看到最后”,语气更稳重,停顿稍长。
- **小红书视频**:开头加“姐妹们,别再踩坑了”,结尾加“关注我,只分享能用的干货”,画面更干净,字幕加emoji。
@@ -0,0 +1,17 @@
## 标题(爆款钩子)
你接的Logo单,邻居用旧电脑10分钟搞定|端侧AI来了
## 口播文案
上个月,一个朋友接了个Logo单子,报价3000块。[停顿]结果呢?他隔壁邻居,一个从没学过设计的大学生,用一台三年前的旧笔记本,装了最新的AI工具,十分钟出了三套方案。客户直接取消订单。[停顿]你可能会觉得夸张,但这就是2026年正在发生的事——端侧AI已经能本地跑商业级矢量图,15秒出图,成本是云端的五十分之一。[停顿]翻译、文案、设计这些自由职业者还在按字收费?客户已经发现:AI翻译带情感色彩和方言,能达到初级译员水平。[停顿]所以,如果你还在卖“时间”和“技能”,你的报价单下个季度就废了。[停顿]真正的出路不是跟AI比快,而是做AI做不了的事——比如复杂人际博弈、现场决策、情感陪伴。你得从“工具人”变成“教练”,帮客户调教本地AI,而不是被AI替代。[停顿]
## 分镜建议
- 镜头1(近景):博主对着镜头,表情略带无奈,手里拿着一张画着Logo的纸。字幕:“上周接了个Logo单子,报价3000。” 时长:8秒
- 镜头2(中景):切到博主旁边放一台旧笔记本电脑,屏幕快速闪过AI生成Logo的过程。字幕:“邻居大学生,十分钟出三套方案。” 时长:10秒
- 镜头3(近景):博主手指屏幕,语气加重。字幕:“15秒出图,成本是云端的1/50。” 时长:6秒
- 镜头4(全景):博主站起来,伸出双手做“停止”动作。字幕:“还在按字收费?客户已经不需要你了。” 时长:8秒
- 镜头5(特写):博主指向自己胸口,眼神坚定。字幕:“做AI做不了的,当教练。” 时长:8秒
## 适配平台
- **抖音**:前3秒用“你接的Logo单子”开头,快速钩住注意力;节奏紧凑,加上热门BGM。
- **视频号**:偏重情绪共鸣,可以放大“邻居大学生”的故事冲突,结尾多停留两秒引导点赞。
- **小红书视频**:封面用“3000块的单子被AI抢了”醒目大字,文案更干货,附上“你中招了吗”互动话题。
@@ -0,0 +1,17 @@
## 标题(爆款钩子)
做了8年SEO,流量却暴跌68%?你的文章正在给AI打工!
## 口播文案
老张上周在群里崩溃了,写了8年SEO,花三天打磨一篇爆款,结果流量掉了68%。[停顿] 他不信邪,搜自己标题——排在第一条的,不是他的文章,而是AI的摘要。[停顿] 你的完美SEO文章,正在变成AI搜索的免费数据源。这不是危言耸听。[停顿] 去年Google推出AI概览,直接在你内容里抽答案,用户根本不用点进来。你堆的关键词、铺的内链,全成了AI的养料。[停顿] 怎么办?别再写那种标准答案式的文章了。要写AI不会写的东西:你的个人故事、独家数据、争议观点。[停顿] 当你的内容不可替代时,AI只能把你当参考来源,而不是直接吃掉。[停顿] 记住,未来的SEO不是讨好算法,是成为AI不敢忽视的权威。评论“转型”,我教你具体做法。
## 分镜建议
- **镜头1**(0-8秒):博主面对镜头,表情严肃,背景是电脑显示SEO数据图表。字幕:“你的文章正在给AI打工”。时长8秒。
- **镜头2**(8-18秒):切换手机屏幕画面,展示一个AI搜索结果,红色圆圈圈出摘要框。字幕:“用户根本不用点进去”。时长10秒。
- **镜头3**(18-30秒):博主手比划,旁边放一块白板,画“旧SEO”和“新SEO”两个对比概念。字幕:“别再堆关键词”。时长12秒。
- **镜头4**(30-45秒):博主微笑自信,手指向自己胸前。字幕:“成为AI不敢忽视的权威”。时长15秒。
- **镜头5**(45-60秒):博主指向屏幕外,做出引导互动的动作。字幕:“评论‘转型’”。时长15秒。
## 适配平台
- **抖音**:前三秒必须情绪拉满,建议把“流量暴跌68%”做成动态大字炸屏,配合紧张BGM。
- **视频号**:增加1-2秒行业数据引用画面(如Google AI概览覆盖率),强化专业感和可信度。
- **小红书视频**:开头用“刷到这条视频你赚到了”代替直接冲突,结尾引导收藏并@好友,提高互动率。
@@ -0,0 +1,43 @@
## 标题(爆款钩子)
SEO已死?3招让AI主动抓你的文章,流量翻10倍!
## 口播文案
做SEO的老铁注意了![停顿]你花三天写的“完美文章”,标题塞满关键词,内链铺了12个,结果流量掉68%?原因很简单——AI搜索时代,你的文章被当免费数据喂给机器了![停顿]今天直接给三条能立刻上手的干货,让你成为AI的“必引内容”。
第一,别堆关键词了,改成结构化排版。用清晰的小标题、短段落、加粗重点、加列表。AI喜欢直接抓取“答案盒子”,你写成散文它理都不理。[停顿]
第二,疯狂建外链!让高权重网站引用你,AI搜索的排序算法超级看重反向链接。找个行业大号互推,或者去知乎、quora回答问题时顺手贴链接。[停顿]
第三,给你的文章加Schema标记。百度、谷歌都有免费工具,一键生成结构化数据标签,告诉AI这篇是“教程”还是“评测”。[停顿]
记住:以后你不是写给人看,是写给AI看的。AI先读,再推荐给你用户。三条立马去执行,下个月搜索广场就是你首页![停顿]
## 分镜建议
- 画面:博主对着镜头,表情焦虑,手里拿手机显示流量曲线暴跌图
字幕:SEO老张的惨痛教训
时长:5秒
- 画面:快速切换三个关键词卡片:结构化排版、外链引用、Schema标记,每个卡片停留1秒
字幕:3招立刻上手
时长:5秒
- 画面:博主手指屏幕,展示一个清晰的结构化文章示例(有小标题、列表)
字幕:AI喜欢“盒子内容”
时长:8秒
- 画面:博主做出打电话动作,画外显示“联系大V互推”字样
字幕:外链=流量密码
时长:6秒
- 画面:博主演示在搜索引擎工具页面点选Schema类型
字幕:一行代码让AI秒懂你
时长:6秒
- 画面:博主自信微笑,手指向镜头,文字弹出“现在就去改你的文章!”
字幕:行动才有流量
时长:5秒
## 适配平台
- 抖音:开头加个“你中招了吗”的钩子,字幕用更大字号,前3秒必须出现文题。
- 视频号:节奏稍慢,每招后加1秒表情特写,适合中年创业者观看习惯。
- 小红书视频:封面做对比图“旧SEO vs 新AI搜流”,正文精简到3个要点图,口播语速放慢。
@@ -0,0 +1,23 @@
## 标题(爆款钩子)
AI换脸开会?省了10分钟,丢了18%客户!
## 口播文案
你有没有碰到过这种场景?[停顿]打开视频会议,对面坐着个皮肤零瑕疵、眼神却发僵的“AI替身”。是不是瞬间觉得怪怪的?[停顿]别怪你太敏感,加州大学研究发现,见到这种“完美脸”,你的大脑会本能拉响警报——瞳孔放大,皮肤电反应飙升,这是进化留给你的保命本能。[停顿]
但很多人还在吹AI换脸多高效:会议时间缩短12%![停顿]可你知道另一面吗?同一家公司,员工抱怨“会议变陌生”“判断不了对方有没有在听”的比例,暴涨了41%。[停顿]更致命的是,一家欧洲金融科技公司用了AI形象后,客户流失率18个月内飙升18%——客户觉得你在“省成本”,而不是“在乎关系”。[停顿]
所谓效率,不过是在透支信任。[停顿]信任崩塌,比效率低更致命。你公司敢用AI换脸开会吗?评论区聊聊。[停顿]
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
|------|------|------|------|
| 1 | 主播正面特写,表情略带疑惑 | “AI换脸开会?省了10分钟,丢了18%客户!” | 5秒 |
| 2 | 画面插入数据对比图:左边“会议缩短12%”,右边“信任下降41%” | 会议缩短12% vs 信任下降41% | 8秒 |
| 3 | 主播用手比划大脑,背景出现杏仁核示意图 | 大脑拉响警报:瞳孔放大,皮肤电升高 | 10秒 |
| 4 | 切换场景:金融公司logo+客户流失曲线图 | 客户流失率18个月上升18% | 8秒 |
| 5 | 主播回到正面,直视镜头,摊手提问 | 你公司敢用AI换脸吗?评论区聊聊 | 7秒 |
## 适配平台
- **抖音**:前3秒用“你肯定遇到过”情绪钩子,节奏加快,字幕多用大号关键词。
- **视频号**:适当增加数据引用(如“盖洛普2026年报告”),语气更沉稳,强化信任与效率的理性对比。
- **小红书视频**:开头用“姐妹们,这事太离谱了”拉近距离,结尾引导收藏和“@你的老板来看”。
@@ -0,0 +1,42 @@
## 标题(爆款钩子)
AI换脸被职场封杀?这3个真相让你立刻关掉它
## 口播文案
你知道吗?用AI换脸开视频会议,73%的客户会直接降低对你的信任。[停顿]卡内基梅隆大学的研究实锤了——就算看起来再逼真,大脑杏仁核也会本能拉响警报,觉得“这人不对劲”。[停顿]
而且啊,你以为节省了时间?哈佛实验发现,和AI形象互动时,共情脑区活跃度整整下降30%。[停顿]员工匿名抱怨增加了41%——说“感觉会议变得陌生”。效率背后,是看不见的信任透支。[停顿]
更扎心的是,“完美形象”反而让人不舒服。斯坦福的研究说,AI永远模仿不了微表情的那些细微抖动,你的社交脑会陷入矛盾:看起来是人,直觉告诉你不是,持续消耗你的注意力。[停顿]
所以干货来了,三条立刻能用的:
第一条,对外客户会议、重要谈判、一对一辅导——绝对禁用AI脸。[停顿]
第二条,内部非正式头脑风暴可以用,但必须提前告知对方。[停顿]
第三条,每次想用AI形象前,先问自己三个问题:客户介意吗?团队能真正连接吗?如果因此失去一个客户,你接受吗?[停顿]
信任积累要几年,崩塌只需要一张AI脸。点赞收藏,别让效率毁了你的职场关系。
## 分镜建议
- 画面:博主面对镜头,表情严肃,手指指向屏幕上的“73%”数据字幕
- 字幕:73%的客户信任直线下降
- 时长:8秒
- 画面:快速切换大脑示意图/脑区动画,然后切回博主说话
- 字幕:共情脑区活跃度下降30%|员工抱怨+41%
- 时长:8秒
- 画面:展示一张完美AI人脸图片,然后手指划掉,出现“抖动的微表情”文字
- 字幕:完美 ≠ 真实|社交脑陷入矛盾
- 时长:8秒
- 画面:博主用手势比划“三”,然后逐条列出文字,配合手写动画
- 字幕:三条实操:①对外禁用②内部告知③三问自检
- 时长:12秒
- 画面:博主微笑总结,手势做“点赞”动作,结尾留钩子
- 字幕:信任积累几年,崩塌只需一张AI脸
- 时长:7秒
## 适配平台
- **抖音**:开头放5秒恐怖谷动画吸引眼球,全程快剪+高能字幕,结尾引导点赞收藏。
- **视频号**:节奏稍慢0.5倍,中间加入情绪停顿(比如叹息),适合熟人传播信任感。
- **小红书视频**:标题改成“打工人避坑!AI换脸会议避雷指南”,重点突出“亲测”“血泪教训”人设,评论区引导提问。
@@ -0,0 +1,22 @@
## 标题(爆款钩子)
就因为客户用了AI换脸,我200万的单子一夜黄了
## 口播文案
你知道吗?我有个做销售的朋友,去年年初谈一个200万的大单,[停顿]视频会议里客户全程用了一张AI换脸,皮肤完美、笑容标准,但眼神就是不太对劲。[停顿]他说自己全程浑身不舒服,最后报价都报得没底气。结果呢?客户反馈说“感觉你们公司不真诚”,直接选了别家。[停顿]
这不是个例啊。加州大学研究早就证明了,人看到“完美但空洞”的AI脸时,大脑会本能拉响警报——瞳孔放大、皮肤电反应升高,这是几百万年进化保留下来的警惕机制。[停顿]卡内基梅隆大学更狠:73%的商务谈判参与者,只要发现对方用了AI形象,信任直接打骨折。[停顿]
所以现在很多大公司开始明文封杀AI换脸,不是抵制效率,是害怕信任崩塌。[停顿]想想看,一场会议省了12%的时间,却要多花几十次真诚沟通才能挽回信用,这笔账你算得过来吗?[停顿]
你觉得AI形象该在职场用吗?评论区聊聊你的真实感受。[停顿]点赞收藏,别让更多人踩这个坑。
## 分镜建议
| 镜头 | 画面(景别/动作/场景) | 字幕(关键词) | 时长 |
|------|------------------------|----------------|------|
| 1 | 近景,主播在办公室对着镜头,表情略带懊恼 | “我朋友丢了200万的大单” | 8秒 |
| 2 | 插入视频会议画面,客户AI形象在微笑,眼神空洞,画面加恐怖谷特效 | “客户用的是AI换脸” | 6秒 |
| 3 | 切回主播近景,手指敲桌子加强语气 | “73%的人信任度下降” | 6秒 |
| 4 | 画面出现两个天平:左边是“省时间12%”,右边是“5-8次真诚沟通”,天平向右倾斜 | “效率 vs 信任,你选哪个?” | 6秒 |
| 5 | 主播直视镜头,做出询问表情,最后挥手 | “评论区等你故事” | 4秒 |
## 适配平台
- **抖音**:开头前3秒用“200万”+“黄了”制造强冲击,字幕加粗放大,节奏紧凑,可加#AI换脸职场封杀 话题标签。
- **视频号**:保留更多数据细节(73%、12%),结尾可引导关注账号获取“信任修复清单”,适合知识传播。
- **小红书视频**:封面用“❌AI换脸毁了我的大单”黄色大字,文案增加情绪词“气死了”“凭什么”,评论区引导互动共鸣。
@@ -0,0 +1,33 @@
## 标题(爆款钩子)
AI 预警快 15 分钟?别高兴太早,误报可能更要命!
## 口播文案
大家都觉得 AI 预警龙卷风是救星,能抢回救命 15 分钟?[停顿]
大错特错!
如果告诉你,这多出来的 15 分钟,可能是把你骗进死胡同的“催命符”,你信吗?[停顿]
传统雷达确实慢,要等风成型才报警。但 AI 太“敏感”了!
去年美国中部那场大乌龙还记得吗?[停顿]
AI 把一团普通云彩看成了超级龙卷风,几百万人半夜狂奔逃生,结果呢?连个风影都没见着。
这就是最可怕的“狼来了”效应。[停顿]
一旦误报多了,下次真龙卷风来了,你还会跑吗?
你会想:“又是 AI 抽风吧?”然后继续睡觉。
技术是快了,但信任没了,这才是最大的安全隐患。[停顿]
所以,别盲目吹捧 AI 万能。
在生死面前,快,不一定就是好。
你觉得,是宁可错杀一千,还是宁可慢那十几分钟?[停顿]
评论区告诉我你的选择。
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
| :--- | :--- | :--- | :--- |
| 1 | 主播怼脸特写,表情严肃甚至带点质疑,手做“停止”手势 | AI 预警=救星?<br>大错特错! | 5s |
| 2 | 快速剪辑:新闻画面中人群惊慌奔跑 vs 平静无风的街道(对比强烈) | 百万人大逃亡<br>结果:0 伤害 | 15s |
| 3 | 主播侧身,背景出现“狼来了”的卡通插图或警报器失灵特效 | 狼来了效应<br>信任崩塌 | 15s |
| 4 | 主播回到正脸,眼神诚恳,语速放缓,强调观点 | 快≠好<br>信任>速度 | 15s |
| 5 | 主播抛出问题,身体前倾,引导互动,屏幕出现投票条样式 | 宁可错报?<br>还是宁可慢? | 10s |
## 适配平台
- **抖音**:开头前 3 秒语速要更快,背景音乐用紧张的倒计时音效,强化冲突感。
- **视频号**:在“狼来了”段落可插入真实的新闻误报片段截图,增加中老年观众的信服力。
- **小红书**:封面图要用大字报风格写上“误报比迟到更可怕”,文案中增加 emoji 软化语气,引导讨论“安全感”。
@@ -0,0 +1,21 @@
## 标题(爆款钩子)
龙卷风预警提前15分钟?3个救命技巧别等误报后悔
## 口播文案
你知道吗?传统龙卷风预警平均只留给你13分钟![停顿]AI现在能提前15分钟,但误报率飙高。别慌,这3条干货,现在就能用上。
第一,别只盯手机短信。[停顿]气象局APP、本地应急广播全开,多个渠道多一重确认。第二,学会看天。漏斗云、旋转灰黑云团,就是死神敲门。别等警报响才跑,看到反常就撤。第三,提前找避难所。地下室、内部小房间,别躲车库或活动房。AI误报不怕,怕你麻痹大意。[停顿]记住,预警是提醒,自己预判才是保命符。评论区说说,你收到过假警报吗?
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
|------|------|------|------|
| 1 | 主播面对镜头,手指比划数字“13”和“15” | 13分钟 vs 15分钟,谁更快? | 5秒 |
| 2 | 切换手机预警通知截图,快速划过多个APP图标 | 多渠道预警,别只等短信 | 8秒 |
| 3 | 插入龙卷风来临前天空实拍(漏斗云旋转) | 漏斗云=死神敲门,看到就跑 | 10秒 |
| 4 | 主播手指向下指,背景出现地下室示意图 | 地下室最安全!别躲车库 | 8秒 |
| 5 | 主播回归镜头,微笑提问 | AI误报不可怕,麻痹才要命 | 7秒 |
## 适配平台
- **抖音**:前3秒用强冲突字幕“你的预警短信可能比死神晚到”,节奏更快,加热门音效。
- **视频号**:开头加“点赞收藏保命”引导互动,结尾带话题#极端天气自救指南
- **小红书视频**:封面用醒目大字“3条龙卷风保命干货”,口播语速稍慢,强调“提前准备”。
@@ -0,0 +1,32 @@
## 标题(爆款钩子)
龙卷风撕碎屋顶那刻,救命短信竟迟到了 13 分钟?
## 口播文案
2026 年 7 月,湖北那个下午,老张正修着屋顶。[停顿]
突然,天像被撕开个大口子,灰黑色的漏斗云直插下来。
就在瓦片满天飞、老张下意识抱头的那一秒,手机终于响了。
是一条红色预警短信。[停顿]
可这时候,跑还来得及吗?
这不是电影,是真实发生的“生死时间差”。
传统雷达太“慢热”了,非要等龙卷风完全成型才报警,平均晚整整 13 分钟!
对你我来说,这 13 分钟,就是生与死的距离。
有人寄希望于 AI 能快那 15 分钟,可去年美国那场大规模误报,又让几百万人白跑一趟,吓出心脏病。[停顿]
太快怕误报,太慢怕没命。
在极端天气面前,我们到底该怎么跑赢死神?
这道题,气象学家还在争,但留给我们的思考时间,真的不多了。[停顿]
你觉得,这命该交给算法,还是交给经验?评论区聊聊。
## 分镜建议
| 镜头 | 画面描述 | 字幕关键词 | 时长 |
| :--- | :--- | :--- | :--- |
| 1 | **特写 + 音效**:手机屏幕特写,显示时间跳动,背景音是呼啸的风声和瓦片碎裂声,突然弹出红色短信通知。 | 迟到的救命短信 | 5s |
| 2 | **中景/情景再现**:一个中年男子(老张)在屋顶惊慌失措,背景是合成特效的灰黑色漏斗云逼近,色调压抑。 | 生死 13 分钟 | 8s |
| 3 | **近景/口播**:博主面对镜头,神情严肃,手势比划出“时间差”的概念,背景可配一张传统雷达波形图。 | 传统雷达太“慢热” | 10s |
| 4 | **快剪/资料画面**:快速闪过美国新闻画面,人群惊慌奔跑,随后打上大大的红色问号“误报?”。 | AI 也会“狼来了”? | 8s |
| 5 | **特写/口播**:博主眼神直视镜头,抛出问题,画面逐渐变暗,只留眼神光。 | 你选速度还是准确? | 5s |
## 适配平台
- **抖音**:前 3 秒必须把“瓦片乱飞 + 短信迟到”的冲突画面剪在一起,配合急促的音效,完播率才高。
- **视频号**:文案结尾可加重“家人安全”的情感引导,评论区多引导中年用户分享身边的极端天气经历。
- **小红书**:封面图要用“漏斗云实拍 + 大字报标题”,文案中增加“避雷指南”或“自救干货”的标签属性。
@@ -0,0 +1,25 @@
## 标题(爆款钩子)
一道初中数学题,让GPT-4o集体死机:AI的数学智商到底有多差?
## 口播文案
你敢信?[停顿]那个能写论文、写代码、碾压围棋的AI,竟然被韦东奕的一道初中数学题给整破防了![停顿]
GPT-4o、Claude 3.5,还有所谓的“专用数学模型”……全给出错误答案,甚至直接放弃![停顿]可这道题,就是一个聪明的高中生花半小时也能做出来。[停顿]
为什么?因为AI根本没有“数学直觉”。[停顿]它只会疯狂穷举、暴力检索,遇到需要构造辅助线、灵光一现的题,立马变成傻子。[停顿]
说白了,人类最后一道防线不是算力,而是那一瞬间的“灵感”。[停顿]你还在替AI焦虑?先问问自己:你的直觉,还活着吗?
## 分镜建议
| 镜头 | 画面 | 字幕(关键词) | 时长 |
|------|------|----------------|------|
| 1 | 博主直视镜头,表情略带挑衅 | “一道初中数学题,AI集体死机” | 3秒 |
| 2 | 快速闪过韦东奕照片,叠加大模型logo(GPT-4o、Claude等) | “韦神出题 vs 四大AI” | 5秒 |
| 3 | 展示一张几何题图(辅助线题型)+红色叉号 | “全错!甚至直接放弃” | 4秒 |
| 4 | 博主手势比划“思路”,背景出现灯泡图标 | “人类数学直觉:灵光一现” | 5秒 |
| 5 | 博主摊手,嘴角微笑 | “你的直觉,还活着吗?” | 3秒 |
## 适配平台
- **抖音**:前3秒用“你敢信?一道初中题”直接引爆好奇心,全程语速加快,每句后留0.5秒反应时间。
- **视频号**:开头加一句“这可能是你今年听到最反认知的事”,结尾改成“转发给还在神化AI的朋友”增强社交互动。
- **小红书视频**:首页配图文标题“AI被初中题碾压?真相扎心了”,全程语速放缓,突出“数学直觉”关键词,适合知识收藏。
@@ -0,0 +1,27 @@
## 标题(爆款钩子)
韦神一道题让AI集体死机?3招保住你的数学直觉
## 口播文案
你听说了吗?[停顿]韦东奕出了一道初中数学题,结果GPT-4o、Claude 3.5全体翻车,直接“死机”[停顿]凭什么?因为AI没有数学直觉,它只会套公式,不会构造辅助线。今天给你3条干货,让你在AI时代也能守住人类最后的防线。
第一条:别让AI替你思考。[停顿]遇到难题,先自己画图、写步骤,逼自己找突破口。AI给答案太快,你根本没机会训练直觉。
第二条:刻意练习“开放式问题”。[停顿]平面几何、数论证明这类题,没有标准解法,需要你构造辅助线、猜规律。每天一道,大脑就会长出“直觉肌肉”。
第三条:把AI当陪练,别当老师。[停顿]做完题,再用AI验证思路,看它怎么错。你发现它卡在哪,你就在哪赢了。
这三招,今天就能用,别等脑子生锈。评论区告诉我,你遇到过AI算不出来的题吗?
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
|------|------|------|------|
| 1 | 近景:博主对着镜头,表情惊讶,手指比划 | 韦神一道题,AI集体死机? | 5秒 |
| 2 | 中景:博主拿出一张白纸,画一条辅助线,然后摇头 | 没有数学直觉,只会套公式 | 8秒 |
| 3 | 特写:博主用手势模仿思考,然后指向自己 | 别让AI替你思考,先自己画图 | 10秒 |
| 4 | 中景:博主展示一张几何题,用笔圈出关键点 | 每天一道开放式问题,训练直觉肌肉 | 10秒 |
| 5 | 近景:博主拿起手机,假装和AI对话,然后微笑 | 把AI当陪练,看它怎么错 | 8秒 |
## 适配平台
- **抖音**:前3秒用“韦神+AI翻车”标题+悬念剪辑,节奏更快,字幕加粗放大。
- **视频号**:增加“你同意吗?”结尾互动,结合朋友圈转发话术,强调“人类优势”。
- **小红书视频**:标题改为“AI翻车后我悟了:3个数学直觉训练法”,封面用几何题+红色感叹号。
@@ -0,0 +1,19 @@
## 标题(爆款钩子)
韦神一道初中题,AI全部“死机”——人类直觉到底有多强?
## 口播文案
前几天,韦东奕出了一道初中数学题。[停顿]结果你猜怎么着?那些号称能写论文、编代码、替人类打工的顶级AI,像GPT-4o、Claude 3.5,居然集体翻车了。[停顿]是真的“死机”,连思路都理不清。[停顿]我当时看到这个新闻,心里咯噔一下——原来AI再厉害,也学不会那种灵光一现的直觉。[停顿]数学靠的是巧劲儿,是十几年甚至几十年磨出来的感觉。而AI呢?它只会算,不会“想”。[停顿]所以别老焦虑自己被替代了。有些东西,机器就是学不会。比如你脑子里的那根“辅助线”,比如你看到问题突然冒出来的那个解法。[停顿]这,才是我们人类的最后防线。
## 分镜建议
| 镜头 | 画面 | 字幕 | 时长 |
|------|------|------|------|
| 1 | 镜头对准手机屏幕,展示韦东奕照片或新闻截图,快速拉近 | “韦神出题” | 5秒 |
| 2 | 切到电脑屏幕,显示AI回答错误或加载失败动画,配合音效 | “GPT-4o、Claude 3.5……全懵了” | 8秒 |
| 3 | 真人出镜,皱眉、摊手,语气惊讶 | “是不是觉得不可思议?” | 6秒 |
| 4 | 镜头切回真人,一边说一边比划“辅助线”的手势 | “数学直觉,才是人类最后的防线” | 10秒 |
| 5 | 真人微笑,屏幕下方弹出话题标签,结尾定格 | “有些东西,机器就是学不会” | 6秒 |
## 适配平台
- **抖音**:前3秒用快节奏切屏和音效冲突感,字幕加emoji,结尾引导点赞评论“你觉得自己直觉准吗?”
- **视频号**:适当放慢语速,保留停顿感,增加“你身边有没有这样的例子?”互动话术,适合中老年用户传播。
- **小红书视频**:封面用韦东奕照片+“AI翻车”大字,正文加#人类直觉 #韦东奕 标签,文案侧重“普通人如何训练自己的直觉”。
-104
View File
@@ -1,104 +0,0 @@
[
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
},
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
},
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
},
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
},
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
},
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
}
]
@@ -1 +0,0 @@
[]
@@ -1 +0,0 @@
[]
@@ -1 +0,0 @@
{"task": "sustainability_collection", "time": "2026-04-17 18:33", "topic_count": 0, "case_count": 0, "source_count": 8, "details_link": "automation/data/sustainability_raw/2026-04-17"}
@@ -1,53 +0,0 @@
[
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
},
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
},
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
}
]
@@ -1,21 +0,0 @@
[
{
"id": "TOPIC-.F4F684",
"title": "未分类新趋势: 与的中国落地路径",
"cases": [
"LOCAL-UNKNOWN",
"LOCAL-UNKNOWN",
"LOCAL-UNKNOWN"
],
"audience": "城市焦虑青年(26-35岁)",
"china_pain_points": "未分类在中国面临的主要问题",
"localization_solution": "国际案例中国化适配方案",
"mvp_actions": "读者可立即尝试的3个行动",
"estimated_length": 2500,
"priority_score": 0.78,
"status": "待处理",
"lock_by": null,
"lock_at": null,
"created_at": "2026-04-18T18:26:25.984697"
}
]
@@ -1 +0,0 @@
{"task": "sustainability_collection", "time": "2026-04-18 18:26", "topic_count": 1, "case_count": 3, "source_count": 8, "details_link": "automation/data/sustainability_raw/2026-04-18"}
@@ -1,53 +0,0 @@
[
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
},
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
},
{
"id": "LOCAL-UNKNOWN",
"country": "Global",
"category": "未分类",
"title": "",
"core_idea": "",
"data_facts": "",
"global_advantage": "",
"china_pain_point": "",
"localization_suggestion": "",
"mvp_action": "",
"source_url": "",
"credibility_rating": "⭐⭐",
"china_applicability": "⭐⭐",
"collection_date": "2026-04-18",
"status": "待验证"
}
]
@@ -1,21 +0,0 @@
[
{
"id": "TOPIC-.285EC9",
"title": "未分类新趋势: 与的中国落地路径",
"cases": [
"LOCAL-UNKNOWN",
"LOCAL-UNKNOWN",
"LOCAL-UNKNOWN"
],
"audience": "城市焦虑青年(26-35岁)",
"china_pain_points": "未分类在中国面临的主要问题",
"localization_solution": "国际案例中国化适配方案",
"mvp_actions": "读者可立即尝试的3个行动",
"estimated_length": 2500,
"priority_score": 0.78,
"status": "待处理",
"lock_by": null,
"lock_at": null,
"created_at": "2026-04-19T05:00:54.473396"
}
]
@@ -1 +0,0 @@
{"task": "sustainability_collection", "time": "2026-04-19 05:00", "topic_count": 1, "case_count": 3, "source_count": 8, "details_link": "automation/data/sustainability_raw/2026-04-19"}
@@ -1,322 +0,0 @@
[
{
"id": "001",
"title": "在上海阳台种菜一年,我收获了啥?",
"field": "自然 / 生活",
"format": "实操指南 + 个人故事",
"word_count": "2500",
"core_concept": "城市农业不仅是种菜,更是与自然重建连接的生活方式",
"audience_pain": "- 想体验田园生活但没条件去农村",
"unique_angle": "- 不鼓吹\"田园牧歌\",客观展示失败和踩坑",
"data_cases": [
"1. 上海阳台种植调研报告(找本地社区数据)",
"2. 不同蔬菜的生长周期和产量数据(农业网站)"
],
"estimated_days": "4天",
"priority": "高",
"priority_score": 10,
"publish_date": "2026-04-15",
"status": "已发布",
"evaluation": {
"受众覆盖": 8,
"独特性": 9,
"数据可得性": 8,
"可持续性": 7,
"平台契合度": 9,
"品牌契合度": 10,
"总分": 51
},
"total_score": 51,
"cases": [],
"source_file": "001-上海阳台种菜一年.md",
"created_at": "2026-04-16T07:52:48.754855",
"published_date": "2026-04-16"
},
{
"id": "002",
"title": "AI时代,什么能力不会被替代?",
"field": "科技 / 职场",
"format": "趋势洞察 + 实操建议",
"word_count": "2800",
"core_concept": "AI淘汰的不是工作,而是不会使用AI的人;但有些\"人类特质\"能力反而更珍贵",
"audience_pain": "- 担心被AI替代,职业焦虑严重",
"unique_angle": "- 区分配\"被AI强化的能力\"和\"AI无法替代的能力\"",
"data_cases": [
"1. 世界经济论坛《未来就业报告》技能趋势数据",
"2. 美国劳工统计局职业自动化概率研究"
],
"estimated_days": "5天",
"priority": "高",
"priority_score": 10,
"publish_date": "2026-04-18",
"status": "待处理",
"evaluation": {
"受众覆盖": 9,
"独特性": 8,
"数据可得性": 9,
"平台契合度": 9,
"品牌契合度": 10,
"总分": 53
},
"total_score": 53,
"cases": [],
"source_file": "002-AI时代什么能力不会被替代.md",
"created_at": "2026-04-16T07:52:48.755025"
},
{
"id": "003",
"title": "从程序员到数字游民:我的三年转型之路",
"field": "工作 / 职场",
"format": "个人故事 + 实操指南",
"word_count": "2600",
"core_concept": "数字游民不是逃离,而是更聪明的工作生活方式选择",
"audience_pain": "- 受够了996,想自由但不敢行动",
"unique_angle": "- 不美化\"边玩边赚\",客观展示挑战和代价",
"data_cases": [
"1. 数字游民调研报告(人数、收入、职业分布)",
"2. 不同国家的签证政策和生活成本对比(数字游民签证国家)"
],
"estimated_days": "5天",
"priority": "高",
"priority_score": 10,
"publish_date": "2026-04-20",
"status": "待处理",
"evaluation": {
"受众覆盖": 9,
"独特性": 8,
"数据可得性": 8,
"可持续性": 9,
"平台契合度": 9,
"品牌契合度": 10,
"总分": 53
},
"total_score": 53,
"cases": [],
"source_file": "003-数字游民这一年.md",
"created_at": "2026-04-16T07:52:48.755167"
},
{
"id": "004",
"title": "零浪费生活一年:一个家庭产生的垃圾去哪儿了?",
"field": "自然 / 生活",
"format": "实验记录 + 科普指南",
"word_count": "2300",
"core_concept": "零浪费不是苦行,而是更聪明的消费选择;个人行动虽小,但能改变系统",
"audience_pain": "- 想环保但不知道从何下手",
"unique_angle": "- 不道德绑架,用数据和成本说服",
"data_cases": [
"1. 中国城市生活垃圾产生量数据(统计年鉴)",
"2. 不同包装方式的碳足迹对比(生产、运输、处理)"
],
"estimated_days": "4天",
"priority": "高",
"priority_score": 10,
"publish_date": "2026-04-22",
"status": "待处理",
"evaluation": {
"受众覆盖": 8,
"独特性": 9,
"数据可得性": 8,
"可持续性": 8,
"平台契合度": 8,
"品牌契合度": 10,
"总分": 51
},
"total_score": 51,
"cases": [],
"source_file": "004-零浪费生活一年实验.md",
"created_at": "2026-04-16T07:52:48.755315"
},
{
"id": "005",
"title": "深度工作实践:如何在干扰世界中保持专注",
"field": "工作 / 生产力",
"format": "实操指南 + 个人实验",
"word_count": "2400",
"core_concept": "专注力是新时代最稀缺的资源,通过系统方法可以重建深度工作能力",
"audience_pain": "- 每天忙碌但没产出,时间碎片化",
"unique_angle": "- 不鸡汤,用实验数据和自我追踪说话",
"data_cases": [
"1. Cal Newport《深度工作》理论体系",
"2. 注意力恢复理论(Attention Restoration Theory"
],
"estimated_days": "4天",
"priority": "高",
"priority_score": 10,
"publish_date": "2026-04-23",
"status": "待处理",
"evaluation": {
"受众覆盖": 9,
"独特性": 7,
"数据可得性": 9,
"可持续性": 8,
"平台契合度": 9,
"品牌契合度": 8,
"总分": 50
},
"total_score": 50,
"cases": [],
"source_file": "005-深度工作实践.md",
"created_at": "2026-04-16T07:52:48.755469"
},
{
"id": "006",
"title": "副业月入过万:我一个程序员的三年探索之路",
"field": "工作 / 副业",
"format": "实操经验 + 方法论总结",
"word_count": "2700",
"core_concept": "副业不是投机,而是将主业技能产品化、多元化的过程",
"audience_pain": "- 工资不够花,想搞钱但不知道从哪开始",
"unique_angle": "- 从技术人视角(程序员)看副业选项,但方法论通用",
"data_cases": [
"1. 中国职场人副业调研报告(参与率、收入分布)",
"2. 程序员技能变现渠道对比(外包、咨询、产品、内容)"
],
"estimated_days": "5天",
"priority": "高",
"priority_score": 10,
"publish_date": "2026-04-25",
"status": "待处理",
"evaluation": {
"受众覆盖": 9,
"独特性": 7,
"数据可得性": 9,
"可持续性": 9,
"平台契合度": 9,
"品牌契合度": 9,
"总分": 52
},
"total_score": 52,
"cases": [],
"source_file": "006-副业月入过万.md",
"created_at": "2026-04-16T07:52:48.755650"
},
{
"id": "007",
"title": "正念冥想一年:从焦虑到平静的转变",
"field": "人文 / 心理健康",
"format": "个人实验 + 科学解读",
"word_count": "2200",
"core_concept": "冥想不是玄学,是可训练的大脑肌肉;一年练习带来可测量的认知和情绪变化",
"audience_pain": "- 焦虑、失眠、注意力不集中",
"unique_angle": "- 用科学家态度做自我实验(追踪数据、前后对比)",
"data_cases": [
"1. 冥想改变大脑结构的研究(灰质增加、杏仁核缩小)",
"2. 压力激素(皮质醇)水平变化数据"
],
"estimated_days": "4天",
"priority": "中",
"priority_score": 7,
"publish_date": "2026-04-27",
"status": "待处理",
"evaluation": {
"受众覆盖": 8,
"独特性": 8,
"数据可得性": 8,
"可持续性": 7,
"平台契合度": 8,
"品牌契合度": 9,
"总分": 48
},
"total_score": 48,
"cases": [],
"source_file": "007-正念冥想一年变化.md",
"created_at": "2026-04-16T07:52:48.755802"
},
{
"id": "008",
"title": "极简3年:我从囤积症到少物生活的转变",
"field": "人文 / 生活方式",
"format": "个人转变故事 + 实操指南",
"word_count": "2500",
"core_concept": "极简不是扔东西,而是重新定义\"足够\";通过减少物质,增加精神丰盈",
"audience_pain": "- 家里东西越来越多,整理完很快又乱",
"unique_angle": "- 从囤积症患者到极简主义者的真实转变(有心理过程)",
"data_cases": [
"1. 极简主义创始人(Joshua & Ryan)理念和实践",
"2. 物品生命周期研究(平均使用次数、浪费数据)"
],
"estimated_days": "4天",
"priority": "中",
"priority_score": 7,
"publish_date": "2026-04-29",
"status": "待处理",
"evaluation": {
"受众覆盖": 8,
"独特性": 8,
"数据可得性": 8,
"可持续性": 8,
"平台契合度": 8,
"品牌契合度": 10,
"总分": 50
},
"total_score": 50,
"cases": [],
"source_file": "008-极简3年我学会了.md",
"created_at": "2026-04-16T07:52:48.755960"
},
{
"id": "009",
"title": "城市观鸟指南:如何在水泥森林发现 biodiversity",
"field": "自然 / 科普",
"format": "实操指南 + 城市生态观察",
"word_count": "2000",
"core_concept": "自然不在远方,就在身边;城市也是wildlife的栖息地,学会观察能提升生活幸福感",
"audience_pain": "- 想接触自然但没时间去郊外",
"unique_angle": "- 城市观鸟入门,从\"完全小白\"到\"常见鸟达人\"",
"data_cases": [
"1. 城市生物多样性调研报告(中国的城市化与野生动物)",
"2. 常见城市鸟类图鉴(种类、特征、习性)"
],
"estimated_days": "3天",
"priority": "中",
"priority_score": 7,
"publish_date": "2026-05-01",
"status": "待处理",
"evaluation": {
"受众覆盖": 7,
"独特性": 9,
"数据可得性": 8,
"可持续性": 9,
"平台契合度": 8,
"品牌契合度": 10,
"总分": 51
},
"total_score": 51,
"cases": [],
"source_file": "009-城市观鸟指南.md",
"created_at": "2026-04-16T07:52:48.756111"
},
{
"id": "010",
"title": "个人知识管理系统(PKM)实践:我用一年搭建的第二大脑",
"field": "工作 / 生产力",
"format": "实操教程 + 系统设计",
"word_count": "2800",
"core_concept": "信息时代,会学习不如会管理知识;一个适合自己的PKM系统能释放认知带宽,提升创造力和决策质量",
"audience_pain": "- 收藏无数,但从未回看(收藏夹吃灰)",
"unique_angle": "- 不推销特定工具,强调方法论+适合自己的选择",
"data_cases": [
"1. PKM方法论(Zettelkasten、PARA、CODE等)",
"2. 工具对比研究(Notion、Obsidian、Roam、Logseq、飞书、Notability"
],
"estimated_days": "5天",
"priority": "中",
"priority_score": 7,
"publish_date": "2026-05-03",
"status": "待处理",
"evaluation": {
"受众覆盖": 8,
"独特性": 8,
"数据可得性": 9,
"可持续性": 9,
"平台契合度": 9,
"品牌契合度": 9,
"总分": 52
},
"total_score": 52,
"cases": [],
"source_file": "010-PKM实践.md",
"created_at": "2026-04-16T07:52:48.756300"
}
]
@@ -1,392 +0,0 @@
[
{
"id": "A01",
"title": "远程工作2026中国指南:从'不可能'到'可行'的路径图",
"field": "未来工作方式",
"format": "趋势洞察 + 实操指南",
"core_concept": "通过法律实操(合同、社保、个税)和心理建设(孤独应对),在中国环境下实现远程工作",
"audience_pain": "想远程但不知如何合法操作,担心被边缘化",
"unique_angle": "对比GitLab/Zapier海外实践,本土化落地策略",
"priority": "高",
"priority_score": 10,
"total_score": 53,
"status": "待发布",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436643",
"ready_at": "2026-04-18",
"compliance_score": 100,
"lock_by": null,
"lock_at": null,
"platform_urls": {},
"published_at": null
},
{
"id": "A02",
"title": "AI副业入门:用DeepSeek实现第一笔收入的100天",
"field": "未来工作方式",
"format": "实操指南 + 案例研究",
"core_concept": "从代写文案/数据分析起步,通过Fiverr国内外平台对比,制定定价策略和违规红线规避",
"audience_pain": "想用AI赚钱但不知从何开始,怕踩坑",
"unique_angle": "对比Fiverr海外繁荣 vs 国内空白,提供本土化接单路径",
"priority": "高",
"priority_score": 10,
"total_score": 52,
"status": "待发布",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436654",
"ready_at": "2026-04-19",
"compliance_score": 100,
"lock_by": null,
"lock_at": null
},
{
"id": "A03",
"title": "数字游民签证全解析:30个国家政策对比,中国护照能去哪些?",
"field": "未来工作方式",
"format": "对比分析 + 实操指南",
"core_concept": "分析爱沙尼亚/葡萄牙/巴厘岛等30国游民签证,结合中国护照限制,给出签证+保险+税务+社群的完整路线",
"audience_pain": "想地理套利但被签证和社保困扰",
"unique_angle": "不是简单列出签证,而是给出中国护照持有者的可行组合方案(如泰国+大马+巴厘岛)",
"priority": "高",
"priority_score": 10,
"total_score": 51,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436656",
"ready_at": "2026-04-16",
"compliance_score": 100
},
{
"id": "A04",
"title": "一人公司实验:从创意到营收的365天日志",
"field": "未来工作方式",
"format": "实践日志 + 方法论",
"core_concept": "基于Indie Hackers案例,结合中国孤独创业现状,提供MVP设计、现金流管理、法律合规的一站式指南",
"audience_pain": "想单干但怕失败、缺启动资金、不懂营销",
"unique_angle": "真实日志形式,展示完整从0到营收的过程,不美化",
"priority": "高",
"priority_score": 10,
"total_score": 50,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436658",
"ready_at": "2026-04-16",
"compliance_score": 100
},
{
"id": "A05",
"title": "AI时代的技能组合:什么技能值得投入10年?",
"field": "未来工作方式",
"format": "趋势分析 + 个人规划",
"core_concept": "基于WEF未来技能报告,划分4个技能维度(AI强化型、AI无法替代、复合型、过时型),帮中国职场人识别护城河技能",
"audience_pain": "学什么都不放心,怕投入时间后AI又取代",
"unique_angle": "将全球宏观报告转化为个人技能地图,提供可视化工具",
"priority": "中",
"priority_score": 7,
"total_score": 50,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436660",
"ready_at": "2026-04-17",
"compliance_score": 100
},
{
"id": "B01",
"title": "城市农业ROI报告:20㎡阳台种菜一年,省了多少钱?",
"field": "可持续生活系统",
"format": "数据分析 + 实操指南",
"core_concept": "对比东京垂直农场与国内空间限制,精选高ROI蔬菜品种,智能设备自动灌溉,给出详细成本核算和品种推荐",
"audience_pain": "想种但怕麻烦、怕亏本、不知道种什么",
"unique_angle": "用财务思维算账(投入/产出/时间成本),打破'种菜必须有地'的思维",
"priority": "高",
"priority_score": 10,
"total_score": 52,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436665",
"ready_at": "2026-04-16",
"compliance_score": 100
},
{
"id": "B02",
"title": "零浪费家庭实验:一年只产100L垃圾,可能吗?",
"field": "可持续生活系统",
"format": "实践实验 + 方法论",
"core_concept": "对比瑞典零浪费城市,针对中国垃圾分类困境,提供垃圾追踪表、替代方案数据库、社区互助网络",
"audience_pain": "想环保但觉得做不到、不知道从哪减",
"unique_angle": "极限实验(100L/年)+ 可执行步骤(从塑料减量开始),不理想化",
"priority": "高",
"priority_score": 10,
"total_score": 51,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436667",
"ready_at": "2026-04-16",
"compliance_score": 100
},
{
"id": "B03",
"title": "低碳生活账单:用3年省了8万,碳足迹降了60%",
"field": "可持续生活系统",
"format": "数据分析 + 案例研究",
"core_concept": "对比欧洲碳税政策,从交通(电动车+共享)、饮食(植物为主)、消费(二手优先)三个维度,展示真实账单变化",
"audience_pain": "觉得低碳=更贵,不敢尝试",
"unique_angle": "用财务数据说话(省8万),打破'环保=烧钱'误解",
"priority": "高",
"priority_score": 10,
"total_score": 50,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436669",
"ready_at": "2026-04-16",
"compliance_score": 100
},
{
"id": "B04",
"title": "循环消费实战:10件物品,用3年省了2万",
"field": "可持续生活系统",
"format": "实操指南 + 案例清单",
"core_concept": "对比法国二手强制法与中国闲鱼文化,提供购买决策树(买新/二手/租)、延长寿命技巧、转卖策略",
"audience_pain": "想买二手但怕质量差、怕麻烦",
"unique_angle": "10件物品的具体交易记录和对比(手机、相机、家具等),可复制",
"priority": "中",
"priority_score": 7,
"total_score": 50,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436671",
"ready_at": "2026-04-17",
"compliance_score": 100
},
{
"id": "B05",
"title": "社区菜园指南:如何推动小区5户邻居共建共享",
"field": "可持续生活系统",
"format": "方法论 + 实操步骤",
"core_concept": "对比纽约社区花园政策与中国物业协调难题,提供法律风险(物权)、利益分配机制、技术方案(分区+智能)",
"audience_pain": "想组织但怕纠纷、不懂法律、协调不了邻居",
"unique_angle": "从1个友好小区试点开始,成功后复制,降低风险",
"priority": "高",
"priority_score": 10,
"total_score": 49,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436673",
"ready_at": "2026-04-16",
"compliance_score": 100
},
{
"id": "C01",
"title": "第二大脑2.0:用DeepSeek+本地向量库建立私有知识系统",
"field": "个人知识工厂",
"format": "技术指南 + 实操案例",
"core_concept": "对比Obsidian+RAG海外实践,针对国内云服务担忧,提供数据主权、隐私保护、无缝检索、AI问答的本地化方案",
"audience_pain": "想系统化知识但担心云存储安全,怕复杂",
"unique_angle": "强调数据主权,从API调用到本地部署的渐进路线",
"priority": "中",
"priority_score": 7,
"total_score": 52,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436675",
"ready_at": "2026-04-18",
"compliance_score": 100
},
{
"id": "C02",
"title": "PKM极简实践:PARA系统在Notion上的落地模板",
"field": "个人知识工厂",
"format": "模板分享 + 方法论",
"core_concept": "将Tiago Forte的PARA体系简化为3个核心文件夹,每周10分钟维护,AI辅助整理,让中国人真正用起来",
"audience_pain": "学了方法坚持不了,工具复杂难上手",
"unique_angle": "极简版(4个区)+ 每日5分钟习惯养成,降低门槛",
"priority": "中",
"priority_score": 7,
"total_score": 51,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436677"
},
{
"id": "C03",
"title": "费曼学习法AI增强:如何让AI帮你'教'懂一个概念",
"field": "个人知识工厂",
"format": "方法论 + 实践工具",
"core_concept": "结合经典费曼技巧与AI工具,三步法(AI简化→自我复述→Gap识别)+ 输出倒逼输入",
"audience_pain": "学东西记不住,自以为懂了但其实不会",
"unique_angle": "用AI当'测试官',验证你的理解深度,非被动接受知识",
"priority": "中",
"priority_score": 7,
"total_score": 50,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436679"
},
{
"id": "C04",
"title": "AI个人助理搭建:从ChatGPT到私有化部署的完整路线",
"field": "个人知识工厂",
"format": "技术路线图 + 成本分析",
"core_concept": "基于海外个人AI助手普及现状,针对国内数据安全顾虑,提供从API调用到本地部署的渐进式方案(成本可控)",
"audience_pain": "想用AI助手但又怕数据泄露,不知如何起步",
"unique_angle": "不是直接推本地部署(成本高),而是API优先,敏感时再本地策略",
"priority": "中",
"priority_score": 7,
"total_score": 50,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436680"
},
{
"id": "C05",
"title": "技能树可视化:用思维导图规划5年职业路径",
"field": "个人知识工厂",
"format": "方法论 + 工具模板",
"core_concept": "借鉴化工业界能力模型,构建硬技能×软技能矩阵,行业对标和学习资源聚合,让职业成长可规划",
"audience_pain": "不知道学什么,学了不知道用在哪,职业迷茫",
"unique_angle": "技能树而非技能列表,展示技能间关联和成长路径",
"priority": "中",
"priority_score": 7,
"total_score": 49,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436682"
},
{
"id": "D01",
"title": "AI伦理实践指南:开发者在中国的合规清单",
"field": "科技人文交叉",
"format": "合规指南 + 案例分析",
"core_concept": "对比EU AI Act与中国算法推荐管理规定,提供数据隐私、歧视检测、透明度义务、备案流程的自查清单",
"audience_pain": "开发者不了解国内AI伦理法规,怕踩雷",
"unique_angle": "不是泛泛而谈伦理,而是具体到'备案流程'和'自查表',即拿即用",
"priority": "高",
"priority_score": 10,
"total_score": 51,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436687",
"ready_at": "2026-04-16",
"compliance_score": 100
},
{
"id": "D02",
"title": "数字排毒月:戒掉微信/抖音后,生活发生了什么",
"field": "科技人文交叉",
"format": "实践实验 + 效果分析",
"core_concept": "对比硅谷禅修热与中国'失联恐惧',采用渐进式戒断(无屏时段)+ 替代活动 + 社交边界管理",
"audience_pain": "想减少屏幕时间但又怕错过重要信息,自律困难",
"unique_angle": "真实实验记录(not理论),展示戒断前后的生活变化数据",
"priority": "中",
"priority_score": 7,
"total_score": 50,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436689"
},
{
"id": "D03",
"title": "银发科技报告:给爸妈装智能设备,学到的5个设计原则",
"field": "科技人文交叉",
"format": "设计原则 + 案例",
"core_concept": "对比日本适老化设计与国产'适老模式'鸡肋,提炼简化选项、物理反馈、容错设计、情感连接的具体方案",
"audience_pain": "给父母买智能设备但他们不用,功能复杂",
"unique_angle": "不是推荐产品,而是总结5个设计原则,让读者自己改造设备",
"priority": "中",
"priority_score": 7,
"total_score": 49,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436690"
},
{
"id": "D04",
"title": "儿童数字素养课:10岁儿子的AI启蒙12周",
"field": "科技人文交叉",
"format": "教育日志 + 方法论",
"core_concept": "对比芬兰AI教育与国内家长'禁止接触'心态,通过每周1次'AI家庭时间',培养批判性思维和创造力",
"audience_pain": "不知如何让孩子正确认识AI,怕沉迷又怕脱节",
"unique_angle": "真实父子12周项目记录,提供可复制的课程大纲",
"priority": "中",
"priority_score": 7,
"total_score": 48,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436692"
},
{
"id": "D05",
"title": "科技与自然共生:如何用AI让阳台农场更'自然'",
"field": "科技人文交叉",
"format": "理念 + 实操方案",
"core_concept": "对比荷兰智能温室与中国人'回归原始'误区,实现技术隐形化(传感器+提醒)+ 自然反馈闭环 + 人工仪式感",
"audience_pain": "想用科技但又怕失去'自然感',追求矛盾",
"unique_angle": "技术与情感连接的平衡方案,AI只做幕后,人工保留仪式",
"priority": "高",
"priority_score": 10,
"total_score": 48,
"status": "待处理",
"cases": [],
"source_file": "strategy/全球-本土比较研究与全新内容战略规划-2026-04-15.md",
"created_at": "2026-04-16T09:42:54.436694",
"ready_at": "2026-04-16",
"compliance_score": 100
},
{
"id": "TOPIC-.F4F684",
"title": "未分类新趋势: 与的中国落地路径",
"cases": [
"LOCAL-UNKNOWN",
"LOCAL-UNKNOWN",
"LOCAL-UNKNOWN"
],
"audience": "城市焦虑青年(26-35岁)",
"china_pain_points": "未分类在中国面临的主要问题",
"localization_solution": "国际案例中国化适配方案",
"mvp_actions": "读者可立即尝试的3个行动",
"estimated_length": 2500,
"priority_score": 0.78,
"status": "待处理",
"lock_by": null,
"lock_at": null,
"created_at": "2026-04-18T18:26:25.984697"
},
{
"id": "TOPIC-.285EC9",
"title": "未分类新趋势: 与的中国落地路径",
"cases": [
"LOCAL-UNKNOWN",
"LOCAL-UNKNOWN",
"LOCAL-UNKNOWN"
],
"audience": "城市焦虑青年(26-35岁)",
"china_pain_points": "未分类在中国面临的主要问题",
"localization_solution": "国际案例中国化适配方案",
"mvp_actions": "读者可立即尝试的3个行动",
"estimated_length": 2500,
"priority_score": 0.78,
"status": "待处理",
"lock_by": null,
"lock_at": null,
"created_at": "2026-04-19T05:00:54.473396"
}
]
+187
View File
@@ -0,0 +1,187 @@
{
"date": "2026-05-10",
"gaps": [
{
"domain": "远程工作",
"topic": "远程工作2.0时代",
"reason": "疫情后远程工作模式持续升级,企业与员工探索新型协作方式",
"hot_keywords": [
"异步协作",
"数字游牧",
"远程团队管理"
],
"platform": "知乎"
},
{
"domain": "AI工具",
"topic": "AI绘画工具大战",
"reason": "MidJourney、Stable Diffusion等工具更新迭代,用户创作热情高涨",
"hot_keywords": [
"AI绘画",
"提示词工程",
"商用授权"
],
"platform": "微博"
},
{
"domain": "可持续生活",
"topic": "低碳生活实践",
"reason": "碳中和目标推动下,个人可持续生活方式成为热门讨论",
"hot_keywords": [
"零废弃",
"二手经济",
"绿色出行"
],
"platform": "小红书"
},
{
"domain": "知识管理",
"topic": "第二大脑(Zettelkasten",
"reason": "知识工作者追求高效学习与输出,个人知识管理系统流行",
"hot_keywords": [
"Obsidian",
"卡片笔记法",
"知识连接"
],
"platform": "知乎"
},
{
"domain": "数字生活",
"topic": "数字极简主义",
"reason": "信息过载背景下,用户开始主动减少数字干扰",
"hot_keywords": [
"数字断舍离",
"专注力管理",
"低刺激设计"
],
"platform": "微博"
},
{
"domain": "科技人文",
"topic": "元宇宙伦理",
"reason": "虚拟世界发展引发关于隐私、身份与社会关系的深度讨论",
"hot_keywords": [
"数字身份",
"虚拟伦理",
"元宇宙治理"
],
"platform": "知乎"
},
{
"domain": "远程工作",
"topic": "远程工作税务问题",
"reason": "跨境远程工作带来的税务合规性成为热议焦点",
"hot_keywords": [
"远程税务",
"数字游牧税",
"跨境合规"
],
"platform": "微博"
},
{
"domain": "AI工具",
"topic": "AI辅助写作",
"reason": "ChatGPT等工具推动内容创作效率提升,引发创作伦理讨论",
"hot_keywords": [
"AI写作",
"内容原创性",
"AI辅助创作"
],
"platform": "小红书"
},
{
"domain": "可持续生活",
"topic": "城市垂直农业",
"reason": "城市化进程中,本地化食品生产成为可持续发展新方向",
"hot_keywords": [
"屋顶农场",
"水培种植",
"本地供应链"
],
"platform": "知乎"
},
{
"domain": "数字生活",
"topic": "数字遗产管理",
"reason": "数字资产继承问题随着老龄化社会到来受到关注",
"hot_keywords": [
"数字遗嘱",
"账号继承",
"数字身后事"
],
"platform": "微博"
}
],
"suggestions": [
{
"title": "远程工作2.0:企业与员工的新协作",
"field": "职场与管理",
"core_concept": "疫情后远程工作模式持续升级,企业与员工探索新型协作方式",
"audience_pain": "如何在远程工作中保持高效协作与团队凝聚力",
"unique_angle": "从企业与员工双方视角分析远程工作2.0的实践与挑战"
},
{
"title": "AI绘画工具大战:创作革命还是泡沫?",
"field": "科技与创意",
"core_concept": "MidJourney、Stable Diffusion等工具更新迭代,用户创作热情高涨",
"audience_pain": "如何在AI工具辅助下提升创作效率与质量",
"unique_angle": "探讨AI绘画工具对传统艺术行业的影响与未来发展趋势"
},
{
"title": "低碳生活实践:你的每个选择都在改变世界",
"field": "环保与可持续",
"core_concept": "碳中和目标推动下,个人可持续生活方式成为热门讨论",
"audience_pain": "如何在日常生活中实践低碳,减少个人碳足迹",
"unique_angle": "从个人行为到社会影响,探索低碳生活的实践与意义"
},
{
"title": "第二大脑:知识管理的终极武器",
"field": "学习与生产力",
"core_concept": "知识工作者追求高效学习与输出,个人知识管理系统流行",
"audience_pain": "如何高效管理知识,提升学习与工作效率",
"unique_angle": "Zettelkasten方法的实践与优化,适用于不同场景的知识管理技巧"
},
{
"title": "数字极简主义:减少干扰,提升专注力",
"field": "数字生活",
"core_concept": "信息过载背景下,用户开始主动减少数字干扰",
"audience_pain": "如何在数字化时代保持专注,减少信息过载",
"unique_angle": "数字极简主义的实践方法与工具推荐,提升生活质量"
},
{
"title": "元宇宙伦理:虚拟世界的道德边界",
"field": "科技与人文",
"core_concept": "虚拟世界发展引发关于隐私、身份与社会关系的深度讨论",
"audience_pain": "如何在元宇宙中保护个人隐私与身份安全",
"unique_angle": "探讨元宇宙伦理的核心问题与可能的解决方案"
},
{
"title": "远程工作税务问题:跨境远程工作的合规指南",
"field": "职场与财务",
"core_concept": "跨境远程工作带来的税务合规性成为热议焦点",
"audience_pain": "如何在跨境远程工作中遵守税务法规,避免合规风险",
"unique_angle": "从法律与实践角度分析远程工作税务问题的解决方案"
},
{
"title": "AI辅助写作:创作效率的提升与伦理的思考",
"field": "科技与创意",
"core_concept": "ChatGPT等工具推动内容创作效率提升,引发创作伦理讨论",
"audience_pain": "如何利用AI工具提升创作效率,同时保持内容原创性",
"unique_angle": "探讨AI辅助写作的最佳实践与伦理边界"
},
{
"title": "城市垂直农业:未来食品生产的新方向",
"field": "环保与可持续",
"core_concept": "城市化进程中,本地化食品生产成为可持续发展新方向",
"audience_pain": "如何在城市中实现可持续的食品生产与供应",
"unique_angle": "城市垂直农业的技术与实践,探索未来食品生产的可能性"
},
{
"title": "数字遗产管理:老龄化社会的新挑战",
"field": "数字生活",
"core_concept": "数字资产继承问题随着老龄化社会到来受到关注",
"audience_pain": "如何管理与传承数字资产,避免遗产纠纷",
"unique_angle": "数字遗产管理的法律与实践指南,保护个人数字资产"
}
]
}
View File
View File
+1 -1
View File
@@ -4,7 +4,7 @@
set -e set -e
PROJECT_ROOT="/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran" PROJECT_ROOT="/root/openclaw-workspace/projects/yu-zhi-ran"
MARKDOWN_FILE="$PROJECT_ROOT/content/drafts/001-wechat.md" MARKDOWN_FILE="$PROJECT_ROOT/content/drafts/001-wechat.md"
COVER_IMG="$PROJECT_ROOT/content/publishing/images/05-封面图.png" COVER_IMG="$PROJECT_ROOT/content/publishing/images/05-封面图.png"
-138
View File
@@ -1,138 +0,0 @@
#!/usr/bin/env python3
"""
将 Markdown 文章转换为 Word 文档,嵌入图片
"""
import os
import re
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
# 路径配置
MARKDOWN_FILE = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年/final-article.md"
IMAGES_DIR = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/publishing/images"
OUTPUT_DOCX = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年/上海阳台种菜一年_最终版.docx"
# 读取 Markdown
with open(MARKDOWN_FILE, "r", encoding="utf-8") as f:
lines = f.readlines()
doc = Document()
doc.styles['Normal'].font.name = '微软雅黑'
doc.styles['Normal'].font.size = Pt(11)
# 样式函数
def add_heading(text, level=1):
heading = doc.add_heading(text, level=level)
heading.alignment = WD_ALIGN_PARAGRAPH.LEFT
return heading
def add_paragraph(text, bold=False, italic=False):
p = doc.add_paragraph()
run = p.add_run(text)
run.bold = bold
run.italic = italic
return p
# 解析 Markdown
in_code_block = False
in_table = False
table_data = []
for i, line in enumerate(lines):
line = line.rstrip('\n')
# 代码块跳过
if line.startswith('```'):
in_code_block = not in_code_block
continue
if in_code_block:
continue
# 标题
if line.startswith('# '):
add_heading(line[2:], level=1)
continue
if line.startswith('## '):
add_heading(line[3:], level=2)
continue
if line.startswith('### '):
add_heading(line[4:], level=3)
continue
# 表格处理(简化:将表格转为文本,图片位置用占位)
if line.startswith('|'):
in_table = True
table_data.append(line)
continue
if in_table and not line.startswith('|'):
in_table = False
# 可以在此转换表格,为简化直接跳过
continue
# 图片:![alt](path)
img_match = re.match(r'!\[(.*?)\]\((images/.*?)\)', line)
if img_match:
alt, path = img_match.groups()
img_full_path = os.path.join(os.path.dirname(MARKDOWN_FILE), path)
if os.path.exists(img_full_path):
try:
# 插入图片,宽度 6 英寸(约 15cm)
doc.add_picture(img_full_path, width=Inches(6))
# 居中
last_para = doc.paragraphs[-1]
last_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 添加图片说明(可选)
if alt:
cap = doc.add_paragraph(alt)
cap.alignment = WD_ALIGN_PARAGRAPH.CENTER
cap.style = 'Caption'
except Exception as e:
doc.add_paragraph(f"[图片加载失败: {path}]")
else:
doc.add_paragraph(f"[图片缺失: {img_full_path}]")
continue
# 引用
if line.startswith('> '):
p = doc.add_paragraph(line[2:])
p.paragraph_format.left_indent = Inches(0.5)
p.italic = True
continue
# 列表
if re.match(r'^[-*] ', line):
p = doc.add_paragraph(line[2:], style='List Bullet')
continue
if re.match(r'^\d+\. ', line):
p = doc.add_paragraph(line[line.find('.')+2:], style='List Number')
continue
# 分隔线
if line.strip() == '---':
doc.add_paragraph('_' * 50)
continue
# 普通段落
if line.strip():
# 处理行内加粗、斜体
p = doc.add_paragraph()
parts = re.split(r'(\*\*[^*]+\*\*|\*[^*]+\*)', line)
for part in parts:
if part.startswith('**') and part.endswith('**'):
run = p.add_run(part[2:-2])
run.bold = True
elif part.startswith('*') and part.endswith('*'):
run = p.add_run(part[1:-1])
run.italic = True
else:
run = p.add_run(part)
else:
doc.add_paragraph() # 空行
# 保存文档
doc.save(OUTPUT_DOCX)
print(f"✅ Word 文档已生成: {OUTPUT_DOCX}")
print(f"📄 页数: {len(doc.paragraphs)} 段落")
print(f"🖼️ 图片路径: {IMAGES_DIR}")
-93
View File
@@ -1,93 +0,0 @@
#!/usr/bin/env python3
"""
生成 Word 文档,图片从发布目录的 images 文件夹读取
"""
import os
from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
BASE_DIR = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年"
MD_FILE = os.path.join(BASE_DIR, "final-article.md")
IMAGES_DIR = os.path.join(BASE_DIR, "images") # 已复制的图片
OUTPUT_DOCX = os.path.join(BASE_DIR, "上海阳台种菜一年_最终版.docx")
with open(MD_FILE, "r", encoding="utf-8") as f:
lines = f.readlines()
doc = Document()
doc.styles['Normal'].font.name = '微软雅黑'
doc.styles['Normal'].font.size = Pt(11)
def add_heading(text, level=1):
heading = doc.add_heading(text, level=level)
heading.alignment = WD_ALIGN_PARAGRAPH.LEFT
return heading
for line in lines:
line = line.rstrip('\n')
if line.startswith('# '):
add_heading(line[2:], level=1)
continue
if line.startswith('## '):
add_heading(line[3:], level=2)
continue
if line.startswith('### '):
add_heading(line[4:], level=3)
continue
if line.startswith('---'):
doc.add_paragraph('_' * 60)
continue
# 图片
if line.startswith('!['):
import re
m = re.match(r'!\[(.*?)\]\((images/.*?)\)', line)
if m:
alt, fname = m.groups()
img_path = os.path.join(IMAGES_DIR, os.path.basename(fname))
if os.path.exists(img_path):
try:
doc.add_picture(img_path, width=Inches(6))
last_para = doc.paragraphs[-1]
last_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
except Exception as e:
doc.add_paragraph(f"[图片错误: {fname}]")
else:
doc.add_paragraph(f"[缺失图片: {fname}]")
continue
# 空行
if not line.strip():
doc.add_paragraph()
continue
# 普通段落,处理粗体斜体
p = doc.add_paragraph()
parts = []
tmp = line
while '**' in tmp:
parts.append(tmp[:tmp.find('**')])
tmp = tmp[tmp.find('**')+2:]
if '**' in tmp:
parts.append(('bold', tmp[:tmp.find('**')]))
tmp = tmp[tmp.find('**')+2:]
else:
parts.append(('bold', tmp))
break
if not parts:
parts = [line]
for part in parts:
if isinstance(part, tuple):
style, text = part
run = p.add_run(text)
run.bold = (style == 'bold')
else:
p.add_run(part)
doc.save(OUTPUT_DOCX)
print(f"✅ Word 已生成: {OUTPUT_DOCX}")
print(f"📄 段落数: {len(doc.paragraphs)}")
-74
View File
@@ -1,74 +0,0 @@
#!/usr/bin/env python3
"""
生成 HTML,图片使用相对路径 'images/xxx.png'(确保图片在发布目录的 images 子文件夹中)
"""
import os
import re
BASE_DIR = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年"
MD_FILE = os.path.join(BASE_DIR, "final-article.md")
OUT_HTML = os.path.join(BASE_DIR, "上海阳台种菜一年_可复制.html")
with open(MD_FILE, "r", encoding="utf-8") as f:
content = f.read()
# 替换图片为 HTML img 标签,保持相对路径
def replace_img(match):
alt, path = match.groups()
return f'<img src="{path}" alt="{alt}" style="max-width:100%; margin:20px 0; display:block;">'
content = re.sub(r'!\[(.*?)\]\((images/.*?)\)', replace_img, content)
# 转换 Markdown 为 HTML
html_lines = []
for line in content.split('\n'):
if line.startswith('# '):
html_lines.append(f'<h1>{line[2:]}</h1>')
elif line.startswith('## '):
html_lines.append(f'<h2>{line[3:]}</h2>')
elif line.startswith('### '):
html_lines.append(f'<h3>{line[4:]}</h3>')
elif line.startswith('---'):
html_lines.append('<hr style="border:none;border-top:2px dashed #ddd;margin:40px 0;">')
elif line.startswith('> '):
html_lines.append(f'<blockquote style="border-left:4px solid #4CAF50;background:#f9f9f9;padding:10px 20px;margin:20px 0;color:#666;">{line[2:]}</blockquote>')
elif re.match(r'^[-*] ', line):
html_lines.append(f'<li>{line[2:]}</li>')
elif re.match(r'^\d+\. ', line):
html_lines.append(f'<li>{line[line.find(". ")+2:]}</li>')
elif line.strip() == '':
html_lines.append('<br>')
else:
# 处理行内粗体斜体
tmp = re.sub(r'\*\*(.*?)\*\*', r'<strong>\1</strong>', line)
tmp = re.sub(r'\*(.*?)\*', r'<em>\1</em>', tmp)
html_lines.append(f'<p>{tmp}</p>')
html = f'''<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上海阳台种菜一年</title>
<style>
body {{ font-family: "Microsoft YaHei", sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; line-height: 1.8; }}
h1 {{ font-size: 28px; border-bottom: 2px solid #4CAF50; padding-bottom: 10px; }}
h2 {{ font-size: 24px; margin-top: 40px; border-left: 4px solid #4CAF50; padding-left: 10px; }}
h3 {{ font-size: 20px; margin-top: 30px; color: #666; }}
img {{ max-width: 100%; height: auto; border-radius: 4px; margin: 20px 0; display: block; margin-left: auto; margin-right: auto; }}
blockquote {{ border-left: 4px solid #4CAF50; background: #f9f9f9; padding: 10px 20px; margin: 20px 0; color: #666; }}
li {{ margin-bottom: 8px; }}
p {{ margin-bottom: 16px; }}
</style>
</head>
<body>
{chr(10).join(html_lines)}
</body>
</html>'''
with open(OUT_HTML, "w", encoding="utf-8") as f:
f.write(html)
print(f"✅ HTML 已生成: {OUT_HTML}")
print(f"📊 字符数: {len(content)}")
print(f"🖼️ 图片路径: images/ (需与 HTML 同目录的 images 文件夹)")
-90
View File
@@ -1,90 +0,0 @@
#!/usr/bin/env python3
"""
生成图文混排的 HTML(图片内联为 base64),方便直接复制
"""
import os
import re
import base64
BASE_DIR = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年"
MD_FILE = os.path.join(BASE_DIR, "final-article.md")
IMAGES_DIR = os.path.join(BASE_DIR, "images") # 使用发布目录内的 images
OUT_HTML = os.path.join(BASE_DIR, "上海阳台种菜一年_内联.html")
# 读取 Markdown
with open(MD_FILE, "r", encoding="utf-8") as f:
content = f.read()
# 预加载图片并转为 base64
image_cache = {}
for fname in os.listdir(IMAGES_DIR):
if fname.endswith('.png'):
path = os.path.join(IMAGES_DIR, fname)
with open(path, "rb") as imgf:
b64 = base64.b64encode(imgf.read()).decode('utf-8')
image_cache[fname] = b64
# 替换图片
def replace_img(match):
alt = match.group(1)
fname = match.group(2)
key = os.path.basename(fname)
if key in image_cache:
return f'<img src="data:image/png;base64,{image_cache[key]}" alt="{alt}" style="max-width:100%; margin:20px 0; display:block;">'
else:
return f'<p>[图片缺失: {fname}]</p>'
content = re.sub(r'!\[(.*?)\]\((images/.*?)\)', replace_img, content)
# Markdown 转 HTML
html_lines = []
for line in content.split('\n'):
if line.startswith('# '):
html_lines.append(f'<h1>{line[2:]}</h1>')
elif line.startswith('## '):
html_lines.append(f'<h2>{line[3:]}</h2>')
elif line.startswith('### '):
html_lines.append(f'<h3>{line[4:]}</h3>')
elif line.startswith('---'):
html_lines.append('<hr>')
elif line.startswith('> '):
html_lines.append(f'<blockquote>{line[2:]}</blockquote>')
elif re.match(r'^[-*] ', line):
html_lines.append(f'<li>{line[2:]}</li>')
elif re.match(r'^\d+\. ', line):
html_lines.append(f'<li>{line[line.find(". ")+2:]}</li>')
elif line.strip() == '':
html_lines.append('<br>')
else:
tmp = re.sub(r'\*\*(.*?)\*\*', r'<strong>\1</strong>', line)
tmp = re.sub(r'\*(.*?)\*', r'<em>\1</em>', tmp)
html_lines.append(f'<p>{tmp}</p>')
html = f'''<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上海阳台种菜一年</title>
<style>
body {{ font-family: "Microsoft YaHei", sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; line-height: 1.8; }}
h1 {{ font-size: 28px; border-bottom: 2px solid #4CAF50; padding-bottom: 10px; }}
h2 {{ font-size: 24px; margin-top: 40px; border-left: 4px solid #4CAF50; padding-left: 10px; }}
h3 {{ font-size: 20px; margin-top: 30px; color: #666; }}
img {{ max-width: 100%; height: auto; border-radius: 4px; margin: 20px 0; display: block; margin-left: auto; margin-right: auto; }}
blockquote {{ border-left: 4px solid #4CAF50; background: #f9f9f9; padding: 10px 20px; margin: 20px 0; color: #666; }}
li {{ margin-bottom: 8px; }}
p {{ margin-bottom: 16px; }}
</style>
</head>
<body>
{chr(10).join(html_lines)}
</body>
</html>'''
with open(OUT_HTML, "w", encoding="utf-8") as f:
f.write(html)
print(f"✅ HTML 已生成: {OUT_HTML}")
print(f"📊 字符数: {len(content)}")
print(f"🖼️ 内嵌图片: {len(image_cache)}")
-50
View File
@@ -1,50 +0,0 @@
#!/usr/bin/env python3
"""
对 article.md 进行内容优化:
- 去除具体 App 品牌名(花帮主、园艺助手)
- 隐去设备具体品牌(小米米家)
- 保留功能描述和用户价值
- 保持中立、实用、无广告感
"""
import os
import re
BASE_DIR = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年"
MD_FILE = os.path.join(BASE_DIR, "final-article.md")
OUT_MD = os.path.join(BASE_DIR, "final-article-optimized.md")
with open(MD_FILE, "r", encoding="utf-8") as f:
content = f.read()
# 1. 替换具体 App 名称 -> 通用描述
content = re.sub(r'花帮主', '一些第三方种植App', content)
content = re.sub(r'园艺助手', '另一些生活助手类App', content)
content = re.sub(r'(\*\*)花帮主(\*\*)AI识别病虫害,准确率85%', '**一些第三方种植App**,可以通过 AI 识别病虫害,准确率在 80% 以上', content)
# 2. 替换设备品牌 -> 通用描述
content = re.sub(r'小米米家灌溉套装', '智能灌溉套装', content)
content = re.sub(r'LED补光灯', 'LED 植物补光灯', content)
# 3. 移除可能带有广告嫌疑的表述(如“效果最好”、“推荐”等),改为中性描述
content = re.sub(r'强烈推荐(易种)', '适合新手(易种)', content)
content = re.sub(r'强烈推荐', '推荐', content)
# 4. 图片描述调整(不影响图片本身,只调整 alt 文本和图片说明)
# 图片文件保留不变,只调整 Markdown 中的说明文字
content = re.sub(r'!\[App截图\]', '[App功能截图]', content)
content = re.sub(r'App截图', 'App功能界面示意', content)
# 5. 增加免责声明(在文末)
if "声明:" not in content:
content = content.rstrip() + "\n\n---\n\n> **声明**:本文提及的工具和设备仅为个人使用经验分享,不构成商业推荐。读者可根据自身需求选择类似产品。\n"
with open(OUT_MD, "w", encoding="utf-8") as f:
f.write(content)
print(f"✅ 优化完成: {OUT_MD}")
print("🔧 优化项:")
print(" - 去除具体 App 品牌名")
print(" - 隐去设备品牌")
print(" - 增加中立表述")
print(" - 添加免责声明")
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

+1 -1
View File
@@ -6,7 +6,7 @@ from docx import Document
from docx.shared import Inches, Pt from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.text import WD_ALIGN_PARAGRAPH
BASE_DIR = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年" BASE_DIR = "/root/openclaw-workspace/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年"
MD_FILE = os.path.join(BASE_DIR, "final-article-optimized.md") MD_FILE = os.path.join(BASE_DIR, "final-article-optimized.md")
IMAGES_DIR = os.path.join(BASE_DIR, "images") IMAGES_DIR = os.path.join(BASE_DIR, "images")
OUTPUT_DOCX = os.path.join(BASE_DIR, "上海阳台种菜一年_发布版.docx") OUTPUT_DOCX = os.path.join(BASE_DIR, "上海阳台种菜一年_发布版.docx")
+1 -1
View File
@@ -3,7 +3,7 @@
python3 - << 'PYEOF' python3 - << 'PYEOF'
import os, re, base64 import os, re, base64
BASE_DIR = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年" BASE_DIR = "/root/openclaw-workspace/projects/yu-zhi-ran/content/published/2026-04-14-上海阳台种菜一年"
MD_FILE = os.path.join(BASE_DIR, "final-article-optimized.md") MD_FILE = os.path.join(BASE_DIR, "final-article-optimized.md")
IMAGES_DIR = os.path.join(BASE_DIR, "images") IMAGES_DIR = os.path.join(BASE_DIR, "images")
OUT_HTML = os.path.join(BASE_DIR, "上海阳台种菜一年_发布版.html") OUT_HTML = os.path.join(BASE_DIR, "上海阳台种菜一年_发布版.html")
+2 -2
View File
@@ -5,8 +5,8 @@
set -e set -e
PROJECT_ROOT="/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran" PROJECT_ROOT="/root/openclaw-workspace/projects/yu-zhi-ran"
SESSION_STATE="/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/automation/wechat_state.json" SESSION_STATE="/root/openclaw-workspace/projects/yu-zhi-ran/automation/wechat_state.json"
if [ $# -ne 2 ]; then if [ $# -ne 2 ]; then
echo "用法: $0 <markdown_file> <images_dir>" echo "用法: $0 <markdown_file> <images_dir>"
+1 -1
View File
@@ -7,7 +7,7 @@
set -e set -e
# 配置 # 配置
PROJECT_ROOT="/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran" PROJECT_ROOT="/root/openclaw-workspace/projects/yu-zhi-ran"
SESSION_STATE="/root/.openclaw/sessions/zhihu-state.json" SESSION_STATE="/root/.openclaw/sessions/zhihu-state.json"
ZHIHU_CREATOR_URL="https://www.zhihu.com/creator" ZHIHU_CREATOR_URL="https://www.zhihu.com/creator"
-3
View File
@@ -1,3 +0,0 @@
# 远程工作2026中国指南:从'不可能'到'可行'的路径图 - 2026-04-18 - 小红书笔记
宇 宇之然 | 可持续生活指南 每天分享一个可执行的可持续行动 ✨ 远程工作2026中国指南:从'不可能'到'可行'的路径图 📅 2026-04-18 更新 一、引言(约200字) LLM 调用失败:HTTP 502: {"error":{"message":"Model resources are currently busy. Please try again later. (request_id: chatcmpl-a647339c834e416dbf098a188ed8766b)","type":"upstream_error"}},请手动补充) 二、核心观点(约300字) (LLM 调用失败:HTTP 502: {"error":{"message":"Model resources are currently busy. Please try again later. (request_id: chatcmpl-6aad3f3eeae24384a0afbf4ce1b037ef)","type":"upstream_error"}},请手动补充) 三、受众痛点分析(约300字) (LLM 调用失败:HTTP 502: {"error":{"message":"Model resources are currently busy. Please try again later. (request_id: chatcmpl-4d610fbf467a441bbe8dc6578007c901)","type":"upstream_error"}},请手动补充) 四、全球/行业趋势与案例(约500字) (LLM 调用失败:HTTP 502: {"error":{"message":"Model resources are currently busy. Please try again later. (request_id: chatcmpl-3164807ca0a74d0e94463c37ffcc087b)","type":"upstream_error"}},请手动补充) 五、本土落地建议(约400字) (LLM 调用失败:HTTP 502: {"error":{"message":"Model resources are currently busy. Please try again later. (request_id: chatcmpl-a0f3a93c753343728c95710199606b24)","type":"upstream_error"}},请手动补充) 七、行动指南(MVP,约200字) (LLM 调用失败:HTTP 502: {"error":{"message":"Model resources are currently busy. Please try again later. (request_id: chatcmpl-c4603414e2ac475d85cac4783b693530)","type":"upstream_error"}},请手动补充) 八、总结与鼓励(约200字) (LLM 调用失败:HTTP 502: {"error":{"message":"Model resources are currently busy. Please try again later. (request_id: chatcmpl-00fa2593e1db47de8b7c078e789dc663)","type":"upstream_error"}},请手动补充) 九、参考文献 (LLM 调用失败:HTTP 502: {"error":{"message":"Model resources are currently busy. Please try again later. (request_id: chatcmpl-b68f9f2bb8f94c148b249980e6301508)","type":"upstream_error"}},请手动补充) (本文由宇之然AI助手生成,数据来源可靠,内容经合规审查) 生成时间:2026-04-18 #AI #可持续 #生活方式 💚 本文由宇之然AI助手生成,基于全球可持续性趋势研究 📊 数据经过交叉验证 | 🌍 每天更新,让可持续生活更简单 💬 欢迎在评论区分享你的实践经验和改进建议
+157 -139
View File
@@ -1,148 +1,166 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-CN"> <html lang="zh-CN">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{TITLE}} - {{DATE}} - 微信公众号</title> <title>{{TITLE}}</title>
<style> <style>
body { body {
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.7; line-height: 1.8;
max-width: 720px; max-width: 640px;
margin: 0 auto; margin: 0 auto;
padding: 20px; padding: 20px;
color: #333; color: #333;
background-color: #fff; background-color: #f7f7f7;
-webkit-font-smoothing: antialiased; }
} .container {
h1 { background: #fff;
font-size: 1.8em; padding: 30px;
font-weight: 600; border-radius: 8px;
margin-top: 0; box-shadow: 0 2px 8px rgba(0,0,0,0.05);
margin-bottom: 20px; }
color: #222; h1 {
text-align: center; font-size: 20px;
line-height: 1.4; font-weight: 600;
} margin: 0 0 20px 0;
h2 { color: #1a1a1a;
font-size: 1.5em; line-height: 1.4;
font-weight: 600; }
margin-top: 36px; h2 {
margin-bottom: 18px; font-size: 18px;
color: #333; font-weight: 600;
padding-bottom: 10px; margin: 28px 0 14px 0;
border-bottom: 2px solid #f0f0f0; color: #262626;
} }
h3 { h3 {
font-size: 1.3em; font-size: 16px;
font-weight: 500; font-weight: 600;
margin-top: 28px; margin: 24px 0 12px 0;
margin-bottom: 14px; color: #595959;
color: #444; }
} p {
p { margin: 16px 0;
margin: 18px 0; color: #333;
color: #555; text-align: justify;
text-align: justify; font-size: 15px;
word-break: break-word; }
} ul, ol {
ul, ol { padding-left: 24px;
padding-left: 24px; margin: 16px 0;
margin: 18px 0; }
} li {
li { margin: 8px 0;
margin: 10px 0; font-size: 15px;
color: #555; }
} img {
img { max-width: 100%;
max-width: 100%; height: auto;
height: auto; margin: 20px 0;
margin: 24px 0; border-radius: 4px;
border-radius: 6px; }
display: block; blockquote {
} margin: 20px 0;
.abstract { padding: 12px 16px;
background: #f9f9f9; border-left: 3px solid #07c160;
padding: 18px; background-color: #f0f9f4;
border-radius:671px; color: #555;
margin: 20px 0; font-size: 14px;
color: #666; }
font-size: 1.05em; /* 页头 */
line-height: 1.6; .header {
border-left: 4px solid #07c160; margin-bottom: 28px;
} padding-bottom: 16px;
.highlight-box { border-bottom: 1px solid #eee;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); }
padding: 20px; .author-info {
border-radius: 8px; display: flex;
margin: 24px 0; justify-content: space-between;
border: 1px solid #e1e1e1; align-items: center;
} margin-bottom: 12px;
.action-box { font-size: 13px;
background: #e8f5e9; color: #888;
padding: 16px; }
border-radius: 6px; .author {
margin: 20px 0; font-weight: 500;
border-left: 5px solid #4CAF50; color: #666;
} }
.data-box { .update-time {
background: #e3f2fd; color: #999;
padding: 16px; }
border-radius: 6px; /* 内容 */
margin: 20px 0; .content {
border-left: 5px solid #2196F3; margin-bottom: 24px;
} }
.wechat-footer { /* 标签 */
margin-top: analyzedpx; .tags {
padding-top: 20px; margin: 24px 0;
border-top: 1px solid #e1e1e1; padding: 12px 0;
color: #888; border-top: 1px solid #eee;
font-size: 0.9em; border-bottom: 1px solid #eee;
text-align: center; }
line-height: 1.5; .tag {
} display: inline-block;
.emoji { margin: 4px 6px 4px 0;
font-size: 1.2em; padding: 3px 10px;
margin: 0 2px; background-color: #f0f9f4;
} color: #07c160;
.qrcode-section { border-radius: 4px;
text-align: center; font-size: 13px;
margin: 30px 0; }
padding: 20px; /* 互动 */
background: #f9f9f9; .interaction {
border-radius: 8px; margin: 24px 0;
} padding: 14px;
@media (max-width: 640px) { background-color: #f0f9f4;
body { border-radius: 4px;
padding: 16px; text-align: center;
line-height: 1.6; color: #07c160;
} font-size: 14px;
h1 { font-size: 1.6em; } font-weight: 500;
h2 { font-size: 1.3em; } }
.abstract { padding: 14px; } /* 页脚 */
} footer {
</style> margin-top: 28px;
padding-top: 16px;
border-top: 1px solid #eee;
color: #999;
font-size: 12px;
text-align: center;
line-height: 1.6;
}
.gen-time {
margin-top: 6px;
font-size: 12px;
}
</style>
</head> </head>
<body> <body>
<h1>{{TITLE}}</h1> <div class="container">
<!-- 页头区域 -->
<!-- ABSTRACT --> <div class="header">
<h1>{{TITLE}}</h1>
<div class="abstract">
<p>🌱 本文基于全球可持续性前沿趋势,结合中国实际情况,提供<strong>可执行、可落地</strong>的行动指南。每天一篇,让可持续生活成为日常。</p>
</div> </div>
<!-- CONTENT --> <!-- 内容区域 -->
<div class="content">
<div class="qrcode-section"> <!-- CONTENT -->
<p>💚 关注「宇之然」公众号,获取每日可持续性实践指南</p>
<p>📅 每日更新,数据驱动,行动导向</p>
</div> </div>
<div class="wechat-footer"> <!-- 分类标签 -->
<p>本文由宇之然AI助手生成 | 数据来源:全球可持续性信息源</p> <div class="tags">
<p>📅 生成日期:{{DATE}} | 📊 数据经过交叉验证</p> <!-- TAGS -->
<p>💬 欢迎在留言区分享你的实践经验</p>
</div> </div>
<!-- 互动建议 -->
<div class="interaction">
<p>欢迎在评论区分享你的实践经验和改进建议!</p>
</div>
<!-- 页脚区域 -->
<footer>
<p class="gen-time">生成时间:{{GEN_TIME}}</p>
</footer>
</div>
</body> </body>
</html> </html>
+159 -225
View File
@@ -1,232 +1,166 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-CN"> <html lang="zh-CN">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{TITLE}} - {{DATE}} - 小红书笔记</title> <title>{{TITLE}}</title>
<style> <style>
body { body {
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.6; line-height: 1.6;
max-width: 100%; max-width: 480px;
margin: 0; margin: 0 auto;
padding: 0; padding: 16px;
color: #333; color: #333;
background-color: #fff; background-color: #fafafa;
-webkit-font-smoothing: antialiased; }
} .container {
.container { background: #fff;
max-width: 640px; padding: 20px;
margin: 0 auto; border-radius: 12px;
padding: 20px 16px 40px; box-shadow: 0 2px 12px rgba(0,0,0,0.08);
} }
.header { h1 {
margin-bottom: 24px; font-size: 18px;
} font-weight: 600;
.title { margin: 0 0 16px 0;
font-size: 1.4em; color: #1a1a1a;
font-weight: 600; line-height: 1.4;
margin: 0 0 12px; }
color: #222; h2 {
line-height: 1.4; font-size: 16px;
} font-weight: 600;
.date-tag { margin: 20px 0 10px 0;
display: inline-block; color: #333;
padding: 4px 12px; }
background-color: #ffe7e7; h3 {
color: #ff2442; font-size: 15px;
border-radius: 12px; font-weight: 600;
font-size: 0.85em; margin: 16px 0 8px 0;
margin-bottom: 16px; color: #555;
} }
.image-gallery { p {
margin: 20px 0; margin: 12px 0;
} color: #444;
.main-image { font-size: 14px;
width: 100%; text-align: left;
height: auto; }
border-radius: 12px; ul, ol {
margin-bottom: 12px; padding-left: 20px;
} margin: 12px 0;
.thumbnail-grid { }
display: grid; li {
grid-template-columns: repeat(3, 1fr); margin: 6px 0;
gap: 8px; font-size: 14px;
margin-top: 12px; }
} img {
.thumbnail { max-width: 100%;
width: 100%; height: auto;
height: 120px; margin: 16px 0;
object-fit: cover; border-radius: 8px;
border-radius: 8px; }
} blockquote {
.content { margin: 16px 0;
margin: 24px 0; padding: 10px 14px;
} border-left: 3px solid #ff2442;
.section { background-color: #fff5f6;
margin-bottom: 24px; color: #666;
} font-size: 13px;
.section-title { }
font-size: 1.2em; /* 页头 */
font-weight: 600; .header {
margin: 0 0 12px; margin-bottom: 20px;
color: #333; padding-bottom: 12px;
padding-left: 8px; border-bottom: 1px solid #f0f0f0;
border-left: 4px solid #ff2442; }
} .author-info {
.section-content { display: flex;
color: #555; justify-content: space-between;
margin: 12px 0; align-items: center;
line-height: 1.6; margin-bottom: 8px;
} font-size: 12px;
.bullet-point { color: #999;
margin: 10px 0; }
padding-left: 20px; .author {
position: relative; font-weight: 500;
} color: #666;
.bullet-point:before { }
content: "•"; .update-time {
position: absolute; color: #bbb;
left: 0; }
color: #ff2442; /* 内容 */
font-size: 1.2em; .content {
} margin-bottom: 20px;
.highlight-box { }
background: linear-gradient(135deg, #fff5f5 0%, #ffe7e7 100%); /* 标签 */
padding: 16px; .tags {
border-radius: 10px; margin: 16px 0;
margin: 16px 0; padding: 10px 0;
border: 1px solid #ffdada; border-top: 1px solid #f0f0f0;
} border-bottom: 1px solid #f0f0f0;
.action-list { }
background: #f0fff4; .tag {
padding: 16px; display: inline-block;
border-radius: 10px; margin: 3px 5px 3px 0;
margin: 16px 0; padding: 2px 8px;
border: 1px solid #d1f7d1; background-color: #fff5f6;
} color: #ff2442;
.action-item { border-radius: 12px;
margin: 10px 0; font-size: 12px;
padding-left: toldpx; }
position: relative; /* 互动 */
} .interaction {
.action-item:before { margin: 16px 0;
content: "✓"; padding: 12px;
position: absolute; background-color: #fff5f6;
left: 0; border-radius: 8px;
color: #4CAF50; text-align: center;
font-weight: bold; color: #ff2442;
} font-size: 13px;
.hashtags { font-weight: 500;
margin: 28px 0 20px; }
padding: 16px 0; /* 页脚 */
border-top: 1px solid #f0f0f0; footer {
border-bottom: 1px solid #f0f0f0; margin-top: 20px;
} padding-top: 12px;
.hashtag { border-top: 1px solid #f0f0f0;
display: inline-block; color: #bbb;
margin: 4px 6px; font-size: 11px;
color: #ff2442; text-align: center;
font-weight: 500; line-height: 1.5;
font-size: 0.95em; }
} .gen-time {
.footer { margin-top: 4px;
text-align: center; font-size: 11px;
color: #888; }
font-size: 0.85em; </style>
margin-top: 32px;
padding-top: 20px;
border-top: 1px solid #f0f0f0;
}
.emoji {
font-size: 1.1em;
margin-right: 4px;
}
.profile {
display: flex;
align-items: center;
margin-bottom: 16px;
}
.avatar {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 12px;
background-color: #f0f0f0;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
color: #ff2442;
}
.profile-info {
flex: 1;
}
.username {
font-weight: 600;
color: #333;
margin-bottom: 2px;
}
.bio {
font-size: 0.9em;
color: #666;
}
@media (max-width: 480px) {
.container {
padding: 16px 12px 32px;
}
.title {
font-size: 1.3em;
}
.thumbnail-grid {
grid-template-columns: repeat(2, 1fr);
}
.thumbnail {
height: 100px;
}
}
</style>
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="header"> <!-- 页头区域 -->
<div class="profile"> <div class="header">
<div class="avatar"></div> <h1>{{TITLE}}</h1>
<div class="profile-info">
<div class="username">宇之然 | 可持续生活指南</div>
<div class="bio">每天分享一个可执行的可持续行动 ✨</div>
</div>
</div>
<div class="title">{{TITLE}}</div>
<div class="date-tag">📅 {{DATE}} 更新</div>
</div>
<div class="image-gallery">
<img src="" alt="封面图" class="main-image">
<div class="thumbnail-grid">
<img src="" alt="图1" class="thumbnail">
<img src="" alt="图2" class="thumbnail">
<img src="" alt="图3" class="thumbnail">
<img src="" alt="图4" class="thumbnail">
<img src="" alt="图5" class="thumbnail">
<img src="" alt="图6" class="thumbnail">
</div>
</div>
<div class="content">
<!-- CONTENT -->
</div>
<div class="hashtags">
<!-- HASHTAGS -->
</div>
<div class="footer">
<p>💚 本文由宇之然AI助手生成,基于全球可持续性趋势研究</p>
<p>📊 数据经过交叉验证 | 🌍 每天更新,让可持续生活更简单</p>
<p>💬 欢迎在评论区分享你的实践经验和改进建议</p>
</div>
</div> </div>
<!-- 内容区域 -->
<div class="content">
<!-- CONTENT -->
</div>
<!-- 分类标签 -->
<div class="tags">
<!-- TAGS -->
</div>
<!-- 互动建议 -->
<div class="interaction">
<p>欢迎在评论区分享你的实践经验和改进建议!</p>
</div>
<!-- 页脚区域 -->
<footer>
<p class="gen-time">生成时间:{{GEN_TIME}}</p>
</footer>
</div>
</body> </body>
</html> </html>
+164 -130
View File
@@ -1,138 +1,172 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-CN"> <html lang="zh-CN">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{TITLE}} - {{DATE}} - 知乎专栏</title> <title>{{TITLE}} - {{DATE}} - 知乎专栏</title>
<style> <style>
body { body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.8; line-height: 1.8;
max-width: 680px; max-width: 680px;
margin: 0 auto; margin: 0 auto;
padding: 20px; padding: 20px;
color: #1a1a1a; color: #1a1a1a;
background-color: #fff; background-color: #fff;
} }
h1 { h1 {
font-size: 1.8em; font-size: 1.8em;
font-weight: 600; font-weight: 600;
margin-top: 0; margin-top: 0;
margin-bottom: 20px; margin-bottom: 20px;
color: #121212; color: #121212;
border-bottom: none; }
} h2 {
h2 { font-size: 1.4em;
font-size: 1.4em; font-weight: 600;
font-weight: 600; margin-top: 32px;
margin-top: 32px; margin-bottom: 16px;
margin-bottom: 16px; color: #262626;
color: #262626; }
} h3 {
h3 { font-size: 1.2em;
font-size: 1.2em; font-weight: 600;
font-weight: 600; margin-top: 24px;
margin-top: 24px; margin-bottom: 12px;
margin-bottom: 12px; color: #595959;
color: #595959; }
} p {
p { margin: 16px 0;
margin: 16px 0; color: #404040;
color: #404040; text-align: justify;
text-align: justify; }
} ul, ol {
ul, ol { padding-left: 24px;
padding-left: 24px; margin: 16px 0;
margin: 16px 0; }
} li {
li { margin: 8px 0;
margin: 8px 0; }
} img {
img { max-width: 100%;
max-width: 100%; height: auto;
height: auto; margin: 24px 0;
margin: 24px 0; border-radius: 4px;
border-radius: 4px; border: 1px solid #f0f0f0;
border: 1px solid #f0f0f0; }
} blockquote {
blockquote { margin: 24px 0;
margin: 24px 0; padding: 12px 20px;
padding:"? border-left: 4px solid #0084ff;
background-color: #f6f9ff;
12px 20px; color: #595959;
border-left: 4px solid #0084ff; }
background-color: #f6f9ff; /* 页头样式 */
color: #595959; .header {
} margin-bottom: 32px;
.tags { border-bottom: 1px solid #f0f0f0;
margin: 20px 0; padding-bottom: 20px;
padding: 12px 0; }
border-top: 1px solid #f0f0f0; .author-info {
border-bottom: 1px solid #f0f0f0; display: flex;
} justify-content: space-between;
.tag { align-items: center;
display: inline-block; margin-bottom: 12px;
margin: 4px 8px 4px 0; font-size: 0.9em;
padding: 4px 12px; color: #8590a6;
background-color: #f6f9ff; }
color: #0084ff; .author {
border-radius: 12px; font-weight: 500;
font-size: 0.9em; }
} .update-time {
.data-highlight { color: #8590a6;
background-color: #f0f9ff; }
padding: 12px 16px; /* 内容样式 */
border-radius: 6px; .content {
margin: 16px 0; margin-bottom: 24px;
border-left: 3px solid #1890ff; }
} /* 标签样式 */
.summary { .tags {
font-size: 1.1em; margin: 24px 0;
font-weight: 500; padding: 16px 0;
color: #595959; border-top: 1px solid #f0f0f0;
margin-bottom: 24px; border-bottom: 1px solid #f0f0f0;
} }
.author { .tag {
color: #8590a6; display: inline-block;
font-size: 0.9em; margin: 4px 8px 4px 0;
margin-bottom: 24px; padding: 4px 12px;
} background-color: #f6f9ff;
footer { color: #0084ff;
margin-top: 32px; border-radius: 12px;
padding-top: 20px; font-size: 0.9em;
border-top: 1px solid #f0f0f0; }
color: #8590a6; /* 互动建议 */
font-size: 0.85em; .interaction {
text-align: center; margin: 24px 0;
} padding: 16px;
@media (max-width: 600px) { background-color: #f6f9ff;
body { border-radius: 6px;
padding: 16px; text-align: center;
line-height: 1.6; color: #0084ff;
} font-weight: 500;
h1 { font-size: 1.5em; } }
h2 { font-size: 1.3em; } /* 页脚样式 */
} footer {
</style> margin-top: 32px;
padding-top: 20px;
border-top: 1px solid #f0f0f0;
color: #8590a6;
font-size: 0.85em;
text-align: center;
}
.gen-time {
margin-top: 8px;
font-size: 0.9em;
}
@media (max-width: 600px) {
body {
padding: 16px;
line-height: 1.6;
}
h1 {
font-size: 1.5em;
}
h2 {
font-size: 1.3em;
}
.author-info {
flex-direction: column;
align-items: flex-start;
gap: 4px;
}
}
</style>
</head> </head>
<body> <body>
<div class="author">作者:宇之然 | 更新日期:{{DATE}}</div> <!-- 页头区域 -->
<div class="header">
<h1>{{TITLE}}</h1> <h1>{{TITLE}}</h1>
</div>
<div class="summary">
<p>本文基于全球可持续性趋势研究,结合中国现实,提供可执行的行动建议。数据来源可靠,观点客观中立。</p> <!-- 内容区域(不含标题) -->
</div> <div class="content">
<!-- CONTENT --> <!-- CONTENT -->
</div>
<div class="tags">
<!-- TAGS --> <!-- 分类标签 -->
</div> <div class="tags">
<!-- TAGS -->
<footer> </div>
<p>本文由宇之然AI助手生成,基于全球开源数据和研究成果</p>
<p>欢迎在评论区分享你的实践经验和改进建议</p> <!-- 互动建议 -->
</footer> <div class="interaction">
<p>欢迎在评论区分享你的实践经验和改进建议!</p>
</div>
<!-- 页脚区域 -->
<footer>
<p class="gen-time">生成时间:{{GEN_TIME}}</p>
</footer>
</body> </body>
</html> </html>
+1 -1
View File
@@ -58,7 +58,7 @@ if (!editor) {
} }
// 上传封面图(如需自动上传) // 上传封面图(如需自动上传)
const coverPath = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/publishing/images/05-封面图.png"; const coverPath = "/root/openclaw-workspace/projects/yu-zhi-ran/content/publishing/images/05-封面图.png";
console.log("📸 封面上传:请手动点击编辑器图片按钮,选择封面图文件"); console.log("📸 封面上传:请手动点击编辑器图片按钮,选择封面图文件");
console.log(" 文件路径:", coverPath); console.log(" 文件路径:", coverPath);
+1 -1
View File
@@ -313,7 +313,7 @@ if (!editor) {
} }
// 提示封面上传 // 提示封面上传
const coverPath = "/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/content/publishing/images/05-封面图.png"; const coverPath = "/root/openclaw-workspace/projects/yu-zhi-ran/content/publishing/images/05-封面图.png";
console.log("\n📸 封面上传:"); console.log("\n📸 封面上传:");
console.log(" 1. 点击编辑器工具栏的图片按钮(🖼️)"); console.log(" 1. 点击编辑器工具栏的图片按钮(🖼️)");
console.log(" 2. 选择 '上传图片'"); console.log(" 2. 选择 '上传图片'");
+4 -3
View File
@@ -30,10 +30,11 @@
## 内容领域优先级 ## 内容领域优先级
1. **科技与人文交叉** (40%) 1. **科技与人文交叉** (35%)
- AI伦理与应用思考 - AI伦理与应用思考
- 数字化生活反思 - 数字化生活反思
- 科技如何服务人性 - 科技如何服务人性
- **教育科技**(家庭AI教育、亲子项目)
2. **可持续生活** (30%) 2. **可持续生活** (30%)
- 自然与科技平衡 - 自然与科技平衡
@@ -45,8 +46,8 @@
- 个人知识管理 - 个人知识管理
- 技能迭代与适应 - 技能迭代与适应
4. **社会观察** (10%) 4. **社会观察** (15%)
- 文化现象解读 - 教育现象解读
- 生活方式变迁 - 生活方式变迁
- 未来趋势预判 - 未来趋势预判
+1 -1
View File
@@ -5,7 +5,7 @@
### 阶段1:选题决策(1-2小时) ### 阶段1:选题决策(1-2小时)
- [ ] 从选题库选择或提出新选题 - [ ] 从选题库选择或提出新选题
- [ ] 使用"选题评估矩阵"打分(>40分才执行) - [ ] 使用"选题评估矩阵"打分(>40分才执行)
- [ ] 确认领域归属(科技/自然/工作/人文) - [ ] 确认领域归属(科技/自然/工作/人文/教育
- [ ] 确定平台首发(知乎为主) - [ ] 确定平台首发(知乎为主)
- [ ] 设定预期目标(阅读量、互动等) - [ ] 设定预期目标(阅读量、互动等)
+12
View File
@@ -0,0 +1,12 @@
# LLM API 调用配置
# 并发控制规则
# - 最大并发数: 2
# - 每分钟最大调用次数: 60
concurrency:
max_concurrent: 2
max_requests_per_minute: 60
# 串行调用(严禁并发)- 已废弃
# 旧规则: 串行调用, ≤30次/分钟
# 新规则: 并发2, ≤60次/分钟 (2026-05-16 更新)
+96 -66
View File
@@ -1,85 +1,115 @@
# 信息源配置(可持续性相关 # 信息源配置(AI与科技人文领域
# 注意:仅保留国内可稳定访问的源,移除被墙/下线的源
sustainability_sources: sustainability_sources:
# 中文信息源(国内可持续性实践)优先使用 # 中文RSS源(国内媒体,可稳定访问)
chinese: rss:
- name: "新华网-环保频道" - name: "36氪-最新"
type: "rss" type: "rss"
url: "http://www.xinhuanet.com/energy/rss.xml" url: "https://36kr.com/feed"
update_frequency: "daily" update_frequency: "daily"
credibility: "high" credibility: "high"
focus: "国内环保政策" focus: "科技商业、AI行业"
- name: "人民网-生态环境频道" keywords:
- "AI"
- "人工智能"
- "大模型"
- "科技"
- "数字化"
- "创业"
- name: "少数派"
type: "rss" type: "rss"
url: "http://env.people.com.cn/rss/150323.xml" url: "https://sspai.com/feed"
update_frequency: "daily"
credibility: "medium"
focus: "科技数码、效率工具"
keywords:
- "AI"
- "效率"
- "工具"
- "数字"
- "智能"
- "工作流"
- name: "机器之心"
type: "rss"
url: "https://jiqizhixin.com/rss"
update_frequency: "daily" update_frequency: "daily"
credibility: "high" credibility: "high"
focus: "生态环境新闻" focus: "AI学术前沿、论文解读"
- name: "中国环境新闻" keywords:
type: "web" - "AI"
base_url: "http://www.cenews.com.cn/" - "论文"
update_frequency: "daily" - "大模型"
credibility: "high" - "算法"
focus: "环境新闻" - "研究"
- name: "国家发改委-低碳政策" - "学术"
type: "web"
base_url: "https://www.ndrc.gov.cn"
credibility: "high"
focus: "政策动态"
# 备用全球信息源(API替代RSS # 搜索引擎采集(通过Bing中文搜索抓取热点
english_api: web_search:
- name: "UN Environment Programme" - name: "AI前沿资讯搜索"
type: "api" type: "web_search"
url: "https://www.unep.org/news-and-stories" query: "AI 人工智能 大模型 前沿 突破 2026"
update_frequency: "daily"
credibility: "medium"
focus: "AI行业动态、技术突破"
- name: "AI工具搜索"
type: "web_search"
query: "AI工具 效率提升 AI工作流 实用 2026"
update_frequency: "daily"
credibility: "medium"
focus: "AI工具评测、效率方法"
- name: "AI职场搜索"
type: "web_search"
query: "AI 裁员 职业转型 AI技能 远程工作 2026"
update_frequency: "daily"
credibility: "medium"
focus: "AI对就业影响、职业转型"
- name: "AI生活化搜索"
type: "web_search"
query: "AI陪伴 AI生活助手 AI心理咨询 智能体 2026"
update_frequency: "daily"
credibility: "medium"
focus: "AI人格化、生活场景应用"
- name: "科技人文搜索"
type: "web_search"
query: "AI伦理 数字生活 科技反思 人机关系 2026"
update_frequency: "daily"
credibility: "medium"
focus: "AI伦理、科技人文反思"
# ── 差异化源(与通用AI媒体形成区分)──
- name: "AI学术论文搜索"
type: "web_search"
query: "arXiv 论文 AI 最新研究 大模型 2026"
update_frequency: "weekly" update_frequency: "weekly"
credibility: "high" credibility: "high"
focus: "全球环境政策" focus: "AI学术前沿、论文中文解读"
- name: "World Economic Forum Sustainability" - name: "独立开发者搜索"
type: "api" type: "web_search"
url: "https://www.weforum.org/topics/sustainability/" query: "独立开发者 AI产品 一人公司 出海工具 indie hacking 2026"
update_frequency: "weekly" update_frequency: "daily"
credibility: "medium"
focus: "独立开发者生态、小众AI产品"
- name: "行业数据报告搜索"
type: "web_search"
query: "AI行业报告 数据统计 市场分析 AI应用渗透率 2026"
update_frequency: "daily"
credibility: "high" credibility: "high"
focus: "可持续商业" focus: "行业数据、市场报告、AI应用统计"
- name: "AI产品动态搜索"
type: "web_search"
query: "AI产品发布 更新 changelog 新功能 OpenAI Claude 2026"
update_frequency: "daily"
credibility: "medium"
focus: "AI产品迭代、功能更新"
# 本地案例库(保底数据源) # 本地案例库(保底数据源)
local: local:
- name: "宇之然本地案例库" - name: "宇之然AI案例库"
type: "local" type: "local"
file: "strategy/全球案例数据库-v1.md" file: "automation/data/ai_cases.json"
update_frequency: "weekly" update_frequency: "weekly"
credibility: "medium" credibility: "medium"
focus: "全球-本土案例" focus: "AI行业案例"
- name: "历史选题库"
type: "local"
file: "automation/data/sustainability_topics.json"
update_frequency: "daily"
credibility: "medium"
focus: "复用已有选题"
# 案例验证要求
validation:
require_at_least_2_sources: true # 至少2个来源交叉验证
prefer_official_data: true # 优先政府/官方数据
min_data_points: 3 # 最少3个数据点
# 选题优先级权重
topic_priority:
audience_match: 0.3 # 受众匹配度(26-35岁城市焦虑青年)
data_availability: 0.25 # 数据可得性
uniqueness: 0.2 # 独特性(避免同质化)
executability: 0.15 # 可执行性(有MVP行动)
brand_fit: 0.1 # 品牌契合度(科技向善+回归本真)
# 可持续性子领域分类
sustainability_categories:
- "城市农业"
- "零浪费生活"
- "低碳出行"
- "循环消费"
- "能源效率"
- "可持续饮食"
- "环保科技产品"
# 内容合规检查清单 # 内容合规检查清单
compliance: compliance:
@@ -92,5 +122,5 @@ compliance:
required: required:
- "至少3个可靠引用" - "至少3个可靠引用"
- "数据标注来源" - "数据标注来源"
- "包含MVP行动" - "包含可操作建议"
- "中性客观语气" - "中性客观语气"

Some files were not shown because too many files have changed in this diff Show More