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