让AI更懂你,松哥教你一招!

客户 CodeBuddy opsx OpenSpec api
发布于 2026-06-10
4

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读

AI 写的代码总是跑偏?今天我们来聊聊这个问题。

松哥最近在用 CodeBuddy 开发项目,发现了一个让人头疼的问题。

每次让 CodeBuddy 帮我写功能,我只是随口说了一句需求,结果 AI 理解的和我想要的不一样:

  • 我说"帮我做个客户管理",AI 给我写了一个带 Redis 缓存的复杂系统,但我的项目根本没有 Redis
  • 我说"加个跟进记录功能",AI 用了 MongoDB,但我的数据库是 MySQL
  • 我说"做个销售漏斗",AI 给我写了一堆图表组件,但我只是想要一个简单的状态流转

每次都要反复沟通、反复修改,效率极低。

后来松哥发现了 OpenSpec 这个工具,专门解决这个问题。它的核心思想是:

先写规范,再写代码。让 AI 和你在动手之前就达成共识。

今天松哥就带大家用 OpenSpec + CodeBuddy,从零开发一个简易的 CRM(客户关系管理)系统,手把手教你怎么用规范驱动开发提升效率。


准备工作

技术栈说明

我们要开发的 CRM 系统,技术栈如下:

层次
技术选型
后端框架
Spring Boot 3.x
数据库
MySQL 8.0
ORM
MyBatis-Plus
缓存
暂不引入(保持简单)
认证
JWT
前端
Vue 3 + Element Plus
构建工具
Maven

安装 Node.js

OpenSpec 是一个 Node.js 工具,需要先安装 Node.js(版本 20.19.0 或以上)。

去 Node.js 官网 下载安装即可。

安装完成后,验证:

node -v # 输出类似:v22.0.0  npm -v # 输出类似:10.0.0 

安装 OpenSpec

npm install -g @fission-ai/openspec@latest 

安装完成后,验证:

openspec --version # 输出类似:openspec/1.x.x 

安装腾讯 CodeBuddy

安装完成后,用腾讯云账号登录即可。

创建项目并初始化 OpenSpec

创建 Spring Boot 项目

用 Spring Initializr 创建项目,配置如下:

Project:    Maven Language:   Java Spring Boot: 3.2.x Group:      com.example Artifact:   crm Java:       17  Dependencies:  - Spring Web  - Spring Data JPA(或 MyBatis-Plus)  - MySQL Driver  - Spring Security  - Lombok  - Validation 

下载解压后,用 IDE 打开项目。

初始化 OpenSpec

在项目根目录打开终端,执行:

# 进入项目目录 cd /path/to/your/crm-project  # 初始化 OpenSpec,指定 CodeBuddy 工具 openspec init --tools codebuddy 

执行后,OpenSpec 会在项目中创建以下目录结构:

crm-project/ ├── openspec/ │   ├── specs/          # 系统规范(源代码真理) │   └── changes/        # 待开发的功能变更 ├── .codebuddy/ │   ├── skills/         # OpenSpec 注入的 AI 技能 │   └── commands/       # OpenSpec 注入的斜杠命令 └── src/  └── ...(Spring Boot 源码) 

这时候 OpenSpec 已经把自己的"技能"注入到了 CodeBuddy 里,后续在 CodeBuddy 对话框里就可以直接使用 /opsx:propose 等命令了。

CRM 系统功能规划

在开始写代码之前,我们先梳理一下 CRM 系统要做哪些功能。

核心功能模块

一个基础的 CRM 系统,通常包含以下模块:

CRM 系统 ├── 用户管理 │   ├── 登录 / 登出 │   └── 用户信息管理 ├── 客户管理 │   ├── 客户列表 │   ├── 新增 / 编辑客户 │   ├── 客户详情 │   └── 客户搜索 ├── 跟进记录 │   ├── 添加跟进记录 │   ├── 查看跟进历史 │   └── 跟进提醒 └── 销售机会  ├── 机会列表  ├── 阶段管理(销售漏斗)  └── 赢单 / 输单 

开发顺序

我们按照以下顺序逐步开发:

  1. 第一步:用户认证(登录 / JWT)
  2. 第二步:客户管理(CRUD)
  3. 第三步:跟进记录
  4. 第四步:销售机会

每一步都用 OpenSpec 先写规范,再让 CodeBuddy 实现。

开发用户认证模块

用 OpenSpec 提议功能

打开 CodeBuddy 对话框,输入:

/opsx:propose add-user-auth 

CodeBuddy 会自动创建以下文件:

openspec/changes/add-user-auth/ ├── proposal.md      ← 为什么做、做什么 ├── specs/ │   └── auth/ │       └── spec.md  ← 具体需求和场景 ├── design.md        ← 技术方案 └── tasks.md         ← 实现清单 

查看并确认规范

