news 2026/5/1 17:18:04

如何让AI写代码越写越像你

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何让AI写代码越写越像你

让 AI 越写越像你:用 Hook 自动积累编码规范的实践

问题的起点

用 AI 写了一段时间代码之后,我开始觉得有点别扭。

功能是实现了,逻辑也没错,但代码"不像我写的"。方法命名的习惯不一样,返回值的处理方式不同,注释的位置也不对。每次让 AI 改代码,我都要再花时间把风格对齐,或者直接忍着。

解决这个问题最直接的办法是:把自己的编码规范写进CLAUDE.md,让 AI 每次都照着来。

这个方向没错,但有个问题——规范是写不完的。写出来的规范都是大原则,真正让代码"有个人味"的那些东西,是在一次次具体的改动中体现出来的。比如我偏好把 null 判断前置而不是嵌套、比如我不喜欢在 Service 层里写if/else分支、比如我觉得方法名里的do前缀是多余的。这些东西你事先想不到,只有在被触动的时候才知道。

所以真正的问题变成了:怎么把这些"被触动的瞬间"自动记录下来?


思路

整个方案的核心逻辑很简单:

  1. 每次让 AI 改代码,自动抓下「改了什么」
  2. 用 AI 对这次改动生成一句话摘要,说清楚背后的设计意图
  3. 按时间归档成 Markdown 文件
  4. 定期人工复盘,把高频模式提炼进正式的编码规范

关键在第一步和第二步——把人工成本压到几乎为零,记录才能持续。

Claude Code 有一个 Hook 机制,可以在工具调用前后、对话开始时、对话结束时执行自定义脚本。这是整个方案的技术基础。


Hook 架构

整体数据流如下:

整个系统由四个脚本组成,分别挂在四个 Hook 事件上:

UserPromptSubmit → opt_track.py 检测关键词,初始化追踪轮次 PreToolUse → opt_capture_before.py 修改前拍快照(只取最原始状态) PostToolUse → opt_capture_after.py 修改后拍快照(始终取最新状态) Stop → opt_write_record.py 生成 diff,调 AI 摘要,写文件

Hook 配置在~/.claude/settings.json里:

"hooks":{"UserPromptSubmit":[{"matcher":"","hooks":[{"type":"command","command":"python3 ~/.claude/hooks/opt_track.py"}]}],"PreToolUse":[{"matcher":"Edit|Write|MultiEdit","hooks":[{"type":"command","command":"python3 ~/.claude/hooks/opt_capture_before.py"}]}],"PostToolUse":[{"matcher":"Edit|Write|MultiEdit","hooks":[{"type":"command","command":"python3 ~/.claude/hooks/opt_capture_after.py"}]}],"Stop":[{"hooks":[{"type":"command","command":"python3 ~/.claude/hooks/opt_write_record.py"}]}]}

各脚本逻辑

opt_track.py — 关键词触发

并不是每一轮对话都值得记录。我只想抓"有意识地让 AI 改代码"的那些时刻,所以用关键词做过滤:

KEYWORDS=['优化','重构','改进']has_keyword=any(kwinpromptforkwinKEYWORDS)

命中关键词时,创建一个新的追踪轮次(index 自增),记录下 prompt 内容和当前工作目录。没命中但当前有活跃追踪的,把这条 prompt 追加为"执行步骤",方便后续理解完整上下文。

所有中间状态都写在/tmp/claude-opt-{session_id}/里,按 session 隔离。

opt_capture_before.py — 修改前快照

每次 AI 调用Edit/Write/MultiEdit前,把文件当前内容备份到{session_dir}/changes/{index}/{safe_name}.before

有个细节:每个文件每轮只拍一次。如果 AI 对同一个文件做了多次修改,只保留最原始的版本,这样生成的 diff 才能反映完整的变化量。

opt_capture_after.py — 修改后快照

每次修改完,把文件内容备份到.after文件。这里是每次都覆盖,保留最终状态。

before+after凑成一对,就能算出本轮的完整 diff。

opt_write_record.py — 生成记录

对话结束时(Stop事件)触发,做三件事:

1. 生成 diff

用 Python 标准库difflib对 before/after 文件生成 unified diff:

diff=list(difflib.unified_diff(before_lines,after_lines,fromfile='修改前',tofile='修改后',n=3))

2. 调 AI 生成摘要

把本轮的 prompt(意图)+ 执行步骤 + diff 喂给 Claude Haiku,让它用 2~4 句话总结核心改动和设计原则:

summary_prompt=('以下是一次代码优化会话的内容,请用 2~4 句话总结:''核心改动是什么,体现了哪些代码设计原则或最佳实践。\n\n'+context+'\n\n只输出总结内容,不要其他说明。')

用 Haiku 而不是主模型,是为了省成本——摘要任务不需要很强的模型。

3. 写入 Markdown 文件

同一个 session 的多轮记录追加到同一个文件里,文件按时间戳命名,归档到代码规范积累/YYYY-MM/目录:

