天智这一周:让系统自己开口说话,顺便把我挖的坑一个个填上

本文最后更新于 2026年7月11日 早上

上一篇我给天智精选装了 AI,重点全在”上镣铐”——怎么让它进化,又不把我信任的旧系统搞坏

这一周本来打算继续往 AI 上加东西,结果一件都没加。

复盘的时候我才发现,这七天真正干的是两件事:一半时间让系统学会自己开口说话,另一半时间在填我自己挖的坑。 而且后一半,比前一半更值得写。

顺带,六个盘的第一份成绩单也交上来了。它给我上的那一课,比这周写的所有代码都重。

一、我不想再”打开看板”了

天智数据和天智精选跑了两个月,功能越堆越多,但有个很尴尬的事实:我每天得记着去打开它。

开盘前想看看外围市场脸色,得打开网页;收盘后想知道今天选出了什么票,得打开网页;想知道几个对照账户谁跑得好,还是得打开网页。系统很勤快,但它是个哑巴——它知道一切,却从不主动跟我说一句话。

这周做的第一件事,就是给它装上嘴。三个定时机器人,卡在一天里三个真正需要决策的时刻:

时刻 机器人 它替我回答的问题
9:15 开盘前 外盘晨间预警 昨夜美股、今早日韩什么脸色?今天该不该谨慎?
15:15 收盘后 今日收盘精选 今天到底选出了什么票?
18:00 晚饭时 AI-PK 战报 几个账户谁跑赢了?AI 到底行不行?

外盘预警抓美股隔夜和日经、KOSPI,用 🔴🟡🟢 三档给出系统性风险信号。它只提醒,绝不自动改交易——红灯亮起时,它说的是”天智精选今天先观望”,而不是替我把仓位平掉。这条边界我守得很死:机器可以拍我肩膀,不能替我按下单键。

PK 战报每天晚上把几个账户的收益排名、alpha、AI 状态、融合 Top3 摆在一起。上一篇讲过,我给 AI 设了冠军/挑战者的擂台;但擂台搭好之后,如果我不去看,它就等于不存在。战报就是那个每天把成绩单塞到我手里的人。

写完这三个机器人我才反应过来:一个不会主动说话的系统,等于把”要不要关心它”这个负担又扔回给了我。 自动化做到一半就停在这儿,是很多个人项目最后荒废掉的真正原因——不是它不好用,是你懒得打开它。

顺带一个踩了很久的坑:这些定时任务我最早放在云端 routine 里,后来发现它的出站白名单够不到我的服务;改用 GitHub Actions 的 schedule,又发现它会整次静默丢弃(实测真的漏跑过)。最后老老实实塞进自己容器的 crontab,才终于稳定。 定时任务这东西,越”高级”的调度器,越不肯告诉你它今天偷懒了。

二、”今日收盘精选”:一次时点的校准

三个机器人里,最先出问题的是收盘精选。

原来的安排是:选股批 16:00 跑,飞书 14:30 推。看出问题了吗?推送在批处理之前。 也就是说,14:30 那条”精选”,用的其实是昨天收盘的数据,再叠加一点盘中过滤——它叫”精选”,但它是昨天的精选。

这不是 bug,代码逻辑完全正确。它是一个更隐蔽的错误:口径和名字对不上。 系统忠实地执行了我写的东西,只是我写的东西,和我以为我在做的事,是两回事。

改法很直白:把选股批提前到 15:05(收盘后五分钟),推送挪到 15:15。此时 /api/picks 拿到的已经是今日收盘重算的名单,名副其实的”今日收盘精选”。

但这里有个取舍必须写下来,因为它不是白赚的:15:05 时资金流、大宗交易的数据未必完全就绪,而且整个日批口径都跟着提前了(因子、PK 战报都受影响)。我选择接受这个代价——一份口径正确但个别字段可能稍欠的今日名单,比一份数据齐全但其实是昨天的名单,有用得多。

同一周还做了另一次口径校准:天智精选剔除 ST。

起因是 7 月 6 日沪深北交易规则修订,其中一条是主板 ST 股涨跌幅从 5% 放宽到 10%。我逐条核对了新规对天智家族代码的影响,结论是一处都没搞坏(涨跌幅阈值本来就按 10% 校准,纸面盘的时点也天然错开了新规改动的集合竞价时段)。

