乐于分享
好东西不私藏

程序员注意 AI Agent 编程时代已来 你还在手动写代码

程序员注意 AI Agent 编程时代已来 你还在手动写代码

程序员注意:AI Agent 编程时代已来,你还在手动写代码?

最近试了几个支持 Agent 模式的编程工具,感觉变化挺大。以前是「你写一行它补一行」,现在是「告诉它你要什么,它自己去干」。

这篇笔记记录了几个实际尝试过的场景,代码都附上了。如果你也在看这个方向,可以少踩几个坑。

什么是 AI Agent 编程?

以前的 AI 编程助手是被动响应式的。你在编辑器里打字,它补全下一行。你不写,它不动。

AI Agent 不一样。你给它一个目标,它会自己拆解任务、规划文件结构、编写代码、运行测试、发现错误、修复再试。中间过程不需要你插手。

比如你说「帮我写一个用户注册接口,包含邮箱验证和密码加密」,它不会等你一行一行写,而是直接生成完整的代码文件。

这不是演示视频里的东西,是已经能用的能力。

我做了什么实验

我试了几个主流工具,它们都支持不同程度的 Agent 模式:

  • Claude Code: 终端里给任务,它会自己读代码库、改文件、跑测试
  • Cursor 的 Agent 模式: 能跨文件修改,不只是单行补全
  • GitHub Copilot Workspace: 从 issue 描述直接生成 PR

具体实验是这样的。我给 Agent 一句话需求:

写一个用户管理 API,支持增删改查,用 Python FastAPI,带 SQLite 数据库。

它自己做了这些事:规划了三个文件的结构,依次编写代码,执行 pip install 装依赖,启动服务后发现端口被占用,自动换了个端口,最后输出了可用的 API 地址。

整个过程我没有写代码。生成的代码质量大概在「MVP 能用」这个级别。

当然不够完美。错误处理比较简单,没有分页和限流。不过这些后续改进也可以接着交给它做。

实战场景一:从零生成项目脚手架

项目搭建框架这类事重复性很高,创建目录、写配置文件、初始化依赖,每次都是类似的套路。

实操:生成一个 Node.js + TypeScript 项目。给 Agent 的指令是:

1
2
3
4
5
创建一个 TypeScript 项目,要求:- 使用 Express 框架- 支持 ESLint + Prettier- 包含单元测试框架 Jest- 有完整的 package.json 脚本

它生成了这些文件:

package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{  "name": "ts-api-starter",  "version": "1.0.0",  "description": "TypeScript Express API starter",  "main": "dist/index.js",  "scripts": {    "dev": "nodemon src/index.ts",    "build": "tsc",    "start": "node dist/index.js",    "lint": "eslint src --ext .ts",    "test": "jest --coverage",    "format": "prettier --write 'src/**/*.ts'"  },  "dependencies": {    "express": "^4.21.0",    "cors": "^2.8.5",    "dotenv": "^16.4.5"  },  "devDependencies": {    "@types/express": "^5.0.0",    "@types/node": "^22.0.0",    "typescript": "^5.6.0",    "ts-node": "^10.9.0",    "nodemon": "^3.1.0",    "eslint": "^9.0.0",    "prettier": "^3.3.0",    "jest": "^29.7.0",    "@types/jest": "^29.5.0",    "ts-jest": "^29.2.0"  }}

tsconfig.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "outDir": "./dist",    "rootDir": "./src",    "strict":true,    "esModuleInterop":true,    "forceConsistentCasingInFileNames":true,    "skipLibCheck":true  },  "include": ["src/**/*"],  "exclude": ["node_modules", "**/*.test.ts"]}

src/index.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import express from 'express';import cors from 'cors';import dotenv from 'dotenv';dotenv.config();const app = express();const PORT = process.env.PORT || 3000;// 中间件app.use(cors());app.use(express.json());// 健康检查app.get('/health', (_req, res) => {  res.json({ status: 'ok', timestamp: new Date().toISOString() });});app.listen(PORT, () => {  console.log(`Server running on http://localhost:${PORT}`);});

手动搭这套东西至少 30 分钟,Agent 大概 2 分钟。

实战场景二:自动修复 Bug

传统修 bug 流程:看报错、猜原因、改代码、重新跑、再报错、继续猜。Agent 把这个过程缩短了不少。

实操:修复一个 Python 的数据库连接问题。

假设这段代码运行时报错:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sqlite3from flask import Flask, jsonifyapp = Flask(__name__)def get_db():    conn = sqlite3.connect('app.db')    return conn@app.route('/users')def get_users():    conn = get_db()    cursor = conn.cursor()    cursor.execute("SELECT * FROM users")    users = cursor.fetchall()    return jsonify(users)if __name__ == '__main__':    app.run(debug=True)

报错信息:sqlite3.OperationalError: no such table: users

给 Agent 的指令:

1
2
3
4
5
这段代码报错 "no such table: users",请分析原因并修复。要求:1. 添加数据库初始化逻辑2. 确保表不存在时自动创建3. 添加错误处理

