AI投研技能固化:从模糊对话到可复核的财务筛选工作流 搞了近一年的 AI 辅助投资研究我最想分享的不是某个模型有多强而是把整套研究流程固化成一个“AI投研 skill”以后效率才真正开始变化。以前我也喜欢临时开个对话让模型“分析一下某公司”但生成的质量像开盲盒今天思路清楚、明天满嘴跑火车。现在我把筛选规则、分析步骤、输出格式全部写进 skill 文件每次调用得到的结果都稳定在一条可检查、可核对的基准线上。这篇文章适合已经用 AI 做研究、但还没摸清“skill 到底怎么用”的朋友也适合想尝试把投研流程自动化的同行。1. 为什么投资研究是验证 AI skill 最合适的场景1.1 投研工作里最耗时的部分恰好是重复动作很多非投研的朋友以为研究员的日常工作就是天天挖独家信息、写深度观点。实际干了几年就知道真正占用时间的反而是那些标准化动作拿到一份财报先算 ROE、毛利率、营收增速再查历史估值区间然后翻公告、找风险点最后把结论套进公司自己的研究模板。这个过程是有序的却极其枯燥很容易因为当天状态不好而漏掉关键环节。AI 天生适合干这件事前提是它得知道你的固定流程是什么。普通对话做不到这一点因为模型每次只会根据你当前这句话自由发挥。你把二十年的“财务筛选经验”塞进一个 prompt再让它按部就班执行结果通常是灾难模型会自作主张换指标、改阈值甚至在数据不足时脑补结论。我后来想明白一个道理——模型不缺知识缺的是“流程纪律”。而 skill 这个形式恰好能把流程纪律强加给模型。skill 在这里不是指模型的一个功能按钮而是把提示词、处理规则、工具调用方式、输出模板打包成一整套可重复启动的工作流。对投研来说工作流稳定比什么都重要。1.2 skill 和普通提示词本质上是两种东西用一个接地气的类比普通提示词是一张便利贴上面写着“帮我看下这份财报”skill 则是一份 SOP 手册里面写清楚了“第一步读数据表第二步按哪些指标筛选第三步输出什么格式的备忘录”。便利贴和 SOP 手册带给执行者的稳定性差距不用我多说。早期我试着把整套投研规则塞进一个超长系统提示词里结果有两个问题。第一上下文窗口被塞满模型回答质量肉眼可见下滑第二每次想微调一个阈值都要从一大段提示词里找到对应位置修改维护成本极高。skill 的优势是把规则拆成结构化文件主文件只写流程具体公式、表格、模板放在子文件里按需加载。对于投研这种强审计属性的领域这个差异更加致命。一份研究结论能不能用不只看结论本身还要看推导过程是否完整、引用数据是否可追溯。普通提示词产生的结论经常找不到出处而 skill 可以在规则里强制模型在每个判断后面标注数据来源和计算过程让结果经得起复核。2. 动手拆管线我把投研流程分成五个阶段写 skill 之前我没急着打开编辑器而是先把日常研究工作拆成了五个阶段。这一步看起来琐碎实际上决定了整个 skill 的上限。因为 skill 本质上是对你工作流程的“编码”流程本身理不清写出来的 skill 只会让 AI 更混乱。2.1 研究范围界定先告诉 AI 研究谁、不研究谁很多 AI 投研失败败在最开始就让模型自己决定研究对象。比如你问“看看消费行业有什么机会”模型可能随机挑几家知名度最高的公司然后泛泛分析最后给出一个放在哪个行业都成立的结论。这就是典型的范围失控。我的做法是把范围界定作为技能的第一步并设计成强制参数。调用 skill 时必须提供标的池哪些公司、时间窗口看哪几年的数据、排除项比如剔除 ST、剔除刚上市不满一年的公司、重点关注行业或赛道。如果这些参数缺失skill 必须先追问补齐而不是直接开始分析。这个设计背后的原因很简单投研最重要的不是“模型多聪明”而是“问题问对了没有”。范围界定不清后面的所有分析都是空中楼阁。我在 skill 的初始规则里会写一句狠话“如果你不知道研究对象是谁请停止分析并列出缺失参数。”2.2 数据采集与预处理模型的短板用外部文件补任何模型都不掌握实时行情和最新财报的完整细节训练数据再新也有知识截止。所以我不指望模型自己“知道”数据而是先把数据整理成标准文件喂给它。这个阶段在 skill 里对应两个动作一是读取外部数据文件二是对数据质量做基础校验。我通常准备一张 CSV 或 Markdown 表格列包括公司名称、年度、ROE、营收增速、毛利率、经营现金流、资产负债率、当前市盈率分位等。更重要的是我会在数据文件里显式标注“数据来源XX数据库更新日期XX”。别小看这两行字它能让模型在后续输出结论时自动引用来源不至于把数据裸奔着就抛出来。预处理阶段还有一个常被忽略的步骤检查单位。有的表里营收是亿元有的是万元模型如果没被提醒很容易在计算时产生数量级误差。我会在 skill 规则中写明“拿到表格先检查所有数值的单位统一后再开始后续筛选”。2.3 财务质量初筛先用硬规则过滤再让 AI 做判断我一直坚持“规则在前AI 在后”的顺序。财务筛选这种标准化工作完全可以用硬性阈值先跑一遍AI 只需要执行并解释结果而不是自由发挥创造新指标。我的初始规则里通常会写这样一组阈值条件ROE 连续三年大于 15%营收增速最近一年不低于 10%毛利率不低于 30%经营现金流为正且与净利润比例大于 0.8资产负债率低于 60%金融行业单独处理当前 PE 处于近五年 50% 分位以下把这些写进 skill 之后模型做筛选时就不太容易跑偏。因为规则是白纸黑字的模型只需要按顺序逐行判断然后生成一张“达标/未达标”清单。我碰到的最蠢情况是模型自己发明“营收质量评分”之类的指标看起来高级实际上没有定义、没法验证纯属废话文学。硬规则就是用来防这个的。2.4 业务逻辑与风险推演让 AI 按问题清单来财务数据通过初筛只代表它“过去值得看”不代表未来值得投。接下来是业务分析和风险推演这部分我认为不该完全交给 AI 自由发挥而是给它一张固定的问题清单让它逐个回答。我设计的核心问题包括主营业务是什么收入驱动因素有哪些与竞争对手比核心差异点在哪里行业景气度所处周期位置最大三个风险点分别是什么如果公司未来一年营收下滑 20%会出现在哪种情形下。模型逐个回答每回答一个必须引用前面数据表格或公开资料作为证据。这样做的效果是把“发散讨论”变成“结构化试探”。模型仍然会发挥它的推理能力但至少在一个受控的框架内发挥不会东拉西扯。风险部分尤其重要因为 AI 天然有“报喜不报忧”的倾向如果不强制它单列风险清单它很容易写出一篇只有买入逻辑的软文。2.5 输出格式固定化让每份研究备忘录长得一样最后一步是定义输出模板。我的 skill 会在结尾输出统一格式的 Markdown 备忘录包含以下几节结论摘要核心指标表财务筛选结果业务逻辑分析风险清单待核实事项。其中“待核实事项”这一节是我后来加的也是我认为最有价值的一节。AI 无法核实的公告、调研纪要、线下渠道信息我都会要求模型在这一节列出来而不是默默忽略。比如“该公司海外收入占比 30%但财报附注未披露分地区明细需人工核查年报原文”。这就是在逼 AI 承认自己的能力边界对投资决策来说比它硬装出“全知视野”要安全得多。3. skill 文件实战一个最小可用投研 skill 的完整写法流程理清之后就可以开始写实际文件了。这一节的内容是我自己反复调整后的结果可以直接抄去改省掉不少踩坑时间。需要先说明的是Claude、Cursor、Codex 这些工具的 skill 加载方式有差异但底层文件结构高度相似把核心逻辑搞明白迁移成本很低。3.1 目录结构与元信息我习惯把一个投研 skill 放在独立目录里主文件命名要求是 SKILL.md。目录里至少包含 SKILL.md 和 references 子目录后面可以放模板、术语表、样例输出。整体结构大概是investment_research/ ├── SKILL.md ├── references/ │ ├── output_template.md │ └── financial_terms.md └── scripts/ └── validate_data.pySKILL.md 的开头是 YAML 格式的 frontmatter用来声明技能名称、描述、需要的工具权限。这个部分不同平台解析逻辑不完全一样但字段意思差不多。我用的最小写法如下--- name: investment_research description: 按固定流程执行公司财务筛选、业务分析与投资备忘录起草。当用户提供公司名单和财务数据文件时使用。 tools: - file_read - search - python ---这里要特别注意 description 的写法。它决定了模型在什么场景下会主动想到调用这个 skill。我最初写的是“帮助分析公司”结果模型经常在用户没提数据文件时也硬加载这个 skill输出一堆没依据的内容。改成“当用户提供公司名单和财务数据文件时使用”之后误触发率明显下降。3.2 指令主体把阈值、公式、约束写成硬规则frontmatter 后面就是 markdown 格式的指令正文。我的习惯是先用一段话说明这个 skill 的使用前提然后把流程拆成编号步骤最后把关键公式和约束条件单独列节。核心逻辑是让模型按一个线性流程走而不是让它自己决定下一步干什么。# 投研任务流程 执行步骤 1. 读取用户提供的公司清单和财务数据文件。 2. 检查所有数值单位统一为亿元或万元如有歧义先询问用户。 3. 按财务筛选规则计算指标并标记达标或未达标。 4. 打开 references/financial_terms.md 术语表确保使用标准术语。 5. 对达标公司逐个执行业务分析问题清单。 6. 使用 references/output_template.md 生成最终备忘录。 7. 输出“待核实事项”明确说明哪些信息需要人工进一步确认。 # 财务筛选规则 以下阈值默认不可修改除非用户明确要求覆盖 - ROE 15%近三年均满足 - 营收增速 10%最近报告期 - 毛利率 30% - 经营现金流与净利润比例 0.8 - 资产负债率 60%金融行业另行处理 - PE 分位 50%近五年 # 计算约束 所有财务指标必须从输入数据文件实际数值计算禁止引用模型记忆中的数值。 每个指标的计算过程必须展示中间步骤格式例如 ROE 净利润 / 净资产 5.2亿 / 34.8亿 14.9%这一段是 skill 的灵魂。我特别强调“禁止引用记忆中的数值”这一条因为模型太容易把训练数据里学到的某家公司财务数据混进来甚至把行业平均数据当成目标公司数据。加了这一条之后错误率显著下降但也不能 100% 消除后面我会在踩坑部分继续聊怎么补救。3.3 安装与加载Claude、Cursor、Codex 的差异处理关于安装我知道很多人搜过“cursor 怎么安装 skill”或者“claude 如何写一个完善的 skill”这里我根据实操经验做一个横向说明。Claude 生态里skill 通常放在专门的 skills 目录下目录内直接放 SKILL.md 即可重新启动会话后模型可以通过描述识别并加载。Cursor 的实现和项目级规则绑定更紧密语言模型会在识别到相关任务时自动读取对应 skill 文件也可以手动引用路径。Codex 提供了 skill 导入命令可以把外部 skill 目录注册到本地执行环境。因为这三家的目录格式和权限模型都在快速迭代具体路径我不建议死记真正该记住的是四个通用检查点确认 skill 文件夹命名符合规范确认 frontmatter 的 name 字段与文件夹名一致确认 skill 描述里没有歧义确认引用的子文件路径是相对路径。很多安装失败最后查出来就是因为多了一层目录路径没对上。4. 实际跑一遍从公司池筛选到生成研究备忘录理论拆了不少下面放一个我最近实际跑过的精简案例。我会模糊掉公司和行业细节只看流程怎么走。4.1 准备一份干净的数据表我先构建了一个包含十家公司的样本数据表字段包括公司代码、年度、ROE、营收增速、毛利率、经营现金流/净利润、资产负债率、PE 分位。实际格式是 CSV这里示意性地展示两行公司代码,年度,ROE,营收增速,毛利率,现金流利润比,资产负债率,PE分位 A001,2024,18.2,12.5,42.1,1.1,38.5,43 A002,2024,9.4,6.8,25.3,0.6,71.2,67这张表本身不复杂但我在表头右侧备注了一行“单位均为百分比现金流利润比为比值PE 分位 0-100”。这个小动作帮了大忙。模型如果不清楚 PE 分位是什么含义极有可能把 43 当成市盈率绝对值然后嘀咕一句“43 太高了”。4.2 调用 skill 并查看执行情况在对话框里我输入的命令非常简单“运行 investment_research处理附件中的公司数据和财务表目标是对十家公司完成初筛并对初筛通过的公司生成备忘录。” 因为 skill 描述写的是“当用户提供公司名单和财务数据文件时使用”模型这次准确地加载了投研 skill 而不是空谈。运行结果分为四段第一段列出数据校验结果提醒“A003 年度字段均为 2024无历史三年数据无法计算连续 ROE 条件”第二段输出硬指标筛选清单给每个公司打上达标/未达标标记第三段对达标公司按问题清单逐条分析第四段生成备忘录初稿并在每节后标注来自数据文件的字段名或对外部资料的引用占位。第一次跑我看到的问题先是数据校验不足模型没有发现 A005 的营收单位是万元、其他公司是亿元导致它的增速计算严重失真。后来我在 skill 里明确加了“检查单位是第一步操作”这个错误才被堵住。4.3 人工复核与引用追溯跑完之后我不会直接读结论而是先抽查两步。第一随机抽一家被标记为“达标”的公司手工计算它的 ROE 是否满足条件第二抽查“待核实事项”一节是否包含实质内容而不是一句通用的“需要进一步研究”。我经历过一次模型把一家明显高负债公司“放行”的情况。原因不是阈值写错而是模型读取 CSV 时把资产负债率 61.5 的数值四舍五入成了 60刚好踩线通过。这就是为什么 skill 里要强制列出中间计算过程——只有让它把数字一步步写出来复核的时候才能发现这类隐蔽错误。那次之后我把所有数值判断规则从“四舍五入到整数再比较”改成了“保留一位小数再比较”并且写死为默认规则。这类案例给我的结论是AI skill 不是用来代替研究员判断的而是把研究员从繁琐计算中解放出来让人的精力聚焦在“模型为什么这样判断”和“这个判断是否合理”上。换句话说skill 让复核有了更明确的靶子。5. 实操中反复踩过的坑与我的补救方案这部分最想写因为网上讲 skill 文件格式的教程很多但真正用 in 真实业务时踩到的坑很少有人系统总结。我梳理了五个高频问题每个都带解决方案。5.1 财务计算幻觉模型会自信地“编”出数字最坑的坑没有之一。模型在长文本计算中特别容易迷失尤其是当表格里有几十行数字时它经常把某家公司的净利润抄到另一家头上或者从训练记忆里直接拉出一个并不存在的“行业参考值”。更麻烦的是它生成的结果看起来完全正常连小数位都长得像算过一样。我的补救措施分三层。第一层是在 skill 里写死计算约束强制展示中间步骤不允许直接给结果。第二层是准备一个 python 校验脚本让模型在输出结论前自动跑一遍指标计算把脚本结果和它手算的结果做交叉比对。第三层是每次调用后我再抽查关键指标建立“至少手工验证一家公司”的默认动作。三层叠加之后计算类错误从频繁发生降到了偶尔发生而偶尔发生的那几次基本都是源数据本身有误。5.2 skill 文件越维护越臃肿早期我贪心一个 skill 文件里塞了行业分析、个股筛选、财报解读、估值模型、风险提示、输出模板最后整个文件超过两千行。执行时模型根本抓不住重点经常被前面的大段背景知识干扰甚至漏掉最关键的阈值判断。后来我做了拆分把不同用途分成独立 skill或者在同一 skill 目录下按功能拆成多个子文件主 SKILL.md 只描述流程和触发条件具体规则用“按需读取 references/xxx.md”的方式加载。比如财务筛选规则单独一个文件输出模板单独一个文件术语表单独一个文件。这样既保证了主文件的轻量也让模型需要时才读取不占用过多上下文。5.3 中文金融术语被 AI“同义替换”投研领域术语非常精确“扣非净利润”和“净利润”在分析含义上差距很大但语言模型在生成时经常会自行替换成看起来更通顺的同义表达。比如一家公司的政府补助占利润比例较高模型可能在后面分析时描述成“盈利能力强劲”完全偏离了原意。我的方案是在 skill 里附带一个术语表文件并且明确规定必须使用表内术语禁止改写。术语表里列了至少 40 个我日常报告中必须保持一致的说法例如“经营活动产生的现金流量净额”不许简写为“经营现金流”以外的表达。同时要求如果模型在资料里看到意义相近但不完全相同的术语必须保留原文并在括号里标注可替换说法。5.4 不同模型跑同一个 skill结果差异很大同一个 skill 文件放在不同模型上输出质量能差出一大截。倒不是效果衰减而是有的模型对“工具调用”理解更到位有的模型则会跳过某些步骤。尤其是当 skill 里同时包含“读取文件”“运行脚本”“搜索网页”三种能力时不同模型对执行的次序理解完全不同。我的应对是两件事。第一把强指令写得更啰嗦必须明确写“先读取再计算后搜索最后生成输出”不接受跳步执行第二在 skill 的 expected behavior 一节中给出一个“正确执行案例”和“错误执行案例”用少样本方式教模型理解流程。给案例的成本很低但对对齐多个模型行为非常有效。5.5 输出太流畅反而更危险最后这个坑可能大多数人意识不到当 AI 生成的研究报告太完整、太专业时人会本能地放松警惕。特别是深度学习生成的长文结构工整、逻辑连贯很容易掩盖证据不足的实质。我自己就犯过这种错差一点直接把一篇“看起来很完美”的 AI 备忘录发出去后来核对时才发现里面引用的大部分数据是从训练集记忆里来的根本不是用户提供的那份表格。之后我在 skill 里加了一条铁律所有与数据相关的结论必须标注数据来源行号或描述凡标注不出来源的必须移入“待核实事项”一节。这条规则让输出从“华丽流畅”回归到“可追溯的粗糙”虽然读起来没那么顺滑但每一句话都有下落。问题表现常见原因我的补救方案财务数字与原始表不一致模型从记忆直接引用强制展示中间计算步骤加 python 脚本交叉验证skill 文件执行混乱文件过长、规则太多拆分子文件主文件只写流程和触发条件专业术语被随意替换模型追求“通顺表达”附术语表并禁止改写保留原文不同模型行为不一致模型对工具调用理解不同在 skill 中加入正确与错误执行案例输出过度流畅但证据不足模型用训练记忆补细节强制数据来源标注无法标注则列入待核实事项6. 从单个 skill 到一套投研技能体系如果只是固化一个流程单个 skill 已经够用了。但真实工作不会这么简单因为投研场景变化快数据来源多一个 skill 包打天下必然变得臃肿。我现在维护的是一组 skill彼此独立必要时由主调度 skill 串联使用。6.1 技能分组别再试图写一个“全能投研 skill”我目前维护几个核心 skill数据清洗 skill负责读入各种格式的数据文件并统一字段、单位、时间口径财务初筛 skill负责执行硬阈值筛选并输出达标清单舆情与公告排查 skill负责根据目标公司名单搜索公开信息提取风险线索报告生成 skill负责按我的固定模板起草备忘录。这样的分组方式让每个 skill 保持轻量也方便单独调试。某个阈值想改时我只需要改财务初筛 skill不会牵扯其他模块。如果某天模数据格式大变数据清洗 skill 单独修复就可以了其余部分可以继续运行。6.2 多技能协作与跨平台迁移多个 skill 之间如何串联也很考验设计。我一般会有一个“调度指令”或一个主 skill明确告诉模型“如果任务以筛选为主调用财务初筛如果需要生成报告先检查数据清洗是否完成”。这里没人比我更适合当路由中枢因为生产环境里的分支条件往往比模型想象中更复杂。跨平台迁移时提示词内容基本可以复用但有两处必须重新适配。第一工具权限声明字段不同平台差异很大第二外部脚本路径原来是绝对路径换到新环境后要改成相对路径或者重新配置。我迁移过几次深刻体会到“保留一份纯文本版本的 SKILL.md”有多重要——它可以作为所有平台格式转换的中转站核心逻辑都不会丢。6.3 维护节奏与我的经验体会最后说点维护层面的事。skill 不是写一次就完事了需要随着数据字段、分析偏好、甚至监管要求变化定期调整。我的习惯是每两周回顾一次所有 skill问自己三个问题最近是否有人工修正过输出结果这些修正有没有反映到规则里有没有因为新数据格式导致某个步骤失效写到这里我再说一个小经验第一次做 skill 时你大概率会想加很多精细规则来应对所有可能情况但我的建议恰恰相反先把最常用的 20% 固化成 skill跑通以后再慢慢加。我早期那个两千行的失败版本就是因为在还没跑通基础流程时就幻想覆盖所有边缘情况。从最小可用开始边用边补效率最高。现在很多新入局的朋友一上来就问哪个平台的 skill 更强我反而觉得平台的差异远没有“你是否真正理清了自己的流程”重要。投研 skill 的本质是把研究员的经验、纪律和边界感复制给模型。只要这一步做好了不管未来模型换得多快你留下的这套工作流资产都不会贬值。