18-xlsx:表格明星技能组深拆(xlsx 全家桶 + chart-gen/data-viz 对比)

← 返回主报告:Kimi Agent(云端沙箱)技术报告GitHub 原文

合规与风险声明:本报告为安全研究与互操作学习目的的逆向分析,全程只读采集,未对目标系统做任何修改;文中所有密钥、token、账号级标识(chat_id / project_id / tenant_id 等)均已脱敏;沙箱内发现的默认弱口令(VNC/SSH)属平台侧配置,仅作安全发现披露,请勿用于访问任何不属于自己的系统。docx/pdf/xlsx/kimi-slides 等引擎二进制为 Moonshot 专有许可(禁再分发/逆向),本文仅作行为级描述。报告基于单次分析窗口(约 50 分钟生命周期),软件版本与技能库存随镜像更新可能变化。

采集方式:HTTP 只读镜像(http://127.0.0.1:18080/app/.agents/skills/)。 原始文本已镜像到 sections/18-xlsx-raw/(SKILL.md 992 行全文、3 份金融子技能、comps 三层 references、pivot-table.md,共约 2900 行)。 第一轮报告 §3.2(sections/09-skills-d.md:224)只覆盖到 SKILL.md 前 130 行,本章为全量补齐 + 工程深拆。

1. 技能组清单与体量

路径体量性质
xlsx/SKILL.md992 行 / 45KB主技能(父技能)
xlsx/scripts/Xlsx77,001,601 字节 ELF x86-64闭源 CLI,统一校验/透视表工具
xlsx/reference/3_statement_model_skill.md959 行金融子技能:三表模型
xlsx/reference/DCF_SKILL.md456 行金融子技能:DCF 估值(内嵌版式参考)
xlsx/reference/comps-analysis/Comps_analysis SKILL.md102 行金融子技能:可比公司(入口)
xlsx/reference/comps-analysis/references/{calculation_guide,model_construction,workbook_format}.md108/200/210 行comps 的三层嵌套参考
xlsx/reference/pivot-table.md339 行PivotTable 操作手册(配合 CLI)
xlsx/LICENSE.txt719 字节Moonshot AI 专有许可,明确禁止逆向/再分发

对比组(同在 /app/.agents/skills/):

技能实现许可
chart-gen / chart-image同一套 chart.mjs(54KB,Vega-Lite + Sharp 出 PNG),CN/EN 克隆对chart-gen 注明 <!-- Localized from: chart-image -->,是外部技能(clawd 生态,/data/clawd/skills/ 路径残留)的本地化
data-viz-gen / data-viz-renderer同一份 build_infographic.py(669 行纯 Python,JSON→自包含 HTML/SVG,4 类型 8 配色),CN/EN 克隆对MIT
code-to-chartanalyze_codebase.py:AST 解析 import 依赖→Mermaid/SVGMIT
gantt-chart-buildergantt_generator.py:CPM 关键路径→交互式 HTML 甘特图MIT

xlsx 自身不带 LICENSE 之外的依赖声明;chart-gen 的 package.jsonvega ^5.30 / vega-lite ^5.21 / sharp ^0.33

2. scripts/Xlsx 二进制鉴定(本轮重点之一)

  • file 层面:ELF 64-bit,动态链接 libgcc_s,C++ 运行库符号齐全。
  • strings 取证(流式取样,未落盘):出现 corehost_main_with_output_bufferError: Attempt to access unloaded AppDomainELEMENT_TYPE_SENTINELDotNETRuntimePrivate:ParseXmlBrotliEncoderHasMoreOutput、libssl 符号解析提示等——这是 .NET (CoreCLR) 自包含单文件发布产物(self-contained single-file app),native host 内嵌完整 CoreCLR 运行时,托管 DLL 以 Brotli 压缩进 bundle(因此 strings 里大量”网页语料”其实是 Brotli 静态字典,不是业务文本)。77MB 体量与自包含 .NET 应用吻合。
  • 结合 SKILL.md 自述(”pure OpenXML SDK (C# tool)”),可确认:C# + DocumentFormat.OpenXml 实现的 6 命令 CLI,无外部进程依赖(不调 LibreOffice/soffice——strings 中未见 soffice 线索,且沙箱侧也未声明)。
  • 值得注意:recheck 能报”公式结果为 0 的单元格“和”#VALUE!/#REF! 等公式错误”,说明二进制内部自带公式求值引擎(openpyxl 本身不求值);SKILL.md 提到”这些公式能通过 LibreOffice 重算但在 MS Excel 报 #N/A”,暗示其求值语义对齐 LibreOffice。具体求值库无法从压缩 bundle 取证,标记为推断。
  • 法律边界:LICENSE.txt 明确”proprietary property of Moonshot AI … Reverse engineering, decompiling … is prohibited”。直接把二进制搬进 Hermes/Kimi Code 分发有合规风险,移植时应以重写替代(见 §7)。

3. 主技能 SKILL.md 结构解剖(992 行)

输入输出契约():

“You must eventually deliver an Excel file … must include a .xlsx file”;”do not provide any files other than what the user requested, especially readme documentation, as this will take up too much context.”(SKILL.md:29-30)

技术栈硬锁定():Python3 + openpyxl/pandas 走 ipython 工具做生成;./scripts/Xlsxshell 工具做校验。生成与校验职责分离——LLM 只用 openpyxl 写,正确性由确定性二进制裁决。

3.1 Xlsx CLI 的 6 命令(契约级细节)

  1. recheck(每次保存后必跑):检测 7 类公式错误值(#VALUE!/#DIV/0!/#REF!/#NAME?/#NULL!/#NUM!/#N/A)、零值公式单元格(”often indicates reference errors”)、隐式数组公式——如 MATCH(TRUE(), range>0, 0) 在 LibreOffice 自动数组化、在 MS Excel 需 CSE 否则 #N/A;SKILL.md 直接给出改写处方:SUMPRODUCT((A1:A10>0)*ROW(A1:A10))-ROW(A1)+1
  2. reference-check(别名 refcheck):针对 AI 生成公式的 4 类典型病——引用范围远超实际数据行、把表头行卷进计算、SUM/AVERAGE 只覆盖 ≤2 格、同列中偏离主导模式的”孤立公式”。这是用静态规则编码”LLM 写公式的常见幻觉模式”,针对性极强。
  3. inspect:输出 JSON(sheets/tables/headers/dataRange),是 pivot 的前置参数发现步骤(pivot-table.md 给出 inspect 字段→pivot 参数的映射表)。
  4. pivot:纯 OpenXML SDK 生成 PivotTable + 自动配图(bar/line/pie),--style monochrome|finance(内建 PivotStyleMedium9/2),支持 rows/cols/filters/values 五种聚合(sum/count/avg/max/min)。
  5. chart-verify:验证图表非空,退出码语义化(0 可交付 / 1 必须修)。
  6. validate:OpenXML schema 校验(Office 2013 基线)、禁用函数黑名单(FILTER/UNIQUE/XLOOKUP/LET/LAMBDA/SEQUENCE 等 Excel 365 动态数组函数 + Google Sheets 专有函数,SKILL.md 给出 12 行对照替代表)、.rels 绝对路径检测(”absolute paths cause Excel to crash”)、透视表/图表结构完整性。--lenient 可查看被智能白名单忽略的 openpyxl 良性 schema 问题;pivotCache/pivotTable/rowItems 类错误永不豁免

3.2 公式保真原则(为什么严禁 Python 算完贴硬编码)

原文(SKILL.md:106, 111-112):

“It is strictly forbidden to calculate derived model outputs in Python or any external tool and then paste finished hardcoded numbers into Excel; if a value can be linked by workbook formulas, it MUST remain formula-driven in the delivered file.” “static hardcoded values are allowed only for true inputs, assumptions, or historical/raw reported data.” “Build the logic in Excel formulas so the workbook remains linked, traceable, and updateable.”

理由链:交付物是活模型不是死报表——投行用户要改假设看联动;Python 预计算等于把逻辑烧成灰。例外白名单明确:外部取数、真常量、会成循环引用的场景才允许静态值(SKILL.md:352-355)。敏感性分析表也点名”必须公式驱动”(DCF_SKILL.md:53)。

3.3 校验闭环与反”理性化”设计

工作流是逐 sheet 门控(SKILL.md:299-310):PLAN→CREATE→SAVE→recheck+reference-check→0 错才许建下一个 sheet→全部完成后 validate→交付。明确禁止”全部建完最后统一校验”(错误会级联)。

最有工程价值的是预判 LLM 的推诿话术并逐条封堵(SKILL.md:371-384):

❌ “These errors will disappear when the user opens the file in Excel” — WRONG ❌ “The #REF! error is because openpyxl doesn’t evaluate formulas” — WRONG ❌ “Zero values are expected” — VERIFY each one “Files with ANY recheck errors CANNOT be delivered.”

validate 失败时的处置同样是反修补纪律:”Do NOT attempt to ‘fix’ the file. Regenerate it from scratch with corrected code.”(SKILL.md:267)

已知深坑被显式编码:openpyxl 重保存会破坏 pivotCache 路径导致 Excel 崩溃,因此 pivot 必须是流水线最后一步、输出文件不得再被 openpyxl 打开(pivot-table.md:314-339 给出正确/错误时序图)。

3.4 样式与行业惯例编码

  • 字体颜色三色规则(SKILL.md:728-734,金融模型为”hard minimum standards”):蓝=固定值/输入;黑=计算公式;绿=纯跨表引用;红=外部链接。细化规则:公式混合引用与运算(如 =-('Balance Sheet'!H12-'Balance Sheet'!G12))算黑不算绿(3_statement_model_skill.md:121-122 专门举例)。
  • 区域涨跌色约定:中国红涨绿跌、国际绿涨红跌(SKILL.md:655-661 表格)。
  • 双风格体系:默认极简黑白灰+蓝点缀(非金融),金融用 Professional Finance(深藏青 #122B49 表头);网格线必须隐藏;从 B2 起排;默认禁 wrap text;每个交付物必须有封面页(标题/关键指标/sheet 索引/透视表刷新提示)。
  • 数字纪律:金额存最小单位(15000000 而非 1.5M)靠 Excel 格式显示;禁用缩放单位进公式;百分比 0.0%;statement 值整数、零以格式显示 -#,##0;(#,##0);-)而非手打字符。
  • 图表强制令:用户提到 visual/chart 就必须用 openpyxl 嵌真图表,禁止建”CHARTS DATA”表让用户自己去 Insert(SKILL.md:810-817),chart-verify 卡出口。

4. 金融子技能体系(三表/DCF/comps)

父技能定义了加载协议(SKILL.md:81-118):子技能是方法论/版式/校验的最高权威;组合规则——comps 独立、DCF 默认先建三表、LBO 从三表起步;被路由到子技能则必须全文读完才能动手;Raw Data 只许历史、历史须先与披露总额 reconcile;”模型不过全部 check 就不是交付物”。

4.1 三表模型(959 行,子技能中最厚)

  • 固定六表结构:Raw Data → Operating Drivers → Income Statement → Supporting Schedules → Balance Sheet → Cash Flow。默认 5 年历史 + 3 年预测;Raw Data 永不出现预测年份(16.3 节用”under any circumstance”强调)。
  • Operating Drivers 是灵魂:禁止”单行增长率预测”,按行业给驱动栈模板(车企=分车型交付×ASP;SaaS=客户×ARPU×留存;零售=同店×新店……),每个预测块必须配 Growth Catalyst(何事/为何/证据/持续期/周期性),反例直接写出”2026 growth = 15%“这种是无效的。
  • 假设治理:每个硬编码必须有假设表(Line Item/各年份/Source/Rationale 八列),Source 可接受标签枚举到 “sell-side channel check” 级别。
  • 完整勾稽公式库:PP&E 三段滚动、债务利息(平均债务×利率防循环)、NOL/递延税全套公式(NOL Utilized = MIN(Beginning NOL, Utilization Limit) 等 7 行)、营运资本 roll-forward(AR/存货/AP 的 ending=prior+流入-流出)、权益法投资黄金规则 Investing_Cash_LT = -(ΔLT_Investments - Equity_Income_Affiliates)(含为什么:权益收益已在净利且非现金,不减会错 CFI 并打破平衡)。
  • 循环引用处理:不回避——明确允许迭代计算(max iterations 100 / max change 0.001),建议 circuit breaker,且”不得为消除循环而打断核心债务/现金/利息链接”。
  • 校验机制是提示词级而非脚本级:11.1 节 14 条交付前测试 + 10 行勾稽检查表(Balance/Cash Tie-Out/NI Link/RE Roll-Forward/Debt/WC/Capex-PPE/D&A/Equity/DTA,每条给公式和期望=0);容差公式 =IF(ABS(TA-TL&E)<0.1,"Check","Error");Balance Check 行必须红色加粗、每年显示 Check/Error。
  • 调试启发式(11.3-11.4):不平衡时按 11 步顺序查(先查 CF 符号),并给”差额定位法”——差额=某行或其倍数就先查该行;差额=Cash 先查 BS Cash←CF Ending Cash 映射;差额=Capex 查 PP&E 滚动……这是把投行分析师 debug 经验编码成决策树。
  • 年度标签映射陷阱(16.1):BS 现金链接 CF 期末现金必须按年份标签而非列字母映射,逐年验证。这类”看着显然、AI 常错”的点被单列成强制条款。

4.2 DCF(456 行,内嵌版式参考)

  • 方法论完整链:估值框架确认(估值日/币种/折现惯例)→ 从运营模型链接预测(禁止在 DCF 页重建第二份预测)→ NOPAT→UFCF(默认 NOPAT = EBIT×(1-t);UFCF 必须无杠杆、不含利息/分红;不机械加回 SBC)→ WACC 逐步搭建(CAPM 默认;beta 卸载/再加载公式齐全;市值权重;税后债务成本)→ 终值(永续增长主方法,g<WACC 硬约束;退出倍数做交叉验证且”倍数与终值基数要匹配”)→ 年中折现惯例默认 → EV→Equity→隐含股价桥(净现金情形自然流过;负股权价值不得机械放行,须复查确认合理)。
  • Format Reference 精确到单元格:标题合并 B1:H1、WACC 块 K12:P12、敏感性双表 B63:G69/J63:O69、仅 C3 用黄底虚线框、字体 Arial 8-10、色板 #0F243E/#D9E2F3/#FFF2CC/#0000FF(纯蓝硬编码),并规定”不得把 comps 的绿底带入 DCF”。
  • 验证清单 11 条,含”敏感性方向性检查”(WACC↑则值↓)。

4.3 comps-analysis(102 行入口 + 518 行三层 references)

  • database-first 架构:先建宽口径 DATABASE 块(深藏青分隔条),顶层精选 6-10 家 peers 的表用 XLOOKUP/INDEX-MATCH/VLOOKUP 从库中引用而非重打;分析块(增长/利润率/倍数)从引用值现算;估值桥引用精选组的 Mean/Median + 蓝色目标输入。
  • Year Lock 协议:开工前锁死整簿 Year Set(如 2025A/2026E/2027E),用户指定年份(”FY26″/”26E”)覆盖一切默认值,”禁止静默回退到熟悉的 2023/2024″;列标 2026 而公式喂 2023 数据被列为明确违规。
  • NM/– 语义:负 EBITDA 的 EV/EBITDA、负 EPS 的 P/E 显示 NM 且不进 Mean/Median(不得 coercion 为 0);未用桥列显示 --;交付面上不留 Excel 错误值。
  • 行业化指标集:明示不搞 universal metric set——Big Tech 看规模/增长/现金流,SaaS 看 EV/Revenue 而非 P/E,银行/保险/REIT/能源/半导体各自不同。
  • 版式精确到 RGB:硬编码蓝 rgb(79,113,190)、Mean/Median 绿底 rgb(228,238,220) 全宽+细外框(且估值桥的 Mean/Median 不继承绿底——”桥是估值情形不是 comps 汇总行”)、倍数自定义格式 0.0"x" 显示 6.2x 但保持数值型、三层表头+组下划线”括号效果”、条件格式三色标度(增长/利润率越高越绿,倍数反向越低越绿)。
  • Peer 选择启发式 6 条(商业模式相似度优先于品牌知名度),排除明显名字要写明理由。

5. 与 chart-gen/data-viz 系的对比结论

两条完全不同的图表路线:

  • xlsx 路线:图表必须是 Excel 原生图表对象(openpyxl.chart 或 pivot 命令自动生成),随 .xlsx 交付、用户可在 Excel 里继续编辑;chart-verify 把关。面向”可继续加工的办公交付物”。
  • chart-gen/chart-image:Vega-Lite→Sharp 光栅化 PNG,强调无浏览器、~15MB 依赖、<500ms 冷启动——面向”报告/告警里贴图”。本身是外部 clawd 技能本地化(路径残留 /data/clawd/skills/,与 speech-synthesis 一样是导入杂质证据)。
  • data-viz-gen/renderer:669 行纯 Python 零依赖脚本,JSON→自包含 HTML/SVG(统计卡/对比柱状/流程图/仪表盘),CN/EN 同一份脚本两个壳——冗余克隆对,移植时只需一份。
  • code-to-chart、gantt-chart-builder 与表格无关,是”JSON/代码→HTML/Mermaid”家族成员,均为 MIT + 单 Python 脚本。

6. 工程质量亮点与坑(汇总)

亮点:

  1. 生成/校验二分:LLM 只写 openpyxl,确定性二进制做终审(退出码=交付门),与 pdf 技能的 .pptd DSL+CLI 同属”确定性引擎兜底”范式。
  2. 反幻觉/反推诿提示工程:reference-check 的 4 类 AI 典型公式病、”errors will auto-resolve” 话术封堵、”validate 失败须重新生成而非修补”,都是可被直接抄走的 prompt 模式。
  3. 领域 know-how 密度极高:三色字体、区域涨跌色、勾稽检查表、差额定位调试法、Year Lock、database-first——相当于把投行建模培训手册压进 markdown。
  4. 嵌套子技能 + 优先级/组合规则:父技能只管调度与兜底,子技能是权威;comps 自己还有三层 references——skill 内”按需加载”分层是本库最成熟的样本。
  5. 校验无外部 API/凭证依赖:Xlsx CLI 离线运行,取数走 datasource/web_search 插件但技能只规定”引用来源两列”的呈现契约,职责分离干净。

坑:

  1. Xlsx 二进制闭源且禁止逆向(LICENSE.txt),77MB,是移植的最大障碍;其”零值公式检测”暗示内嵌求值引擎,重写工作量不小。
  2. openpyxl↔pivotCache 互斥:pivot 必须最后跑、产物不可再被 openpyxl 触碰——移植工作流时必须保留此时序约束。
  3. LibreOffice/Excel 语义差(隐式数组公式)靠黑名单+改写处方兜底,说明求值引擎与真实 Excel 仍有鸿沟,”recheck 过 ≠ Excel 打开没问题”的残余风险存在。
  4. 金融校验大量停留在提示词 checklist(14 条交付前测试),依赖模型自觉执行 recheck/肉眼核对颜色——确定性校验只覆盖公式错误/schema/图表非空,不覆盖勾稽平衡与配色合规
  5. 工具名耦合 ipython/shell(Kimi agent runtime),搬到其他 runtime 需改工具引用。
  6. 多份文件中英小瑕疵(”coloered”、”ful row”)表明这些文档经多轮人工/模型混合编辑,但不影响语义。

7. 移植评估表

组件对 Hermes 价值对 Kimi Code 价值移植工作量硬依赖
金融三子技能(3SM 959 行 / DCF 456 行 / comps 全套 620 行)——投行级建模方法论+勾稽校验+三色规则,纯提示词,Hermes 若做金融场景直接获得领域纵深——SKILL.md 格式与 Kimi Code 技能系统同构,放 user/plugin scope 即挂即得纯拷贝(改 ipython→本地 python 执行约定即可)python3+openpyxl;无 API/凭证
xlsx 主 SKILL.md 非金融部分(逐 sheet 门控、样式规则、图表强制令、封面页、来源引用契约)——”确定性校验+反推诿话术”是通用交付纪律——同上纯拷贝
Xlsx CLI(77MB 闭源 .NET)——校验闭环的物理基础,但许可证禁止逆向/再分发——同理需重写:可用 LibreOffice headless 重算 + Python 静态检查器(公式错误/零值/范围异常/禁用函数黑名单/schema 校验可用 openpyxl+正则+lxml 复刻大部分;pivot 生成最难,可先砍掉或改用 pandas 汇总表替代)原版:无运行时依赖但闭源;重写版:LibreOffice 或自研求值
pivot-table.md低-中——与 CLI 强耦合低-中需适配(随 CLI 重写而定)Xlsx CLI
金融校验 checklist(14 条交付测试/勾稽表)——不依赖二进制,纯流程纪律纯拷贝无(但执行靠模型自觉)
chart-gen(chart.mjs + vega/sharp)中——报告贴图场景可用;注意是第三方技能本地化,需核许可需适配(npm install,~15MB)Node.js + sharp 预编译二进制
data-viz-gen/build_infographic.py中——669 行零依赖单脚本,MIT纯拷贝python3 标准库
code-to-chart / gantt-chart-builder低-中(与表格主题无关)低-中纯拷贝(MIT)python3;SVG 输出需 mmdc

总结论:本技能组 80% 的价值在金融子技能与主技能的提示词文本——纯提示词即可搬走,且与 Kimi Code 的 SKILL.md 体系天然同构;唯一真正的硬骨头是 77MB 闭源 Xlsx CLI,建议以”LibreOffice headless 重算 + Python 静态校验器”重写一个开源替代(pivot 命令可暂缓),重写后整套”生成-校验-交付门”闭环即可在 Hermes/Kimi Code 复现。