Agent 给出的修复方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import sqlite3from flask import Flask, jsonifyapp = Flask(__name__)DATABASE = 'app.db'def get_db():    conn = sqlite3.connect(DATABASE)    conn.row_factory = sqlite3.Row  # 让查询结果可以用字段名访问    return conndef init_db():    """初始化数据库,确保表结构存在"""    conn = get_db()    conn.execute('''        CREATE TABLE IF NOT EXISTS users (            id INTEGER PRIMARY KEY AUTOINCREMENT,            name TEXT NOT NULL,            email TEXT UNIQUE NOT NULL,            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP        )    ''')    conn.commit()    conn.close()@app.route('/users')def get_users():    try:        conn = get_db()        cursor = conn.cursor()        cursor.execute("SELECT id, name, email, created_at FROM users")        users = [dict(row) for row in cursor.fetchall()]        conn.close()        return jsonify(users)    except sqlite3.Error as e:        return jsonify({"error": str(e)}), 500@app.route('/users', methods=['POST'])def create_user():    from flask import request    try:        data = request.get_json()        name = data.get('name')        email = data.get('email')        if not name or not email:            return jsonify({"error": "name and email are required"}), 400        conn = get_db()        cursor = conn.cursor()        cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", (name, email))        conn.commit()        user_id = cursor.lastrowid        conn.close()        return jsonify({"id": user_id, "name": name, "email": email}), 201    except sqlite3.IntegrityError:        return jsonify({"error": "email already exists"}), 409    except sqlite3.Error as e:        return jsonify({"error": str(e)}), 500if __name__ == '__main__':    init_db()  # 启动时初始化数据库    app.run(debug=True)

除了修好原始报错,Agent 还做了额外改进:

  • 加了 row_factory,查询结果能用字段名直接访问
  • 多写了一个 POST 接口
  • 错误处理完整了
  • 数据库连接在使用后正确关闭

实战场景三:批量重构代码

Agent 比传统工具强的地方在于能理解上下文,做跨文件的关联修改。

实操:给一个 Python 项目批量添加类型注解。代码能用但没有类型标注,传统做法是一个文件一个文件改。

给 Agent 的指令:

1
2
3
4
5
6
7
8
9
10
11
12
给以下三个文件添加 Python 类型注解:models.py:```pythonclass User:<br>    def __init__(self, id, name, email):<br>        self.id = id<br>        self.name = name<br>        self.email = email    def to_dict(self):<br>        return {"id": self.id, "name": self.name, "email": self.email}

services.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from models import Userclass UserService:<br>    def __init__(self):<br>        self.users = []    def create(self, name, email):<br>        user = User(len(self.users) + 1, name, email)<br>        self.users.append(user)<br>        return user    def get_by_id(self, user_id):<br>        for user in self.users:<br>            if user.id == user_id:<br>                return user<br>        return None    def get_all(self):<br>        return self.users

要求:添加完整的类型注解,包括返回值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Agent 的输出:```python# models.py - 添加类型注解后from typing import Dict, Optionalfrom dataclasses import dataclass@dataclassclass User:    id: int    name: str    email: str    def to_dict(self) -> Dict[str, object]:        return {"id": self.id, "name": self.name, "email": self.email}# services.py - 添加类型注解后from typing import List, Optionalfrom models import Userclass UserService:    def __init__(self) -> None:        self.users: List[User] = []    def create(self, name: str, email: str) -> User:        user = User(id=len(self.users) + 1, name=name, email=email)        self.users.append(user)        return user    def get_by_id(self, user_id: int) -> Optional[User]:        for user in self.users:            if user.id == user_id:                return user        return None    def get_all(self) -> List[User]:        return self.users

Agent 不只是加了类型注解,还把 User 类从手动 __init__ 改成了 @dataclass 装饰器。我没明确要求这么做,但它判断这样更简洁。

进阶:让 Agent 形成工作流闭环

单个任务交给 Agent 效果不错,如果能让它持续工作,价值更大。

我初步尝试了一个循环工作流:

1
需求描述 → Agent 生成代码 → 运行测试 → 测试失败则自动修复 → 通过后输出结果

具体做法:

  1. 准备单元测试或集成测试脚本
  2. 让 Agent 负责「生成 → 测试 → 修复」整个循环
  3. 设置最大尝试次数,避免在同一个问题上死循环

示例指令:

1
2
3
4
5
6
7
请完成以下任务:1. 写一个 Python 函数,实现冒泡排序2. 写对应的单元测试,覆盖正常输入、空列表、重复元素等场景3. 运行测试4. 如果测试失败,自行修复并重新运行5. 最多尝试 3 次6. 最终输出通过测试的代码和测试报告

一些实际感受

  • Agent 写出来的代码大概 70-80% 能直接用,剩下的需要人工判断。你的价值从「写代码」变成「判断代码质量」和「把需求说清楚」。
  • 给 Agent 的指令越具体,效果越好。「写个 API」和「写一个支持分页、排序、过滤的用户列表 API」,输出差距很明显。
  • 脚手架、CRUD 接口、单元测试、代码重构,这些是 Agent 的优势场景。系统架构设计方面它还是辅助角色。
  • Agent 生成的代码要过一遍再提交。它能写出能跑的代码,但安全和性能相关的细节不一定到位。

总结

Agent 编程已经不是概念演示,而是日常可用的工具。工作方式从「逐行写代码」变成了「描述目标,Agent 执行,人工审核」。

还没试过的话,可以从一个小任务开始,比如让它生成项目脚手架,感受一下效率差距。


来源参考

  • 2026年AI编程进入Agent时代:开发者转型为“AI编排者”
  • 2026年主流Coding Agent实测
  • AI Agent 完整工作流全景解析