用 Claude Custom Skill 构建财务报表比率分析器:从 SKILL.md 到可落地的财务分析引擎
2026/9/8 17:54:16 网站建设 项目流程

用 Claude Custom Skill 构建财务报表比率分析器:从 SKILL.md 到可落地的财务分析引擎

【免费下载链接】claude-cookbooksA collection of notebooks/recipes showcasing some fun and effective ways of using Claude.项目地址: https://gitcode.com/GitHub_Trending/an/claude-cookbooks

Claude Skills 允许开发者以"目录 + SKILL.md + 可执行脚本"的形式,把特定领域的专业知识打包成可被 Claude 动态加载的能力。本篇文章以 claude-cookbooks 仓库中的 analyzing-financial-statements 自定义技能为完整范本,讲解如何设计一份财务比率计算技能——包括六大类财务比率的指标体系、输入输出约定、两条核心 Python 脚本的计算原理,以及如何在 Jupyter Notebook 中把它上传、测试并用于实际投资分析。读完本文,你将掌握自定义财务分析类 Skill 从目录结构、Frontmatter 编写到代码实现的完整方法论。

技能目录与 Frontmatter:Skill 的"身份证"

Custom Skill 的目录结构遵循统一约定,SKILL.md是唯一必需文件,其余脚本、资源均为可选。analyzing-financial-statements 目录下共包含三个文件:

skills/custom_skills/analyzing-financial-statements/ ├── SKILL.md # 技能说明(必需):Frontmatter + 指令正文 ├── calculate_ratios.py # 计算引擎:全部财务比率的计算实现 └── interpret_ratios.py # 解释模块:行业基准对比、趋势分析与报告生成

SKILL.md开头是 YAML Frontmatter,定义了 Claude 在**加载阶段(Metadata Stage)**最先看到的两项信息,它们决定了技能何时被检索、被调用:

--- name: analyzing-financial-statements description: This skill calculates key financial ratios and metrics from financial statement data for investment analysis ---

按仓库 Notebook 与 Skills 文档规范,name采用小写字母与连字符(本技能即analyzing-financial-statements),建议控制在 64 字符内;description用于能力描述与触发匹配,建议不超过 1024 字符。Frontmatter 之下才是指令阶段的正文:能力清单、使用步骤、输入输出格式、最佳实践与局限性——这些构成了 Claude 执行任务时的行为准则。

渐进式披露(Progressive Disclosure)机制贯穿始终:元数据阶段始终可见以触发匹配;指令阶段(SKILL.md等所有.md文件)在主题相关时才加载;calculate_ratios.pyinterpret_ratios.py等脚本属于资源阶段,仅在需要执行计算时才按需读取。这正是该技能把"知识"与"代码"分层放置的设计逻辑。

能力边界:技能覆盖的六大财务比率体系

SKILL.md的 Capabilities 一节给出了技能的完整计算域。技能的定位是"财务健康体检",覆盖公司经营分析的常见维度:

类别包含比率分析意义
盈利能力(Profitability)ROE、ROA、毛利率、营业利润率、净利率企业赚取利润的能力与股东回报水平
流动性(Liquidity)流动比率、速动比率、现金比率短期偿债能力与营运资金充足度
杠杆/偿债(Leverage)资产负债率(Debt-to-Equity)、利息保障倍数、偿债覆盖率资本结构与长期偿债风险
运营效率(Efficiency)资产周转率、存货周转率、应收账款周转率资产使用效率与营运管理质量
估值(Valuation)P/E、P/B、P/S、EV/EBITDA、PEG市场对公司的定价水平与相对贵贱
每股指标(Per-Share)EPS、每股净资产、每股股息普通股股东视角下的收益与权益

这些分类并非只停留在文档层面,而是完整映射到了 calculate_ratios.py 中FinancialRatioCalculator类的五个分组方法上:calculate_profitability_ratios()(L33)、calculate_liquidity_ratios()(L61)、calculate_leverage_ratios()(L82)、calculate_efficiency_ratios()(L106)与calculate_valuation_ratios()(L130)。因此,只要补充每股股息口径的数据字段,技能便可覆盖文档声明的全部指标。

三步使用流程与真实输入格式

SKILL.md把技能的交互收敛为三个步骤:输入报表数据 → 指定要计算的比率(或使用 "all")→ 获得计算结果与行业解读。典型触发语句包括:

"Calculate key financial ratios for this company based on the attached financial statements" "What's the P/E ratio if the stock price is $50 and annual earnings are $2.50 per share?" "Analyze the liquidity position using the balance sheet data"

技能可接受的输入格式有四种:财务科目行的CSV、结构化报表的JSON、关键财务数据的文本描述,以及含财务报表的Excel 文件。其中 JSON 是底层引擎最直接的输入形态——calculate_ratios.py 的FinancialRatioCalculator.__init__(L13-L25)会把传入字典拆解为四个命名空间:

  • income_statement:利润表科目,含revenuecost_of_goods_soldoperating_incomeebitebitdainterest_expensenet_income
  • balance_sheet:资产负债表科目,含total_assetscurrent_assetscash_and_equivalentsaccounts_receivableinventorycurrent_liabilitiestotal_debtcurrent_portion_long_term_debtshareholders_equity
  • cash_flow:现金流量表科目(operating_cash_flow等,为未来的现金流指标预留);
  • market_data:市场数据,含share_priceshares_outstandingearnings_growth_rate

脚本文件末尾(L310 起)自带一份可直接运行的示例数据——收入 100 万美元、总资产 200 万美元、股本 150 万美元、股价 50 美元等——演示了文本/CSV 输入如何被结构化后喂给计算引擎。将SKILL.md中"文本描述财务数据"的能力与源码字典结构对照即可发现:Claude 的工作就是把非结构化输入翻译成上述四个字典字段再交给脚本。

输出格式与解读报告

依据SKILL.md,计算结果应包含:计算出的比率与数值、可用时的行业基准对比、多期数据时的趋势分析、解读与洞见,以及格式化的 Excel 报告。这一"输出规范"与 interpret_ratios.py 的实现一一呼应:

  • 数值calculate_ratios.pyformat_ratio()(L229-L240)按指标性质输出%(毛利率、ROE 等百分比型)、x(周转/保障倍数)、days(应收天数)或$(每股金额);
  • 行业基准对比与解读RatioInterpreter内置BENCHMARKS行业基准表(L13-L48),支持technologyretailfinancialmanufacturinghealthcare五个行业及兜底的general基准,逐项给出 Excellent/Good/Acceptable/Poor 评级和行动建议;
  • 趋势分析analyze_trend()(L187-L227)对比首末两期数值计算变化幅度与方向,识别 Stable/Improving/Deteriorating 趋势(对杠杆类指标方向判定相反);
  • 综合洞见perform_comprehensive_analysis()(L261-L311)汇总"当期分析 + 趋势分析 + 整体健康度 + 优先级建议",_assess_overall_health()(L314-L350)将各比率评级折算为 4 分制得分并给出公司财务健康度的整体判定,generate_report()(L229-L258)则生成格式化的分析报告文本。

也就是说,interpret_ratios.py不只是简单翻译数值,而是通过基准分级、方向判定、评分汇总三层逻辑,把裸数值转化为可辅助决策的结论。这与文档中"Industry benchmark comparisons、Trend analysis、Interpretation and insights"的输出承诺完全对应。

计算引擎逐类拆解:六类比率的公式来源

下面结合calculate_ratios.py各方法,逐类核对指标公式,方便你在改造技能时增减字段口径。

盈利能力(L33-L59)

  • ROE =net_income / shareholders_equity
  • ROA =net_income / total_assets
  • 毛利率 =(revenue - cogs) / revenue(内部先计算gross_profit);
  • 营业利润率 =operating_income / revenue
  • 净利率 =net_income / revenue

流动性(L61-L80)

  • 流动比率 =current_assets / current_liabilities
  • 速动比率(酸性测试)=(current_assets - inventory) / current_liabilities,即剔除存货的流动资产口径;
  • 现金比率 =cash_and_equivalents / current_liabilities,最严苛的短期偿付口径。

杠杆/偿债(L82-L104)

  • 资产负债率 D/E =total_debt / shareholders_equity
  • 利息保障倍数 =ebit / interest_expense
  • 偿债覆盖率 DSCR =operating_income / (interest_expense + current_portion_long_term_debt)——分母即当期需偿还的本息总和。

运营效率(L106-L128)

  • 资产周转率 =revenue / total_assets
  • 存货周转率 =cogs / inventory
  • 应收账款周转率 =revenue / accounts_receivable
  • 顺带推导应收账款周转天数 DSO =365 / receivables_turnover

估值与每股指标(L130-L166)

  • EPS =net_income / shares_outstanding;P/E =share_price / EPS
  • 每股净资产 BVPS =shareholders_equity / shares_outstanding;P/B =share_price / BVPS
  • P/S =market_cap / revenue(市值 = 股价 × 总股本);
  • EV/EBITDA =(market_cap + total_debt - cash) / ebitda(企业价值扣除现金后对 EBITDA 的倍数);
  • PEG 仅在earnings_growth_rate > 0时计算,即PE / (growth_rate × 100),规避负增长导致的无意义结果。

关键工程细节:除零保护。所有除法都经由safe_divide()(L27-L31)——分母为零时返回默认值 0.0,而不是抛 ZeroDivisionError。这让脚本在遇到缺失科目或零值字段时仍能稳定运行,是财务数据常不完整场景下的必要健壮性设计。

在 Notebook 中创建、上传并实测该 Skill

