GPT-6 来了,朋友圈里讨论最多的已经不是它能写多长文章、画多好看的图,而是它能不能直接帮我搭一个能用的网站。我花了一个周末完整实测了一轮:从环境安装、模型接入,到用自然语言把一套带登录、数据库和增删改查的轻量级 CRM 网站跑起来,最后部署上线拿到公网地址,真正写业务代码的时间其实很短,大部分时间都花在环境配置和排坑上。今天这篇文章就把完整过程摊开讲,想自己动手的可以直接照着做,遇到报错也能在文末找到对应排查方法。
先说明白一个容易被误解的点:GPT-6 这代模型真正强的不是聊天,而是“多文件协作、长上下文、工具执行”这三件事。它能读你项目目录里的文件、改代码、执行终端命令、自己看报错日志。你要做的更像产品经理加验收员——把需求说清楚,给出约束条件,最后检查它改出来的东西。整个流程用下来,我对“AI 编程是不是噱头”这件事的看法变了不少,下面进入正题。
1. 先说清楚:GPT-6 到底是什么,以及我们要做什么网站
1.1 这次发布解决了什么痛点
以前用 AI 写代码,最常见的工作流是:在网页对话框里让它生成一段代码,复制到本地,跑不通再复制报错回去问,来回折腾。遇到项目有多个文件时,它就经常犯迷糊,改 A 文件忘了 B 文件引用,或者生成的代码和你的本地环境完全对不上。
GPT-6 的思路换成了“项目级协作”。它不再是无状态的一次性对话,而是绑定你的工作目录,能在你指定的文件夹里创建文件、读取已有代码、安装依赖、运行命令,甚至按你的指示完成一次完整的调试循环。这意味着你可以把整个项目“外包”给一个住在本地终端里的 AI 助手,而它对你的项目结构是有记忆的。
这代模型还有一个很实际的变化:对既有技术的掌握更扎实了,工具调用也更稳定。我用它写 SQLite 表结构、Flask 路由、前端 fetch 请求时,几乎没有出现“这个函数不存在”的幻觉式代码。只要你给它具体的技术栈约束,它给出的方案基本是真能跑的。
1.2 目标拆解:从零到上线一个“够用”的网站
为了演示完整流程,我们这次做一个小而全的网站:轻量级客户管理 CRM。功能清单如下:
- 注册和登录,密码不能明文存储。
- 登录后能看到客户列表。
- 支持新增客户、编辑客户、删除客户。
- 支持按客户名称或公司关键词搜索。
- 首页有一个简单的统计面板,显示客户总数和本月新增数量。
为什么选 CRM 而不是个人博客?原因很简单:博客类网站大多数时候是静态页面,缺少状态管理和数据交互,练手价值不够。CRM 覆盖了 Web 开发最常见的“增删改查 + 登录认证 + 搜索过滤”,做完之后是真的可以给平时的工作用的,比如管理自己的客户、记录跟进状态,比做一个泛泛的演示页有意义得多。
技术栈定为:后端 Flask,数据库 SQLite,前端原生 HTML/CSS/JavaScript,模板渲染用 Jinja2。有人可能会问,为什么不用 React 或 Vue?因为我希望这套案例对环境要求最低,跑起来的依赖最少,而且 GPT-6 在简单技术上生成的代码出错率更低。等你把基础流程跑通,再让它帮你升级成前后端分离也不迟。
2. 环境安装与基础配置
2.1 先用这五个工具搭好底座
开始之前,先把这套项目会用到的基础工具装齐。我的习惯是先把环境弄干净,再碰 AI 助手,否则后面报错很难分辨是模型生成的问题还是本机环境的问题。
| 工具 | 建议版本 | 用途 |
|---|---|---|
| Python | 3.11 或 3.12 | 后端 Flask 和脚本运行环境 |
| Git | 2.40 以上 | 代码版本管理,方便随时回滚 AI 改坏的代码 |
| Node.js | 20 LTS 以上 | 运行 GPT-6 的 CLI 客户端 |
| VS Code | 最新稳定版 | 看代码、改配置、配合 AI 调整文件 |
| 终端 | Windows Terminal / iTerm2 | 执行命令和运行服务 |
Python 是整个项目的核心运行时,Git 是安全网,Node.js 是 GPT-6 客户端运行的底座。VS Code 不是必须的,但你总会需要一眼看清 AI 生成了什么文件,有一个编辑器会舒服很多。
2.2 安装细节与踩坑提醒
Python 在 Windows 上安装时,第一件事是把“Add Python to PATH”勾上。这一步漏掉的话,后面在终端敲 python 会提示找不到命令。装完打开终端验证:python --version,能显示版本号就说明没问题。如果装了多个 Python 版本,Windows 上可以用 py -3.11 指定版本,避免环境错乱。
Git 安装时,在换行符处理那一步建议选择“Checkout as-is, commit as-is”,这样跨平台协作时不会因为换行符差别导致一整个文件显示成修改状态。装完同样验证一下 git --version。
Node.js 直接下 LTS 版本,别追 Current,稳定性优先。装完验证 node -v 和 npm -v。
最后在 VS Code 里装上 Python、Live Server 两个插件。Live Server 用来预览前端页面,在写静态页面调试时会用上。不要装一堆用不到的插件,环境越简单越不容易出问题。
提示:如果你之前装过 Python 或 Node,版本又比较老,建议先卸载干净再装新版,避免 PATH 里有多个残留入口导致终端里执行的不是你以为的那个版本。这个坑我踩过,一次
pip install装到了旧版 Python 里,排查了半小时。
2.3 把镜像源配好,省下一大半时间
这一步很多人会忽略,但实际体验差别特别大。默认的 Python 包下载源和 npm 源在国外,装 Flask、装 CLI 工具时经常出现速度极慢或者直接超时。我建议一开始就把镜像源配上。
Python 执行:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplenpm 执行:
npm config set registry https://registry.npmmirror.com配完之后,pip install flask这类安装基本是秒级完成。镜像源只是把下载地址换成国内同步节点,包的版本和内容不会有差别,可以放心用。如果你在公司内网,也可以用自己公司的私有源,本质上是一回事。
3. 安装 GPT-6 客户端并把模型接进来
3.1 理清安装对象:模型、API、客户端
很多人一上来就搜“GPT-6 安装包”,这是个误区。模型本身跑在服务端,你本地要装的是客户端,官方一般提供两类:一类是网页版对话入口,一类是 CLI 命令行工具。我们要做项目实操,肯定选 CLI。
CLI 的作用是给你一个终端里的入口,它负责把你在本地文件上的操作意图转成 API 请求,再把模型的代码修改结果写回你的项目目录。有点像一个派驻在你电脑里的 AI 员工,既能听你布置任务,也能直接动手改文件。
3.2 三步完成接入
第一步,拿到 API 密钥。登录模型平台的开发者后台,创建一个新的 API Key。创建之后只显示一次,一定先复制保存,后面配置要用。注意 API Key 等同于密码,不要截图发群里,也不要提交到 Git 仓库。
第二步,安装官方 CLI 工具。工具包名以你拿到的官方文档为准,一般形式是:
npm install -g gpt6-cli安装完成后,用一个全局命令验证是否装好:
gpt6 --version如果提示找不到命令,检查 Node.js 的全局 bin 目录是否在 PATH 里。Windows 下一般是%APPDATA%\npm,macOS 和 Linux 下通常是/usr/local/bin。
第三步,配置环境变量,让 CLI 知道你的身份。在终端里执行:
export GPT6_API_KEY=sk-你的密钥但这样每次开新终端都得重新设置,我更建议写进当前 shell 的配置文件中。Linux/macOS 写入~/.bashrc或~/.zshrc,Windows 可以用系统环境变量面板加一条。加完之后新开终端确认一下:
echo $GPT6_API_KEY能打印出你设置的密钥就说明配置成功。注意 Windows 上如果是在环境变量面板里加的,需要让所有终端窗口重新打开,否则读不到。
3.3 初始化项目目录
接入完成后,给这个项目建一个文件夹:
mkdir customer-crm && cd customer-crm gpt6 initgpt6 init会在当前目录生成一个类似CONVENTIONS.md或AGENTS.md的项目说明文件。这个文件很重要,我强烈建议编辑它,把项目的目标、技术栈、目录结构约定写进去。GPT-6 每次开工前都会先读这个文件,等于你给了它一份“工作守则”。
我的项目守则示例:
# 项目说明 - 这是一个轻量级客户管理 CRM。 - 后端:Flask + SQLite,数据库文件放在 data/app.db。 - 前端:Jinja2 模板 + 原生 CSS/JS,不引入前端框架。 - 运行方式:python app.py,默认端口 5000。 - 涉及用户密码必须使用 werkzeug.security 哈希存储。把这个文件写清楚,等于给 AI 划出了边界。后面你会发现,边界越清晰,它生成的东西越符合预期,反复返工的概率大幅下降。
4. 需求转设计:让 AI 先给你靠谱方案
4.1 用提示词把需求说清楚
不会写提示词,是很多人用 AI 编程效果差的核心原因。一个模糊的“帮我做个 CRM 网站”和一份结构化的需求描述,得到的结果天差地别。我建议提示词至少包含五个要素:目标、功能列表、技术约束、运行方式、验收标准。
我当时给 GPT-6 的第一条指令是这样的:
请帮我规划一个轻量级客户管理 CRM。 目标:让一个个体用户能登录后管理自己的客户信息。 功能列表: 1. 登录和注册。 2. 登录后展示客户列表。 3. 支持新增、编辑、删除客户。 4. 支持按客户名称或公司关键词搜索。 5. 首页显示客户总数和本月新增客户数。 技术约束: - 后端用 Flask,数据库用 SQLite,ORM 不用,直接写 SQL 或 flask-sqlalchemy 选一个。 - 前端用 Jinja2 模板 + 原生 CSS/JavaScript。 - 用户密码必须用哈希存储。 - 不要引入额外重型依赖。 运行方式:python app.py 后访问 http://localhost:5000。 请先给出项目结构、数据表设计和 API 列表,再开始写代码。这算是一个标准的好提示词模板。它限制了技术选型,给出了功能边界,最后还要求先见方案再动手,避免 AI 一上来就呼啦呼啦生成一堆文件,结果方案方向根本不对。
4.2 让 AI 先出设计再写码
这一步是我强烈建议不要跳过的。你让 GPT-6 先给设计,它通常会返回这样几块内容:
- 目录结构:app.py、templates 文件夹、static 文件夹、data 文件夹、requirements.txt。
- 数据表设计:users 表存用户,customers 表存客户信息,两个表都带时间戳字段。
- 接口设计:注册接口、登录接口、增删改查接口,以及对应的 HTTP 方法和路径。
拿到设计稿后,你花两分钟看懂,确认没有遗漏需求,再让它按这个设计开始写。这个过程等价于你作为技术负责人先评审了技术方案,比直接看代码要高效得多。方案本身有争议时,也可以在这一步提出——比如你觉得搜索功能应该支持模糊查询,直接说“customers 的 name 和 company 字段搜索时用 LIKE 模糊匹配”,它就会落进后面的实现里。
4.3 明确验收标准,防止 AI 无限改
如果你只丢一句“完成后告诉我”,AI 很可能闷头生成一堆代码,然后告诉你“写好了”。等你一跑,发现页面样式没有,数据表没建,登录逻辑错误。原因不是你做错了什么,而是验收标准不明确。
我建议在需求里加上一句运行和验收描述:
代码完成后,我需要执行以下步骤验证: 1. python -m venv venv && source venv/bin/activate 2. pip install -r requirements.txt 3. python app.py 4. 浏览器访问 http://localhost:5000 5. 注册一个账号、登录、新增一条客户记录、搜索该客户、删除该客户。 请确保以上步骤可以完整走通,并告知我默认登录地址。这样 AI 就有了明确的完成定义。后面它自行修改代码时,也会优先保证这组操作链路可用,而不是只顾某个页面的美观。
5. 实战:开发一个能用的 CRM 网站
5.1 一步步生成后端服务
设计确认后,我给 GPT-6 下发下一步指令:“请按上述设计开始实现后端,先创建 app.py、requirements.txt,并初始化 SQLite 数据库。”
它生成的核心代码大概是这个结构:
from flask import Flask, render_template, request, redirect, url_for, session, flash from flask_sqlalchemy import SQLAlchemy from werkzeug.security import generate_password_hash, check_password_hash from datetime import datetime, date app = Flask(__name__) app.secret_key = "please-change-me" app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.join( os.path.abspath(os.path.dirname(__file__)), "data", "app.db" ) db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) password_hash = db.Column(db.String(200), nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) class Customer(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) name = db.Column(db.String(120), nullable=False) company = db.Column(db.String(120)) phone = db.Column(db.String(50)) email = db.Column(db.String(120)) note = db.Column(db.Text) created_at = db.Column(db.DateTime, default=datetime.utcnow)这里有两个细节值得注意。
第一,密码哈希是通过werkzeug.security处理的,库里面存的永远是哈希值,不是明文。这样即使数据库文件泄露,用户的密码也不会直接暴露。
第二,数据库连接路径里指定了 data 目录下的 app.db,但我提前让 GPT-6 在 app.py 里加了一段初始化逻辑:如果没有 data 目录就自动创建,然后调用db.create_all()建表。这样就不会出现“表不存在”的尴尬报错。
建议你在让 AI 写 SQLite 相关代码时,明确提醒它做两件事:一是自动创建目录,二是启动时检查并创建表。这两句话可以避免大部分新手第一次跑项目时遇到的 database 错误。
5.2 生成前端页面
后端主体代码生成完毕后,接着让 GPT-6 生成前端页面。我用的指令是:“创建 templates/login.html、register.html、index.html,以及 static/style.css。页面不需要复杂设计,但必须干净可用,表单要有基本校验。”
它生成的前端逻辑是:
- login.html 放登录表单,提交到
/login。 - register.html 放注册表单,提交到
/register。 - index.html 通过 Jinja2 渲染客户列表,表格上方放搜索框和新增表单,每个客户行带“编辑/删除”按钮。
- style.css 负责基础的布局和样式,让页面不至于像裸 HTML。
涉及增删改查操作时,我让删除按钮走一个小表单 POST 请求:
<form action="{{ url_for('delete_customer', customer_id=c.id) }}" method="post" style="display:inline;"> <button type="submit" onclick="return confirm('确定删除该客户吗?')">删除</button> </form>用 POST 而不是 GET 来处理删除操作,是我反复强调的安全习惯。GET 请求会被浏览器预加载、被搜索引擎爬虫抓取、被日志记录,用 GET 执行删除操作很容易造成误删,POST 配合确认弹窗才稳妥。
5.3 联调:让 GPT-6 自己修问题
第一版代码生成后,我按计划启动运行。第一次访问首页,发现注册成功后没有跳转,而是停留在空白页。我把现象发给 GPT-6:注册后 redirect 到首页但页面空白,打开浏览器控制台看到 500 错误。
它在分析了 app.py 代码后指出问题:注册成功后 session 里没有标记登录状态,导致 index 页面读取session["user_id"]时出异常。修复方式是注册成功后在 session 里写入用户 ID,然后再 redirect。
像这类“登录状态未设置”“变量命名不一致”“表单字段名不匹配”的问题,把上下文一次说清楚,GPT-6 基本都能直接定位修改。你要给的上下文包括:复现步骤、预期行为、实际行为、控制台报错文本,缺一不可。
5.4 加入登录与权限
为了让网站真正“能用”,还需要保证未登录用户不能访问客户列表。GPT-6 加了一个登录检查函数:
from functools import wraps def login_required(view): @wraps(view) def wrapped_view(*args, **kwargs): if "user_id" not in session: flash("请先登录") return redirect(url_for("login")) return view(*args, **kwargs) return wrapped_view然后在所有涉及客户操作的视图函数上加了@login_required装饰器。这个实现思路很清晰,也不需要引入 Flask-Login 之类的额外库。对于这样一个轻量级 CRM 来说,够用且不复杂。
如果你想让 AI 帮你做权限控制,只要在需求里说一句“未登录用户访问首页和客户操作时必须跳转到登录页”,它就明白该往哪个方向写了。
6. 本地测试与调试实录
6.1 跑通主流程的标准步骤
代码全部生成完,进入验证环节。按下面的顺序操作,可以保证整个主流程干净跑通:
cd customer-crm python -m venv venv source venv/bin/activate # Windows 上执行 venv\Scripts\activate pip install -r requirements.txt python app.py浏览器打开 http://localhost:5000,先访问注册页创建一个新账号,再登录,然后执行以下测试:
| 测试项 | 操作 | 预期结果 |
|---|---|---|
| 注册与密码安全 | 注册一个新用户 | 注册成功后能登录,数据库里密码字段是哈希值 |
| 登录与未登录跳转 | 退出登录后直接访问首页 | 自动跳转到登录页 |
| 新增客户 | 填写公司名称和联系人 | 列表中立即出现新客户 |
| 搜索客户 | 输入某个客户名称关键词 | 列表只显示匹配的客户 |
| 编辑客户 | 修改客户电话 | 刷新后显示新内容 |
| 删除客户 | 点击删除并确认 | 列表移除该条记录 |
我建议把这六项测试变成一张固定清单,每次 AI 改完代码就重跑一遍。因为 AI 修 A 问题时常会连带影响 B,回归测试是唯一能尽早发现问题的手段。
6.2 我踩过的三个典型报错
第一类,ModuleNotFoundError: No module named 'flask'。这个基本是虚拟环境没激活,或者 pip 装到了全局环境。解决办法:确认which python指向 venv 目录,再检查pip list里有没有 Flask。
第二类,端口被占用。Flask 默认跑 5000 端口,如果之前有程序占用,会报Address already in use。解决办法:换端口启动,或者找占用进程并结束。
python app.py --port 5001第三类,sqlite3.OperationalError: no such table: customer。这种情况通常发生在数据库文件创建失败,或初始化代码还没执行就调用了查询。我处理的方式是让 GPT-6 在启动时执行with app.app_context(): db.create_all(),并确保 data 目录自动创建。
6.3 给 AI 反馈的正确姿势
当报错出现时,不要只贴一句“有个 bug 帮我看看”。这个习惯会让 AI 的修复效率大幅下降,因为它的上下文不够。我常用的反馈模板是:
我执行了 python app.py,然后访问 http://localhost:5000/register。 预期是显示注册表单,但实际页面返回 500 错误。 浏览器控制台显示:TypeError: 'NoneType' object is not subscriptable。 日志完整内容如下: [paste logs] 请先定位原因,再给出修复代码。修复后告诉我我需要在本地重新执行哪些命令。把预期、实际、日志、操作步骤一次性给全,GPT-6 定位问题的准确率几乎翻倍。这一点对所有 AI 编程工具都适用,说白了就是让 AI 少猜,你少等。
7. 部署上线:从 localhost 到公网可访问
7.1 部署前先做这三件事
本地跑通只是第一步,真正“能用”意味着别人能通过公网访问。在把代码放到服务器之前,先把三件事处理好。
第一,修改app.secret_key。目前代码里写死了默认值,这个值如果泄露,攻击者可以伪造 session。部署时改成随机字符串:
import os app.secret_key = os.environ.get("SECRET_KEY", os.urandom(24))第二,确认依赖列表完整。在虚拟环境里执行pip freeze > requirements.txt,确保服务器上装依赖时不会缺包。
第三,确认数据库目录不是写死的本地绝对路径。使用我上面提到的os.path.join(os.path.abspath(os.path.dirname(__file__)), "data", "app.db")方式,部署到任何目录都能正常创建数据库文件。
7.2 用一台云服务器跑生产级服务
有服务器的情况下,我推荐用 Gunicorn + Nginx 的组合。先在服务器上准备好项目,步骤大致如下:
apt update && apt install -y python3-venv nginx git clone 你的项目仓库地址 cd customer-crm python3 -m venv venv source venv/bin/activate pip install -r requirements.txt pip install gunicorn启动服务用:
gunicorn -w 2 -b 127.0.0.1:8000 app:app这里解释一下为什么要用 Gunicorn:Flask 自带的开发服务器会在控制台打警告说不要用于生产环境,它不支持高并发、也没有做安全加固。Gunicorn 是一个支持多进程的 WSGI 服务器,能扛住真正的公网流量。-w 2表示开两个 worker,对个人 CRM 来说足够。
如果你用的是 Windows 服务器,用 Waitress 替代:
pip install waitress waitress-serve --host 0.0.0.0 --port 8000 app:app7.3 配置域名与 HTTPS
服务在 8000 端口运行后,用 Nginx 做反向代理,再申请一个 HTTPS 证书。Nginx 配置文件放在/etc/nginx/sites-available/crm:
server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }启用站点后执行nginx -s reload,再用 certbot 免费签证书:
apt install certbot python3-certbot-nginx certbot --nginx -d your-domain.com证书签完,HTTPS 自动配置好,浏览器访问时就不会再提示不安全。我个人非常建议哪怕是个人项目也把 HTTPS 加上,现在没有加密的网页,在浏览器里很容易被标记为不可信,用户体验很不好。
7.4 上线之后要盯什么
部署上线不等于结束,后面要关注的还有三点。
第一是日志。Gunicorn 默认日志输出到终端,如果你在后台跑,建议把输出重定向到文件,出问题时方便查。
nohup gunicorn -w 2 -b 127.0.0.1:8000 app:app > app.log 2>&1 &第二是自动重启。服务器重启后,服务不会自动拉起。用 systemd 写一个服务文件是最靠谱的方式,或者用 supervisor、pm2 这类进程管理工具。
第三是数据库备份。SQLite 是一个单文件数据库,最简单的备份方式就是每天把 data/app.db 拷贝到另一个目录或对象存储里。对个人项目来说,写一个 cron 脚本拷贝文件就够了。
8. 常见问题速查表与避坑清单
实践过程中,把遇到的高频问题整理成表格,方便你直接对照。
| 问题现象 | 常见原因 | 解决方法 |
|---|---|---|
| gpt6 命令找不到 | Node 全局 bin 目录不在 PATH | 检查 npm 全局路径并加入 PATH |
| API 连接超时 | 网络到模型的节点不稳定 | 检查网络环境,配置代理或等待重试 |
| pip 安装超时 | 默认源访问慢 | 按上文配置清华源 |
| Flask 页面 404 | 路由路径写错或模板文件夹名字不对 | 让 GPT-6 检查 url_for 与 route 是否匹配 |
| 500 错误 | 视图函数内部异常 | 开启 debug 模式看完整堆栈 |
| 数据库表不存在 | 初始化逻辑未执行 | 启动时执行 db.create_all() |
| 端口被占用 | 上一个服务未关闭 | 换端口或 kill 占用进程 |
| 删除操作失败 | 用了 GET 且带参数 | 改为 POST 表单提交 |
| 部署后静态文件 404 | Nginx 未配置静态目录 | location /static 指向项目 static 文件夹 |
| 登录后跳转循环 | session 设置失败或 secret_key 缺失 | 检查 secret_key 配置 |
再额外分享几条避坑经验,这几条是我在实际操作中总结出来的:
- 项目根目录不要提交
.env文件和数据库文件到 Git 仓库,API 密钥和用户数据都不能乱传。 - AI 修改代码后,不要看到它说“已完成”就结束,一定要自己跑一遍验收清单。
- 不要在生产环境开启 Flask debug 模式,它会把完整堆栈和代码暴露给访问者,非常危险。
- 每个大功能开发前,都让 GPT-6 在项目说明文件里更新一次技术约定,保持“项目说明书”不过时。
这条流程并不只属于技术人
最后说点我自己的体会。之前我也试过各种 AI 辅助编程的工具,最烦的就是它改一处坏两处,改完还得我自己逐行排查。GPT-6 这代最明显的进步是它会对项目整体结构负责,但前提是你必须给出清晰约束,不能让它自由发挥。
我现在的习惯是:每做一个新项目,先写一份 README 或项目说明文件,把目标、技术栈、运行方式、目录约定全部写清楚,然后明确告诉 AI 所有修改必须同步更新这份文档。这个习惯让我少踩了太多坑,每次打开项目,AI 都能以最快速度进入状态,不用反复解释背景。
如果你今天照着这篇实操做完了,可以试着把 CRM 换成你自己的需求,比如改成一个简单的库存管理、预约登记、或者同事公用的记事本。核心流程不变:环境准备、接入模型、写清需求、让 AI 生成、本地验收、部署上线。给 AI 一个明确的“项目说明书”,比收藏任何魔法提示词都管用。
做完这一个网站之后,你可能会发现,自己琢磨 AI 编程已经停不下来了。