当“氛围编程”不再是网红概念

Vibe Coding这个词,最近在开发者圈子里火得不行。

2025年2月,Andrej Karpathy提出这个概念时,很多人以为这只是又一个“AI要取代程序员”的炒作噱头。但到了2026年,事情起了变化——Vibe Coding不仅没有被遗忘,反而催生出了更成熟的Agentic Engineering范式,甚至被《柯林斯英语词典》评为2025年度词汇。

作为一个写了快十年Python的老码农,我一开始对Vibe Coding是持怀疑态度的。代码就是代码,什么“跟着感觉走,忽略代码本身”?这不就是鼓励生产垃圾吗?

但真用了AiPy做了一周实践之后,我承认:Vibe Coding的真正价值,不在于“让你不用写代码”,而在于“让你用更短的时间验证想法”。它最适合的场景是:把一个想法从0推到0.7——快速原型、个人工具、MVP验证。

这篇文章我会完整记录我用AiPy做的三个工具,重点拆解Vibe Coding的技术原理、Prompt工程要点、以及生产环境落地时的坑。代码全部可复现,适合对AI编程范式感兴趣的开发者。

一、Vibe Coding的技术本质:不止是“聊天写代码”

先厘清一个概念问题。

很多人把Vibe Coding理解成“对着AI说需求,AI就把代码吐出来”。这是表象。真正的技术本质是:自然语言 → 结构化需求 → 代码生成 → 自动执行 → 反馈修正的闭环系统。

我把这个闭环拆解成三层:

层级 功能 技术实现
需求解析层 将模糊描述转为结构化任务 NLP + 意图识别
代码生成层 根据任务生成可执行代码 Code LLM(如CodeLlama、DeepSeek-Coder等)
反馈优化层 捕获运行错误,自动修正 错误日志解析 + 代码自愈

AiPy在这个架构中的位置:它不像Cursor那样只做代码补全,也不像Claude Code那样只在终端里生成代码。它走的是“Agentic”路线——自己写代码、自己跑、自己读报错、自己改,直到任务完成为止。这才是它和普通AI编程助手的本质区别。

换一种说法,这叫“代码即代理”(Code is Agent)。

二、实战一:简历生成器——从“做一个简历工具”到可运行的Web应用

2.1 需求与Prompt设计

第一个项目,我想做一个简历生成器。需求很简单:用户填表单,生成PDF简历。

这是我最开始给AiPy的prompt,直接复制原文

“我需要做一个简历生成器web应用,功能要求:提供一个表单让用户填写简历信息,包括基本信息(姓名、电话、邮箱、求职意向)、教育经历(学校、专业、学历、起止时间)、工作经历(公司名称、职位、起止时间、工作描述)、项目经验(项目名称、扮演角色、起止时间、项目描述)、技能清单。用户填写完之后,可以预览简历效果,点击生成按钮,导出一份排版精美的PDF简历。界面要简洁美观,现代化设计。使用Python Flask后端,前端用简单的HTML+CSS+JavaScript就可以。”

2.2 AiPy的响应过程

AiPy收到这个需求后,做了一系列自动化操作:

  1. 需求拆解:自动识别出“表单输入”、“实时预览”、“PDF导出”三个核心模块

  2. 技术选型:选择了Flask + ReportLab(PDF生成库)的技术栈

  3. 代码生成:一次性创建了完整的项目结构:

text

resume-generator/
├── app.py                  # Flask后端主文件
├── templates/
│   ├── index.html          # 表单页面
│   └── preview.html        # 预览页面
├── static/
│   └── css/
│       └── style.css       # 样式文件
└── utils/
    └── resume_generator.py # PDF生成工具类

2.3 核心代码解析(AiPy自动生成)

PDF生成的核心逻辑在resume_generator.py里,使用了ReportLab库:

python

from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

class ResumeGenerator:
    def __init__(self, template_type='classic'):
        self.template_type = template_type
        # 注册中文字体,解决中文乱码
        pdfmetrics.registerFont(TTFont('SimHei', 'SimHei.ttf'))

    def generate_pdf(self, data, output_path):
        c = canvas.Canvas(output_path, pagesize=A4)
        width, height = A4

        # 姓名 - 大标题
        c.setFont('SimHei', 24)
        c.drawString(50, height - 50, data.get('name', '未命名简历'))

        # 基本信息
        c.setFont('SimHei', 12)
        y = height - 80
        info = f"{data.get('phone', '')} | {data.get('email', '')} | {data.get('intention', '')}"
        c.drawString(50, y, info)

        # 教育经历
        y -= 40
        c.setFont('SimHei', 16)
        c.drawString(50, y, '教育经历')
        for edu in data.get('educations', []):
            y -= 25
            c.setFont('SimHei', 12)
            c.drawString(70, y, f"{edu.get('school')} - {edu.get('major')} ({edu.get('period')})")

        # ... 工作经历、项目经验等模块类似

        c.save()

