Yuzhiran Dev
00431c827b
feat: add org_id to ContentCalendar and ContentTask models
2026-06-17 09:02:54 +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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
3dce54b359
Fix writer max_tokens (500→1000) for titles/tags, fix preview scrollbar height
2026-05-19 07:44:56 +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
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
f2d778b5ce
fix: 脚本独立运行时缺少init_db(),导致Topic表org_id列不存在,创作按钮点击后生成文章失败
2026-05-17 15:37:24 +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
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
233e23016c
feat: 内容数据迁移至数据库,合规审查全链路打通
...
- 文章 HTML 存储从文件系统迁移至 articles 表,删除 releases 目录
- 合规审查从 DB 读取 HTML,审查结果写回 DB,通过后自动推进至待发布
- 新增 todayCount 筛选按钮,与系统概览统计数据一致
- 全屏预览修复:提升 z-index 超过侧边栏,添加退出全屏/关闭按钮
- 统一 '优化' → '审查' 命名,消除前后端术语不一致
- 调度器创作完成后自动触发审查(生成 → 审查 → 待发布)
- 清理旧备份/调试文件、过期大纲和研究笔记
2026-05-13 17:33:56 +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
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
601fc5d239
refactor: remove publisher, add auto DB sync, clean backups, update docs
2026-05-01 10:05:50 +08:00
lt
e1ba31afda
版本1.0.4 - 发布前准备
...
- 修复system.py缩进错误
- 优化前端页面样式(待重构)
- 改进API接口结构
- 完善文档和自动化脚本
- 平台基本功能稳定运行
2026-04-29 09:32:43 +08:00
lt
d63074be71
chore: 更新项目路径到新工作区
...
- 所有自动化脚本、测试文件路径从旧工作区迁移到 /root/openclaw-workspace/projects/yu-zhi-ran/
- 保持项目独立于 OpenClaw 工作区管理
- 后端 run.sh 路径更新
2026-04-27 18:49:32 +08:00