Skip to content

feat: Web 控制面板支持主题词、订阅与 AI 配置管理(含推理强度) - #1207

Open
siliscar wants to merge 1 commit into
sansan0:masterfrom
siliscar:feat/webui-config-management
Open

feat: Web 控制面板支持主题词、订阅与 AI 配置管理(含推理强度)#1207
siliscar wants to merge 1 commit into
sansan0:masterfrom
siliscar:feat/webui-config-management

Conversation

@siliscar

Copy link
Copy Markdown

功能概述

为 Web 控制面板(报告页顶部工具栏)新增「⚙️ 配置」弹窗,支持在浏览器中管理三类核心配置,无需进容器改文件或重建镜像。

1. 主题词

  • 编辑 frequency_words.txt 等效全文,支持正则 /.../=> 别名[组名]+必须词!排除词@数量[GLOBAL_FILTER] 全部既有语法
  • 实时显示解析出的词组数量与当前来源徽标(面板配置 / 配置文件)
  • 「恢复文件配置」可随时放弃面板修改

2. 订阅管理(RSS)

  • RSS 总开关 + 订阅源列表的增删改:启用开关、名称、地址、保留天数(max_age_days
  • 保存时校验 URL 格式、id 唯一性;id 留空自动生成(中文名取 URL 主机名,冲突追加序号)

3. AI 配置

  • API Key(密码框,回显仅脱敏形式 sk-***abcd;输入框为空时点「显示」可查看已保存密钥;留空保存表示保持不变)
  • 模型(LiteLLM 格式)、API 地址
  • 推理强度 reasoning_effort(minimal / low / medium / high,留空不发送):
    • openai/ 前缀模型(多为自定义兼容端点)通过 extra_body 原样透传,绕过 litellm 对自定义模型名的参数白名单校验(否则抛 UnsupportedParamsError
    • 其他提供商(anthropic 等)走顶层参数,保留 litellm 跨商参数映射

实现说明

  • 配置持久化到 output/.webui.json overlay,运行时覆盖文件配置。优先级:面板 > 环境变量 > config.yaml
  • 不改写 config.yaml / frequency_words.txt 原文件及其注释;Docker 中 config/ 只读挂载亦可生效(overlay 写入可写的 output/ 卷)
  • 沿用既有 overlay 机制(webui_settings.py 原有的 schedule / ai_analysis 开关),扩展 frequency_wordsrssai 三个键及校验
  • 爬虫输出带序号进度并 flush=True,控制面板据此实时解析进度条
  • Docker:manage.py / entrypoint.sh 启动 trendradar.web_control 控制面板(替代原纯静态 http.server),先起面板再执行 IMMEDIATE_RUN,避免首次抓取阻塞访问

接口

方法 路径 说明
GET/POST/DELETE /api/topics 主题词读取/保存/恢复文件
GET/POST/DELETE /api/feeds RSS 订阅读取/保存/恢复文件
GET/POST/DELETE /api/ai AI 配置读取/保存/恢复;?reveal=1 返回明文密钥(供「显示」按钮)

明文密钥仅在显式 reveal=1 请求中返回,其余响应只含脱敏形式。

测试

  • 新增 48 个单元测试:overlay 校验与归一化、HTTP API(含密钥不泄露、留空保留、非法输入 400)、AI 客户端参数拼装(extra_body / 顶层两条路径、extra_params 合并优先级)
  • Docker 环境实测:三标签页切换、配置保存后容器内 load_config 正确应用、真实 AI 调用携带 reasoning_effort=high 成功返回

- 报告页工具栏新增「配置」弹窗,含三个标签页:
  - 主题词:编辑关注词全文,支持正则/别名/组名/必须词/排除词等全部语法,实时统计词组数
  - 订阅管理:RSS 源增删改、启用开关、保留天数,含 URL/重复 id 校验与 id 自动生成
  - AI 配置:API Key(脱敏回显、点「显示」可查看已存密钥)、模型、API 地址、推理强度
- 配置持久化到 output/.webui.json overlay,运行时覆盖文件配置
  (优先级:面板 > 环境变量 > config.yaml),config 只读挂载亦可生效,
  不改写 config.yaml / frequency_words.txt 原文件及其注释
- 新增 ai.reasoning_effort 推理强度:openai/ 前缀模型走 extra_body
  原样透传(绕过 litellm 对自定义模型名的参数白名单校验),
  其他提供商走顶层参数以保留 litellm 跨商映射;留空不发送
- 接通此前声明但未生效的 ai.extra_params(显式参数优先)
- 爬虫输出带序号进度并 flush,供控制面板实时解析进度条
- Docker:manage.py/entrypoint 启动 web_control 控制面板(原为纯静态 http.server)
- 单元测试覆盖 overlay 校验、HTTP API、参数拼装(48 用例)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant