跳转至

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 CodeCLI代理终端中直接操作文件、运行命令按token计费
OpenCodeCLI代理开源的Claude Code替代品自带API Key
CursorAI IDEVSCode魔改版,内置AI$20/月(Pro)
GitHub CopilotIDE插件行级补全+聊天$10/月(个人)
WindsurfAI IDE全文件级AI编辑免费+付费
AiderCLI代理开源,支持多种模型免费(需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:迭代修复

给AI的修改prompt:
请在main函数中添加try-except异常处理,捕获文件不存在和格式错误的情况。
另外添加一个--seed命令行参数,默认值42。

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 CodeCLI终端爱好者,复杂项目
OpenCodeCLI开源替代品
CursorIDE图形界面,日常开发
GitHub Copilot插件行级补全,VSCode用户
AiderCLI开源,灵活选择模型

十、延伸资源

  • 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必备的测试框架)