游乐游手机版
首页/AI教程/文章详情

CodeBuddy第二课对话模式深度使用

时间:2026-06-05 16:31
CodeBuddy 学习(2):对话模式深度使用 在使用 CodeBuddy 这类 AI 编程工具时,一个核心问题始终无法回避——控制权如何分配。何时让 AI 自主执行任务,何时必须暂停等待你的确认?CodeBuddy 提供的三种对话模式,正是为解决这一关键问题而设计。 一、概述:三种模式的内在逻辑

CodeBuddy 学习(2):对话模式深度使用

在使用 CodeBuddy 这类 AI 编程工具时,一个核心问题始终无法回避——控制权如何分配。何时让 AI 自主执行任务,何时必须暂停等待你的确认?CodeBuddy 提供的三种对话模式,正是为解决这一关键问题而设计。

一、概述:三种模式的内在逻辑

为什么需要三种模式?

归根结底,对话式 AI 编程的核心矛盾在于控制权的分配。AI 在什么情况下可以自主行动,什么情况下必须等待你的审批,这直接关系到编码效率与项目安全风险。

CodeBuddy 学习(2):对话模式深度使用

使用场景控制权归属对应模式
提问、学习、技术讨论你全面掌控,AI 仅输出信息Ask
明确的编码任务AI 直接执行,你逐条审查Craft
复杂、不确定的任务AI 先规划,你确认后执行Plan

三种模式并非简单的三选一,它们本质上是一条控制权逐级释放的递进路径:

Ask(只问不做)→ Craft(边做边调)→ Plan(先想后做)

核心原则其实很朴素:你越清楚要做什么,越可以交给 AI 直接执行;你越不确定,越应该先用 Ask 或 Plan 收敛思路。别一上来就让 AI 动手,先问清楚再说。

二、Ask模式:只读问答

原理讲解

Ask 模式是约束最严格的——不允许修改任何文件,不允许执行任何命令。简单来说,就是 AI 只动口不动手。

工作原理怎么理解?

  1. AI 接收你的问题,同时从当前打开的文件和项目中收集上下文。
  2. 通过 @ 引用可以在当前消息中注入特定文件的完整内容。
  3. AI 基于上下文生成回复,但所有回复都是纯文本,不会产生任何副作用。
  4. 回复内容中可能包含代码片段,但需要你手动复制到文件。

适用场景也很清晰:

场景你问什么得到什么
学习 API 用法“useEffect cleanup 怎么写?”代码片段 + 使用说明
分析现有代码“解释这段业务逻辑”分步注释 + 风险标注
技术方案决策“方案 A 和方案 B 哪个更好?”结构化对比分析

示例:分析遗留代码

假设项目中有以下代码文件order.ts,这是一个典型的遗留代码模块:

```typescript // order.ts — 订单处理模块(遗留代码) interface OrderItem { id: number; price: number; quantity: number; } interface Order { id: number; items: OrderItem[]; status: 'pending' | 'paid' | 'cancelled' | 'returned'; userBalance: number; } /** * 处理订单状态流转和扣款 * 注意:此函数在遗留系统中被 12 个模块调用,重构需谨慎 */ function processOrder(order: Order): Order { // 取消和退货直接返回 if (order.status === 'cancelled' || order.status === 'returned') { return { ...order }; } // 已支付不再处理 if (order.status === 'paid') { return { ...order }; } // 计算总价 let total = 0; for (let i = 0; i < order.items.length; i++) { total += order.items[i].price * order.items[i].quantity; } // 空订单免费? if (total === 0) { return { ...order, status: 'paid' }; } // 余额不足 if (order.userBalance < total) { throw new Error('余额不足'); } // 扣款并标记已支付 return { ...order, status: 'paid', userBalance: order.userBalance - total, }; } export { processOrder }; export type { Order, OrderItem }; ```

操作步骤:

  1. 在 CodeBuddy 中打开order.ts
  2. 切换到 Ask 模式。
  3. 在对话框中输入:
    @file order.ts
    请分析 processOrder 函数,包括:
    1. 状态流转分支
    2. 潜在的 Bug 和风险
    3. 数据库事务重写的注意事项

预期输出会是类似这样的结构化分析:

状态流转分析:
cancelled / returned → 直接返回(不处理)
pending → 计算总价 → 检查余额 → 扣款 → 标记 paid
paid → 直接返回(幂等保护)

