Imported from llf159/lianghua-rs (
crates/lianghua-scoring/AGENTS.md). Install upstream withnpx skills add llf159/lianghua-rs --skill lianghua-scoring. Copyright stays with the author.
组件取舍
后续 agents 修改本组件时请继续维护本文件。
-
本 crate 负责评分规则执行、场景计算、评分结果构造和规则缓存。
-
跨组件评分类型从
lianghua-model导入;结果数据库操作从lianghua-data::data::scoring_store导入。 -
不得重新创建混合类型、持久化和计算职责的
scoring_data模块或旧路径兼容导出。 -
scoring 可以依赖 data 与 model,但不得被 data 或 model 反向依赖。
-
只运行
cargo test -p lianghua-scoring,不要因此触发全 workspace 测试。 -
评分输入批次统一为 32 股,写库队列只缓存 2 批:保留 Rayon 并行和批量读取,但避免每个工作线程同时持有 128 股历史明细,写库落后时及时反压。内存返回接口仍按调用契约保留完整结果。
-
问题:评分批次曾为每 32 股重复打开行情库、筹码库和相似榜结果库,并重复执行筹码库初始化;解决方案选择:每个 Rayon 工作线程复用一组只读连接,筹码字段注入器只检查现有库而不执行建表迁移;解释:连接数随工作线程数而非股票批次数增长,同时避免并行读路径争抢筹码库 DDL 锁,筹码库维护仍由 data 组件的显式计算入口负责。
-
问题:评分注入筹码字段和相似榜排名曾按股票各执行一次 SQL;解决方案选择:沿用 32 股评分批次,一次查询整批股票的公共日期范围并按代码、日期回填;解释:将两类附加字段查询从每股两次降为每批两次,不扩大既定批次内存上限,现有复合索引仍覆盖过滤条件。
-
问题:临时规则回测在进入 backtest 前就把每次规则触发物化为包含三段独立
String的ScoreDetails,长区间会在评分阶段先耗尽内存;解决方案选择:RuleBacktest模式只生成引用总榜行与规则序号的紧凑数值行;解释:保留一次全市场评分与排名,移除触发次数乘以字符串分配的主峰值。 -
问题:组合规则曾以
points_by_hits[命中数] != 0判定是否触发,导致基础分为 0、只有条件加分的规则永远不触发,生产策略把+1基础分改为显式基础条件后即失效;解决方案选择:只要命中数大于 0 就触发,基础分允许为 0,条件 bonus 照常累加;解释:命中数基础分无法区分命中了哪条条件,显式条件才能表达“仅波动档位给 +1、风险档位不倒贴基础分”,因此触发判定必须与基础分脱钩。