但核对的过程让我盯上了另一件事:我的选股池里一直躺着 ST 股。 规则改不改是一回事,我到底想不想买它,是另一回事。答案很明确——不想。于是两个系统同步加了风险警示过滤(名称含 ST 或”退”的一律剔除)。

新规没有伤到我的代码,但它逼我去看了一眼代码,然后我发现了一个我一直不想要、却一直存在的东西。 这大概是所有”合规检查”最大的附加价值。

三、择时盘:给”大盘择时到底有没有用”也开个户

上一篇的核心哲学是:AI 行不行,不靠感觉,靠账。 给 AI 开一个独立的影子账户,让它的表现变成一个可度量的数字。

这周我把同一招用在了另一个我一直没想明白的问题上:大盘走弱的时候,到底该不该停手?

这是个几乎所有做股票的人都相信、但很少有人真正验证过的直觉。”大盘不好就别做”——听起来天经地义。可它真的能提高收益吗?还是只是让你错过反弹?

与其争论,不如开一个户。

于是有了择时盘timing)。它的设计刻意做得极其克制:

  • 选股与天智精选完全同源——同一个 selection.select,一模一样的看涨名单,不做任何改动。
  • 唯一的差别:叠加一道大盘趋势闸。用沪深 300 相对 20 日均线的位置和斜率判断大盘强弱,走弱时暂停新建仓
  • 出场规则保持不变(止损、移动止盈、跌出榜照常执行)。

关键在于”唯一”这两个字。只有当两个账户之间仅存在一个变量时,它们的净值差才能真正归因到那个变量上。 如果我在做择时的同时又顺手改了选股逻辑,那跑出来的差异就成了一笔糊涂账——这正是大多数”策略优化”最后什么也没证明的原因。

还有一个决策我想单独说:大盘走弱时,只暂停买入,不主动清仓。

这是我定的,理由是这两件事的性质完全不同。”不买”是放弃一个可能的收益,”清仓”是承受一个确定的损失(冲击成本、来回打脸、以及最要命的——在底部把票交出去)。同样是”看空大盘”,谨慎的表达方式是站着别动,而不是夺门而出。

择时盘今天(周六)建好了表,下周一开盘才会真正建仓。三个月后它会告诉我一个答案:那道我们都以为理所当然的”大盘闸”,到底是护身符,还是收益的漏斗。

四、六个盘,一周,没有赢家

说了这么多设计,是骡子是马得拉出来遛。这周正好是个残酷的样本——沪深 300 一周跌了 1.27%(4842 → 4781,中间还有 7 月 9 日那根 +2.54% 的假阳线)。

天智精选现在严格说有六个盘:我自己真金白银的持仓盘,加五个纸面盘。摊开看:

本周 累计 说明
沪深300(基准) −1.27% 大盘
我的真实盘 −3.22% 真金白银,手动操作
天智精选(旧策略) −2.58% +0.80% 6-22 起,唯一还在水上的
AI 挑战者盘 −2.57% −2.57% 7-03 起
渐进融合盘 −2.60% −2.60% 7-03 起
因子盘 −7.13% −15.40% 6-22 起
择时盘 未开张 下周一建仓

这周没有赢家。所有盘都跑输了大盘。 先把这句话摆在这儿,因为接下来三个发现,每一个都比”我又做了个新功能”更值钱。

发现一:AI 什么都没证明

看这三个数字:AI 挑战者盘 −2.57%,旧策略 −2.58%,渐进融合盘 −2.60%

三个盘挤在 0.03 个百分点里。

上一篇我费了整整两天,给 AI 搭擂台、设不变式、上熔断、防它造反。第一份成绩单交上来,答案是:AI 和旧策略,在这一周里毫无区别。

说实话,这个结果让我踏实。因为它恰恰说明擂台是有效的——如果 AI 真有什么本事,或者真会闯什么祸,这 0.03 个百分点里早该看出来了。一个还没证明自己的 AI,最好的表现就是”看不出区别”;它现在既没帮上忙,也没把船搞翻。这正是我给它设计的位置。