风险标注:
⚠ 高:高并发超扣风险
两个请求同时读取到相同的 userBalance,各自扣款后都认为余额足够,最终超扣。
数据库层应使用 SELECT ... FOR UPDATE 或乐观锁(version 字段)。

⚠ 中:数据一致性问题
函数只在内存中修改 order 对象,如果没有持久化步骤,状态变更会丢失。
建议增加一个 orderRepository.sa ve(order) 调用点。

⚠ 低:空数组免费漏洞
total === 0 时直接将状态设为 paid,可能导致空订单被标记为已支付。
应区分"空订单"和"总价为 0 的订单"。

事务重写注意事项:
1. 使用数据库事务包裹整个流程
2. 先锁定用户余额行(SELECT FOR UPDATE)
3. 在事务内完成:余额检查 → 扣款 → 订单状态更新
4. 全部成功后提交,任何一步失败则回滚

调试过程

场景一:回答太泛,未聚焦核心问题

现象:AI 给出了通用性分析,但没有深入具体的状态流转分支。原因在于问题描述过于开放,AI 不知道你关心的侧重点。排查时检查原始问题是否包含明确的输出格式要求。修复方法很简单:收紧焦点,加上具体指令,比如“重点说明 cancelled 和 returned 的区别,以及 process 步骤中的余额检查顺序是否有问题”。

场景二:Ask 模式下 AI 拒绝给出代码

现象:你问“怎么重构这个函数”,AI 只提供了文字建议。这其实是 Ask 模式的预期行为——只给分析不给代码修改,属于安全设计。排查时确认对话面板顶部当前模式是否为 Ask。如需生成代码,切换到 Craft 模式;或者把需求改为“请帮我写一个重构方案(伪代码)”,伪代码不算写文件,Ask 模式通常会提供。

场景三:@file 引用后 AI 似乎没看到文件

现象:提问 @file order.ts 后,AI 的回复和文件内容无关。可能原因有两个:一是文件路径不匹配,AI 没找到该文件;二是光标放错位置——@引用必须在对话输入框内手动输入。排查时检查文件是否当前在 CodeBuddy 项目中(IDE 左侧文件树中可见),确认 @file 是通过弹出菜单选择的(而不是手动敲的路径字符串)。如果文件不在当前项目中,先用“文件 → 打开文件夹”打开包含该文件的目录。

三、Craft模式:让AI动手写代码

原理讲解

Craft 模式是 CodeBuddy 的核心执行模式,AI 获得了文件读写和终端命令执行权限,可以说战斗力直接拉满。

工作原理:

  1. 你描述需求,AI 解析后规划执行步骤。
  2. AI 依次执行:读取现有文件 → 生成代码 → 写入文件 → (可选)运行 ESLint/测试 → 修复错误。
  3. 每步文件变更都以 Diff 视图展示,你可以逐条 Accept 或 Reject。
  4. 每次写操作前,CodeBuddy 会自动创建 Checkpoint(快照),出问题时一键回滚。

Craft 有四件法宝值得记住:

法宝作用使用时机
Diff 视图查看所有变更细节每次 Accept 前逐条审查
Checkpoint一键回滚到修改前状态改坏了、改错了
@引用限定 AI 操作范围防止 AI 修改不该动的文件
否定约束告诉 AI 不要做什么“不要改 Props 接口”“不要引入新依赖”

示例一:从零创建登录组件

操作步骤:

  1. 切换到 Craft 模式。
  2. 确保项目使用 TailwindCSS(如果没有,先用 @file 引用配置文件)。
  3. 在对话框中输入:
    @folder src/components
    请创建 LoginForm 组件,要求:
    - Props:onSubmit(email: string, password: string) => void
    - 包含邮箱输入框、密码输入框、提交按钮
    - 校验:邮箱格式(正则)、密码至少 6 位
    - 错误信息红色显示在对应输入框下方
    - 使用 TailwindCSS 样式
    - 使用 TypeScript
    - 创建后运行 ESLint 检查

AI 执行过程:

Step 1: Write → src/components/LoginForm.tsx ← 写入组件文件
Step 2: Bash → npx eslint src/components/LoginForm.tsx ← ESLint 检查
Step 3: 如果 ESLint 0 error → 完成
         如果有 error → AI 自动修复 → 再次检查
Step 4: Checkpoint 自动保存

预期输出文件(src/components/LoginForm.tsx):

