ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

把代码审查做成 Skill:基于 SKILL.md 的模板驱动落地实践与 TaoToken 接入

把代码审查做成 Skill:基于 SKILL.md 的模板驱动落地实践与 TaoToken 接入 1. 为什么把代码审查塞进 SKILL.md 里代码审查这件事做过的人都懂同一段代码老工程师能揪出 SQL 注入和 N1 查询新人只能看出缩进没对齐。更麻烦的是输出格式——有人写三百字有人回一句「LGTM」你想统计「这个月严重问题占比多少」根本无从下手。我试过让模型直接审代码结果三次输出三个样第一次结构乱得没法看第二次漏了安全维度第三次严重问题混在建议里没标出来。问题不在模型能力在于我们没给它一个稳定的输出契约。SKILL.md 就是干这个的。它是 Claude Code 里定义 Skill 的入口文件用 YAML frontmatter 声明元信息用 Markdown 正文写审查流程和规则。你可以把它理解成给模型的一份「岗位说明书」审什么、按什么标准分级、报告长什么样全写死在里面。模型负责灵活判断模板负责强制结构两者分离。这套东西适合谁适合团队里已经有 Code Review 流程、但被「标准不统一、知识难沉淀、输出太随意」折磨过的开发者。如果你只是偶尔看看自己的代码用不用 Skill 差别不大但如果你要横向对比不同 PR 的审查质量或者想把审查结果喂给 CI 系统做门禁模板驱动几乎是唯一解。下面我会给出可复制的 SKILL.md 模板、审查规则清单、触发配置以及通过 TaoToken 统一 Key 接入的完整步骤。最后用一次真实 diff 验证输出是否命中模板规则。2. TaoToken 前置统一 Key 与 API 通道在写 SKILL.md 之前得先把模型通道打通。Claude Code 默认走 Anthropic 官方接口但如果你团队里多人共用、或者想统一管理 Key 和用量用 TaoToken 做一层 API 网关会省很多事。TaoToken 在这里的角色是「统一入口」你拿到一个 Key配好 Base URLClaude Code 的所有请求都走这条通道。好处是 Key 不用散落在每个人本地换模型、看用量、做限额都在一个地方。2.1 拿 Key 和确认 Base URL先到控制台创建 API Key。地址是https://taotoken.net/console创建完复制 Key格式类似sk-xxxxxxxx。然后确认 API 端点https://taotoken.net/api注意这个地址不带任何查询参数是纯 API 根路径。Claude Code 需要的 Base URL 就是它。2.2 在 Claude Code 里配置Claude Code 读取环境变量来定位 API。你可以在 shell 配置文件里写死也可以用项目级的.env。我习惯用环境变量因为切换方便。export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的Key export ANTHROPIC_MODELclaude-sonnet-4-20250514如果你用的是 Claude Code 的 settings 文件路径通常在~/.claude/settings.json内容长这样{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的Key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }三件套缺一不可Base URL 指向 TaoTokenKey 用你创建的Model ID 写清楚具体版本。Model ID 写错会直接报 404别问我怎么知道的。2.3 验证通道是否通配完先别急着写 Skill跑一条最小请求确认通道没问题curl https://taotoken.net/api/v1/messages \ -H x-api-key: sk-你的Key \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: claude-sonnet-4-20250514, max_tokens: 64, messages: [{role: user, content: 回复 OK}] }返回里能看到content字段带文本就说明通道通了。如果返回 401检查 Key 有没有复制全如果返回local proxy failed检查 Base URL 是不是写成了带路径的地址。通道通了之后Skill 的模型调用才有意义。接下来写 SKILL.md。3. 可复制配置SKILL.md 模板与触发设置这一节是核心。我会给出完整的 SKILL.md 模板、references 里的规则清单、以及 Claude Code 的触发配置。所有片段都可以直接复制改。3.1 目录结构先看整体结构四层分离7d-code-reviewer/ ├── SKILL.md ├── references/ │ ├── coding-standards.md │ ├── security-checklist.md │ └── review-examples.md ├── templates/ │ └── report-template.md └── scripts/ └── render.mdSKILL.md 是大脑references 是记忆templates 是格式scripts 是渲染说明。职责分离的好处是改格式不用动逻辑加规则不用动模板。3.2 SKILL.md 完整模板--- name: 7d-code-reviewer description: 对指定代码文件或 diff 执行结构化代码审查输出统一格式的报告。当用户要求审查代码、review PR、检查代码质量时触发。 --- # 代码审查 Skill ## 审查流程 1. 读取目标文件或 diff识别改动性质新功能/修 Bug/重构 2. 按四个维度逐项检查质量、安全、性能、可维护性 3. 对每个问题分级严重必须修复、中等建议修复、轻微可选改进 4. 加载 references/ 下对应清单核对是否遗漏 5. 将结果填入 templates/report-template.md所有占位符必须填充 ## 审查维度 - 质量命名清晰度、函数职责单一性、重复代码 - 安全SQL 注入、XSS、硬编码密钥、越权访问 - 性能N1 查询、大循环内 IO、无索引查询 - 可维护性异常处理、日志、注释、测试覆盖 ## 分级标准 - 严重可导致数据泄露、服务不可用、资金损失 - 中等影响性能或可维护性但不直接导致故障 - 轻微风格问题、命名建议、可选优化 ## 输出要求 - 必须使用 templates/report-template.md - 所有占位符必须填充无内容填「无」 - 不得删除模板中的任何章节frontmatter 里name和description是必填。description 要写清楚「什么时候触发」模型靠它判断是否加载这个 Skill。3.3 references 规则清单references/security-checklist.md示例# 安全检查清单 ## SQL 注入 - 检查是否使用参数化查询 - 检查是否有字符串拼接 SQL - 检查 ORM 的 raw 查询用法 ## XSS - 检查用户输入是否转义 - 检查 innerHTML 直接赋值 - 检查模板引擎的自动转义是否关闭 ## 密钥泄露 - 检查硬编码的 API Key、密码 - 检查 .env 是否被提交 - 检查日志是否打印敏感字段references/coding-standards.md写团队的命名规范、函数长度上限、注释要求。这些文件只在审查时按需加载不常驻上下文省 token。3.4 触发配置Claude Code 里触发 Skill 有两种方式。一种是自然语言触发description 写得好你说「审查 src/api/user.py」它就会加载。另一种是显式调用/7d-code-reviewer 审查 src/api/user.py如果你想在 CI 里自动触发可以在脚本里调 Claude Code 的 headless 模式claude -p 使用 7d-code-reviewer 审查 $(git diff --name-only HEAD~1) \ --output-format json这样每次 PR 都能自动跑一遍审查输出 JSON 喂给下游系统。3.5 模板文件templates/report-template.md# 代码审查报告 ## 评分卡 - 质量{{quality_score}}/10 - 安全{{security_score}}/10 - 性能{{performance_score}}/10 - 可维护性{{maintainability_score}}/10 - 总分{{total_score}}/10 ## 问题列表 {{issues}} ## 修复建议 {{suggestions}} ## 优点 {{strengths}}占位符用双花括号渲染时替换。约定模板里不写 if/else所有判断在 SKILL.md 里做。4. 验证请求用一次真实 diff 跑通审查配置写完得用真实代码验证。我拿一段有问题的 Python 代码来跑。4.1 准备测试代码# src/api/user.py import sqlite3 def get_user_list(db, keyword): conn sqlite3.connect(db) cursor conn.cursor() query SELECT * FROM users WHERE name LIKE % keyword % cursor.execute(query) users cursor.fetchall() result [] for user in users: orders cursor.execute( SELECT * FROM orders WHERE user_id ?, (user[0],) ).fetchall() result.append({user: user, orders: orders}) return result这段代码有两个明显问题SQL 字符串拼接注入风险、循环内查询N1。4.2 触发审查在 Claude Code 里输入/7d-code-reviewer 审查 src/api/user.py模型会加载 SKILL.md按流程读取文件加载 security-checklist.md 和 coding-standards.md逐维度检查最后填模板。4.3 预期输出# 代码审查报告 ## 评分卡 - 质量6/10 - 安全3/10 - 性能4/10 - 可维护性5/10 - 总分4.5/10 ## 问题列表 ### 严重SQL 注入风险 位置get_user_list() 第 7 行 描述使用字符串拼接构造 SQLkeyword 参数未过滤可被注入 建议改用参数化查询 cursor.execute(... LIKE ?, (f%{keyword}%,)) ### 严重N1 查询 位置get_user_list() 第 11-14 行 描述循环内逐条查询 orders用户量增大时性能急剧下降 建议用 JOIN 一次查出或先收集 user_id 再批量查询 ## 修复建议 1. 将 SQL 改为参数化查询 2. 将 orders 查询移出循环改为批量查询 3. 添加异常处理数据库操作失败时记录日志 ## 优点 - 函数职责相对单一 - 返回值结构清晰4.4 验证要点检查输出是否命中三条规则严重问题有没有标「严重」、位置有没有写行号、建议有没有给具体改法。如果三条都中说明模板约束生效了。如果输出结构乱、漏了评分卡回去检查 SKILL.md 的「输出要求」章节是不是写清楚了。5. 常见报错排查跑不通的时候对照下面几个真实报错。5.1 401 Unauthorized{error: {type: authentication_error, message: invalid x-api-key}}Key 没配对。检查ANTHROPIC_API_KEY是不是完整复制有没有多余空格。如果用的是 settings.json确认 JSON 格式没写错逗号别多别少。5.2 local proxy failedError: local proxy failed to connectBase URL 写错了。确认是https://taotoken.net/api不要带/v1或/messages后缀。Claude Code 会自己拼路径你多写一段就 404。5.3 reading choices 报错Error: reading choices of undefined这是请求体格式不对。Claude Code 走的是 Anthropic 格式messages数组不是 OpenAI 的choices。检查你的 Model ID 是不是写成了 OpenAI 的模型名。Anthropic 模型 ID 形如claude-sonnet-4-20250514。5.4 OAuth 相关报错Error: OAuth token expired如果你之前登录过 Anthropic 官方账号本地可能残留 OAuth 凭证和 API Key 冲突。清掉~/.claude/下的凭证缓存或者显式设置ANTHROPIC_API_KEY覆盖。5.5 Skill 不触发输入审查指令后模型没加载 Skill。检查 SKILL.md 的description有没有写触发场景关键词。description 太泛比如只写「代码审查」模型可能不认加上「当用户要求审查代码、review PR 时触发」这类明确条件。5.6 输出缺章节报告里少了评分卡或优点章节。这是模板占位符没填全。在 SKILL.md 里加一条硬约束「所有占位符必须填充无内容填『无』不得删除模板章节」。模型对显式约束的遵守率明显更高。6. 接入文档与后续分流通道和 Skill 都跑通之后日常用起来就三件事拿 Key、配 Base URL、写 SKILL.md。Key 和通道管理在控制台Skill 的写法参考接入文档。如果你只是想让模型帮你审一段代码不打算做模板化直接用模型对话就行不用折腾 Skill。但如果你要把审查结果归档、对比、喂给 CI那模板驱动这套值得投入。长期做编码和 Agent 的话Coding Plan 更划算用量和模型切换都在一个面板里管。具体选哪个看你的使用频率偶尔审一次用按量天天跑 CI 用套餐。接入文档里有完整的 API 参数说明和示例配 Key 遇到问题先翻那里。
返回列表