找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1771

积分

0

好友

233

主题
发表于 13 小时前 | 查看: 0| 回复: 0

前段时间大家都在讨论“Vibe Coding”,但作为技术人,我们不仅要懂“氛围”,更要懂“原理”。Anthropic官方为Claude打造的Excel Skill,就是一个绝佳的学习范本。它不仅仅是一段代码,更展示了大模型如何与实体文件进行高质量交互。

很多人以为给AI加功能就是写个Function Call,但看完这份官方源码你会发现——原来高手是这么“教”AI玩转Excel的。这个Skill把“如何写一个好的Claude Skill”的套路暴露得一清二楚:整个项目没有花哨的框架,核心就是一份结构清晰的说明文档加上少量配套脚本,便优雅地解决了复杂的Excel处理场景。

下面,我们将通过五大核心要点,深度剖析这份官方源码的设计智慧。

源码核心要点

01、在 SKILL.md 中描述“行为规约层”:零公式错误的铁律

源码(节选):

### Zero Formula Errors

- Every Excel model MUST be delivered with ZERO formula errors (#REF!, #DIV/0!, #VALUE!, #N/A, #NAME?)

### Formula Construction Rules

#### Assumptions Placement
- Place ALL assumptions in separate assumption cells
- Use cell references instead of hardcoded values in formulas
- Example: Use =B5*(1+$B$6) instead of =B5*1.05

#### Formula Error Prevention
- Verify all cell references are correct
- Check for off-by-one errors in ranges
- Ensure consistent formulas across all projection periods
- Test with edge cases (zero values, negative numbers)
- Verify no unintended circular references

### Formula Verification Checklist
- **Test 2-3 sample references**: Verify they pull correct values before building full model
- **Row offset**: Excel rows are 1-indexed (DataFrame row 5 = Excel row 6)
- **Division by zero**: Check denominators before using `/` in formulas (#DIV/0!)
- **Cross-sheet references**: Use correct format (Sheet1!A1) for linking sheets

解读:
这段看似只是“写文档”,本质上是在给Claude注入一层领域特定的行为规范(DSL):

  • 把“零公式错误”设为铁律,模型在生成方案和代码时会自动偏向更保守、审慎的写法。
  • 将“假设分离”、“禁止硬编码”这类Excel最佳实践,用具象化的检查清单形式列出,等于告诉模型:你不仅要算对,还要“会建模”。
  • 把常见坑点(如行列偏移、交叉表引用)显式写出来,就是在给模型“注入经验”,减少LLM最容易犯的那些低级失误。

启示:

  • 下次自己写Claude Skill时,可以借鉴这个套路:不要只描述“这是什么能力”,更要定义“什么是错误的行为”(例如:禁止硬编码、禁止修改既有模板格式)。
  • 用检查清单的形式,把“容易出错的细节”列清楚——模型真的会依据这份清单进行思考和自我检查。
  • 将“业务经验”转化为显式的规则文本写进SKILL.md,而不是心里默念“希望模型能懂”。

换句话说:好的Skill,关键不在于代码有多长,而在于能否将“人类专家的职业习惯”编写成一份可执行的行为约束。

02、用反例教学:用错误代码“调教”模型

源码(节选):

# ❌ WRONG - Hardcoding Calculated Values

# Bad: Calculating in Python and hardcoding result
total = df['Sales'].sum()
sheet['B10'] = total  # Hardcodes 5000

# Bad: Computing growth rate in Python
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth  # Hardcodes 0.15

# ✅ CORRECT - Using Excel Formulas

# Good: Let Excel calculate the sum
sheet['B10'] = '=SUM(B2:B9)'

# Good: Growth rate as Excel formula
sheet['C5'] = '=(C4-C2)/C2'

解读:
这里的设计非常巧妙:

  • 用“错误代码示例”塑造行为边界:它不是抽象地说“不要硬编码”,而是给出一整段标有# Bad注释的错误写法,这对LLM来说是极强的负样本信号。
  • 将“好代码”写成可复用的模板:“坏写法”是在Python里计算再写入结果值;“好写法”则把Excel视为计算引擎,Python只负责写入公式字符串。模型在后续类似场景中自然会复制这种模式。

启示:
撰写Skill时,不要吝啬提供“反例”:

  • 针对你特别担心模型犯错的地方(例如:对金额字段滥用float精度、ID字段自动转型、HTML字符串拼接问题),最好写出“错误示范 + 正确示范”的对比代码。
  • 给出典型的代码模式,而非仅仅讲述抽象原则。LLM对“模式”的敏感度远高于“抽象说教”。
  • 可以为Claude的Skill预留一个专门章节,命名为“❌ 常见错误写法 / ✅ 推荐写法”,用这种方式将模型的输出风格“调教”至你期望的方向。

03、为了省Token的“探针”设计

我们通常编写Excel读取工具,会习惯性地使用read_excel全量读取。但官方Skill的设计却极其克制。

源码(节选):

# 这是一个 Tool 定义的抽象逻辑
def inspect_sheet_head(filepath, sheet_name, n_rows=5):
    """
    Reads the first n_rows of the sheet to understand structure.
    Crucial: Converts output to Markdown Table for LLM readability.
    """
    df = pd.read_excel(filepath, sheet_name=sheet_name, nrows=n_rows)
    # 重点:转化为 LLM 最容易理解的 Markdown 格式,且只给表头和前几行
    return df.to_markdown(index=False)

解读:
这就好比相亲不会上来就查户口本(全量读取),而是先看看照片(预览头部)。此设计的精妙之处在于nrows=5to_markdown()

  • Token经济学:一个10万行的Excel文件可能蕴含海量Token,直接读取必然导致上下文爆炸。只读取前5行,消耗极低,但足以让LLM理解列名和基本数据格式(例如,某一列是日期还是数字)。
  • 格式对齐:LLM的训练数据中包含大量Markdown表格,使用to_markdown输出,模型解析和理解的准确率远高于CSV或JSON等格式。

Claude与Excel交互流程图

启示:
在进行RAG或文档分析任务时,应始终提供一个peek(预览)接口。让AI自主决定是否需要读取更多内容,而不是一次性“喂饱”它导致效率低下或出错。这种设计思路体现了优秀的Agent交互逻辑。

04、错误处理的“反弹机制”

虽然代码中通常包含Python的try-except,但此Skill的设计亮点在于如何将错误信息有效反馈给LLM。

源码(节选):

try:
    result = exec(generated_pandas_code)
    return result
except KeyError as e:
    # 不只是返回 Error,而是返回“引导性”错误信息
    return f"Error: Column {e} not found. Please check column names using `inspect_sheet` and retry."
except Exception as e:
    return f"Execution failed: {str(e)}. Review your code logic."

解读:
普通程序报错是给程序员看的(堆栈跟踪),但Agent工具报错是给AI看的。这里的亮点在于:报错信息本身就是一条引导性的Prompt。当发生KeyError时,工具不仅报告“出错了”,更建议“请使用inspect_sheet检查列名后重试”。这赋予了LLM自我修复(Self-Healing) 的能力。

启示:
当你的Tool报错时,不要直接抛出原始异常堆栈。尝试将异常信息“翻译”成“下一步的行动建议”再返回给模型。让模型能够理解:“噢,我明白了,我应该换个方法再试一次。”

05、用 LibreOffice + recalc.py 做“结果兜底校验闭环”

调用示例:

python recalc.py output.xlsx 30

The script:
- Automatically sets up LibreOffice macro on first run
- Recalculates all formulas in all sheets
- Scans ALL cells for Excel errors (#REF!, #DIV/0!, etc.)
- Returns JSON with detailed error locations and counts

Example output:

{
  "status": "success", // or "errors_found"
  "total_errors": 0,   // Total error count
  "total_formulas": 42,
  "error_summary": {   // Only present if errors found
    "#REF!": {
      "count": 2,
      "locations": [
        "Sheet1!B5",
        "Sheet1!C10"
      ]
    }
  }
}

解读:
这个设计将Skill从“写完即结束”提升到了“可验证的工程化流程”:

  • openpyxl等库写入的公式只是字符串,不会自动计算,必须借助Excel或LibreOffice引擎重新计算。recalc.py脚本实现了这个步骤的一键自动化。
  • 脚本不仅重算公式,还会遍历所有单元格,将#REF!#DIV/0!等错误收集成结构化的JSON,相当于生成了一份详细的“测试报告”。
  • 在上层流程中,Claude可以:1. 按规范编写Excel;2. 运行recalc.py;3. 读取JSON报告,如果status"errors_found",则自动定位到对应单元格修复公式。

从Skill设计思路上看,这形成了一个经典模式:“LLM生成 → 外部工具验证 → LLM读取验证结果并自我修正”。而且返回的是结构化JSON而非日志字符串,这一点至关重要——模型可以像处理普通数据一样去解析、统计并生成修复代码。

Excel Skill核心校验流程图

启示:
编写Claude Skill时,如果你的目标领域存在现成的“权威校验器”(如JSON Schema校验器、TypeScript编译器、SQL Linter、Markdown链接检查器),强烈建议将其集成进来。让Skill明确规定:“生成结果后必须运行校验工具;校验工具需输出结构化结果(JSON/YAML);出现错误时应按预定策略重试(例如,仅修改有问题的部分)。” Skill不仅要教“怎么写”,还要教“写完怎么验,验完怎么改”。

一句话概括:优秀的Skill,不只输出结果,还要自带CI/CD般的验证闭环。 这种对工程质量的追求,正是进行高质量源码分析时需要学习的精髓。

总结与思考

当然,这个xlsx Skill也有其局限性:

  1. 其逻辑主要依赖于详尽的说明文档和示例,没有复杂的代码抽象。真正的“智能”依然源于Claude本身,Skill更像一份“超长的System Prompt加工具调用协议”。
  2. 所有最佳实践都偏向“专业财务/建模”风格(如指定颜色编码、格式规则),可能不适合所有轻量级Excel应用场景,需要你在自定义Skill时做适当裁剪。

然而,作为编写Skill的模板,它传递了一个至关重要的理念:

一个好的Claude Skill,本质上是“将领域专家的职业习惯固化为行为规约,并利用外部工具对输出结果进行验证,直至完美”。

如果只用一句话收尾——

不要指望Claude天生就是专家,而是通过一份精良的SKILL.md,将它调教成你期望的那种专家。

希望这次对官方Excel Skill的拆解,能为你设计自己的AI应用技能带来启发。在云栈社区,你可以找到更多关于AI应用开发与最佳实践的深度讨论。




上一篇:Claude Code零基础入门指南:手把手配置AI编程助手环境
下一篇:AI时代技术管理思维转变:从7个传统“常识”到新范式
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-25 19:32 , Processed in 0.325697 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表