```typescript import { useState, type FormEvent } from 'react'; interface LoginFormProps { onSubmit: (email: string, password: string) => void; } interface FormErrors { email?: string; password?: string; } const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; export function LoginForm({ onSubmit }: LoginFormProps) { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [errors, setErrors] = useState({}); const validate = (): boolean => { const newErrors: FormErrors = {}; if (!email.trim()) { newErrors.email = '请输入邮箱地址'; } else if (!EMAIL_REGEX.test(email)) { newErrors.email = '邮箱格式不正确'; } if (!password) { newErrors.password = '请输入密码'; } else if (password.length < 6) { newErrors.password = '密码至少需要 6 位字符'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = (e: FormEvent) => { e.preventDefault(); if (validate()) { onSubmit(email, password); } }; return (

setEmail(e.target.value)} className={`mt-1 block w-full rounded-md border px-3 py-2 shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 ${errors.email ? 'border-red-500' : 'border-gray-300'}`} placeholder="请输入邮箱" /> {errors.email && (

{errors.email}

)}

setPassword(e.target.value)} className={`mt-1 block w-full rounded-md border px-3 py-2 shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 ${errors.password ? 'border-red-500' : 'border-gray-300'}`} placeholder="请输入密码" /> {errors.password && (

{errors.password}

)}

); } ```

验收步骤:

  1. 在 Diff 视图中审查所有变更,确认:
    • Props 接口未丢失属性。
    • 错误提示文案是中文。
    • 校验逻辑完整(空值 + 格式)。
    • 没有引入额外依赖。
  2. 全部确认后,点击 Accept 保存。

示例二:Bug修复流程

场景:运行npm run dev后终端报错TypeError: Cannot read properties of undefined

操作步骤:

  1. 在 CodeBuddy 内置终端中重新执行npm run dev,确保错误输出完整。
  2. 切换到 Craft 模式。
  3. 输入:
    @terminal
    @file src/hooks/useUsers.ts
    @file src/components/UserList.tsx
    请分析终端报错,找出根因并修复。

预期执行过程:

Step 1: Read → 阅读 useUsers.ts 和 UserList.tsx
Step 2: Bash → grep 查找相关引用点
Step 3: Edit → 修复空值访问(添加 ?. 或 if 守卫)
Step 4: Bash → npm run dev → 验证通过

调试过程

场景一:AI 修改了不该动的东西

现象:你让 AI “重构校验逻辑”,结果它连 Props 接口也改了,onSubmit 签名从 (email, password) 变成了 (data: LoginData)。排查步骤:第一步,Diff 视图审查,发现接口变更;第二步,点击 Checkpoint,选择修改前的快照,一键回滚;第三步,重新发送指令:“重构校验逻辑,但不修改 LoginFormProps 接口,保持 onSubmit(email, password) 签名不变”。教训很深刻:“不要改 X”的否定约束往往比“要做 Y”的正面指令更精确。

场景二:ESLint 报错后 AI 修复循环

现象:AI 写完代码后 ESLint 报错,AI 自动修复,又引入新错误,陷入死循环。原因在于 ESLint 规则与 AI 的代码风格冲突。排查时先阅读 ESLint 输出,确认冲突的规则。如果冲突规则是项目必需的,就把具体规则告知 AI。修复方式:输入“ESLint 规则要求:函数必须有返回类型注解、禁止 any 类型、使用单引号。请按这些规则重新生成代码”。

场景三:终端命令执行失败

现象:AI 执行 npm run dev 时报错“command not found: npm”。原因在于 CodeBuddy 的内置终端环境变量可能不完整。排查时先在 CodeBuddy 终端中手动执行 npm --version,确认 npm 是否可用。如果不可用,检查 Node.js 安装和 PATH 配置。修复方式:Windows 上重启 CodeBuddy 后再次尝试;macOS/Linux 上确认 ~/.zshrc 或 ~/.bashrc 中有正确的 PATH 配置。

四、Plan模式:先规划再执行

原理讲解

Plan 模式专门面向不确定性高、影响面广的任务。说白了,就是那些你不敢让 AI 直接动手的场景。