在 skills/notebooks/03_skills_custom_development.ipynb 中,该技能被作为"自定义技能开发"第一个完整示例(L352 起)进行演示,完整链路为:

  1. 初始化客户端与目录(L113-L124):读取ANTHROPIC_API_KEY,以anthropic-beta: skills-2025-10-02头创建Anthropic客户端,SKILLS_DIR = Path.cwd().parent / "custom_skills"
  2. 清理潜在同名冲突(L305-L345):调用list_custom_skills(client)检查是否已存在名为 "Financial Ratio Analyzer" 的技能,存在时先delete_skill()删除旧版本,避免上传时报cannot reuse an existing display_title
  3. 上传技能目录(L380-L403):create_skill(client, str(financial_skill_path), "Financial Ratio Analyzer")底层调用client.beta.skills.create(display_title=..., files=files_from_dir(skill_path)),把整个analyzing-financial-statements目录打包上传,成功后可取回skill_idlatest_version
  4. 实测技能(L421-L453):以文本形式输入一份迷你财务数据(收入 $1,000M、EBITDA $200M、净资产 $1,200M、股价 $50、股本 100M 等),调用test_skill(client, financial_skill_id, test_prompt)触发一次包含该 custom skill 的 Messages API 请求,从响应中提取文本输出作为验证。

这套流程揭示了 Skill 的运行时机制:Claude 收到用户的分析请求后,依据元数据匹配到该技能,加载SKILL.md指令,再把计算逻辑"外包"给捆绑脚本执行——脚本负责确定性数值计算,Claude 负责字段映射、结果组织与自然语言表达。可配合参考仓库中 sample_data/financial_statements.csv 这类报表样例,快速构造更真实的测试输入。

解读引擎:行业基准、趋势与行动建议的落地细节

如果说calculate_ratios.py解决"算得准",interpret_ratios.py则解决"看得懂"。其内部采用评级取向分治的策略:

  • 越高越好型current_ratioroegross_margin):值达到excellent/good/acceptable基准线即依次评为 Excellent → Good → Acceptable,低于最差线则为 Poor;
  • 越低越好型debt_to_equity):反向比较,低于excellent阈值才是 Excellent("资本结构非常保守");
  • 估值语境型pe_ratio):区分负盈利(PE ≤ 0)与正盈利区间,再按 undervalued/fair/growth/expensive 四档给出"潜在低估/合理/成长溢价/高估"评级。

每个评级还会通过_get_recommendation()(L153-L185)映射到一句可执行建议,例如流动比率 Poor 时建议"改善营运资金管理、降低短期债务或增加流动资产",ROE Poor 时建议"聚焦运营效率与盈利能力改善"。在_generate_key_recommendations()(L353 起)中,所有 Poor 评级会升级为 "Priority:" 前缀的最高优先级建议,配合趋势下滑的 "Monitor:" 条目,最终返回不超过 5 条的精炼行动清单。

最佳实践与已知局限

SKILL.md沉淀了此类技能在真实财务分析中的工程纪律,写作与扩展技能时应一并遵守:

  1. 计算前校验数据完整性:脚本对各字段用.get(key, 0)兜底,缺字段返回 0,但零值本身可能就是异常信号(如股本为零导致 ROE=0);
  2. 合理处理缺失值:用行业均值补全或剔除该指标,避免静默扭曲结论;
  3. 解释时必须考虑行业语境:同一 D/E 在金融业(基准可接受值 4.0)与科技业(可接受值 1.0)含义天差地别,务必选择匹配的行业基准;
  4. 提供多期数据做趋势对比analyze_trend()要求至少两个时期的数据,单期输入只能给出截面结论;
  5. 标记异常/令人担忧的比率:生成报告时对 Poor 评级与恶化趋势做显式标注。

同时需要正视文档声明的局限:分析依赖准确完整的财务数据;BENCHMARKS基准表是简化的通用指导值(各行业实际阈值需随业务调整);部分比率并非适用所有行业(如银行报表中 D/E、存货指标口径特殊);历史数据不能保证未来表现,任何结论都不应替代专业财务意见。从实现看,interpret_ratios.py 注释也明确写明基准为 "simplified for demonstration"——扩展技能时建议把行业基准表升级为可外部配置的数据源,并结合 applying-brand-guidelines 等技能共同使用的组合式工作流,把财务分析结果直接落入品牌化报表。

小结

analyzing-financial-statements是一个"文档即接口、脚本即实现"的典型自定义 Skill 范本:SKILL.md定义了技能的触发方式、能力边界与行为准则,calculate_ratios.py以字段化字典与除零保护实现了六大类比率与每股指标的计算,interpret_ratios.py则通过行业基准分级、趋势方向判定与综合健康度评分把数值翻译为可执行建议。开发者可参照该结构,把任意分析领域(估值建模、SaaS 指标、成本分析)的知识沉淀为同样的三层架构——这也正是 Skills 机制区分于普通提示词的工程价值所在。

【免费下载链接】claude-cookbooksA collection of notebooks/recipes showcasing some fun and effective ways of using Claude.项目地址: https://gitcode.com/GitHub_Trending/an/claude-cookbooks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询