2026 年 10 月 24 日。一个月前写了《逼出 Agent》,讲的是 tidewatch 的团队设计:四个部门、一条规则链。但这一个月里我们诚实地承认了一件事:那套 Agent 还是「工具」——人不敲命令,它一动不动。 这篇文章讲 10 月 24 日这一天(17 个 commit,+8254 行)怎么把它变成「员工」:有排班表、有可证伪的 KPI、有应急召唤。顺带记三个单元测试抓不到、只有真机能现形的 bug。
一、先看这一天
一天四条主线,全部真机验证后合入:
| 主线 | 干成了什么 |
|---|---|
| 行情工作台(渲染) | 盘口/分时页签、板块榜单、多窗格总览、F10 基本面化;十字光标、相机钳位、缩放右缘锚定 |
| 数据纵深(datafeed) | 降级链从两级扩到四级:东财→新浪→腾讯→TDX 协议直连;TDX 长连接抗会话风控;分笔成交腾讯兜底 |
| 量化回测底座 | 分钟线历史回填:腾讯 320 根/页分页、幂等存储、断点续跑 |
| Agent 制度化 | 排班(周末班)+ 问责(预测打分)+ 召唤(事件辩论) |
这天下午东财的 WAF 还在惩罚我们的 IP(约一半连接被掐),但系统全程满血——降级链第一次在真实封锁下证明自己。这本身就是「逼出」的一部分:你逼不出没经过坏日子的系统。
二、问题:工具再强也不是员工
10 月 24 日之前的触发入口清单:run(盘后管线)、digest(盘前盘后摘要)、team(团队决策)、broker(飞书问答)。看着不少,但全部有一个共同前提——人在场。
周六没人敲命令,Agent 就休假;周日的公告和政策发布,Agent 不知道;上周的预测对着错过的行情,没人回头打分。所谓「多 Agent 自治」,自治程度约等于一台需要摇启动的拖拉机。
解法不是加功能,是立制度。员工和工具差三样:排班表、KPI、问责。三件套分别对应三个新机制。
三、排班:shift——周六周报、周日展望
一个 tw-cli shift 子命令,两个班次:
- 周六 10:00 周报:本周复盘——标的周度表现、板块轮动、系统决策复盘、下周关注
- 周日 16:00 展望:下周预测——大盘研判、板块观点、个股关注、风险清单、可证伪预测
两个设计决定值得展开:
数据包只准装库内事实。 班次的输入是一个纯 SQL 拼出来的数据包:周度涨幅、板块均值、主力净流入、决策记录。prompt 里写死「只引用数据中出现的事实与数字,不得编造」。LLM 在这套系统里只干两件事:解释事实、组织语言。判断数字从哪来?从数据源和公式来。这是整个 tidewatch 一以贯之的纪律。
班次门槛写进代码。 周报只认周六,展望只认周日;--date 视为手动补跑免检。缺班(LLM 挂了、数据断供)会进 runs 表留痕——缺席本身就是一条记录,这是问责的第一层。
四、问责:预测必须可证伪
「看多后市」不是预测,「机器人板块周均涨幅 -8% ~ +5%,置信度 60%,有效 2026-10-26 ~ 10-30」才是。展望班的 prompt 强制每条预测带四个字段:方向、区间、置信度、时间窗。
然后是关键一步——机器解析,不劳 LLM。展望成文后,解析器把「可证伪预测」小节拆成结构化行落库:主语分类(个股代码/板块标签)、区间、置信度、时间窗、原文留痕。下个周六,周报班开场先跑一遍打分器:actual 取覆盖周首开盘到末收盘(与数据包同口径),逐条 ✅❌,成绩单拼进周报正文最前——Agent 下周写预测时,看着自己上周的成绩单写。
三条宽容解析的规则,是这一天里最值钱的经验:
- 解析不了的不评分,但原文照样留痕。 模糊预测的代价不是丢失,是「记录在案、无人喝彩」。
- 区间支持中文。
a% ~ b%、±x%、>x、「跌破 x 以内」——LLM 写什么格式都接得住,别用 format 约束倒逼模型。 - 原文永存。 结构化字段是给机器的,statement 原文是给人看的,防「事后说我说的是另一个意思」。
真机首跑就抓到两个单元测试根本抓不到的 bug:
Bug 1:chrono 的 %d 接受 1 位数字。 滑动窗口解析 2026-10-26 ~ 2026-10-30 时,在 2026-10-3 处就 parse 成功了,把 30 截成 3,时间窗尾日变成 10-03。修法:先验「4 位年 + 横杠 + 2 位月 + 横杠 + 2 位日」的字符形状,再 parse。教训:宽松 parse 和滑动窗口不能同时用。
Bug 2:板块成员的名字就叫板块名。 机器人板块有个成员 300024,证券简称「机器人」——主语「机器人板块」同时命中板块标签和个股名,分类器两边都放弃。修法:名字匹配与板块词同词时让位板块,代码匹配(6 位数字)不受影响。教训:中文主语分类必须有专有名词冲突意识。
两个 bug 的共性:测试全绿、真机现形。 每次交付配真机冒烟不是仪式感,是刚需。
五、召唤:react——事件来了,Agent 上桌
排班覆盖了「到点干活」,但深 V 急跌不会看你班表。召唤机制三条线:
埋点即事件。 盘中异动告警触发 → 落 alert_fire 事件(severity=涨跌幅绝对值);回填时东财回退腾讯 → 落 source_fallback 事件。埋点就一行,落在动作发生的地方,不另起监视进程。
重大事件自动辩论。 tw-cli react 扫未处理事件:急跌 ≥3% 的事件自动构建快照、拉四个 Agent 首轮观点、进 debate() 收敛——就是盘后决策那套辩论引擎,只是触发器从「人到点了」变成「事发生了」。辩论结果和 LLM 成文的简报一起推飞书。
防刷屏和幂等。 事件清单最多展示 12 条、辩论最多 2 场(去重标的);处理完标 handled,重复运行不重复召唤。自治系统的第一守则:别把人训练成飞书通知的奴隶。
crontab 一行接入:盘中每 10 分钟扫一次,无事即静默退出。
六、可复制的四条
给想给自己系统立同样制度的人:
- 确定性归机器,语言归 LLM。 打分是 SQL 加减法,别让模型「自我评价」;成文是模型的活,别让人写周报。
- 留痕是自治系统的呼吸。 班次缺席进 runs、预测原文进 statement、事件处理进 handled——所有「没做成」和「做成了」一样值得一张表。
- 宽容解析三规则(见第四节):模糊留痕、失败不评分、原文永存。
- 真机冒烟是测试套件的必要条件,不是可选项。 这天的两个解析 bug、一个布局叠印,全是真机抓的。
七、下一步
- 下周五:预测问责第一次真实闭环——上周展望的预测对账打分,成绩进周报
- 回测 M2:分钟线底座已就位,事件研究(深 V 日横截面扩样本)开工
- 口径债:腾讯兜底源是未复权口径,除权日两侧有跳变,已标注——东财解封后用前复权重刷
- 周末班扩展:数据质量稽核班、决策归因班在清单上
尾
一个月前那篇的结尾说,让 Agent 从「工具」变「同事」。今天补上后半句:同事不是喊来的,是逼出来的——逼它的不是喊话,是排班表、成绩单和一声「来活了」。
下个周六,这位员工要交第一份带分数的作业。它写得怎么样,机器说了算。