- 人工智能
- AI Agent
- 金融科技
- AI 应用
- 大模型
- RAG
【免费下载链接】FinRobot
FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models
导读
Model Update(模型更新)是 FinRobot 开源 AI Agent 平台中equity-research领域的核心技能之一,用于在季度财报、管理层指引、宏观数据或分析师假设发生变化后,系统化地更新财务模型、修订前瞻估计、重算估值并标注实质性变化。本指南以 model-update/SKILL.md 为骨架,结合仓库中技能加载、注册与编排的源码实现,完整还原该技能定义的六步工作流、数据表结构与专业注意事项,让读者既能直接照表操作,也能理解 SKILL.md 在 FinRobot 技能系统中如何被解析、检索和调用。
一、认识 SKILL.md:FinRobot 技能的原子载体
在 FinRobot 中,每个技能都是一个独立目录下的SKILL.md文件,采用"YAML Frontmatter + Markdown 正文"的标准结构。model-update/SKILL.md 的头部元数据完整定义了该技能的标识与调用方式:
--- id: model-update name: Model Update version: 1.0.0 author: anthropic domain: equity-research description: Update financial models with new data — quarterly earnings, management guidance, macro changes, or revised assumptions... triggers: - update model - plug earnings - refresh estimates - update numbers for [company] - new guidance - revise estimates requires_data: [] requires_tools: [] requires_skills: [] compatible_models: [] ---这些字段并非装饰,而是被 FinRobot 技能系统逐项解析。在 engine/skills/spec.py 中,Skill数据模型严格对应这些字段:id、name、version、author、domain用于标识与归类;triggers是触发词列表(如 "update model"、"plug earnings"、"refresh estimates");requires_data、requires_tools、requires_skills、compatible_models声明依赖(当前均置空,表示该技能可独立运行);full_content保存 Frontmatter 之后的完整 Markdown 正文,source_path记录文件系统路径。
解析逻辑位于 engine/skills/loader.py:_parse_frontmatter通过首行---定位 YAML 块并用yaml.safe_load解析,id与name为必填字段,缺失即抛出SkillLoadError;description优先取 Frontmatter,否则回退到正文第一段非标题段落。这一设计保证了即使上游来源格式不完整,技能仍能加载。而 scripts/convert_skills.py 则是从上游"Anthropic 金融服务插件"批量转换技能格式的官方脚本,支持无 Frontmatter(Format A)与 YAML Frontmatter(Format B)两种源格式,自动抽取 description 中的引号短语作为triggers,并从目录结构推断domain。
技能如何被检索与激活
engine/skills/registry.py 中的SkillRegistry会递归扫描技能目录下所有**/SKILL.md文件,逐个加载并建立id → Skill索引。其search(query)方法采用三级打分排序:技能名命中得 3 分、触发词命中得 2 分、描述命中得 1 分,得分相同的按 id 排序。这意味着当用户说出 "update model"、"refresh estimates" 等triggers中的短语时,Model Update 技能会以较高优先级被召回。
在 CLI 侧,cli.py 提供了skills list与skills search <keyword>两个管理命令;技能目录位置由配置项skills_dir控制,可通过环境变量FINROBOT_SKILLS_DIR覆盖,默认值在 paths.py 的default_skills_dir()中按打包环境解析(见 config.py 的运行时解析逻辑)。
二、Step 1:识别变化来源(Identify What Changed)
任何模型更新都始于"明确什么变了"。SKILL.md 将更新触发器归纳为五类,这决定了后续数据接入与估计修订的方向:
| 触发器类型 | 典型场景 | 对模型的直接影响 |
|---|---|---|
| Earnings release | 季度财报发布 | 接入新季度实际值,替换当期估计 |
| Guidance change | 公司更新前瞻指引 | 修订未来各期收入/盈利路径 |
| Estimate revision | 分析师基于新数据调整假设 | 更新增长率、利润率等关键假设 |
| Macro update | 利率、汇率、大宗商品价格变动 | 影响 WACC、汇率换算、成本项 |
| Event-driven | 并购、重组、新产品、管理层变动 | 可能触发模型结构级重构 |
在 FinRobot 的自动化流水线中,这一步骤对应 engine/skills/pipeline_methodology.py 所强调的纪律:没有当前业绩上下文就不要推断季度变动或一致预期差异。对 Model Update 这类交互式技能,由于未被收录进_PIPELINE_SAFE_METHODOLOGY白名单,流水线渲染时按render_pipeline_methodology的兜底逻辑直接使用原始full_content正文(见pipeline_methodology.py#L184-L186),因此交互环境中的完整工作流原样可用。
三、Step 2:接入新数据(Plug New Data)
财报发布后的实际值接入
以季度实际数替换模型中的当期估计,SKILL.md 给出了标准对照表,务必逐行填写:
| Line Item | Prior Estimate | Actual | Delta | Notes |
|---|---|---|---|---|
| Revenue | ||||
| Gross Margin | ||||
| Operating Expenses | ||||
| EBITDA | ||||
| EPS | ||||
| [Key metric 1] | ||||
| [Key metric 2] |
表中Delta应量化呈现(例如 "营收超预期 120M 或 3%"),Notes记录差异归因——这与同一领域 earnings-analysis/SKILL.md 中"beat/miss 分析必须先量化差异再解释原因"的要求一脉相承。
分部明细(Segment Detail)
- 逐分部更新收入与利润率
- 记录分部结构(mix)的迁移——即使总盘不变,产品/地区占比变化也会改变整体利润率与估值
资产负债表与现金流量表更新
- 现金与债务余额
- 股本数(回购、稀释)
- 资本开支(Capex)实际值 vs. 估计值
- 营运资本变动
实操提示:在 FinRobot 生态中,此类财务数据的抽取可借助同仓库的 XBRL/SEC 解析管线(见 finrobot/data_source/ 下 providers 与 normalize 模块),将历史财务事实以确定性方式注入模型,避免从模型记忆凭空生成数字。
四、Step 3:修订前瞻估计(Revise Forward Estimates)
基于新数据调整未来各期估计,SKILL.md 提供"当年 + 下一年"的双期对照框架:
| Old FY Est | New FY Est | Change | Old Next FY | New Next FY | Change |
|---|---|---|---|---|---|
| Revenue | |||||
| EBITDA | |||||
| EPS |
关键假设变更记录(Key Assumption Changes):
- 明确"改了什么假设、为什么改"
- 收入增长率:old → new(附原因)
- 利润率假设:old → new(附原因)
- 新增项目:重组费用、一次性收益等非经常性项目
修订时必须先与公司已披露数据对账(reconcile),再外推未来——这与仓库中 audit 测试族所验证的"财务数据必须与权威口径(SEC/财报)对账"的工程化理念一致,例如test_canonical_contract_traceability.py对口径可追溯性的强制约束。
五、Step 4:估值影响测算(Valuation Impact)
用修订后的估计重算估值,SKILL.md 要求至少覆盖三种方法并显式给出变化:
| Valuation Method | Prior | Updated | Change |
|---|---|---|---|
| DCF fair value | |||
| P/E (NTM EPS × target multiple) | |||
| EV/EBITDA (NTM EBITDA × target multiple) | |||
| Price Target |
值得强调的是,估值重算必须基于确定性模型输出。FinRobot 仓库中engine下存在完整的 DCF、comps、DDM 等计算模块(对应测试如 test_dcf.py、test_comps_pipeline.py),而 pipeline_methodology.py 对dcf-model、comps-analysis的流水线安全版均明确要求:"所有 DCF 输入、WACC、终值、敏感性及隐含价格数字必须来自确定性财务建模输出,禁止在 LLM 步骤中计算公式"。因此,交互式更新时可以自行演算敏感性,但在自动化报告中应引用上游确定性数据,避免模型幻觉。
六、Step 5:总结与行动(Summary & Action)
估计变更摘要(Estimate Change Summary):
- 用一段话说明:什么变了、为什么变、对股票意味着什么
- 判断这是论点级变化(thesis-changing)还是噪音(noise)
评级 / 目标价:
- 维持还是调整评级?
- 新目标价(如有变化)及其方法论
- 相对现价的上行/下行空间
这一判断纪律与仓库中 skills/equity-research/thesis-tracker/SKILL.md 的思路一致:将催化剂与能够证实或证伪论点支柱的证据点绑定,把风险表述为"论点失效条件",用说服力语言(strengthening / neutral / weakening / under review)标记信心变化。
七、Step 6:交付物(Output)
SKILL.md 规定更新完成后应产出三类交付物:
- 更新后的 Excel 模型(当用户提供了既有模型文件时)
- 估计变更摘要(Markdown 或 Word)
- 更新后的目标价推导(updated price target derivation)
在 FinRobot 的技能体系中,输出环节还可与其他技能联动:报告撰写可复用 initiating-coverage/SKILL.md 中的 DOCX 组装规范,图表生成参照其 Task 4 的 300 DPI 出图标准;若用户需要的是完整财报点评,则切换至 earnings-analysis/SKILL.md 所定义的 8-12 页、3000-5000 字的快速更新报告流程(其与 initiation 报告在篇幅、表格数、图表数、周转时间的差异对照表见该文档)。
八、重要注意事项(Important Notes)
SKILL.md 在结尾列出六条专业纪律,这是该技能区别于普通数据处理脚本的核心价值:
- 先对账再外推:向前预测前,务必把估计与公司已报告数字核对一致;
- 标注口径:识别非经常性项目,明确估计是 GAAP 口径还是调整后(adjusted)口径;
- 保留修订历史:记录估计修订轨迹,它体现分析的演进逻辑;
- 区分信号与噪音:季度数据嘈杂时,要在估计变更中剥离一次性因素;
- 对照一致预期:更新后检查你的估计与 Street 共识的偏差;
- 股本数至关重要:股票薪酬、可转债、回购带来的稀释会实质影响 EPS。
最后一条在 FinRobot 的工程实现中有直接呼应:仓库 unit 测试 中test_market_cap_consistency.py、test_share_count相关用例验证了股本口径在估值链路中的一致性,任何对 share count 的修订都会被估值模块忠实传导。
九、在 FinRobot 中使用 Model Update 技能
触发方式
直接使用triggers中的短语与 Agent 对话即可唤醒技能,例如:
- "update model for [公司]"
- "plug earnings for [公司]"
- "refresh estimates for [公司]"
- "revise estimates after new guidance"
也可显式指定:Use model-update skill for [Company] after Q3 earnings。
前提与限制
- 该技能用于已覆盖公司的定期更新;若公司尚未覆盖,应先行使用 initiating-coverage 建立首次覆盖模型;
- 若仅需快速财报点评而非模型更新,应使用 earnings-analysis;
- 技能声明
requires_data: []、requires_tools: [],即无硬性外部依赖,但最佳实践是让用户提供既有 Excel 模型与最新财报/指引数据,模型更新的质量上限取决于输入数据的完整性。
技能管理命令
- 查看全部可用技能:
finrobot skills list - 关键字检索技能(如
model update):finrobot skills search <keyword> - 技能目录未找到时会提示先运行
convert_skills.py完成转换(参见 cli.py 与 scripts/convert_skills.py)。
结语
Model Update 技能回答了投研中一个高频问题:财报/指引/宏观数据变了,模型该怎样系统化地更新?它的六步工作流(识别变化 → 接入数据 → 修订前瞻 → 重算估值 → 总结行动 → 交付产物)既是一份可直接照做的操作清单,也是检验更新质量的自检框架。在 FinRobot 中,它以标准化 SKILL.md 形式被 loader、registry 加载注册,可通过触发词被检索召回,并能在流水线模式下与确定性财务计算、审计测试共同构成"先对账、后外推、再估值"的完整闭环——这正是开源 AI Agent 平台将投研方法论工程化的具体体现。读者可直接对照仓库中的 model-update/SKILL.md 原文、测试用例 与相关技能文档,进一步验证并扩展这套更新流程。
- 人工智能
- AI Agent
- 金融科技
- AI 应用
- 大模型
- RAG
【免费下载链接】FinRobot
FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models
相关推荐
financial-services 项目 model-update 技能详解:以财报与指引驱动估值模型更新的六步工作流
financial services 项目 model update 技能详解:以财报与指引驱动估值模型更新的六步工作流 导读 本文围绕 financial s
人工智能AI 应用AI 技能/插件AI Agent金融科技Model Update 技能深度解析:earnings-reviewer 模型更新工作流实战指南
Model Update 技能深度解析:earnings reviewer 模型更新工作流实战指南 <output_article 财报驱动下的模型更新实战指南
人工智能AI 应用AI 技能/插件AI Agent金融科技financial-services 仓库 equity-research 插件 model-update 命令解析:从财报注入到估值重算的模型更新完整工作流
financial services 仓库 equity research 插件 model update 命令解析:从财报注入到估值重算的模型更新完整工作流
人工智能AI 应用AI 技能/插件AI Agent金融科技
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考