代码规范积累/ └── 2026-04/ ├── 20260401-143022.md ├── 20260415-090531.md └── 20260428-165847.md

每个文件的结构大致是:

# 代码优化记录 2026-04-28 16:58:47 > 项目目录:`/Users/.../my-project` ## 摘要(2026-04-28 16:58:47) 本次优化将 Service 层中散落的 null 判断统一前置, 避免了深层嵌套。提取了重复的校验逻辑为私有方法, 体现了单一职责原则。 --- ## 优化 1 **意图:** 重构 UserService,把 null 判断统一提到方法入口 ### 文件:`src/main/java/...UserService.java` \`\`\`diff - if (user != null) { - if (user.getStatus() != null) { + Objects.requireNonNull(user, "user must not be null"); + if (user.getStatus() == null) { \`\`\`

整理流程

自动记录只是第一步,记录本身不会让 AI 变聪明。真正起作用的是定期复盘,把模式提炼进规范

我大概每两周会做一次整理:

  1. 翻看代码规范积累/下最近的文件
  2. 找出多次出现的同类改动(这意味着这是我真实的习惯)
  3. 提炼成一条规则,写进代码风格.md
  4. 代码风格.md会被同步到工作项目的CLAUDE.md里,作为 AI 的编码约束

这个循环跑起来之后,规范会越来越准确,AI 的初稿也会越来越"像我的风格",需要手动对齐的次数自然减少。


几个实际体感

记录比想象中多。开始以为一周也就几条,实际跑起来发现每天都有。原来在无意识的情况下,已经在持续地用 AI 做小规模的代码调整了。

摘要质量够用。Haiku 生成的摘要不够精炼,但信息量足够判断这条记录值不值得提炼成规范。复盘时扫一眼摘要,再看 diff,效率还不错。

关键词过滤有局限。用"优化/重构/改进"触发追踪,会漏掉一些有价值的改动。比如直接说"把这个方法改一下",就不会被记录。后续可以考虑换成"所有有文件修改的对话都记录",让整理阶段来做筛选,而不是记录阶段。

这套东西的本质是个反馈回路。用 AI 改代码 → 自动记录 → 人工提炼 → 写进规范 → AI 按规范写代码。规范的准确性会随着时间提升,因为它是从真实行为里归纳出来的,而不是提前猜测的。


最后

这套方案没有什么神奇的地方,核心是把"总结经验"这件本来需要主动去做的事,变成被动自动发生的。

如果你也在用 Claude Code,可以把这几个脚本直接拿去用,按自己的关键词触发逻辑和归档路径改一改就行。

Hook 安装格式说明:脚本通过 stdin 接收 JSON 数据(包含session_idtool_inputprompt等字段),正常退出码为 0。PreToolUse的脚本若返回非 0,会阻断当次工具调用——所以opt_capture_before.py在找不到 session 追踪时直接sys.exit(0)而不报错。配置写在~/.claude/settings.jsonhooks字段下,支持matcher正则过滤触发的工具名。

四个脚本见:https://download.csdn.net/download/wsss_fan/92842958

  • opt_track.py— 关键词检测,追踪轮次初始化
  • opt_capture_before.py— 修改前快照
  • opt_capture_after.py— 修改后快照
  • opt_write_record.py— 生成 diff + 摘要 + 写入归档

让 AI 越写越像你,不是靠提示词技巧,是靠把你自己的行为模式系统性地反馈给它。

最后补充一句,积累下来的素材也是代码规范分享的好案例。

自荐一下我的微信小程序 - “两步动态验证”(超级好用)

有任何建议或需求可以直接联系我
免费云端加密备份:换机不丢失,安全又便捷
API快速集成:提供开放API,实现自动化验证码获取
多端共享:基于微信小程度,可同时在手机,PC端共同使用,一键复制
扫描二维码试用,或微信小程序搜索"两步动态验证"

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 17:16:39

长期项目使用 Taotoken 按 token 计费模式带来的成本可控感受

长期项目使用 Taotoken 按 token 计费模式带来的成本可控感受 1. 项目背景与计费需求 在持续数月的 AI 应用开发项目中,团队需要频繁调用大模型 API 进行原型验证、功能迭代和效果优化。传统按次或包月计费模式难以适应这种波动性较大的研发场景,往往导…

作者头像 李华
网站建设 2026/5/1 17:16:25

Tesseract-OCR安装后别急着用:先搞定这3个环境配置和语言包下载的坑

Tesseract-OCR安装后必做的3项关键配置与语言包优化实战 刚完成Tesseract-OCR安装的你,可能已经迫不及待想体验这款强大OCR工具的魅力。但别急——我见过太多开发者在这个阶段栽跟头。上周就有一位同事在项目演示现场遭遇"tesseract不是内部命令"的尴尬&a…

作者头像 李华
网站建设 2026/5/1 17:15:26

英雄联盟本地自动化工具:LeagueAkari 终极指南与实战应用

英雄联盟本地自动化工具:LeagueAkari 终极指南与实战应用 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkari是一款专为英…

作者头像 李华