Skip to content

开发环境配置

核心问题

一个新成员(或者三个月后的我自己)打开 Growth 项目,Qoder 怎么让他快速进入开发状态?

"开发环境配置"不只是装好 IDE、编译通过。更重要的是让 AI 认识你的项目——知道你的编码规范、架构决策、模块边界。这一章讲的就是怎么用 Qoder 的 Rule、Memory、AGENTS.md 来完成这件事。


使用篇:Rule 让 AI 一出手就是对的

什么是 Rule

Rule 是写在 .qoder/rules/ 目录下的规范文件。AI 在每次对话时自动加载这些规则,确保生成的代码符合项目规范。

在 Growth 项目中,我们沉淀了 14 条 Rule,覆盖了从命名规范到架构约束的全方位:

.qoder/rules/
├── early-return.md            ← 必须用卫语句,避免深层嵌套
├── exception-handling.md      ← 异常透明,只在最顶层 try catch
├── no-fallback.md             ← 不做兼容性设计,旧逻辑直接删除
├── logger-convention.md       ← 必须用 LogFormatHelper
├── naming-convention.md       ← C# PascalCase,前端 camelCase
├── dependency-injection.md    ← 只能通过构造函数注入依赖
├── layer-boundary.md          ← 严格遵守分层架构
├── api-response-format.md     ← 统一 API 响应格式
├── repository-pattern.md      ← 数据库访问必须通过 Repository 层
└── ...

如何配置

# 在 Components 项目的 .qoder/rules/ 目录下创建 rule 文件
# 每条 Rule 一个文件,清晰描述什么问题、应该怎么写

# 以 early-return.md 为例:
## 规范
遇到前置条件不满足时,提前返回,不要继续嵌套。

## 正确写法
if (order == null) return Result.Failure("订单不存在");
if (!order.IsActive) return Result.Failure("订单已失效");

## 错误写法
if (order != null) {
    if (order.IsActive) {
        // 真正的逻辑被多层 if 包裹
    }
}

贯穿案例中的应用

假设你要创建一个新的工作流节点。有了 Rule 之后,你不需要告诉 AI "注意日志格式、注意异常处理"——这些 Rule 已经自动加载了。AI 生成的节点代码会自然使用 LogFormatHelper、不会出现深层嵌套、异常会向上抛出而不是被吞掉。


实践篇:Memory 让 AI 知道"为什么这么设计"

什么是 Memory

Memory 是 Qoder 的跨会话知识库。你告诉 AI 一次"为什么选择这个架构",它就会记住,下次打开新会话时不需要重新解释。

Growth 项目中值得记忆的架构决策

以下是我们在 Growth 项目中让 AI 记住的关键信息:

决策一:为什么选择 CLI 作为统一执行层

传统做法是 API-first——所有功能通过 REST API 暴露。我们选择 CLI-first,因为 PowerShell 脚本天然可编排、可组合,AI 可以直接生成和执行。API 是给人调用的,CLI 是让机器和 AI 调用的。

决策二:为什么双仓库而不是单仓库

Client 是面向用户的产品(桌面端 + Web),迭代快、发版频繁。Components 是底层组件库(CLI 引擎、工作流引擎),需要稳定、少变。分仓库部署可以让 Components 的发布节奏不受 Client 影响。

决策三:模块的组织原则

每个模块按"接口层 → 实现层 → 引擎 → 持久化"组织。接口层定义契约,实现层处理业务逻辑,引擎负责核心算法,持久化层管理数据。模块之间通过接口依赖,不直接引用实现。

实际效果

一旦这些决策写入 Memory,当你问 AI "为什么 CLI 模块放在 Components 而不是 Client"时,AI 会直接回答:"这是架构决策二的内容——Components 作为底层组件库,需要独立于 Client 的发布节奏。"

你不需要重复解释,AI 已经记住了。

贯穿案例中的应用

当你开始写一个新的节点时,AI 已经通过 Memory 知道:

  • 节点的标准结构是 form.json + script.ps1
  • 参数定义遵循 JSON Schema 规范
  • 输出格式需要包含 success 和 outputPath
  • 运行时依赖需要在 form.json 中声明

这些都不是你现场告诉 AI 的——它们已经在 Memory 里了。


实践篇:AGENTS.md 预配置 SubAgent

什么是 AGENTS.md

AGENTS.md 是 Qoder 的智能体配置文件。它定义了项目中可用的 SubAgent,让 AI 知道什么时候该触发什么角色。

Growth 项目中的预配置

markdown
# AGENTS.md

## 可用 Skill
- `/code-review` — 审查代码变更
- `/create-proposal` — 创建需求分析文档
- `/test-component` — 执行组件集成测试

## SubAgent
- CodeReview Agent — 代码审查,加载审查 Checklist
- Browser Agent — 浏览器预览和端到端测试

配置完成后,AI 会自动根据任务决定是否触发这些 SubAgent。你不需要手动输入命令。


知识篇:为什么开发环境配置对 AI 如此重要

传统开发的"环境配置" vs AI 时代的"环境配置"

开发环境对比

维度传统开发AI 时代
配置内容IDE 插件、编译工具链Rule + Memory + AGENTS.md
配置目的让人能写代码让 AI 能写出对的代码
配置频率一次配置,长期使用随项目演进持续更新
新人上手安装依赖 → 编译通过Rule + Memory 加载 → AI 认识项目

为什么 Rule 和 Memory 比文档更有效

传统项目中,我们把规范写在文档里,但新人不一定会读。即使读了,也不能保证每次写代码都记得住。

Rule + Memory 的方式完全不同:

  • Rule 是强制性的——AI 每次对话都加载,不可能"忘记"
  • Memory 是上下文性的——AI 会基于记忆回答问题,不需要你重复
  • 两者结合——Rule 约束"怎么写",Memory 告诉"为什么这么写"

这就是为什么我说:开发环境不只是 IDE + 编译通过,还要让 AI '认识'你的项目。


本章小结

配置项作用配置频率对贯穿案例的贡献
Rule约束 AI 的编码行为随规范更新节点代码自动符合规范
Memory记录架构决策历史大重构后更新AI 知道为什么节点这么设计
AGENTS.md预配置 SubAgent新增时更新CodeReview/测试自动可用

关联:第一部分 05(Rule 规则系统)、第一部分 06(Memory 记忆系统)、第二部分 04(子代理分工)。