# 交接:主观量化系统 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 侧与第四件整句透传),镜像已按它重建,全套 677 例通过 | | 择时决策系统 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 一致性检查表十三行已核完(09-07):四行一致、八行部分一致、一行不一致 这是用户定的判收标准——系统逻辑、实现、设计目标三者高度一致。**判收未达。** 逐行证据见台账 043,这里只放结论表: | 行 | 结论 | 一句话证据 | |---|---|---| | 一 分析结论到选股 | **一致** | 计划每行带逻辑状态与因果论断(运行时) | | 二 选股到建仓方案 | 部分一致 | 账本硬数字带判决、仅展示不出提议;"关注"那条路还没真实走过 | | 三 无法判断的出口 | 部分一致 | 三条出口(关注、不可用、低把握)机制齐,运行时无样本 | | 四 裁决留痕 | 部分一致 | 仲裁者分得开、理由服务端强制;唯一一条人工裁决还是旧默认文案 | | 五 复盘对照 | 部分一致 | 三套对照能出(09-07 补跑),但周五没有自动产出 | | 六 时点纪律 | 部分一致 | 区制每日一行、吸筹带时刻与版本、两张日频表攒版本史;投影表仍只存当前态 | | 七 研究深度 | **不一致** | 08-25 起只有 14 份行业研报,无公司深度报告;催化剂与预期无数据源且卡上未标注 | | 八 环境判断 | **一致** | 市场段四项齐全(运行时) | | 九 择时定位 | **一致** | 送研判白名单不含论断、依据、四态、安全边际(单测钉住) | | 十 信号来源 | **一致** | 信号留痕带来源字段(运行时一条),排序只认择时决策系统 | | 十一 持仓跟踪 | 部分一致 | 入场论点随持仓走已上线待样本;自动清仓真实执行过两次,与文档"无自动止损"矛盾(待决) | | 十二 人机分工 | 部分一致 | 五个条件机制齐,缺"不可用"的运行样本 | | 十三 同源与凭据 | 部分一致 | 三处坏信号集合只有一处有单测;触发密钥仍进访问日志 | **要变成"一致"还差三类东西**:材料(第七行,运维上传公司深度研报);运行样本(二、三、四、十一、十二,09-08 起每天在攒,第六件的人工裁决是主要来源);三件代码活(投影快照、周报定时、两处断言)。第十一行的定性拍板 09-07 已做(台账 044:改文档、保留自动清仓)。 **核对时守住一条:** "代码里写了"不算数,判"一致"必须看到运行时证据。 已因此降级过一行(第三行)。 **不要派并行代理做这件事。** 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 没开热重载。 **零之一,两处尾巴 09-07 15:54 已收。** 选股系统接口容器再重启一次后 /plan 带整句;PMS 已按 fbad890 重建镜像(全套 677 例通过,通道在线)。以后记住:桥的 api.py 与 plan.py 改动都要重启接口容器才进 /plan,构建子进程不用。 **零之二,09-08 早上看第三件的第一次真实读数。** 逐票日频表 09-07 那一天的行数(应在一千二百上下)与"被抗抖动按住"的只数;PMS 侧 plan_pull 返回里 logic_state 一段的 ok 与 got。当天若有新开仓,持仓页"当初为什么买"一栏应填上。 **一,09-08 验证 5.1 的修复在无人值守下成立**:当天计划里产业研判可用数不为零。 **二,一致性检查表已核完(5.2),接下来是把八行部分一致收成一致。** 三件代码活:投影表落日频快照(数据基座)、复盘周报进调度或定成每周五固定动作(选股系统)、另外两处坏信号集合加单测(PMS 与择时决策系统)。定性拍板 09-07 已做(台账 044):改文档、保留自动清仓——风控高置信卖出直通清仓是设计内的自动止损。同日拍板第二条:第四件的中性情景值在持仓页作参考目标价显示,只显示不触发(两侧 09-07 16:45 都已上线并实测通)。 **二之二,基座日检 09-07 报的一条要人工核:** 待抽取台账 1,086 份与队列 0 对不上,登记了没入队或重复入队;日检脚本 `backend/scripts/daily_check.py` 第四节能复现。另外日检在周一会把投影日报成落后两天——投影定时是周二到周六 06:10,周一本来就不跑,那是日检的预期算错,不是故障。 **三,给另外两处坏信号集合加单测。** 现在三处值一致靠人记,只有一处有机器守着。 **四,触发密钥进访问日志。** 密钥跟在网址后面,会明文写进接口的访问日志。 不紧急(内网、日志只有本机能读),改法是放到请求头里,但调度中心那条任务要跟着改。 **五,方案里搁置的两条不要重开**,除非前置条件满足:上下游业绩传导 (需要供应关系恢复更新、方向准确率有实测、清洗后配对数够用)、 产业级驱动跟踪(需要先给驱动方建同义与冻结词表)。 --- ## 七、验证命令汇总 **选股系统(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 与单调性评价;评价只用候选单复盘。 - 不用内部代号与不严肃的措辞;需要决定的事项在对话里选项式提问。