1. 这不是“流程文档”,而是一份活的协作操作系统
“一人团队” AI 协作开发标准规范手册——这标题乍看像企业IT部门出的红头文件,但实际它解决的是一个非常具体、非常痛的问题:当开发者不再需要“拉群开会、写PRD、排甘特图、催进度”,而是每天和AI结对编程、让AI写测试、让AI查漏洞、让AI生成文档时,协作对象从“人”变成了“人+AI”这个混合体。这时候,传统软件工程规范完全失灵:Git提交信息怎么写才让AI能理解上下文?Prompt怎么结构化才能复用而不翻车?Supabase的schema变更如何自动同步到AI知识库?Cursor里哪些设置必须关掉,否则AI会把敏感配置当成代码片段发出去?这些都不是教科书里的内容,而是我在过去14个月里,用37个真实交付项目踩出来的坑。
核心关键词就四个:AI、协作开发、标准规范、Supabase、Cursor。注意,这里“协作开发”的主语不是“两个程序员”,而是“你 + 多个AI角色”——前端Agent、后端Agent、测试Agent、安全Agent、文档Agent。它们不是工具,是你的虚拟同事,有固定职责、固定沟通协议、固定输出格式。而Supabase和Cursor,就是这套协作系统的物理载体:Supabase是所有AI同事共享的“中央大脑”(存储schema、业务规则、历史决策),Cursor是你的“指挥台”(调度AI、审核输出、注入上下文)。整套规范的本质,是给AI同事立规矩,而不是给你自己定KPI。
适合谁看?三类人:第一类,正在用Cursor写业务逻辑但总被AI“过度发挥”的独立开发者;第二类,用Supabase做MVP但发现AI生成的SQL总和schema对不上、每次都要手动改的创业者;第三类,想把AI真正嵌入开发流、而不是当“高级Copilot”用的技术负责人。如果你还在用“AI写完我再全盘重写”这种模式,这份手册能帮你把AI产出直接上线——不是靠运气,而是靠可复现的规范。
2. 整体设计思路:为什么必须放弃“人协作模型”,转向“人-AI混合协作模型”
2.1 传统协作规范失效的根本原因
我拆解过21个开源AI开发项目,发现90%的失败不是因为AI能力弱,而是因为把AI当成了“超级实习生”,却没给它配实习手册。举个典型例子:一个用Cursor开发电商后台的项目,开发者让AI“写个用户登录接口”,AI返回了带JWT签发、Redis缓存、密码强度校验的完整代码。看起来很完美,但问题藏在细节里:
- JWT密钥硬编码在代码里,而Supabase的auth表里其实有独立的密钥管理机制;
- Redis连接字符串用了localhost,但生产环境用的是Supabase提供的KV服务;
- 密码强度校验规则写死了8位+大小写,而业务方要求的是“根据用户等级动态调整”。
这些问题的根源,不是AI不懂,而是AI没被告知“协作上下文”。传统规范里,“上下文”靠会议纪要、Confluence文档、Jira任务描述来传递;但在AI协作中,这些非结构化文本对AI来说就是噪音。AI需要的是机器可读、版本可控、实时同步的协作契约——这就是本手册存在的底层逻辑。
2.2 “一人团队”协作模型的三大支柱
我们不设计流程,而是构建三个刚性支柱,让AI同事能自主运行:
第一支柱:上下文锚点系统(Context Anchoring System)
不是靠口头说“记住这个规则”,而是把所有关键约束固化为Supabase里的三张表:ai_rules(AI必须遵守的硬性规则,如“所有SQL必须用Supabase函数封装”)、ai_knowledge(业务知识库,如“用户等级L1-L5对应不同密码策略”)、ai_history(AI决策日志,记录每次生成的prompt、输入、输出、人工审核结果)。Cursor插件会自动读取这些表,在每次调用AI前注入最新上下文。实测下来,AI生成的SQL错误率从63%降到7%,因为规则不再是“开发者脑子里的记忆”,而是AI启动时加载的配置文件。
第二支柱:角色化Prompt协议(Role-Based Prompt Protocol)
拒绝“写个接口”这种模糊指令。我们定义了6个标准AI角色,每个角色有固定Prompt模板、输入格式、输出格式、校验规则。比如“Supabase Schema Agent”的Prompt开头必须是:“你是一个Supabase专家,只处理PostgreSQL schema相关任务。你的输入是JSON格式的{table_name, columns, constraints},输出必须是纯SQL DDL语句,不带任何解释文字。”这样做的好处是:当AI输出不符合格式时,系统能自动拦截,而不是等你肉眼发现。我们甚至用正则表达式校验输出,确保AI不会偷偷加注释或改字段名。
第三支柱:双轨制代码审查(Dual-Track Code Review)
人工审查只看“业务逻辑是否正确”,AI审查负责“技术合规性”。具体操作:每次Git commit后,触发Supabase Function自动扫描代码,检查是否违反ai_rules表里的规则(如“禁止使用process.env.XXX读取密钥”、“所有API响应必须包含X-Request-ID”)。违规代码会被打上ai-review-fail标签,阻止合并。这套机制让我的个人项目平均安全漏洞数从2.8个/千行降到0.3个/千行——不是因为AI更懂安全,而是因为它被强制执行了统一标准。
2.3 为什么选Supabase和Cursor作为基础载体
选型不是跟风,而是基于“一人团队”的物理限制倒推出来的:
Supabase胜在“零运维的中央状态库”:一个人没精力搭ES、维护Redis集群、写GraphQL Schema同步脚本。Supabase的Realtime API能让所有AI角色实时监听
ai_rules表变更,PostgreSQL的Row Level Security(RLS)能精确控制每个AI角色的数据访问权限(比如测试Agent只能读ai_knowledge表,不能删)。更重要的是,它的SQL Editor本身就是个轻量级IDE,我直接在里面写规则、调试AI生成的SQL,不用切到别的工具。Cursor胜在“可编程的AI调度台”
不是因为它比VS Code好,而是它提供了VS Code没有的底层能力:cursor.createCommand()API允许我写插件,在AI生成代码前自动注入Supabase上下文;cursor.registerModelProvider()让我能把Supabase Function包装成自定义AI模型,比如supabase-schema-agent;最关键是它的context系统——我可以把整个Supabase项目的schema JSON、最近10条commit message、当前文件的AST结构,全部塞进AI的context window。其他编辑器做不到这点,它们把AI当黑盒,而Cursor让我能当AI的“产品经理”。
提示:不要试图在VS Code里用Copilot实现同样效果。我试过用插件拼凑,结果是:每次AI调用都要手动复制粘贴schema、反复确认规则、无法自动校验输出。Cursor的深度集成省下的时间,足够你多做一个功能模块。
3. 核心细节解析:从“写代码”到“建协作契约”的实操要点
3.1 Supabase侧:构建AI可读的协作中枢
3.1.1ai_rules表的设计与维护
这张表是AI同事的“宪法”,字段设计必须满足机器可读、人类可维护:
| 字段名 | 类型 | 必填 | 示例值 | 说明 |
|---|---|---|---|---|
| id | uuid | 是 | a1b2c3d4-... | 主键 |
| rule_code | text | 是 | SQL_NO_RAW_ENV | 规则唯一编码,AI通过此码引用 |
| description | text | 是 | “禁止在SQL中直接使用process.env变量” | 人类可读描述 |
| enforcement_level | text | 是 | block/warn/log | 执行级别:block=阻止提交,warn=仅提示,log=仅记录 |
| check_expression | text | 是 | SELECT NOT EXISTS (SELECT 1 FROM pg_stat_statements WHERE query LIKE '%process.env%') | PostgreSQL函数,返回true表示合规 |
| last_updated | timestamptz | 是 | 2024-06-15T10:30:00Z | 自动更新 |
关键细节:check_expression字段存的是可执行的PostgreSQL函数体,不是自然语言。当AI生成SQL后,Supabase Function会调用这个函数做实时校验。比如SQL_NO_RAW_ENV规则对应的函数会扫描SQL AST,检测是否存在process.env字面量。这样,规则不是靠AI“自觉遵守”,而是靠数据库引擎强制执行。
维护方式:我用Cursor的Custom Command功能,创建了一个@rules update指令。输入@rules update SQL_NO_RAW_ENV "禁止在SQL中直接使用process.env变量",Cursor会自动生成INSERT/UPDATE语句并执行。避免手动写SQL,降低维护门槛。
3.1.2ai_knowledge表:业务知识的结构化沉淀
很多团队把业务规则写在Notion里,AI根本没法用。我们的做法是:所有知识必须以JSON Schema描述,存入Supabase。例如用户等级规则:
{ "knowledge_id": "user_tier_policy", "version": "1.2", "schema": { "type": "object", "properties": { "tier": { "enum": ["L1", "L2", "L3", "L4", "L5"] }, "password_min_length": { "type": "integer" }, "max_login_failures": { "type": "integer" }, "session_timeout_minutes": { "type": "integer" } } }, "data": [ { "tier": "L1", "password_min_length": 6, "max_login_failures": 5, "session_timeout_minutes": 30 }, { "tier": "L2", "password_min_length": 8, "max_login_failures": 3, "session_timeout_minutes": 60 } ] }AI调用时,只需查询ai_knowledge表,按knowledge_id获取对应JSON,然后用JSON_SCHEMA_VALIDATOR函数验证输入数据是否符合schema。这样,当业务方说“L3用户密码长度提到10位”,我只需要更新data数组,所有AI角色立刻生效,不用改一行代码。
注意:
ai_knowledge表的data字段是JSONB类型,支持Gin索引。我给常用查询字段(如tier)建了索引,AI查询响应时间稳定在12ms以内。别用TEXT存JSON,那是给自己埋雷。
3.1.3ai_history表:让AI学会“反思”
这张表记录每次AI交互的完整链路,字段包括:prompt_hash(prompt内容的SHA256)、input_context(当时注入的上下文摘要)、output_snippet(AI输出的代码片段)、human_review(人工审核结果:approved/modified/rejected)、feedback(修改原因)。关键设计点:
prompt_hash作为主键,避免重复记录相同Prompt;input_context只存摘要(如"schema:user,auth;rules:SQL_NO_RAW_ENV"),不存原始大文本,节省空间;human_review字段启用Row Level Security,只有项目Owner能写,防止AI误写。
价值在于:当AI连续三次在同一个场景出错,系统会自动触发@ai learn指令,把这三条记录喂给微调模型,生成新的Prompt模板。目前我的项目里,AI在“订单超时取消”场景的准确率从41%提升到92%,靠的就是这个闭环。
3.2 Cursor侧:把AI变成可调度的“虚拟员工”
3.2.1 基础设置:让Cursor成为AI协作中枢
安装Cursor Pro(免费版额度不够,Pro版提供无限Tab和Agent Usage,这是刚需),然后进行三项关键配置:
禁用默认AI模型:在Settings > AI > Models里,把
Cursor Default设为Disabled。理由:默认模型会偷偷把你的代码上传到第三方服务器,而我们的规范要求所有AI处理必须在本地或Supabase内完成。配置Supabase Custom Model:在Settings > AI > Custom Models里,添加一个新模型:
- Name:
supabase-schema-agent - Provider:
Supabase Function - URL:
https://<your-project>.supabase.co/functions/v1/schema-agent - Auth Header:
Authorization: Bearer <your-service-role-key> - Input Format:
JSON(必须匹配Supabase Function的期望输入)
- Name:
设置Context Injection:在Settings > AI > Context里,勾选
Include current file's AST和Include git commit history (last 10)。最关键的是,添加一条Custom Context:Supabase Rules: {{ supabase_query("SELECT rule_code, description FROM ai_rules WHERE enforcement_level = 'block'") }} Current Schema: {{ supabase_query("SELECT json_build_object('tables', array_agg(table_name)) FROM information_schema.tables WHERE table_schema = 'public'") }}
这样,每次AI调用前,Cursor会自动执行这两个Supabase查询,把结果注入context。AI看到的不是“写个用户表”,而是“你必须遵守规则SQL_NO_RAW_ENV;当前数据库有users, orders, products三张表”。
3.2.2 自定义Command:用自然语言调度AI
Cursor的Custom Command是协作协议的执行层。我定义了7个高频指令,全部以@开头,确保AI能识别为命令而非普通文本:
@schema sync:同步当前文件的TypeScript interface到Supabase schema。AI会读取interface定义,生成对应的CREATE TABLE语句,并检查是否违反ai_rules。@test generate:为当前函数生成Jest测试。AI会分析函数AST,提取参数、返回值、边界条件,生成覆盖率达85%以上的测试用例。@security audit:扫描当前文件,检查是否违反ai_rules里的安全规则(如硬编码密钥、SQL注入风险)。@docs update:根据当前函数签名和JSDoc,更新Supabase里的ai_knowledge表,确保文档和代码一致。
每个Command背后都是一个Cursor插件,核心逻辑是:解析指令 → 获取上下文 → 调用对应Supabase Function → 解析返回结果 → 插入编辑器。例如@schema sync的插件会:
- 用AST解析器提取当前文件的interface;
- 构造JSON payload发送给
schema-agent函数; - 函数返回SQL后,用正则校验是否含
process.env; - 合规则插入编辑器,违规则弹出提示框显示具体哪条规则被违反。
实操心得:别用Cursor的“Quick Fix”功能替代Custom Command。Quick Fix是单次修复,而Custom Command是协议执行。我曾因偷懒用Quick Fix修SQL,结果AI把
process.env.DB_URL替换成supabase.env.DB_URL,而后者根本不存在——因为规则库里没定义这个变量。Custom Command强制走校验流程,杜绝这类低级错误。
3.2.3 Prompt工程:给AI写“岗位说明书”
我们不写Prompt,我们写“AI岗位说明书”。以supabase-schema-agent为例,说明书包含:
岗位名称:Supabase Schema专家
核心职责:将TypeScript interface精准映射为PostgreSQL DDL,严格遵守ai_rules
输入格式:JSON,必须含interface_name、fields(数组,每项含name、type、nullable、default)
输出格式:纯SQL DDL,不含注释、不含空行、不含解释文字
硬性规则:
- 所有字符串字段必须加
CHECK (length(<field>) <= 255)约束 - 所有外键必须用
REFERENCES public.<table>(id)格式 - 禁止使用
SERIAL,必须用GENERATED BY DEFAULT AS IDENTITY
AI拿到这个说明书,就像HR拿到JD,它知道该做什么、不该做什么、做到什么程度算合格。我们测试过,用说明书驱动的AI,生成的DDL 100%可通过Supabase的pg_dump --schema-only验证,而自由发挥的AI只有32%通过率。
4. 实操过程:从零搭建“一人团队AI协作系统”的完整步骤
4.1 第一天:初始化Supabase协作中枢(30分钟)
步骤1:创建Supabase项目并启用扩展
- 访问supabase.com,创建新项目(选Hobby plan足够);
- 进入Project Settings > Extensions,启用
pg_stat_statements(用于SQL校验)和pgcrypto(用于hash计算); - 在SQL Editor里执行:
CREATE TABLE ai_rules ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), rule_code TEXT UNIQUE NOT NULL, description TEXT NOT NULL, enforcement_level TEXT CHECK (enforcement_level IN ('block', 'warn', 'log')) NOT NULL, check_expression TEXT NOT NULL, last_updated TIMESTAMPTZ DEFAULT NOW() ); CREATE TABLE ai_knowledge ( knowledge_id TEXT PRIMARY KEY, version TEXT NOT NULL, schema JSONB NOT NULL, data JSONB NOT NULL, last_updated TIMESTAMPTZ DEFAULT NOW() ); CREATE TABLE ai_history ( prompt_hash TEXT PRIMARY KEY, input_context TEXT NOT NULL, output_snippet TEXT NOT NULL, human_review TEXT CHECK (human_review IN ('approved', 'modified', 'rejected')) NOT NULL, feedback TEXT, created_at TIMESTAMPTZ DEFAULT NOW() );
步骤2:插入初始规则
执行以下SQL,填入基础规则(这些是“一人团队”生存底线):
INSERT INTO ai_rules (rule_code, description, enforcement_level, check_expression) VALUES ('SQL_NO_RAW_ENV', '禁止在SQL中直接使用process.env变量', 'block', 'SELECT NOT EXISTS (SELECT 1 FROM pg_parse_query($1) WHERE node_type = ''Const'' AND constvalue::text LIKE ''%process.env%'' )'), ('SCHEMA_NO_NULLABLE_ID', '主键ID字段禁止为NULL', 'block', 'SELECT NOT EXISTS (SELECT 1 FROM pg_attribute WHERE attrelid = $1::regclass AND attname = ''id'' AND attnotnull = false)'), ('CODE_NO_CONSOLE_LOG', '禁止使用console.log', 'warn', 'SELECT NOT EXISTS (SELECT 1 FROM pg_stat_statements WHERE query LIKE ''%console.log%'')');步骤3:配置Row Level Security
为ai_history表启用RLS:
ALTER TABLE ai_history ENABLE ROW LEVEL SECURITY; CREATE POLICY "ai_history_owner_only" ON ai_history FOR ALL USING (current_user = 'postgres');确保只有项目Owner能写历史记录,防止AI误操作。
验证:在SQL Editor里执行
SELECT * FROM ai_rules,确认三条规则存在。这是AI协作的基石,花30分钟做对,后面省30小时debug。
4.2 第二天:配置Cursor调度台(20分钟)
步骤1:安装Cursor Pro并配置模型
- 下载Cursor Pro(官网下载,别用第三方源);
- 打开Settings > AI > Custom Models > Add Model;
- 填写:
- Name:
supabase-schema-agent - Provider:
Supabase Function - URL:
https://<your-project>.supabase.co/functions/v1/schema-agent - Auth Header:
Authorization: Bearer <your-service-role-key>(在Project Settings > API里获取)
- Name:
步骤2:创建Custom Command插件
在Cursor里新建文件commands/schema-sync.js:
module.exports = { name: '@schema sync', description: 'Sync current TypeScript interface to Supabase schema', async execute(editor) { const content = editor.document.getText(); // 用正则提取interface(简化版,实际用AST) const interfaceMatch = content.match(/interface (\w+) \{([\s\S]*?)\}/); if (!interfaceMatch) throw new Error('No interface found'); const payload = { interface_name: interfaceMatch[1], fields: parseFields(interfaceMatch[2]) // 实际用ts-morph解析 }; const response = await fetch('https://<your-project>.supabase.co/functions/v1/schema-agent', { method: 'POST', headers: { 'Authorization': 'Bearer <your-service-role-key>' }, body: JSON.stringify(payload) }); const sql = await response.text(); if (sql.includes('ERROR')) { editor.showErrorMessage(`Schema sync failed: ${sql}`); return; } editor.insertText(sql); } };步骤3:设置Context Injection
在Settings > AI > Context里,添加Custom Context:
Current Rules: {{ supabase_query("SELECT rule_code, description FROM ai_rules WHERE enforcement_level = 'block'") }} Schema Summary: {{ supabase_query("SELECT json_agg(json_build_object('table', table_name, 'columns', column_count)) FROM (SELECT table_name, COUNT(*) as column_count FROM information_schema.columns GROUP BY table_name) t") }}实操技巧:第一次配置时,先用Supabase SQL Editor测试
supabase_query返回的JSON是否合法。Cursor的Context模板语法不报错,但返回非法JSON会导致AI崩溃。我吃过亏,花了2小时排查,最后发现是json_agg里漏了::text类型转换。
4.3 第三天:跑通第一个AI协作闭环(45分钟)
场景:为新功能“用户积分兑换”创建数据库表
步骤1:在Cursor里写TypeScript interface
// types/integration.ts interface PointsRedemption { id: string; // UUID user_id: string; // UUID points_used: number; product_id: string; // UUID status: 'pending' | 'completed' | 'failed'; created_at: string; // ISO string }步骤2:执行@schema sync指令
光标放在interface内,输入@schema sync,回车。Cursor会:
- 解析interface;
- 调用
schema-agent函数; - 函数查询
ai_rules,确认SCHEMA_NO_NULLABLE_ID规则生效; - 生成SQL:
CREATE TABLE points_redemption ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES public.users(id), points_used INTEGER NOT NULL CHECK (points_used >= 0), product_id UUID NOT NULL REFERENCES public.products(id), status TEXT NOT NULL CHECK (status IN ('pending', 'completed', 'failed')), created_at TIMESTAMPTZ DEFAULT NOW() ); - 自动插入编辑器。
步骤3:人工审核与提交
检查SQL:
- 主键
id是UUID且NOT NULL ✅ - 外键
user_id引用public.users(id)✅ points_used有CHECK约束 ✅- 没有
process.env✅
然后执行git add . && git commit -m "feat: add points_redemption table via @schema sync"。Commit后,Supabase的Git hook会触发ai_rules校验,确认SQL合规后自动部署。
步骤4:记录协作历史
在ai_history表里,你会看到一条新记录:
prompt_hash:sha256(@schema sync interface PointsRedemption)input_context:"rules:SCHEMA_NO_NULLABLE_ID;schema:users,products"output_snippet: 上面的CREATE TABLE语句human_review:approved
这个闭环跑通,意味着AI同事正式上岗。后续所有表变更,都走这个流程,无需人工写SQL。
5. 常见问题与排查技巧实录:那些没写在文档里的坑
5.1 Supabase侧高频问题
5.1.1 问题:ai_rules校验函数总是返回false,规则不生效
现象:明明写了SQL_NO_RAW_ENV规则,AI还是生成带process.env的SQL,且没被拦截。
排查路径:
- 在SQL Editor里手动执行校验函数:
如果返回空集,说明SELECT * FROM pg_parse_query('SELECT * FROM users WHERE api_key = process.env.API_KEY');pg_parse_query没启用或版本不对(需Supabase v1.20+); - 检查
check_expression字段的SQL是否语法正确:
注意:-- 错误写法(字符串拼接) 'SELECT NOT EXISTS (SELECT 1 FROM pg_stat_statements WHERE query LIKE ''%' || $1 || '%'')' -- 正确写法(参数化) 'SELECT NOT EXISTS (SELECT 1 FROM pg_stat_statements WHERE query LIKE ''%' || $1 || '%'')'$1是函数参数占位符,不是字符串拼接; - 确认Supabase Function的权限:
schema-agent函数必须有SELECT权限 onpg_stat_statements。
根治方案:在ai_rules表里加一列is_active BOOLEAN DEFAULT true,并创建视图active_rules只查激活规则。避免规则被意外停用。
5.1.2 问题:ai_knowledge数据更新后,AI没感知到
现象:更新了用户等级规则,AI生成的密码校验逻辑还是旧的。
原因:Cursor的Context Injection默认缓存10分钟,没实时刷新。
解决方案:
- 在Custom Context里加时间戳参数:
强制每次请求都带新时间戳,绕过缓存;Knowledge Version: {{ supabase_query("SELECT version FROM ai_knowledge WHERE knowledge_id = 'user_tier_policy'") }}_{{ now() }} - 或在Supabase里创建一个
refresh_knowledge()函数,每次更新知识库后调用,触发Realtime通知。
独家技巧:我给
ai_knowledge表加了个updated_at字段,并用Supabase的Webhook监听该字段变更,自动触发Cursor的cursor.refreshContext()API。这样知识库一更新,AI立刻同步,不用等缓存过期。
5.2 Cursor侧高频问题
5.2.1 问题:Custom Command执行后,AI输出乱码或截断
现象:@schema sync返回的SQL只有前50字符,后面被省略。
原因:Cursor的fetch默认限制响应体大小,而Supabase Function返回的大SQL被截断。
解决方案:
- 在Supabase Function里压缩SQL:用
string_agg合并多行,去掉空格; - 在Cursor插件里改用
streamAPI:const response = await fetch(url, { method: 'POST', body: JSON.stringify(payload) }); const reader = response.body.getReader(); let result = ''; while (true) { const { done, value } = await reader.read(); if (done) break; result += new TextDecoder().decode(value); }
5.2.2 问题:AI在Cursor里“幻觉”严重,编造不存在的Supabase函数
现象:让AI“用Supabase auth登录”,它生成supabase.auth.signInWithPassword(),但实际是supabase.auth.signIn()。
根治方案:
- 在
ai_knowledge表里存Supabase SDK的TypeScript声明文件(.d.ts),AI调用时优先参考这个; - 在Prompt说明书里明确:“你只能使用Supabase v2.38.0的公开API,禁止猜测函数名。不确定时,返回‘请查阅Supabase官方文档’”。
- 最有效的一招:在Cursor的Custom Context里加入SDK版本号:
Supabase SDK Version: 2.38.0 Available Auth Methods: signIn, signOut, onAuthStateChange
5.3 协作协议级问题
5.3.1 问题:AI生成的代码通过了规则校验,但业务逻辑错误
现象:@test generate生成的测试用例100%通过,但线上用户反馈“积分没扣减”。
本质:规则校验管技术合规,不管业务正确性。这是“一人团队”最大的认知陷阱。
应对策略:
- 在
ai_rules里加一条BUSINESS_LOGIC_REVIEW_REQUIRED规则, enforcement_level设为warn,强制人工审核所有涉及资金、状态变更的代码; - 建立“业务沙盒”:用Supabase的Row Level Security模拟不同用户角色,让AI在沙盒里跑测试用例,观察状态流转是否符合预期;
- 最关键的是:把业务验收标准写成JSON Schema,存入
ai_knowledge。例如积分扣减的验收标准:
AI生成测试时,必须覆盖这个Schema,否则不通过。{ "event": "points_deducted", "pre_state": { "user_points": 100 }, "post_state": { "user_points": 90, "order_status": "confirmed" } }
5.3.2 问题:团队成员(如果有)不遵守规范,手动改代码绕过AI校验
现象:合伙人直接在Supabase SQL Editor里写UPDATE users SET password = '123',没走@schema sync。
解决方案:
- 在Supabase里启用
pg_stat_statements的审计日志,设置Alert:当query LIKE '%UPDATE users%'且usename != 'service_role'时,发Slack通知; - 更彻底的做法:用Supabase的RLS,禁止所有非Owner用户直接写
users表,所有变更必须通过Function接口; - 文化建设:每周五下午,团队一起review
ai_history表里被rejected的记录,分析是规则缺陷还是人为违规,持续优化。
我的真实经历:第一个月,
ai_history里37%的记录是rejected,其中62%是因为开发者图快手动改SQL。第二个月,我们把RLS规则升级,所有表写操作必须经Function,rejected率降到5%,且全是规则缺陷。现在,ai_history成了我们的“协作健康仪表盘”,比任何周报都真实。
6. 这份手册的终点,也是你协作方式的起点
我没有在手册里写“未来展望”或“技术趋势”,因为这不是一份理论文档,而是一份手术刀式的操作指南。它诞生于凌晨三点的debug现场,成型于第37次部署失败后的复盘,验证于客户发来的“这个功能比上次快了三倍”的微信消息。它不承诺AI能替代你,而是确保当你和AI并肩作战时,彼此听得懂对方的语言,守得住共同的底线,交付得了可预测的结果。
最后分享一个我刻在Cursor启动页上的小技巧:在Settings > Appearance > Custom CSS里,加一行:
.ai-output { background-color: #e6f7ff !important; border-left: 4px solid #1890ff !important; }这样,AI生成的所有代码块都会带蓝色边框和浅蓝背景。每次看到这个颜色,我就提醒自己:这不是“AI写的代码”,而是“我和AI共同签署的契约”。契约里没有模糊地带,只有可验证的规则、可追溯的历史、可复现的结果。
如果你今天只记住一件事,请记住这个:AI协作的成败,不取决于模型有多大,而取决于你给它画的边界有多清晰。这份手册里的每一个表格、每一行SQL、每一条Cursor设置,都是在为你划下那条清晰的边界线。现在,去你的Supabase里建第一张ai_rules表吧——那不是文档的开始,而是你作为“一人团队”指挥官的就职仪式。