← 返回量化与 AI 投研概念库

AI 说得有鼻子有眼,可那个数字是编的:哪些必须人工回查

最后更新 2026-08-18
R2 · 注意风险

你问一个 AI 助手:某家公司现在股价多少。它三秒钟给你一段话——价格、涨跌幅、成交量、最近一次财报的营收增速,格式工整,小数点后两位,语气笃定。你顺手把这个数字抄进了自己的记录里。

问题是,它可能一个字都没查。

这不是危言耸听,也不是「AI 还不够聪明」。这是大模型这类工具的工作方式决定的:它的本职是生成读起来最像正确答案的文字,不是确认答案是否为真。这两件事在大多数场合高度重合,所以你平时感觉不到差别。但在投研场景里,它们会分叉,而且分叉的那一刻,你手上拿着的是一个长得完全正常的假数字。

先说人话:它到底为什么会编

想象你雇了一个实习生,记性极好,读过海量资料,说话有条理,最大的优点是从不说「我不知道」

你问他隔壁公司去年营收多少。他真的不记得了,但他记得这个行业的公司大概是什么量级、这家公司大概是什么规模、财报里这类数字通常长什么样。于是他给你一个数——一个非常合理的数。合理到你没有任何理由怀疑。

他不是在骗你。他是在做他最擅长的事:补全一个符合模式的空缺。骗人需要知道真相并刻意隐瞒,而他连自己不知道这件事都不知道。

这就是「幻觉」(hallucination,业内对大模型编造内容的通称)。它的危险不在于错,而在于错得毫无破绽:假数字和真数字用的是同一套语法、同一种置信语气、同样规整的小数位。你没法靠「读起来对不对」把它筛出来,因为它就是为了读起来对而生成的。

还有一层更麻烦的:模型的知识来自训练数据,而训练数据有一个截止时间。截止之后市场上发生的一切,它一概不知——但它照样会回答。有个开源项目在代码注释里把这件事写得很直白:这类模型会「相当爽快地」报出训练数据里的价格,而对任何在截止日之后还在交易的资产来说,那个价格按定义就是错的。不是可能错,是必然错。

四种典型形态,各自怎么认

把幻觉笼统当成「AI 会瞎说」没什么用。它在投研里其实有几张固定的脸,认脸比讲道理管用。

形态一 · 凭空造数:查无此据

最直白的一种。一个价格、一个营收、一个市盈率,它在任何真实数据源里都不存在,纯粹是被生成出来的。

识别信号:数字漂亮得反常(正好是整数、正好卡在某个心理关口);你换个问法再问一遍,它给出一个不一样的数字;追问「这个数你是从哪查的」,回答变成含糊的「根据公开财报数据」而说不出具体是哪一份、哪一天。

真查过的答案能报出来源;编的答案只能报出「常识」。

形态二 · 张冠李戴:数字是真的,主角是错的

这一种最阴,因为数字本身完全真实,只是被安在了另一个标的头上。

现实里同名、近名的公司多得超乎想象:主板和创业板各有一家名字只差一个字的公司;一家公司在内地和香港两地上市,两个市场的价格、货币、涨跌幅全都不同;还有一堆缩写撞车的情况——一个几个字母的代码,可能同时是某家上市公司的简称、某个行业术语、某只基金的名字。

模型在这些地方极容易走偏:你问的是甲,它答的是乙的数据,而两组数据都是真的,交叉验证的时候你查一个数发现「对得上」,就更放心了。

识别信号:只给了公司名或简称、没给完整的证券代码和交易所;货币单位没写(人民币还是港元还是美元?差着汇率呢);同一段回答里,前半段说的市值和后半段说的股价,用常识粗算对不上。

上面那个开源项目对这一类的处理方式很值得借鉴——它在系统层面把「先锁定标的身份,再允许取数据」做成了硬规则。任何要读市场行情的工具,调用前必须先经过一个专门的代码解析步骤,把用户嘴里那个模糊的名字确定成唯一一个带交易所后缀的规范代码。身份没锁定、或者解析结果自相矛盾的时候,后面的取数工具直接不给调。它还额外查一件事:如果身份已经确认是一只上市证券,而最终答案里却出现「这是一家未上市的私人公司」这类说法,直接判为不合格——因为这两句话不可能同时成立。

