# AI 生成的异步代码asyncdeffetch_data():
asyncwith aiohttp.ClientSession() as session:
asyncwith session.get(url) as response:
returnawait response.json()
学习要点:
为什么使用 async/await?
ClientSession 的作用?
async with 的优势?
什么场景需要异步?
🛡️ 原则六:安全与质量
安全审查
AI 生成的代码可能存在安全隐患:
❌ 潜在问题:
# SQL 注入风险
query = f"SELECT * FROM users WHERE name = '{name}'"# 硬编码密钥
API_KEY = "sk-1234567890abcdef"# 缺少输入验证defdelete_user(user_id):
db.execute(f"DELETE FROM users WHERE id = {user_id}")
✅ 安全实践:
# 使用参数化查询
query = "SELECT * FROM users WHERE name = ?"
db.execute(query, (name,))
# 环境变量
API_KEY = os.getenv("API_KEY")
# 输入验证defdelete_user(user_id: int):
ifnotisinstance(user_id, int) or user_id <= 0:
raise ValueError("Invalid user ID")
db.execute("DELETE FROM users WHERE id = ?", (user_id,))
阅读时间:约 7 分钟 难度级别:进阶 前置知识:了解 Vibe Coding 基本概念
本节概要 通过本节学习,你将掌握:
清晰意图表达的四要素和实践技巧 迭代式开发的具体方法和优势 三层验证策略确保代码质量 上下文管理的重要性和维护方法 理解代码而非盲目复制的三个层次 安全与质量的审查清单
引言 掌握 Vibe Coding 不仅仅是学会使用 AI 工具,更重要的是理解和应用其核心原则。有效:将用户信息添加到请求上下文 - 无效:返回 401 错误 约束:使用 PyJWT 库,支持 RS256 算法
🔄 原则二:迭代式开发 渐进式构建 不要期望一次就得到完美的结果,Vibe Coding 是一个对话过程。getenv("API_KEY")
输入验证
def delete_user(user_id: int): if not isinstance(user_id, int) or user_id <= 0: raise ValueError("Invalid user ID") db.
第 2 节:Vibe Coding 的核心原则
本节概要
通过本节学习,你将掌握:
引言
掌握 Vibe Coding 不仅仅是学会使用 AI 工具,更重要的是理解和应用其核心原则。这些原则将帮助你更高效地与 AI 协作,产出高质量的代码。
🎯 原则一:清晰的意图表达
为什么重要?
AI 不能读懂你的心思,但能理解清晰的描述。意图表达的质量直接决定了生成代码的质量。
好的意图表达
❌ 模糊表达:
"写一个函数" "帮我处理数据" "创建一个 API"✅ 清晰表达:
"创建一个 Python 函数,接收用户列表,过滤出年龄大于 18 岁的用户, 返回按姓名排序的结果" "实现一个 FastAPI POST 接口 /api/users, 接收 JSON 格式的用户数据(name, email, age), 验证邮箱格式,返回创建的用户 ID"清晰表达的四要素
实践技巧
使用结构化描述:
任务:创建用户认证中间件 输入:HTTP 请求头中的 Authorization token 处理:验证 JWT token 的有效性 输出: - 有效:将用户信息添加到请求上下文 - 无效:返回 401 错误 约束:使用 PyJWT 库,支持 RS256 算法🔄 原则二:迭代式开发
渐进式构建
不要期望一次就得到完美的结果,Vibe Coding 是一个对话过程。
第一轮:基础功能
"创建一个简单的 FastAPI 应用" → AI 生成基础框架第二轮:添加功能
"添加 CORS 支持" → AI 添加 CORS 配置第三轮:优化
"添加请求日志和错误处理" → AI 完善代码小步快跑
迭代开发流程:
为什么有效?
实践案例
需求: 构建一个数据查询 API
❌ 一次完成:
"创建一个完整的数据查询 API,包括认证、权限、缓存、 日志、监控、分页、排序、过滤..." → 可能生成过于复杂或不符合预期的代码✅ 迭代开发:
轮次 1:"创建基础的数据查询接口" 轮次 2:"添加分页和排序功能" 轮次 3:"集成身份认证" 轮次 4:"添加查询缓存" 轮次 5:"完善错误处理和日志"🧪 原则三:验证优先
不盲目信任
AI 生成的代码需要验证,这是质量保证的关键。
三层验证策略
1. 语法验证
# Python python -m py_compile app.py # TypeScript tsc --noEmit # ESLint eslint src/2. 逻辑验证
# 单元测试 def test_user_filter(): users = [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 17} ] result = filter_adult_users(users) assert len(result) == 1 assert result[0]["name"] == "Alice"3. 运行验证
# 启动服务 python main.py # 手动测试 curl http://localhost:8000/api/users快速验证循环
越快发现问题,修复成本越低。
🎨 原则四:保持上下文
什么是上下文?
上下文是 AI 理解你项目的关键信息:
如何维护上下文
1. 会话开始时建立上下文
"我正在开发一个 FastAPI 项目,使用 Python 3.11, 项目结构如下: - backend/ - main.py - routers/ - services/ - models/ 请帮我创建一个新的用户管理路由"2. 引用已有代码
"在现有的 main.py 中,我已经配置了 CORS, 现在需要在同一个文件中添加认证中间件"3. 保持一致性
"使用和 chat.py 相同的风格创建 workflow.py"上下文丢失的信号
解决办法: 重新提供上下文信息
🔍 原则五:理解而非复制
深度理解
不要盲目复制 AI 生成的代码,要理解其工作原理。
理解的三个层次
Level 1:知道它做什么
# 我知道这是过滤用户的函数 def filter_adult_users(users): return [u for u in users if u["age"] >= 18]Level 2:知道它怎么工作
# 我理解它使用列表推导式遍历用户, # 对每个用户检查年龄条件,返回满足条件的列表Level 3:知道为什么这样设计
# 我明白为什么使用列表推导而不是 filter(): # - 更 Pythonic # - 性能好 # - 可读性强 # 如果数据量巨大,应该考虑使用生成器学习的机会
每次 AI 生成代码都是学习新知识的机会:
# AI 生成的异步代码 async def fetch_data(): async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.json()学习要点:
async/await?ClientSession的作用?async with的优势?🛡️ 原则六:安全与质量
安全审查
AI 生成的代码可能存在安全隐患:
❌ 潜在问题:
# SQL 注入风险 query = f"SELECT * FROM users WHERE name = '{name}'" # 硬编码密钥 API_KEY = "sk-1234567890abcdef" # 缺少输入验证 def delete_user(user_id): db.execute(f"DELETE FROM users WHERE id = {user_id}")✅ 安全实践:
# 使用参数化查询 query = "SELECT * FROM users WHERE name = ?" db.execute(query, (name,)) # 环境变量 API_KEY = os.getenv("API_KEY") # 输入验证 def delete_user(user_id: int): if not isinstance(user_id, int) or user_id <= 0: raise ValueError("Invalid user ID") db.execute("DELETE FROM users WHERE id = ?", (user_id,))质量检查清单
原则总结
本节小结
本节我们深入学习了 Vibe Coding 的六大核心原则:
这些原则相互关联,共同构成了 Vibe Coding 的方法论体系。
思考与练习
思考题
实践练习
意图表达练习:
迭代开发实践:
代码审查练习:
上一节:第 1 节:什么是 Vibe Coding
下一节:第 3 节:Vibe Coding 最佳实践