结对编程
wescode 的 AI 结对编程模式让你拥有一个随时在线的编程伙伴——理解项目上下文、提供实时建议、帮助理清思路。
功能概览
| 能力 | 说明 |
|---|---|
| 实时协作 | 在编码过程中即时获得建议和反馈 |
| 代码建议 | 基于上下文的智能代码补全和重构建议 |
| 思路引导 | 帮助分析问题、设计方案、理清实现思路 |
| 上下文保持 | 跨文件、跨对话保持项目理解 |
| 效率技巧 | 加速日常编码任务的实用技巧 |
实时协作
启动结对编程
在 Chat 面板中开始对话即进入结对编程模式。wescode 会自动感知:
- 当前打开的文件:通过编辑器 buffer overlay 实时同步
- 光标位置:了解你正在编辑哪个函数
- 最近的修改:跟踪你的编码进展
- 终端输出:捕获构建/测试结果
协作模式
| 模式 | 触发方式 | 适用场景 |
|---|---|---|
| 对话式 | Chat 面板输入 | 讨论设计、分析问题 |
| 行内命令 | Ctrl+K | 对选中代码执行操作 |
| Ghost Write | 光标停留 >800ms | 自动补全代码 |
| Selection Action | 选中文字 | 对选中内容执行单步操作 |
实时对话示例
用户:我现在要实现一个限流中间件,你觉得用什么方案?
AI:根据你的项目结构(Gin + Redis),推荐以下方案:
方案 A:令牌桶(Token Bucket)
- 适合平滑限流,允许短时间突发
- Redis 实现简单,分布式友好
- 推荐场景:API 网关级限流
方案 B:滑动窗口(Sliding Window)
- 精确计数,无突发
- 实现略复杂但更精确
- 推荐场景:按用户/IP 精确计费
考虑到你的项目使用了 Redis 且需要分布式部署,
推荐方案 A(令牌桶)。要我开始实现吗?
用户:用方案 A,每个用户每分钟 100 次
AI:好的,我来实现。需要创建以下文件:
1. internal/middleware/ratelimit.go — 限流中间件
2. internal/ratelimit/token_bucket.go — 令牌桶实现
3. internal/ratelimit/token_bucket_test.go — 测试
开始编写...
代码建议
智能补全
wescode 的 Ghost Write 功能在你编码时提供上下文感知的补全:
- 感知项目惯例:通过 CKG 了解项目的编码风格和模式
- 感知当前意图:根据函数名、注释、上下文推断你要写什么
- 多行补全:不仅补全当前行,还能补全整个代码块
重构建议
当 wescode 检测到可以改进的代码时,会主动提供建议:
AI 建议:检测到重复模式
当前代码中 handler/user.go 和 handler/order.go
有相似的错误处理逻辑(6 处)。
建议提取为通用中间件:
func ErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
c.Next()
if len(c.Errors) > 0 {
err := c.Errors.Last()
// 统一错误响应...
}
}
}
是否应用此重构?
代码审查
在你完成一段代码后,可以请求即时审查:
用户:帮我 review 刚写的代码
AI:代码审查结果:
✓ 逻辑正确
✓ 错误处理完整
⚠ 建议改进:
1. 第 45 行:context.Background() 应该使用请求的 ctx
→ 使用 c.Request.Context() 确保可取消
2. 第 62 行:Redis key 没有设置过期时间
→ 添加 TTL 防止数据累积
3. 第 78 行:缺少并发安全考虑
→ Rate limiter 的 counter 操作应该是原子的
思路引导
问题分析
面对复杂问题时,AI 会引导你系统性地分析:
用户:用户反馈登录偶尔很慢,不知道从哪查起
AI:我来帮你系统分析:
1. 先确认"慢"的定义
→ 正常响应时间是多少?慢的时候是多少?
→ 是所有用户都慢还是部分用户?
2. 排查方向(从外到内)
① 网络层:DNS 解析、TLS 握手、网络延迟
② 应用层:handler 入口到 response 的耗时
③ 数据层:数据库查询、Redis 连接
④ 外部依赖:第三方认证服务、短信服务
3. 快速定位
→ 看看有没有加请求耗时日志?
→ 如果没有,建议先加 middleware 记录每个请求的耗时
先从哪个方向开始?
设计讨论
在开始实现新功能前,和 AI 讨论设计方案:
用户:我需要实现一个通知系统,支持邮件、短信和站内信
AI:好的,我们先理清几个关键设计决策:
Q1: 通知是同步发送还是异步?
→ 推荐异步(消息队列),避免阻塞主流程
Q2: 需要支持通知模板吗?
→ 建议支持,方便运营人员修改文案
Q3: 用户能否配置通知偏好?
→ 建议支持,让用户选择接收渠道
基于以上考虑,推荐架构:
┌─────────┐ ┌────────┐ ┌──────────┐
│ 业务层 │ → │ 消息队列 │ → │ 通知 Worker│
└─────────┘ └────────┘ └────┬─────┘
│
┌─────┼─────┐
▼ ▼ ▼
邮件 短信 站内信
需要细化哪部分?
代码走查
请 AI 解释复杂的代码逻辑:
用户:@internal/scheduler/cron.go 解释这个调度器的工作原理
AI:这个 cron 调度器的核心逻辑:
1. 初始化阶段
- 从数据库加载所有定时任务
- 解析 cron 表达式,计算下次执行时间
- 按执行时间排序放入优先级队列
2. 主循环
- 每秒检查队列头部任务是否到期
- 到期任务取出并异步执行
- 执行完后重新计算下次时间并放回队列
3. 关键设计
- 使用 sync.Mutex 保护队列的并发访问
- 任务执行有 3 分钟超时(hardInterrupt)
- 失败任务会重试 3 次,每次间隔翻倍
⚠ 潜在问题:第 89 行 time.Sleep(1s) 可能导致
任务最多延迟 1 秒执行。如果精度要求高,建议
改用 time.Timer 精确等待。
上下文保持
跨文件上下文
wescode 通过以下机制保持对项目的理解:
- CKG(代码知识图谱):索引整个项目的结构、调用关系
- Buffer Overlay:实时同步编辑器中未保存的修改
- 会话记忆:在当前对话中记住之前讨论的内容
- 工作区记忆:跨会话保持对项目的长期理解
上下文引用
使用 @ 符号引用文件或符号,帮助 AI 获取更精准的上下文:
用户:@internal/service/order.go @internal/model/order.go
在 CreateOrder 里加上库存检查
记忆系统
wescode 的记忆分为七个层次:
| 层 | 说明 | 持久性 |
|---|---|---|
| environment | 宿主环境信息(OS、语言版本等) | 自动感知 |
| consensus | 团队共识(接入 SSO 后生效) | 跨会话 |
| about_me | 个人偏好 | 跨会话 |
| agent_memory | Agent 角色记忆 | 跨会话 |
| session | 会话记忆 | 当前会话 |
| working | 工作缓存 | 临时 |
AI 会自动记住你的编码偏好,例如:
- 偏好的错误处理方式
- 变量命名风格
- 常用的设计模式
效率技巧
快捷操作
| 操作 | 快捷方式 | 说明 |
|---|---|---|
| 打开 Chat | Ctrl+L | 侧边栏对话 |
| 行内命令 | Ctrl+K | 对选中代码操作 |
| 快速修复 | /fix | 修复当前错误 |
| 解释代码 | 选中 + 右键 → 解释 | 解释选中代码 |
| 生成测试 | /test | 为当前函数生成测试 |
高效提问模板
# 实现新功能
"实现 [功能描述],参考 @[类似文件] 的模式"
# 修复问题
"@[出错文件] 第 [N] 行报错 [错误信息],帮我修复"
# 重构代码
"把 @[文件] 的 [函数名] 重构为 [目标模式]"
# 学习代码
"解释 @[文件] 中 [函数名] 的实现原理"
多轮协作示例
用户:我要给订单系统加个取消功能
AI:好的,我们需要考虑...(设计讨论)
用户:就按你说的方案来
AI:开始实现...(生成代码)
用户:跑测试看看
AI:运行 go test...(执行并分析结果)
用户:有个 case 失败了
AI:分析失败原因...(调试修复)
用户:好了,帮我写 commit
AI:生成 commit message...(提交辅助)
注意事项
- AI 是你的编程伙伴,不是代码生成器——保持对代码的理解和掌控
- 对 AI 生成的代码始终要 review,特别是边界条件和错误处理
- 结对编程的记忆存储在当前 workspace 的 Cell 中
- Actor 恒为
"local"(未接入 SSO),所有记忆归属当前用户 - AI 不会主动修改你的代码——所有变更需要你 Accept