形态三 · 把猜测说成事实:推导数被当成观测数

这一类最容易被放过,因为它半真半假。

模型确实查到了一些数,然后自己做了一步计算或估计,最后把计算结果和查来的原始数据用完全相同的语气并排写出来。你读的时候分不清哪个是查到的、哪个是它算的、哪个是它猜的。

「支撑位在某某价位附近」——这是查来的还是它看图估的? 「合理估值区间是多少到多少」——这背后是一个模型,还是一句感觉? 「预计下季度增速在百分之十几」——这是公司指引,还是它自己外推的?

识别信号:出现「大约」「附近」「预计」「合理区间」这类词,却没有跟上计算过程;一个数字既没有来源也没有公式,孤零零地站在那里。

同样是那个证据闸门,它对这件事的要求写得很死:每一个推导出来的数字,都必须被明确标注为推导值,并且把输入和公式摆出来。 它甚至专门做了一个判断,去识别答案里是不是真的写了一个可解析的算式;写了,这个数就放行;没写,就按「无来源的价格主张」处理。

这个规矩换成人的版本非常简单:查到的和算出来的,必须分开写。

形态四 · 过时当现在:它活在自己的时间里

模型的世界停在训练截止那一刻。它不会告诉你这件事,因为在它的语境里,那就是现在。

于是你会看到:早已完成的并购被说成「正在推进」;管理层换过一轮了,它还在说前任;某项政策已经落地实施,它讲的还是征求意见稿的版本;某个价格是一年前的,它用现在时说出来。

识别信号:任何带时效性的表述——价格、排名、人事、政策、产品线、股权结构——一律视为可疑。尤其是没有标注日期的时效性陈述,那是最强的危险信号。真正查过的回答会自带时间戳:「截至某月某日的收盘价」;幻觉出来的不会,因为它没有「那一天」的概念。

这件事和量化里的时点数据其实是同一个问题的两面。回测里,你要小心程序读到了当时还不存在的未来数据;用 AI 时,你要小心它给你的是过去的数据却假装是现在。方向相反,病根一样——信息的时间戳丢了。想把这层想透,可以顺着 时点数据(Point-in-Time)前视偏差 一起读。

系统层:一个可以拒绝自己输出的闸门

讲完形态,看看认真对付这件事的系统是怎么做的。这部分的价值不在于让你去搭一个同款,而在于它的每一条规则,翻译过来都是你可以徒手执行的一条纪律

Vibe-Trading 这个项目里有一个叫 grounding(可以理解成「把话说到实处」)的模块,它在模块开头就把自己的定位讲清楚了:研究和解释仍然交给模型,但有两件事不靠模型自觉,而是结构性的——一是取行情数据前身份必须已锁定,二是最终答案里的价格主张,不得与工具取回的原始结果相矛盾

注意「原始」两个字。这里有个很讲究的细节:喂给模型看的工具结果,因为篇幅限制是截断过的;而做核验时用的,是未经截断的完整结果。核对的底本比模型看到的还全,模型就没有「因为我没看到所以我编了」的余地。

它具体查这么几件事。

第一,数字能不能对上。 从最终答案里把价格类的数字全抠出来,逐个去已观测的行情证据里找匹配。找不到匹配记录,报一类错;找到了但对不上,报另一类错——这两件事在代码里是两个不同的标记:

"code": "numeric_claim_unavailable",
...
"message": f"Price claim {value:g} has no matching observed tool evidence.",
"code": "numeric_claim_conflict",
...
"message": (
    f"Price claim {value:g} conflicts with observed {field_name or 'OHLC'} "
    f"evidence {min(observed):g}–{max(observed):g}."
),

「查无此据」和「与证据打架」是两种病。前者多半是凭空造数,后者多半是抄错了行或者算错了。比对时留了一个极小的相对容差,用来吸收四舍五入带来的尾数差异——具体留多少属于实现细节,会随版本调整,重要的是这个机制的存在:不是要求一字不差,是要求量级和数值实质一致。(OHLC 指开盘价、最高价、最低价、收盘价这四个每根 K 线都有的价格字段。)