2.4 迭代优化:Vibe Coding的闭环价值

第一版出来后,我发现中文显示有问题(乱码),PDF排版也不够紧凑。我只说了一句话:

“生成PDF的时候中文显示有问题,乱码了,帮我修复一下,另外简历排版能不能更紧凑一点,一页纸最好。”

AiPy自动做了两件事:

  1. 把字体从默认英文字体换成了SimHei,并注册到ReportLab

  2. 调整了各模块的y坐标间距,从30缩减到25

整个迭代过程不到5分钟。这就是Vibe Coding的核心优势:你不需要去翻ReportLab的文档,不需要自己去调字体注册的坑,AI帮你踩了

三、实战二:图片滤镜工具——像素级处理的Vibe实现

3.1 Prompt设计

第二个项目稍微进阶一点。我想要一个纯前端的图片滤镜工具:

“我需要做一个批量图片处理工具,可以给上传的图片添加各种滤镜效果。功能要求:网页界面,方便使用,不用安装客户端。支持多张图片同时上传。提供多种滤镜效果可选,比如黑白、复古、模糊、锐化、冷暖色调调整、浮雕等等。用户可以预览添加滤镜后的效果。处理完之后可以把所有图片打包成ZIP一键下载。使用Python Flask做后端,图像处理用Pillow库就行。”

3.2 AiPy生成的滤镜算法核心

注意,AiPy并没有用第三方滤镜库,而是直接用Pillow的像素级操作实现了多种效果。以下是自动生成的灰度滤镜算法:

python

from PIL import Image, ImageFilter, ImageEnhance

def apply_grayscale(img):
    """加权灰度算法,符合人眼感知"""
    pixels = img.load()
    for i in range(img.width):
        for j in range(img.height):
            r, g, b = pixels[i, j][:3]
            gray = int(0.299 * r + 0.587 * g + 0.114 * b)
            pixels[i, j] = (gray, gray, gray)
    return img

def apply_sepia(img):
    """复古棕褐色滤镜"""
    pixels = img.load()
    for i in range(img.width):
        for j in range(img.height):
            r, g, b = pixels[i, j][:3]
            tr = int(0.393 * r + 0.769 * g + 0.189 * b)
            tg = int(0.349 * r + 0.686 * g + 0.168 * b)
            tb = int(0.272 * r + 0.534 * g + 0.131 * b)
            pixels[i, j] = (min(255, tr), min(255, tg), min(255, tb))
    return img

这段代码的亮点在于:灰度算法用的是标准的人眼感知加权系数(0.299、0.587、0.114),而不是简单的RGB取平均。这是ReportLab等专业图像处理库的常用做法,AiPy在生成代码时直接沿用了这个标准算法。

3.3 踩坑:大图片处理超时

实际测试时,一个用户上传了4K分辨率的图片,处理时前端卡死了。

我把错误反馈给AiPy:

“大图片上传很慢,处理的时候浏览器卡死了,能不能自动压缩一下图片尺寸?”

AiPy自动添加了压缩逻辑:

python

def compress_image(img, max_size=2048):
    """等比压缩图片到指定最大尺寸"""
    width, height = img.size
    if max(width, height) <= max_size:
        return img
    ratio = max_size / max(width, height)
    new_size = (int(width * ratio), int(height * ratio))
    return img.resize(new_size, Image.Resampling.LANCZOS)

这个自动压缩逻辑用的是LANCZOS重采样算法,是PIL库中质量最高的缩放算法。如果是手动写这个功能,我得去翻PIL文档查参数名。Vibe Coding在这里的价值是:把“我需要什么效果”直接翻译成了“用什么算法实现”

四、实战三:简历筛选器——当Vibe Coding遇到业务逻辑

3.1 业务需求

第三个项目来自HR朋友的痛点:收到上百份简历,逐个翻看太累。

“我需要做一个简历筛选工具,针对HR批量筛选简历的场景。功能要求:用户上传PDF简历(支持批量),输入筛选关键词(比如‘Python’、‘3年经验’),工具自动提取每个简历中的关键词匹配情况,输出一份排序后的筛选结果表格,高分优先。”