要是这个数字变成 AI 领先 5 个点,我反而得警惕:一周就大幅跑赢,多半是运气或者踩到了单只妖股,而不是本事。

发现二:因子盘输得很难看

−15.40%。 这不是噪声,这是败绩。

因子盘是个纯量化对照盘,本周又跌了 7.13%,是所有盘里最惨的。我暂时不打算给它找借口——先让它输着,输的数据比赢的猜测有用。 一个亏了 15% 的对照盘,价值在于它每天都在告诉我”这条路目前走不通”,而这个结论是花真钱买不到的。

发现三:最扎心的——我输给了我自己写的系统

真正让我坐立不安的是这一组对比:

旧策略纸面盘(机器执行):+0.80%
我的真实盘(我自己操作):−3.22%

同一套选股系统,机器照着做,赚了;我自己上手,亏了 4 个百分点。

翻开我的持仓,原因一目了然。四只票里三只是好的:长电科技 +9.07%、机器人ETF +3.65%、东方财富 −4.09%,这三只加起来是赚 4294 块的

而第四只,商络电子,−25.45%,一只票亏掉 24380。

也就是说:把这一只票拿掉,我的组合是赚钱的。 整个账户的亏损,几乎全是它一个人造成的。

那纸面盘为什么没事?因为纸面盘有止损纪律,它会在跌到阈值时机械地把票砍掉,不问理由、不看脸色、不抱幻想。 而我的真实盘——系统一直在盘中给我报警,红字就摆在那儿,按钮在我手上,我没按。

我甚至能复盘出自己当时的心理活动:再等等,可能会反弹;都跌这么多了,割在最低点多亏;这票基本面没那么差……每一句都很有道理,每一句都在让我继续持有一只已经跌了四分之一的票。

我花了两个月,写了止损、移动止盈、跌出榜出场、大盘趋势闸、AI 熔断……一整套风控体系,然后我自己没执行它。

长电科技那只更说明问题:它一度冲到 111.97,现在 101.11——从峰值回撤了近 10%,我一样没动。 移动止盈的规则我写在代码里了,写在自己脑子里的那份,从来没生效过。

这就是为什么我要做纸面盘、做对照账户、做择时盘。不是因为我信不过机器,恰恰是因为我信不过我自己。 机器不会心存侥幸,不会舍不得,不会在半夜给一只亏损 25% 的票编故事。

那个”大盘走弱只暂停买入、不主动清仓”的决定,现在回头看格外讽刺——我在替系统设计克制,自己却连最基本的止损都做不到。

五、”总有票没名字”——一个改了三次才对的 bug

这周有个 bug 特别值得写,因为它教会我的东西,比它本身重要得多。

现象很小:AI 融合榜里,总有那么几只票只有代码,没有名字。 光秃秃一串 301307 摆在那儿。

第一次修,我在数据层给股票名做了回填——没好。
第二次修,我确认回填逻辑没问题,数据里明明有名字——还是没好。

到这儿我才停下来,不再往”名字是不是没查到”这个方向使劲,转而去问一个更蠢的问题:这个显示名字的代码,到底从哪儿取名字?

根因浮出水面,而且蠢得发亮:

战报里的融合 Top3,是从旧策略的 top10 里查名字的。而 AI 单独挑出来的票,压根不在旧策略的 top10 里——它当然查不到。

也就是说,无论我在数据层把名字补得多完整、补多少次,那段代码根本不看那里。 它拿着一本旧名册,去找一个从来没登记在册的人。

这个 bug 的形状我后来越想越熟悉——我一直在修一个”数据不全”的问题,而它其实是个”查错了地方”的问题。 前者让你不停加数据,后者只需要改一行:先用融合结果自带的名字,取不到再回落到旧名册。

当一个修复”看起来完全正确”却反复无效时,别再加固你的假设了——去质疑那个假设本身。 我在数据层来回补了两次名字,本质上都是在给一个根本没人读的抽屉里塞东西。

六、我自己挖的三个坑

前面都是”建设”。接下来是这周真正花掉最多时间的部分——填坑。而且三个坑都是我自己挖的。

坑一:飞书群被刷屏

某天飞书群突然开始疯狂刷屏,”买入 深科技 MACDH 市场强度”之类的逐笔信号不停往外冒。

排查过程很有意思,因为凶手不在现场:格式不是天智任何一个脚本的,币圈那套也翻遍了没有。最后揪出来的元凶,是我本地另一套完全独立的量化系统——它在往同一个 webhook 死循环推消息。

根因不是那个死循环(那只是个 bug,改掉就完了),而是:我把好几个系统共用了同一个”信箱”。 一个系统发疯,把所有系统的正常汇报全淹了。天智的三个机器人当时都在正常工作,只是它们的声音被埋在几百条垃圾消息里,没人听得见。

共用一个通知通道,等于把所有系统的可靠性绑在了最不可靠的那一个上。

坑二:公开仓库里的密钥

让 codex 帮我 review 代码,它劈头就是一条:你这个仓库是 public 的,而里面明文躺着飞书 webhook 地址、cookie 密钥,还开着 debug。

我当时的第一反应是”这是个人小项目,谁会看啊”——这个念头本身就是最危险的地方。“没人会看”从来不是安全策略,它只是一个还没被证伪的假设。

止血很快(改私有),但真正的功课在后面:仓库转私有 ≠ 密钥安全了,因为它已经躺在 git 历史里,被爬过就是被爬过了。 该轮换的还得轮换。这周把飞书机器人重建、webhook 全线换新,六个脚本统一切过去。

有意思的是最后一个发现:那个泄露的 cookie 密钥,我一直把它列为最高优先级,直到这周我把整个仓库 grep 了一遍才发现——这个系统压根没有登录功能。 没有任何一处代码在用那个密钥签发 cookie。它泄露的实际危害,接近于零。

我为一把不存在的锁的钥匙,紧张了整整三天。 安全清单上的每一条,都值得先问一句”它到底连着什么”。

坑三:一个裸奔了很久的写接口

这是本周最惊险的一个,而且它是在我准备做另一件事的路上,顺手撞见的。

天智数据的网页层里,有一个”关注/取关”的接口。我去翻它的时候发现:

  • 它是 GET 请求;
  • 没有任何鉴权
  • 它直接往数据库里 INSERT / DELETE。

也就是说,任何人,在浏览器里敲一行地址,就能往我的关注表里增删记录。 不需要登录,不需要令牌,什么都不需要。更糟的是 GET 写数据这个设计本身——连爬虫和浏览器预取都可能误触发它。

修法参照另一个系统已有的模式:读接口全部保持公开(博客引流来的访客要能看看板),写接口必须带令牌(从环境变量读,用常数时间比较),顺手把 GET 改成 POST。

这里有个设计选择我想强调:如果环境变量没配,接口一律拒绝写入(fail-closed),而不是”没配就放行”。

代价是真实的——你要是忘了配变量,功能就直接坏掉。但另一条路的代价更可怕:漏配一个变量,这个洞就等于白补了,而且悄无声息,你永远不会发现。

紧接着,这个选择就当场救了我一命。

我配好了环境变量、重新部署,兴冲冲去测——接口返回 503:”服务端未配置令牌”。 什么鬼?我明明配了。

查了一圈,真相简单到好笑:我把变量名少打了一个字母。 代码要读 TZ_EDIT_TOKEN,我在部署平台上填的是 TZ_EDIT_TOKE

如果我当初选的是”没配就放行”,会发生什么?接口会安安静静地继续裸奔,测试全部通过,我心满意足地宣布”洞补好了”,然后带着一个完全没生效的补丁睡大觉。

一个失败得很吵的系统,远远好过一个失败得很安静的系统。 那个 503 不是故障,它是我这周收到的最好的一份礼物。

补上字母,重新部署,最后实测四条:原来的攻击方式(裸 GET)返回 405,无令牌的 POST 返回 401,错令牌返回 401,而访客看板照常 200。洞,堵死了。

七、这次,是 AI 拒绝了我

最后这部分关于工具本身,因为这周我的开发方式也变了。

我给 Claude Code 接上了五个 MCP(GitHub、Cloudflare、Context7、Playwright、Google Drive)。最直接的变化是:它不再需要我把代码复制粘贴给它了。 我说”去看看那个接口有没有鉴权”,它自己就把仓库翻开了;我说”线上到底部署没有”,它自己就去打 API 了。

