Commit Graph
7 Commits
Author SHA1 Message Date
kevin9327 a714d70f83 fix(rotation): AI 轮动分析的大盘背景不再把指数涨跌幅放大 100 倍
「概念分析/行业分析 → AI 轮动分析」生成的报告里, 大盘部分写成「上证指数
上涨 123%」「深证成指下跌 45%」, 第 5 节「结合大盘」的结论也跟着跑偏。

_build_market_block 用 _fmt_pct 渲染指数涨跌幅, 而 _fmt_pct 是给概念/行业
涨幅(小数口径)写的, 会 *100。但 overview["indices"][].change_pct 是百分数
口径 (CONTRIBUTING §3.1): quote_service._build_index_quotes 的注释写明
"统一转成百分比输出", DB 兜底的 _index_quotes 同样 change_amount/pc*100。
于是 1.23 被渲染成 +123.00% 送进提示词。

新增 _fmt_index_pct 按百分数口径直接格式化, 与 market_recap._build_indices_block
(同一份 overview, 不 *100) 和 abnormal_moves._bench_rt_pct (消费前显式 /100)
的口径对齐; 概念/行业涨幅仍走原来的 _fmt_pct。
2026-09-10 08:04:48 +09:00
kevin9327 2266ecc1d8 fix(rotation): 轮动信号缺失日按日期归位补齐
_compute_rotation_signals 把缺失日的 (999, 0.0) 占位一律追加到序列末尾,
而下游按 ranks[0]=最早日 / ranks[-1]=最新日 解读。概念在部分日期缺席时
(build_rps_rotation 已过滤掉当日无有效 avg_pct 的成员) 实际排名被压到左端、
占位落到右端, 只在最近几日上榜的新晋概念因此被判成退潮。

改为按日期归位补齐, 并补充 tests/test_concept_rotation_signals.py 覆盖
早期缺席 / 最近缺席两个方向。
2026-09-09 07:10:35 +09:00
yushenglin 00b3492414 fix(ai): 优化分析关注重点与正文输出 2026-09-04 12:03:06 +08:00
shy3130 0ee3aa8f1f fix(ai): 分析类调用放开 max_tokens 限制 — 修复推理模型正文 0 字失败
根因(实测钉死): deepseek-v4-pro 等推理模型把思考 token 计入
max_tokens 预算。个股分析真实调用(62KB prompt, max_tokens=4500):
usage completion=4500 全是 reasoning, finish=length, 正文 0 字,
流"正常"结束 → 前端兜底报「分析未返回内容」→ 表现为"经常失败"
(推理长度随机, 逼近 4500 即失败)。与 180s 超时无关(实际 65s 结束)。

改动:
- ai_provider: generate/stream 的 max_tokens 支持 None=不传该参数,
  输出上限交给服务端默认; _openai_kwargs None 时省略; codex 提示词
  None 时跳过长度约束行
- 四个分析器(个股/复盘/财务/概念轮动)改传 max_tokens=None;
  新增空正文守卫: 流结束但 0 个 delta → 明确报错+日志(原先静默,
  backend.log 无痕迹无法排查)。策略标题生成(max_tokens=8)等小任务
  保持原限制

对照实测(真实 62KB prompt): 不传 → finish=stop, 推理 3311 token
+正文 2407 字, 59s; max_tokens=16000 → 同样成功但推理撒欢 6239
token/93s — 不限制即最优。

验证: 新增 kwargs/codex 单测, ai_provider 21 通过, 相关 174 通过;
线上接口复测: 修复前 0 delta 直接 done, 修复后 1682 delta/2467 字
正常流式; ruff 相对 HEAD 无新增。
2026-08-17 17:47:46 +08:00
shy3130 c9f01ba288 feat: 行业轮动分析(参数化复用概念版) + 扩展数据列数字格式化
行业轮动分析(完全对齐概念版)
- 概念轮动逻辑参数化支持 industry 维度, 一套代码服务两个页面(复用 _dimension_field)
- 后端 build_rps_rotation/analyze_rotation_stream 加 kind 参数; 缓存按 kind+level 隔离
- 行业层级: 1/2/3 级可切换, 默认 2 级(与 _dimension_rank 口径一致)
  · 原始 257 个 3 级行业 → level=2 合并成 90 个
- AI 分析 prompt 动态化(概念/行业措辞), _SYSTEM_PROMPT 改为 _build_system_prompt(kind)
- 前端 RpsRotationDialog 加 kind prop; industry 显示层级选择器(1/2/3级默认2)
- IndustryAnalysis 加「涨幅RPS轮动分析」按钮 + dialog(kind=industry)
- ConceptAnalysis 不动(默认 kind=concept 向后兼容)

扩展数据列数字格式化(自选/策略列表)
- 列配置新增 3 项(仅数字类型字段): 千分位逗号 / 单位换算(万/亿/自动) / 小数位
- 新增 formatExtNumber 共享格式化函数(千分位+换算+小数位, 去尾零)
- Watchlist + ScreenerTable 的 number 渲染接 formatExtNumber
- ext source 加 fieldType; 旧列无 fieldType 时默认显示数字配置(放宽判断)
- ExtColumnDisplayConfig 加 thousandSeparator/unitConvert/unitDecimals 字段

验证
- 后端 583 passed; 行业映射实测 257→90(level=2)
- 数字格式化实测: 千分位 1,234,567 / 万换算 123.46万 / 自动 等均正确
- tsc + pnpm build 通过
2026-08-02 19:18:07 +08:00
wshyandshy3130 697ff2a181 fix(compliance): reinforce research-only boundaries (#108)
Co-authored-by: shy3130 <shy3130@users.noreply.github.com>
2026-07-12 22:42:38 +08:00
shy3130 255688fab4 feat: 概念涨幅轮动 AI 分析
- 新增 concept_rotation_analyzer: 从涨幅排名矩阵预计算轮动信号
  (主线/新晋/退潮/机构vs游资), 结合大盘背景生成分析报告
- rps API 加 /rotation-analyze 流式端点 (NDJSON)
- 轮动对话框: AI 占位替换为流式 Markdown 报告区 + 自动滚动
- 删除搜索框, 新增选中概念排名行 (前10红/后10绿)
2026-07-02 17:22:16 +08:00