工作原理:

  1. 需求澄清阶段:AI 不会直接动手,而是反过来提问。通过多轮问答消除需求歧义。
  2. 方案制定阶段:AI 输出技术方案(数据模型、API 设计、模块拆分),你审阅修改。
  3. 方案确认阶段:确认无误后切换到 Craft 模式执行。
  4. 逐步实施:按方案分阶段执行,每阶段完成后验证。
  5. 归档复用:方案文档保存在 .codebuddy/ 目录,下次类似需求可直接参考。

什么时候用 Plan,什么时候用 Craft?

维度PlanCraft
清楚要做什么?不太清楚非常清楚
涉及模块数量3 个以上1-2 个
有前后端协作?没有
失败损失大(重构/迁移)小(Checkpoint 可回滚)

示例:电商优惠券功能规划

操作步骤:

  1. 切换到 Plan 模式。
  2. 输入:
    我们是一个电商平台,需要加上优惠券功能。
    支持的优惠券类型:固定金额减免、百分比折扣。
    每张优惠券可以有使用次数限制。
    请先做需求澄清。

阶段一:需求澄清

AI 会逐条提问:

Q1: 一个订单可以使用多张优惠券吗?还是一单一券?
Q2: 优惠券有最低消费门槛吗(如满100减20)?
Q3: 优惠券能和会员折扣叠加吗?
Q4: 优惠券需要设置过期时间吗(绝对时间 or 领取后N天)?
Q5: 优惠券是全场的还是只能用于特定商品/分类?

你的回答:

每单只能用一张优惠券。满100元可用。
不能和会员折扣叠加(选最优的那个)。
需要设置过期时间(绝对时间)。
全场通用(第一期不做商品/分类限制)。

阶段二:方案制定

AI 输出技术方案:

# 优惠券功能技术方案

## 数据模型

### coupons 表(优惠券模板)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 主键 |
| type | enum('fixed','percent') | 优惠券类型 |
| value | decimal | 面额(固定金额/百分比) |
| min_amount | decimal | 最低消费门槛 |
| max_uses | int | 全局最大使用次数 |
| used_count | int | 已使用次数 |
| expired_at | datetime | 过期时间 |
| is_active | boolean | 是否启用 |

### user_coupons 表(用户领取记录)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 主键 |
| user_id | int | 用户ID |
| coupon_id | int | 优惠券ID |
| used_at | datetime | 使用时间(null=未使用) |

## API 设计
GET /api/coupons/a vailable → 获取可用优惠券列表(带条件筛选)
POST /api/coupons/apply → 应用优惠券(计算折后价)

## 实施阶段
Phase 1: 数据模型 + CRUD(管理后台)
Phase 2: 优惠券使用逻辑(下单时计算优惠)
Phase 3: 前端展示(优惠券列表 + 使用入口)
Phase 4: 过期检查(定时任务清理过期券)

阶段三:方案确认

你审阅后提出修改:

在 coupons 表加 is_active 字段很好。
user_coupons 也要加一个 status 字段(unused / used / expired)。
Phase 2 要补充:优惠券和会员折扣不能叠加时的选择逻辑。

AI 更新方案后,你确认,然后切换到 Craft 模式执行。

跑偏纠偏指南

偏差类型表现纠偏方法
需求理解错AI 方案和你的预期差很远回到阶段一,补充更多约束条件
方案太大拆了 20 个 Phase 做不完让 AI 按“最小可行产品”重新裁剪
实施有坑执行中卡住、技术选型不对暂停实施,修改 Plan 中对应部分,重新执行

调试过程

场景一:Plan 模式下 AI 直接开始写代码

现象:你在 Plan 模式下提需求,AI 没有做需求澄清,直接创建了文件。原因可能是模式切换未生效——当前实际处于 Craft 模式,或者需求描述过于具体,AI 判断“不需要规划”就直接执行了。排查时确认对话面板顶部模式显示为“Plan”,或者在问题开头加一句“先做需求澄清,不要直接写代码”。修复方法:新建对话,重新选择 Plan 模式,用更开放的方式描述需求。

场景二:AI 的澄清问题不够深入

现象:AI 只问了 1-2 个表面问题就开始出方案。原因在于你的初始描述已经比较完整,AI 觉得自己理解了。排查时如果方案中确实遗漏了关键点,说明 AI 没有真正理解。修复方法:主动补充“关于 X 方面,我还没有想清楚,请你多问几个问题帮我理清思路”。

五、组合拳:一天的标准工作流

三种模式不是孤立的,把它们组合起来,就能形成一条有节奏的编码流水线:

