1. 背景
过去使用 AI 工具,很多人的第一反应是:
让它写代码。
让它解释报错。
让它生成接口。
让它帮忙写文档。
这些用法没有问题,但如果只把 AI 当作“代码生成器”,价值其实没有完全发挥出来。
现在的 AI 工具已经开始进入更完整的软件研发流程。
例如,GitHub Copilot cloud agent 官方文档中提到,它可以研究代码仓库、创建实现计划,并在分支上修改代码,开发者之后再审查 diff 和创建 Pull Request。
Google Jules 也被 Google 介绍为异步编码代理,可以读取代码、编写测试、修复 Bug,并通过 GitHub 集成在云端环境中执行任务。
这说明一个趋势:
AI 工具正在从“问答工具”,逐步变成“研发流程里的协作工具”。
但这并不意味着可以把项目完全交给 AI。
真正可靠的做法,是把 AI 放进工程流程中,让它承担辅助任务,而不是替代人的判断。
2. AI工具适合做什么
从实际开发角度看,AI 工具比较适合处理以下几类任务。
2.1 需求拆解
很多项目一开始需求比较模糊,比如:
做一个客户管理系统。
做一个订单管理后台。
做一个 AI 问答功能。
做一个数据看板。
这种描述不能直接进入开发。
可以先让 AI 帮忙拆问题:
你是一个软件产品经理。请基于以下需求,帮我拆解: 1. 目标用户是谁 2. 核心业务流程是什么 3. 必须功能和可延后功能分别有哪些 4. 需要哪些数据表 5. 可能存在什么风险 需求:做一个客户管理系统,用于销售跟进客户。AI 的输出不能直接当最终需求,但可以作为需求讨论的初稿。
它的价值在于:
- 帮助补充遗漏问题;
- 帮助整理功能边界;
- 帮助把模糊需求变成清单;
- 帮助形成和客户或团队沟通的材料。
2.2 代码生成
AI 工具适合生成一些结构明确的代码,例如:
- API 接口模板;
- CRUD 代码;
- 数据转换函数;
- 单元测试样例;
- 配置文件;
- 文档草稿;
- 简单脚本。
例如:
请使用 FastAPI 编写一个用户登录接口,要求: 1. 接收 username 和 password 2. 使用 Pydantic 定义请求模型 3. 返回 token 字段 4. 不需要实现真实数据库查询,用假数据模拟 5. 代码需要包含基础异常处理AI 生成的代码可以作为初稿,但不建议直接复制进生产项目。
更合理的流程是:
AI生成初稿 → 人工阅读 → 修改命名和结构 → 加入项目规范 → 编写测试 → 合并代码2.3 错误解释
遇到报错时,AI 很适合做第一轮解释。
例如:
下面是 Python 项目启动时报错,请帮我分析可能原因,并给出排查顺序。 报错内容: ModuleNotFoundError: No module named 'xxx'AI 通常可以给出:
- 报错含义;
- 可能原因;
- 安装依赖方法;
- 虚拟环境检查方法;
- 进一步排查方向。
这类场景非常适合开发效率提升。
2.4 测试用例生成
AI 可以帮助生成测试用例,尤其适合补充边界情况。
例如:
请为下面这个函数设计单元测试用例。 要求: 1. 覆盖正常输入 2. 覆盖空值 3. 覆盖非法类型 4. 覆盖边界值 5. 使用 pytest 写出测试代码 函数代码: ...但测试是否充分,仍然需要开发人员判断。
AI 经常能生成“看起来完整”的测试,但未必覆盖真实业务风险。
2.5 文档整理
AI 很适合根据代码整理文档:
- API 文档;
- README;
- 部署说明;
- 参数说明;
- 数据表说明;
- 更新日志;
- Pull Request 摘要。
例如:
请根据下面的代码生成接口说明文档,包括: 1. 接口路径 2. 请求方法 3. 请求参数 4. 返回字段 5. 错误码 6. 调用示例这个场景比让 AI 从零写复杂业务代码更稳定。
3. AI工具不适合直接做什么
AI 工具不是万能工具,下面几类任务不建议完全交给 AI。
3.1 不适合直接决定业务规则
例如:
- 订单状态怎么流转;
- 退款规则怎么判断;
- 权限范围怎么划分;
- 财务数据怎么处理;
- 风险控制怎么设计。
这些规则必须由业务负责人和工程负责人确认。
AI 可以提出建议,但不能替人拍板。
3.2 不适合直接处理敏感数据
不要把以下内容直接粘贴给外部 AI 工具:
- 用户手机号;
- 身份证号;
- 账号密码;
- API Key;
- Token;
- 数据库连接串;
- 客户隐私数据;
- 未公开的商业资料。
如果必须让 AI 分析日志或代码,应先做脱敏处理。
3.3 不适合直接合并生产代码
AI 生成的代码至少要经过:
- 人工阅读;
- 代码审查;
- 单元测试;
- 接口测试;
- 权限检查;
- 安全检查;
- 回归测试。
如果是大型项目,还应该走 Pull Request 流程。
GitHub Copilot cloud agent 的官方介绍里,也强调开发者可以审查 diff、迭代,并在准备好后创建 Pull Request。这个设计本身就说明:AI 负责辅助修改,人仍然需要审查和确认。
4. 一个可落地的AI研发工作流
比较稳妥的 AI 工具接入方式,可以分成 7 个步骤。
需求输入 ↓ AI辅助拆解需求 ↓ 人工确认业务边界 ↓ AI生成代码初稿 ↓ 人工修改和补充测试 ↓ 代码审查与风险扫描 ↓ 合并、上线、复盘具体可以这样执行。
5. 步骤一:用AI辅助需求拆解
输入给 AI 的需求不能太短。
不要只写:
帮我做一个后台管理系统。更好的写法是:
你是一个资深产品经理和后端架构师。请帮我拆解一个后台管理系统的需求。 业务背景: 这是一个用于销售团队管理客户线索的系统。 用户角色: 1. 管理员 2. 销售主管 3. 普通销售 核心目标: 1. 记录客户线索 2. 分配客户 3. 跟进客户状态 4. 统计销售转化情况 请输出: 1. 核心业务流程 2. 功能模块列表 3. 数据表初步设计 4. 权限边界 5. 可能的风险点 6. 第一版MVP建议这个提示词的重点是:
- 给背景;
- 给角色;
- 给目标;
- 要求结构化输出;
- 明确第一版范围。
AI 输出后,不要直接进入开发。
应该人工检查:
- 有没有误解业务;
- 有没有功能过度设计;
- 有没有遗漏关键流程;
- 权限是否合理;
- 是否适合作为 MVP。
6. 步骤二:用AI生成代码初稿
需求确认后,可以让 AI 生成代码。
例如生成 FastAPI 接口:
请基于下面的数据模型,使用 FastAPI 写一个客户线索新增接口。 要求: 1. 使用 Pydantic 定义请求体 2. 字段包括 name、phone、source、remark 3. phone 不能为空 4. source 只能是 web、phone、wechat 三种 5. 返回创建成功后的 lead_id 6. 暂时不连接数据库,用内存列表模拟 7. 给出完整可运行代码示例代码如下:
from enum import Enum from typing import Optional from uuid import uuid4 from fastapi import FastAPI, HTTPException from pydantic import BaseModel, Field app = FastAPI(title="Lead Management Demo") leads = [] class LeadSource(str, Enum): web = "web" phone = "phone" wechat = "wechat" class LeadCreateRequest(BaseModel): name: str = Field(..., min_length=1, max_length=50) phone: str = Field(..., min_length=6, max_length=20) source: LeadSource remark: Optional[str] = Field(default=None, max_length=500) class LeadCreateResponse(BaseModel): lead_id: str message: str @app.post("/leads", response_model=LeadCreateResponse) def create_lead(payload: LeadCreateRequest): if not payload.phone.strip(): raise HTTPException(status_code=400, detail="phone is required") lead_id = str(uuid4()) leads.append({ "lead_id": lead_id, "name": payload.name, "phone": payload.phone, "source": payload.source.value, "remark": payload.remark, }) return LeadCreateResponse( lead_id=lead_id, message="lead created successfully" )运行方式:
uvicorn main:app --reload这段代码可以作为原型,但真实项目中还需要:
- 接数据库;
- 做手机号格式校验;
- 做权限校验;
- 做重复线索判断;
- 加日志;
- 加测试;
- 加异常处理;
- 做接口文档规范。
7. 步骤三:让AI生成测试用例
可以继续让 AI 基于接口生成测试。
提示词:
请为下面的 FastAPI 接口生成 pytest 测试用例。 要求: 1. 测试正常创建线索 2. 测试 phone 为空 3. 测试 source 非法 4. 测试 remark 超长 5. 使用 TestClient示例测试:
from fastapi.testclient import TestClient from main import app client = TestClient(app) def test_create_lead_success(): response = client.post("/leads", json={ "name": "张三", "phone": "13800138000", "source": "web", "remark": "来自官网表单" }) assert response.status_code == 200 data = response.json() assert "lead_id" in data assert data["message"] == "lead created successfully" def test_create_lead_empty_phone(): response = client.post("/leads", json={ "name": "张三", "phone": "", "source": "web" }) assert response.status_code in [400, 422] def test_create_lead_invalid_source(): response = client.post("/leads", json={ "name": "张三", "phone": "13800138000", "source": "invalid_source" }) assert response.status_code == 422 def test_create_lead_long_remark(): response = client.post("/leads", json={ "name": "张三", "phone": "13800138000", "source": "web", "remark": "a" * 501 }) assert response.status_code == 422运行测试:
pytest -qAI 生成测试后,仍然建议人工补充业务测试。
比如:
- 同一个手机号是否允许重复;
- 不同角色是否能创建线索;
- 线索是否能分配给指定销售;
- 删除或修改是否需要权限;
- 数据是否需要脱敏展示。
8. 步骤四:用AI做代码审查辅助
可以让 AI 按固定清单审查代码。
提示词:
请从以下角度审查这段代码: 1. 是否存在明显安全风险 2. 是否缺少参数校验 3. 是否存在异常处理不足 4. 是否存在数据一致性问题 5. 是否适合生产环境 6. 是否需要增加测试用例 请按照“问题 - 风险 - 修改建议”的格式输出。AI 的审查结果不能替代人工 Code Review,但可以作为补充。
尤其适合检查:
- 命名是否清晰;
- 逻辑是否重复;
- 参数是否校验;
- 是否缺少异常处理;
- 是否遗漏测试;
- 是否有明显坏味道。
9. 步骤五:写一个简单的AI生成代码风险扫描脚本
下面是一个简单的 Python 脚本,用来扫描项目中一些常见风险模式。
注意:这个脚本只是启发式检查,不能替代专业安全审计。
文件名:
ai_code_risk_scan.py代码:
import re import sys from pathlib import Path from typing import Dict, List RISK_RULES = [ { "name": "hardcoded_secret", "pattern": re.compile( r"(api[_-]?key|secret|token|password)\s*=\s*['\"][^'\"]+['\"]", re.IGNORECASE ), "message": "疑似硬编码密钥或密码" }, { "name": "broad_exception", "pattern": re.compile(r"except\s+Exception\s*:", re.IGNORECASE), "message": "捕获 Exception 过宽,建议明确异常类型" }, { "name": "debug_print", "pattern": re.compile(r"\bprint\s*\("), "message": "存在 print 调试语句,生产环境建议改为日志" }, { "name": "sql_string_format", "pattern": re.compile(r"(execute|executemany)\s*\(.*(f['\"]|format\()", re.IGNORECASE), "message": "疑似 SQL 字符串拼接,注意 SQL 注入风险" }, { "name": "todo_left", "pattern": re.compile(r"\b(TODO|FIXME)\b", re.IGNORECASE), "message": "存在 TODO/FIXME,合并前需要确认" }, ] def scan_file(file_path: Path) -> List[Dict]: results = [] try: lines = file_path.read_text(encoding="utf-8").splitlines() except UnicodeDecodeError: return results for line_no, line in enumerate(lines, start=1): for rule in RISK_RULES: if rule["pattern"].search(line): results.append({ "file": str(file_path), "line": line_no, "rule": rule["name"], "message": rule["message"], "content": line.strip() }) return results def scan_project(root: Path) -> List[Dict]: all_results = [] for file_path in root.rglob("*.py"): if any(part in {".venv", "venv", "__pycache__", ".git"} for part in file_path.parts): continue all_results.extend(scan_file(file_path)) return all_results def print_report(results: List[Dict]) -> None: if not results: print("未发现明显风险模式") return print(f"发现 {len(results)} 个潜在风险:\n") for item in results: print(f"[{item['rule']}] {item['message']}") print(f"文件: {item['file']}:{item['line']}") print(f"内容: {item['content']}") print("-" * 80) if __name__ == "__main__": target = Path(sys.argv[1]) if len(sys.argv) > 1 else Path(".") results = scan_project(target) print_report(results)使用方式:
python ai_code_risk_scan.py .这个脚本适合放在 AI 生成代码后的第一轮检查里。
它能帮助发现一些低级问题:
- 硬编码密钥;
- 宽泛异常捕获;
- 调试语句残留;
- 疑似 SQL 拼接;
- TODO/FIXME 未处理。
但要注意,它只是基础检查。
真实项目还需要:
- 静态代码扫描;
- 单元测试;
- 集成测试;
- 安全测试;
- 人工代码审查。
10. AI工具使用中的几个风险点
10.1 代码看起来能跑,但不一定可靠
AI 生成的代码经常能通过简单测试,但在复杂业务场景下可能出问题。
例如:
- 没考虑并发;
- 没考虑事务;
- 没考虑权限;
- 没考虑异常输入;
- 没考虑性能。
所以,AI 生成代码后一定要补测试。
10.2 代码风格可能不符合项目规范
不同项目有不同规范:
- 命名规则;
- 目录结构;
- 日志方式;
- 错误码设计;
- 权限中间件;
- 数据库访问层;
- 配置管理。
AI 生成的代码可能是通用写法,需要根据项目规范调整。
10.3 可能引入过时写法
AI 可能生成旧版本框架的写法。
例如:
- 旧版本依赖;
- 旧 API;
- 旧配置方式;
- 不推荐的库用法。
使用前需要核对当前框架文档。
10.4 可能遗漏边界场景
AI 很容易生成“主流程代码”,但遗漏边界场景。
例如:
- 空值;
- 超长字符串;
- 重复提交;
- 多人并发;
- 文件过大;
- 网络失败;
- 数据库连接中断。
这些需要人工补充。
11. 推荐的AI工具使用原则
我建议在团队内部制定几条规则。
11.1 AI输出必须经过人工审查
不能因为代码是 AI 生成的,就降低审查标准。
相反,AI 生成代码更应该审查:
AI生成代码 ≠ 已验证代码11.2 不输入敏感数据
不要把密钥、账号、客户数据、生产日志原文直接输入外部 AI 工具。
必要时先脱敏:
原始手机号:13800138000 脱敏后:138****800011.3 复杂功能先让AI写方案,再写代码
不要一上来就让 AI 写完整系统。
更好的流程是:
先写需求拆解 → 再写架构方案 → 再写接口设计 → 最后写代码这样更容易发现问题。
11.4 建立AI代码审查清单
每次使用 AI 生成代码后,至少检查:
- 业务逻辑是否正确;
- 参数校验是否完整;
- 权限判断是否存在;
- 异常处理是否合理;
- 是否有硬编码;
- 是否有测试;
- 是否符合项目规范;
- 是否存在安全风险。
11.5 不把AI当成项目负责人
AI 可以辅助执行,但项目负责人仍然要对结果负责。
尤其是:
- 需求判断;
- 技术选型;
- 架构取舍;
- 质量验收;
- 安全边界;
- 上线决策。
这些不能完全交给 AI。
12. 一个推荐的团队协作流程
可以把 AI 工具纳入团队流程:
产品阶段: AI 辅助整理需求、拆用户故事、生成原型说明 开发阶段: AI 辅助生成代码、解释报错、补全接口、写文档 测试阶段: AI 辅助生成测试用例、整理边界场景、分析失败日志 审查阶段: AI 辅助做第一轮代码审查,人工做最终审查 交付阶段: AI 辅助生成部署说明、更新日志、用户操作文档这样使用 AI,风险更可控。
AI 不再只是“写代码工具”,而是研发流程中的辅助节点。
13. 总结
AI 工具已经进入软件研发流程。
它可以帮助开发者:
- 拆解需求;
- 生成代码;
- 解释错误;
- 编写测试;
- 审查代码;
- 整理文档;
- 生成部署说明。
但 AI 工具不是项目自动成功按钮。
真正可靠的软件开发,仍然需要:
- 清晰需求;
- 合理架构;
- 完整测试;
- 代码审查;
- 风险控制;
- 持续维护。
我的建议是:
把 AI 当成研发流程里的助手,而不是替代工程判断的负责人。
AI 负责提高效率,人负责定义问题、验证质量和承担结果。
这才是当前阶段更稳妥的 AI 工具使用方式。