第二,溯源三件套齐不齐。 只要答案里出现了价格主张,就强制要求同时出现三样东西,缺一样报一次错,代码里的三个标记名字本身就是清单:

  • canonical_symbol_not_surfaced —— 没写出规范的证券代码和交易所后缀
  • data_source_not_surfaced —— 没说数据是从哪个源取的
  • currency_not_surfaced —— 没说清计价货币

第三条尤其现实。它连货币的常见别名都列进去了——人民币、港元、美元这些中文写法和缩写都算数——只要答案里以任何一种可辨认的形式点明了币种就放行。原因很朴素:一个跨市场上市的标的,同一个数字在不同货币下是两个完全不同的结论。

第三,不合格怎么办。 这是我觉得最值得学的一段设计:答案不是被修补,是被打回。

校验没过的草稿不会流到用户面前。系统会生成一段有针对性的返工提示,把每一条问题列给模型,并附上三条硬要求:沿用已锁定的那个代码和交易所;每个推导数都要标注为推导值并展示输入和公式;如果证据缺失或者互相矛盾,就直说并请求澄清,不要猜

如果反复返工仍然不过关,它不会硬着头皮输出,而是切到一个「保守兜底」答案:只陈述已经核实过的、可验证的行情区间,明确说明数据来源和货币,然后写明——在重新核对标的、或者明确展示推导过程之前,不生成买入价

这个动作叫 fail-closed(失败即关闭):出问题时默认走最保守的那条路,而不是硬撑着给个结论。金融场景里,一个诚实的「我不确定」比一个漂亮的错数字值钱得多。

第四,别把好人当坏人。 一个只会疯狂报警的检查器等于没有检查器。这个模块花了大量篇幅在排除误报,看它排除了什么,反过来能帮你理解什么才算「价格主张」:

  • 日期里的数字不算。「8 月 3 日」不能被当成 8 块和 3 块两个价格,中英文日期写法都专门做了识别。
  • 带单位的量不算。「100 股」「1 至 4 周」「3 个月」是数量和期限,不是价格。
  • 汇总金额不算。「100 股成本 820 元」说的是持仓总成本,拿它去和每股价格区间比是范畴错误。
  • 显式算式不拆。写成「(甲价 减 乙价) 除以 2」这种带括号的推导,会被当成一个整体读,而不是拆成几个孤立数字挨个质问。

代码注释里对最后一条还坦白了代价:如果一个每股数字只写成「成本 8.20」而没有任何单位或推导标记,它就查不到——这是精度和召回之间的取舍,只能靠溯源三件套那一关兜住。

没有一个检查器能同时做到不漏报和不误报。 知道自己的工具漏在哪,比相信它什么都能抓住重要得多。

一份能直接照着用的核验清单

不用搭系统。上面每条规则都能压缩成一句你在读 AI 输出时问自己的话。

必须回查的四类数字(这四类错了,结论一定错):

  1. 一切价格和市值 —— 股价、市值、成交额、历史高低点。
  2. 一切财务数字 —— 营收、利润、负债、现金流、增速。
  3. 一切时效性事实 —— 谁在管这家公司、并购完成没有、政策什么时候生效、产品还在不在卖。
  4. 一切身份信息 —— 这到底是哪家公司、哪个市场、哪个证券代码。

七问核验法(对着任何一个 AI 给出的关键数字问):

  1. 代码呢? 只给了公司名,没有带交易所后缀的完整代码 —— 不接受。
  2. 哪一天? 时效性数字没有日期 —— 不接受。
  3. 什么币? 涉及跨市场标的却没写货币 —— 不接受。
  4. 从哪来? 说不出具体来源(哪份公告、哪个数据接口、哪一页)—— 不接受。
  5. 查的还是算的? 分不清是原始数据还是模型推导 —— 让它把公式和输入列出来。
  6. 换个问法还一样吗? 关键数字换一种问法重问一遍,答案漂移 —— 高度可疑。
  7. 粗算对得上吗? 用几个数互相验:市值和股价、股本对不对得上;增速和两年的绝对值对不对得上。幻觉数字通常经不起两个数之间的乘除法。

