67. Vibe Coding:自然语言驱动开发¶
一句话说明: Vibe Coding是用自然语言描述需求让AI写代码、你负责审查和引导的编程新范式,重点从"怎么写"变成"写什么"。
一、什么是Vibe Coding¶
白话解释: 以前编程是你亲手一行行敲代码,Vibe Coding是你用大白话告诉AI"我要啥",AI帮你写代码,你负责检查对不对。就像你是项目经理,AI是程序员——你说需求,它写代码,你审查验收。
词源¶
"Vibe Coding"这个词由OpenAI联合创始人、前Tesla AI总监Andrej Karpathy在2025年2月提出。他在社交媒体上写道:
"There's a new kind of coding I call 'vibe coding', where you fully give in to the vibes, embrace exponentials, and forget that the code even exists."
(有一种新的编程方式我叫它"氛围编程",你完全沉浸在感觉中,拥抱指数级增长,甚至忘了代码的存在。)
核心思想¶
传统编程: 需求 → 你写代码 → 你测试 → 交付
Vibe Coding:需求 → 你描述需求 → AI写代码 → 你审查 → 迭代 → 交付
关键转变:
- 你的核心技能从"写代码"变成"描述清楚需求 + 审查AI代码"
- 但这不意味着你不需要懂代码——审查代码需要你能读懂代码
- 你负责架构决策,AI负责实现细节
二、和传统编程的区别¶
| 维度 | 传统编程 | Vibe Coding |
|---|---|---|
| 输入 | 键盘敲代码 | 自然语言描述需求 |
| 核心技能 | 语法、算法、数据结构 | 需求描述、代码审查、架构设计 |
| 速度 | 取决于打字和思考速度 | 取决于AI生成速度和审查速度 |
| 调试方式 | 读代码、加断点、print | 把报错信息给AI、让AI修复 |
| 适合人群 | 专业开发者 | 有领域知识但编程基础薄弱的人 |
| 代码理解 | 每行代码都自己写的,完全理解 | 可能不完全理解AI写的每一行 |
| 风险 | Bug是你引入的 | Bug可能是AI引入的,你可能没察觉 |
Vibe Coding的三个层级¶
Level 1 - 完全信任AI(危险!)
"帮我写一个分析脚本" → AI生成 → 直接用
问题:你不知道代码做了什么,出了错找不到原因
Level 2 - 描述+审查(推荐)
"帮我写一个Shannon多样性计算函数" → AI生成 → 逐行审查 → 修改 → 使用
优点:效率高,质量可控
Level 3 - 架构引导+AI实现(最佳)
"整个项目结构如下...现在请实现数据预处理模块" → AI生成 → 审查 → 测试 → 集成
优点:你掌控全局架构,AI负责模块实现
三、适用场景和不适用场景¶
适用场景¶
| 场景 | 为什么适合 | 举例 |
|---|---|---|
| 快速原型 | 不需要完美,先跑起来 | 写个数据可视化脚本看看数据长什么样 |
| 重复性代码 | AI最擅长的 | 批量数据清洗、文件格式转换 |
| 不熟悉的语言/框架 | AI帮你写,你学着看 | Python用户临时需要写一段R代码 |
| 生信流程脚本 | 流程固定、参数化、有最佳实践 | FastQC→Trim→Mapping→Counting流程 |
| 数据分析和可视化 | 描述图表需求比写matplotlib代码快 | "画一个PCoA散点图,按组着色" |
| 配置文件和模板 | 格式固定,规则明确 | 写Snakemake规则文件、conda环境yaml |
不适用场景¶
| 场景 | 为什么不适合 | 建议 |
|---|---|---|
| 核心算法开发 | AI可能不理解你的创新算法 | 自己写核心逻辑,AI写辅助代码 |
| 安全敏感代码 | AI可能引入安全漏洞 | 人工审查每一行 |
| 需要深度优化的代码 | AI写的代码通常"能用"但不是最优 | AI写初版,人工优化 |
| 考试/面试 | 考的是你的能力不是AI的 | 平时用AI学习,考试靠自己 |
| 涉及敏感数据的分析 | 代码可能被发送到AI服务器 | 使用本地模型或审查数据是否脱敏 |
四、工具链¶
1. AI编码工具¶
| 工具 | 类型 | 特点 | 价格 |
|---|---|---|---|
| Claude Code | CLI代理 | 终端中直接操作文件、运行命令 | 按token计费 |
| OpenCode | CLI代理 | 开源的Claude Code替代品 | 自带API Key |
| Cursor | AI IDE | VSCode魔改版,内置AI | $20/月(Pro) |
| GitHub Copilot | IDE插件 | 行级补全+聊天 | $10/月(个人) |
| Windsurf | AI IDE | 全文件级AI编辑 | 免费+付费 |
| Aider | CLI代理 | 开源,支持多种模型 | 免费(需API Key) |
2. 配套工具¶
版本控制:Git(必须!AI改了什么你要能回退)
测试框架:pytest(Python)/ testthat(R)
CI/CD:GitHub Actions(自动运行测试)
代码质量:Ruff + Black(见知识库65)
文档:AI自动生成docstring
3. 推荐工作流工具链¶
初学者推荐:
Cursor + Git + pytest
原因:图形界面友好,AI集成度高
进阶推荐:
Claude Code / OpenCode + Git + pytest + Ruff + GitHub Actions
原因:终端操作更灵活,CI/CD保证质量
生信推荐:
Claude Code + conda + Snakemake + Git
原因:conda管理环境,Snakemake管理流程
五、实操教程:Vibe Coding完整流程¶
场景:用自然语言驱动,开发一个Shannon多样性计算脚本¶
Step 1:描述需求¶
给AI的prompt(自然语言描述需求):
请帮我写一个Python脚本,功能如下:
1. 读取一个物种丰度表(TSV格式,行是样本,列是物种,第一列是样本名)
2. 计算每个样本的Shannon多样性指数
3. 输出结果到一个新的TSV文件(两列:样本名、Shannon指数)
4. 要求:
- 用argparse接收输入输出路径
- 设置随机种子42
- 用logging记录日志而非print
- 每行代码加中文注释
- 处理全零样本(Shannon=0)
Step 2:AI生成代码¶
AI会生成类似以下的代码:
#!/usr/bin/env python3
"""计算物种丰度表中每个样本的Shannon多样性指数"""
import argparse # 命令行参数解析
import logging # 日志记录
import numpy as np # 数学计算
import pandas as pd # 数据处理
import sys # 系统信息
# 设置随机种子(保证可重复性)
np.random.seed(42)
# 配置日志格式
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[
logging.StreamHandler(), # 输出到屏幕
logging.FileHandler("shannon.log") # 同时写入日志文件
]
)
logger = logging.getLogger(__name__) # 获取日志器
def calculate_shannon(abundances: np.ndarray) -> float:
"""
计算单个样本的Shannon多样性指数
公式:H = -Σ(pi * ln(pi)),其中pi是第i个物种的相对丰度
"""
total = abundances.sum() # 计算总丰度
if total == 0: # 处理全零样本
return 0.0
proportions = abundances / total # 计算相对丰度(比例)
# 过滤掉丰度为0的物种(log(0)无意义)
proportions = proportions[proportions > 0]
# Shannon公式:H = -Σ(pi * ln(pi))
shannon = -np.sum(proportions * np.log(proportions))
return round(shannon, 4) # 保留4位小数
def main():
"""主函数:解析参数、读取数据、计算、输出"""
# 解析命令行参数
parser = argparse.ArgumentParser(
description="计算物种丰度表的Shannon多样性指数"
)
parser.add_argument(
"--input", "-i", required=True,
help="输入的物种丰度表(TSV格式)"
)
parser.add_argument(
"--output", "-o", required=True,
help="输出的Shannon指数表(TSV格式)"
)
args = parser.parse_args()
# 记录运行环境
logger.info(f"Python版本:{sys.version}")
logger.info(f"NumPy版本:{np.__version__}")
logger.info(f"pandas版本:{pd.__version__}")
# 读取输入数据
logger.info(f"读取输入文件:{args.input}")
df = pd.read_csv(args.input, sep="\t", index_col=0) # 第一列作为索引
logger.info(f"数据维度:{df.shape[0]}个样本 × {df.shape[1]}个物种")
# 数据校验
assert df.shape[0] > 0, "输入文件为空"
numeric_df = df.select_dtypes(include=[np.number]) # 只取数值列
if (numeric_df < 0).any().any(): # 检查负值
logger.warning("发现负值丰度,已取绝对值处理")
numeric_df = numeric_df.abs()
# 逐样本计算Shannon指数
results = []
for sample_name in numeric_df.index:
abundances = numeric_df.loc[sample_name].values # 取该样本的丰度数组
shannon = calculate_shannon(abundances) # 计算Shannon
results.append({"sample": sample_name, "shannon": shannon})
logger.info(f" {sample_name}: Shannon = {shannon}")
# 输出结果
result_df = pd.DataFrame(results) # 转为DataFrame
result_df.to_csv(args.output, sep="\t", index=False) # 写入TSV文件
logger.info(f"结果已保存到:{args.output}")
logger.info(f"Shannon指数范围:{result_df['shannon'].min()} ~ {result_df['shannon'].max()}")
if __name__ == "__main__":
main()
Step 3:审查AI代码¶
审查清单(逐项检查):
[x] Shannon公式是否正确? → 正确,H = -Σ(pi * ln(pi))
[x] 全零样本处理? → 有,返回0.0
[x] 路径是否参数化? → 是,用argparse
[x] 随机种子? → 已设置42
[x] 日志记录? → 用了logging
[x] 中文注释? → 每行都有
[x] 输入校验? → 有基本校验
[ ] 缺少:没有try-except异常处理 → 需要补充
[ ] 建议:可以加--seed参数让随机种子可配置
Step 4:迭代修复¶
Step 5:测试¶
# 运行脚本
python shannon_diversity.py -i test_abundance.tsv -o results.tsv
# 检查输出
cat results.tsv
# 用已知结果验证
# 如果只有两个均匀分布的物种,Shannon应该≈0.6931(ln2)
Step 6:提交到Git¶
git add shannon_diversity.py
git commit -m "feat: add Shannon diversity calculation script (vibe coded + reviewed)"
六、生信场景实战:用Vibe Coding开发物种丰度分析脚本¶
需求描述(给AI的prompt)¶
请帮我写一个Python脚本,完成以下物种丰度分析:
输入:物种丰度表(TSV,行=样本,列=物种,第一列样本名)
分组信息表(TSV,两列:sample_id, group)
分析内容:
1. 基础统计:每组的物种数、总丰度、Shannon指数
2. Top10物种的堆叠柱状图(按组分面)
3. PCoA分析(Bray-Curtis距离),散点图按组着色
4. 组间Shannon指数的箱线图 + Wilcoxon检验
输出:
- 统计结果表(TSV)
- 三张图(PNG,300dpi)
要求:
- argparse传参
- 随机种子42
- logging日志
- 代码中文注释
- 用matplotlib + seaborn画图
- 脚本名:abundance_analysis.py
AI生成后的审查重点¶
1. Bray-Curtis距离计算是否用了scipy或skbio?是否正确?
2. PCoA实现是否正确?(sklearn的PCoA还是skbio的PCoA)
3. Wilcoxon检验用的是配对还是非配对?(应该用Mann-Whitney U)
4. 图的DPI是否300?图片大小是否合理?
5. 中文字体是否设置?(matplotlib默认不支持中文)
6. 颜色方案是否色盲友好?
七、最佳实践¶
1. 怎么写好需求描述¶
差的需求描述:
"帮我写一个分析数据的脚本"
→ AI不知道分析什么数据,用什么方法,输出什么
好的需求描述:
"帮我写一个Python脚本,读取TSV格式的物种丰度表(行=样本,列=物种),
计算每个样本的Shannon和Simpson多样性指数,
输出TSV结果表和一张按组着色的箱线图(PNG, 300dpi)。
用argparse传参,加logging日志,每行加中文注释。"
→ 输入格式、分析方法、输出格式、代码规范全部明确
好需求的要素:
| 要素 | 说明 | 例子 |
|---|---|---|
| 输入格式 | 数据是什么格式 | TSV、CSV、FASTA |
| 分析方法 | 用什么算法 | Shannon指数、PCoA、随机森林 |
| 输出格式 | 输出什么 | TSV表、PNG图、HTML报告 |
| 参数要求 | 路径怎么传 | argparse、配置文件 |
| 代码规范 | 风格要求 | PEP8、中文注释、logging |
| 边界条件 | 特殊情况怎么处理 | 空文件、缺失值、全零行 |
2. 怎么审查AI代码¶
审查优先级(从高到低):
1. 正确性:核心逻辑/算法/公式对不对?
2. 安全性:有没有硬编码密码、SQL注入、路径穿越?
3. 边界条件:空输入、极端值、缺失值处理了吗?
4. 可重复性:随机种子设了吗?版本记录了吗?
5. 性能:大数据量会不会内存溢出?有没有不必要的循环?
6. 可维护性:变量名清晰吗?有注释吗?函数拆分合理吗?
7. 风格:符合PEP8吗?import排序了吗?
3. 怎么控制项目架构¶
错误做法:
让AI一次性生成整个项目
→ AI不了解你的全局设计,每次生成可能风格不一致
正确做法:
1. 你先设计项目结构
project/
├── scripts/ # 分析脚本
├── data/ # 数据
├── results/ # 结果
├── tests/ # 测试
├── config.yaml # 配置
└── README.md # 说明
2. 逐模块让AI实现
"请按照以下接口实现数据预处理模块:
函数名: preprocess_abundance(input_path, min_count)
返回值: pd.DataFrame
..."
3. 你负责模块间的集成和一致性检查
八、面试怎么答¶
Q1:什么是Vibe Coding?你怎么看?¶
答: Vibe Coding是Andrej Karpathy在2025年提出的概念,核心是用自然语言描述需求,让AI生成代码,开发者负责审查和引导。我认为这确实提高了编程效率,特别适合快速原型和重复性工作。但我的实践中会坚持Level 2-3的方式:理解AI生成的每一行代码,自己把控架构设计,AI负责具体实现。不能完全放手给AI,因为AI可能引入不易察觉的Bug。
Q2:你在项目中是怎么用AI辅助编程的?¶
答: 我的工作流是:先用自然语言描述清楚需求(包括输入格式、分析方法、输出要求、代码规范),AI生成代码后我逐项审查(正确性→安全性→边界条件→可重复性→性能→风格),然后用Ruff和pytest做自动化检查。对于生信代码,我特别关注随机种子、路径参数化和日志记录。最终代码是AI和我共同的产出,但架构和质量由我把控。
Q3:Vibe Coding有什么局限性?¶
答: 主要三个局限: 1. 理解门槛不变:你还是需要能读懂代码才能审查,否则AI的Bug你发现不了 2. 架构能力要求更高:AI不擅长全局架构设计,你需要自己规划模块划分和接口 3. 非确定性:同样的prompt给AI两次,可能生成不同的代码。需要通过测试和版本控制来保证一致性
另外在面试和考试中不能依赖AI,平时用AI提高效率,但核心编程能力还是要自己掌握。
Q4:怎么避免Vibe Coding带来的代码质量问题?¶
答: 我的做法是建立"信任但验证"的流程: 1. 写测试:对AI生成的关键函数写pytest测试,用已知结果验证 2. 代码检查:用Ruff自动检查风格和常见问题 3. Git版本控制:每个AI生成的代码提交都标注,方便追溯 4. 同行审查:重要代码还是需要人工审查 5. 渐进式生成:不让AI一次写太多,逐模块生成并验证
Q5:你能不用AI写代码吗?¶
答: 当然可以。AI是工具不是依赖。我的核心编程能力(Python数据处理、统计分析、Linux命令行操作)是扎实的。平时用AI是为了提高效率,比如快速生成样板代码和处理不熟悉的库。面试中手写代码、白板算法我都能做。重要的是理解原理,AI只是加速实现的工具。
九、速查表¶
Vibe Coding工作流速查¶
1. 描述需求(明确输入/输出/方法/规范)
↓
2. AI生成代码
↓
3. 审查代码(正确性 > 安全性 > 边界 > 性能 > 风格)
↓
4. 运行测试(pytest + 已知结果验证)
↓
5. 迭代修复(把问题反馈给AI → 重新生成 → 再审查)
↓
6. 代码检查(ruff check + black)
↓
7. 提交版本控制(git commit)
需求描述模板¶
请帮我写一个[语言]脚本,功能如下:
- 输入:[格式]格式的[描述](字段说明:...)
- 处理:[具体分析方法/算法]
- 输出:[格式]格式的[描述]
- 要求:
* argparse传参(不硬编码路径)
* 随机种子=[数字]
* logging日志记录
* 每行加中文注释
* 处理边界情况:[列举]
审查清单速查¶
[ ] 核心算法/公式正确
[ ] 输入数据有校验
[ ] 边界条件已处理(空值、零值、极端值)
[ ] 路径参数化(无硬编码)
[ ] 随机种子已设置
[ ] logging替代print
[ ] 异常处理(try-except)
[ ] 变量命名清晰
[ ] 有docstring文档
[ ] 性能可接受(大数据不溢出)
工具速查¶
| 工具 | 类型 | 最适合场景 |
|---|---|---|
| Claude Code | CLI | 终端爱好者,复杂项目 |
| OpenCode | CLI | 开源替代品 |
| Cursor | IDE | 图形界面,日常开发 |
| GitHub Copilot | 插件 | 行级补全,VSCode用户 |
| Aider | CLI | 开源,灵活选择模型 |
十、延伸资源¶
- Andrej Karpathy原文:搜索 "Andrej Karpathy vibe coding" X/Twitter帖子(2025年2月)
- Wikipedia: Vibe coding:https://en.wikipedia.org/wiki/Vibe_coding
- Claude Code文档:https://docs.anthropic.com/en/docs/claude-code
- OpenCode项目:https://github.com/anomalyco/opencode
- Cursor官网:https://cursor.com/
- Aider项目:https://aider.chat/
- 《The Pragmatic Programmer》:程序员修炼之道,关于编程方法论的经典
- pytest文档:https://docs.pytest.org/(Vibe Coding必备的测试框架)