09:00 Ask → "useEffect deps 数组怎么写?" → 学习/理解
09:30 Ask → "方案A vs 方案B?" → 决策
10:00 Plan → "按方案B规划重构" → Phase 1/2/3 → 确认 → 规划
10:30 Craft → Phase 1执行 → Diff审查 → Accept → 编码
11:00 Craft → Phase 2执行 → 测试3失败 → AI修复 → 通过 → 编码+修复
11:30 Ask → "还有什么可以优化的?" → 复盘/验证

核心节奏:Ask 评估 → Plan 规划 → Craft 执行 → Ask 验证。

六、高效习惯总结

习惯说明
Diff 必看Accept 前逐条审查每一处变更
迭代推进把大任务拆成小目标,每完成一个就验证
Checkpoint 兜底重大修改前确认有快照,出问题秒回滚
否定约束“不要改 X”比“做 Y”更精准
一个对话一主题避免多个不相关任务混在同一个对话里

七、快捷键速查

功能WindowsmacOS
打开对话面板Ctrl+Shift+VCmd+Shift+V
内联编辑Ctrl+ICmd+I

八、小结

Ask → 只问不做:查 API、看代码、做决策。Craft → 直接动手:写代码、修 Bug、跑终端,Checkpoint 保底。Plan → 先想后做:新功能、迁移、协同,零成本改方案。组合拳:Ask 评估 → Plan 规划 → Craft 执行 → Ask 验证。

来源:https://juejin.cn/post/7647083669481652250
上一篇Claude Code换Kimi K2.5后再也回不去 掘金一周3.5 下一篇AI时代人人产品经理:从需求到上线的全流程管控方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Sentieon DNAscope Hybrid长短读长混合分析流程详解评测
AI教程 · 2026-06-07

Sentieon DNAscope Hybrid长短读长混合分析流程详解评测

一、前言 基因组学研究已进入下半场,精度与全面性成为临床诊断及群体研究的核心需求。然而,单一测序技术常常让人陷入选择困境:短读长测序(如 Illumina)准确性高、成本低廉,但在面对结构变异、重复序列和复杂区域时显得力不从心;长读长测序(如 Oxford Nanopore)虽能轻松跨越这些障碍,超

腾讯混元Hy3 preview 295B/21B MoE架构与上下文详解
AI教程 · 2026-06-07

腾讯混元Hy3 preview 295B/21B MoE架构与上下文详解

摘要: 295B 21B MoE 是腾讯 2026 年 4 月发布的混元 Hy3 preview 的核心架构标识。本文解释参数总量与激活参数的含义、MoE 的工作机制、为什么 Hy3 preview 能原生支持 256K 上下文,并说明它在 TokenHub 上的完整能力支持与价格档位。 一、读懂

腾讯云AI业务流架构师训练营重塑编程与业务的新范式
AI教程 · 2026-06-07

腾讯云AI业务流架构师训练营重塑编程与业务的新范式

AI业务流架构师训练营:在腾讯云上重塑编程与业务的新范式 到2026年,企业AI竞争的核心已不再是“拥有AI”,而是“谁的AI业务流架构更为高效”。这一转变彻底颠覆了传统编程模式。对于技术从业者而言,AI业务流架构师已成为舞台中央的关键角色——他们不再仅仅编写代码,而是将业务需求转化为自主运行的数字

推荐一款免费使用谷歌最新NanoBanana 2插件
AI教程 · 2026-06-07

推荐一款免费使用谷歌最新NanoBanana 2插件

谷歌近期推出了重磅更新——NanoBanana2模型正式登场。无论是在知识储备、图像生成质量、推理能力还是主体一致性方面,这一版本都实现了全面升级,堪称当前地表最强的AI生图模型之一。 生成速度直接减半,价格也同步腰斩,性价比表现极为突出。不过,国内用户想直接访问官方渠道依然困难重重,大部分路径都绕

企业生产管理系统选型排行榜
AI教程 · 2026-06-07

企业生产管理系统选型排行榜

企业在进行生产管理系统选型时,往往容易陷入一个常见的思维误区:首先问“哪家功能更全面”。但从实际部署与落地效果来看,真正决定系统价值的,往往不是模块数量的简单堆叠,而是它是否真正贴合实际生产流程、能否支撑高效的跨部门协作、以及是否具备随业务变化持续迭代升级的能力。迈入2026年,制造企业对生产管理系