来源:市场资讯
(来源:Gangtise投研)
![]()
今年 7 月的一个早晨,我们的 AI 投研助手里出现了一条新闻:「特斯拉得州超级工厂发生 Cybertruck 起火事故」。
标题清晰,来源标注为「外电」,时间、地点、事件要素齐全。它看起来和我们每天处理的其他产业新闻毫无区别——唯一的区别是,这条新闻不存在。
我们反查了过去一周所有主流金融数据源,零匹配。
AI 是如何「编」出这条新闻的?
答案比想象中更简单:那几天的新闻流里散落着「特斯拉」「得州工厂」「Cybertruck 交付」等碎片。大模型从这些碎片中,拼出了一条「合理但不真实」的独立新闻。它没有恶意,它只是在做自己最擅长的事——预测下一个最可能的 token。
这件事让我们意识到一个根本问题:AI 永远不会说「我不确定」。
01
实习生困境:为什么 AI 天生会编造
想象一个实习生。他读过十万份研报,记得每一个数字、每一段分析、每一种写作范式。但他从未查过一条实时新闻,也没有独立核实信息的能力。
你问他:「今天碳酸锂价格跌了吗?」
他不会说「我不知道,让我查一下」。他会根据记忆里所有关于碳酸锂的研报片段,合成一段「看起来很像研报」的回答——有数据、有分析、有结论,唯独没有真相。
这就是大模型在金融场景中的核心困境。它是一个概率预测引擎,不是事实检索系统。在通用对话中,「编造」可能只是一个小瑕疵;但在金融决策链路中,一条假新闻、一个回退到昨天的价格、一段自圆其说的分析——任何一次幻觉都可能传导为决策偏差。
更值得警惕的是:这不是孤例。
这些被过滤的内容,一部分是重复信息,一部分是不相关的噪音,还有相当一部分——是大模型「合理想象」的产物。
02
我们的答案:三层闭环工程
![]()
▎第一层:行为约束环
第一层闭环的逻辑是最朴素的:给 AI 定规矩。
我们最初的做法和市场大多数团队一样——在系统指令里写上详细的执行规则。比如「数据必须取当日」「采集必须逐批保存」「不允许跳过任何步骤」。很快我们发现,够了,但远远不够。
教训一:数据的「时间旅行」。
某天我们检查报告时发现,当日现货价格数据缺失。AI 没有报错,没有等待确认——它默默地把前一天的收盘价填了进去。对 AI 来说,这是一个「合理」的替代方案:数据格式相同、数值相近、语义连贯。但对我们来说,昨天的价格和今天的价格,可能是两个方向。
从此我们立下第一条硬规矩:数据源变动必须经人确认。AI 没有权限自行回退。
教训二:规则在,但不执行。
我们把详细的工作规则写进了系统指令,逐条列明采集顺序、数据源优先级、校验标准。然而在实际运行中,AI 有时会选择性地「忽略」某些规则——不是因为它看不懂,而是因为它根据上下文「判断」有些步骤可以跳过。最典型的一次:AI 自判「信息已足够」,跳过了数据补采环节,导致一个模块直接为空。
这个教训让我们意识到一个关键区分:写在 prompt 里的规则,只是建议;写在程序里的规则,才是门禁。
教训三:内存里的成果,一文不值。
更隐蔽的坑在于「过程幻觉」。AI 完成了所有批次的采集,所有结果保存在内存里——然后会话中断了。全部丢失,从头再来。对 AI 来说,「我采集完了」和「我保存完了」是两件它不做区分的事。
从此我们强制要求:采集即落盘,不做批量写入。
这些规则在 FinBot 上不是贴在墙上的标语,而是嵌在 FinBot启动时加载的 AGENTS.md 和 SKILL.md 里。每次 FinBot开始执行采集任务,先读文件,再干活。规则不是建议,是行为边界。
第一层闭环的本质,是用人的纪律约束 AI 的惰性。但它有一个无法回避的天花板:约束只在 AI 愿意遵守的时候有效。
▎第二层:规则引擎环
第二层是「硬兜底」——用 Python 脚本实现的三道程序门禁。这些门禁跑在 FinBot 的调度层,Agent 碰不到:
门禁一:来源可溯源。
Cybertruck 事件的直接教训。AI 编造新闻时,连「来源」都会一起编——「外电」「行业媒体」「综合报道」,这些看似合理的来源名称,本身就是幻觉的一部分。我们的脚本会提取每条新闻的来源,如果无法从 URL 域名追溯到真实出处,直接丢弃。没有例外。
门禁二:日期必须匹配当日。
对接第一层「数据时间旅行」的教训。脚本加载数据时,会校验数据日期是否等于报告日期。非当日数据——哪怕只差一天——拒绝加载。
门禁三 · 断点续采(checkpoint)
这是三道门禁中最容易被低估的一道。如果让 FinBot一次性采集多批次,它会在头几个批次认真工作——但到了后半程,它会开始「偷懒」:复用其他批次的关键词、跳过调用直接用幻觉补全、把前几批的结果换个标题当新的交。表面完成了,实际大量数据是编造的。
checkpoint 机制通过 collect_all 编排器把采集切成小块:每批独立提交——Finbot只知道自己当前批次的关键词,看不到全量。每批完成立即写入 checkpoint,下一批从断点启动。Agent 没有「全局视图」——每批对它来说都是「第一批」,无法预判后面还有多少、也无法混用前面的结果。批次不通过 → 驳回该批 → Finbot重采 → 直到通过才记录 checkpoint → 进入下一批。
这让 Agent 偷懒的空间被压缩到零:它没办法在最后一口气编造 35 条数据来覆盖前面的空缺——因为根本不存在「一口气」。
![]()
三道门禁的载体,是名为 collect_all 的采集编排器。它不参与内容生成——只负责调度采集流程、管理 checkpoint、执行原子写入。但真正的入库校验——结构是否完整、关键词是否命中、数据是否伪造——这一关不在 L2,而在 L3 的锁一。
![]()
L2 的关键在于:这些门禁不是 prompt 中的「建议」,而是 Python 脚本中的硬逻辑。FinBot无法绕过,因为它在 FinBot进程之外执行。更重要的是——门禁不通过,数据不会静默丢弃;它会触发回采,形成第一个闭环:门禁拒绝 → FinBot重新调数据源→ 再次提交 → 直到通过才入库。
▎第三层:脚本校验环
L1 和 L2 在数据入库前挡住了来源不明、日期不对、内容异常的信息。但入库之后,仍有漏洞未堵:FinBot交给脚本的原始响应是真是假?最终成品有没有数据拷贝错误或排版缺陷?L3 用两把锁补这两道裂缝。
锁一 · collect_all.py --raw-file 完整入库校验
这是数据入库前的唯一一道校验关口。FinBot必须将数据源的原始响应写入临时文件,通过 `collect_all.py save --raw-file` 提交给脚本。脚本逐条校验:title 和 content 是否齐全?date/url 覆盖率是否达标?content 是否过短(疑似编造)?关键词命中率是否 ≥30%?任一不通过即拒绝保存。拒绝不是终点——FinBot必须重新调数据源、重新提交,直到通过才能入库。这是第二个闭环:校验拒绝 → FinBot重采 → 再校验。原始响应自动归档至审计目录,全程可回溯。FinBot不能直接操纵缓存文件——也没有 `--result` 后门可以绕过——只有交出原始响应、通过所有校验,数据才被写入缓存。
锁二 · 交付前双重终检
数据入库后,两个漏洞仍然存在。第一,从 API 原始响应到最终报告,中间经过解析、缓存、渲染三道转换——任何一个环节的数字拷贝错误,锁一都看不见。第二,渲染产物本身可能有排版缺陷:模块缺失、表格错位、占位文本残留、禁止词漏入。
锁二由两套独立脚本构成。
数据侧:渲染阶段保存全部结构化行情及价格数据的快照,交付前重新调用 API 逐格比对——任一格不匹配,报告扣发,数据回采,重新渲染后再校验。
排版侧:对成品 .docx 做标题顺序、表格行列、图片嵌入、占位文本、禁止词六项扫描——一项不通过,同样扣发、回采、重渲染。两套脚本合在一起,覆盖了从数字精确性到成品完整性的最后盲区。而拒绝 → 回采 → 重渲染 → 再校验,就是第三个闭环——交付前的最终反馈回路。
![]()
两把锁的流水线关系:锁一在采集入库时,锁二在渲染完成后、交付前。锁一保证入库数据经得起脚本校验,锁二保证最终成品的数字和排版无死角。
03
实战修复记录:我们修过的幻觉漏洞
以下举例我们的系统在过去两个月的实战中,关键修复的演进轨迹。每一条都意味着一个文件更新,一次铁律加固:
![]()
结语
可信需要架构,不只是能力
回到开头的问题:为什么一个能做奥数的大模型,会在投研场景里编造新闻、回退日期、或者漏掉某个品种的价格?
模型确实在进步——更强的模型可以更准确地调用工具、更严格地遵循指令。但投研场景和聊天场景有一个根本区别:在聊天里,95% 的正确率叫「大概靠谱」;在报告里,一个数字错了,整份报告就悬了。模型可以把错误率从 5% 压到 1%,但在金融场景里,1% 和 5% 没有本质区别——都可能是一篇被撤回的研报、一次被质疑的信披。
三层闭环是在模型能力之上叠加确定性。模型负责「聪明地做事」——理解意图、组织语言、连接信息;闭环负责「确定地兜底」——不该做的事做不了、做了的事必须通过校验、不合格的结果必须重来。而「闭环」的真正含义在于:每一层都不是单向过滤,而是带有反馈的回路。门禁拒绝 → 重新采集,校验不通过 → 报告扣发 → 回采源头 → 重渲染。没有反馈的防线只是一道筛子;有反馈的防线才是闭环。
三层闭环不是终点,而是第一步。
但要让第一步变成日常可用的能力,需要平台支撑。本文展示的三层闭环——L1 行为约束、L2 规则引擎、L3 脚本校验——全部跑在 FinBot 上。
Loop by loop. 信任是建出来的,不是给出来的。
▎最新版本 FinBot 完成 Kimi K3 适配升级!
月之暗面新一代开源大模型 Kimi K3 搭载2.8万亿参数,原生支持视觉理解,支持100 万Token 超长上下文窗口,专为长程编程、深度推理等前沿场景打造,适配行业研究、数据处理、投研报告撰写全场景。
FinBot核心优势:
✅ 自有部署,无需排队、不限调用次数、推理更稳定
✅ 模型矩阵持续更新,按需自由切换,最大化投入产出效益
即刻登录 FinBot 金融投研工作台,解锁百万级长文本深度投研能力。
限时专属福利持续放送:
现在体验新版本,即可免费领取1亿Token,安全、稳定调用 Kimi K3 。
复制下方注册链接在浏览器打开:
https://eazydevelop.eazytec-cloud.com/finbot?source=gangtise
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.