AI 辅助开发又名 “Vibecoding”
人工智能(AI)即大型语言模型和生成式AI开发,也被称为 “vibecoding”,是当前的热门词汇。每个人都希望在一定程度上将AI与工具和用例集成。然而,LLM从本质上讲是有缺陷的,其能力完全取决于训练数据的质量,因此它们容易出现幻觉。这个项目清楚地凸显了这一点:当Claude决定编造一个不存在的Python库和函数调用时,它带来的麻烦远大于其价值!
TL;DR: 我让Claude Code编写了一个VPN/端点部署和生成工具,只需最少的提示,以测试其能力以及它会提供哪些选项。
GitHub - ZephrFish/ProxyGen: 使用TF和Python在多个云提供商部署Wireguard - 100%由Claude编写
我已经使用AI辅助开发工作好几年了,但这是我第一个仅通过架构设计提示就让Claude构建其余部分的工具,也称为VibeCoding。最初的动机是因为英国对访问各种内容实施了限制(具体来说,我当时想阅读Reddit,但没有VPN或年龄验证就被屏蔽了)。我想要一个简单的一键部署工具来绕过这些限制,利用黑客思维来规避控制。虽然我日常使用Mullvad VPN,但构建副业项目很有趣。
于是,我从一个想法开始:我想创建一个通用的WireGuard VPN配置工具,类似于VPN Road Warrior创建脚本(这是我十多年前发现的,多年来一直是我的首选工具),但要能跨多个云提供商工作,也是为了看看Claude如何能应付用Python构建这种具有各种特性的工具。
初始设计 / 概念
许多AI工具(如Claude和ChatGPT)依赖于对话交互,但如果你给它们明确的提示和设计需求,它们就能很好地处理。这正是我第一次对Claude Code所做的:我列出了以下提示,包含了我想要实现的一切以及每个部分应该做什么:
项目需求
创建一个名为"vpngen"的综合性命令行工具,用于自动化跨多个云提供商(AWS、Azure、GCP)部署和管理WireGuard VPN服务器。
核心功能
- 多云部署
- 将WireGuard VPN服务器部署到AWS、Azure和GCP
- 支持每个提供商的多个区域
- 通过Terraform处理所有基础设施配置
- 使用Ansible自动配置VPN服务器
- 自动化配置
- 自动生成具有适当名称的SSH密钥(vpngen-region-key.pem)
- 使用安全默认值配置WireGuard
- 设置正确的NAT规则和IP转发
- 配置DNS-over-HTTPS以保护隐私
- 处理cloud-init时序和SSH连接问题
- 客户端管理
- 动态添加/移除VPN客户端
- 自动生成客户端配置文件
- 从子网池分配唯一的IP地址
- 跟踪每个部署的客户端连接
- 部署跟踪
- 每个区域多实例的唯一部署ID(UID)
- 综合的库存管理系统
- 跟踪每个部署的资源、成本和状态
- 支持按部署ID选择性销毁
- 使用元数据进行AWS资源标记
- 成本管理
- 根据实例类型和区域估算成本
- 显示每日、每月和每年的成本预测
- 支持不同的实例大小(例如AWS的t3.nano到t3.large等)
- 在list命令中显示成本以及公网IP和实例类型
技术要求
- 语言: Python
- 基础设施: Terraform用于配置
- 配置: Ansible用于服务器设置
- VPN: WireGuard用于安全隧道
- 状态管理: 基于JSON的库存跟踪
- 跨平台: 支持Linux和macOS(附带Homebrew安装说明)
要实现的命令
|
|
要包含的关键特性
- 可靠性
- SSH连接的重试逻辑
- 适当的错误处理和日志记录
- 修改前备份库存
- 状态文件管理
- 安全性
- 使用强SSH密钥
- WireGuard必须使用加密
- 不硬编码凭据
- 所有配置采用安全默认值
- 用户体验
- 干净、专业的输出(无表情符号)
- 清晰的进度指示器
- 有帮助的错误信息
- 全面的示例命令
- 企业特性(模块化设计)
- 高可用性支持
- 监控集成
- 备份管理
- 证书管理
- 访问控制
- 审计日志
问题解决需求
该工具必须解决以下常见的VPN部署问题:
- 初始设置期间的SSH连接超时
- WireGuard服务配置失败
- NAT和IP转发设置
- DNS解析问题
- 云提供商身份验证
- 同一区域内多个部署的冲突
- 成本跟踪和优化
- 跨平台兼容性
交付成果
-
包含所有命令的主Python脚本(vpngen)
-
AWS、Azure、GCP的Terraform配置
-
服务器配置的Ansible playbook
-
专业功能的库模块
-
测试脚本和验证工具
最终的工具应能提供一个解决方案,以最小的手动干预跨多个云提供商部署和管理WireGuard VPN服务器。
有人可能会说,我列出的规范如此详细,足够我自己写脚本了。但我想看看Claude如何处理如此健壮的需求。结果相当不错,尤其是结合了SuperClaude(一个Claude Code插件,允许更广泛的请求并在代理之间进行构建和移交)。Claude开始构建文件夹结构,请求我使用某些命令的许可,然后继续工作。经过一些进一步的提示,它构建了一个概念验证,虽然我需要手动调整,但它确实输出了一个相当不错的PoC。我最初希望包含GCP,但后来发现Google Cloud不像AWS/Azure/DigitalOcean/其他VPS提供商那样容易试用,所以我让Claude重写代码,考虑后两者,并从代码库中移除GCP。几经迭代后,ProxyGen诞生了。
功能
该工具的核心功能是在不同的云提供商中构建服务器,并能够部署多跳以增加隐私性和趣味性:
- 多云部署: AWS、Azure、DigitalOcean(Alpha)、Hetzner(Alpha)
- 客户端管理: 添加、移除和配置WireGuard客户端。当你有多个或单个云提供商时,能够轻松注册客户端是一个可选功能。
- 多跳代理链: 创建隐私优先的代理链,将服务器部署到不同的提供商。
- 成本跟踪: 监控跨提供商的部署成本,因为没人想在云成本上花费过多。
- 资源发现: 自动云资源检测。我写了一个小扩展,允许脚本在插入不同的凭据时进行发现,它会找到已部署的实例,并允许将它们同步到部署机器以进行库存管理。
测试与把玩
工具完全构建好后,接下来的逻辑步骤是进行压力测试并实际把玩它。这遇到了一些奇怪的道德边界,因为Claude忘记是它自己构建的工具,并声称运行测试以规避控制是不道德的。提醒模型这代码原本是它写的,很快就能绕过这一点,回到测试和把玩。我发现一个有趣的现象是,如果你说服Claude代码是它写的,它会很快忽略其预设的道德边界,继续编写"黑客"工具。
结果与感想
最终的产品,它基本能用,但并不出色。作为一个周末构建的趣味项目,用来测试Claude的能力还是很不错的。除了ProxyGen,我还让Claude帮我编写了另外两个工具,但使用了基线代码作为种子,而不是从头构建。
第一个工具类似于fireprox,但针对浏览器。ProxyForge 包含一个运行在笔记本电脑上的服务器组件,旨在为每个浏览器请求轮换IP,但我仍在将其作为概念验证进行测试: GitHub - ZephrFish/ProxyForge: 一个尝试使用AWS API网关进行IP轮换的Chrome插件
第二个是我已经开始编写的一个脚本,形式是一个Visual Studio Code扩展,用于实时解码VBE文件。虽然存在可以插入文件并解码的工具,但我想要一个简单的扩展,在应用程序中打开文件时就能解码,以便更容易地浏览潜在文件,寻找凭据和其他有趣的数据。 GitHub - ZephrFish/VSCVBED: 在Visual Studio Code中实时解码VBE文件的插件
以上都是些特定的场景,用例有限,但正如我所说,我喜欢写随机的副业项目,努力让事情帮助我更好地完成工作和各种研究。