这七问记在脑子里容易漏掉一两条。站内有一份更细的 AI 输出核验清单,按「必须回查/必须核原文/必须标时点」分档逐条勾选,把一段 AI 回答摆在旁边对着走一遍,没打勾的那行就是还没查的。

回查动作(问完之后真去做的事):

  • 价格和成交类:以交易所或券商行情为准,看清楚日期和复权方式。
  • 财务类:回到公司的原始公告文件本身,不看二手转述。留意报告期和公布日不是一回事。
  • 事件类:找带日期的官方披露,别信「据报道」。
  • 不可回查的,就不写进你的记录。 这条最重要。一个查不到出处的数字,留在笔记里迟早会被未来的你当成事实引用。

失效边界与常见误用

以为「让 AI 联网查」就没有幻觉了。 能查证不等于会查证。模型可能查了一半、可能把查到的内容和自己的记忆混在一起、可能引用了一个不相干的网页。带引用的输出还有一种特有的失败:引用是真的,但那篇文章里根本没有它说的那句话。所以引用要点开看,不是看有没有。

以为多问一个 AI 就能交叉验证。 两个模型可能训练在高度重合的语料上,会犯同一个错,还会给你「两边都这么说」的虚假安全感。交叉验证必须交叉到原始数据源,不是交叉到另一个模型。

把校验器的通过当成正确。 上一节说了,这类检查有明确的盲区——没写单位的每股数字、纯文字的定性判断、逻辑推理的对错,它一概不管。通过校验只意味着「没和已取回的证据打架」,不意味着「结论成立」。

只查数字,不查论证。 幻觉的重灾区在数字,但不止在数字。因果关系被凭空建立(「因为某事所以股价涨了」)、行业格局被想当然(「这家是龙头」)、风险被系统性低估——这些没有数字可核,只能靠你自己的常识和 风险评价 那套框架去掂量。

因噎废食。 反过来也不对。这类工具在整理资料、找线索、把一堆文件读成结构化摘要这些事上确实好用。正确的姿势不是不用,而是把它当成一个从不说「我不知道」的实习生:他的活你得验,但他确实能帮你干活。

🚧 避坑

最危险的不是它编,是它编得比真话更像真话。 一个真实数据源给你的数字,常常带着毛刺——奇怪的小数位、缺失的字段、对不上的口径。而幻觉给你的数字往往干净、完整、自洽。当一份 AI 报告读起来「什么都齐了、一点毛病没有」的时候,那不是质量高的信号,那是需要提高警惕的信号。

小结

  • 幻觉不是 bug,是这类工具工作方式的副产品:它优化的是「像对的」,不是「是对的」。它不会说「我不知道」。
  • 四种形态各有识别信号:凭空造数(换个问法答案就变)、张冠李戴(没给完整代码和货币)、猜测冒充事实(有数字没公式)、过时当现在(时效性陈述没有日期)。
  • 认真的系统怎么做:先锁标的身份再取数;拿未截断的原始工具结果做底本核对最终答案里的每个价格;强制答案写出代码、来源、货币三件套;推导数必须标注并出示公式;不过关就打回重写,反复不过就走保守兜底、拒绝给出结论。
  • 检查器必有盲区,误报治理和漏报同样重要。「通过校验」只等于「没和已有证据打架」。
  • 你的手动版本:四类数字必回查,七问核验法过一遍,查不到出处的数字不进笔记
  • 交叉验证要交叉到原始数据源,不是交叉到另一个模型。

一句话记住这篇:它说得越顺、越齐、越像那么回事,你越该去看一眼原件。

本文所引源码与注释均来自上述快照版本,是阅读代码得出的机制说明,不是运行结果;具体行为请以你手上那个版本为准。回 量化与 AI 投研概念库 看其它概念各自在说什么;本站内容为投资教育,不构成任何投资建议,边界见 免责声明

📄 来源 / 自校链接

本文为投资教育整理,关键数据与结论请结合下列权威来源验证。

内容有错、看不懂、或想看下一篇?告诉我们 →

本文为投资教育整理,不构成任何投资建议;不荐个股/基金、不预测点位、不承诺收益。关键数据与结论请结合权威来源自行验证,并见风险免责声明