第 19 卷
【agent 1 - 前端UI】
基于AGENTS.md中的设计方案,实现前端所有页面:
- 首页 (src/app/page.tsx)
- URL输入框(支持粘贴后自动触发)
- 提交按钮
- 加载状态动画
- 摘要结果展示(三种长度切换)
- 历史记录页 (src/app/history/page.tsx)
- 摘要列表,按时间倒序
- 点击展开详情
- 搜索过滤
- 布局组件 (src/app/layout.tsx)
- 顶部导航栏
- 响应式布局
用Tailwind CSS,风格简洁干净。不需要实际调用API,用mock数据把界面先做出来。接口约定:
- POST /api/summarizebody: { url: string }
- GET /api/history
- GET /api/history/:id
最后那段接口约定是给并行准备的:先约定接口,各做各的,最后拼起来。不约定的话,agent 1可能调 /api/summary,agent 2实现的是 /api/summarize,合并时就要改一堆东西。
同样的方式创建agent 2和agent 3:
【agent 2 - 后端API】
实现所有API路由:
- POST /api/summarize
- 接收 { url: string }
- 用fetch抓取文章内容,解析出正文(去掉导航、广告等)
- 调用OpenAI Responses API(模型用gpt-6-luna,量大便宜)生成三种摘要:
- one_line: 一句话总结(<50字)
- short: 短摘要(100-200字)
- detailed: 详细摘要(300-500字)
- 存入数据库
- 返回摘要结果
- GET /api/history
- 返回最近50条记录(分页)
- GET /api/history/[id]
- 返回单条详情
OpenAI API Key从环境变量OPENAI_API_KEY读取。
数据库操作通过src/lib/db.ts暴露的函数调用。
数据库函数约定:
- insertSummary(data): 插入一条记录
- getSummaries(page, limit): 分页查询
- getSummaryById(id): 查单条
【agent 3 - 数据库】
实现数据库层:
- Schema定义 (src/lib/schema.ts)
- summaries表:id, url, title, content, one_line, short, detailed, created_at
- 数据库连接 (src/lib/db.ts)
- 导出Drizzle实例
- 导出CRUD函数:
- insertSummary(data)
- getSummaries(page, limit)
- getSummaryById(id)
- deleteSummary(id)
- 迁移脚本 (drizzle.config.ts + scripts/migrate.ts)
- 生成并运行迁移
- 写单元测试验证CRUD操作正确
SQLite文件放在项目根目录的data/目录下。
三个agent同时开始工作。你可以在App的任务列表里看到它们各自的进度。每个agent在自己的git worktree里操作,互不干扰。
提示:并行开发最容易出问题的地方是接口对不上。开三个agent之前,先在AGENTS.md里把接口约定写清楚,字段名、类型、返回格式越具体越好。
等agent干活的时候你并不需要干等。可以做几件事:
准备环境变量。创建 .env.local 文件,写入OpenAI API Key。
检查先完成的agent。数据库层通常最先完成,因为代码量最少。它完成后,看一眼schema是否合理、测试是否通过。
准备部署配置。在Vercel上创建项目,配置好环境变量。等代码合并后可以直接部署。
阶段四:集成和测试(CLI + Review)
三个agent都完成了。现在要把三条分支的代码合并到一起。
回到CLI。先看看三个分支的状态:
git branch # * main #feat/frontend-ui #feat/backend-api #feat/database
合并顺序是先底层,再上层:API依赖数据库,前端依赖API,所以是database → backend-api → frontendui。
git merge feat/database git merge feat/backend-api git merge feat/frontend-ui
如果运气好,三次merge都没冲突。但更常见的情况是backend-api和database会有冲突,因为两者都会动 src/lib/ 下的文件。遇到冲突,让Codex来解:
合并feat/backend-api时遇到冲突,帮我解决。
原则:数据库层以feat/database的实现为准,API层以feat/backend-api为准。
合并完成后跑一遍 npm run dev,多半会报错:三个agent各自用mock数据开发,真正对接时类型可能不匹
配、导入路径可能不对。
这时候用Codex的 /review 命令做一次代码审查: