news 2026/6/12 1:05:51

不微调模型,只写 skill:我让 Claude 学会了一个它从未见过的框架

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
不微调模型,只写 skill:我让 Claude 学会了一个它从未见过的框架

Claude Code 写 Spring Boot、MyBatis、JPA 已经越来越像一个高级开发。

但只要换成公司的内部框架、私有 SDK、自研中间件,它立刻开始一本正经地胡说八道。

最近我在维护自己的 ORM 框架 DLZ-DB 时,就遇到了这个问题。于是我尝试用 Claude Code Skill 给 AI 填了一份”教材”。

结果很有意思:

没有微调模型,没有训练数据,只靠一套 Markdown 文档,Claude 就能稳定写出它从未见过的 DLZ-DB 代码。


一、AI Coding 最大的问题,不是模型不够聪明

过去一年大家都在追模型能力:

  • GPT-5
  • Claude
  • Gemini
  • DeepSeek

模型越来越强。

但企业里的真实问题往往不是:

AI 不够聪明。

而是:

AI 不知道你公司的知识。

例如:

  • 内部 SDK
  • 自研 ORM
  • 私有 RPC
  • 公司规范
  • 业务约定

这些内容永远不会出现在公开训练数据里。

对于 AI 来说:

OrderClient.query(orderId);

和:

UserMapper.selectById(id);

没有本质区别。

如果它没见过你的 API,它只能猜。

而 AI 最擅长的事情之一,就是自信地猜。


二、当 Claude 遇到一个它从未见过的 ORM

我维护了一个自研 ORM:

DLZ-DB。

核心代码不到 7000 行,目前运行在十几个项目中。

它和传统 ORM 的设计不太一样:

  • 无 Mapper
  • 无 XML
  • 无 DAO
  • 静态入口调用

例如查询用户:

DB.Pojo.select(User.class).like(User::getName,"张").queryBeanList();

但 Claude 并不知道这些。

于是经常出现这样的情况:

// Claude 幻觉生成userMapper.selectList(newQueryWrapper<User>().like("name","张"));

问题是:

  • UserMapper 不存在
  • QueryWrapper 不存在
  • selectList 不存在

整个项目都编译不过。

Claude 不是不会写代码。

它只是没见过 DLZ-DB。


三、为什么 RAG 不够,文档也不够

很多人第一反应:

给 AI 丢文档不就行了吗?

实际上效果并不好。

因为大部分框架文档是给人看的。

例如:

DLZ-DB 是一个轻量级 ORM 框架。 支持动态条件查询。 支持分页查询。 支持多数据源。

开发者能看懂。

AI 不一定能准确使用。

对于代码生成来说:

下面这种内容价值高得多。

MyBatis-PlususerMapper.selectById(id);DLZ-DBDB.Pojo.select(User.class).eq(User::getId,id).queryBean();

或者:

❌ 错误in(1)✅ 正确in(Arrays.asList(1))

后来我发现:

一个正确示例的价值,经常超过二十行文字解释。


四、Claude Skill 到底是什么

Claude Code 提供了一套 Skill 机制。

简单理解:

它允许你给 AI 挂载一套按需加载的知识库。

很多人以为 Skill 是训练模型。

其实不是。

Claude 并没有真正学会 DLZ-DB。

它的工作流程更像这样:

用户需求 ↓ Claude Code ↓ 发现需要 DLZ 知识 ↓ 读取 Skill ↓ 加载对应文档 ↓ 生成代码

所以:

  • 不需要微调
  • 不需要训练数据
  • 不需要重新训练模型

只需要把知识组织好。


五、我给 DLZ 设计了一套 Skill

项目已经开源:

https://github.com/dingkui/dlz-ai-skill

整体结构如下:

.claude/skills/ ├── SKILL.md ├── README.md │ ├── ref/ │ ├── dlz-db.md │ ├── dlz-kit.md │ └── constraints.md │ ├── guide/ │ ├── entity.md │ ├── controller.md │ ├── service.md │ └── migration.md │ ├── framework/ │ ├── spring-boot.md │ └── solon.md │ └── examples/ ├── crud.md ├── page.md ├── sql.md ├── transaction.md └── jsonmap.md

但真正重要的不是目录。

而是知识如何组织。


六、第一层:原则

入口文件只有几条核心规则。

1. 无 Mapper/DAO/XML 2. 简单 CRUD 不建 Service 3. 复杂逻辑才建 Service 4. 写操作必须 execute() 5. 事务统一规范

目的只有一个:

先纠正 Claude 的惯性。

因为它见过太多:

UserMapperOrderMapperQueryWrapper

如果不提前约束。

它会本能地生成这些代码。


七、第二层:硬约束

这一层专门记录最容易踩坑的地方。

例如:

1. 无 Mapper 2. 无 DAO 3. columns() 不是 select() 4. insert 不需要 execute() 5. in() 不允许传单值 6. 预设 SQL 必须 key.xxx 7. queryBean 和 queryOne 区分

这些规则看起来简单。

但 AI 特别容易犯。

把它们独立出来之后,生成质量提升非常明显。


八、第三层:API 参考

这一层类似官方文档。

告诉 Claude:

DB.Pojo.select()DB.Pojo.update()DB.Pojo.delete()DB.Sql.query()DB.Jdbc.query()

分别怎么用。

返回什么。

支持哪些参数。

这里追求的是准确。

而不是讲原理。


九、第四层:完整示例

这是我后来发现最重要的一层。

例如分页:

@GetMapping("/page")publicR<Page<User>>page(IntegerpageNum,IntegerpageSize,Integerstatus){Page<User>page=DB.Pojo.select(User.class).eq(status!=null,User::getStatus,status).orderByDesc(User::getCreateTime).page(pageNum,pageSize).queryBeanPage();returnR.data(page);}

相比于:

支持分页查询

这种完整代码对 AI 更有价值。

因为它能看到:

  • Controller 写法
  • 参数风格
  • 返回值风格
  • 条件查询风格
  • 分页写法

完整上下文。


十、效果对比

让 Claude 写一个用户分页接口。

没有 Skill 时:

@AutowiredprivateUserMapperuserMapper;publicPage<User>page(){returnuserMapper.selectPage(newPage<>(),newQueryWrapper<>());}

结果:

  • UserMapper 不存在
  • QueryWrapper 不存在
  • API 不存在

基本全是幻觉。


加载 Skill 后:

@GetMapping("/page")publicR<Page<User>>page(IntegerpageNum,IntegerpageSize,Integerstatus){Page<User>page=DB.Pojo.select(User.class).eq(status!=null,User::getStatus,status).page(pageNum,pageSize).queryBeanPage();returnR.data(page);}

已经完全符合项目规范。

甚至连:

eq(condition,...)

这种约定俗成的写法都能正确生成。


十一、我总结出的几个经验

1、先写约束,再写 API

AI 最大的问题不是不会用 API。

而是调用了不存在的 API。

所以:

不要做什么

比:

可以做什么

更重要。


2、代码示例远比文字重要

下面这种:

支持动态条件查询

价值有限。

不如:

.eq(User::getStatus,status).like(User::getName,name)

来得直接。


3、对照表非常有效

例如:

MyBatisPlususerMapper.selectById(id);DLZ-DBDB.Pojo.select(User.class).eq(User::getId,id).queryBean();

Claude 对这种迁移映射理解非常快。


4、知识量超过 200 行就拆文件

不要把所有内容塞进一个 CLAUDE.md。

按:

  • 原则
  • 约束
  • API
  • 示例

拆开组织。

效果会好很多。


5、持续迭代

第一版 Skill 不需要完美。

先覆盖:

  • CRUD
  • 分页
  • 事务

然后观察 AI 哪里犯错。

再补充约束。

我现在那份 Skill 里的很多规则,就是这么迭代出来的。


十二、AI Coding 的下一步,也许是知识工程

过去很多人觉得:

AI Coding 的终极方案是更强的模型。

做完这套 Skill 之后,我反而越来越觉得:

企业落地 AI 的关键,未必是模型能力。

而是知识表达能力。

公司的框架、SDK、开发规范、业务约定,永远不会出现在训练数据里。

但只要这些知识能够被结构化表达。

哪怕是一个从未见过你框架的模型,也能写出正确的代码。

Skill 的价值,不是让 AI 更聪明。

而是让 AI 获得属于你团队的知识。


项目地址

Claude Skill

https://github.com/dingkui/dlz-ai-skill

DLZ-DB

https://github.com/dingkui/dlz-db

如果你也在维护内部框架、自研 SDK 或企业级平台,不妨试试给 AI 写一份“教材”。

很多时候,你缺的不是更强的模型。

而是一套能够被 AI 理解的知识。

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

2026TikTok IP隔离浏览器怎么安装:自定义IP区段,杜绝关联限流

2026年TikTok Shop风控已升级至IP区段级校验&#xff0c;普通浏览器或简易工具因IP复用、区段混杂&#xff0c;导致90%多账号限流、降权、封号。TikTok算法会深度核验IP归属地、网段纯净度、IP与账号匹配度&#xff0c;一旦IP区段交叉&#xff0c;即刻触发关联风控。本文聚焦安…

作者头像 李华
网站建设 2026/6/12 1:04:55

MPC755硬件设计:信号完整性、上拉配置与热管理实践

1. MPC755硬件设计&#xff1a;从信号到热量的系统工程实践在嵌入式系统&#xff0c;尤其是基于PowerPC架构的高性能RISC微处理器设计中&#xff0c;硬件工程师面临的挑战远不止是“把芯片焊上板子&#xff0c;然后通电”那么简单。以MPC755这类经典的处理器为例&#xff0c;其…

作者头像 李华
网站建设 2026/6/12 1:01:01

Unpaywall浏览器扩展:如何快速获取免费学术文献的终极指南

Unpaywall浏览器扩展&#xff1a;如何快速获取免费学术文献的终极指南 【免费下载链接】unpaywall-extension Firefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles 项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-exte…

作者头像 李华
网站建设 2026/6/12 0:58:04

深入解析PowerPC MPC7447A:七级流水线、AltiVec向量单元与硬件设计实战

1. 项目概述&#xff1a;从PowerPC G4到MPC7447A在嵌入式与高性能计算领域&#xff0c;PowerPC架构曾是一面旗帜。它诞生于IBM、摩托罗拉和苹果的AIM联盟&#xff0c;其设计哲学深深影响了后来的处理器发展。今天我们要深入探讨的&#xff0c;是这一家族中一颗极具代表性的“心…

作者头像 李华
网站建设 2026/6/12 0:55:06

终极解决方案:一键免费下载30+平台文档的完整指南

终极解决方案&#xff1a;一键免费下载30平台文档的完整指南 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档&#xff0c;但是相关网站浏览体验不好各种广告&#xff0c;各种登录验证&#xff0c;需要很多步骤才能下载文档&#xff0c;该脚本就是为了解决您…

作者头像 李华