akg-factor-bridge/docs/交接_2026-09-07.md

321 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 交接:主观量化系统 09-03 到 09-07 这一段
写给下一个接手的人。读完这份就能接着干,不用回翻对话。
范围是 2026-09-03 方案批准之后到 09-07 上午。方案正本在同目录的
《主观量化系统方案_2026-09-03.md》逐条决定在《复盘决定台账.md》现记到第 34 条。
这份文件只讲这一段做了什么、现在是什么状态、下一步该干什么。
---
## 零、一句话现状
四层链路数据基座、选股系统、PMS、择时决策系统已经端到端接通
研究结论第一次真正走到了人眼前。但**判收标准(一致性检查表)只核完五行,且周末组合被对账清零、从零开始**
接手先读第五节与台账 034。
---
## 一、这一段做完的六件事
### 1.1 候选卡加了论断质量标注
**解决什么问题。** 同一张卡上有个双标:吸筹评分超过三十个交易日就判陈旧,
而研报论断此前只有"披露日不晚于数据日"这一个上界,永不过期。
技术侧的证据会过期、研究侧的不会,两类证据在卡上看着一样新。
**做了什么。** 四项提示:论断过了多少天、是不是全部出自同一份研报、
有几条被标为疑似误抽、有几条处于未结的方向分歧。四项都只提示,不参与三门槛判决。
陈旧线定为 90 个自然日(配置项 `LOGIC_STALE_DAYS`),一次定死,不按复盘收益读数回调。
**一处实现纪律。** 质量画像必须在按票截断之前算。截断后每票只剩最近三条,
"这票一共有几份不同来源"就统计不出来了。单测里专门有一条钉住这件事。
**实测09-04 全市场3,767 只票)。** 701 只带论断;陈旧度中位 147 天,
超过 90 天的 478 只68%),超过一年的 39 只372 只带多条论断,
其中 82 只22%全部出自同一份研报96 只带疑似误抽标记共 264 条。
### 1.2 逻辑状态四态写完并接进计划
**它回答什么。** 不判断"这条产业逻辑对不对"——那是研究员的活。
只判断支撑它的证据还在不在:预测在不在下修、覆盖在不在收缩、有没有出现方向相反的论断。
**四路证据。** 甲路研报论断(方向受控必填,两个窗口:新材料窗口决定向好、
陈旧线决定还算不算数)、乙路产业研判(判采信倾向这个受控四值的迁移,不判自由文本)、
丙路券商行动(等长窗口的每股收益预测中位数与覆盖机构数)、丁路公司事件(无数据源,
恒出缺失,但照样记名——缺失要让人看得见系统缺的是什么)。
**一条设计取舍。** 向好判的是"变好了",不是"现在是好的"。所以甲路要求最近三十天里
有新的利好论断,乙路要求采信倾向发生迁移,一直偏多的主题归平稳。
不这样的话逻辑强化会变得到处都是,也就不再说明任何事。
**与候选卡三态是正交两维,不合并。** 候选卡回答"今天要不要买",是当日无状态重算;
四态回答"支撑它的研究证据还在不在",是跨日跟踪。收敛规则单调:逻辑强化只能提前卡内序、
永远不升判决;逻辑存疑只能改分流通道、不能把仅展示变成可执行。
**测试守的是这一条。** 四个状态乘三个判决十二种组合逐个扫过,判决一次都没被四态动过。
**实测改了一处设计。** 首跑六只判为逻辑存疑的票里有五只,触发是覆盖机构从三家减到两家——
一家机构那两周没发报告就构成 33% 的收缩。加基数门槛(前窗口至少五家)后只剩一只。
### 1.3 环节评析:从没跑过到每工作日自动跑
**背景。** 传导扫描每早指向的是环节,而已有的产业级评析只覆盖八个人工注册的主题,
两套名字不在一个命名空间,交集为零。
**一个此前没人知道的事实。** 这个任务在 09-04 之前**一次都没跑过**——
它被路由到一条独立队列,而消费这条队列的容器 09-04 才在配置里定义、从未创建。
**材料口径是关键。** 不是按环节名去命中论断(那样十六个环节里只有四个够料),
而是照产业级那套:先拿成员公司的代码与公司名,再回头去论断里捞。按这个口径十六个全部够料。
**代价如实写在提示词与函数说明里。** 九个环节的材料一条都没直接命中环节名,
结论本质是成员公司论断的加总。提示词要求模型只对环节整体下判断、不外推到个股。
**踩过的坑。** 首跑五个失败四个。原因是这个档挂的是推理型模型,
推理和答案共用同一个输出额度;实测推理长度 3,647 到 25,535 个字符,
而额度只有 8192推理还没写完就见底。额度提到 32768 后零失败。
同一个坑在主题页旁批、热点扫描、传导旁批三处也存在(都写着 4096
日志里查到近三天有 5 次额度耗尽,一并修了。
**定时。** 基座机 crontab北京时间 20:30那台机器走世界时表里写的是 12:30
装完在最简环境下实跑验证过,不是只看写法。
### 1.4 给人看的文字全面重写(四批)
起因是页面上出现"选股系统判为仅展示不出提议门槛未过started"。
`started` 是门槛在代码里的变量名,`SELL` 是枚举值,两者都只该在系统之间传递。
| 批次 | 范围 | 内容 |
|---|---|---|
| 一 | 选股系统候选卡 | 预期空间、传导那句、论断出处的 36 位编号、ST 门槛没文案掉进兜底 |
| 二 | PMS 后端 | 规则闸六句、仓位约束六句、资金四句、计划取数两句 |
| 三 | PMS 页面 | 操作日志印函数名、冻结原因漏网、账本打整个字典等九处 |
| 四 | 计划文本与周报 | 环境标签、表头全译、导读重写 |
**一条必须守住的纪律。** 那些大写判据码是承重的:账本靠它取去重键、
命令进度靠它做原因聚类。2026-07-29 账本被同一条指令按分钟灌满,病根就是去重键失效。
**所以码留在句首,只能在显示层剥**。后端与前端各一份实现,注释互相指认。
**页面此前完全没有测试**,所以第三批先写守卫再改。它比人工照清单改可靠——
多抓出四处清单里没有的。守卫现在盯着 11 个枚举字段,已登记进测试入口与哨兵清单。
**改正一处事实错误。** 周报导读写着"样本纪律三档",代码里只有两档。
### 1.5 关闭启动涨幅线
做成整条开关(`CARD_REQUIRE_STARTED`),不是把阈值调成负数那种绕法——
调阈值的话没有当日行情的票仍会被拦下。
**实测对照(数据日 09-03** 关之前 83 只强传导票全部落到仅展示、候选 0 只;
关之后候选 33 只、关注 1 只、仅展示 102 只PMS 有 11 只进入建仓流程
(新建仓是只提议,不会自动下单)。
九条用例钉住"关掉这一条不许顺带放松别的":传导、覆盖、吸筹确认线、硬风险四道仍照拦。
### 1.6 让旁批说得出产业理由
**根因两条。** 一是喂给模型的六项全是行情口径,一项产业逻辑都没有;
二是提示词无条件要求"说主要不确定性是什么",所以后半句必定是风险。
**改法。** 把环节研判与成员论断方向计数喂进去;风险那句改成条件式。
材料缺席时明确写"这个环节还没有做过研判",而不是省略——
省略的话模型会拿行情数字硬凑一句产业判断。
**实跑对比AI算力主题环节"服务器"**
- 改之前的样子:"锂离子电池涨幅负 6.4%,目标价空间 74%,市盈率 15 低于链均值,
电池龙头具备配置价值;竞争加剧与原材料波动是风险。"
- 改之后:"超节点占比提升与 GB200 良率改善推动毛利率上行token 用量增加及下游采购
加大驱动需求,预期上修至盈利改善;但环节整体供需数据不足,匹配存疑。"
---
## 二、费用的实际口径09-07 更正)
**单个环节实测:** 固定 3 次云端调用,输入 12,730、输出 16,763合计约 2.9 万 token。
输出比输入多,因为推理过程也计进输出。
**09-04 我给的估算是错的。** 当时说"事件天天刷新,多数环节要重评,每天约 59 万 token"。
**09-07 实测:周五那次定时投了 24 个,全部指纹跳过,一个都没重跑,耗时都在 0.2 秒以内。**
原因是环节评析那个任务把**封顶挪到了指纹之前**(与产业级评析相反)。指纹只覆盖真正进
模型的那 32 条论断加 12 条事件,而每天新落库的上千条事件多数落在这 12 条之外,指纹不变。
所以稳态花费远低于估算。**新的口径是:只有新出现的环节、或近期材料真的进了前 44 条的
环节才会重评。** 近 31 个交易日的读数是每天新出现 4 到 5 个环节,
按此估约每天 12 万到 15 万 token。这个数还需要连着看几天确认。
**注意:钱是多少我不知道。** 仓库、配置、文档里一个单价数字都没有。要算钱得查供应商
当期价目或看控制台账单。
---
## 三、上线状态
| 系统 | 机器 | 状态 |
|---|---|---|
| 数据基座 astock-kg | 178 | 代码到 d0d3a2a环节评析容器 worker-review 已建并在跑,定时已装 |
| 选股系统 akg-factor-bridge | 155 | 代码到 e00b38e第三件桥侧前置与第四件安全边际逐票日频表已建并有 09-04 首日行;接口 /logic_state 已随 09-07 14:50 的容器重启对外可见;第四件的整句要再重启一次 API 进程才会随 /plan 送出),启动涨幅线已关 |
| PMS tradingSystem | 155 | 代码到 fbad890第三件 PMS 侧与第四件整句透传),镜像按 99ea218 重建、fbad890 只改解析层与一例单测(挂载工作树跑过全套 677 例通过,下次 make deploy-local 时一并进镜像) |
| 择时决策系统 bionic_trader | 188 | 09-07 第二件:新建仓研判三值(证据不足回不可用),跑盘中研判的工作容器已重启 |
**09-07 下午的进度(第零件、第二件、第三件)**:第零件三组 11 条缺陷修完 10 条(台账 036 到 038第二件三处上线台账 039第三件桥侧与 PMS 侧都已上线(台账 040、041只差选股系统的 API 进程重启这一步。
**PMS 的三项确认(每次上线前照做,不许照抄上一次的读数):**
下发模式是直连(不是影子模式,台账 022 记的已过期)、
目标地址 192.168.18.182 是模拟侧、账本表前缀为空。
---
## 四、这一段踩过的坑(都值得记住)
**一,`docker compose exec` 会打到孤儿容器。** 155 上有个 2026-08-03 由 `docker compose run`
留下的容器跑了四周exec 会优先打到它,导致核验落在四周前的代码上。已清除。
识别办法:`docker compose ps -q pms-web` 与 `docker compose exec -T pms-web hostname` 不一致。
**二,推理型模型的推理占输出额度。** 四处都踩了这个坑,全部提到 32768。
判断办法:日志里出现 `finish=length` 就是又不够了。
**三,"代码写了"不等于"跑通了"。** 两个现成例子:候选卡的缺失项一路带到前端却
从没被渲染过;环节评析的任务与路由都配好了,消费容器却从未创建。
**四,我自己出过两次误判。** 一次是按猜的键名取值、据此报"环节图建不出来"
实际是我查错了地方;一次是把"自我校验没通过的研判"一律过滤掉,
实测二十个里十个没通过,等于扔掉一半。**结构不确定时先把顶层键打出来,
不要按猜的键名取值然后据此下结论。**
**五,选股系统的计划接口每次实时重算,实测 24 秒。** PMS 的取数超时原为 10 秒,
容器重建后立刻暴露。已把 `PMS_PLAN_TIMEOUT` 调到 60。容器重建后第一次拉计划必然慢。
---
## 五、接手第一件事:三处正在退步或没验完的
### 5.1 快照"断裂"已查清并修好错在我不在调度中心09-07 更正)
**09-07 上午这一节原先写的是"快照断了、要查调度中心有没有按日执行"。那是误判。**
调度中心每个工作日晚上 20:40 都按时跑了快照09-04 12:40 世界时的调用就是它)。
真正的原因是两层,都在选股系统、都是我写的:
一,**日期约定对不上。** 快照在交易日 D 晚上写plan_date 记 D计划在 D+1 凌晨构建,
数据日就是 D。我在计划装配里写的是读 D+1。09-04 能对上,只因为那天上午我手工跑了
一次快照——把一次手工操作的时序写进了代码,周一就全部落空。已改成读"数据日当天或
之前的最近一版",顺带扛得住某个晚上没跑。
二,**读上一版的函数只取五列。** 它原本只为算迁移而写,没有环节名,按环节索引必然为空。
已改成取全部列并归一空值。
修完实测09-07 计划):产业研判可用 4、自我校验未通过 18、对不上主题 8。
**"自我校验未通过 18"本身是个读数**:三十行里十八行对上的环节,其研判自己都说撑不住。
### 5.2 一致性检查表十三行只核完五行
这是用户定的判收标准——系统逻辑、实现、设计目标三者高度一致。**没核完就不能说这个阶段做完了。**
已核完的五行:
| 行 | 结论 | 证据 |
|---|---|---|
| 一 分析结论到选股 | **一致** | 当日计划 30 行全部带逻辑状态22 行带因果论断(运行时) |
| 三 无法判断的出口 | **部分一致** | 代码逻辑对,但当日判决分布里一只"关注"都没有,这条路没被真正走过 |
| 八 环境判断 | **一致** | 计划顶层市场段四项齐全(运行时) |
| 九 择时定位 | **一致** | 送研判的白名单十六个键里没有论断、依据、四态,产业逻辑没有越界 |
| 十三 同源与凭据 | **部分一致** | 坏信号集合三处值一致且注释互指,但只有选股系统一处有单测钉住 |
**剩下八行要连库或调接口才能验**:第四行裁决留痕、第五行复盘对照、第六行时点纪律、
第七行研究深度、第十行信号来源、第十一行持仓跟踪、第十二行人机分工,以及第二行选股到建仓方案。
**核对时守住一条:** "代码里写了"不算数,判"一致"必须看到运行时证据。
已因此降级过一行(第三行)。
**不要派并行代理做这件事。** 09-04 与 09-05 各试过一次,两次都是全部代理跑满几十分钟、
零条结果、卡在返回那一步。自己逐行做反而快。
### 5.3 采信倾向全是偏多,这一路暂时没有区分度
二十个环节的采信倾向清一色偏多,一个偏空、一个中性都没有。
原因是研报材料本身几乎全是看多的,券商极少明说不看好。
**这是设计预料到的,不是缺陷。** 四态里写死了稳定偏多归"平稳",只有发生迁移才算向好或转弱。
所以这一路在攒够版本史之前,最多只能贡献"平稳"这个非负面证据。
**版本史从 09-07 起开始正常累积**5.1 那两处已修。09-08 起每天多一版,迁移才判得出来。
另外二十个环节里十个自我校验未通过。校验挑的是"某条论据撑不住某个推断"
不是整份结论作废,所以现在是照给但带上校验意见。
---
## 六、还没做的(按建议顺序)
**零,选股系统的 API 进程重启——09-07 14:50 已做(经用户同意)。** 接口 /logic_state 实测可用;验证命令:`curl "http://192.168.16.155:8300/logic_state?codes=600000.SH"` 返回 states 一项且 source 为 daily 或 computed。以后 api.py 有改动都要记得这一步:容器的 uvicorn 没开热重载。
**零之一,两处还没进生产进程的代码。** 选股系统的 /plan 是进程内实时重算,第四件的安全边际整句要等 API 进程再重启一次才会送到 PMSPMS 的 fbad890整句透传还没进镜像下次 make deploy-local 时一并进。两处都不影响判决与分流,只影响人看到的那一句。
**零之二09-08 早上看第三件的第一次真实读数。** 逐票日频表 09-07 那一天的行数(应在一千二百上下)与"被抗抖动按住"的只数PMS 侧 plan_pull 返回里 logic_state 一段的 ok 与 got。当天若有新开仓持仓页"当初为什么买"一栏应填上。
**一09-08 验证 5.1 的修复在无人值守下成立**:当天计划里产业研判可用数不为零。
**二,核完一致性检查表剩下八行。** 这是判收标准本身。
**三,给另外两处坏信号集合加单测。** 现在三处值一致靠人记,只有一处有机器守着。
**四,触发密钥进访问日志。** 密钥跟在网址后面,会明文写进接口的访问日志。
不紧急(内网、日志只有本机能读),改法是放到请求头里,但调度中心那条任务要跟着改。
**五,方案里搁置的两条不要重开**,除非前置条件满足:上下游业绩传导
(需要供应关系恢复更新、方向准确率有实测、清洗后配对数够用)、
产业级驱动跟踪(需要先给驱动方建同义与冻结词表)。
---
## 七、验证命令汇总
**选股系统Mac 上跑):**
```bash
ssh -p 2280 factor@192.168.16.155 "docker exec akg_factor_bridge python3 logic_state_coverage.py 2026-09-03 2026-09-04"
```
预期读数:四态分布是无法判断约九成、逻辑成立约一成、逻辑存疑个位数;
各路可用次数里产业研判不为零。若产业研判为零,就是 5.1 那条断了。
**环节评析的定时Mac 上跑):**
```bash
ssh -p 2280 tlai@192.168.16.178 "tail -c 600 ~/akg_logs/review_segment.log"
```
预期读数:每个工作日一段 JSON`dispatched` 是当晚投出去的环节名单。
**PMS 全套测试Mac 上跑):**
```bash
ssh -p 2280 factor@192.168.16.155 "cd /home/factor/project/tradingSystem && make test"
```
预期读数:最后一行 `ALL SUITES PASS`,共 655 例。
若报缺依赖,是镜像没重建,先跑 `make deploy-local`
**选股系统全套测试Mac 上跑):**
```bash
ssh -p 2280 factor@192.168.16.155 "cd ~/project/akg-factor-bridge && for f in test_*.py; do printf '%-28s ' $f; docker exec akg_factor_bridge python3 $f 2>&1 | tail -1 | cut -c1-40; done"
```
预期读数:九个文件全部以 ALL OK 或 ALL PASS 开头。
---
## 八、红线(不许碰)
- 禁止关机、重启这类高危命令。
- 容器的重启、重建、新建必须先经用户同意。
- PMS 正式实例(连 192.168.16.98 那侧 QMT测试期间一律不部署。
- 每次 PMS 上线前逐项确认三项:下发模式、通道开关、账本表前缀。不许照抄上一次的读数。
- 不做回测、因子合成、IC 与单调性评价;评价只用候选单复盘。
- 不用内部代号与不严肃的措辞;需要决定的事项在对话里选项式提问。