但真正让我坐直身子的,是另一件事。

这周我给它下了个指令:“去把两个看板的 Cloudflare Access 登录配上。” 这是我一个月前就想做的事,一直拖着。

它拒绝了。

它跑去翻了我们过去的记录,然后告诉我:这个方案你自己在三周前否决过。 理由是我当时刚把博客公开引流,而整站强制登录会把博客来的访客全挡在看板外面。我后来换了另一个方案(公开只读 + 写操作要令牌),并且已经落地了。

它没有照做,反而把我拦下来问:”你确定要推翻你自己三周前的决定吗?”

我愣了一下,然后意识到——它是对的,而我完全忘了这件事。

更妙的是,正是因为它拒绝执行、转而去翻代码,才顺手撞见了上面那个裸奔的写接口。如果它当时”听话”地照做了,我今天不但会挡掉所有访客,那个洞还会继续开着。

我一直以为,一个好用的 AI 助手,标准是”让它干什么它就干什么”。这周我改主意了。

一个只会执行的助手,会忠实地帮你把你自己的错误也执行得干干净净。 真正有用的,是那个会在动手之前说一句”等一下,你三周前不是这么说的”的家伙。

同一周我还给它装了个自学习插件(claude-smart),会从我的每一次纠正里沉淀出规则。它已经开始积累了——比如”环境变量报未配置时,先一个字母一个字母地核对变量名,再去查部署流程”。这条规则的来历,你看完上一章就知道了。

八、写在最后

这一周的成果,摆出来是这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
让系统开口说话
├─ 9:15 外盘晨间预警(只提醒,不自动改交易)
├─ 15:15 今日收盘精选(时点校准:批 15:05,名副其实)
└─ 18:00 AI-PK 战报(成绩单每天塞到我手上)

让直觉接受审判
├─ 择时盘:唯一变量 = 大盘趋势闸,走弱只停买不清仓
└─ 剔除 ST:新规没搞坏代码,但让我看见了不想要的东西

把自己挖的坑填上
├─ 通知通道:别让所有系统共用一个信箱
├─ 密钥泄露:私有化 ≠ 安全,该轮换的得轮换
└─ 写接口:公开只读 + 写要令牌,且 fail-closed(它当场救了我)

六个盘的第一份成绩单(大盘 −1.27%)
├─ 旧策略 +0.80% ← 唯一还在水上的
├─ AI −2.57% / 融合 −2.60% ← 和旧策略挤在 0.03 个点内:什么都没证明
├─ 因子盘 −15.40% ← 输得很难看,但输的数据是有价值的
├─ 择时盘 未开张
└─ 我的真实盘 −3.22% ← 输给了我自己写的系统

回头看,这七天没有一行代码是在”让系统更聪明”。做的全是些不性感的事:让它汇报、让它接受检验、把它身上的洞堵上。

但我越来越觉得,一个系统能不能长久活下去,从来不取决于它最聪明的那部分,而取决于它最迟钝的那部分。

而这一周最让我难堪的,不是因子盘亏了 15%,也不是那个裸奔的接口——是我发现自己亲手操作的账户,跑输了我亲手写的那套系统 4 个百分点。 输的原因不在选股,不在算法,就在一只我死活不肯砍掉的票上。

我写了整整两个月的止损、移动止盈、熔断、趋势闸,把每一条纪律都翻译成了代码。唯独没能把它们翻译进我自己按下鼠标的那一刻。

上一篇我写”好的 AI 系统,不是让 AI 无所不能,是让它就算失控,也翻不了船”。这一周我想补两句——

一个不会说话的系统,你迟早会忘了它;一个不会失败得很大声的系统,你迟早会栽在它手里。

而最难补的那个洞,从来不在代码里;它在按下止损键的那只手上。

👉 欢迎光临「天智精选」 tianzhi.vgtmy.com ,请提出宝贵意见。


本文仅记录个人系统的设计思路,不构成任何投资建议;文中系统为纸面模拟,不涉及真实下单。


天智这一周:让系统自己开口说话,顺便把我挖的坑一个个填上
https://www.vgtmy.com/2026/07/11/tianzhi-week-review/
作者
二郎神表弟
发布于
2026年7月11日
更新于
2026年7月11日
许可协议