3.2 核心算法:匹配度评分

AiPy生成的评分算法是这样的:

javascript

function calculateScore(candidate, criteria) {
    let totalScore = 0;
    let totalWeight = 0;

    // 工作年限评分
    if (criteria.minYears) {
        const yearsScore = Math.min(100,
            (candidate.yearsOfExperience / criteria.minYears) * 100);
        totalScore += yearsScore * criteria.weights.years;
        totalWeight += criteria.weights.years;
    }

    // 技能匹配评分
    if (criteria.skills && criteria.skills.length > 0) {
        const matchedSkills = criteria.skills.filter(skill =>
            candidate.skills.toLowerCase().includes(skill.toLowerCase())
        );
        const skillsScore = (matchedSkills.length / criteria.skills.length) * 100;
        totalScore += skillsScore * criteria.weights.skills;
        totalWeight += criteria.weights.skills;
    }

    return totalWeight > 0 ? (totalScore / totalWeight).toFixed(1) : 0;
}

这个评分逻辑虽然简单,但完全满足HR的需求:多维度加权,自动排序,高分高亮。

3.3 Vibe Coding vs 传统开发:效率对比

这个项目如果让我手动写,估算时间:

环节 手动开发 Vibe Coding (AiPy)
需求分析 30分钟 5分钟(描述需求)
技术选型 20分钟 AI自动完成
代码编写 4-6小时 AI生成,约2分钟
调试Bug 1-2小时 AI自动修正
迭代优化 视情况 一句话完成
总计 6-9小时 约30分钟

当然,这个对比的前提是:需求相对明确、复杂度可控。如果项目涉及到分布式系统、高并发、复杂的业务规则,Vibe Coding的适用性就会大打折扣。

五、技术反思:Vibe Coding的边界在哪里?

做完这三个项目,我对Vibe Coding有了更清醒的认知。它确实能大幅提升效率,但也有明确的边界。

5.1 Vibe Coding适合什么?

根据我的实践,以及社区多位CTO的反馈,Vibe Coding最适用的场景是:

  • 个人工具开发:文件重命名、数据清洗、定时任务等

  • 创意原型验证:快速验证产品想法,MVP搭建

  • 非程序员自助开发:运营、HR、产品经理等角色的自助工具

  • 一次性脚本:临时需求,用完即弃

这些场景的共同特征是:需求明确、生命周期短、不需要长期维护

5.2 Vibe Coding不适合什么?

从技术边界来看:

  • 需求模糊:如果用户说“做一个好看的网站”,AI无法生成有效代码

  • 复杂逻辑:涉及多模块协作、状态管理、性能优化的大项目

  • 生产级系统:缺乏版本控制、测试覆盖、安全审查,上线后风险极高

CTO们的共识是:Vibe Coding适合把想法从0推到0.7,但0.7到1.0需要人工接手

5.3 从Vibe Coding到Vibe Engineering

值得关注的是,2026年的行业趋势已经从Vibe Coding演进到了Vibe Engineering。两者的核心区别是:

维度 Vibe Coding Vibe Engineering
方法 直觉驱动,反复调整Prompt 规范驱动,强调架构约束
结果 0→1极速爆发,易产生屎山 规模化交付,长期可维护
角色 单人“提示-粘贴-祈祷”模式 团队协作,规范先行

简单说,Vibe Engineering = Vibe Coding + Spec-Driven Development。先写规范文档(Spec),再让AI在规范的护栏内生成代码。

小结:Vibe Coding,不是银弹,但也不是玩具

一周的实践下来,我对Vibe Coding的态度从“怀疑”变成了“审慎乐观”。

它确实能大幅提升原型开发速度,让非技术人员也能拥有“造工具”的能力。但我也清楚它的边界:它是原型利器,但不是生产级系统的答案

如果你问我:Vibe Coding会取代程序员吗?

我会引用Fastly那份调查的结论:95%的开发者需要额外花时间修改AI代码,而这些修复工作最终落在了资深工程师身上。AI没有取代程序员,只是让程序员多了一个“AI保姆”的身份。Vibe Coding真正改变的,是开发者的工作方式——从“写代码”变成了“指挥代码生成”。

而像AiPy这种“代码即代理”的工具,让我看到了Agentic Engineering的一种落地形态:自己能写、自己能跑、自己能修。这种能力,至少在原型开发这个场景里,是真的能打。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