model User { id Int @id @default(autoincrement()) username String @unique email String @unique password String role Role @default(USER) posts Post[] comments Comment[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }
model Post { id Int @id @default(autoincrement()) title String content String status PostStatus @default(DRAFT) tags String author User @relation(fields: [authorId], references: [id]) authorId Int comments Comment[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }
model Comment { id Int @id @default(autoincrement()) content String status CommentStatus @default(PENDING) author User @relation(fields: [authorId], references: [id]) authorId Int post Post @relation(fields: [postId], references: [id]) postId Int createdAt DateTime @default(now()) }
3.2 从 Schema 生成 API 的 Prompt 技巧
1 2 3 4 5 6
基于 Prisma Schema 中的 User 和 Post 模型: 1. 为每个模型生成完整的 CRUD 路由 2. Post 的创建/更新需要关联到当前登录用户 3. 未登录用户只能读取已发布的 Post 4. 使用 Zod 做请求参数校验 5. 错误处理统一返回 { error: string, code: number }
这种”Schema → Prompt → 完整 API”的工作流,是后端 AI 编程效率最高的模式。
@app.get("/posts/{post_id}", response_model=schemas.Post) defget_post(post_id: int, db: Session = Depends(get_db)): post = crud.get_post(db, post_id) ifnot post: raise HTTPException(status_code=404, detail="文章不存在") return post
生成跨语言代码是 AI 后端编程的一大优势——一次需求描述,同时得到 Node.js 和 Python 两个版本。
五、SQL 生成与优化
5.1 自然语言转 SQL
1 2 3 4 5 6 7 8 9 10 11 12 13
-- Prompt: "查询过去 30 天内下单次数最多的前 10 名用户" SELECT u.username, u.email, COUNT(o.id) AS order_count, SUM(o.total_amount) AS total_spent FROM users u INNERJOIN orders o ON o.user_id = u.id WHERE o.created_at >=DATE('now', '-30 days') AND o.status !='CANCELLED' GROUPBY u.id ORDERBY total_spent DESC LIMIT 10;
5.2 SQL 优化 Prompt
1 2 3 4 5 6 7
帮我优化这个 SQL 查询,它在 100 万行数据上执行需要 5 秒: SELECT * FROM orders WHERE YEAR(created_at) = 2025 AND status = 'pending' ORDER BY created_at DESC;
要求:添加索引建议、避免函数包裹字段、优化排序。
AI 的分析:
避免 YEAR() 函数:YEAR(created_at) 让索引失效。改为范围查询
复合索引:在 (status, created_at) 上建立联合索引
只查需要的列:SELECT * 改为明确列名
优化后:
1 2 3 4 5 6 7 8 9 10
-- 创建推荐索引 CREATE INDEX idx_orders_status_created ON orders(status, created_at);
-- 优化查询 SELECT id, user_id, total_amount, created_at FROM orders WHERE status ='pending' AND created_at >='2025-01-01' AND created_at <'2026-01-01' ORDERBY created_at DESC;