OpenSpec 生成的 proposal.md 大概是这样的:

# 提议:用户认证模块  ## 意图 CRM 系统需要用户认证,确保只有授权用户才能访问系统数据。  ## 范围 - 用户登录接口(用户名 + 密码) - JWT Token 生成和验证 - 登出接口 - 当前用户信息查询  ## 方案 使用 Spring Security + JWT 实现无状态认证。 Token 存储在客户端,服务端不维护 Session。 

specs/auth/spec.md 大概是这样的:

# 认证规范  ## 新增需求  ### 需求:用户登录 系统 SHALL 在用户提供正确的用户名和密码后,返回 JWT Token。  #### 场景:登录成功 - 给定:用户名 admin,密码正确 - 当:POST /api/auth/login - 那么:返回 200,包含 token 字段 - 并且:token 有效期为 24 小时  #### 场景:密码错误 - 给定:用户名 admin,密码错误 - 当:POST /api/auth/login - 那么:返回 401,包含错误信息  ### 需求:Token 验证 系统 SHALL 对所有非公开接口验证 JWT Token。  #### 场景:Token 有效 - 给定:请求头携带有效 Token - 当:访问任意受保护接口 - 那么:正常返回数据  #### 场景:Token 无效或过期 - 给定:请求头携带无效或过期 Token - 当:访问任意受保护接口 - 那么:返回 401 

design.md 大概是这样的:

# 设计:用户认证  ## 技术方案 - Spring Security 配置白名单(/api/auth/** 不需要认证) - JWT 工具类:生成、解析、验证 Token - JwtAuthenticationFilter:每次请求验证 Token - UserDetailsService:从数据库加载用户信息  ## 数据库设计 表名:sys_user 字段: - id(主键) - username(用户名,唯一) - password(密码,BCrypt 加密) - real_name(真实姓名) - status(状态:0 禁用,1 启用) - create_time(创建时间) - update_time(更新时间)  ## 接口设计 POST /api/auth/login    → 登录 POST /api/auth/logout   → 登出 GET  /api/auth/me       → 当前用户信息 

tasks.md 大概是这样的:

# 任务  ## 1. 数据库 - [ ] 1.1 创建 sys_user 表 - [ ] 1.2 插入初始管理员账号(admin/123456)  ## 2. 实体和 Mapper - [ ] 2.1 创建 SysUser 实体类 - [ ] 2.2 创建 SysUserMapper 接口  ## 3. JWT 工具 - [ ] 3.1 引入 jjwt 依赖 - [ ] 3.2 创建 JwtUtils 工具类  ## 4. Spring Security 配置 - [ ] 4.1 创建 SecurityConfig 配置类 - [ ] 4.2 创建 JwtAuthenticationFilter 过滤器 - [ ] 4.3 创建 UserDetailsServiceImpl 实现类  ## 5. 认证接口 - [ ] 5.1 创建 AuthController - [ ] 5.2 实现登录接口 - [ ] 5.3 实现登出接口 - [ ] 5.4 实现当前用户信息接口  ## 6. 测试 - [ ] 6.1 测试登录成功 - [ ] 6.2 测试密码错误 - [ ] 6.3 测试 Token 验证 

:::success重要:在让 CodeBuddy 开始写代码之前,先仔细阅读这些规范文件,确认它们符合你的预期。如果有不对的地方,直接修改文件内容即可。

:::

让 CodeBuddy 实现代码

确认规范无误后,在 CodeBuddy 对话框输入:

/opsx:apply 

CodeBuddy 会按照 tasks.md 的清单,逐个任务实现代码:

CodeBuddy:正在实现 add-user-auth...  ✓ 1.1 创建 sys_user 表(src/main/resources/sql/init.sql) ✓ 1.2 插入初始管理员账号 ✓ 2.1 创建 SysUser 实体类 ✓ 2.2 创建 SysUserMapper 接口 ✓ 3.1 引入 jjwt 依赖(pom.xml) ✓ 3.2 创建 JwtUtils 工具类 ✓ 4.1 创建 SecurityConfig 配置类 ✓ 4.2 创建 JwtAuthenticationFilter 过滤器 ✓ 4.3 创建 UserDetailsServiceImpl 实现类 ✓ 5.1 创建 AuthController ✓ 5.2 实现登录接口 ✓ 5.3 实现登出接口 ✓ 5.4 实现当前用户信息接口 ✓ 6.1-6.3 编写测试用例  所有任务完成! 

验证实现

/opsx:verify 

CodeBuddy 会检查实现是否符合规范:

CodeBuddy:验证 add-user-auth...  完整性:✓ 所有任务完成 正确性:✓ 接口符合规范定义 一致性:✓ 代码风格与设计文档一致  可以归档! 

归档并进入下一步

/opsx:archive 
              
            
              
          

江南一点雨