## Why 当前热点探测流程存在两个问题: 1. **数据流断裂**:`analyze_and_suggest` 调用 LLM 分析出的结构化数据(热门选题列表、推荐建议)在渲染成 Markdown 后即被丢弃,后续生成环节拿到的 `topic_from_hotspot` 仍是原始搜索关键词,与分析结论完全脱节;分析结果也从未传入 `TopicEngine` 评分体系,导致智能选题引擎无热点输入可用。 2. **完全依赖手动触发**:热点搜索和分析没有自动化机制,需要用户每次手动点击「搜索」和「AI 分析」才能获取最新热点;调度器已具备定时任务能力(`services/scheduler.py`),但从未被用于热点采集,导致系统在无人操作时完全感知不到当前热点变化。 ## What Changes - **保留结构化分析结果**:`analyze_and_suggest` 将 LLM 返回的 `dict` 缓存至模块级状态,UI 层仍显示 Markdown,但结构数据可供后续环节使用 - **修复选题传递逻辑**:将"推荐选题"下拉列表绑定到解析后的 `suggestions`,用户选择某条建议后 `topic_from_hotspot` 填入该建议标题,而非搜索关键词 - **扩大生成参考上下文**:`generate_from_hotspot` 同时接收结构化分析摘要 + 原始搜索片段,替换现有的粗暴 `[:2000]` 截断 - **接入 TopicEngine**:分析完成后将 `hotspot_data` 注入 `TopicEngine.recommend_topics()`,使智能选题 Tab 可获得热点加权推荐 - **自动采集热点**:在调度器中新增定时热点采集任务,按配置的关键词列表和间隔自动执行「搜索 → LLM 分析 → 更新状态缓存」全流程,结果写入 `_last_analysis`,UI 打开时可直接读取最新数据 ## Capabilities ### New Capabilities - `hotspot-analysis-state`:在 `services/hotspot.py` 中维护会话级结构化分析状态(`_last_analysis`),供同模块其他函数读取;提供 `get_last_analysis()` / `set_last_analysis()` 线程安全存取接口 - `hotspot-topic-selector`:在热点探测 UI 中新增"选题下拉"组件,由分析结果的 `suggestions` 动态填充,选中后自动写入 `topic_from_hotspot` - `hotspot-engine-bridge`:新增 `feed_hotspot_to_engine(hotspot_data, topic_engine)` 函数,将热点分析结果注入 `TopicEngine`,使其 `recommend_topics()` 获得实时热点评分 - `hotspot-auto-collector`:在调度器中新增 `schedule_hotspot_collection(keywords, interval_hours, mcp_url, llm_model)` 函数,按间隔自动执行热点搜索与 LLM 分析,结果写入 `hotspot-analysis-state`;配置项存储于 `config.json` 的 `hotspot_auto_collect` 节点(`enabled`、`keywords`、`interval_hours`) ### Modified Capabilities - `services-hotspot`:`analyze_and_suggest` 返回值新增结构化分析状态的副作用写入;`generate_from_hotspot` 签名扩展,接受可选的 `analysis_summary` 参数用于增强生成上下文 ## Impact - **代码**:`services/hotspot.py`(主要改动)、`services/scheduler.py`(新增定时采集任务)、`ui/app.py`(新增下拉组件绑定)、`services/topic_engine.py`(调用方新增 hotspot 输入)、`services/config_manager.py`(新增 `hotspot_auto_collect` 配置节点) - **API**:`generate_from_hotspot` 函数签名向后兼容(新增可选参数) - **依赖**:无新增外部依赖 - **数据**:分析状态为进程内内存缓存,不持久化;自动采集配置持久化至 `config.json`