第五部分. 项目初始设置
初始设置不是生成整个应用程序。而是创建一个最小化、清晰的基础,在这个基础上可以安全地编写宪法和第一个功能规范。在教学项目中,基础将是一个带有 Git 的 TypeScript 项目,但不包含产品逻辑。
阶段目标
完成初始设置后,你应该拥有:
- Git 仓库;
- 包含产品简要愿景的
README.md; QWEN.md;.qwen/settings.json;- 最小化的 TypeScript 模板;
- 空的或几乎空的
src/index.ts; package.json;- 启用严格模式的
tsconfig.json。
暂时不要添加 Hono、SQLite、Vitest 或页面。这些决策应该进入 specs/tech-stack.md 和路线图,然后通过功能规范来实现。
命令
mkdir agentclinic
cd agentclinic
git init
npm init -y
npm install -D typescript @types/node
npx tsc --init
mkdir -p src specs .qwen
touch src/index.ts
打开 tsconfig.json 并确保严格模式已启用:
{
"compilerOptions": {
"strict": true
}
}
在 package.json 中添加:
{
"scripts": {
"typecheck": "tsc --noEmit"
}
}
创建 .gitignore,避免意外提交构建产物和本地密钥:
node_modules/
dist/
build/
.env
.env.*
# 本地 SQLite 记忆(参见第19部分)
.qwen/memory/agent-memory.db
.qwen/memory/agent-memory.db-shm
.qwen/memory/agent-memory.db-wal
# IDE
.idea/
.vscode/
不要将 .qwen/settings.json 的配置放入 .gitignore — 团队需要它。但要检查其中没有密钥;密钥应该使用环境变量和 .env。
检查:
npm run typecheck
git status
会话开始时应该给代理什么
每次启动 Qwen Code 都是一个新的窗口。如果每次代理都自己猜测要读什么,你会浪费部分请求来让它了解情况。更可靠的做法是提前确定它在开始时应该读取哪些文件:
QWEN.md— 代理在仓库中的行为规则。specs/mission.md、specs/tech-stack.md、specs/roadmap.md— 项目宪法。- 当前功能规范的文件夹,如果正在进行功能开发:
specs/<YYYY-MM-DD-feature>/。
这与请求中的 @file 是同样的理念,但你把它提升到习惯和 QWEN.md 的层面。其中一个选择是在 QWEN.md 中添加一个块:
开始任何工作前,请阅读:
- README.md
- specs/mission.md、specs/tech-stack.md、specs/roadmap.md
- 活跃的功能规范,如果请求中指定了。
不要猜测这些文件的内容:如果它们不存在,请说明。
在企业文献中,这种做法被称为 Knowledge Priming — 会话开始时的「知识加载」。名字不重要;重要的是代理在第一个动作之前已经知道三件基本事情:项目为什么存在、使用什么技术栈、当前处于什么阶段。
最小化 README
# AgentClinic
AgentClinic 是一家虚构的心理健康诊所,AI 代理在这里从与人类工作的压力中恢复。
项目参与者的期望:
- 工程团队想要一个可靠的 TypeScript 教学应用;
- 产品团队想要代理、疾病、治疗、预约、反馈和评论;
- 营销团队需要一个现代浏览器体验,带有令人难忘的讽刺语气。
这个 README 不是作为最终文档,而是作为代理的项目参与者初始期望。在下一部分,Qwen Code 将阅读它并在创建宪法之前提出问题。
第一次提交
git add README.md QWEN.md package.json package-lock.json tsconfig.json src .qwen
git commit -m "Initialize AgentClinic scaffold"
如果你还不想提交 .qwen/settings.json,请检查其中是否有密钥。包含模型名称的配置通常是可以接受的,密钥则不行。
通过 Qwen Code 验证初始设置
运行:
qwen
输入:
检查这个仓库。
不要写入文件。
报告:
1. Git 是否已初始化;
2. TypeScript 严格模式是否已启用;
3. `QWEN.md` 是否充分设定了 SDD 规则;
4. 在创建 specs/mission.md、tech-stack.md 和 roadmap.md 之前还缺少什么。
如果 Qwen 建议立即安装框架或编写应用程序,请阻止它。在宪法之前这样做为时过早。
为什么不立即写代码
在常规的代理驱动开发中,初始设置经常变成「构建应用程序」。在 SDD 中,它应该是枯燥的。它的任务是给代理一个工作空间和 Git 边界,而不是做出产品决策。
比较:
构建 AgentClinic 应用程序。
和:
为 SDD 准备仓库。
暂时不要选择 Web 框架。
不要实现产品路由。
确保 TypeScript 和 Git 已准备就绪。
第二个请求将决策保留在正确的阶段。
实践
- 执行初始设置。
- 运行
npm run typecheck。 - 询问 Qwen Code 关于仓库的准备情况。
- 只修复初始设置的阻塞性问题。
- 提交代码。
检查问题
- 为什么初始设置不应该包含产品功能?
- 代理在创建宪法之前需要哪些文件?
- 在第一个功能分支之前应该提交什么?