From 1b582e44394660591c13dd82bbf33daf7d89ed7d Mon Sep 17 00:00:00 2001 From: liyupi <592789970@qq.com> Date: Tue, 13 Jan 2026 17:22:25 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E9=87=8D=E6=9E=84=20README=EF=BC=8C?= =?UTF-8?q?=E9=87=8D=E7=82=B9=E6=8E=A8=E8=8D=90=20Vibe=20Coding=20?= =?UTF-8?q?=E9=9B=B6=E5=9F=BA=E7=A1=80=E6=95=99=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Vibe Coding 教程专属章节,突出展示教程内容和学习路径 - 重新组织知识库导航结构(新手入门/AI编程/工具测评/应用场景) - 添加仓库目录结构说明 - 优化交流渠道和参与共建说明 - 添加 Star History 图表 --- .vuepress/config.bundled_1768295118604.mjs | 598 +++++++ .vuepress/config.bundled_1768295118612.mjs | 0 Vibe Coding 零基础教程/00 Vibe Coding 简介.md | 534 ++++++ .../01 快速上手 Vibe Coding.md | 394 +++++ .../10 编程工具/00 AI 编程工具大全.md | 175 ++ .../10 编程工具/01 AI 模型选择指南.md | 250 +++ .../10 编程工具/02 AI 零代码平台.md | 399 +++++ .../10 编程工具/03 AI 智能体平台.md | 291 ++++ .../10 编程工具/04 AI 代码编辑器.md | 464 ++++++ .../10 编程工具/05 AI 命令行编程工具.md | 372 +++++ .../10 编程工具/06 AI IDE 插件.md | 177 ++ .../10 编程工具/08 AI 辅助工具集.md | 526 ++++++ .../10 编程工具/09 我的 AI 工具箱推荐.md | 365 ++++ .../工具实战/Dify:零代码 AI 应用开发平台.md | 279 ++++ .../Gemini CLI 首测:免费开源很香,但坑点很多!.md | 415 +++++ .../工具实战/OpenCode:开源免费的 AI 命令行工具实测.md | 446 +++++ .../工具实战/TRAE SOLO:AI 主导的全栈开发工具.md | 466 ++++++ .../20 项目实战/00 Vibe Coding 项目实战导读.md | 114 ++ .../20 项目实战/01 Vibe Coding 项目开发流程.md | 686 ++++++++ .../20 项目实战/02 Vibe Coding 个人工具开发.md | 518 ++++++ .../20 项目实战/03 Vibe Coding AI 应用开发.md | 691 ++++++++ .../20 项目实战/04 Vibe Coding 全栈应用开发.md | 547 ++++++ .../20 项目实战/05 Vibe Coding 小程序开发.md | 519 ++++++ .../20 项目实战/06 项目部署上线教程.md | 425 +++++ .../20 项目实战/10 Vibe Coding 项目灵感大全.md | 776 +++++++++ .../20 项目实战/进阶 | 企业级 AI 编程实战项目.md | 277 ++++ .../20 项目实战/进阶 | 企业项目开发流程.md | 558 +++++++ .../鱼皮的原创项目/AI 创意应用 - 互联网数字墓园项目.md | 102 ++ .../鱼皮的原创项目/AI 创意应用 - 高考分数预测器项目.md | 124 ++ .../Cursor + Cordova - 表情包生成器 APP 项目实战.md | 512 ++++++ .../Cursor + LangChain4j - AI 程序员技术练兵场项目实战.md | 226 +++ .../Cursor + LangChain4j - AI 编程助手项目实战.md | 1477 +++++++++++++++++ .../DeepSeek + 火山 - AI 海龟汤游戏项目实战.md | 125 ++ .../GLM + Claude Code - AI 命令行编程工具项目实战.md | 416 +++++ .../Kimi K2 - AI 文档阅读助手项目实战.md | 168 ++ .../LangChain4j + 多智能体 - AI 零代码应用生成平台项目实战.md | 179 ++ .../Spring AI - AI 超级智能体项目实战.md | 185 +++ .../鱼皮的原创项目/TRAE - AI 学习英雄小程序实战.md | 440 +++++ .../Vercel AI 网关 - AI 减压小能手项目实战.md | 292 ++++ .../30 经验技巧/00 Vibe Coding 经验技巧总览.md | 126 ++ .../30 经验技巧/01 Vibe Coding 五大核心心法.md | 454 +++++ .../30 经验技巧/02 Vibe Coding 对话工程技巧.md | 594 +++++++ .../30 经验技巧/03 Vibe Coding 上下文管理技巧.md | 686 ++++++++ .../30 经验技巧/04 Vibe Coding 幻觉和死循环处理.md | 663 ++++++++ .../30 经验技巧/05 Vibe Coding 效率提升技巧.md | 793 +++++++++ .../30 经验技巧/06 Vibe Coding 代码质量保障.md | 729 ++++++++ .../30 经验技巧/07 Vibe Coding 代码重构技巧.md | 620 +++++++ .../30 经验技巧/08 Vibe Coding 性能优化技巧.md | 706 ++++++++ .../30 经验技巧/09 Vibe Coding 安全防护技巧.md | 491 ++++++ .../30 经验技巧/10 Vibe Coding 成本控制技巧.md | 404 +++++ .../30 经验技巧/11 Vibe Coding 团队协作技巧.md | 558 +++++++ .../40 编程学习/01 编程学习路线.md | 72 + .../40 编程学习/02 编程知识百科.md | 84 + .../40 编程学习/03 编程资源大全.md | 197 +++ .../40 编程学习/04 AI 编程技术.md | 331 ++++ .../40 编程学习/05 AI 绘图指南.md | 366 ++++ .../40 编程学习/06 AI 应用开发面试题.md | 301 ++++ .../40 编程学习/07 程序员简历模板.md | 220 +++ .../40 编程学习/08 程序员面试刷题.md | 160 ++ .../40 编程学习/09 程序员工作技巧.md | 290 ++++ .../40 编程学习/10 程序员成长大法.md | 210 +++ .../40 编程学习/11 编程工具大全.md | 198 +++ .../40 编程学习/MCP 服务开发.md | 279 ++++ .../40 编程学习/团队研发规范.md | 177 ++ .../50 产品变现/00 产品变现导读.md | 125 ++ .../50 产品变现/01 为什么要做产品变现?.md | 181 ++ .../50 产品变现/02 需求分析和产品规划.md | 175 ++ .../50 产品变现/03 文档沉淀和知识管理.md | 356 ++++ .../50 产品变现/04 技术选型实战指南.md | 350 ++++ .../50 产品变现/05 系统架构设计实践.md | 250 +++ .../50 产品变现/06 项目研发流程选择.md | 306 ++++ .../50 产品变现/07 产品盈利模式设计.md | 201 +++ .../50 产品变现/08 产品付费策略设计.md | 404 +++++ .../50 产品变现/09 SEO 搜索引擎优化实战.md | 227 +++ .../50 产品变现/我的自媒体涨粉运营之路.md | 345 ++++ .../50 产品变现/我的自媒体起号经验.md | 241 +++ .../50 产品变现/系统监控告警实践.md | 134 ++ .../50 产品变现/网站数据保护实践.md | 121 ++ .../50 产品变现/网站数据分析实战.md | 176 ++ .../60 Vibe Coding 资源大全.md | 154 ++ .../70 Vibe Coding 概念大全.md | 777 +++++++++ .../90 Vibe Coding 常见问题和解决.md | 608 +++++++ Vibe Coding 零基础教程/README.md | 128 ++ 83 files changed, 30476 insertions(+) create mode 100644 .vuepress/config.bundled_1768295118604.mjs create mode 100644 .vuepress/config.bundled_1768295118612.mjs create mode 100644 Vibe Coding 零基础教程/00 Vibe Coding 简介.md create mode 100644 Vibe Coding 零基础教程/01 快速上手 Vibe Coding.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/00 AI 编程工具大全.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/01 AI 模型选择指南.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/02 AI 零代码平台.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/03 AI 智能体平台.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/04 AI 代码编辑器.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/05 AI 命令行编程工具.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/06 AI IDE 插件.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/08 AI 辅助工具集.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/09 我的 AI 工具箱推荐.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/工具实战/Dify:零代码 AI 应用开发平台.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/工具实战/Gemini CLI 首测:免费开源很香,但坑点很多!.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/工具实战/OpenCode:开源免费的 AI 命令行工具实测.md create mode 100644 Vibe Coding 零基础教程/10 编程工具/工具实战/TRAE SOLO:AI 主导的全栈开发工具.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/00 Vibe Coding 项目实战导读.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/01 Vibe Coding 项目开发流程.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/02 Vibe Coding 个人工具开发.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/03 Vibe Coding AI 应用开发.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/04 Vibe Coding 全栈应用开发.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/05 Vibe Coding 小程序开发.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/06 项目部署上线教程.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/10 Vibe Coding 项目灵感大全.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/进阶 | 企业级 AI 编程实战项目.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/进阶 | 企业项目开发流程.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/AI 创意应用 - 互联网数字墓园项目.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/AI 创意应用 - 高考分数预测器项目.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + Cordova - 表情包生成器 APP 项目实战.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + LangChain4j - AI 程序员技术练兵场项目实战.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + LangChain4j - AI 编程助手项目实战.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/DeepSeek + 火山 - AI 海龟汤游戏项目实战.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/GLM + Claude Code - AI 命令行编程工具项目实战.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Kimi K2 - AI 文档阅读助手项目实战.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/LangChain4j + 多智能体 - AI 零代码应用生成平台项目实战.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Spring AI - AI 超级智能体项目实战.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/TRAE - AI 学习英雄小程序实战.md create mode 100644 Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Vercel AI 网关 - AI 减压小能手项目实战.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/00 Vibe Coding 经验技巧总览.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/01 Vibe Coding 五大核心心法.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/02 Vibe Coding 对话工程技巧.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/03 Vibe Coding 上下文管理技巧.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/04 Vibe Coding 幻觉和死循环处理.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/05 Vibe Coding 效率提升技巧.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/06 Vibe Coding 代码质量保障.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/07 Vibe Coding 代码重构技巧.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/08 Vibe Coding 性能优化技巧.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/09 Vibe Coding 安全防护技巧.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/10 Vibe Coding 成本控制技巧.md create mode 100644 Vibe Coding 零基础教程/30 经验技巧/11 Vibe Coding 团队协作技巧.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/01 编程学习路线.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/02 编程知识百科.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/03 编程资源大全.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/04 AI 编程技术.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/05 AI 绘图指南.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/06 AI 应用开发面试题.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/07 程序员简历模板.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/08 程序员面试刷题.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/09 程序员工作技巧.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/10 程序员成长大法.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/11 编程工具大全.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/MCP 服务开发.md create mode 100644 Vibe Coding 零基础教程/40 编程学习/团队研发规范.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/00 产品变现导读.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/01 为什么要做产品变现?.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/02 需求分析和产品规划.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/03 文档沉淀和知识管理.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/04 技术选型实战指南.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/05 系统架构设计实践.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/06 项目研发流程选择.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/07 产品盈利模式设计.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/08 产品付费策略设计.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/09 SEO 搜索引擎优化实战.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/我的自媒体涨粉运营之路.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/我的自媒体起号经验.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/系统监控告警实践.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/网站数据保护实践.md create mode 100644 Vibe Coding 零基础教程/50 产品变现/网站数据分析实战.md create mode 100644 Vibe Coding 零基础教程/60 Vibe Coding 资源大全.md create mode 100644 Vibe Coding 零基础教程/70 Vibe Coding 概念大全.md create mode 100644 Vibe Coding 零基础教程/90 Vibe Coding 常见问题和解决.md create mode 100644 Vibe Coding 零基础教程/README.md diff --git a/.vuepress/config.bundled_1768295118604.mjs b/.vuepress/config.bundled_1768295118604.mjs new file mode 100644 index 0000000..041721c --- /dev/null +++ b/.vuepress/config.bundled_1768295118604.mjs @@ -0,0 +1,598 @@ +// .vuepress/config.ts +import { defineConfig } from "vuepress/config"; + +// .vuepress/extraSideBar.ts +var extraSideBar_default = [ + { + title: "\u7F16\u7A0B\u5BFC\u822A", + icon: "/icon/xingqiu.png", + popoverTitle: "\u5FAE\u4FE1\u626B\u4E00\u626B", + popoverUrl: "/qrcode-codefather.png", + popoverDesc: "\u7F16\u7A0B\u5BFC\u822A\uFF1A\u7F16\u7A0B\u5BFC\u822A" + }, + { + title: "\u4EA4\u6D41\u7FA4", + icon: "/icon/weixin.png", + popoverTitle: '\u626B\u7801\u6DFB\u52A0 \u7F16\u7A0B\u5BFC\u822A\u5C0F\u52A9\u624B\u5FAE\u4FE1\uFF0C\u62C9\u4F60\u8FDB\u4E13\u5C5E\u7F16\u7A0B\u5B66\u4E60\u4EA4\u6D41\u7FA4', + popoverUrl: "/qrcode-codenavhelper.png" + }, + { + title: "\u4E0B\u8D44\u6599", + icon: "/icon/xiazai.png", + popoverTitle: '\u626B\u7801\u5173\u6CE8\u516C\u4F17\u53F7\uFF0C\u56DE\u590D ai \u83B7\u53D6\u6E05\u534E\u5927\u5B66 DeepSeek \u4ECE\u5165\u95E8\u5230\u7CBE\u901A PDF', + popoverUrl: "/qrcode-mpcoder_yupi.jpg", + popoverDesc: "\u516C\u4F17\u53F7: \u7A0B\u5E8F\u5458\u9C7C\u76AE" + }, + { + title: "\u652F\u6301\u6211", + icon: "/icon/dianzan.png", + popoverTitle: ' \u9F13\u52B1\u548C\u8D5E\u8D4F\u6211', + popoverUrl: "/qrcode-thumb.jpg", + popoverDesc: "\u611F\u8C22\u60A8\u7684\u652F\u6301\uFF0C\u4F5C\u8005\u5934\u53D1++" + } +]; + +// .vuepress/footer.ts +var footer_default = { + friendLinks: [ + { + label: "\u7AD9\u957F - \u7A0B\u5E8F\u5458\u9C7C\u76AE", + href: "https://yuyuanweb.feishu.cn/wiki/Abldw5WkjidySxkKxU2cQdAtnah" + }, + { + label: "\u9C7C\u9E22\u7F51\u7EDC", + href: "https://yuyuanweb.com/" + }, + { + label: "\u8001\u9C7C\u7B80\u5386", + href: "https://www.laoyujianli.com/" + }, + { + label: "\u9762\u8BD5\u9E2D", + href: "https://www.mianshiya.com/" + }, + { + label: "\u7F16\u7A0B\u5B66\u4E60\u5708", + href: "https://www.codefather.cn/" + } + ], + copyright: { + href: "https://beian.miit.gov.cn/", + name: "\u6CAAICP\u590719026706\u53F7-6" + } +}; + +// .vuepress/navbar.ts +var navbar_default = [ + { + text: "AI \u9879\u76EE", + items: [ + { + text: "AI \u6D77\u9F9F\u6C64\u9879\u76EE\u6559\u7A0B", + link: "/ai-\u6D77\u9F9F\u6C64\u9879\u76EE\u6559\u7A0B/" + }, + { + text: "AI + Cursor \u5F00\u53D1\u4E00\u4E2A\u4EB2\u621A\u8BA1\u7B97\u5668", + link: "/ai-cursor-\u5F00\u53D1\u4E00\u4E2A\u4EB2\u621A\u8BA1\u7B97\u5668/" + }, + { + text: "AI + Cursor \u5F00\u53D1\u4E00\u4E2A\u6A21\u62DF\u9762\u8BD5\u7CFB\u7EDF", + link: "/ai-cursor-\u5F00\u53D1\u4E00\u4E2A\u6A21\u62DF\u9762\u8BD5\u7CFB\u7EDF/" + }, + { + text: "AI + Cursor \u5F00\u53D1\u4E00\u4E2A\u80BA\u6D3B\u91CF\u6D4B\u8BD5\u5668", + link: "/ai-cursor-\u5F00\u53D1\u4E00\u4E2A\u80BA\u6D3B\u91CF\u6D4B\u8BD5\u5668/" + }, + { + text: "\u{1F525} \u4F01\u4E1A\u7EA7\u9879\u76EE\uFF1A\u5F00\u53D1 AI \u604B\u7231\u5927\u5E08\u5E94\u7528 + \u62E5\u6709\u81EA\u4E3B\u89C4\u5212\u80FD\u529B\u7684\u8D85\u7EA7\u667A\u80FD\u4F53", + link: "/\u{1F525}-\u4F01\u4E1A\u7EA7\u9879\u76EE-\u5F00\u53D1-ai-\u604B\u7231\u5927\u5E08\u5E94\u7528-\u62E5\u6709\u81EA\u4E3B\u89C4\u5212\u80FD\u529B\u7684\u8D85\u7EA7\u667A\u80FD\u4F53/" + } + ] + }, + { + text: "Deepseek", + items: [ + { + text: "\u5173\u4E8EDeepSeek", + link: "/Deepseek/#\u5173\u4E8Edeepseek" + }, + { + text: "DeepSeek \u4F7F\u7528\u6307\u5357", + link: "/ai/#deepseek\u4F7F\u7528\u6307\u5357" + }, + { + text: "AI \u5E94\u7528\u573A\u666F", + link: "/ai/#ai\u5E94\u7528\u573A\u666F" + }, + { + text: "DeepSeek \u8D44\u6E90\u6C47\u603B", + link: "/ai/#deepseek\u8D44\u6E90\u6C47\u603B" + }, + { + text: "DeepSeek \u6280\u672F\u89E3\u6790", + link: "/ai/#deepseek\u6280\u672F\u89E3\u6790" + }, + { + text: "AI \u884C\u4E1A\u8D44\u8BAF", + link: "/ai/#ai\u884C\u4E1A\u8D44\u8BAF" + } + ] + }, + { + text: "\u{1F525}\u7F16\u7A0B\u5B66\u4E60", + link: "https://www.codefather.cn/" + }, + { + text: "AI \u9762\u8BD5\u9898\u5E93", + link: "https://www.mianshiya.com/?category=ai" + }, + { + text: "\u4F5C\u8005", + link: "/\u4F5C\u8005/" + } +]; + +// .vuepress/sidebars/ai.ts +var ai_default = [ + "", + { + "title": "\u9C7C\u76AE\u7684 AI \u6307\u5357", + "collapsable": true, + "children": [ + "\u9C7C\u76AE\u7684 AI \u6307\u5357/\u9C7C\u76AE\u7684 AI \u6307\u5357 - 0\u3001\u5F00\u7BC7", + "\u9C7C\u76AE\u7684 AI \u6307\u5357/\u9C7C\u76AE\u7684 AI \u6307\u5357 - 1\u3001AI \u6838\u5FC3\u6982\u5FF5", + "\u9C7C\u76AE\u7684 AI \u6307\u5357/\u9C7C\u76AE\u7684 AI \u6307\u5357 - 2\u3001AI \u5B9E\u7528\u5DE5\u5177", + "\u9C7C\u76AE\u7684 AI \u6307\u5357/\u9C7C\u76AE\u7684 AI \u6307\u5357 - 3\u3001AI \u7F16\u7A0B\u6280\u5DE7", + "\u9C7C\u76AE\u7684 AI \u6307\u5357/\u9C7C\u76AE\u7684 AI \u6307\u5357 - 4\u3001AI \u7F16\u7A0B\u6280\u672F" + ] + }, + { + "title": "AI\u9879\u76EE\u6559\u7A0B", + "collapsable": true, + "children": [ + "AI\u9879\u76EE\u6559\u7A0B/AI \u6D77\u9F9F\u6C64\u9879\u76EE\u6559\u7A0B", + "AI\u9879\u76EE\u6559\u7A0B/AI + Cursor \u5F00\u53D1\u4E00\u4E2A\u4EB2\u621A\u8BA1\u7B97\u5668", + "AI\u9879\u76EE\u6559\u7A0B/AI + Cursor \u5F00\u53D1\u4E00\u4E2A\u6A21\u62DF\u9762\u8BD5\u7CFB\u7EDF", + "AI\u9879\u76EE\u6559\u7A0B/AI + Cursor \u5F00\u53D1\u4E00\u4E2A\u80BA\u6D3B\u91CF\u6D4B\u8BD5\u5668", + "AI\u9879\u76EE\u6559\u7A0B/\u{1F525} \u4F01\u4E1A\u7EA7\u9879\u76EE\uFF1A\u5F00\u53D1 AI \u604B\u7231\u5927\u5E08\u5E94\u7528 + \u62E5\u6709\u81EA\u4E3B\u89C4\u5212\u80FD\u529B\u7684\u8D85\u7EA7\u667A\u80FD\u4F53" + ] + }, + { + "title": "\u5173\u4E8EDeepSeek", + "collapsable": true, + "children": [ + "\u5173\u4E8EDeepSeek/DeepSeek \u521B\u59CB\u56E2\u961F\u4ECB\u7ECD", + "\u5173\u4E8EDeepSeek/DeepSeek \u53D1\u5C55\u5386\u7A0B", + "\u5173\u4E8EDeepSeek/\u4EC0\u4E48\u662F DeepSeek" + ] + }, + { + "title": "DeepSeek\u8D44\u6E90\u6C47\u603B", + "collapsable": true, + "children": [ + "DeepSeek\u8D44\u6E90\u6C47\u603B/DeepSeek\u5B98\u65B9\u6574\u7406\u7684\u6A21\u578B\u5E94\u7528\u548C\u5DE5\u5177", + "DeepSeek\u8D44\u6E90\u6C47\u603B/DeepSeek \u5B66\u4E60\u8D44\u6599", + "DeepSeek\u8D44\u6E90\u6C47\u603B/DeepSeek \u5B98\u65B9\u94FE\u63A5", + "DeepSeek\u8D44\u6E90\u6C47\u603B/DeepSeek \u5F00\u6E90\u9879\u76EE" + ] + }, + { + "title": "AI\u884C\u4E1A\u8D44\u8BAF", + "collapsable": true, + "children": [ + { + "title": "2025-11", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-11/2025 \u5E74 11 \u6708 AI \u8D44\u8BAF\u6C47\u603B" + ] + }, + { + "title": "2025-10", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-10/2025 \u5E74 10 \u6708 AI \u8D44\u8BAF\u6C47\u603B" + ] + }, + { + "title": "2025-09", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-09/2025 \u5E74 9 \u6708 AI \u8D44\u8BAF\u6C47\u603B" + ] + }, + { + "title": "2025-08", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/ChatExcel\u83B7\u8FD1\u5343\u4E07\u5929\u4F7F\u8F6E\u878D\u8D44\uFF0C\u5168\u94FE\u8DEFAI DataAgent\u4ECE\u6570\u636E\u83B7\u53D6\u5230\u4EF7\u503C\u4EA4\u6613\u6253\u9020\u5546\u4E1A\u95ED\u73AF\u5E73\u53F0", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/DeepSeek App \u66F4\u65B0\u81F3 1.3.0 \u7248\u672C\uFF0C\u65B0\u589E\u5BF9\u8BDD\u751F\u6210\u5206\u4EAB\u56FE\u529F\u80FD", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/Kimi \u9E3F\u8499\u7248 App \u4F53\u9A8C\u5347\u7EA7\uFF0C\u4F7F\u7528\u534E\u4E3A\u4ED3\u9889 markdown \u89E3\u6790\u5F15\u64CE\u6ED1\u52A8\u5E27\u7387\u63D0\u5347\u81F3 2.4 \u500D", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/OpenAI CFO\u900F\u9732\u516C\u53F8\u5728\u8003\u8651IPO \u6709\u671B\u6210\u79D1\u6280\u9886\u57DF\u6700\u5927\u89C4\u6A21IPO", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/\u4F1A\u5934\u8111\u98CE\u66B4\u7684 AI \u2014 \u56FD\u5185\u9996\u4E2A\u5E76\u884C\u601D\u8003\u6A21\u578B \u95EE\u5C0F\u767Do4 \u6765\u5566\uFF01", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/\u534E\u4EBA\u56E2\u961F\u7834\u89E3Token\u9650\u5236\uFF0C\u6269\u6563\u6A21\u578B\u7684\u6F5C\u529B\u8D85\u8D8A\u81EA\u56DE\u5F52\u4E09\u500D\uFF01", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/\u6606\u4ED1\u4E07\u7EF4\u53D1\u5E03Skywork Deep Research Agent v2", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/\u667A\u5143\u673A\u5668\u4EBA\u53D1\u5E03\u7075\u521B\u5E73\u53F0\uFF1A\u7A1A\u6656\u541B\u5BA3\u5E03\u673A\u5668\u4EBA\u4E8C\u6B21\u5F00\u53D1\u201C0 \u95E8\u69DB\u201D\u5C06\u81F3\uFF0C\u5927\u5E45\u964D\u4F4E\u52A8\u4F5C\u7F16\u6392\u96BE\u5EA6", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/\u817E\u8BAF CodeBuddy IDE \u4EE3\u7801\u52A9\u624B\u56FD\u5185\u7248\u516C\u6D4B\uFF0CDeepSeek-V3.1 \u6700\u65B0\u6A21\u578B\u514D\u8D39\u7528", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-08/\u9489\u9489\u8054\u624B\u901A\u4E49\u63A8\u51FAFun-ASR\u8BED\u97F3\u8BC6\u522B\u5927\u6A21\u578B\uFF0C\u53EF\u542C\u61C2\u5BB6\u5C45\u3001\u755C\u7267\u7B49\u5341\u5927\u884C\u4E1A\u9ED1\u8BDD" + ] + }, + { + "title": "2025-07", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/9B\u201C\u5C0F\u201D\u6A21\u578B\u5E72\u4E86\u7968\u201C\u5927\u201D\u7684\uFF1A\u6027\u80FD\u8D858\u500D\u53C2\u6570\u6A21\u578B\uFF0C\u62FF\u4E0B23\u9879SOTA\u667A\u8C31\u5F00\u6E90", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/OpenAI \u524D CTO\u7684AI\u516C\u53F8Thinking Machines Lab \u83B7\u5F97 20 \u4EBF\u7F8E\u5143\u878D\u8D44\uFF0C\u4F30\u503C\u8FBE 120 \u4EBF\u7F8E\u5143", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/X \u5E73\u53F0\u5C06\u5141\u8BB8 AI \u673A\u5668\u4EBA\u64B0\u5199\u793E\u533A\u6CE8\u91CA\uFF0C\u7531\u7528\u6237\u53CD\u9988\u51B3\u5B9A\u76F8\u5E94\u5185\u5BB9\u662F\u5426\u516C\u5F00\u5C55\u793A", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/\u4E0D\u8D70\u5BFB\u5E38\u8DEF\u7684\u6DD8\u5929\u6280\u672F\u8282\uFF1AAI\u72FC\u4EBA\u6740\u3001Poster\u8DEF\u6F14\u3001\u535A\u89C1\u793E\u8F6E\u756A\u4E0A\u9635", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/\u5168\u6808\u56FD\u4EA7\u5316\u6280\u672F\u95ED\u73AF\u521D\u6B65\u8D2F\u901A\uFF1A\u94F6\u6CB3\u9E92\u9E9F\u64CD\u4F5C\u7CFB\u7EDF\u4E0E\u6587\u5FC3 4.5 \u7CFB\u5217\u6A21\u578B\u5F00\u5C55\u6DF1\u5EA6\u6280\u672F\u5408\u4F5C", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/\u521A\u521A\uFF0CMeta\u5BA3\u5E03\u6B63\u5F0F\u6210\u7ACB\u300C\u8D85\u7EA7\u667A\u80FD\u5B9E\u9A8C\u5BA4\u300D\uFF0111\u4EBA\u8C6A\u534E\u56E2\u961F\u9996\u66DD\u5149", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/\u5FAE\u8F6F\u88AB\u66DD\u5C06\u201CAI \u4F7F\u7528\u91CF\u201D\u7EB3\u5165\u5458\u5DE5\u8003\u6838\uFF1A\u4E0D\u518D\u662F\u201C\u53EF\u9009\u9879\u201D\uFF0C\u76F4\u63A5\u6302\u94A9\u7EE9\u6548", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/\u82F1\u7279\u5C14 Day0 \u5B8C\u6210\u6587\u5FC3\u5927\u6A21\u578B 4.5 \u7CFB\u5217\u5F00\u6E90\u6A21\u578B\u7684\u7AEF\u4FA7\u90E8\u7F72", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/\u8363\u8000\u63A8\u51FA AI Connect \u5E73\u53F0\uFF1A\u652F\u6301 MCP \u548C A2A \u534F\u8BAE\uFF0C\u8054\u5408\u963F\u91CC\u3001\u6BD4\u4E9A\u8FEA\u3001\u7F8E\u7684", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-07/\u9A6C\u65AF\u514B xAI \u516C\u53F8\u8865\u5145 100 \u4EBF\u7F8E\u5143\u201C\u5F39\u836F\u201D\uFF0C\u706B\u529B\u805A\u7126\u6253\u9020\u5730\u8868\u6700\u5F3A AI" + ] + }, + { + "title": "2025-06", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/\u300C\u5E93\u514B\u63A5\u73ED\u4EBA\u300D\u5B98\u5BA3\u9000\u4F11\uFF1A\u82F9\u679C\u4E8C\u53F7\u4EBA\u7269\uFF0C\u4E3B\u5BFCApple Watch\u8BDE\u751F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/\u6E2F\u80A1\u4E00\u5929\u6572\u516D\u4E2A\u9523\uFF01\u201C\u4ED3\u50A8\u673A\u5668\u4EBA\u7B2C\u4E00\u80A1\u201D\u6781\u667A\u5609IPO\u9996\u65E5\u5E02\u503C\u8D85210\u4EBF", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/\u95ED\u6E90\u4E3B\u529B\u9009\u624B\u62E5\u62B1\u5F00\u6E90\uFF1FOpenAI \u88AB\u66DD\u6700\u5FEB\u4E0B\u5468\u63A8\u5F00\u6E90 AI \u6A21\u578B\uFF0Co3 mini \u7EA7\u63A8\u7406\u80FD\u529B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/\u5168\u65B0AI\u8868\u683C\uFF0C\u6765\u4E86\uFF01", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/OpenAI \u8FC4\u4ECA\u6700\u5927\u4EA4\u6613\u843D\u5730\uFF0C65 \u4EBF\u7F8E\u5143\u5B8C\u6210\u6536\u8D2D\u524D\u82F9\u679C\u9996\u5E2D\u8BBE\u8BA1\u5E08 Jony Ive \u7684\u521D\u521B\u516C\u53F8 io", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/\u8FD9\u5C4A985\u6BD5\u4E1A\u751F\u76F4\u64AD\u5E26\u8D27\u4E00\u628A\u597D\u624B\uFF0150\u4F59\u6B3E\u4EA7\u54C1\u70ED\u9500\u5168\u7F51\u4F9B\u4E0D\u5E94\u6C42", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/\u4E0A\u684C\uFF01\u529E\u516C\u5C0F\u6D63\u718A \xB7 \u684C\u9762\u7248\u5168\u65B0\u4E0A\u7EBF\uFF01", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/\u6D88\u606F\u79F0\u82F1\u4F1F\u8FBE\u6700\u5FEB9\u6708\u63A8\u51FA\u4E2D\u56FD\u7279\u4F9BAI\u82AF\u7247 \u9EC4\u4EC1\u52CB\u5C06\u8BBF\u95EE\u4E2D\u56FD", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/\u5956\u52B1\u6A21\u578B\u4E5F\u80FDScaling\uFF01\u4E0A\u6D77AI Lab\u7A81\u7834\u5F3A\u5316\u5B66\u4E60\u77ED\u677F\uFF0C\u63D0\u51FA\u7B56\u7565\u5224\u522B\u5B66\u4E60\u65B0\u8303\u5F0F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-06/\u5FAE\u8F6F\u53D1\u5E03 Phi-4-mini-flash-reasoning \u7AEF\u4FA7 AI \u6A21\u578B\uFF1A10 \u500D\u541E\u5410\u91CF\uFF0C\u63A8\u7406\u80FD\u529B\u5347\u7EA7" + ] + }, + { + "title": "2025-05", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-05/\u70B8\u88C2\uFF01Spring AI 1.0 \u6B63\u5F0F\u53D1\u5E03\uFF0C\u8BA9 Java \u518D\u6B21\u4F1F\u5927\uFF01", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-05/Claude 4\u70B8\u88C2\u53D1\u5E03\uFF01\u51ED\u4EC0\u4E48\u6562\u79F0\u5B87\u5B99\u6700\u5F3A\u7F16\u7A0B AI\uFF1F" + ] + }, + { + "title": "2025-04", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/Cursor \u8FCE\u6765\u4E86\u5F3A\u5927\u7684\u5BF9\u624B\uFF0CAugment Code \u5B9E\u6D4B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u4E00\u5F20\u7167\u7247\u751F\u6210\u8FDE\u8D2F\u5168\u7247\uFF01Runway Gen4 \u6DF1\u591C\u53D1\u5E03\uFF0C\u7EC8\u4E8E\u6345\u7834 AI \u89C6\u9891\u591A\u5E74\u7684\u5929\u82B1\u677F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/AI \u751F\u6001\u7684 USB \u63A5\u53E3\uFF1F\u963F\u91CC\u3001\u817E\u8BAF\u5168\u9762\u652F\u6301 MCP", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/5 \u5206\u949F\u76F4\u51FA 46 \u9875\u8BBA\u6587\uFF01\u8C37\u6B4C Deep Research \u5B8C\u7206 OpenAI\uFF0C\u6700\u5F3A Gemini 2.5 \u52A0\u6301", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/Shopify \u65B0\u6807\u51C6\uFF1A\u5C06 AI \u878D\u5165\u65E5\u5E38\u5DE5\u4F5C\uFF0C\u5DF2\u662F\u57FA\u672C\u8981\u6C42", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u300A\u806A\u660E\u7684\u673A\u5668\uFF0C\u590D\u6742\u7684\u4EBA\u5FC3\u300B\uFF0C\u65AF\u5766\u798F AI \u62A5\u544A 2025 \u5E74\u7248\u7684 12 \u4E2A\u4FE1\u53F7", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u5B9E\u6D4B\uFF1A\u963F\u91CC\u4E91\u767E\u70BC\u4E0A\u7EBF\u300C\u5168\u5468\u671F MCP \u670D\u52A1\u300D\uFF0CAI \u5DE5\u5177\u4E00\u7AD9\u5F0F\u6258\u7BA1", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u6B63\u5F0F\u6311\u6218\u8C37\u6B4C\uFF01OpenAI \u4E0A\u7EBF ChatGPT \u641C\u7D22\u529F\u80FD", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/Meta \u6DF1\u591C\u5F00\u6E90 Llama 4\uFF01\u9996\u6B21\u91C7\u7528 MoE\uFF0C\u60CA\u4EBA\u5343\u4E07 token \u4E0A\u4E0B\u6587\uFF0C\u7ADE\u6280\u573A\u8D85\u8D8A DeepSeek", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u9A6C\u4E91\u73B0\u8EAB\u963F\u91CC\u4E91\u53D1\u58F0\uFF01\u8C08\u79D1\u6280\u4EBA\u5458\u8D23\u4EFB\uFF1A\u8BA9 AI \u66F4\u61C2\u4EBA\u7C7B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/Gemini 2.5 Pro \u5B9E\u6D4B\uFF1A\u6216\u5C06\u6210\u4E3A\u6700\u5B9E\u7528\u7684\u63A8\u7406\u6A21\u578B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u963F\u91CC\u79D8\u5BC6\u7814\u53D1\u65B0\u6A21\u578B\u5C06\u53D1\u5E03\uFF0C\u5F71\u54CD\u529B\u6307\u6807\u6210\u6700\u91CD\u8981\u8003\u6838", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u6709\u53F2\u4EE5\u6765\u6700\u5927\u529B\u5EA6\uFF01\u82F9\u679C\u8FDB\u519B\u533B\u7597\uFF0C\u8BA1\u5212\u660E\u5E74\u63A8\u51FAAI\u533B\u751F - \u534E\u5C14\u8857\u89C1\u95FB", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u4E00\u5F20\u7167\u7247\u751F\u6210\u8FDE\u8D2F\u5168\u7247\uFF01Runway Gen-4 \u6DF1\u591C\u53D1\u5E03\uFF0C\u7EC8\u4E8E\u6345\u7834 AI \u89C6\u9891\u591A\u5E74\u7684\u5929\u82B1\u677F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u667A\u8C31\u53D1\u5E03 AutoGLM \u6C89\u601D\uFF1A\u9996\u4E2A\u514D\u8D39\u3001\u5177\u5907\u6DF1\u5EA6\u7814\u7A76\u548C\u64CD\u4F5C\u80FD\u529B\u7684 AI Agent", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/MiniMax Audio \u53D1\u5E03 Speech-02 \u6A21\u578B\uFF0C\u5355\u6B21\u8F93\u5165\u652F\u6301 20 \u4E07\u5B57\u7B26", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u4E9A\u9A6C\u900A\u63A8\u51FA Nova Act\uFF1A\u53EF\u64CD\u63A7\u7F51\u9875\u6D4F\u89C8\u5668\u7684 AI \u667A\u80FD\u4F53", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u817E\u8BAF\u5143\u5B9D\u8BC6\u56FE\u653E\u5927\u62DB\uFF01\u4E00\u6B21\u4F20 10 \u5F20\u56FE\uFF0C\u670B\u53CB\u5708\u6587\u6848\u3001\u7535\u5B50\u4E66\u91D1\u53E5\u5168\u641E\u5B9A\uFF01", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u552E\u4EF7\u8D85 7000 \u5143\uFF0CMeta \u60F3\u7528\u773C\u955C\u53D6\u4EE3 iPhone", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/\u767E\u5EA6\u98DE\u6868\u6846\u67B6 3.0 \u6B63\u5F0F\u7248\u53D1\u5E03", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/OpenAI \u4E0A\u7EBF\u201COpenAI \u5B66\u9662\u201D\uFF0C\u5DF2\u63D0\u4F9B\u6570\u5341\u5C0F\u65F6\u514D\u8D39 AI \u5B66\u4E60\u8D44\u6E90", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-04/xAI \u518D\u66F4\u65B0\uFF0C\u5404\u9879\u80FD\u529B\u5353\u8D8A" + ] + }, + { + "title": "2025-03", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u963F\u91CC\u5F00\u6E90\u5168\u65B0\u63A8\u7406\u6A21\u578B QwQ-32B\uFF0C\u4E00\u53F0 Mac \u5C31\u80FD\u5B9E\u73B0\u9876\u7EA7\u63A8\u7406\u80FD\u529B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u5B9E\u6D4B Manus\uFF1A\u9996\u4E2A\u771F\u5E72\u6D3B AI\uFF0C\u4E2D\u56FD\u9020\uFF08\u9644 50 \u4E2A\u7528\u4F8B + \u62C6\u89E3\uFF09", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u7528\u4E8E\u4E34\u5E8A\u5DE5\u4F5C\u6D41\u7A0B\u7684\u65B0 AI \u52A9\u624B\uFF0C\u5FAE\u8F6F\u63A8\u51FA Microsoft Dragon Copilot", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/Model Context Protocol\uFF0C\u770B\u8FD9\u4E00\u7BC7\u5C31\u591F\u4E86", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u8C37\u6B4C Gemini \u65B0\u589E Canvas \u4E0E\u97F3\u9891\u6982\u89C8\u529F\u80FD\uFF0C\u63D0\u5347\u7528\u6237\u751F\u4EA7\u529B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u9A6C\u65AF\u514B\u8FDB\u519B AI \u89C6\u9891\uFF0C\u6536\u8D2D\u89C6\u9891\u751F\u6210\u521D\u521B\u516C\u53F8\uFF0C4 \u4EBA 13 \u4E2A\u6708\u6253\u9020\u7C7B Sora \u6A21\u578B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u767E\u5EA6\u63A8\u51FA\u4E24\u6B3E AI \u5927\u6A21\u578B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/Claude \u73B0\u5DF2\u652F\u6301\u7F51\u7EDC\u641C\u7D22\u529F\u80FD", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/DeepSeek-V3 \u6A21\u578B\u66F4\u65B0\uFF0C\u5404\u9879\u80FD\u529B\u5168\u9762\u8FDB\u9636", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u817E\u8BAF\u6DF7\u5143 T1 \u6B63\u5F0F\u7248\u53D1\u5E03", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/Ideogram \u6B63\u5F0F\u53D1\u5E03 3.0 \u7248\u672C\u6A21\u578B\uFF1A\u771F\u5B9E\u611F\u4E0E\u521B\u610F\u8868\u73B0\u518D\u7A81\u7834", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u65B0\u63A8\u7406\u6A21\u578B\u6765\u4E86\uFF01\u963F\u91CC Qwen Chat \u5E73\u53F0\u5DF2\u4E0A\u7EBF\u201C\u6DF1\u5EA6\u601D\u8003\u201D\u529F\u80FD\uFF0C\u652F\u6301\u8054\u7F51\u641C\u7D22", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u521A\u521A\uFF0CGPT-4o \u539F\u751F\u56FE\u50CF\u751F\u6210\u4E0A\u7EBF\uFF0CP \u56FE\u3001\u751F\u56FE\u4E5F\u5C31\u4E00\u5634\u7684\u4E8B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u8C37\u6B4C\u53D1\u5E03 Gemini 2.5 \u4EBA\u5DE5\u667A\u80FD\u6A21\u578B\uFF0C\u5B9E\u73B0\u590D\u6742\u601D\u7EF4", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u8C37\u6B4C\u7EC8\u4E8E\u767B\u9876\u4E00\u6B21\u4E86\uFF01\u6700\u5F3A\u63A8\u7406\u6A21\u578BGemini 2.5 Pro\u5B9E\u6D4B\u4F53\u9A8C\uFF0C\u771F\u7684\u6709\u70B9\u4E1C\u897F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/DeepSeek\u56DE\u7B54\u73B0\u5728\u80FD\u4E0D\u80FD\u5165\u624B\u9EC4\u91D1 \u5C06\u7EF4\u6301\u9AD8\u4F4D\u9707\u8361", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/DeepSeek\u5B98\u65B9\u8F9F\u8C23\uFF1AR2\u53D1\u5E03\u4E3A\u5047\u6D88\u606F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u9AD8\u6821\uFF0C\u4E3A\u4F55\u6700\u5FEB\u62E5\u62B1DeepSeek\uFF1F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u8DE8\u5883\u7535\u5546\u8BD5\u7EC3AI\uFF0CDeepSeek\u53D6\u4EE3\u4E86ChatGPT", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-03/\u4E0D\u88C5\u4E86\uFF01OpenAI\u529B\u4FC3\u7279\u6717\u666E\u5BF9\u4E2D\u56FDAI\u4E0B\u6B7B\u624B\uFF0C\u51FA\u53F0\u201CAI\u51FA\u53E3\u7BA1\u5236\u201D" + ] + }, + { + "title": "2025-02", + "collapsable": true, + "children": [ + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/Anthropic Claude 3.7 Sonnet \u53D1\u5E03\uFF1A\u63A8\u7406\u80FD\u529B\u518D\u8FDB\u5316\uFF0C\u7F16\u7801\u6548\u7387\u7A81\u7834\u5929\u9645\uFF01", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u963F\u91CC Qwen \u9996\u4E2A\u63A8\u7406\u6A21\u578B\u4EAE\u76F8\uFF01", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u88ABDeepSeek\u523A\u6FC0\u5230\u4E86\uFF1F\u6587\u5FC3\u4E00\u8A00\u3001ChatGPT\u540C\u65F6\u5BA3\u5E03\uFF1A\u514D\u8D39\uFF01 ", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u8FD0\u8425\u5546\u5168\u9762\u63A5\u5165DeepSeek\u610F\u5473\u7740\u4EC0\u4E48\uFF1F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u96F7\u519B\uFF1A\u94A6\u4F69DeepSeek\u53D6\u5F97\u7684\u6210\u5C31\uFF0C\u6BCF\u4E2A\u4EBA\u53EF\u80FD\u90FD\u8981\u5B66\u4E60AI\u77E5\u8BC6", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u6E05\u534E\u5927\u5B66\uFF1A\u666E\u901A\u4EBA\u5982\u4F55\u6293\u4F4FDeepSeek\u7EA2\u52292025", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u70B9\u8D5E\u6536\u85CF\uFF01DeepSeek\u5728GitHub\u661F\u6807\u91CF\u5DF2\u8D85OpenAI", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u7206\u51B7\uFF0CDeepSeek\u51FA\u5C40\uFF0C\u82F9\u679CAI\u56FD\u884C\u7248\u5C06\u4E0E\u963F\u91CC\u5408\u4F5C", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u770B\u77ED\u5267\u3001\u201C\u4EA4\u670B\u53CB\u201D\uFF0CDeepSeek\u6324\u8FDB\u4E2D\u8001\u5E74\u793E\u4EA4\u5708", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u4E89\u5148\u6050\u540E\u63A5\u5165DeepSeek\u7684\u56FD\u4EA7\u624B\u673A\uFF0C\u5B83\u4EEC\u7684\u81EA\u7814\u5927\u6A21\u578B\u600E\u4E48\u529E\uFF1F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u4EF7\u503C\u5343\u4E07\u7F8E\u5143\u7684\u201CAI.com\u201D\uFF0C\u4F1A\u662F\u8C01\u7ED9DeepSeek\u516C\u53F8\u4F7F\u7528\u7684\u5462", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u5916\u8D44\u673A\u6784\u770BDeepSeek\uFF1A\u63D0\u632F\u4E2D\u56FD\u80A1\u5E02 \u673A\u4F1A\u85CF\u5728\u8FD9\u4E9B\u9886\u57DF", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u591A\u5BB6\u8F66\u4F01\u63A5\u5165AI\u5927\u6A21\u578BDeepSeek \u667A\u80FD\u6C7D\u8F66\u518D\u8FDB\u4E00\u6B65", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u5982\u4F55\u5229\u7528DeepSeek\u7FFB\u8EAB\uFF1F\u6293\u4F4FAI\u7EA2\u5229\uFF0C\u666E\u901A\u4EBA\u4E5F\u80FD\u9006\u88AD\u76843\u4E2A\u65B9\u5411", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u65E5\u672C\u5982\u4F55\u770B\u5F85Deepseek", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u6DF1\u5EA6\u6C42\u7D22\u6B63\u5728\u7269\u8272\u97E9\u56FD\u4EBA\u5DE5\u667A\u80FD\u4EBA\u624D\uFF0C\u5C55\u5F00\u786E\u4FDD\u4EBA\u624D\u7684\u6218\u4E89", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/DeepSeek\u7684\u201C\u670D\u52A1\u5668\u7E41\u5FD9\u201D\u8BA9\u6240\u6709\u4EBA\u6293\u72C2\uFF0C\u80CC\u540E\u7A76\u7ADF\u662F\u600E\u4E48\u56DE\u4E8B", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/DeepSeek\u88AB\u5C01\u6740\u4E86", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/DeepSeek\u9884\u6D4B\uFF1A\u672A\u676510\u5E74\uFF0C\u5C31\u4E1A\u524D\u666F\u6700\u597D\u768410\u4E2A\u4E13\u4E1A", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/DeepSeek\uFF0C\u7D27\u6025\u58F0\u660E", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/vivo\u4E0E\u8363\u8000\u76F8\u7EE7\u63A5\u5165DeepSeek\uFF1AAI\u6DF1\u5EA6\u878D\u5408\u5F15\u9886\u624B\u673A\u521B\u65B0\u6F6E\u6D41", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/vivo\u5B98\u5BA3\uFF1A\u5C06\u6DF1\u5EA6\u878D\u5408\u6EE1\u8840\u7248DeepSeek", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/\u4E0D\u5728\u573A\u7684DeepSeek\uFF0C\u662F\u5DF4\u9ECEAI\u5CF0\u4F1A\u771F\u6B63\u7684\u4E3B\u89D2", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/DeepSeek\u201C\u670B\u53CB\u5708\u201D\u4E0D\u65AD\u6269\u56F4\uFF1A10\u5BB6\u56FD\u5185\u5916\u4E91\u5382\u5546\u5BA3\u5E03\u63A5\u5165", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/DeepSeek\u201C\u91D1\u878D\u670B\u53CB\u5708\u201D \u4ECE\u201C\u4E89\u5148\u201D\u5230\u201C\u6050\u540E\u201D\uFF0C\u4ECE\u201C\u597D\u7528\u201D\u5230\u201C\u7528\u597D\u201D", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/DeepSeek\u5982\u4F55\u6405\u52A8AI\u4EA7\u4E1A\uFF1F", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/DeepSeek\u5BA3\u5E03\u6DA8\u4EF7\uFF01", + "AI\u884C\u4E1A\u8D44\u8BAF/2025-02/DeepSeek\u5E26\u98DE\u79D1\u5927\u8BAF\u98DE\uFF1F" + ] + } + ] + }, + { + "title": "DeepSeek\u6280\u672F\u89E3\u6790", + "collapsable": true, + "children": [ + { + "title": "DeepSeek \u6A21\u578B\u8BAD\u7EC3", + "collapsable": true, + "children": [ + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6A21\u578B\u8BAD\u7EC3/DeepSeek-R1\u7684\u56DB\u4E2A\u8BAD\u7EC3\u9636\u6BB5", + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6A21\u578B\u8BAD\u7EC3/DeepSeek-R1\u7684\u8BAD\u7EC3\u6D41\u7A0B\u5F3A\u5316\u5B66\u4E60\uFF08RL\uFF09\u9636\u6BB5\u91C7\u7528\u4E86GRPO\u7B97\u6CD5", + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6A21\u578B\u8BAD\u7EC3/DeepSeek-V3 \u9AD8\u6548\u8BAD\u7EC3\u5173\u952E\u6280\u672F\u5206\u6790", + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6A21\u578B\u8BAD\u7EC3/DeepSeek\u534E\u4E3D\u6587\u98CE\u4ECE\u4F55\u800C\u6765\uFF1F\u4E1A\u5185\u4EBA\u58EB\uFF1A\u8BAD\u7EC3\u6570\u636E\u3001\u8BAD\u7EC3\u7B56\u7565\u548C\u8FED\u4EE3\u4F18\u5316\u7F3A\u4E00\u4E0D\u53EF" + ] + }, + { + "title": "DeepSeek \u6280\u672F\u5206\u6790", + "collapsable": true, + "children": [ + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6280\u672F\u5206\u6790/DeepSeek\u6700\u5F3A\u4E13\u4E1A\u62C6\u89E3\uFF1A\u6E05\u4EA4\u590D\u6559\u6388\u8D85\u786C\u6838\u89E3\u8BFB", + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6280\u672F\u5206\u6790/DeepSeek\u7684\u4F18\u52BF\u4E0E\u4E0D\u8DB3", + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6280\u672F\u5206\u6790/\u4E00\u6587\u8BE6\u89E3 DeepSeek \u6280\u672F\u67B6\u6784", + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6280\u672F\u5206\u6790/DeepSeek vs. ChatGPT\uFF1A\u8C01\u624D\u662F\u771F\u6B63\u7684\u738B\u8005\uFF1F", + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6280\u672F\u5206\u6790/DeepSeek \u7206\u706B\u903B\u8F91\u3001\u884C\u4E1A\u5F71\u54CD\u53CA\u5BF9\u672A\u6765AI\u53D1\u5C55\u7684\u542F\u793A", + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6280\u672F\u5206\u6790/DeepSeek-R1 \u6280\u672F\u5168\u666F\u89E3\u6790\uFF1A\u4ECE\u539F\u7406\u5230\u5B9E\u8DF5\u7684\u201C\u70BC\u91D1\u672F\u914D\u65B9\u201D", + "DeepSeek\u6280\u672F\u89E3\u6790/DeepSeek \u6280\u672F\u5206\u6790/DeepSeek\u6280\u672F\u89E3\u8BFB\uFF1A\u4ECEV3\u5230R1\u7684MoE\u67B6\u6784\u521B\u65B0" + ] + } + ] + }, + { + "title": "AI\u5E94\u7528\u573A\u666F", + "collapsable": true, + "children": [ + { + "title": "AI + \u7406\u8D22", + "collapsable": true, + "children": [ + "AI\u5E94\u7528\u573A\u666F/AI + \u7406\u8D22/DeepSeek\u544A\u8BC9\u6211\uFF1A30\u5C81\u523040\u5C81\uFF0C\u4E00\u822C\u4F1A\u62E5\u6709\u8FD9\u4E48\u591A\u7684\u5B58\u6B3E", + "AI\u5E94\u7528\u573A\u666F/AI + \u7406\u8D22/\u7528DeepSeek\u641E\u94B1\uFF0C\u65E5\u8D5A\u767E\u4E07", + "AI\u5E94\u7528\u573A\u666F/AI + \u7406\u8D22/\u666E\u901A\u4EBA\u5982\u4F55\u901A\u8FC7\u7092\u80A1\u4E70\u57FA\u91D1\u8D5A\u5230100\u4E07\uFF1F", + "AI\u5E94\u7528\u573A\u666F/AI + \u7406\u8D22/\u7528Deepseek\u56DE\u7B54\uFF1A\u5982\u679C\u6709100\u4E07\u95F2\u94B1\uFF0C\u51E0\u5E74\u5185\u4E0D\u7528\uFF0C\u8BE5\u600E\u4E48\u7406\u8D22\uFF1F" + ] + }, + { + "title": "AI + \u7F16\u7A0B\u5F00\u53D1", + "collapsable": true, + "children": [ + "AI\u5E94\u7528\u573A\u666F/AI + \u7F16\u7A0B\u5F00\u53D1/3 \u5C0F\u65F6\u505A\u6E38\u620F\uFF0C10 \u5929\u72C2\u8D5A 28 \u4E07\uFF01\u7A0B\u5E8F\u5458\u7528 AI \u8EBA\u8D5A\uFF1F", + "AI\u5E94\u7528\u573A\u666F/AI + \u7F16\u7A0B\u5F00\u53D1/\u{1F497}\u7528 DeepSeek \u7ED9\u5BF9\u8C61\u505A\u4E2A\u7F51\u7AD9\uFF0C\u5979\u4E00\u5B9A\u611F\u52A8\u574F\u4E86", + "AI\u5E94\u7528\u573A\u666F/AI + \u7F16\u7A0B\u5F00\u53D1/DeepSeek\u88C5\u8FDBVSCode\uFF0C\u7F16\u7A0B\u975E\u5E38\u4E1D\u6ED1\uFF01", + "AI\u5E94\u7528\u573A\u666F/AI + \u7F16\u7A0B\u5F00\u53D1/\u6559\u4F60\u7528DeepSeek+Clien\uFF0C\u4ECE0\u52301\u5F00\u53D1\u4E00\u4E2AAPP", + "AI\u5E94\u7528\u573A\u666F/AI + \u7F16\u7A0B\u5F00\u53D1/DeepSeek\u63A5\u5165Python\uFF0C\u4E00\u822C\u7535\u8111\u4E5F\u80FD\u98DE\u901F\u8DD1\uFF0C\u786E\u5B9E\u53EF\u4EE5\u5C01\u795E\u4E86\uFF01", + "AI\u5E94\u7528\u573A\u666F/AI + \u7F16\u7A0B\u5F00\u53D1/1 \u5206\u949F\u751F\u6210\u67B6\u6784\u56FE\uFF1F\u7A0B\u5E8F\u5458 AI \u7ED8\u56FE\u4FDD\u59C6\u7EA7\u6559\u7A0B" + ] + }, + { + "title": "AI + \u521B\u610F\u8BBE\u8BA1", + "collapsable": true, + "children": [ + "AI\u5E94\u7528\u573A\u666F/AI + \u521B\u610F\u8BBE\u8BA1/\u548C Deepseek \u8054\u624B\uFF0C\u505A\u4E2A\u54EA\u5412\u7684\u4E7E\u5764\u5708\u89C6\u9891", + "AI\u5E94\u7528\u573A\u666F/AI + \u521B\u610F\u8BBE\u8BA1/5 \u4E2A\u4E0D\u5F97\u4E0D\u6536\u85CF\u7684 Deepseek \u738B\u70B8\u7EC4\u5408\uFF01", + "AI\u5E94\u7528\u573A\u666F/AI + \u521B\u610F\u8BBE\u8BA1/DeepSeek\u4E00\u53E5\u8BDD\u641E\u5B9A\u4FEE\u56FE\u96BE\u9898", + "AI\u5E94\u7528\u573A\u666F/AI + \u521B\u610F\u8BBE\u8BA1/deepseek+\u6570\u5B57\u4EBA\u738B\u70B8\u7EC4\u5408\u4F7F\u7528\u65B9\u6CD5", + "AI\u5E94\u7528\u573A\u666F/AI + \u521B\u610F\u8BBE\u8BA1/\u7528 deepseek \u505A AI \u89C6\u9891\uFF0C\u7EDD\u4E86\uFF0C\u548C\u6284\u4F5C\u4E1A\u4E00\u6837\u7B80\u5355\uFF01", + "AI\u5E94\u7528\u573A\u666F/AI + \u521B\u610F\u8BBE\u8BA1/\u7EDD\u7EDD\u5B50\uFF01\u7528deepseek\u505AAI\u89C6\u9891\uFF0C\u6DA8\u7C8910W+\uFF08\u9644\u4FDD\u59C6\u7EA7\u6559\u7A0B\uFF09", + "AI\u5E94\u7528\u573A\u666F/AI + \u521B\u610F\u8BBE\u8BA1/\u8FD9\u6015\u662F\u5168\u7F51\u6700\u5F3A\u7684 DeepSeek \u56FE\u7247\u6559\u7A0B\u5427\uFF0C\u8D76\u7D27\u6536\u85CF\u4E86\uFF01" + ] + }, + { + "title": "AI + \u529E\u516C\u6548\u7387", + "collapsable": true, + "children": [ + "AI\u5E94\u7528\u573A\u666F/AI + \u529E\u516C\u6548\u7387/\u5982\u4F55\u7528DeepSeek\u66F4\u9AD8\u6548\u5730\u5DE5\u4F5C\uFF1A10\u4E2A\u5B9E\u7528\u6280\u5DE7", + "AI\u5E94\u7528\u573A\u666F/AI + \u529E\u516C\u6548\u7387/\u624B\u628A\u624B\u6559\u4F60\u5728word\u4E2D\u63A5\u5165deepseek\uFF0C\u79D2\u751F\u6587\u6863\u6750\u6599", + "AI\u5E94\u7528\u573A\u666F/AI + \u529E\u516C\u6548\u7387/\u6CD5\u5F8B\u4EBA\u4FDD\u59C6\u7EA7deepseek\u4F7F\u7528\u6307\u5357\uFF08\u9644\u6307\u4EE4\u7248\uFF09", + "AI\u5E94\u7528\u573A\u666F/AI + \u529E\u516C\u6548\u7387/DeepSeek R1 + \u4E2A\u4EBA\u77E5\u8BC6\u5E93\uFF0C\u76F4\u63A5\u8D77\u98DE\uFF01", + "AI\u5E94\u7528\u573A\u666F/AI + \u529E\u516C\u6548\u7387/DeepSeek\u5D4C\u5165\u5230Excel\uFF0C\u63D0\u534710\u500D\u5DE5\u4F5C\u6548\u7387\uFF0C\u592A\u725B\u4E86\uFF01", + "AI\u5E94\u7528\u573A\u666F/AI + \u529E\u516C\u6548\u7387/DeepSeek\u914D\u5408KIMI\uFF0C\u81EA\u52A8\u751F\u6210PPT\uFF0C\u611F\u89C9\u81EA\u5DF1\u8981\u5931\u4E1A\u4E86\uFF01", + "AI\u5E94\u7528\u573A\u666F/AI + \u529E\u516C\u6548\u7387/WPS\u91CC\u88C5\u4E0Adeepseek\uFF0C\u7B80\u76F4\u5C31\u662F\u529E\u516C\u795E\u5668", + "AI\u5E94\u7528\u573A\u666F/AI + \u529E\u516C\u6548\u7387/\u5229\u7528deepseek\u5EFA\u7ACB\u4E13\u5C5E\u9500\u552E\u77E5\u8BC6\u5E93", + "AI\u5E94\u7528\u573A\u666F/AI + \u529E\u516C\u6548\u7387/\u6559\u5E08\u5FC5\u5907DeepSeek\u4F7F\u7528\u6307\u5357\u6765\u4E86\uFF015\u5927\u6559\u5B66\u5E94\u7528\u573A\u666F+\u5B9E\u64CD\u6848\u4F8B+\u9690\u85CF\u7528\u6CD5" + ] + }, + { + "title": "AI + \u5185\u5BB9\u521B\u4F5C", + "collapsable": true, + "children": [ + "AI\u5E94\u7528\u573A\u666F/AI + \u5185\u5BB9\u521B\u4F5C/3\u79D2\u8BA9DeepSeek\u5199\u51FA\u7206\u6B3E\u5C0F\u7EA2\u4E66", + "AI\u5E94\u7528\u573A\u666F/AI + \u5185\u5BB9\u521B\u4F5C/\u4EBA\u6709\u591A\u5927\u80C6\uFF0C\u5730\u6709\u591A\u5927\u4EA7\uFF1A\u5982\u4F55\u7528DeepSeek\u5199\u957F\u7BC7\u5C0F\u8BF4", + "AI\u5E94\u7528\u573A\u666F/AI + \u5185\u5BB9\u521B\u4F5C/\u5982\u4F55\u5229\u7528DeepSeek\u8FDB\u884C\u9AD8\u6548\u5185\u5BB9\u521B\u4F5C", + "AI\u5E94\u7528\u573A\u666F/AI + \u5185\u5BB9\u521B\u4F5C/\u7528DeepSeek\u505A\u5C0F\u7EA2\u4E66\u771F\u7684\u592A\u725B\u4E86\uFF01\u8F7B\u8F7B\u677E\u677E\u6253\u9020\u7206\u6B3E\u7B14\u8BB0", + "AI\u5E94\u7528\u573A\u666F/AI + \u5185\u5BB9\u521B\u4F5C/\u7528DeepSeek\u5199\u6587\u7AE0\uFF1F\u8FD94\u4E2A\u9A9A\u64CD\u4F5C\u8BA9\u4F60\u8EBA\u5E73\u4E5F\u80FD\u51FA\u7206\u6B3E\uFF01\uFF08\u542B\u63D0\u793A\u8BCD\uFF09", + "AI\u5E94\u7528\u573A\u666F/AI + \u5185\u5BB9\u521B\u4F5C/DeepSeek\u4F7F\u7528\u6307\u5357\uFF1A\u63D0\u5347\u516C\u6587\u3001\u65B0\u95FB\u4E0E\u5E7F\u544A\u6587\u6848\u5199\u4F5C\u6548\u7387\u7684\u4E09\u5927\u6280\u5DE7 ", + "AI\u5E94\u7528\u573A\u666F/AI + \u5185\u5BB9\u521B\u4F5C/AI\u5199\u5C0F\u8BF4\u600E\u4E48\u5199\uFF1Fdeepseek\u5E2E\u4F60\u5199\u5C0F\u8BF4\u6559\u7A0B" + ] + } + ] + }, + { + "title": "DeepSeek\u4F7F\u7528\u6307\u5357", + "collapsable": true, + "children": [ + "DeepSeek\u4F7F\u7528\u6307\u5357/\u{1F525}DeepSeek \u5C0F\u767D\u5FEB\u901F\u4E0A\u624B\u6307\u5357", + "DeepSeek\u4F7F\u7528\u6307\u5357/\u51E0\u4E2A\u6280\u5DE7\uFF0C\u6559\u4F60\u53BB\u9664\u6587\u7AE0\u7684 AI \u5473\uFF01", + "DeepSeek\u4F7F\u7528\u6307\u5357/DeepSeek \u53D1\u5E03\u65B0\u6A21\u578B V3-0324\uFF0C\u9644\u4F7F\u7528\u6559\u7A0B", + "DeepSeek\u4F7F\u7528\u6307\u5357/\u6700\u65B0\u6E05\u534E\u5927\u5B66DeepSeek\u4F7F\u7528\u624B\u518C\u7B2C1-5\u7248\uFF0C\u5B98\u65B9\u5B8C\u6574\u7248PDF\u514D\u8D39\u4E0B\u8F7D", + "DeepSeek\u4F7F\u7528\u6307\u5357/2\u5206\u949F\u5B66\u4F1A DeepSeek API\uFF0C\u7ADF\u7136\u6BD4\u5B98\u65B9\u66F4\u597D\u7528\uFF01", + "DeepSeek\u4F7F\u7528\u6307\u5357/\u5B8C\u6574\u653B\u7565\uFF1A\u5982\u4F55\u7528\u597DDeepSeek\uFF0C\u4E00\u6587\u6C47\u603B\uFF01", + "DeepSeek\u4F7F\u7528\u6307\u5357/\u3010\u6C47\u603B\u3011\u6EE1\u8840\u7248 DeepSeek \u7B2C\u4E09\u65B9\u4F7F\u7528\u6E20\u9053", + "DeepSeek\u4F7F\u7528\u6307\u5357/DeepSeek \u672C\u5730\u90E8\u7F72\u6559\u7A0B", + "DeepSeek\u4F7F\u7528\u6307\u5357/\u5982\u4F55\u5728iPhone\u4E0A\u7528\u8BED\u97F3\u8C03\u7528Deepseek", + "DeepSeek\u4F7F\u7528\u6307\u5357/\u666E\u901A\u4EBA\u80FD\u7528DeepSeek\u505A\u4EC0\u4E48\uFF1F20\u4E2A\u5B9E\u7528\u5EFA\u8BAE", + { + "title": "DeepSeek \u63D0\u95EE\u6280\u5DE7", + "collapsable": true, + "children": [ + "DeepSeek\u4F7F\u7528\u6307\u5357/DeepSeek \u63D0\u95EE\u6280\u5DE7/50\u4E2A\u5E38\u7528\u7684DeepSeek\u6A21\u4EFF\u98CE\u683C\u63D0\u793A\u8BCD\uFF0C\u53BBAI\u5473\u7684\u5927\u6740\u5668", + "DeepSeek\u4F7F\u7528\u6307\u5357/DeepSeek \u63D0\u95EE\u6280\u5DE7/\u6211\u53D1\u73B0\u4E86 DeepSeek \u53BB AI \u5473\u7684\u6377\u5F84\uFF0C\u592A\u9999\u4E86", + "DeepSeek\u4F7F\u7528\u6307\u5357/DeepSeek \u63D0\u95EE\u6280\u5DE7/DeepSeek \u63D0\u793A\u8BCD\u57FA\u672C\u6CD5\u5219", + "DeepSeek\u4F7F\u7528\u6307\u5357/DeepSeek \u63D0\u95EE\u6280\u5DE7/DeepSeek\u4E0D\u597D\u7528\uFF1F\u90A3\u662F\u4F60\u8FD8\u4E0D\u77E5\u9053\u8FD9\u4E9B\u6307\u4EE4\uFF01", + "DeepSeek\u4F7F\u7528\u6307\u5357/DeepSeek \u63D0\u95EE\u6280\u5DE7/\u5410\u8840\u6574\u7406\uFF01DeepSeek\u795E\u7EA7\u6307\u4EE4\uFF0C\u597D\u7528\u5230\u7206\uFF01", + "DeepSeek\u4F7F\u7528\u6307\u5357/DeepSeek \u63D0\u95EE\u6280\u5DE7/\u666E\u901A\u4EBA\u4E5F\u80FD\u8F7B\u677E\u638C\u63E1\u7684 20 \u4E2A DeepSeek \u9AD8\u9891\u63D0\u793A\u8BCD\uFF082025\u7248\uFF09" + ] + } + ] + } +]; + +// .vuepress/sidebar.ts +var sidebar_default = { + "/AI/": ai_default, + "/AI\u9879\u76EE\u6559\u7A0B/": ai_default, + "/": "auto" +}; + +// .vuepress/config.ts +var author = "\u7A0B\u5E8F\u5458\u9C7C\u76AE"; +var domain = "https://ai.codefather.cn"; +var tags = [ + "ai", + "deepseek", + "AI \u8D44\u8BAF", + "\u4EBA\u5DE5\u667A\u80FD", + "AI \u884C\u4E1A\u8D8B\u52BF", + "AI \u6280\u672F", + "AI \u65B0\u95FB", + "AI \u52A8\u6001", + "AI \u5E02\u573A\u5206\u6790", + "AI \u6A21\u578B", + "AI \u72EC\u5BB6\u5206\u6790", + "AI \u6DF1\u5EA6\u89E3\u8BFB" +]; +var config_default = defineConfig({ + title: "\u9C7C\u76AE AI \u77E5\u8BC6\u5E93", + description: "\u9C7C\u76AE AI \u77E5\u8BC6\u5E93 - \u514D\u8D39 DeepSeek \u6559\u7A0B\uFF5C\u5DE5\u5177\u7AD9\uFF5C\u8D44\u6E90\u5E93\uFF0C\u662F\u4E00\u7AD9\u5F0F\u5F00\u6E90\u514D\u8D39\u7684\u4EBA\u5DE5\u667A\u80FD\u77E5\u8BC6\u5206\u4EAB\u5E73\u53F0\uFF0C\u6C47\u96C6 Deepseek\u3001GPT \u7B49\u70ED\u95E8 AI \u5DE5\u5177\u4ECB\u7ECD\u3001\u4F7F\u7528\u6307\u5357\u3001\u6280\u5DE7\u5206\u4EAB\u3001\u5E94\u7528\u573A\u666F\u3001AI \u53D8\u73B0\u3001\u884C\u4E1A\u8D44\u8BAF\u3001\u6559\u7A0B\u8D44\u6E90\u6C47\u603B\uFF0C\u63D0\u4F9B\u7CFB\u7EDF\u5316\u7684 AI \u6559\u7A0B\u3001\u7CBE\u9009 AI \u8D44\u6E90\uFF0C\u52A9\u4F60\u5FEB\u901F\u638C\u63E1 AI \u6280\u672F\uFF0C\u6210\u4E3A AI \u4E13\u5BB6\uFF01", + head: [ + ["link", { rel: "icon", href: "/favicon.ico" }], + [ + "meta", + { + name: "keywords", + content: "ai, deepseek, AI \u8D44\u8BAF\uFF0C\u4EBA\u5DE5\u667A\u80FD\uFF0CAI \u884C\u4E1A\u8D8B\u52BF\uFF0CAI \u6280\u672F\uFF0CAI \u65B0\u95FB\uFF0CAI \u52A8\u6001\uFF0CAI \u5E02\u573A\u5206\u6790\uFF0CAI \u6A21\u578B\uFF0CAI \u72EC\u5BB6\u5206\u6790\uFF0CAI \u6DF1\u5EA6\u89E3\u8BFB" + } + ], + [ + "script", + {}, + ` + var _hmt = _hmt || []; + (function() { + var hm = document.createElement("script"); + hm.src = "https://hm.baidu.com/hm.js?6998d638562bceef30be297767e91d64"; + var s = document.getElementsByTagName("script")[0]; + s.parentNode.insertBefore(hm, s); + })(); + ` + ] + ], + permalink: "/:slug", + extraWatchFiles: [".vuepress/*.ts", ".vuepress/sidebars/*.ts"], + markdown: { + lineNumbers: true, + extractHeaders: ["h2", "h3", "h4", "h5", "h6"] + }, + plugins: [ + ["@vuepress/back-to-top"], + [ + "@vuepress/google-analytics", + { + ga: "GTM-WVS9HM6W" + } + ], + ["@vuepress/medium-zoom"], + [ + "seo", + { + siteTitle: (_, $site) => $site.title + " - \u514D\u8D39 DeepSeek \u6559\u7A0B\uFF5C\u5DE5\u5177\u7AD9\uFF5C\u8D44\u6E90\u5E93", + title: ($page) => $page.title + " - \u514D\u8D39 DeepSeek \u6559\u7A0B\uFF5C\u5DE5\u5177\u7AD9\uFF5C\u8D44\u6E90\u5E93", + description: ($page) => $page.frontmatter.description || $page.description, + author: (_, $site) => $site.themeConfig.author || author, + tags: ($page) => $page.frontmatter.tags || tags, + type: ($page) => "article", + url: (_, $site, path) => ($site.themeConfig.domain || domain || "") + path, + image: ($page, $site) => $page.frontmatter.image && ($site.themeConfig.domain && !$page.frontmatter.image.startsWith("http") || "") + $page.frontmatter.image, + publishedAt: ($page) => $page.frontmatter.date && new Date($page.frontmatter.date), + modifiedAt: ($page) => $page.lastUpdated && new Date($page.lastUpdated) + } + ], + [ + "sitemap", + { + hostname: domain + } + ], + ["vuepress-plugin-baidu-autopush"], + ["vuepress-plugin-tags"], + [ + "vuepress-plugin-code-copy", + { + successText: "\u4EE3\u7801\u5DF2\u590D\u5236" + } + ], + [ + "feed", + { + canonical_base: domain, + count: 1e4, + posts_directories: [] + } + ], + ["img-lazy"] + ], + themeConfig: { + logo: "/logo.png", + nav: navbar_default, + sidebar: sidebar_default, + lastUpdated: "\u6700\u8FD1\u66F4\u65B0", + repo: "liyupi/ai-guide", + docsBranch: "master", + editLinks: true, + editLinkText: "\u5B8C\u5584\u9875\u9762", + footer: footer_default, + extraSideBar: extraSideBar_default + } +}); +export { + config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLnZ1ZXByZXNzL2NvbmZpZy50cyIsICIudnVlcHJlc3MvZXh0cmFTaWRlQmFyLnRzIiwgIi52dWVwcmVzcy9mb290ZXIudHMiLCAiLnZ1ZXByZXNzL25hdmJhci50cyIsICIudnVlcHJlc3Mvc2lkZWJhcnMvYWkudHMiLCAiLnZ1ZXByZXNzL3NpZGViYXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2dWVwcmVzcy9jb25maWdcIjtcbmltcG9ydCBleHRyYVNpZGVCYXIgZnJvbSBcIi4vZXh0cmFTaWRlQmFyXCI7XG5pbXBvcnQgZm9vdGVyIGZyb20gXCIuL2Zvb3RlclwiO1xuaW1wb3J0IG5hdmJhciBmcm9tIFwiLi9uYXZiYXJcIjtcbmltcG9ydCBzaWRlYmFyIGZyb20gXCIuL3NpZGViYXJcIjtcblxuY29uc3QgYXV0aG9yID0gXCJcdTdBMEJcdTVFOEZcdTU0NThcdTlDN0NcdTc2QUVcIjtcbmNvbnN0IGRvbWFpbiA9IFwiaHR0cHM6Ly9haS5jb2RlZmF0aGVyLmNuXCI7XG5jb25zdCB0YWdzID0gW1xuICBcImFpXCIsXG4gIFwiZGVlcHNlZWtcIixcbiAgXCJBSSBcdThENDRcdThCQUZcIixcbiAgXCJcdTRFQkFcdTVERTVcdTY2N0FcdTgwRkRcIixcbiAgXCJBSSBcdTg4NENcdTRFMUFcdThEOEJcdTUyQkZcIixcbiAgXCJBSSBcdTYyODBcdTY3MkZcIixcbiAgXCJBSSBcdTY1QjBcdTk1RkJcIixcbiAgXCJBSSBcdTUyQThcdTYwMDFcIixcbiAgXCJBSSBcdTVFMDJcdTU3M0FcdTUyMDZcdTY3OTBcIixcbiAgXCJBSSBcdTZBMjFcdTU3OEJcIixcbiAgXCJBSSBcdTcyRUNcdTVCQjZcdTUyMDZcdTY3OTBcIixcbiAgXCJBSSBcdTZERjFcdTVFQTZcdTg5RTNcdThCRkJcIixcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gIHRpdGxlOiBcIlx1OUM3Q1x1NzZBRSBBSSBcdTc3RTVcdThCQzZcdTVFOTNcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJcdTlDN0NcdTc2QUUgQUkgXHU3N0U1XHU4QkM2XHU1RTkzIC0gXHU1MTREXHU4RDM5IERlZXBTZWVrIFx1NjU1OVx1N0EwQlx1RkY1Q1x1NURFNVx1NTE3N1x1N0FEOVx1RkY1Q1x1OEQ0NFx1NkU5MFx1NUU5M1x1RkYwQ1x1NjYyRlx1NEUwMFx1N0FEOVx1NUYwRlx1NUYwMFx1NkU5MFx1NTE0RFx1OEQzOVx1NzY4NFx1NEVCQVx1NURFNVx1NjY3QVx1ODBGRFx1NzdFNVx1OEJDNlx1NTIwNlx1NEVBQlx1NUU3M1x1NTNGMFx1RkYwQ1x1NkM0N1x1OTZDNiBEZWVwc2Vla1x1MzAwMUdQVCBcdTdCNDlcdTcwRURcdTk1RTggQUkgXHU1REU1XHU1MTc3XHU0RUNCXHU3RUNEXHUzMDAxXHU0RjdGXHU3NTI4XHU2MzA3XHU1MzU3XHUzMDAxXHU2MjgwXHU1REU3XHU1MjA2XHU0RUFCXHUzMDAxXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGXHUzMDAxQUkgXHU1M0Q4XHU3M0IwXHUzMDAxXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGXHUzMDAxXHU2NTU5XHU3QTBCXHU4RDQ0XHU2RTkwXHU2QzQ3XHU2MDNCXHVGRjBDXHU2M0QwXHU0RjlCXHU3Q0ZCXHU3RURGXHU1MzE2XHU3Njg0IEFJIFx1NjU1OVx1N0EwQlx1MzAwMVx1N0NCRVx1OTAwOSBBSSBcdThENDRcdTZFOTBcdUZGMENcdTUyQTlcdTRGNjBcdTVGRUJcdTkwMUZcdTYzOENcdTYzRTEgQUkgXHU2MjgwXHU2NzJGXHVGRjBDXHU2MjEwXHU0RTNBIEFJIFx1NEUxM1x1NUJCNlx1RkYwMVwiLFxuICBoZWFkOiBbXG4gICAgLy8gXHU3QUQ5XHU3MEI5XHU1NkZFXHU2ODA3XG4gICAgW1wibGlua1wiLCB7IHJlbDogXCJpY29uXCIsIGhyZWY6IFwiL2Zhdmljb24uaWNvXCIgfV0sXG4gICAgLy8gU0VPXG4gICAgW1xuICAgICAgXCJtZXRhXCIsXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwia2V5d29yZHNcIixcbiAgICAgICAgY29udGVudDpcbiAgICAgICAgICBcImFpLCBkZWVwc2VlaywgQUkgXHU4RDQ0XHU4QkFGXHVGRjBDXHU0RUJBXHU1REU1XHU2NjdBXHU4MEZEXHVGRjBDQUkgXHU4ODRDXHU0RTFBXHU4RDhCXHU1MkJGXHVGRjBDQUkgXHU2MjgwXHU2NzJGXHVGRjBDQUkgXHU2NUIwXHU5NUZCXHVGRjBDQUkgXHU1MkE4XHU2MDAxXHVGRjBDQUkgXHU1RTAyXHU1NzNBXHU1MjA2XHU2NzkwXHVGRjBDQUkgXHU2QTIxXHU1NzhCXHVGRjBDQUkgXHU3MkVDXHU1QkI2XHU1MjA2XHU2NzkwXHVGRjBDQUkgXHU2REYxXHU1RUE2XHU4OUUzXHU4QkZCXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgLy8gXHU3NjdFXHU1RUE2XHU3RURGXHU4QkExXG4gICAgW1xuICAgICAgXCJzY3JpcHRcIixcbiAgICAgIHt9LFxuICAgICAgYFxuICAgICAgICB2YXIgX2htdCA9IF9obXQgfHwgW107XG4gICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgIGhtLnNyYyA9IFwiaHR0cHM6Ly9obS5iYWlkdS5jb20vaG0uanM/Njk5OGQ2Mzg1NjJiY2VlZjMwYmUyOTc3NjdlOTFkNjRcIjtcbiAgICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdOyBcbiAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGhtLCBzKTtcbiAgICAgICAgfSkoKTtcbiAgICAgIGAsXG4gICAgXSxcbiAgXSxcbiAgcGVybWFsaW5rOiBcIi86c2x1Z1wiLFxuXG4gIC8vIFx1NzZEMVx1NTQyQ1x1NjU4N1x1NEVGNlx1NTNEOFx1NTMxNlx1RkYwQ1x1NzBFRFx1NjZGNFx1NjVCMFxuICBleHRyYVdhdGNoRmlsZXM6IFtcIi52dWVwcmVzcy8qLnRzXCIsIFwiLnZ1ZXByZXNzL3NpZGViYXJzLyoudHNcIl0sXG4gIG1hcmtkb3duOiB7XG4gICAgLy8gXHU1RjAwXHU1NDJGXHU0RUUzXHU3ODAxXHU1NzU3XHU3Njg0XHU4ODRDXHU1M0Y3XG4gICAgbGluZU51bWJlcnM6IHRydWUsXG4gICAgLy8gXHU2NTJGXHU2MzAxIDQgXHU3RUE3XHU0RUU1XHU0RTBBXHU3Njg0XHU2ODA3XHU5ODk4XHU2RTMyXHU2N0QzXG4gICAgZXh0cmFjdEhlYWRlcnM6IFtcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIl0sXG4gIH0sXG4gIC8vIEB0cy1pZ25vcmVcbiAgcGx1Z2luczogW1xuICAgIFtcIkB2dWVwcmVzcy9iYWNrLXRvLXRvcFwiXSxcbiAgICAvLyBHb29nbGUgXHU1MjA2XHU2NzkwXG4gICAgW1xuICAgICAgXCJAdnVlcHJlc3MvZ29vZ2xlLWFuYWx5dGljc1wiLFxuICAgICAge1xuICAgICAgICBnYTogXCJHVE0tV1ZTOUhNNldcIiwgLy8gXHU4ODY1XHU1MTQ1XHU4MUVBXHU1REYxXHU3Njg0XHU4QzM3XHU2QjRDXHU1MjA2XHU2NzkwIElEXHVGRjBDXHU2QkQ0XHU1OTgyIFVBLTAwMDAwMDAwLTBcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXCJAdnVlcHJlc3MvbWVkaXVtLXpvb21cIl0sXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvcmlzbGVpdmEvdnVlcHJlc3MtcGx1Z2luLXNlb1xuICAgIFtcbiAgICAgIFwic2VvXCIsXG4gICAgICB7XG4gICAgICAgIHNpdGVUaXRsZTogKF8sICRzaXRlKSA9PiAkc2l0ZS50aXRsZSArIFwiIC0gXHU1MTREXHU4RDM5IERlZXBTZWVrIFx1NjU1OVx1N0EwQlx1RkY1Q1x1NURFNVx1NTE3N1x1N0FEOVx1RkY1Q1x1OEQ0NFx1NkU5MFx1NUU5M1wiLFxuICAgICAgICB0aXRsZTogKCRwYWdlKSA9PiAkcGFnZS50aXRsZSArIFwiIC0gXHU1MTREXHU4RDM5IERlZXBTZWVrIFx1NjU1OVx1N0EwQlx1RkY1Q1x1NURFNVx1NTE3N1x1N0FEOVx1RkY1Q1x1OEQ0NFx1NkU5MFx1NUU5M1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogKCRwYWdlKSA9PiAkcGFnZS5mcm9udG1hdHRlci5kZXNjcmlwdGlvbiB8fCAkcGFnZS5kZXNjcmlwdGlvbixcbiAgICAgICAgYXV0aG9yOiAoXywgJHNpdGUpID0+ICRzaXRlLnRoZW1lQ29uZmlnLmF1dGhvciB8fCBhdXRob3IsXG4gICAgICAgIHRhZ3M6ICgkcGFnZSkgPT4gJHBhZ2UuZnJvbnRtYXR0ZXIudGFncyB8fCB0YWdzLFxuICAgICAgICB0eXBlOiAoJHBhZ2UpID0+IFwiYXJ0aWNsZVwiLFxuICAgICAgICB1cmw6IChfLCAkc2l0ZSwgcGF0aCkgPT4gKCRzaXRlLnRoZW1lQ29uZmlnLmRvbWFpbiB8fCBkb21haW4gfHwgXCJcIikgKyBwYXRoLFxuICAgICAgICBpbWFnZTogKCRwYWdlLCAkc2l0ZSkgPT5cbiAgICAgICAgICAkcGFnZS5mcm9udG1hdHRlci5pbWFnZSAmJlxuICAgICAgICAgICgoJHNpdGUudGhlbWVDb25maWcuZG9tYWluICYmICEkcGFnZS5mcm9udG1hdHRlci5pbWFnZS5zdGFydHNXaXRoKFwiaHR0cFwiKSkgfHwgXCJcIikgKyAkcGFnZS5mcm9udG1hdHRlci5pbWFnZSxcbiAgICAgICAgcHVibGlzaGVkQXQ6ICgkcGFnZSkgPT4gJHBhZ2UuZnJvbnRtYXR0ZXIuZGF0ZSAmJiBuZXcgRGF0ZSgkcGFnZS5mcm9udG1hdHRlci5kYXRlKSxcbiAgICAgICAgbW9kaWZpZWRBdDogKCRwYWdlKSA9PiAkcGFnZS5sYXN0VXBkYXRlZCAmJiBuZXcgRGF0ZSgkcGFnZS5sYXN0VXBkYXRlZCksXG4gICAgICB9LFxuICAgIF0sXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vrb2VyeWFudG8vdnVlcHJlc3MtcGx1Z2luLXNpdGVtYXBcbiAgICBbXG4gICAgICBcInNpdGVtYXBcIixcbiAgICAgIHtcbiAgICAgICAgaG9zdG5hbWU6IGRvbWFpbixcbiAgICAgIH0sXG4gICAgXSxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSU9yaWVucy92dWVwcmVzcy1wbHVnaW4tYmFpZHUtYXV0b3B1c2hcbiAgICBbXCJ2dWVwcmVzcy1wbHVnaW4tYmFpZHUtYXV0b3B1c2hcIl0sXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pxOTkyOTkvdnVlcHJlc3MtcGx1Z2luL3RyZWUvbWFzdGVyL3Z1ZXByZXNzLXBsdWdpbi10YWdzXG4gICAgW1widnVlcHJlc3MtcGx1Z2luLXRhZ3NcIl0sXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3puaWNob2xhc2Jyb3duL3Z1ZXByZXNzLXBsdWdpbi1jb2RlLWNvcHlcbiAgICBbXG4gICAgICBcInZ1ZXByZXNzLXBsdWdpbi1jb2RlLWNvcHlcIixcbiAgICAgIHtcbiAgICAgICAgc3VjY2Vzc1RleHQ6IFwiXHU0RUUzXHU3ODAxXHU1REYyXHU1OTBEXHU1MjM2XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYm1hc3RlcmlzaC92dWVwcmVzcy1wbHVnaW4tZmVlZFxuICAgIFtcbiAgICAgIFwiZmVlZFwiLFxuICAgICAge1xuICAgICAgICBjYW5vbmljYWxfYmFzZTogZG9tYWluLFxuICAgICAgICBjb3VudDogMTAwMDAsXG4gICAgICAgIC8vIFx1OTcwMFx1ODk4MVx1ODFFQVx1NTJBOFx1NjNBOFx1OTAwMVx1NzY4NFx1NjU4N1x1Njg2M1x1NzZFRVx1NUY1NVxuICAgICAgICBwb3N0c19kaXJlY3RvcmllczogW10sXG4gICAgICB9LFxuICAgIF0sXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RvbGtpbmcvdnVlcHJlc3MtcGx1Z2luLWltZy1sYXp5XG4gICAgW1wiaW1nLWxhenlcIl0sXG4gIF0sXG4gIC8vIFx1NEUzQlx1OTg5OFx1OTE0RFx1N0Y2RVxuICB0aGVtZUNvbmZpZzoge1xuICAgIGxvZ286IFwiL2xvZ28ucG5nXCIsXG4gICAgbmF2OiBuYXZiYXIsXG4gICAgc2lkZWJhcixcbiAgICBsYXN0VXBkYXRlZDogXCJcdTY3MDBcdThGRDFcdTY2RjRcdTY1QjBcIixcblxuICAgIC8vIEdpdEh1YiBcdTRFRDNcdTVFOTNcdTRGNERcdTdGNkVcbiAgICByZXBvOiBcImxpeXVwaS9haS1ndWlkZVwiLFxuICAgIGRvY3NCcmFuY2g6IFwibWFzdGVyXCIsXG5cbiAgICAvLyBcdTdGMTZcdThGOTFcdTk0RkVcdTYzQTVcbiAgICBlZGl0TGlua3M6IHRydWUsXG4gICAgZWRpdExpbmtUZXh0OiBcIlx1NUI4Q1x1NTU4NFx1OTg3NVx1OTc2MlwiLFxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIC8vIFx1NUU5NVx1OTBFOFx1NzI0OFx1Njc0M1x1NEZFMVx1NjA2RlxuICAgIGZvb3RlcixcbiAgICAvLyBcdTk4OURcdTU5MTZcdTUzRjNcdTRGQTdcdThGQjlcdTY4MEZcbiAgICBleHRyYVNpZGVCYXIsXG4gIH0sXG59KTtcbiIsICIvKipcbiAqIFx1OTg5RFx1NTkxNlx1NTNGM1x1NEZBN1x1OEZCOVx1NjgwRlxuICovXG5leHBvcnQgZGVmYXVsdCBbXG4gIHtcbiAgICB0aXRsZTogXCJcdTdGMTZcdTdBMEJcdTVCRkNcdTgyMkFcIixcbiAgICBpY29uOiBcIi9pY29uL3hpbmdxaXUucG5nXCIsXG4gICAgcG9wb3ZlclRpdGxlOiBcIlx1NUZBRVx1NEZFMVx1NjI2Qlx1NEUwMFx1NjI2QlwiLFxuICAgIHBvcG92ZXJVcmw6IFwiL3FyY29kZS1jb2RlZmF0aGVyLnBuZ1wiLFxuICAgIHBvcG92ZXJEZXNjOiBcIlx1N0YxNlx1N0EwQlx1NUJGQ1x1ODIyQVx1RkYxQVx1N0YxNlx1N0EwQlx1NUJGQ1x1ODIyQVwiLFxuICB9LFxuICAvLyB7XG4gIC8vICAgdGl0bGU6IFwiXHU3RjE2XHU3QTBCXHU1QkZDXHU4MjJBXCIsXG4gIC8vICAgaWNvbjogXCIvaWNvbi94aW5ncWl1LnBuZ1wiLFxuICAvLyAgIHBvcG92ZXJUaXRsZTpcbiAgLy8gICAgICc8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTowLjhyZW07Zm9udC13ZWlnaHQ6Ym9sZDtcIj48c3BhbiBzdHlsZT1cImNvbG9yOnJlZDtcIj5cdTRGRERcdTU5QzZcdTdFQTdcdTVCOUVcdTYyMThcdTk4NzlcdTc2RUVcdTY1NTlcdTdBMEI8L3NwYW4+XHUzMDAxXHU3RjE2XHU3QTBCXHU1QjY2XHU0RTYwXHU2MzA3XHU1MzU3XHUzMDAxXHU1QjY2XHU0RTYwXHU4RDQ0XHU2RTkwXHUzMDAxXHU2QzQyXHU4MDRDXHU2MzA3XHU1MzU3XHUzMDAxXHU2MjgwXHU2NzJGXHU1MjA2XHU0RUFCXHUzMDAxXHU3RjE2XHU3QTBCXHU0RUE0XHU2RDQxPC9zcGFuPicsXG4gIC8vICAgcG9wb3ZlclVybDpcbiAgLy8gICAgIFwiL3FyY29kZS1jb2RlbmF2LnBuZ1wiLFxuICAvLyAgIHBvcG92ZXJEZXNjOiBcIlx1N0YxNlx1N0EwQlx1NUJGQ1x1ODIyQVx1RkYxQVx1N0YxNlx1N0EwQlx1NUJGQ1x1ODIyQVwiLFxuICAvLyB9LFxuICB7XG4gICAgdGl0bGU6IFwiXHU0RUE0XHU2RDQxXHU3RkE0XCIsXG4gICAgaWNvbjogXCIvaWNvbi93ZWl4aW4ucG5nXCIsXG4gICAgcG9wb3ZlclRpdGxlOlxuICAgICAgJzxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjAuOHJlbTtmb250LXdlaWdodDpib2xkO1wiPlx1NjI2Qlx1NzgwMVx1NkRGQlx1NTJBMCA8c3BhbiBzdHlsZT1cImNvbG9yOnJlZDtcIj5cdTdGMTZcdTdBMEJcdTVCRkNcdTgyMkFcdTVDMEZcdTUyQTlcdTYyNEJcdTVGQUVcdTRGRTE8L3NwYW4+XHVGRjBDXHU2MkM5XHU0RjYwXHU4RkRCXHU0RTEzXHU1QzVFXHU3RjE2XHU3QTBCXHU1QjY2XHU0RTYwXHU0RUE0XHU2RDQxXHU3RkE0PC9zcGFuPicsXG4gICAgcG9wb3ZlclVybDogXCIvcXJjb2RlLWNvZGVuYXZoZWxwZXIucG5nXCIsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogXCJcdTRFMEJcdThENDRcdTY1OTlcIixcbiAgICBpY29uOiBcIi9pY29uL3hpYXphaS5wbmdcIixcbiAgICBwb3BvdmVyVGl0bGU6XG4gICAgICAnPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44cmVtO2ZvbnQtd2VpZ2h0OmJvbGQ7XCI+XHU2MjZCXHU3ODAxXHU1MTczXHU2Q0U4XHU1MTZDXHU0RjE3XHU1M0Y3XHVGRjBDXHU1NkRFXHU1OTBEIDxzcGFuIHN0eWxlPVwiY29sb3I6cmVkO1wiPmFpPC9zcGFuPiBcdTgzQjdcdTUzRDZcdTZFMDVcdTUzNEVcdTU5MjdcdTVCNjYgRGVlcFNlZWsgXHU0RUNFXHU1MTY1XHU5NUU4XHU1MjMwXHU3Q0JFXHU5MDFBIFBERjwvc3Bhbj4nLFxuICAgIHBvcG92ZXJVcmw6IFwiL3FyY29kZS1tcGNvZGVyX3l1cGkuanBnXCIsXG4gICAgcG9wb3ZlckRlc2M6IFwiXHU1MTZDXHU0RjE3XHU1M0Y3OiBcdTdBMEJcdTVFOEZcdTU0NThcdTlDN0NcdTc2QUVcIixcbiAgfSxcbiAge1xuICAgIHRpdGxlOiBcIlx1NjUyRlx1NjMwMVx1NjIxMVwiLFxuICAgIGljb246IFwiL2ljb24vZGlhbnphbi5wbmdcIixcbiAgICBwb3BvdmVyVGl0bGU6ICcgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44cmVtO2ZvbnQtd2VpZ2h0OmJvbGQ7XCI+XHU5RjEzXHU1MkIxXHU1NDhDXHU4RDVFXHU4RDRGXHU2MjExPC9zcGFuPicsXG4gICAgcG9wb3ZlclVybDogXCIvcXJjb2RlLXRodW1iLmpwZ1wiLFxuICAgIHBvcG92ZXJEZXNjOiBcIlx1NjExRlx1OEMyMlx1NjBBOFx1NzY4NFx1NjUyRlx1NjMwMVx1RkYwQ1x1NEY1Q1x1ODAwNVx1NTkzNFx1NTNEMSsrXCIsXG4gIH0sXG5dO1xuIiwgIi8qKlxuICogXHU1RTk1XHU5MEU4XHU3MjQ4XHU2NzQzXHU0RkUxXHU2MDZGXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZnJpZW5kTGlua3M6IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCJcdTdBRDlcdTk1N0YgLSBcdTdBMEJcdTVFOEZcdTU0NThcdTlDN0NcdTc2QUVcIixcbiAgICAgIC8vIGljb246IFwiL2ljb24vdXNlci5zdmdcIixcbiAgICAgIGhyZWY6IFwiaHR0cHM6Ly95dXl1YW53ZWIuZmVpc2h1LmNuL3dpa2kvQWJsZHc1V2tqaWR5U3hrS3hVMmNRZEF0bmFoXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCJcdTlDN0NcdTlFMjJcdTdGNTFcdTdFRENcIixcbiAgICAgIGhyZWY6IFwiaHR0cHM6Ly95dXl1YW53ZWIuY29tL1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiXHU4MDAxXHU5QzdDXHU3QjgwXHU1Mzg2XCIsXG4gICAgICBocmVmOiBcImh0dHBzOi8vd3d3Lmxhb3l1amlhbmxpLmNvbS9cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBcIlx1OTc2Mlx1OEJENVx1OUUyRFwiLFxuICAgICAgaHJlZjogXCJodHRwczovL3d3dy5taWFuc2hpeWEuY29tL1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiXHU3RjE2XHU3QTBCXHU1QjY2XHU0RTYwXHU1NzA4XCIsXG4gICAgICBocmVmOiBcImh0dHBzOi8vd3d3LmNvZGVmYXRoZXIuY24vXCIsXG4gICAgfSxcbiAgXSxcbiAgY29weXJpZ2h0OiB7XG4gICAgaHJlZjogXCJodHRwczovL2JlaWFuLm1paXQuZ292LmNuL1wiLFxuICAgIG5hbWU6IFwiXHU2Q0FBSUNQXHU1OTA3MTkwMjY3MDZcdTUzRjctNlwiLFxuICB9LFxufTtcbiIsICJpbXBvcnQgeyBOYXZJdGVtIH0gZnJvbSBcInZ1ZXByZXNzL2NvbmZpZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBbXG4gIHtcbiAgICB0ZXh0OiBcIkFJIFx1OTg3OVx1NzZFRVwiLFxuICAgIGl0ZW1zOiBbXG4gICAgICB7XG4gICAgICAgIHRleHQ6IFwiQUkgXHU2RDc3XHU5RjlGXHU2QzY0XHU5ODc5XHU3NkVFXHU2NTU5XHU3QTBCXCIsXG4gICAgICAgIGxpbms6IFwiL2FpLVx1NkQ3N1x1OUY5Rlx1NkM2NFx1OTg3OVx1NzZFRVx1NjU1OVx1N0EwQi9cIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6IFwiQUkgKyBDdXJzb3IgXHU1RjAwXHU1M0QxXHU0RTAwXHU0RTJBXHU0RUIyXHU2MjFBXHU4QkExXHU3Qjk3XHU1NjY4XCIsXG4gICAgICAgIGxpbms6IFwiL2FpLWN1cnNvci1cdTVGMDBcdTUzRDFcdTRFMDBcdTRFMkFcdTRFQjJcdTYyMUFcdThCQTFcdTdCOTdcdTU2NjgvXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiBcIkFJICsgQ3Vyc29yIFx1NUYwMFx1NTNEMVx1NEUwMFx1NEUyQVx1NkEyMVx1NjJERlx1OTc2Mlx1OEJENVx1N0NGQlx1N0VERlwiLFxuICAgICAgICBsaW5rOiBcIi9haS1jdXJzb3ItXHU1RjAwXHU1M0QxXHU0RTAwXHU0RTJBXHU2QTIxXHU2MkRGXHU5NzYyXHU4QkQ1XHU3Q0ZCXHU3RURGL1wiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDogXCJBSSArIEN1cnNvciBcdTVGMDBcdTUzRDFcdTRFMDBcdTRFMkFcdTgwQkFcdTZEM0JcdTkxQ0ZcdTZENEJcdThCRDVcdTU2NjhcIixcbiAgICAgICAgbGluazogXCIvYWktY3Vyc29yLVx1NUYwMFx1NTNEMVx1NEUwMFx1NEUyQVx1ODBCQVx1NkQzQlx1OTFDRlx1NkQ0Qlx1OEJENVx1NTY2OC9cIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6IFwiXHVEODNEXHVERDI1IFx1NEYwMVx1NEUxQVx1N0VBN1x1OTg3OVx1NzZFRVx1RkYxQVx1NUYwMFx1NTNEMSBBSSBcdTYwNEJcdTcyMzFcdTU5MjdcdTVFMDhcdTVFOTRcdTc1MjggKyBcdTYyRTVcdTY3MDlcdTgxRUFcdTRFM0JcdTg5QzRcdTUyMTJcdTgwRkRcdTUyOUJcdTc2ODRcdThEODVcdTdFQTdcdTY2N0FcdTgwRkRcdTRGNTNcIixcbiAgICAgICAgbGluazogXCIvXHVEODNEXHVERDI1LVx1NEYwMVx1NEUxQVx1N0VBN1x1OTg3OVx1NzZFRS1cdTVGMDBcdTUzRDEtYWktXHU2MDRCXHU3MjMxXHU1OTI3XHU1RTA4XHU1RTk0XHU3NTI4LVx1NjJFNVx1NjcwOVx1ODFFQVx1NEUzQlx1ODlDNFx1NTIxMlx1ODBGRFx1NTI5Qlx1NzY4NFx1OEQ4NVx1N0VBN1x1NjY3QVx1ODBGRFx1NEY1My9cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIHRleHQ6IFwiRGVlcHNlZWtcIixcbiAgICBpdGVtczogW1xuICAgICAge1xuICAgICAgICB0ZXh0OiBcIlx1NTE3M1x1NEU4RURlZXBTZWVrXCIsXG4gICAgICAgIGxpbms6IFwiL0RlZXBzZWVrLyNcdTUxNzNcdTRFOEVkZWVwc2Vla1wiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDogXCJEZWVwU2VlayBcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTdcIixcbiAgICAgICAgbGluazogXCIvYWkvI2RlZXBzZWVrXHU0RjdGXHU3NTI4XHU2MzA3XHU1MzU3XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiBcIkFJIFx1NUU5NFx1NzUyOFx1NTczQVx1NjY2RlwiLFxuICAgICAgICBsaW5rOiBcIi9haS8jYWlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkZcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6IFwiRGVlcFNlZWsgXHU4RDQ0XHU2RTkwXHU2QzQ3XHU2MDNCXCIsXG4gICAgICAgIGxpbms6IFwiL2FpLyNkZWVwc2Vla1x1OEQ0NFx1NkU5MFx1NkM0N1x1NjAzQlwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDogXCJEZWVwU2VlayBcdTYyODBcdTY3MkZcdTg5RTNcdTY3OTBcIixcbiAgICAgICAgbGluazogXCIvYWkvI2RlZXBzZWVrXHU2MjgwXHU2NzJGXHU4OUUzXHU2NzkwXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiBcIkFJIFx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRlwiLFxuICAgICAgICBsaW5rOiBcIi9haS8jYWlcdTg4NENcdTRFMUFcdThENDRcdThCQUZcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIHRleHQ6IFwiXHVEODNEXHVERDI1XHU3RjE2XHU3QTBCXHU1QjY2XHU0RTYwXCIsXG4gICAgbGluazogXCJodHRwczovL3d3dy5jb2RlZmF0aGVyLmNuL1wiLFxuICB9LFxuICB7XG4gICAgdGV4dDogXCJBSSBcdTk3NjJcdThCRDVcdTk4OThcdTVFOTNcIixcbiAgICBsaW5rOiBcImh0dHBzOi8vd3d3Lm1pYW5zaGl5YS5jb20vP2NhdGVnb3J5PWFpXCIsXG4gIH0sXG4gIHtcbiAgICB0ZXh0OiBcIlx1NEY1Q1x1ODAwNVwiLFxuICAgIGxpbms6IFwiL1x1NEY1Q1x1ODAwNS9cIixcbiAgfSxcbl0gYXMgTmF2SXRlbVtdO1xuIiwgIlxuZXhwb3J0IGRlZmF1bHQgW1xuICBcIlwiLFxuICB7XG4gICAgXCJ0aXRsZVwiOiBcIlx1OUM3Q1x1NzZBRVx1NzY4NCBBSSBcdTYzMDdcdTUzNTdcIixcbiAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICBcIlx1OUM3Q1x1NzZBRVx1NzY4NCBBSSBcdTYzMDdcdTUzNTcvXHU5QzdDXHU3NkFFXHU3Njg0IEFJIFx1NjMwN1x1NTM1NyAtIDBcdTMwMDFcdTVGMDBcdTdCQzdcIixcbiAgICAgIFwiXHU5QzdDXHU3NkFFXHU3Njg0IEFJIFx1NjMwN1x1NTM1Ny9cdTlDN0NcdTc2QUVcdTc2ODQgQUkgXHU2MzA3XHU1MzU3IC0gMVx1MzAwMUFJIFx1NjgzOFx1NUZDM1x1Njk4Mlx1NUZGNVwiLFxuICAgICAgXCJcdTlDN0NcdTc2QUVcdTc2ODQgQUkgXHU2MzA3XHU1MzU3L1x1OUM3Q1x1NzZBRVx1NzY4NCBBSSBcdTYzMDdcdTUzNTcgLSAyXHUzMDAxQUkgXHU1QjlFXHU3NTI4XHU1REU1XHU1MTc3XCIsXG4gICAgICBcIlx1OUM3Q1x1NzZBRVx1NzY4NCBBSSBcdTYzMDdcdTUzNTcvXHU5QzdDXHU3NkFFXHU3Njg0IEFJIFx1NjMwN1x1NTM1NyAtIDNcdTMwMDFBSSBcdTdGMTZcdTdBMEJcdTYyODBcdTVERTdcIixcbiAgICAgIFwiXHU5QzdDXHU3NkFFXHU3Njg0IEFJIFx1NjMwN1x1NTM1Ny9cdTlDN0NcdTc2QUVcdTc2ODQgQUkgXHU2MzA3XHU1MzU3IC0gNFx1MzAwMUFJIFx1N0YxNlx1N0EwQlx1NjI4MFx1NjcyRlwiXG4gICAgXVxuICB9LFxuICB7XG4gICAgXCJ0aXRsZVwiOiBcIkFJXHU5ODc5XHU3NkVFXHU2NTU5XHU3QTBCXCIsXG4gICAgXCJjb2xsYXBzYWJsZVwiOiB0cnVlLFxuICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAgXCJBSVx1OTg3OVx1NzZFRVx1NjU1OVx1N0EwQi9BSSBcdTZENzdcdTlGOUZcdTZDNjRcdTk4NzlcdTc2RUVcdTY1NTlcdTdBMEJcIixcbiAgICAgIFwiQUlcdTk4NzlcdTc2RUVcdTY1NTlcdTdBMEIvQUkgKyBDdXJzb3IgXHU1RjAwXHU1M0QxXHU0RTAwXHU0RTJBXHU0RUIyXHU2MjFBXHU4QkExXHU3Qjk3XHU1NjY4XCIsXG4gICAgICBcIkFJXHU5ODc5XHU3NkVFXHU2NTU5XHU3QTBCL0FJICsgQ3Vyc29yIFx1NUYwMFx1NTNEMVx1NEUwMFx1NEUyQVx1NkEyMVx1NjJERlx1OTc2Mlx1OEJENVx1N0NGQlx1N0VERlwiLFxuICAgICAgXCJBSVx1OTg3OVx1NzZFRVx1NjU1OVx1N0EwQi9BSSArIEN1cnNvciBcdTVGMDBcdTUzRDFcdTRFMDBcdTRFMkFcdTgwQkFcdTZEM0JcdTkxQ0ZcdTZENEJcdThCRDVcdTU2NjhcIixcbiAgICAgIFwiQUlcdTk4NzlcdTc2RUVcdTY1NTlcdTdBMEIvXHVEODNEXHVERDI1IFx1NEYwMVx1NEUxQVx1N0VBN1x1OTg3OVx1NzZFRVx1RkYxQVx1NUYwMFx1NTNEMSBBSSBcdTYwNEJcdTcyMzFcdTU5MjdcdTVFMDhcdTVFOTRcdTc1MjggKyBcdTYyRTVcdTY3MDlcdTgxRUFcdTRFM0JcdTg5QzRcdTUyMTJcdTgwRkRcdTUyOUJcdTc2ODRcdThEODVcdTdFQTdcdTY2N0FcdTgwRkRcdTRGNTNcIixcbiAgICBdXG4gIH0sXG4gIHtcbiAgICBcInRpdGxlXCI6IFwiXHU1MTczXHU0RThFRGVlcFNlZWtcIixcbiAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICBcIlx1NTE3M1x1NEU4RURlZXBTZWVrL0RlZXBTZWVrIFx1NTIxQlx1NTlDQlx1NTZFMlx1OTYxRlx1NEVDQlx1N0VDRFwiLFxuICAgICAgXCJcdTUxNzNcdTRFOEVEZWVwU2Vlay9EZWVwU2VlayBcdTUzRDFcdTVDNTVcdTUzODZcdTdBMEJcIixcbiAgICAgIFwiXHU1MTczXHU0RThFRGVlcFNlZWsvXHU0RUMwXHU0RTQ4XHU2NjJGIERlZXBTZWVrXCJcbiAgICBdXG4gIH0sXG4gIHtcbiAgICBcInRpdGxlXCI6IFwiRGVlcFNlZWtcdThENDRcdTZFOTBcdTZDNDdcdTYwM0JcIixcbiAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICBcIkRlZXBTZWVrXHU4RDQ0XHU2RTkwXHU2QzQ3XHU2MDNCL0RlZXBTZWVrXHU1Qjk4XHU2NUI5XHU2NTc0XHU3NDA2XHU3Njg0XHU2QTIxXHU1NzhCXHU1RTk0XHU3NTI4XHU1NDhDXHU1REU1XHU1MTc3XCIsXG4gICAgICBcIkRlZXBTZWVrXHU4RDQ0XHU2RTkwXHU2QzQ3XHU2MDNCL0RlZXBTZWVrIFx1NUI2Nlx1NEU2MFx1OEQ0NFx1NjU5OVwiLFxuICAgICAgXCJEZWVwU2Vla1x1OEQ0NFx1NkU5MFx1NkM0N1x1NjAzQi9EZWVwU2VlayBcdTVCOThcdTY1QjlcdTk0RkVcdTYzQTVcIixcbiAgICAgIFwiRGVlcFNlZWtcdThENDRcdTZFOTBcdTZDNDdcdTYwM0IvRGVlcFNlZWsgXHU1RjAwXHU2RTkwXHU5ODc5XHU3NkVFXCJcbiAgICBdXG4gIH0sXG4gIHtcbiAgICBcInRpdGxlXCI6IFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUZcIixcbiAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICB7XG4gICAgICAgIFwidGl0bGVcIjogXCIyMDI1LTExXCIsXG4gICAgICAgIFwiY29sbGFwc2FibGVcIjogdHJ1ZSxcbiAgICAgICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTExLzIwMjUgXHU1RTc0IDExIFx1NjcwOCBBSSBcdThENDRcdThCQUZcdTZDNDdcdTYwM0JcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJ0aXRsZVwiOiBcIjIwMjUtMTBcIixcbiAgICAgICAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgICAgICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMTAvMjAyNSBcdTVFNzQgMTAgXHU2NzA4IEFJIFx1OEQ0NFx1OEJBRlx1NkM0N1x1NjAzQlwiXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJ0aXRsZVwiOiBcIjIwMjUtMDlcIixcbiAgICAgICAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgICAgICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDkvMjAyNSBcdTVFNzQgOSBcdTY3MDggQUkgXHU4RDQ0XHU4QkFGXHU2QzQ3XHU2MDNCXCJcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCIyMDI1LTA4XCIsXG4gICAgICAgICAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDgvQ2hhdEV4Y2VsXHU4M0I3XHU4RkQxXHU1MzQzXHU0RTA3XHU1OTI5XHU0RjdGXHU4RjZFXHU4NzhEXHU4RDQ0XHVGRjBDXHU1MTY4XHU5NEZFXHU4REVGQUkgRGF0YUFnZW50XHU0RUNFXHU2NTcwXHU2MzZFXHU4M0I3XHU1M0Q2XHU1MjMwXHU0RUY3XHU1MDNDXHU0RUE0XHU2NjEzXHU2MjUzXHU5MDIwXHU1NTQ2XHU0RTFBXHU5NUVEXHU3M0FGXHU1RTczXHU1M0YwXCIsXG4gICAgICAgICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA4L0RlZXBTZWVrIEFwcCBcdTY2RjRcdTY1QjBcdTgxRjMgMS4zLjAgXHU3MjQ4XHU2NzJDXHVGRjBDXHU2NUIwXHU1ODlFXHU1QkY5XHU4QkREXHU3NTFGXHU2MjEwXHU1MjA2XHU0RUFCXHU1NkZFXHU1MjlGXHU4MEZEXCIsXG4gICAgICAgICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA4L0tpbWkgXHU5RTNGXHU4NDk5XHU3MjQ4IEFwcCBcdTRGNTNcdTlBOENcdTUzNDdcdTdFQTdcdUZGMENcdTRGN0ZcdTc1MjhcdTUzNEVcdTRFM0FcdTRFRDNcdTk4ODkgbWFya2Rvd24gXHU4OUUzXHU2NzkwXHU1RjE1XHU2NENFXHU2RUQxXHU1MkE4XHU1RTI3XHU3Mzg3XHU2M0QwXHU1MzQ3XHU4MUYzIDIuNCBcdTUwMERcIixcbiAgICAgICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDgvT3BlbkFJIENGT1x1OTAwRlx1OTczMlx1NTE2Q1x1NTNGOFx1NTcyOFx1ODAwM1x1ODY1MUlQTyBcdTY3MDlcdTY3MUJcdTYyMTBcdTc5RDFcdTYyODBcdTk4ODZcdTU3REZcdTY3MDBcdTU5MjdcdTg5QzRcdTZBMjFJUE9cIixcbiAgICAgICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDgvXHU0RjFBXHU1OTM0XHU4MTExXHU5OENFXHU2NkI0XHU3Njg0IEFJIFx1MjAxNCBcdTU2RkRcdTUxODVcdTk5OTZcdTRFMkFcdTVFNzZcdTg4NENcdTYwMURcdTgwMDNcdTZBMjFcdTU3OEIgXHU5NUVFXHU1QzBGXHU3NjdEbzQgXHU2NzY1XHU1NTY2XHVGRjAxXCIsXG4gICAgICAgICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA4L1x1NTM0RVx1NEVCQVx1NTZFMlx1OTYxRlx1NzgzNFx1ODlFM1Rva2VuXHU5NjUwXHU1MjM2XHVGRjBDXHU2MjY5XHU2NTYzXHU2QTIxXHU1NzhCXHU3Njg0XHU2RjVDXHU1MjlCXHU4RDg1XHU4RDhBXHU4MUVBXHU1NkRFXHU1RjUyXHU0RTA5XHU1MDBEXHVGRjAxXCIsXG4gICAgICAgICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA4L1x1NjYwNlx1NEVEMVx1NEUwN1x1N0VGNFx1NTNEMVx1NUUwM1NreXdvcmsgRGVlcCBSZXNlYXJjaCBBZ2VudCB2MlwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wOC9cdTY2N0FcdTUxNDNcdTY3M0FcdTU2NjhcdTRFQkFcdTUzRDFcdTVFMDNcdTcwNzVcdTUyMUJcdTVFNzNcdTUzRjBcdUZGMUFcdTdBMUFcdTY2NTZcdTU0MUJcdTVCQTNcdTVFMDNcdTY3M0FcdTU2NjhcdTRFQkFcdTRFOENcdTZCMjFcdTVGMDBcdTUzRDFcdTIwMUMwIFx1OTVFOFx1NjlEQlx1MjAxRFx1NUMwNlx1ODFGM1x1RkYwQ1x1NTkyN1x1NUU0NVx1OTY0RFx1NEY0RVx1NTJBOFx1NEY1Q1x1N0YxNlx1NjM5Mlx1OTZCRVx1NUVBNlwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wOC9cdTgxN0VcdThCQUYgQ29kZUJ1ZGR5IElERSBcdTRFRTNcdTc4MDFcdTUyQTlcdTYyNEJcdTU2RkRcdTUxODVcdTcyNDhcdTUxNkNcdTZENEJcdUZGMENEZWVwU2Vlay1WMy4xIFx1NjcwMFx1NjVCMFx1NkEyMVx1NTc4Qlx1NTE0RFx1OEQzOVx1NzUyOFwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wOC9cdTk0ODlcdTk0ODlcdTgwNTRcdTYyNEJcdTkwMUFcdTRFNDlcdTYzQThcdTUxRkFGdW4tQVNSXHU4QkVEXHU5N0YzXHU4QkM2XHU1MjJCXHU1OTI3XHU2QTIxXHU1NzhCXHVGRjBDXHU1M0VGXHU1NDJDXHU2MUMyXHU1QkI2XHU1QzQ1XHUzMDAxXHU3NTVDXHU3MjY3XHU3QjQ5XHU1MzQxXHU1OTI3XHU4ODRDXHU0RTFBXHU5RUQxXHU4QkREXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIjIwMjUtMDdcIixcbiAgICAgICAgICAgIFwiY29sbGFwc2FibGVcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNy85Qlx1MjAxQ1x1NUMwRlx1MjAxRFx1NkEyMVx1NTc4Qlx1NUU3Mlx1NEU4Nlx1Nzk2OFx1MjAxQ1x1NTkyN1x1MjAxRFx1NzY4NFx1RkYxQVx1NjAyN1x1ODBGRFx1OEQ4NThcdTUwMERcdTUzQzJcdTY1NzBcdTZBMjFcdTU3OEJcdUZGMENcdTYyRkZcdTRFMEIyM1x1OTg3OVNPVEFcdTY2N0FcdThDMzFcdTVGMDBcdTZFOTBcIixcbiAgICAgICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDcvT3BlbkFJIFx1NTI0RCBDVE9cdTc2ODRBSVx1NTE2Q1x1NTNGOFRoaW5raW5nIE1hY2hpbmVzIExhYiBcdTgzQjdcdTVGOTcgMjAgXHU0RUJGXHU3RjhFXHU1MTQzXHU4NzhEXHU4RDQ0XHVGRjBDXHU0RjMwXHU1MDNDXHU4RkJFIDEyMCBcdTRFQkZcdTdGOEVcdTUxNDNcIixcbiAgICAgICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDcvWCBcdTVFNzNcdTUzRjBcdTVDMDZcdTUxNDFcdThCQjggQUkgXHU2NzNBXHU1NjY4XHU0RUJBXHU2NEIwXHU1MTk5XHU3OTNFXHU1MzNBXHU2Q0U4XHU5MUNBXHVGRjBDXHU3NTMxXHU3NTI4XHU2MjM3XHU1M0NEXHU5OTg4XHU1MUIzXHU1QjlBXHU3NkY4XHU1RTk0XHU1MTg1XHU1QkI5XHU2NjJGXHU1NDI2XHU1MTZDXHU1RjAwXHU1QzU1XHU3OTNBXCIsXG4gICAgICAgICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA3L1x1NEUwRFx1OEQ3MFx1NUJGQlx1NUUzOFx1OERFRlx1NzY4NFx1NkREOFx1NTkyOVx1NjI4MFx1NjcyRlx1ODI4Mlx1RkYxQUFJXHU3MkZDXHU0RUJBXHU2NzQwXHUzMDAxUG9zdGVyXHU4REVGXHU2RjE0XHUzMDAxXHU1MzVBXHU4OUMxXHU3OTNFXHU4RjZFXHU3NTZBXHU0RTBBXHU5NjM1XCIsXG4gICAgICAgICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA3L1x1NTE2OFx1NjgwOFx1NTZGRFx1NEVBN1x1NTMxNlx1NjI4MFx1NjcyRlx1OTVFRFx1NzNBRlx1NTIxRFx1NkI2NVx1OEQyRlx1OTAxQVx1RkYxQVx1OTRGNlx1NkNCM1x1OUU5Mlx1OUU5Rlx1NjRDRFx1NEY1Q1x1N0NGQlx1N0VERlx1NEUwRVx1NjU4N1x1NUZDMyA0LjUgXHU3Q0ZCXHU1MjE3XHU2QTIxXHU1NzhCXHU1RjAwXHU1QzU1XHU2REYxXHU1RUE2XHU2MjgwXHU2NzJGXHU1NDA4XHU0RjVDXCIsXG4gICAgICAgICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA3L1x1NTIxQVx1NTIxQVx1RkYwQ01ldGFcdTVCQTNcdTVFMDNcdTZCNjNcdTVGMEZcdTYyMTBcdTdBQ0JcdTMwMENcdThEODVcdTdFQTdcdTY2N0FcdTgwRkRcdTVCOUVcdTlBOENcdTVCQTRcdTMwMERcdUZGMDExMVx1NEVCQVx1OEM2QVx1NTM0RVx1NTZFMlx1OTYxRlx1OTk5Nlx1NjZERFx1NTE0OVwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNy9cdTVGQUVcdThGNkZcdTg4QUJcdTY2RERcdTVDMDZcdTIwMUNBSSBcdTRGN0ZcdTc1MjhcdTkxQ0ZcdTIwMURcdTdFQjNcdTUxNjVcdTU0NThcdTVERTVcdTgwMDNcdTY4MzhcdUZGMUFcdTRFMERcdTUxOERcdTY2MkZcdTIwMUNcdTUzRUZcdTkwMDlcdTk4NzlcdTIwMURcdUZGMENcdTc2RjRcdTYzQTVcdTYzMDJcdTk0QTlcdTdFRTlcdTY1NDhcIixcbiAgICAgICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDcvXHU4MkYxXHU3Mjc5XHU1QzE0IERheTAgXHU1QjhDXHU2MjEwXHU2NTg3XHU1RkMzXHU1OTI3XHU2QTIxXHU1NzhCIDQuNSBcdTdDRkJcdTUyMTdcdTVGMDBcdTZFOTBcdTZBMjFcdTU3OEJcdTc2ODRcdTdBRUZcdTRGQTdcdTkwRThcdTdGNzJcIixcbiAgICAgICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDcvXHU4MzYzXHU4MDAwXHU2M0E4XHU1MUZBIEFJIENvbm5lY3QgXHU1RTczXHU1M0YwXHVGRjFBXHU2NTJGXHU2MzAxIE1DUCBcdTU0OEMgQTJBIFx1NTM0Rlx1OEJBRVx1RkYwQ1x1ODA1NFx1NTQwOFx1OTYzRlx1OTFDQ1x1MzAwMVx1NkJENFx1NEU5QVx1OEZFQVx1MzAwMVx1N0Y4RVx1NzY4NFwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNy9cdTlBNkNcdTY1QUZcdTUxNEIgeEFJIFx1NTE2Q1x1NTNGOFx1ODg2NVx1NTE0NSAxMDAgXHU0RUJGXHU3RjhFXHU1MTQzXHUyMDFDXHU1RjM5XHU4MzZGXHUyMDFEXHVGRjBDXHU3MDZCXHU1MjlCXHU4MDVBXHU3MTI2XHU2MjUzXHU5MDIwXHU1NzMwXHU4ODY4XHU2NzAwXHU1RjNBIEFJXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIjIwMjUtMDZcIixcbiAgICAgICAgICAgIFwiY29sbGFwc2FibGVcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNi9cdTMwMENcdTVFOTNcdTUxNEJcdTYzQTVcdTczRURcdTRFQkFcdTMwMERcdTVCOThcdTVCQTNcdTkwMDBcdTRGMTFcdUZGMUFcdTgyRjlcdTY3OUNcdTRFOENcdTUzRjdcdTRFQkFcdTcyNjlcdUZGMENcdTRFM0JcdTVCRkNBcHBsZSBXYXRjaFx1OEJERVx1NzUxRlwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNi9cdTZFMkZcdTgwQTFcdTRFMDBcdTU5MjlcdTY1NzJcdTUxNkRcdTRFMkFcdTk1MjNcdUZGMDFcdTIwMUNcdTRFRDNcdTUwQThcdTY3M0FcdTU2NjhcdTRFQkFcdTdCMkNcdTRFMDBcdTgwQTFcdTIwMURcdTY3ODFcdTY2N0FcdTU2MDlJUE9cdTk5OTZcdTY1RTVcdTVFMDJcdTUwM0NcdThEODUyMTBcdTRFQkZcIixcbiAgICAgICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDYvXHU5NUVEXHU2RTkwXHU0RTNCXHU1MjlCXHU5MDA5XHU2MjRCXHU2MkU1XHU2MkIxXHU1RjAwXHU2RTkwXHVGRjFGT3BlbkFJIFx1ODhBQlx1NjZERFx1NjcwMFx1NUZFQlx1NEUwQlx1NTQ2OFx1NjNBOFx1NUYwMFx1NkU5MCBBSSBcdTZBMjFcdTU3OEJcdUZGMENvMyBtaW5pIFx1N0VBN1x1NjNBOFx1NzQwNlx1ODBGRFx1NTI5QlwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNi9cdTUxNjhcdTY1QjBBSVx1ODg2OFx1NjgzQ1x1RkYwQ1x1Njc2NVx1NEU4Nlx1RkYwMVwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNi9PcGVuQUkgXHU4RkM0XHU0RUNBXHU2NzAwXHU1OTI3XHU0RUE0XHU2NjEzXHU4NDNEXHU1NzMwXHVGRjBDNjUgXHU0RUJGXHU3RjhFXHU1MTQzXHU1QjhDXHU2MjEwXHU2NTM2XHU4RDJEXHU1MjREXHU4MkY5XHU2NzlDXHU5OTk2XHU1RTJEXHU4QkJFXHU4QkExXHU1RTA4IEpvbnkgSXZlIFx1NzY4NFx1NTIxRFx1NTIxQlx1NTE2Q1x1NTNGOCBpb1wiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNi9cdThGRDlcdTVDNEE5ODVcdTZCRDVcdTRFMUFcdTc1MUZcdTc2RjRcdTY0QURcdTVFMjZcdThEMjdcdTRFMDBcdTYyOEFcdTU5N0RcdTYyNEJcdUZGMDE1MFx1NEY1OVx1NkIzRVx1NEVBN1x1NTRDMVx1NzBFRFx1OTUwMFx1NTE2OFx1N0Y1MVx1NEY5Qlx1NEUwRFx1NUU5NFx1NkM0MlwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNi9cdTRFMEFcdTY4NENcdUZGMDFcdTUyOUVcdTUxNkNcdTVDMEZcdTZENjNcdTcxOEEgXHUwMEI3IFx1Njg0Q1x1OTc2Mlx1NzI0OFx1NTE2OFx1NjVCMFx1NEUwQVx1N0VCRlx1RkYwMVwiLFxuICAgICAgICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNi9cdTZEODhcdTYwNkZcdTc5RjBcdTgyRjFcdTRGMUZcdThGQkVcdTY3MDBcdTVGRUI5XHU2NzA4XHU2M0E4XHU1MUZBXHU0RTJEXHU1NkZEXHU3Mjc5XHU0RjlCQUlcdTgyQUZcdTcyNDcgXHU5RUM0XHU0RUMxXHU1MkNCXHU1QzA2XHU4QkJGXHU5NUVFXHU0RTJEXHU1NkZEXCIsXG4gICAgICAgICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA2L1x1NTk1Nlx1NTJCMVx1NkEyMVx1NTc4Qlx1NEU1Rlx1ODBGRFNjYWxpbmdcdUZGMDFcdTRFMEFcdTZENzdBSSBMYWJcdTdBODFcdTc4MzRcdTVGM0FcdTUzMTZcdTVCNjZcdTRFNjBcdTc3RURcdTY3N0ZcdUZGMENcdTYzRDBcdTUxRkFcdTdCNTZcdTc1NjVcdTUyMjRcdTUyMkJcdTVCNjZcdTRFNjBcdTY1QjBcdTgzMDNcdTVGMEZcIixcbiAgICAgICAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDYvXHU1RkFFXHU4RjZGXHU1M0QxXHU1RTAzIFBoaS00LW1pbmktZmxhc2gtcmVhc29uaW5nIFx1N0FFRlx1NEZBNyBBSSBcdTZBMjFcdTU3OEJcdUZGMUExMCBcdTUwMERcdTU0MUVcdTU0MTBcdTkxQ0ZcdUZGMENcdTYzQThcdTc0MDZcdTgwRkRcdTUyOUJcdTUzNDdcdTdFQTdcIlxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAge1xuICAgICAgICBcInRpdGxlXCI6IFwiMjAyNS0wNVwiLFxuICAgICAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNS9cdTcwQjhcdTg4QzJcdUZGMDFTcHJpbmcgQUkgMS4wIFx1NkI2M1x1NUYwRlx1NTNEMVx1NUUwM1x1RkYwQ1x1OEJBOSBKYXZhIFx1NTE4RFx1NkIyMVx1NEYxRlx1NTkyN1x1RkYwMVwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNS9DbGF1ZGUgNFx1NzBCOFx1ODhDMlx1NTNEMVx1NUUwM1x1RkYwMVx1NTFFRFx1NEVDMFx1NEU0OFx1NjU2Mlx1NzlGMFx1NUI4N1x1NUI5OVx1NjcwMFx1NUYzQVx1N0YxNlx1N0EwQiBBSVx1RkYxRlwiLFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcInRpdGxlXCI6IFwiMjAyNS0wNFwiLFxuICAgICAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNC9DdXJzb3IgXHU4RkNFXHU2NzY1XHU0RTg2XHU1RjNBXHU1OTI3XHU3Njg0XHU1QkY5XHU2MjRCXHVGRjBDQXVnbWVudCBDb2RlIFx1NUI5RVx1NkQ0QlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNC9cdTRFMDBcdTVGMjBcdTcxNjdcdTcyNDdcdTc1MUZcdTYyMTBcdThGREVcdThEMkZcdTUxNjhcdTcyNDdcdUZGMDFSdW53YXkgR2VuNCBcdTZERjFcdTU5MUNcdTUzRDFcdTVFMDNcdUZGMENcdTdFQzhcdTRFOEVcdTYzNDVcdTc4MzQgQUkgXHU4OUM2XHU5ODkxXHU1OTFBXHU1RTc0XHU3Njg0XHU1OTI5XHU4MkIxXHU2NzdGXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA0L0FJIFx1NzUxRlx1NjAwMVx1NzY4NCBVU0IgXHU2M0E1XHU1M0UzXHVGRjFGXHU5NjNGXHU5MUNDXHUzMDAxXHU4MTdFXHU4QkFGXHU1MTY4XHU5NzYyXHU2NTJGXHU2MzAxIE1DUFwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNC81IFx1NTIwNlx1OTQ5Rlx1NzZGNFx1NTFGQSA0NiBcdTk4NzVcdThCQkFcdTY1ODdcdUZGMDFcdThDMzdcdTZCNEMgRGVlcCBSZXNlYXJjaCBcdTVCOENcdTcyMDYgT3BlbkFJXHVGRjBDXHU2NzAwXHU1RjNBIEdlbWluaSAyLjUgXHU1MkEwXHU2MzAxXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA0L1Nob3BpZnkgXHU2NUIwXHU2ODA3XHU1MUM2XHVGRjFBXHU1QzA2IEFJIFx1ODc4RFx1NTE2NVx1NjVFNVx1NUUzOFx1NURFNVx1NEY1Q1x1RkYwQ1x1NURGMlx1NjYyRlx1NTdGQVx1NjcyQ1x1ODk4MVx1NkM0MlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNC9cdTMwMEFcdTgwNkFcdTY2MEVcdTc2ODRcdTY3M0FcdTU2NjhcdUZGMENcdTU5MERcdTY3NDJcdTc2ODRcdTRFQkFcdTVGQzNcdTMwMEJcdUZGMENcdTY1QUZcdTU3NjZcdTc5OEYgQUkgXHU2MkE1XHU1NDRBIDIwMjUgXHU1RTc0XHU3MjQ4XHU3Njg0IDEyIFx1NEUyQVx1NEZFMVx1NTNGN1wiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNC9cdTVCOUVcdTZENEJcdUZGMUFcdTk2M0ZcdTkxQ0NcdTRFOTFcdTc2N0VcdTcwQkNcdTRFMEFcdTdFQkZcdTMwMENcdTUxNjhcdTU0NjhcdTY3MUYgTUNQIFx1NjcwRFx1NTJBMVx1MzAwRFx1RkYwQ0FJIFx1NURFNVx1NTE3N1x1NEUwMFx1N0FEOVx1NUYwRlx1NjI1OFx1N0JBMVwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNC9cdTZCNjNcdTVGMEZcdTYzMTFcdTYyMThcdThDMzdcdTZCNENcdUZGMDFPcGVuQUkgXHU0RTBBXHU3RUJGIENoYXRHUFQgXHU2NDFDXHU3RDIyXHU1MjlGXHU4MEZEXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA0L01ldGEgXHU2REYxXHU1OTFDXHU1RjAwXHU2RTkwIExsYW1hIDRcdUZGMDFcdTk5OTZcdTZCMjFcdTkxQzdcdTc1MjggTW9FXHVGRjBDXHU2MENBXHU0RUJBXHU1MzQzXHU0RTA3IHRva2VuIFx1NEUwQVx1NEUwQlx1NjU4N1x1RkYwQ1x1N0FERVx1NjI4MFx1NTczQVx1OEQ4NVx1OEQ4QSBEZWVwU2Vla1wiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNC9cdTlBNkNcdTRFOTFcdTczQjBcdThFQUJcdTk2M0ZcdTkxQ0NcdTRFOTFcdTUzRDFcdTU4RjBcdUZGMDFcdThDMDhcdTc5RDFcdTYyODBcdTRFQkFcdTU0NThcdThEMjNcdTRFRkJcdUZGMUFcdThCQTkgQUkgXHU2NkY0XHU2MUMyXHU0RUJBXHU3QzdCXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA0L0dlbWluaSAyLjUgUHJvIFx1NUI5RVx1NkQ0Qlx1RkYxQVx1NjIxNlx1NUMwNlx1NjIxMFx1NEUzQVx1NjcwMFx1NUI5RVx1NzUyOFx1NzY4NFx1NjNBOFx1NzQwNlx1NkEyMVx1NTc4QlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNC9cdTk2M0ZcdTkxQ0NcdTc5RDhcdTVCQzZcdTc4MTRcdTUzRDFcdTY1QjBcdTZBMjFcdTU3OEJcdTVDMDZcdTUzRDFcdTVFMDNcdUZGMENcdTVGNzFcdTU0Q0RcdTUyOUJcdTYzMDdcdTY4MDdcdTYyMTBcdTY3MDBcdTkxQ0RcdTg5ODFcdTgwMDNcdTY4MzhcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDQvXHU2NzA5XHU1M0YyXHU0RUU1XHU2NzY1XHU2NzAwXHU1OTI3XHU1MjlCXHU1RUE2XHVGRjAxXHU4MkY5XHU2NzlDXHU4RkRCXHU1MTlCXHU1MzNCXHU3NTk3XHVGRjBDXHU4QkExXHU1MjEyXHU2NjBFXHU1RTc0XHU2M0E4XHU1MUZBQUlcdTUzM0JcdTc1MUYgLSBcdTUzNEVcdTVDMTRcdTg4NTdcdTg5QzFcdTk1RkJcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDQvXHU0RTAwXHU1RjIwXHU3MTY3XHU3MjQ3XHU3NTFGXHU2MjEwXHU4RkRFXHU4RDJGXHU1MTY4XHU3MjQ3XHVGRjAxUnVud2F5IEdlbi00IFx1NkRGMVx1NTkxQ1x1NTNEMVx1NUUwM1x1RkYwQ1x1N0VDOFx1NEU4RVx1NjM0NVx1NzgzNCBBSSBcdTg5QzZcdTk4OTFcdTU5MUFcdTVFNzRcdTc2ODRcdTU5MjlcdTgyQjFcdTY3N0ZcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDQvXHU2NjdBXHU4QzMxXHU1M0QxXHU1RTAzIEF1dG9HTE0gXHU2Qzg5XHU2MDFEXHVGRjFBXHU5OTk2XHU0RTJBXHU1MTREXHU4RDM5XHUzMDAxXHU1MTc3XHU1OTA3XHU2REYxXHU1RUE2XHU3ODE0XHU3QTc2XHU1NDhDXHU2NENEXHU0RjVDXHU4MEZEXHU1MjlCXHU3Njg0IEFJIEFnZW50XCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA0L01pbmlNYXggQXVkaW8gXHU1M0QxXHU1RTAzIFNwZWVjaC0wMiBcdTZBMjFcdTU3OEJcdUZGMENcdTUzNTVcdTZCMjFcdThGOTNcdTUxNjVcdTY1MkZcdTYzMDEgMjAgXHU0RTA3XHU1QjU3XHU3QjI2XCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA0L1x1NEU5QVx1OUE2Q1x1OTAwQVx1NjNBOFx1NTFGQSBOb3ZhIEFjdFx1RkYxQVx1NTNFRlx1NjRDRFx1NjNBN1x1N0Y1MVx1OTg3NVx1NkQ0Rlx1ODlDOFx1NTY2OFx1NzY4NCBBSSBcdTY2N0FcdTgwRkRcdTRGNTNcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDQvXHU4MTdFXHU4QkFGXHU1MTQzXHU1QjlEXHU4QkM2XHU1NkZFXHU2NTNFXHU1OTI3XHU2MkRCXHVGRjAxXHU0RTAwXHU2QjIxXHU0RjIwIDEwIFx1NUYyMFx1NTZGRVx1RkYwQ1x1NjcwQlx1NTNDQlx1NTcwOFx1NjU4N1x1Njg0OFx1MzAwMVx1NzUzNVx1NUI1MFx1NEU2Nlx1OTFEMVx1NTNFNVx1NTE2OFx1NjQxRVx1NUI5QVx1RkYwMVwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wNC9cdTU1MkVcdTRFRjdcdThEODUgNzAwMCBcdTUxNDNcdUZGMENNZXRhIFx1NjBGM1x1NzUyOFx1NzczQ1x1OTU1Q1x1NTNENlx1NEVFMyBpUGhvbmVcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDQvXHU3NjdFXHU1RUE2XHU5OERFXHU2ODY4XHU2ODQ2XHU2N0I2IDMuMCBcdTZCNjNcdTVGMEZcdTcyNDhcdTUzRDFcdTVFMDNcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDQvT3BlbkFJIFx1NEUwQVx1N0VCRlx1MjAxQ09wZW5BSSBcdTVCNjZcdTk2NjJcdTIwMURcdUZGMENcdTVERjJcdTYzRDBcdTRGOUJcdTY1NzBcdTUzNDFcdTVDMEZcdTY1RjZcdTUxNERcdThEMzkgQUkgXHU1QjY2XHU0RTYwXHU4RDQ0XHU2RTkwXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTA0L3hBSSBcdTUxOERcdTY2RjRcdTY1QjBcdUZGMENcdTU0MDRcdTk4NzlcdTgwRkRcdTUyOUJcdTUzNTNcdThEOEFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcInRpdGxlXCI6IFwiMjAyNS0wM1wiLFxuICAgICAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMy9cdTk2M0ZcdTkxQ0NcdTVGMDBcdTZFOTBcdTUxNjhcdTY1QjBcdTYzQThcdTc0MDZcdTZBMjFcdTU3OEIgUXdRLTMyQlx1RkYwQ1x1NEUwMFx1NTNGMCBNYWMgXHU1QzMxXHU4MEZEXHU1QjlFXHU3M0IwXHU5ODc2XHU3RUE3XHU2M0E4XHU3NDA2XHU4MEZEXHU1MjlCXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAzL1x1NUI5RVx1NkQ0QiBNYW51c1x1RkYxQVx1OTk5Nlx1NEUyQVx1NzcxRlx1NUU3Mlx1NkQzQiBBSVx1RkYwQ1x1NEUyRFx1NTZGRFx1OTAyMFx1RkYwOFx1OTY0NCA1MCBcdTRFMkFcdTc1MjhcdTRGOEIgKyBcdTYyQzZcdTg5RTNcdUZGMDlcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDMvXHU3NTI4XHU0RThFXHU0RTM0XHU1RThBXHU1REU1XHU0RjVDXHU2RDQxXHU3QTBCXHU3Njg0XHU2NUIwIEFJIFx1NTJBOVx1NjI0Qlx1RkYwQ1x1NUZBRVx1OEY2Rlx1NjNBOFx1NTFGQSBNaWNyb3NvZnQgRHJhZ29uIENvcGlsb3RcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDMvTW9kZWwgQ29udGV4dCBQcm90b2NvbFx1RkYwQ1x1NzcwQlx1OEZEOVx1NEUwMFx1N0JDN1x1NUMzMVx1NTkxRlx1NEU4NlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMy9cdThDMzdcdTZCNEMgR2VtaW5pIFx1NjVCMFx1NTg5RSBDYW52YXMgXHU0RTBFXHU5N0YzXHU5ODkxXHU2OTgyXHU4OUM4XHU1MjlGXHU4MEZEXHVGRjBDXHU2M0QwXHU1MzQ3XHU3NTI4XHU2MjM3XHU3NTFGXHU0RUE3XHU1MjlCXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAzL1x1OUE2Q1x1NjVBRlx1NTE0Qlx1OEZEQlx1NTE5QiBBSSBcdTg5QzZcdTk4OTFcdUZGMENcdTY1MzZcdThEMkRcdTg5QzZcdTk4OTFcdTc1MUZcdTYyMTBcdTUyMURcdTUyMUJcdTUxNkNcdTUzRjhcdUZGMEM0IFx1NEVCQSAxMyBcdTRFMkFcdTY3MDhcdTYyNTNcdTkwMjBcdTdDN0IgU29yYSBcdTZBMjFcdTU3OEJcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDMvXHU3NjdFXHU1RUE2XHU2M0E4XHU1MUZBXHU0RTI0XHU2QjNFIEFJIFx1NTkyN1x1NkEyMVx1NTc4QlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMy9DbGF1ZGUgXHU3M0IwXHU1REYyXHU2NTJGXHU2MzAxXHU3RjUxXHU3RURDXHU2NDFDXHU3RDIyXHU1MjlGXHU4MEZEXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAzL0RlZXBTZWVrLVYzIFx1NkEyMVx1NTc4Qlx1NjZGNFx1NjVCMFx1RkYwQ1x1NTQwNFx1OTg3OVx1ODBGRFx1NTI5Qlx1NTE2OFx1OTc2Mlx1OEZEQlx1OTYzNlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMy9cdTgxN0VcdThCQUZcdTZERjdcdTUxNDMgVDEgXHU2QjYzXHU1RjBGXHU3MjQ4XHU1M0QxXHU1RTAzXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAzL0lkZW9ncmFtIFx1NkI2M1x1NUYwRlx1NTNEMVx1NUUwMyAzLjAgXHU3MjQ4XHU2NzJDXHU2QTIxXHU1NzhCXHVGRjFBXHU3NzFGXHU1QjlFXHU2MTFGXHU0RTBFXHU1MjFCXHU2MTBGXHU4ODY4XHU3M0IwXHU1MThEXHU3QTgxXHU3ODM0XCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAzL1x1NjVCMFx1NjNBOFx1NzQwNlx1NkEyMVx1NTc4Qlx1Njc2NVx1NEU4Nlx1RkYwMVx1OTYzRlx1OTFDQyBRd2VuIENoYXQgXHU1RTczXHU1M0YwXHU1REYyXHU0RTBBXHU3RUJGXHUyMDFDXHU2REYxXHU1RUE2XHU2MDFEXHU4MDAzXHUyMDFEXHU1MjlGXHU4MEZEXHVGRjBDXHU2NTJGXHU2MzAxXHU4MDU0XHU3RjUxXHU2NDFDXHU3RDIyXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAzL1x1NTIxQVx1NTIxQVx1RkYwQ0dQVC00byBcdTUzOUZcdTc1MUZcdTU2RkVcdTUwQ0ZcdTc1MUZcdTYyMTBcdTRFMEFcdTdFQkZcdUZGMENQIFx1NTZGRVx1MzAwMVx1NzUxRlx1NTZGRVx1NEU1Rlx1NUMzMVx1NEUwMFx1NTYzNFx1NzY4NFx1NEU4QlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMy9cdThDMzdcdTZCNENcdTUzRDFcdTVFMDMgR2VtaW5pIDIuNSBcdTRFQkFcdTVERTVcdTY2N0FcdTgwRkRcdTZBMjFcdTU3OEJcdUZGMENcdTVCOUVcdTczQjBcdTU5MERcdTY3NDJcdTYwMURcdTdFRjRcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDMvXHU4QzM3XHU2QjRDXHU3RUM4XHU0RThFXHU3NjdCXHU5ODc2XHU0RTAwXHU2QjIxXHU0RTg2XHVGRjAxXHU2NzAwXHU1RjNBXHU2M0E4XHU3NDA2XHU2QTIxXHU1NzhCR2VtaW5pIDIuNSBQcm9cdTVCOUVcdTZENEJcdTRGNTNcdTlBOENcdUZGMENcdTc3MUZcdTc2ODRcdTY3MDlcdTcwQjlcdTRFMUNcdTg5N0ZcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDMvRGVlcFNlZWtcdTU2REVcdTdCNTRcdTczQjBcdTU3MjhcdTgwRkRcdTRFMERcdTgwRkRcdTUxNjVcdTYyNEJcdTlFQzRcdTkxRDEgXHU1QzA2XHU3RUY0XHU2MzAxXHU5QUQ4XHU0RjREXHU5NzA3XHU4MzYxXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAzL0RlZXBTZWVrXHU1Qjk4XHU2NUI5XHU4RjlGXHU4QzIzXHVGRjFBUjJcdTUzRDFcdTVFMDNcdTRFM0FcdTUwNDdcdTZEODhcdTYwNkZcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDMvXHU5QUQ4XHU2ODIxXHVGRjBDXHU0RTNBXHU0RjU1XHU2NzAwXHU1RkVCXHU2MkU1XHU2MkIxRGVlcFNlZWtcdUZGMUZcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDMvXHU4REU4XHU1ODgzXHU3NTM1XHU1NTQ2XHU4QkQ1XHU3RUMzQUlcdUZGMENEZWVwU2Vla1x1NTNENlx1NEVFM1x1NEU4NkNoYXRHUFRcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDMvXHU0RTBEXHU4OEM1XHU0RTg2XHVGRjAxT3BlbkFJXHU1MjlCXHU0RkMzXHU3Mjc5XHU2NzE3XHU2NjZFXHU1QkY5XHU0RTJEXHU1NkZEQUlcdTRFMEJcdTZCN0JcdTYyNEJcdUZGMENcdTUxRkFcdTUzRjBcdTIwMUNBSVx1NTFGQVx1NTNFM1x1N0JBMVx1NTIzNlx1MjAxRFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwidGl0bGVcIjogXCIyMDI1LTAyXCIsXG4gICAgICAgIFwiY29sbGFwc2FibGVcIjogdHJ1ZSxcbiAgICAgICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAyL0FudGhyb3BpYyBDbGF1ZGUgMy43IFNvbm5ldCBcdTUzRDFcdTVFMDNcdUZGMUFcdTYzQThcdTc0MDZcdTgwRkRcdTUyOUJcdTUxOERcdThGREJcdTUzMTZcdUZGMENcdTdGMTZcdTc4MDFcdTY1NDhcdTczODdcdTdBODFcdTc4MzRcdTU5MjlcdTk2NDVcdUZGMDFcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU5NjNGXHU5MUNDIFF3ZW4gXHU5OTk2XHU0RTJBXHU2M0E4XHU3NDA2XHU2QTIxXHU1NzhCXHU0RUFFXHU3NkY4XHVGRjAxXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAyL1x1ODhBQkRlZXBTZWVrXHU1MjNBXHU2RkMwXHU1MjMwXHU0RTg2XHVGRjFGXHU2NTg3XHU1RkMzXHU0RTAwXHU4QTAwXHUzMDAxQ2hhdEdQVFx1NTQwQ1x1NjVGNlx1NUJBM1x1NUUwM1x1RkYxQVx1NTE0RFx1OEQzOVx1RkYwMSBcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU4RkQwXHU4NDI1XHU1NTQ2XHU1MTY4XHU5NzYyXHU2M0E1XHU1MTY1RGVlcFNlZWtcdTYxMEZcdTU0NzNcdTc3NDBcdTRFQzBcdTRFNDhcdUZGMUZcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU5NkY3XHU1MTlCXHVGRjFBXHU5NEE2XHU0RjY5RGVlcFNlZWtcdTUzRDZcdTVGOTdcdTc2ODRcdTYyMTBcdTVDMzFcdUZGMENcdTZCQ0ZcdTRFMkFcdTRFQkFcdTUzRUZcdTgwRkRcdTkwRkRcdTg5ODFcdTVCNjZcdTRFNjBBSVx1NzdFNVx1OEJDNlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi9cdTZFMDVcdTUzNEVcdTU5MjdcdTVCNjZcdUZGMUFcdTY2NkVcdTkwMUFcdTRFQkFcdTU5ODJcdTRGNTVcdTYyOTNcdTRGNEZEZWVwU2Vla1x1N0VBMlx1NTIyOTIwMjVcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU3MEI5XHU4RDVFXHU2NTM2XHU4NUNGXHVGRjAxRGVlcFNlZWtcdTU3MjhHaXRIdWJcdTY2MUZcdTY4MDdcdTkxQ0ZcdTVERjJcdThEODVPcGVuQUlcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU3MjA2XHU1MUI3XHVGRjBDRGVlcFNlZWtcdTUxRkFcdTVDNDBcdUZGMENcdTgyRjlcdTY3OUNBSVx1NTZGRFx1ODg0Q1x1NzI0OFx1NUMwNlx1NEUwRVx1OTYzRlx1OTFDQ1x1NTQwOFx1NEY1Q1wiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi9cdTc3MEJcdTc3RURcdTUyNjdcdTMwMDFcdTIwMUNcdTRFQTRcdTY3MEJcdTUzQ0JcdTIwMURcdUZGMENEZWVwU2Vla1x1NjMyNFx1OEZEQlx1NEUyRFx1ODAwMVx1NUU3NFx1NzkzRVx1NEVBNFx1NTcwOFwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi9cdTRFODlcdTUxNDhcdTYwNTBcdTU0MEVcdTYzQTVcdTUxNjVEZWVwU2Vla1x1NzY4NFx1NTZGRFx1NEVBN1x1NjI0Qlx1NjczQVx1RkYwQ1x1NUI4M1x1NEVFQ1x1NzY4NFx1ODFFQVx1NzgxNFx1NTkyN1x1NkEyMVx1NTc4Qlx1NjAwRVx1NEU0OFx1NTI5RVx1RkYxRlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi9cdTRFRjdcdTUwM0NcdTUzNDNcdTRFMDdcdTdGOEVcdTUxNDNcdTc2ODRcdTIwMUNBSS5jb21cdTIwMURcdUZGMENcdTRGMUFcdTY2MkZcdThDMDFcdTdFRDlEZWVwU2Vla1x1NTE2Q1x1NTNGOFx1NEY3Rlx1NzUyOFx1NzY4NFx1NTQ2MlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi9cdTU5MTZcdThENDRcdTY3M0FcdTY3ODRcdTc3MEJEZWVwU2Vla1x1RkYxQVx1NjNEMFx1NjMyRlx1NEUyRFx1NTZGRFx1ODBBMVx1NUUwMiBcdTY3M0FcdTRGMUFcdTg1Q0ZcdTU3MjhcdThGRDlcdTRFOUJcdTk4ODZcdTU3REZcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU1OTFBXHU1QkI2XHU4RjY2XHU0RjAxXHU2M0E1XHU1MTY1QUlcdTU5MjdcdTZBMjFcdTU3OEJEZWVwU2VlayBcdTY2N0FcdTgwRkRcdTZDN0RcdThGNjZcdTUxOERcdThGREJcdTRFMDBcdTZCNjVcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU1OTgyXHU0RjU1XHU1MjI5XHU3NTI4RGVlcFNlZWtcdTdGRkJcdThFQUJcdUZGMUZcdTYyOTNcdTRGNEZBSVx1N0VBMlx1NTIyOVx1RkYwQ1x1NjY2RVx1OTAxQVx1NEVCQVx1NEU1Rlx1ODBGRFx1OTAwNlx1ODhBRFx1NzY4NDNcdTRFMkFcdTY1QjlcdTU0MTFcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU2NUU1XHU2NzJDXHU1OTgyXHU0RjU1XHU3NzBCXHU1Rjg1RGVlcHNlZWtcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU2REYxXHU1RUE2XHU2QzQyXHU3RDIyXHU2QjYzXHU1NzI4XHU3MjY5XHU4MjcyXHU5N0U5XHU1NkZEXHU0RUJBXHU1REU1XHU2NjdBXHU4MEZEXHU0RUJBXHU2MjREXHVGRjBDXHU1QzU1XHU1RjAwXHU3ODZFXHU0RkREXHU0RUJBXHU2MjREXHU3Njg0XHU2MjE4XHU0RTg5XCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAyL0RlZXBTZWVrXHU3Njg0XHUyMDFDXHU2NzBEXHU1MkExXHU1NjY4XHU3RTQxXHU1RkQ5XHUyMDFEXHU4QkE5XHU2MjQwXHU2NzA5XHU0RUJBXHU2MjkzXHU3MkMyXHVGRjBDXHU4MENDXHU1NDBFXHU3QTc2XHU3QURGXHU2NjJGXHU2MDBFXHU0RTQ4XHU1NkRFXHU0RThCXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAyL0RlZXBTZWVrXHU4OEFCXHU1QzAxXHU2NzQwXHU0RTg2XCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAyL0RlZXBTZWVrXHU5ODg0XHU2RDRCXHVGRjFBXHU2NzJBXHU2NzY1MTBcdTVFNzRcdUZGMENcdTVDMzFcdTRFMUFcdTUyNERcdTY2NkZcdTY3MDBcdTU5N0RcdTc2ODQxMFx1NEUyQVx1NEUxM1x1NEUxQVwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi9EZWVwU2Vla1x1RkYwQ1x1N0QyN1x1NjAyNVx1NThGMFx1NjYwRVwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi92aXZvXHU0RTBFXHU4MzYzXHU4MDAwXHU3NkY4XHU3RUU3XHU2M0E1XHU1MTY1RGVlcFNlZWtcdUZGMUFBSVx1NkRGMVx1NUVBNlx1ODc4RFx1NTQwOFx1NUYxNVx1OTg4Nlx1NjI0Qlx1NjczQVx1NTIxQlx1NjVCMFx1NkY2RVx1NkQ0MVwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi92aXZvXHU1Qjk4XHU1QkEzXHVGRjFBXHU1QzA2XHU2REYxXHU1RUE2XHU4NzhEXHU1NDA4XHU2RUUxXHU4ODQwXHU3MjQ4RGVlcFNlZWtcIixcbiAgICAgICAgICBcIkFJXHU4ODRDXHU0RTFBXHU4RDQ0XHU4QkFGLzIwMjUtMDIvXHU0RTBEXHU1NzI4XHU1NzNBXHU3Njg0RGVlcFNlZWtcdUZGMENcdTY2MkZcdTVERjRcdTlFQ0VBSVx1NUNGMFx1NEYxQVx1NzcxRlx1NkI2M1x1NzY4NFx1NEUzQlx1ODlEMlwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi9EZWVwU2Vla1x1MjAxQ1x1NjcwQlx1NTNDQlx1NTcwOFx1MjAxRFx1NEUwRFx1NjVBRFx1NjI2OVx1NTZGNFx1RkYxQTEwXHU1QkI2XHU1NkZEXHU1MTg1XHU1OTE2XHU0RTkxXHU1MzgyXHU1NTQ2XHU1QkEzXHU1RTAzXHU2M0E1XHU1MTY1XCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAyL0RlZXBTZWVrXHUyMDFDXHU5MUQxXHU4NzhEXHU2NzBCXHU1M0NCXHU1NzA4XHUyMDFEIFx1NEVDRVx1MjAxQ1x1NEU4OVx1NTE0OFx1MjAxRFx1NTIzMFx1MjAxQ1x1NjA1MFx1NTQwRVx1MjAxRFx1RkYwQ1x1NEVDRVx1MjAxQ1x1NTk3RFx1NzUyOFx1MjAxRFx1NTIzMFx1MjAxQ1x1NzUyOFx1NTk3RFx1MjAxRFwiLFxuICAgICAgICAgIFwiQUlcdTg4NENcdTRFMUFcdThENDRcdThCQUYvMjAyNS0wMi9EZWVwU2Vla1x1NTk4Mlx1NEY1NVx1NjQwNVx1NTJBOEFJXHU0RUE3XHU0RTFBXHVGRjFGXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAyL0RlZXBTZWVrXHU1QkEzXHU1RTAzXHU2REE4XHU0RUY3XHVGRjAxXCIsXG4gICAgICAgICAgXCJBSVx1ODg0Q1x1NEUxQVx1OEQ0NFx1OEJBRi8yMDI1LTAyL0RlZXBTZWVrXHU1RTI2XHU5OERFXHU3OUQxXHU1OTI3XHU4QkFGXHU5OERFXHVGRjFGXCJcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgIFwidGl0bGVcIjogXCJEZWVwU2Vla1x1NjI4MFx1NjcyRlx1ODlFM1x1Njc5MFwiLFxuICAgIFwiY29sbGFwc2FibGVcIjogdHJ1ZSxcbiAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgIHtcbiAgICAgICAgXCJ0aXRsZVwiOiBcIkRlZXBTZWVrIFx1NkEyMVx1NTc4Qlx1OEJBRFx1N0VDM1wiLFxuICAgICAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAgICAgIFwiRGVlcFNlZWtcdTYyODBcdTY3MkZcdTg5RTNcdTY3OTAvRGVlcFNlZWsgXHU2QTIxXHU1NzhCXHU4QkFEXHU3RUMzL0RlZXBTZWVrLVIxXHU3Njg0XHU1NkRCXHU0RTJBXHU4QkFEXHU3RUMzXHU5NjM2XHU2QkI1XCIsXG4gICAgICAgICAgXCJEZWVwU2Vla1x1NjI4MFx1NjcyRlx1ODlFM1x1Njc5MC9EZWVwU2VlayBcdTZBMjFcdTU3OEJcdThCQURcdTdFQzMvRGVlcFNlZWstUjFcdTc2ODRcdThCQURcdTdFQzNcdTZENDFcdTdBMEJcdTVGM0FcdTUzMTZcdTVCNjZcdTRFNjBcdUZGMDhSTFx1RkYwOVx1OTYzNlx1NkJCNVx1OTFDN1x1NzUyOFx1NEU4NkdSUE9cdTdCOTdcdTZDRDVcIixcbiAgICAgICAgICBcIkRlZXBTZWVrXHU2MjgwXHU2NzJGXHU4OUUzXHU2NzkwL0RlZXBTZWVrIFx1NkEyMVx1NTc4Qlx1OEJBRFx1N0VDMy9EZWVwU2Vlay1WMyBcdTlBRDhcdTY1NDhcdThCQURcdTdFQzNcdTUxNzNcdTk1MkVcdTYyODBcdTY3MkZcdTUyMDZcdTY3OTBcIixcbiAgICAgICAgICBcIkRlZXBTZWVrXHU2MjgwXHU2NzJGXHU4OUUzXHU2NzkwL0RlZXBTZWVrIFx1NkEyMVx1NTc4Qlx1OEJBRFx1N0VDMy9EZWVwU2Vla1x1NTM0RVx1NEUzRFx1NjU4N1x1OThDRVx1NEVDRVx1NEY1NVx1ODAwQ1x1Njc2NVx1RkYxRlx1NEUxQVx1NTE4NVx1NEVCQVx1NThFQlx1RkYxQVx1OEJBRFx1N0VDM1x1NjU3MFx1NjM2RVx1MzAwMVx1OEJBRFx1N0VDM1x1N0I1Nlx1NzU2NVx1NTQ4Q1x1OEZFRFx1NEVFM1x1NEYxOFx1NTMxNlx1N0YzQVx1NEUwMFx1NEUwRFx1NTNFRlwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwidGl0bGVcIjogXCJEZWVwU2VlayBcdTYyODBcdTY3MkZcdTUyMDZcdTY3OTBcIixcbiAgICAgICAgXCJjb2xsYXBzYWJsZVwiOiB0cnVlLFxuICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICBcIkRlZXBTZWVrXHU2MjgwXHU2NzJGXHU4OUUzXHU2NzkwL0RlZXBTZWVrIFx1NjI4MFx1NjcyRlx1NTIwNlx1Njc5MC9EZWVwU2Vla1x1NjcwMFx1NUYzQVx1NEUxM1x1NEUxQVx1NjJDNlx1ODlFM1x1RkYxQVx1NkUwNVx1NEVBNFx1NTkwRFx1NjU1OVx1NjM4OFx1OEQ4NVx1Nzg2Q1x1NjgzOFx1ODlFM1x1OEJGQlwiLFxuICAgICAgICAgIFwiRGVlcFNlZWtcdTYyODBcdTY3MkZcdTg5RTNcdTY3OTAvRGVlcFNlZWsgXHU2MjgwXHU2NzJGXHU1MjA2XHU2NzkwL0RlZXBTZWVrXHU3Njg0XHU0RjE4XHU1MkJGXHU0RTBFXHU0RTBEXHU4REIzXCIsXG4gICAgICAgICAgXCJEZWVwU2Vla1x1NjI4MFx1NjcyRlx1ODlFM1x1Njc5MC9EZWVwU2VlayBcdTYyODBcdTY3MkZcdTUyMDZcdTY3OTAvXHU0RTAwXHU2NTg3XHU4QkU2XHU4OUUzIERlZXBTZWVrIFx1NjI4MFx1NjcyRlx1NjdCNlx1Njc4NFwiLFxuICAgICAgICAgIFwiRGVlcFNlZWtcdTYyODBcdTY3MkZcdTg5RTNcdTY3OTAvRGVlcFNlZWsgXHU2MjgwXHU2NzJGXHU1MjA2XHU2NzkwL0RlZXBTZWVrIHZzLiBDaGF0R1BUXHVGRjFBXHU4QzAxXHU2MjREXHU2NjJGXHU3NzFGXHU2QjYzXHU3Njg0XHU3MzhCXHU4MDA1XHVGRjFGXCIsXG4gICAgICAgICAgXCJEZWVwU2Vla1x1NjI4MFx1NjcyRlx1ODlFM1x1Njc5MC9EZWVwU2VlayBcdTYyODBcdTY3MkZcdTUyMDZcdTY3OTAvRGVlcFNlZWsgXHU3MjA2XHU3MDZCXHU5MDNCXHU4RjkxXHUzMDAxXHU4ODRDXHU0RTFBXHU1RjcxXHU1NENEXHU1M0NBXHU1QkY5XHU2NzJBXHU2NzY1QUlcdTUzRDFcdTVDNTVcdTc2ODRcdTU0MkZcdTc5M0FcIixcbiAgICAgICAgICBcIkRlZXBTZWVrXHU2MjgwXHU2NzJGXHU4OUUzXHU2NzkwL0RlZXBTZWVrIFx1NjI4MFx1NjcyRlx1NTIwNlx1Njc5MC9EZWVwU2Vlay1SMSBcdTYyODBcdTY3MkZcdTUxNjhcdTY2NkZcdTg5RTNcdTY3OTBcdUZGMUFcdTRFQ0VcdTUzOUZcdTc0MDZcdTUyMzBcdTVCOUVcdThERjVcdTc2ODRcdTIwMUNcdTcwQkNcdTkxRDFcdTY3MkZcdTkxNERcdTY1QjlcdTIwMURcIixcbiAgICAgICAgICBcIkRlZXBTZWVrXHU2MjgwXHU2NzJGXHU4OUUzXHU2NzkwL0RlZXBTZWVrIFx1NjI4MFx1NjcyRlx1NTIwNlx1Njc5MC9EZWVwU2Vla1x1NjI4MFx1NjcyRlx1ODlFM1x1OEJGQlx1RkYxQVx1NEVDRVYzXHU1MjMwUjFcdTc2ODRNb0VcdTY3QjZcdTY3ODRcdTUyMUJcdTY1QjBcIlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgXCJ0aXRsZVwiOiBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGXCIsXG4gICAgXCJjb2xsYXBzYWJsZVwiOiB0cnVlLFxuICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAge1xuICAgICAgICBcInRpdGxlXCI6IFwiQUkgKyBcdTc0MDZcdThEMjJcIixcbiAgICAgICAgXCJjb2xsYXBzYWJsZVwiOiB0cnVlLFxuICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU3NDA2XHU4RDIyL0RlZXBTZWVrXHU1NDRBXHU4QkM5XHU2MjExXHVGRjFBMzBcdTVDODFcdTUyMzA0MFx1NUM4MVx1RkYwQ1x1NEUwMFx1ODIyQ1x1NEYxQVx1NjJFNVx1NjcwOVx1OEZEOVx1NEU0OFx1NTkxQVx1NzY4NFx1NUI1OFx1NkIzRVwiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTc0MDZcdThEMjIvXHU3NTI4RGVlcFNlZWtcdTY0MUVcdTk0QjFcdUZGMENcdTY1RTVcdThENUFcdTc2N0VcdTRFMDdcIixcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU3NDA2XHU4RDIyL1x1NjY2RVx1OTAxQVx1NEVCQVx1NTk4Mlx1NEY1NVx1OTAxQVx1OEZDN1x1NzA5Mlx1ODBBMVx1NEU3MFx1NTdGQVx1OTFEMVx1OEQ1QVx1NTIzMDEwMFx1NEUwN1x1RkYxRlwiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTc0MDZcdThEMjIvXHU3NTI4RGVlcHNlZWtcdTU2REVcdTdCNTRcdUZGMUFcdTU5ODJcdTY3OUNcdTY3MDkxMDBcdTRFMDdcdTk1RjJcdTk0QjFcdUZGMENcdTUxRTBcdTVFNzRcdTUxODVcdTRFMERcdTc1MjhcdUZGMENcdThCRTVcdTYwMEVcdTRFNDhcdTc0MDZcdThEMjJcdUZGMUZcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBcInRpdGxlXCI6IFwiQUkgKyBcdTdGMTZcdTdBMEJcdTVGMDBcdTUzRDFcIixcbiAgICAgICAgXCJjb2xsYXBzYWJsZVwiOiB0cnVlLFxuICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU3RjE2XHU3QTBCXHU1RjAwXHU1M0QxLzMgXHU1QzBGXHU2NUY2XHU1MDVBXHU2RTM4XHU2MjBGXHVGRjBDMTAgXHU1OTI5XHU3MkMyXHU4RDVBIDI4IFx1NEUwN1x1RkYwMVx1N0EwQlx1NUU4Rlx1NTQ1OFx1NzUyOCBBSSBcdThFQkFcdThENUFcdUZGMUZcIixcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU3RjE2XHU3QTBCXHU1RjAwXHU1M0QxL1x1RDgzRFx1REM5N1x1NzUyOCBEZWVwU2VlayBcdTdFRDlcdTVCRjlcdThDNjFcdTUwNUFcdTRFMkFcdTdGNTFcdTdBRDlcdUZGMENcdTU5NzlcdTRFMDBcdTVCOUFcdTYxMUZcdTUyQThcdTU3NEZcdTRFODZcIixcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU3RjE2XHU3QTBCXHU1RjAwXHU1M0QxL0RlZXBTZWVrXHU4OEM1XHU4RkRCVlNDb2RlXHVGRjBDXHU3RjE2XHU3QTBCXHU5NzVFXHU1RTM4XHU0RTFEXHU2RUQxXHVGRjAxXCIsXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1N0YxNlx1N0EwQlx1NUYwMFx1NTNEMS9cdTY1NTlcdTRGNjBcdTc1MjhEZWVwU2VlaytDbGllblx1RkYwQ1x1NEVDRTBcdTUyMzAxXHU1RjAwXHU1M0QxXHU0RTAwXHU0RTJBQVBQXCIsXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1N0YxNlx1N0EwQlx1NUYwMFx1NTNEMS9EZWVwU2Vla1x1NjNBNVx1NTE2NVB5dGhvblx1RkYwQ1x1NEUwMFx1ODIyQ1x1NzUzNVx1ODExMVx1NEU1Rlx1ODBGRFx1OThERVx1OTAxRlx1OEREMVx1RkYwQ1x1Nzg2RVx1NUI5RVx1NTNFRlx1NEVFNVx1NUMwMVx1Nzk1RVx1NEU4Nlx1RkYwMVwiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTdGMTZcdTdBMEJcdTVGMDBcdTUzRDEvMSBcdTUyMDZcdTk0OUZcdTc1MUZcdTYyMTBcdTY3QjZcdTY3ODRcdTU2RkVcdUZGMUZcdTdBMEJcdTVFOEZcdTU0NTggQUkgXHU3RUQ4XHU1NkZFXHU0RkREXHU1OUM2XHU3RUE3XHU2NTU5XHU3QTBCXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJ0aXRsZVwiOiBcIkFJICsgXHU1MjFCXHU2MTBGXHU4QkJFXHU4QkExXCIsXG4gICAgICAgIFwiY29sbGFwc2FibGVcIjogdHJ1ZSxcbiAgICAgICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1NTIxQlx1NjEwRlx1OEJCRVx1OEJBMS9cdTU0OEMgRGVlcHNlZWsgXHU4MDU0XHU2MjRCXHVGRjBDXHU1MDVBXHU0RTJBXHU1NEVBXHU1NDEyXHU3Njg0XHU0RTdFXHU1NzY0XHU1NzA4XHU4OUM2XHU5ODkxXCIsXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1NTIxQlx1NjEwRlx1OEJCRVx1OEJBMS81IFx1NEUyQVx1NEUwRFx1NUY5N1x1NEUwRFx1NjUzNlx1ODVDRlx1NzY4NCBEZWVwc2VlayBcdTczOEJcdTcwQjhcdTdFQzRcdTU0MDhcdUZGMDFcIixcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU1MjFCXHU2MTBGXHU4QkJFXHU4QkExL0RlZXBTZWVrXHU0RTAwXHU1M0U1XHU4QkREXHU2NDFFXHU1QjlBXHU0RkVFXHU1NkZFXHU5NkJFXHU5ODk4XCIsXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1NTIxQlx1NjEwRlx1OEJCRVx1OEJBMS9kZWVwc2VlaytcdTY1NzBcdTVCNTdcdTRFQkFcdTczOEJcdTcwQjhcdTdFQzRcdTU0MDhcdTRGN0ZcdTc1MjhcdTY1QjlcdTZDRDVcIixcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU1MjFCXHU2MTBGXHU4QkJFXHU4QkExL1x1NzUyOCBkZWVwc2VlayBcdTUwNUEgQUkgXHU4OUM2XHU5ODkxXHVGRjBDXHU3RUREXHU0RTg2XHVGRjBDXHU1NDhDXHU2Mjg0XHU0RjVDXHU0RTFBXHU0RTAwXHU2ODM3XHU3QjgwXHU1MzU1XHVGRjAxXCIsXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1NTIxQlx1NjEwRlx1OEJCRVx1OEJBMS9cdTdFRERcdTdFRERcdTVCNTBcdUZGMDFcdTc1MjhkZWVwc2Vla1x1NTA1QUFJXHU4OUM2XHU5ODkxXHVGRjBDXHU2REE4XHU3Qzg5MTBXK1x1RkYwOFx1OTY0NFx1NEZERFx1NTlDNlx1N0VBN1x1NjU1OVx1N0EwQlx1RkYwOVwiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTUyMUJcdTYxMEZcdThCQkVcdThCQTEvXHU4RkQ5XHU2MDE1XHU2NjJGXHU1MTY4XHU3RjUxXHU2NzAwXHU1RjNBXHU3Njg0IERlZXBTZWVrIFx1NTZGRVx1NzI0N1x1NjU1OVx1N0EwQlx1NTQyN1x1RkYwQ1x1OEQ3Nlx1N0QyN1x1NjUzNlx1ODVDRlx1NEU4Nlx1RkYwMVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwidGl0bGVcIjogXCJBSSArIFx1NTI5RVx1NTE2Q1x1NjU0OFx1NzM4N1wiLFxuICAgICAgICBcImNvbGxhcHNhYmxlXCI6IHRydWUsXG4gICAgICAgIFwiY2hpbGRyZW5cIjogW1xuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTUyOUVcdTUxNkNcdTY1NDhcdTczODcvXHU1OTgyXHU0RjU1XHU3NTI4RGVlcFNlZWtcdTY2RjRcdTlBRDhcdTY1NDhcdTU3MzBcdTVERTVcdTRGNUNcdUZGMUExMFx1NEUyQVx1NUI5RVx1NzUyOFx1NjI4MFx1NURFN1wiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTUyOUVcdTUxNkNcdTY1NDhcdTczODcvXHU2MjRCXHU2MjhBXHU2MjRCXHU2NTU5XHU0RjYwXHU1NzI4d29yZFx1NEUyRFx1NjNBNVx1NTE2NWRlZXBzZWVrXHVGRjBDXHU3OUQyXHU3NTFGXHU2NTg3XHU2ODYzXHU2NzUwXHU2NTk5XCIsXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1NTI5RVx1NTE2Q1x1NjU0OFx1NzM4Ny9cdTZDRDVcdTVGOEJcdTRFQkFcdTRGRERcdTU5QzZcdTdFQTdkZWVwc2Vla1x1NEY3Rlx1NzUyOFx1NjMwN1x1NTM1N1x1RkYwOFx1OTY0NFx1NjMwN1x1NEVFNFx1NzI0OFx1RkYwOVwiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTUyOUVcdTUxNkNcdTY1NDhcdTczODcvRGVlcFNlZWsgUjEgKyBcdTRFMkFcdTRFQkFcdTc3RTVcdThCQzZcdTVFOTNcdUZGMENcdTc2RjRcdTYzQTVcdThENzdcdTk4REVcdUZGMDFcIixcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU1MjlFXHU1MTZDXHU2NTQ4XHU3Mzg3L0RlZXBTZWVrXHU1RDRDXHU1MTY1XHU1MjMwRXhjZWxcdUZGMENcdTYzRDBcdTUzNDcxMFx1NTAwRFx1NURFNVx1NEY1Q1x1NjU0OFx1NzM4N1x1RkYwQ1x1NTkyQVx1NzI1Qlx1NEU4Nlx1RkYwMVwiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTUyOUVcdTUxNkNcdTY1NDhcdTczODcvRGVlcFNlZWtcdTkxNERcdTU0MDhLSU1JXHVGRjBDXHU4MUVBXHU1MkE4XHU3NTFGXHU2MjEwUFBUXHVGRjBDXHU2MTFGXHU4OUM5XHU4MUVBXHU1REYxXHU4OTgxXHU1OTMxXHU0RTFBXHU0RTg2XHVGRjAxXCIsXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1NTI5RVx1NTE2Q1x1NjU0OFx1NzM4Ny9XUFNcdTkxQ0NcdTg4QzVcdTRFMEFkZWVwc2Vla1x1RkYwQ1x1N0I4MFx1NzZGNFx1NUMzMVx1NjYyRlx1NTI5RVx1NTE2Q1x1Nzk1RVx1NTY2OFwiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTUyOUVcdTUxNkNcdTY1NDhcdTczODcvXHU1MjI5XHU3NTI4ZGVlcHNlZWtcdTVFRkFcdTdBQ0JcdTRFMTNcdTVDNUVcdTk1MDBcdTU1MkVcdTc3RTVcdThCQzZcdTVFOTNcIixcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU1MjlFXHU1MTZDXHU2NTQ4XHU3Mzg3L1x1NjU1OVx1NUUwOFx1NUZDNVx1NTkwN0RlZXBTZWVrXHU0RjdGXHU3NTI4XHU2MzA3XHU1MzU3XHU2NzY1XHU0RTg2XHVGRjAxNVx1NTkyN1x1NjU1OVx1NUI2Nlx1NUU5NFx1NzUyOFx1NTczQVx1NjY2RitcdTVCOUVcdTY0Q0RcdTY4NDhcdTRGOEIrXHU5NjkwXHU4NUNGXHU3NTI4XHU2Q0Q1XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJ0aXRsZVwiOiBcIkFJICsgXHU1MTg1XHU1QkI5XHU1MjFCXHU0RjVDXCIsXG4gICAgICAgIFwiY29sbGFwc2FibGVcIjogdHJ1ZSxcbiAgICAgICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1NTE4NVx1NUJCOVx1NTIxQlx1NEY1Qy8zXHU3OUQyXHU4QkE5RGVlcFNlZWtcdTUxOTlcdTUxRkFcdTcyMDZcdTZCM0VcdTVDMEZcdTdFQTJcdTRFNjZcIixcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU1MTg1XHU1QkI5XHU1MjFCXHU0RjVDL1x1NEVCQVx1NjcwOVx1NTkxQVx1NTkyN1x1ODBDNlx1RkYwQ1x1NTczMFx1NjcwOVx1NTkxQVx1NTkyN1x1NEVBN1x1RkYxQVx1NTk4Mlx1NEY1NVx1NzUyOERlZXBTZWVrXHU1MTk5XHU5NTdGXHU3QkM3XHU1QzBGXHU4QkY0XCIsXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1NTE4NVx1NUJCOVx1NTIxQlx1NEY1Qy9cdTU5ODJcdTRGNTVcdTUyMjlcdTc1MjhEZWVwU2Vla1x1OEZEQlx1ODg0Q1x1OUFEOFx1NjU0OFx1NTE4NVx1NUJCOVx1NTIxQlx1NEY1Q1wiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTUxODVcdTVCQjlcdTUyMUJcdTRGNUMvXHU3NTI4RGVlcFNlZWtcdTUwNUFcdTVDMEZcdTdFQTJcdTRFNjZcdTc3MUZcdTc2ODRcdTU5MkFcdTcyNUJcdTRFODZcdUZGMDFcdThGN0JcdThGN0JcdTY3N0VcdTY3N0VcdTYyNTNcdTkwMjBcdTcyMDZcdTZCM0VcdTdCMTRcdThCQjBcIixcbiAgICAgICAgICBcIkFJXHU1RTk0XHU3NTI4XHU1NzNBXHU2NjZGL0FJICsgXHU1MTg1XHU1QkI5XHU1MjFCXHU0RjVDL1x1NzUyOERlZXBTZWVrXHU1MTk5XHU2NTg3XHU3QUUwXHVGRjFGXHU4RkQ5NFx1NEUyQVx1OUE5QVx1NjRDRFx1NEY1Q1x1OEJBOVx1NEY2MFx1OEVCQVx1NUU3M1x1NEU1Rlx1ODBGRFx1NTFGQVx1NzIwNlx1NkIzRVx1RkYwMVx1RkYwOFx1NTQyQlx1NjNEMFx1NzkzQVx1OEJDRFx1RkYwOVwiLFxuICAgICAgICAgIFwiQUlcdTVFOTRcdTc1MjhcdTU3M0FcdTY2NkYvQUkgKyBcdTUxODVcdTVCQjlcdTUyMUJcdTRGNUMvRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTdcdUZGMUFcdTYzRDBcdTUzNDdcdTUxNkNcdTY1ODdcdTMwMDFcdTY1QjBcdTk1RkJcdTRFMEVcdTVFN0ZcdTU0NEFcdTY1ODdcdTY4NDhcdTUxOTlcdTRGNUNcdTY1NDhcdTczODdcdTc2ODRcdTRFMDlcdTU5MjdcdTYyODBcdTVERTcgXCIsXG4gICAgICAgICAgXCJBSVx1NUU5NFx1NzUyOFx1NTczQVx1NjY2Ri9BSSArIFx1NTE4NVx1NUJCOVx1NTIxQlx1NEY1Qy9BSVx1NTE5OVx1NUMwRlx1OEJGNFx1NjAwRVx1NEU0OFx1NTE5OVx1RkYxRmRlZXBzZWVrXHU1RTJFXHU0RjYwXHU1MTk5XHU1QzBGXHU4QkY0XHU2NTU5XHU3QTBCXCJcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgIFwidGl0bGVcIjogXCJEZWVwU2Vla1x1NEY3Rlx1NzUyOFx1NjMwN1x1NTM1N1wiLFxuICAgIFwiY29sbGFwc2FibGVcIjogdHJ1ZSxcbiAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgIFwiRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcvXHVEODNEXHVERDI1RGVlcFNlZWsgXHU1QzBGXHU3NjdEXHU1RkVCXHU5MDFGXHU0RTBBXHU2MjRCXHU2MzA3XHU1MzU3XCIsXG4gICAgICBcIkRlZXBTZWVrXHU0RjdGXHU3NTI4XHU2MzA3XHU1MzU3L1x1NTFFMFx1NEUyQVx1NjI4MFx1NURFN1x1RkYwQ1x1NjU1OVx1NEY2MFx1NTNCQlx1OTY2NFx1NjU4N1x1N0FFMFx1NzY4NCBBSSBcdTU0NzNcdUZGMDFcIixcbiAgICAgIFwiRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcvRGVlcFNlZWsgXHU1M0QxXHU1RTAzXHU2NUIwXHU2QTIxXHU1NzhCIFYzLTAzMjRcdUZGMENcdTk2NDRcdTRGN0ZcdTc1MjhcdTY1NTlcdTdBMEJcIixcbiAgICAgIFwiRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcvXHU2NzAwXHU2NUIwXHU2RTA1XHU1MzRFXHU1OTI3XHU1QjY2RGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYyNEJcdTUxOENcdTdCMkMxLTVcdTcyNDhcdUZGMENcdTVCOThcdTY1QjlcdTVCOENcdTY1NzRcdTcyNDhQREZcdTUxNERcdThEMzlcdTRFMEJcdThGN0RcIixcbiAgICAgIFwiRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcvMlx1NTIwNlx1OTQ5Rlx1NUI2Nlx1NEYxQSBEZWVwU2VlayBBUElcdUZGMENcdTdBREZcdTcxMzZcdTZCRDRcdTVCOThcdTY1QjlcdTY2RjRcdTU5N0RcdTc1MjhcdUZGMDFcIixcbiAgICAgIFwiRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcvXHU1QjhDXHU2NTc0XHU2NTNCXHU3NTY1XHVGRjFBXHU1OTgyXHU0RjU1XHU3NTI4XHU1OTdERGVlcFNlZWtcdUZGMENcdTRFMDBcdTY1ODdcdTZDNDdcdTYwM0JcdUZGMDFcIixcbiAgICAgIFwiRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcvXHUzMDEwXHU2QzQ3XHU2MDNCXHUzMDExXHU2RUUxXHU4ODQwXHU3MjQ4IERlZXBTZWVrIFx1N0IyQ1x1NEUwOVx1NjVCOVx1NEY3Rlx1NzUyOFx1NkUyMFx1OTA1M1wiLFxuICAgICAgXCJEZWVwU2Vla1x1NEY3Rlx1NzUyOFx1NjMwN1x1NTM1Ny9EZWVwU2VlayBcdTY3MkNcdTU3MzBcdTkwRThcdTdGNzJcdTY1NTlcdTdBMEJcIixcbiAgICAgIFwiRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcvXHU1OTgyXHU0RjU1XHU1NzI4aVBob25lXHU0RTBBXHU3NTI4XHU4QkVEXHU5N0YzXHU4QzAzXHU3NTI4RGVlcHNlZWtcIixcbiAgICAgIFwiRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcvXHU2NjZFXHU5MDFBXHU0RUJBXHU4MEZEXHU3NTI4RGVlcFNlZWtcdTUwNUFcdTRFQzBcdTRFNDhcdUZGMUYyMFx1NEUyQVx1NUI5RVx1NzUyOFx1NUVGQVx1OEJBRVwiLFxuICAgICAge1xuICAgICAgICBcInRpdGxlXCI6IFwiRGVlcFNlZWsgXHU2M0QwXHU5NUVFXHU2MjgwXHU1REU3XCIsXG4gICAgICAgIFwiY29sbGFwc2FibGVcIjogdHJ1ZSxcbiAgICAgICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICAgICAgXCJEZWVwU2Vla1x1NEY3Rlx1NzUyOFx1NjMwN1x1NTM1Ny9EZWVwU2VlayBcdTYzRDBcdTk1RUVcdTYyODBcdTVERTcvNTBcdTRFMkFcdTVFMzhcdTc1MjhcdTc2ODREZWVwU2Vla1x1NkEyMVx1NEVGRlx1OThDRVx1NjgzQ1x1NjNEMFx1NzkzQVx1OEJDRFx1RkYwQ1x1NTNCQkFJXHU1NDczXHU3Njg0XHU1OTI3XHU2NzQwXHU1NjY4XCIsXG4gICAgICAgICAgXCJEZWVwU2Vla1x1NEY3Rlx1NzUyOFx1NjMwN1x1NTM1Ny9EZWVwU2VlayBcdTYzRDBcdTk1RUVcdTYyODBcdTVERTcvXHU2MjExXHU1M0QxXHU3M0IwXHU0RTg2IERlZXBTZWVrIFx1NTNCQiBBSSBcdTU0NzNcdTc2ODRcdTYzNzdcdTVGODRcdUZGMENcdTU5MkFcdTk5OTlcdTRFODZcIixcbiAgICAgICAgICBcIkRlZXBTZWVrXHU0RjdGXHU3NTI4XHU2MzA3XHU1MzU3L0RlZXBTZWVrIFx1NjNEMFx1OTVFRVx1NjI4MFx1NURFNy9EZWVwU2VlayBcdTYzRDBcdTc5M0FcdThCQ0RcdTU3RkFcdTY3MkNcdTZDRDVcdTUyMTlcIixcbiAgICAgICAgICBcIkRlZXBTZWVrXHU0RjdGXHU3NTI4XHU2MzA3XHU1MzU3L0RlZXBTZWVrIFx1NjNEMFx1OTVFRVx1NjI4MFx1NURFNy9EZWVwU2Vla1x1NEUwRFx1NTk3RFx1NzUyOFx1RkYxRlx1OTBBM1x1NjYyRlx1NEY2MFx1OEZEOFx1NEUwRFx1NzdFNVx1OTA1M1x1OEZEOVx1NEU5Qlx1NjMwN1x1NEVFNFx1RkYwMVwiLFxuICAgICAgICAgIFwiRGVlcFNlZWtcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcvRGVlcFNlZWsgXHU2M0QwXHU5NUVFXHU2MjgwXHU1REU3L1x1NTQxMFx1ODg0MFx1NjU3NFx1NzQwNlx1RkYwMURlZXBTZWVrXHU3OTVFXHU3RUE3XHU2MzA3XHU0RUU0XHVGRjBDXHU1OTdEXHU3NTI4XHU1MjMwXHU3MjA2XHVGRjAxXCIsXG4gICAgICAgICAgXCJEZWVwU2Vla1x1NEY3Rlx1NzUyOFx1NjMwN1x1NTM1Ny9EZWVwU2VlayBcdTYzRDBcdTk1RUVcdTYyODBcdTVERTcvXHU2NjZFXHU5MDFBXHU0RUJBXHU0RTVGXHU4MEZEXHU4RjdCXHU2NzdFXHU2MzhDXHU2M0UxXHU3Njg0IDIwIFx1NEUyQSBEZWVwU2VlayBcdTlBRDhcdTk4OTFcdTYzRDBcdTc5M0FcdThCQ0RcdUZGMDgyMDI1XHU3MjQ4XHVGRjA5XCJcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuICAiLCAiaW1wb3J0IHsgU2lkZWJhckNvbmZpZzRNdWx0aXBsZSB9IGZyb20gXCJ2dWVwcmVzcy9jb25maWdcIjtcbmltcG9ydCBBSSBmcm9tIFwiLi9zaWRlYmFycy9haVwiO1xuLy8gQHRzLWlnbm9yZVxuZXhwb3J0IGRlZmF1bHQge1xuICBcIi9BSS9cIjogQUksXG4gIFwiL0FJXHU5ODc5XHU3NkVFXHU2NTU5XHU3QTBCL1wiOiBBSSxcbiAgLy8gXHU5NjREXHU3RUE3XHVGRjBDXHU5RUQ4XHU4QkE0XHU2ODM5XHU2MzZFXHU2NTg3XHU3QUUwXHU2ODA3XHU5ODk4XHU2RTMyXHU2N0QzXHU0RkE3XHU4RkI5XHU2ODBGXG4gIFwiL1wiOiBcImF1dG9cIixcbn0gYXMgU2lkZWJhckNvbmZpZzRNdWx0aXBsZTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQTs7O0FDR0EsSUFBTyx1QkFBUTtBQUFBLEVBQ2I7QUFBQSxJQUNFLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQTtBQUFBLEVBV2Y7QUFBQSxJQUNFLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLGNBQ0U7QUFBQSxJQUNGLFlBQVk7QUFBQTtBQUFBLEVBRWQ7QUFBQSxJQUNFLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLGNBQ0U7QUFBQSxJQUNGLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQTtBQUFBLEVBRWY7QUFBQSxJQUNFLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQTtBQUFBOzs7QUNyQ2pCLElBQU8saUJBQVE7QUFBQSxFQUNiLGFBQWE7QUFBQSxJQUNYO0FBQUEsTUFDRSxPQUFPO0FBQUEsTUFFUCxNQUFNO0FBQUE7QUFBQSxJQUVSO0FBQUEsTUFDRSxPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUE7QUFBQSxJQUVSO0FBQUEsTUFDRSxPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUE7QUFBQSxJQUVSO0FBQUEsTUFDRSxPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUE7QUFBQSxJQUVSO0FBQUEsTUFDRSxPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUE7QUFBQTtBQUFBLEVBR1YsV0FBVztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBO0FBQUE7OztBQzNCVixJQUFPLGlCQUFRO0FBQUEsRUFDYjtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLE1BQ0w7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQTtBQUFBLE1BRVI7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQTtBQUFBLE1BRVI7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQTtBQUFBLE1BRVI7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQTtBQUFBLE1BRVI7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlaO0FBQUEsSUFDRSxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsTUFDTDtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBO0FBQUEsTUFFUjtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBO0FBQUEsTUFFUjtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBO0FBQUEsTUFFUjtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBO0FBQUEsTUFFUjtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBO0FBQUEsTUFFUjtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVo7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQTtBQUFBLEVBRVI7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQTtBQUFBLEVBRVI7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQTtBQUFBOzs7QUNsRVYsSUFBTyxhQUFRO0FBQUEsRUFDYjtBQUFBLEVBQ0E7QUFBQSxJQUNFLFNBQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxNQUNWO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBO0FBQUE7QUFBQSxFQUdKO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsTUFDVjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQTtBQUFBO0FBQUEsRUFHSjtBQUFBLElBQ0UsU0FBUztBQUFBLElBQ1QsZUFBZTtBQUFBLElBQ2YsWUFBWTtBQUFBLE1BQ1Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBO0FBQUE7QUFBQSxFQUdKO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsTUFDVjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBO0FBQUE7QUFBQSxFQUdKO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsTUFDVjtBQUFBLFFBQ0UsU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1Y7QUFBQTtBQUFBO0FBQUEsTUFHRjtBQUFBLFFBQ0UsU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1Y7QUFBQTtBQUFBO0FBQUEsTUFHSjtBQUFBLFFBQ0UsU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1Y7QUFBQTtBQUFBO0FBQUEsTUFHSjtBQUFBLFFBQ0ksU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBO0FBQUEsTUFHUjtBQUFBLFFBQ0ksU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBO0FBQUEsTUFHUjtBQUFBLFFBQ0ksU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBO0FBQUEsTUFHVjtBQUFBLFFBQ0UsU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUE7QUFBQTtBQUFBLE1BR0o7QUFBQSxRQUNFLFNBQVM7QUFBQSxRQUNULGVBQWU7QUFBQSxRQUNmLFlBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUE7QUFBQTtBQUFBLE1BR0o7QUFBQSxRQUNFLFNBQVM7QUFBQSxRQUNULGVBQWU7QUFBQSxRQUNmLFlBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBO0FBQUE7QUFBQSxNQUdKO0FBQUEsUUFDRSxTQUFTO0FBQUEsUUFDVCxlQUFlO0FBQUEsUUFDZixZQUFZO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLUjtBQUFBLElBQ0UsU0FBUztBQUFBLElBQ1QsZUFBZTtBQUFBLElBQ2YsWUFBWTtBQUFBLE1BQ1Y7QUFBQSxRQUNFLFNBQVM7QUFBQSxRQUNULGVBQWU7QUFBQSxRQUNmLFlBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUE7QUFBQTtBQUFBLE1BR0o7QUFBQSxRQUNFLFNBQVM7QUFBQSxRQUNULGVBQWU7QUFBQSxRQUNmLFlBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtSO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsTUFDVjtBQUFBLFFBQ0UsU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBO0FBQUEsTUFHSjtBQUFBLFFBQ0UsU0FBUztBQUFBLFFBQ1QsZUFBZTtBQUFBLFFBQ2YsWUFBWTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBO0FBQUE7QUFBQSxNQUdKO0FBQUEsUUFDRSxTQUFTO0FBQUEsUUFDVCxlQUFlO0FBQUEsUUFDZixZQUFZO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBO0FBQUE7QUFBQSxNQUdKO0FBQUEsUUFDRSxTQUFTO0FBQUEsUUFDVCxlQUFlO0FBQUEsUUFDZixZQUFZO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUE7QUFBQTtBQUFBLE1BR0o7QUFBQSxRQUNFLFNBQVM7QUFBQSxRQUNULGVBQWU7QUFBQSxRQUNmLFlBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtSO0FBQUEsSUFDRSxTQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsTUFDVjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxRQUNFLFNBQVM7QUFBQSxRQUNULGVBQWU7QUFBQSxRQUNmLFlBQVk7QUFBQSxVQUNWO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUM3VVYsSUFBTyxrQkFBUTtBQUFBLEVBQ2IsUUFBUTtBQUFBLEVBQ1IsZ0NBQVk7QUFBQSxFQUVaLEtBQUs7QUFBQTs7O0FMRFAsSUFBTSxTQUFTO0FBQ2YsSUFBTSxTQUFTO0FBQ2YsSUFBTSxPQUFPO0FBQUEsRUFDWDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFHRixJQUFPLGlCQUFRLGFBQWE7QUFBQSxFQUMxQixPQUFPO0FBQUEsRUFDUCxhQUNFO0FBQUEsRUFDRixNQUFNO0FBQUEsSUFFSixDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsTUFBTTtBQUFBLElBRTlCO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFNBQ0U7QUFBQTtBQUFBO0FBQUEsSUFJTjtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXSixXQUFXO0FBQUEsRUFHWCxpQkFBaUIsQ0FBQyxrQkFBa0I7QUFBQSxFQUNwQyxVQUFVO0FBQUEsSUFFUixhQUFhO0FBQUEsSUFFYixnQkFBZ0IsQ0FBQyxNQUFNLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFBQSxFQUczQyxTQUFTO0FBQUEsSUFDUCxDQUFDO0FBQUEsSUFFRDtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsUUFDRSxJQUFJO0FBQUE7QUFBQTtBQUFBLElBR1IsQ0FBQztBQUFBLElBRUQ7QUFBQSxNQUNFO0FBQUEsTUFDQTtBQUFBLFFBQ0UsV0FBVyxDQUFDLEdBQUcsVUFBVSxNQUFNLFFBQVE7QUFBQSxRQUN2QyxPQUFPLENBQUMsVUFBVSxNQUFNLFFBQVE7QUFBQSxRQUNoQyxhQUFhLENBQUMsVUFBVSxNQUFNLFlBQVksZUFBZSxNQUFNO0FBQUEsUUFDL0QsUUFBUSxDQUFDLEdBQUcsVUFBVSxNQUFNLFlBQVksVUFBVTtBQUFBLFFBQ2xELE1BQU0sQ0FBQyxVQUFVLE1BQU0sWUFBWSxRQUFRO0FBQUEsUUFDM0MsTUFBTSxDQUFDLFVBQVU7QUFBQSxRQUNqQixLQUFLLENBQUMsR0FBRyxPQUFPLFNBQVUsT0FBTSxZQUFZLFVBQVUsVUFBVSxNQUFNO0FBQUEsUUFDdEUsT0FBTyxDQUFDLE9BQU8sVUFDYixNQUFNLFlBQVksU0FDaEIsT0FBTSxZQUFZLFVBQVUsQ0FBQyxNQUFNLFlBQVksTUFBTSxXQUFXLFdBQVksTUFBTSxNQUFNLFlBQVk7QUFBQSxRQUN4RyxhQUFhLENBQUMsVUFBVSxNQUFNLFlBQVksUUFBUSxJQUFJLEtBQUssTUFBTSxZQUFZO0FBQUEsUUFDN0UsWUFBWSxDQUFDLFVBQVUsTUFBTSxlQUFlLElBQUksS0FBSyxNQUFNO0FBQUE7QUFBQTtBQUFBLElBSS9EO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxRQUNFLFVBQVU7QUFBQTtBQUFBO0FBQUEsSUFJZCxDQUFDO0FBQUEsSUFFRCxDQUFDO0FBQUEsSUFFRDtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsUUFDRSxhQUFhO0FBQUE7QUFBQTtBQUFBLElBSWpCO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxRQUNFLGdCQUFnQjtBQUFBLFFBQ2hCLE9BQU87QUFBQSxRQUVQLG1CQUFtQjtBQUFBO0FBQUE7QUFBQSxJQUl2QixDQUFDO0FBQUE7QUFBQSxFQUdILGFBQWE7QUFBQSxJQUNYLE1BQU07QUFBQSxJQUNOLEtBQUs7QUFBQSxJQUNMO0FBQUEsSUFDQSxhQUFhO0FBQUEsSUFHYixNQUFNO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFHWixXQUFXO0FBQUEsSUFDWCxjQUFjO0FBQUEsSUFJZDtBQUFBLElBRUE7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo= diff --git a/.vuepress/config.bundled_1768295118612.mjs b/.vuepress/config.bundled_1768295118612.mjs new file mode 100644 index 0000000..e69de29 diff --git a/Vibe Coding 零基础教程/00 Vibe Coding 简介.md b/Vibe Coding 零基础教程/00 Vibe Coding 简介.md new file mode 100644 index 0000000..f3ea75e --- /dev/null +++ b/Vibe Coding 零基础教程/00 Vibe Coding 简介.md @@ -0,0 +1,534 @@ +# Vibe Coding 简介 + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +如果你曾经想学编程,但被复杂的语法、难懂的概念劝退过;或者你是一个传统程序员,每天被重复的代码折磨得想摔键盘;再或者你有不错的创意,想要快速开发上线自己的产品并盈利。 + +那么恭喜你,我的这套《Vibe Coding 零基础入门教程》,可能会对你很有帮助。 + +2026 年,开发产品的规则已经彻底改变了。AI 的出现,让编程从 “写代码” 变成了 “写需求”,从 “背语法” 变成了 “聊需求”。这种全新的编程方式,就叫做 **Vibe Coding**。 + +这篇文章,我会用最接地气的方式,带你理解:什么是 Vibe Coding?为什么它会成为未来的主流编程方式?以及你应该如何开始学习? + +完全不用担心听不懂,我会像和朋友聊天一样讲给你听。 + +让我们开始吧! + + + +## 一、什么是 Vibe Coding? + +一句话解释 Vibe Coding,就是 **用自然语言(人话)和 AI 聊天,让 AI 帮你生成代码、修改代码、优化代码的编程方式**。 + +你可能会说:不就是用 AI 写代码吗? + +这么说也没错,但真正的 Vibe Coding 不仅仅是让 AI 写几行代码那么简单,而是一种全新的开发思维和工作流程。 + +如果用比较正式的语言来说,Vibe Coding 是一种: + +> 以自然语言提示驱动大型语言模型(LLM),由 AI 直接生成并迭代代码的意图驱动型开发模式。 + + + +在这种模式下: + +- 你负责 "想清楚要做什么"(表达意图) +- AI 负责 "把它做出来"(实现逻辑) +- 你们一起迭代优化(协作进化) + +你不需要记住这么复杂的定义,你只需要知道: + +**Vibe Coding = 用人话和 AI 聊天 + AI 帮你写代码 + 你们一起迭代优化** + +![](https://pic.yupi.icu/1/whatisvibecoding%E5%A4%A7.jpeg) + + + +### 为什么叫 "Vibe" Coding? + +"Vibe" 这个词,原意是氛围感、感觉。 + +在编程领域,它有个特别的含义:**你只需要把你想要的 “感觉” 告诉 AI,AI 就能把你脑子里的想法变成真实的程序。** + +比如你说: +- “我想要一个简洁现代的记账页面”,AI 就能给你生成一个干净好看的界面 +- “这个按钮点击后要有个动画效果”,AI 就能给你加上动画 +- “帮我把这个页面改成暗黑模式”,AI 就能帮你重新设计配色 + +是不是很神奇? + +这就是 Vibe Coding 的魅力所在,它让编程变得像聊天一样自然。 + +**那为什么要叫氛围编程呢?** + +说说我的理解。 + +用 Vibe Coding 开发时,整个工作氛围都不一样了。以前程序员写代码,一边敲键盘一边眉头紧皱,遇到 bug 后要在网上搜半天。现在呢,基本就盯着编辑器,隔几分钟敲几下(和 AI 对话),眉头舒展,有时甚至还会突然激动起来! + +不仅开发者的工作氛围变了,整个办公室的氛围都不一样了。开发同学讨论问题时,产品、运营的同事都可以来指点江山,因为大家都能用 AI 快速验证想法。 + +**氛围编程,诚不欺我。** + + + +## 二、核心理念:意图驱动编程 + +什么是意图驱动? + +在传统编程中,你需要自己写代码来告诉计算机 “怎么做”(How): + +```python +# 传统方式:你要写出每一步怎么做 +total = 0 +for item in shopping_cart: + total = total + item.price +print(total) +``` + +而在 Vibe Coding 中,你只需要告诉 AI "要做什么"(What): + +``` +你:帮我计算购物车里所有商品的总价 +AI:好的,我来实现这个功能 +``` + +看到区别了吗?你不需要关心循环怎么写、变量怎么命名,你只需要清楚地表达你的意图,AI 就能帮你实现。 + +在 Vibe Coding 时代,最重要的 "编程语言" 不是 Python、JavaScript,**而是你的母语**! + +这才是真正的中文编程,像我以前接触的什么易语言、Q 语言都弱爆了~ + +以前学编程,你要记住: +- 变量怎么定义 +- 循环怎么写 +- 函数怎么调用 +- 各种语法规则 + +现在,你只需要会说人话: +- "我想做一个待办事项列表" +- "这个按钮点击后跳转到首页" +- "用户输入错误时显示红色提示" + +**你的意图,就是你的代码逻辑。** + + + +### AI 是你的编程伙伴 + +很多人会把 AI 当做工具来使用,但是在 Vibe Coding 中,AI 不是工具,而是你的编程伙伴: + +- 你是产品经理:负责想清楚要做什么 +- AI 是工程师:负责把它实现出来 +- 你们是团队:一起讨论、迭代、优化 + +这种协作模式,让编程从 "孤独的战斗" 变成了 "愉快的对话"。 + + + +## 三、传统编程思维和 Vibe Coding 思维 + +让我用一个表格,帮你理解这两种思维的区别: + +| 维度 | 传统编程 | Vibe Coding | +|------|----------|-------------| +| **核心能力** | 写代码(背语法) | 表达需求(说人话) | +| **学习重点** | 编程语言、算法、数据结构 | 产品思维、需求表达、迭代优化 | +| **工作方式** | 自己从零开始写 | 和 AI 对话生成 | +| **出问题时** | 自己调试、查文档、搜索 | 把错误告诉 AI,让它修复 | +| **优化代码** | 重构、优化算法 | 告诉 AI 优化方向 | +| **学习曲线** | 陡峭(需要几个月到几年) | 平缓(可以几天上手) | +| **适合人群** | 理工科背景、逻辑思维强 | 任何会表达需求的人 | + +举个例子,比如你想做一个天气查询应用。 + +如果用传统编程思维: +1. 先学一门编程语言(比如 JavaScript) +2. 学习如何搭建网页 +3. 学习如何调用天气 API +4. 学习如何处理 JSON 数据 +5. 学习如何设计界面 +6. 花几周时间一点点写代码 + +如果用 Vibe Coding 思维: +1. 对 AI 说:"帮我做一个天气查询网页,可以输入城市名,显示温度和天气状况" +2. AI 生成初版代码 +3. 你看到效果后说:"再加个搜索历史功能" +4. AI 帮你加上 +5. 你说:"界面改成蓝色调,更清爽一些" +6. AI 帮你调整 +7. 半小时搞定! + +![](https://pic.yupi.icu/1/codingway%25E5%25A4%25A7.jpeg) + +看到区别了吗?传统编程关注 “怎么做”,Vibe Coding 关注 “做什么”。**把需求讲清楚很重要。** + + + +## 四、一个真实的例子 + +说了这么多理论,让我给你看一个真实的 Vibe Coding 案例。 + + +### 背景 + +我有个老师朋友,她每周都要把学生的考勤、作业完成情况发给家长。以前她都是一条一条地把学生的情况编辑成文字,每次都要花一两个小时。 + +于是她问我能不能做个工具,输入学生信息后自动生成周报信息。 + + + +### 用 Vibe Coding 实现 + +我打开 Cursor(一个主流的 AI 代码编辑器),进入一个空的目录(用来装生成的项目代码),然后准备和 AI 对话: + +![](https://pic.yupi.icu/1/image-20260104123610886.png) + +第 1 轮对话: +``` +我:帮我做一个学生周报生成器网页 +要求: +1. 可以输入学生姓名、考勤天数、作业完成数 +2. 点击生成按钮后,自动生成一段周报文字 +3. 可以一键复制到剪贴板 +``` + +AI 立刻给我生成了一个初版页面,包含表单输入框和按钮。 + +![](https://pic.yupi.icu/1/image-20260104123951214.png) + +第 2 轮对话: +``` +我:周报的格式改成这样: +"【学生周报】{姓名}同学本周表现:出勤{考勤}天,完成作业{作业}份。{评价}" +其中评价根据完成情况自动生成 +``` + +AI 修改了代码,加上了智能评价功能(虽然没有特别智能)。 + +![](https://pic.yupi.icu/1/image-20260104124115828.png) + +第 3 轮对话: +``` +我:界面太简陋了,改成清新的绿色调,加点圆角和阴影 +``` + +AI 美化了界面。 + +![](https://pic.yupi.icu/1/image-20260104124230581.png) + +第 4 轮对话: +``` +我:加个历史记录功能,可以看到之前生成的周报 +``` + +AI 加上了历史记录。 + +![](https://pic.yupi.icu/1/image-20260104124459035.png) + +从开始到完成,一共花了不到 **10 分钟**。我朋友现在每周用这个工具,省下来的时间够陪我玩一把狼人杀了。 + +注意我在这个过程中做了什么: +- 我没有写一行代码(全是 AI 写的) +- 我只是清楚地表达了需求 +- 我通过多轮对话不断优化 +- 我关注的是功能和效果,不是实现细节 + +这就是 Vibe Coding 的魔力! + + + +## 五、Vibe Coding 能做什么? + +你可能会想:Vibe Coding 听起来很酷,但它到底能做哪些事情呢? + +答案是:**几乎所有你能想到的软件开发,它都能做!** + +比如下面这些实用的软件: + +1)网页应用:个人作品集网站、在线工具(待办事项、记账、笔记等)、企业官网、博客系统、在线商城 + +2)小程序 / App + +3)AI 应用:聊天机器人、智能写作助手、图片生成工具、语音识别应用 + +4)数据处理工具:数据可视化、自动化报表、表格处理工具 + +5)自动化脚本:批量文件处理、爬虫工具、自动化测试 + +6)辅助工具:展示 PPT 的网页、原型图和演示网站、架构图和流程图、动画演示网站 + +随着 Vibe Coding 的进化,我们解决问题的思路也更开阔了。很多工作我都会想:能不能通过 AI 生成网站来解决? + +这种思维的转变,让我们能用更快的方式验证想法、展示创意。 + +像鱼皮自己少说用 Vibe Coding 做过几十个项目了,比如公开分享过的: + +1)帮用户通过提问的方式学知识的小程序 [《学习英雄》](https://bilibili.com/video/BV1yMn3zuE7L) + +![](https://pic.yupi.icu/1/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%BC%94%E7%A4%BA%E6%8B%BC%E5%9B%BE.png) + +2)帮程序员提升需求分析和技术选型能力的网站 [《程序员技术练兵场》](https://bilibili.com/video/BV1dW4tz9E5M) + +![](https://pic.yupi.icu/1/1760438722374-4e8edebc-d975-4873-8f06-9e9856733694.png) + +还有各种图片处理工具、数据处理工具、数据分析工具等等。这些项目中,绝大多数代码都是和 AI 对话生成的,我可以一边喝可乐,一边看着 AI 干活~ + + + +## 六、为什么现在是学编程的最好时代? + +如果你曾经被编程劝退过,那么我要告诉你一个好消息:**今天,是人类历史上学习编程最容易的时刻!** + +**门槛从未如此之低** + +以前学编程,你要花少说几个月学习基础知识、面对无数的报错和调试。现在学 Vibe Coding,你只需要会说人话、会表达需求,几天就能上手,像聊天一样编程,AI 帮你解决大部分问题。 + +**从想法到产品的距离更短** + +以前,你有个好点子,但实现它可能需要学习几个月编程,再花几周甚至几个月开发,或者招一个程序员,最后可能只能放弃这个想法。 + +现在,用 Vibe Coding,今天想到一个点子,今天就能做出来,甚至可以直接部署上线,成本接近于零。 + +**创造力比技术更重要** + +在 AI 时代,最重要的不再是 "会写代码",而是会想创意(创造力)、会表达需求(沟通能力)、会迭代优化(产品思维)。这些能力,任何人都可以培养。 + +**终身学习成为可能** + +以前,编程技术更新太快,学了可能很快就过时。现在,有了 AI 助手,新技术出来 AI 就已经学会了,你只需要告诉 AI 用新技术实现,可以把精力放在创意和产品上。 + + + +## 七、3 大 Vibe Coding 误区 + +在开始学习 Vibe Coding 之前,我必须帮你破除 3 个常见的误区。很多同学就是因为这些误区,迟迟不敢开始。 + + +### 误区 1、Vibe Coding 是不是在作弊? + +当然不是! + +有些传统程序员会说:用 AI 写代码,那不就是不会编程吗? + +那让我们想一想: +- 100 年前,会心算的人觉得用计算器是作弊 +- 30 年前,会手写代码的人觉得用 IDE 是作弊 +- 今天,会手写代码的人觉得用 AI 是作弊 + +**工具的进步,不是作弊,而是效率的提升。** + +你用 AI 写代码,就像设计师用 Photoshop、建筑师用 CAD 一样,是正常的生产力工具。 + +关键不是你怎么实现的,而是你能不能把东西做出来,能不能解决问题。 + + + +### 误区 2、Vibe Coding 会让我失去学习能力吗? + +有人担心:如果总是让 AI 写代码,我不就什么都学不到了吗? + +恰恰相反!Vibe Coding 是最好的学习方式: +- AI 生成代码后,你可以阅读理解 +- 你不懂的地方,可以问 AI 解释 +- 你可以尝试修改代码,看看效果 +- 你可以边做项目边学习 + +我大学时期就是通过自己做项目学会了很多新技术,而现在有了 Vibe Coding,哪怕你刚开始没有自己独立做项目的能力,用 AI 做了几个项目后,也能看懂一些新技术的代码了。 + +**在实战中学习,远比啃书本效率高得多!** + + + +### 误区 3:Vibe Coding 只能做简单的玩具项目吗? + +当然不是!复杂项目一样能做! + +有人觉得 AI 只能写些简单代码,复杂项目还得靠程序员。 + +但实际上,如今的 AI 已经非常强大了: +- 可以处理几万行代码的项目 +- 可以理解复杂的业务逻辑 +- 可以使用各种框架和技术栈 +- 可以帮你调试复杂的 bug + +且不说网上天花乱坠地说什么独立用 AI 开发商业变现项目,就拿鱼皮自己的团队来说,我们的 [编程导航小程序](https://codefather.cn/) 就是用 Vibe Coding 在一周时间内开发完成的。鱼皮也全程直播带大家用 AI 开发过一个包含完整前端和后端的 [《AI 程序员技术练兵场》](https://bilibili.com/video/BV1dW4tz9E5M) 项目。 + +![](https://pic.yupi.icu/1/1760439049424-532d6ad1-0600-4654-bd9b-311d48cfdc2f.png) + +关键不是 AI 的能力,而是你的需求表达和迭代能力。 + + + +## 八、Vibe Coding 的问题 + +虽然 Vibe Coding 很强大,但我也要诚实地告诉你,它目前还存在一些局限性。了解这些问题,能帮你更理性地使用 Vibe Coding。 + + + +### 1、界面同质化 + +你可能会发现,很多用 AI 生成的网站界面都长得很像,特别是颜色 —— 经常是淡紫色或蓝紫渐变色。这是因为 AI 的训练数据中,这类设计(或者引用的样式代码)比较常见,所以它会倾向于生成类似的风格。 + +![](https://pic.yupi.icu/1/1752744100231-3dc376f3-7571-45c6-8f7c-6098ddde35cf.png) + +如果你想要独特的设计,需要在提示词中明确说明颜色、风格、参考案例,或者提供设计稿让 AI 参考。 + + + +### 代码不可控的风险 + +还有个更麻烦的问题,就是 AI 生成的代码不可控。AI 目前更多地还是用来生成小项目,如果你在有点儿体量的代码库下使用 AI,出 Bug 时,就很可能出现调试困难的 **死局** —— 你既看不懂 AI 生成的代码,又舍不得放弃这些代码。之前在 AI 社群里,就看到有开发者吐槽同事用 AI 把项目改崩了: + +![](https://pic.yupi.icu/1/1752736716516-a86b3751-7c1f-42ad-b15a-b5721614f023.png) + +这就是为什么我建议: +- 尽量让 AI 生成简单、清晰的代码 +- 每次生成代码后都要测试 +- 遇到问题及时回滚,不要一条路走到黑 +- 有条件的话,学习一些基础的编程知识 + + + +### 技能退化的风险 + +长期使用 Vibe Coding,可能会让你失去一些基本的编程技能。就像长期用计算器,心算能力会下降一样。 + +所以我建议有编程基础的程序员朋友们: +- 不要完全依赖 AI,保持一定的手写代码能力 +- 尝试理解 AI 生成的代码,而不是盲目使用 +- 定期做一些不用 AI 的练习 +- 把 AI 当助手,而不是替代品 + +但说实话,这个问题对于零基础的朋友来说完全不是问题,因为你本来就没有编程技能可以退化,反而可以在 Vibe Coding 的过程中学到很多编程知识。 + + + +## 九、学习路线图 + +说了这么多,你可能已经迫不及待想开始学习了。那么,应该从哪里开始呢? + + +### 零基础新手的推荐路径 + +我为你准备了一个完整的学习路径图: + +![](https://pic.yupi.icu/1/vibecodingroadmap%E5%A4%A7.jpeg) + +如果你是完全零基础,我建议你这样学,时间安排得非常宽松。 + +第 1 周: +- 第 1 天:读完这篇文章(理解 Vibe Coding) +- 第 2 天:完成快速上手教程(做出第一个作品) +- 第 3-7 天:学习零代码平台 + +第 2-3 周: +- 学习 AI 代码编辑器(比如 Cursor) +- 做 3-5 个简单项目 + +第 1-2 个月: +- 选择性地学习更多工具 +- 做一些中等难度的项目 +- 学习进阶技巧 + +之后: +- 持续做项目,积累经验 +- 按需学习新知识 +- 关注最新工具和技术 + + + +### 有编程基础的同学 + +如果你之前学过编程,或者是程序员,可以这样学: + +第 1-2 天: +- 快速过完基础内容 +- 理解 Vibe Coding 的思维方式 +- 完成快速上手教程 + +第 1 周: +- 学习主流 AI 编程工具 +- 尝试用 Vibe Coding 重构之前的项目 +- 感受效率的提升 + +之后: +- 重点学习进阶技巧 +- 提升对话和上下文管理能力 +- 探索工作流的优化 + + + +### 本教程的结构 + +为了让你更容易学习,我把整个教程分成了几个板块: + +1. 【基础必读】:Vibe Coding 简介 + 快速上手(必须学) +2. 【进阶选学】编程工具:各种 AI 编程工具的介绍和选择(按需学) +3. 【进阶选学】项目实战:10 多个完整项目案例(边做边学) +4. 【进阶选学】经验技巧:高手的技巧和方法(提升效率) +5. 【进阶选学】资源宝库:工具、模板、资源合集(随时查阅) + +你可以按照自己的节奏和需求,选择性地学习。 + + + +### 学习建议 + +最后,给你几个学习建议。 + +建议 1:先做再学 +- 不要试图先学完所有理论再动手 +- 看完快速上手教程后,立刻做一个项目 +- 在实战中遇到问题,再回来学习 + +建议 2:多做项目 +- 项目是最好的老师 +- 从简单项目开始,逐步提升难度 +- 每个项目都要做到能用、能看 + +建议 3:勇于试错 +- 不要怕做错,AI 可以帮你修复 +- 大胆尝试新想法 +- 失败了也是经验 + +建议 4:记录经验 +- 把每次遇到的问题和解决方法记下来 +- 积累自己的提示词模板 +- 建立个人知识库 + +建议 5:保持好奇 +- AI 工具更新很快,保持关注 +- 多看看别人的作品 +- 多交流,多分享 + + + +## 写在最后 + +看到这里,相信你已经对 Vibe Coding 有了基本的认识。 + +我想再强调一次:**Vibe Coding 不是一种技术,而是一种全新的编程思维。它让编程从 “写代码” 变成了 “表达需求”,从 “背语法” 变成了 “说人话”。** + +在这个时代,创造力比技术更重要、想法比实现更重要、迭代比完美更重要。 + +任何人,只要会表达需求、有创造力、愿意学习,都可以用 Vibe Coding 把想法变成产品。 + +我自己用 Vibe Coding 做了很多项目,它让我的生产力提升了至少 10 倍。我希望通过这个教程,也能帮你打开新世界的大门。 + +在下一篇文章中,我会手把手带你在 10 分钟内做出你的第一个网页应用,并部署上线! + +准备好了吗?让我们一起开启这段奇妙的旅程吧!🛫 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/01 快速上手 Vibe Coding.md b/Vibe Coding 零基础教程/01 快速上手 Vibe Coding.md new file mode 100644 index 0000000..0d3f399 --- /dev/null +++ b/Vibe Coding 零基础教程/01 快速上手 Vibe Coding.md @@ -0,0 +1,394 @@ +# 快速上手 Vibe Coding + +> 10 分钟做出你的第一个网页应用并部署上线 + + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +在上一篇文章中,我们聊了 Vibe Coding 的理念和思维方式。现在,是时候动手实践了! + +这篇文章,我会手把手带你在 10 分钟内做出你的第一个网页应用,并且把它部署到互联网上,让全世界的人都能访问。 + +是的,你没听错,不需要你有任何编程基础,只要你会打字、会上网,就能跟着做。 + + + +## 一、准备工作 + +在开始之前,我们需要做一些简单的准备。别担心,这些都很简单,5 分钟就能搞定。 + +需要准备的东西: + +1. 一台能上网的电脑(Windows、Mac 都可以) +2. 一个浏览器(Chrome、Edge、Safari 都行) +3. 一个 AI 工具账号(我们用 Bolt.new,免费的) +4. 一个 GitHub 账号(用来部署,也是免费的) + +就这些,不需要安装任何编程软件,不需要学任何代码,一切都在浏览器里完成。 + +💡 什么是 GitHub? + +[GitHub](https://github.com/) 是目前最主流的、免费的代码开源托管平台 ,可以理解为一个存储和管理代码的 “网盘”。所有用户或团队都可以把自己的代码上传到 GitHub 进行共享和维护、从 GitHub 下载代码等。开发者们可以从 GitHub 上白票代码,进行学习或引用。 + +如果你对 GitHub 感兴趣,可以看 [鱼皮的保姆级 GitHub 学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190804671012866) 免费学习。 + + + +### 如何选择 AI 工具? + +对于完全零基础的新手,我强烈推荐从 Bolt.new 开始。它完全在线,不需要安装任何软件,打开浏览器就能用。而且最棒的是,你写完代码立刻就能看到效果,做完后一键发布到网上,完全零门槛。还有免费额度,够新手练习了。 + +等你熟练了,再去学习 Cursor 这样的专业工具也不迟。 + +注意,如果你的网络无法访问 Bolt.new,也可以尝试 [美团 NoCode](https://nocode.cn/) 或者 [百度秒哒](https://www.miaoda.cn/),都是类似的 AI 应用生成平台。 + + + +### 注册 Bolt.new + +1)打开浏览器,访问:https://bolt.new + +2)点击右上角的 "Sign in" 按钮 + +3)可以选择用 Google 账号 / GitHub 账号 / 邮箱密码登录(推荐用 GitHub,后面部署会用到) + +登录成功后,准备工作就完成了。接下来你就可以在对话框中输入需求来生成项目了。 + +![](https://pic.yupi.icu/1/image-20260104140815455.png) + + + +## 二、选择你的第一个项目 + +第一个项目很重要,它直接决定了你的学习体验。我建议选择一个简单但完整的项目,最好有实际用处,能看到效果。 + +根据我的经验,下面这几个项目比较适合新手,都是能轻松完成的。 + +1)个人名片网页:展示你的名字、头像、自我介绍和联系方式,简洁美观。适合想快速体验成就感的朋友。 + +2)待办事项应用:一个简单的任务管理工具(俗称 Todo List),可以添加任务、标记完成、删除任务。适合想做点儿实用工具的朋友。 + +3)倒计时网页:可以设置目标日期(比如考试、生日),实时显示剩余天数,有漂亮的视觉效果。适合想做点有创意的东西的朋友。 + +在这篇教程中,我会以经典的 **待办事项应用** 为例,因为它功能完整、实用性强,而且能让你体验到完整的开发流程。如果你想做其他项目也完全没问题,步骤是一样的,只需要把需求描述换成你想要的就行。 + + + +## 三、和 AI 对话生成代码 + +好了,现在开始最激动人心的部分 —— 和 AI 对话,让它帮你生成代码。 + + +### 第 1 轮对话:描述基本需求 + +在 Bolt.new 的聊天框里,输入以下内容(你可以直接复制): + +``` +请帮我做一个待办事项应用网页,要求: + +1. 功能需求: + - 可以输入任务内容并添加到列表 + - 每个任务前面有个复选框,点击可以标记完成 + - 已完成的任务显示删除线 + - 每个任务后面有删除按钮 + - 显示已完成和未完成的任务数量 + +2. 界面要求: + - 简洁现代的设计风格 + - 使用清新的蓝色调 + - 圆角按钮和输入框 + - 适当的阴影效果 + - 响应式设计,手机上也能正常使用 + +3. 技术要求: + - 使用 HTML + CSS + JavaScript + - 数据保存在浏览器本地存储,刷新页面不会丢失 +``` + +你还可以选择大模型、使用计划模式、添加附件、增强提示词等等,但是我建议刚开始不用关注这些,直接点击发送,然后等待 AI 的回应即可。 + +![](https://pic.yupi.icu/1/image-20260104141314370.png) + + + + +### AI 在做什么? + +发送后,你会看到 Bolt.new 开始工作。 + +AI 理解了你的需求,然后创建项目文件结构,再自动生成网页代码,整个过程大约需要 2 分钟。 + +![](https://pic.yupi.icu/1/image-20260104141512389.png) + +代码生成完成后,右侧会自动显示预览效果。你会看到一个输入框、一个添加按钮、任务列表区域。 + +试着在输入框里输入 "跟鱼皮学习 Vibe Coding",然后点击添加按钮,看看效果。 + +![](https://pic.yupi.icu/1/image-20260104141637255.png) + + + + +### 第 2 轮对话:优化细节 + +看到初版效果后,你可能会想调整一些细节。比如: + +``` +很好!但我想做一些调整: + +1. 输入框的占位符文字改成 "今天要做什么?" +2. 添加按钮改成 "➕ 添加任务" +3. 标题改成 "我的待办清单",并加个可爱的图标 +4. 背景色改成渐变色,从浅蓝到浅紫 +5. 添加一个 "清空已完成" 的按钮 +``` + +还可以开启可视化修改功能,选中你想要修改的元素,哪里不爽点哪里~ + +![](https://pic.yupi.icu/1/image-20260104141819294.png) + +AI 会根据你的要求修改代码,很快你就能看到新效果。 + +![](https://pic.yupi.icu/1/image-20260104142026165.png) + + + + +### 第 3 轮对话:添加新功能 + +如果你想添加更多功能,继续和 AI 对话: + +``` +再加几个功能: + +1. 任务可以设置优先级(高、中、低),用不同颜色标识 +2. 可以编辑已添加的任务 +3. 添加一个 "全部清空" 按钮,并要求确认 +4. 任务列表为空时,显示一个友好的提示 +``` + +AI 会继续帮你实现这些功能。 + +![](https://pic.yupi.icu/1/image-20260104142238907.png) + + + + +### 对话技巧 + +在和 AI 对话时,记住这几点: + +1. 需求要具体:不要说 “做得好看一点”,要说 “背景改成蓝色渐变,按钮加圆角” +2. 一次不要改太多:每次提 1~5 个要求就够了,改完看效果再继续 +3. 遇到问题直接说:如果有 bug 或者效果不对,直接告诉 AI “XX 这里有问题” +4. 可以要求解释:不懂的地方,可以问 “这段代码是做什么的?” + + + +## 四、验证效果 + +现在,你的待办事项应用已经做好了。让我们测试一下各个功能: + +1)在输入框输入 "跟鱼皮学习 Vibe Coding",点击添加按钮,任务出现在列表中 + +2)点击任务前的复选框,任务文字显示删除线;点击删除按钮,任务从列表中消失。 + +最后点击预览窗口上方的设备图标,看看在手机和不同屏幕上的效果。 + +![](https://pic.yupi.icu/1/image-20260104142538383.png) + +如果发现某个功能无法正常使用,不要慌。把问题详细描述给 AI,比如 "我点击删除按钮后,任务没有被删除",AI 会帮你修复 Bug,然后重新测试就好了。 + +这就是 Vibe Coding 的魅力 —— 遇到问题,AI 帮你解决! + + + +## 五、部署上线 + +做完了应用,现在让我们把它发布到互联网上,让全世界的人都能访问! + +### 快速部署(推荐) + +Bolt.new 提供了最简单的部署方式,只需要点击右上角的 "Publish" 按钮,点击发布: + +![](https://pic.yupi.icu/1/image-20260104142853639.png) + +然后稍等片刻,就能在聊天框中看到发布后的可访问地址了: + +![](https://pic.yupi.icu/1/image-20260104142912318.png) + +部署成功后,你应该能在任何浏览器访问你的应用,或者把地址分享给朋友让他们也能访问。 + +恭喜,你的第一个网页应用已经上线了,就这么简单!🎉 + +💡 如果你觉得这个地址比较丑,Bolt.new 还支持自定义域名,但是仅高级版可用,我觉得没必要。 + + + +### 扩展知识 - 手动部署 + +鱼皮分享过多种快速部署上线项目的视频教程: + +- [Vercel 项目部署教程](https://www.bilibili.com/video/BV1TV4y1j76t) +- [云端编辑器 + Vercel + 对象存储 + 内网穿透 4 种方式部署](https://www.bilibili.com/video/BV1UZ4y197i1) +- [Nginx + 宝塔 2 种方式部署个人博客](https://www.bilibili.com/video/BV1rU4y1J785) +- [WordPress 搭建个人博客](https://www.bilibili.com/video/BV14q4y1R7XM) +- [4 种主流前后端项目部署](https://www.codefather.cn/course/1790943469757837313/section/1791075571845345281?contentType=video&tabKey=videoList) + +此外,鱼皮在 [编程导航](https://codefather.cn/) 带大家做过 20 多套项目了,几乎每种部署方式都给大家讲解过,如果你想成为一名专业的程序员,建议学习一下。 + +- [AI 零代码应用生成平台项目](https://www.codefather.cn/course/1948291549923344386):1Panel 面板 + Nginx 前端 + Java 后端(jar 包) +- [代码生成器共享平台项目](https://www.codefather.cn/course/1790980795074654209):宝塔面板 + Nginx 前端 + Java 项目管理器(jar 包)后端部署 +- [AI 答题应用平台项目](https://www.code-nav.cn/course/1790274408835506178): Vercel 前端 + Docker 后端 + 云托管 Serverless 平台部署 +- [AI 超级智能体项目](https://www.codefather.cn/course/1915010091721236482):Docker 前端 + Docker 后端 + 云托管 Serverless 平台部署 +- [OJ 在线判题项目](https://www.codefather.cn/course/1790980707917017089):Docker Compose 后端微服务部署 + +基本上学会这几种部署方式,能够应对绝大多数部署需求了。 + + + +## 六、理解你做的东西 + +做完了项目,让我们花几分钟理解一下你做的东西,这样能帮你日后做出更好的项目。 + + + + +### 项目结构 + +首先,你要知道网页应用的基础是 "前端三件套": + +- HTML(结构):定义了页面有哪些元素,比如输入框、按钮、任务列表、统计信息。 +- CSS(样式):定义了页面长什么样,包括颜色、字体、大小、布局和间距、动画效果。 +- JavaScript(功能):定义了页面怎么工作,包括添加任务、标记完成、删除任务、本地存储的逻辑。 + +不过,在这个项目中,AI 选择了使用 **React** 这个现代化的前端开发框架来帮你实现功能。React 是目前最流行的前端框架之一,它让开发更高效、代码更容易维护。 + +所以你会在项目文件中看到 `.tsx` 后缀的文件,这些就是 React 组件文件。但本质上,它们最终还是会被转换成浏览器能理解的 HTML、CSS 和 JavaScript。 + +![](https://pic.yupi.icu/1/image-20260104162356144.png) + +没事,现在不理解也完全没关系。如果对前端开发感兴趣的同学,可以看 [鱼皮最新的保姆级前端学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190394078011393) 快速入门。 + + + + +### 核心功能解析(可跳过) + +让我们看看几个关键功能是怎么实现的: + +1)添加任务:当你点击 "添加任务" 按钮时,程序会先获取输入框里的文字,然后创建一个新的任务对象,把任务添加到列表里,同时保存到本地存储,最后清空输入框并刷新页面显示。整个过程就像你在纸上写下一个待办事项,然后把它贴到墙上一样自然。 + +2)标记完成:当你点击复选框时,程序会找到对应的任务,修改它的完成状态,更新本地存储,然后更新页面显示(给任务文字加上删除线),同时更新统计数字。就像你用笔在纸上的任务上划了一道线。 + +3)本地存储 + +你可能会好奇,为什么刷新页面任务还在? + +这是因为数据保存在浏览器的本地存储(localStorage)里。每次你修改任务,程序都会把最新的数据保存到 localStorage;当你重新打开页面时,程序会从 localStorage 读取之前保存的数据。这样即使关闭浏览器,数据也不会丢失。就像你把待办清单写在了一个不会丢的小本子上。 + +![](https://pic.yupi.icu/1/theoryofworksoftware%E5%A4%A7.jpeg) + + + +### 向 AI 请教 + +如果你想深入理解某个部分,可以直接问 AI: + +``` +请解释一下本地存储是怎么工作的? +``` + +或者: + +``` +这段代码是做什么的? +[粘贴代码] +``` + +AI 会用通俗易懂的语言给你解释。 + + + +## 七、尝试修改和优化 + +现在你已经有了一个实用的小软件,让我们尝试一些修改和优化,加深理解。 + +你可以试试: + +- 改变颜色主题("把应用改成粉色主题,温柔可爱的感觉") +- 修改文字("把所有文字改成英文版本") +- 调整布局("把统计信息移到页面底部,并居中显示") + +或者添加新功能,比如: + +- 任务搜索("添加一个搜索框,可以搜索任务内容") +- 任务分类("添加分类功能,可以给任务添加标签") +- 导出功能("添加一个按钮,可以把所有任务导出为文本文件") + +还可以优化用户体验,让应用更好用: + +- 添加快捷键("按回车键可以快速添加任务") +- 添加动画("添加任务时有一个淡入动画,删除任务时有一个滑出动画") +- 空状态优化("当没有任务时,显示一个可爱的插图和鼓励文字")。 + +如果你觉得简单,可以尝试添加: + +- 截止日期功能 +- 任务提醒功能 +- 支持拖拽排序 +- 添加深色模式切换 +- 支持多个任务列表 + +每次想添加新功能,就和 AI 说 "我想添加 [功能描述],应该怎么做?",AI 会帮你实现。 + + + +## 写在最后 + +恭喜,你已经完成了 Vibe Coding 的第一次实战。 + +你刚才做的事情,在几年前需要几个月的学习才能完成。但在今天,你只用了 10 分钟!这就是 Vibe Coding 的力量。 + +通过这个项目,你学会了如何清晰地向 AI 描述需求、通过多轮对话不断优化项目、遇到问题如何跟 AI 协作解决,还学会了如何把项目发布到互联网。虽然你没有写代码,但你已经理解了网页应用的基本结构、用户交互的实现方式、数据存储的基本概念。 + +更重要的是,你建立了 Vibe Coding 的思维方式:**关注 "要做什么" 而不是 "怎么做"**,先做出来再不断优化,在做项目中学习而不是先学再做,把 AI 当作编程伙伴而不是工具。 + +这只是开始,随着你做的项目越来越多,你会发现你的需求表达能力越来越强、对技术的理解越来越深、能做的东西越来越复杂、创造力得到了真正的释放。 + +记住我在第一篇文章里说的:**在 AI 时代,创造力比技术更重要,想法比实现更重要,迭代比完美更重要。** + + + +### 下一步建议 + +接下来,建议你再做 2 ~ 3 个类似难度的项目来巩固练习,比如个人名片网页、倒计时应用、简单计算器、天气查询工具。 + +实践是最好的老师,只有真正动手做,你才能真正理解 Vibe Coding 的魅力。 + +当你熟练了 Bolt.new 平台和简单项目的开发后,可以直接继续学习本教程的后续内容: + +- 【进阶选学】编程工具 +- 【进阶选学】项目实战 +- 【进阶选学】经验技巧 +- 【进阶选学】资源宝库 + +也可以先简单了解 Cursor(更专业的 AI 代码编辑器)、GitHub(代码管理和协作)、更多部署平台等等。 + +加油,你一定可以的!💪 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/00 AI 编程工具大全.md b/Vibe Coding 零基础教程/10 编程工具/00 AI 编程工具大全.md new file mode 100644 index 0000000..80d3745 --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/00 AI 编程工具大全.md @@ -0,0 +1,175 @@ +# AI 编程工具大全 + +> 选择适合你的 AI 编程工具 + + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +如果你已经完成了【基础必读】的学习,并且成功做出了第一个网页应用,那么恭喜你,已经体验到了 Vibe Coding 的魅力! + +但你的心里可能会有这样的疑问: + +- 网页 AI 生成器挺好用的,但我听说 Cursor 更强大,到底该用哪个? +- 网上说的 Claude、ChatGPT、Gemini,这些 AI 模型有什么区别? +- 有的工具免费,有的要付费,我应该怎么选择? + +别担心,这些困惑都很正常。面对市面上几十上百种 AI 编程工具,就算是专业程序员也会感到眼花缭乱。 + +这个板块,就是专门为了解决这些问题而设计的。 + + + +## 一、为什么要了解编程工具? + +在传统编程时代,工具的选择其实没那么重要。无论你用 VS Code 还是 Sublime Text,写出来的代码都是一样的。 + +但在 Vibe Coding 时代,**选对工具,可能让你的开发效率提升 10 倍!** + +为什么这么说? + +因为不同的 AI 编程工具: + +1. 能力差距很大:有的工具只能生成简单代码,有的能帮你做整个项目 +2. 适用场景不同:有的适合做原型,有的适合做产品,有的适合学习 +3. 成本差异明显:有的完全免费,有的每月要几百块 +4. 学习难度不同:有的上手就能用,有的需要一定基础 + +选对了工具,你可以事半功倍;选错了工具,可能会让你觉得 “Vibe Coding 也不过如此”。 + + + +## 二、AI 编程工具的 3 大类型 + +在深入了解具体工具之前,我们先来看看 AI 编程工具的基本分类。根据使用方式和复杂度,我把它们分为 3 大类: + +![](https://pic.yupi.icu/1/toolstype%E5%A4%A7.jpeg) + + + +### 零代码平台 + +在浏览器里打开就能用,不需要安装任何软件,不需要懂任何代码。适合完全零基础的新手、想快速做出原型的同学。 + +代表工具:Bolt.new、Lovable、秒哒 + +优势:上手快、所见即所得、自动部署 + +局限:功能相对简单,复杂项目可能力不从心 + +![](https://pic.yupi.icu/1/image-20260106100544197.png) + + + +### AI 代码编辑器 + +需要下载安装,界面像传统代码编辑器,但内置了强大的 AI 助手。适合有一定基础、想深入学习 Vibe Coding、需要做复杂项目的人。 + +代表工具:Cursor、Windsurf、Antigravity、Augment Code + +优势:功能强大、灵活度高、适合大型项目 + +局限:需要一定学习成本,对新手不够友好 + +![](https://pic.yupi.icu/1/image-20260106100559696.png) + + + +### 命令行工具 + +在终端里通过命令行和 AI 对话,适合有编程基础的开发者、喜欢命令行的极客。 + +代表工具:Claude Code、Gemini CLI + +优势:效率极高、自动化程度强、成本可控 + +局限:需要一定技术基础,新手不建议使用 + +![](https://pic.yupi.icu/1/image-20260106100958506.png) + + + +## 三、这个板块会讲什么? + +在这个板块,我会带你全面了解 AI 编程工具的方方面面。 + +1) AI 模型选择 + +首先会介绍主流的 AI 模型(Claude、ChatGPT、Gemini 等),帮你理解它们的区别和选择方法。这是使用所有 AI 工具的基础。 + +2)零代码开发工具 + +详细讲解各种 AI 零代码平台和 AI 应用开发平台的使用方法,包括快速生成网站的工具、构建 AI 应用的平台、以及能自主执行复杂任务的 AI 智能体平台。 + +3)专业开发工具 + +深入介绍 AI 代码编辑器、AI 命令行工具、AI IDE 插件等专业开发工具,帮你找到最适合自己的开发方式。 + +4)辅助工具集 + +分享版本管理、部署托管、MCP 服务等实用辅助工具,以及我的工具组合推荐和实战经验。 + +此外,还会有一些补充文章,深入讲解特定工具的使用方法和测评,供感兴趣的读者参考。 + + + +## 四、如何使用这个板块? + +这个板块的文章不需要全部学完,你可以根据自己的情况来选择: + +根据不同场景和需求,给出具体的工具组合建议。 + + + +## 四、如何使用这个板块? + +这个板块的文章不需要全部学完,你可以根据自己的情况来选择: + +- 如果你是完全新手:建议先看《AI 模型选择指南》,然后重点学习《零代码平台》快速上手。 +- 如果你想深入学习:可以直接跳到《AI 代码编辑器》,学习 Cursor 的使用方法。 +- 如果你有编程基础:可以看看第《命令行工具》,尝试更高效的开发方式。 +- 如果你不知道选什么:直接看《我的工具组合推荐》,我会根据不同场景给你具体建议。 +- 如果你想深入了解某个工具:可以阅读相应的补充文章和实战案例。 + + + +## 五、学完这个板块,你能收获什么? + +通过这个板块的学习,你将能够: + +- 理解各类 AI 编程工具的特点和差异 +- 根据自己的需求选择合适的工具 +- 掌握多个主流工具的使用方法和技巧 +- 了解如何搭配使用多个工具提升效率 +- 建立自己的工具箱和开发工作流 +- 掌握版本管理、项目部署等必备技能 + +选对工具,真的能让你的开发效率飞起来!🛫 + + + +## 写在最后 + +我知道,面对这么多工具,你可能会觉得有点眼花缭乱。 + +还记得我在【基础必读】中说过的吗?工具只是手段,重要的是你想做什么。 + +所以,不要纠结于 “哪个工具最好”,而是要思考 “哪个工具最适合我现在的需求”。 + +在这个板块中,我会用最接地气的方式,帮你理清这些工具的脉络,让你能够自信地选择和使用它们。 + +加油,未来的 Vibe Coding 大师!💪 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/01 AI 模型选择指南.md b/Vibe Coding 零基础教程/10 编程工具/01 AI 模型选择指南.md new file mode 100644 index 0000000..d09dffb --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/01 AI 模型选择指南.md @@ -0,0 +1,250 @@ +# AI 模型选择指南 + +你好,我是鱼皮。 + +我们已经了解了 AI 编程工具的 3 大类型。但无论你选择零代码平台、代码编辑器还是命令行工具,它们背后都有一个共同的核心 —— **AI 模型**。 + +你可能会好奇: + +- Cursor 里可以选 Claude、ChatGPT、Gemini,它们到底有什么区别? +- 为什么有的人说 Claude 编程最强,有的人却更推荐 ChatGPT? +- 国产大模型靠谱吗?和国外的模型差距有多大? + +别担心,这篇文章我会用最接地气的方式,带你搞懂主流 AI 模型的特点,教你如何根据自己的需求选择合适的模型。 + +需要提醒的是,AI 模型更新很快,这篇文章的内容是基于 2026 年 1 月的情况。未来可能会有新的模型出现,或者现有模型的能力发生变化。所以要保持关注最新动态,灵活调整自己的选择。 + + + +## 一、什么是 AI 模型? + +我们先来搞清楚一个基本概念:什么是 AI 模型? + +简单来说,**AI 模型就是 Vibe Coding 工具背后的 “大脑”**。 + +当你在 AI 编程工具中输入需求时,是 AI 模型在理解你说的话;当你看到生成的代码时,也是 AI 模型写出来的。不同的 AI 模型就像不同领域的专家,各有所长。有的擅长写代码、有的擅长整理文献,有的速度快、有的质量高。 + +打个比方来说: + +- AI 编程工具(Cursor、Bolt.new)= 工作台 +- AI 模型(Claude、ChatGPT)= 坐在工作台前干活的程序员 + +所以,同样是用 Cursor,选择 Claude 和选择 ChatGPT,就像请了 2 个不同风格的程序员来帮你写代码,最终的效果自然会不一样。 + +![](https://pic.yupi.icu/1/whatisaimodel%E5%A4%A7.jpeg) + + + +## 二、主流 AI 模型 + +截止到 2026 年 1 月,市面上的 AI 模型已经非常丰富了。按照来源和定位,可以分为 3 大阵营: + +- 国际顶尖模型:Claude、ChatGPT、Gemini 这三大巨头 +- 国产优秀模型:DeepSeek、智谱 GLM、通义千问、Kimi 等性价比之选 +- 还有开源模型:Llama、Qwen 等,需要一定技术能力自己部署 + +对于我们学习 Vibe Coding 来说,主要关注前两类就够了。开源模型虽然灵活,但配置和使用门槛较高,不太适合新手。 + +![](https://pic.yupi.icu/1/image-20260106202328517.png) + +接下来,我会逐一介绍这些主流模型的特点,帮你找到最适合自己的那一个。 + + + +## 三、Claude 最强编码能力 + +Claude 4.5 是 Anthropic 公司在 2025 年推出的最新版本,截止到 2026 年 1 月,它仍然被公认为编程能力最强的 AI 模型。 + +Claude 4.5 主要有两个版本:Opus 4.5 是顶配版本,编程能力最强,但速度相对较慢,价格也更高;Sonnet 4.5 是平衡版本,在性能和速度之间取得了很好的平衡,性价比最高。 + + + +### 为什么说 Claude 编程最强? + +在权威的 SWE-bench(软件工程基准测试)中,Claude Opus 4.5 的得分超过了 GPT-5 和 Gemini 3 Pro,稳坐编程领域的 SOTA(最先进水平)宝座。具体来说,Claude 在代码理解、重构、调试等方面的表现都特别突出。它能准确理解复杂的代码逻辑,擅长优化和改进现有代码,能快速定位和修复 bug,而且上下文记忆好,不容易失忆。 + +这些优势让 Claude 特别适合需要高质量代码的开发者、做复杂项目的人、对代码质量要求高的场景。 + +**当然,前提是你的预算充足。** + + + + +### 价格和获取方式 + +Claude 主要有 3 种使用方式: + +- 官方订阅:Claude Pro 每月 20 美元(约 145 元人民币) +- 通过 Cursor:订阅 Cursor Pro 每月 20 美元,包含了 Claude 的使用额度 +- API 调用:按 Token 计费,用多少付多少,比较灵活 + +![Claude 官方定价](https://pic.yupi.icu/1/image-20260106203330977.png) + +如果你是认真想学 Vibe Coding、想要手搓一个商业级产品,我推荐订阅 Cursor Pro。因为同样是 20 刀,你不仅能用 Claude,还能切换使用其他模型,性价比最高。 + +不过要注意,Cursor 套餐不是无限量的,超过还是要额外付费。给你们看看我的账单: + +![](https://pic.yupi.icu/1/image-20260106202855849.png) + + + +## 四、ChatGPT 智能和速度兼具 + +说完了 Claude,我们再来看看 ChatGPT。 + +ChatGPT 是 OpenAI 公司的产品,也是最早让 AI 聊天火遍全球的工具。到了 2025 年,OpenAI 推出了 GPT-5 系列,包括通用版本的 GPT-5、推理能力更强的 GPT-5 Pro,以及专门针对逻辑、数学和编程优化的 o3 版本。 + +![](https://pic.yupi.icu/1/image-20260106221446611.png) + +虽然在纯编程能力的比拼上,ChatGPT 稍微逊色于 Claude,但它有自己的独特优势。 + +首先是速度更快,生成代码的速度比 Claude 快不少,特别适合需要快速迭代的场景。其次是知识更新及时,对最新技术和框架的了解更快。而且生态更好,插件和工具支持更丰富,中文理解和生成能力也更强。 + +所以,如果你需要快速原型开发、对速度要求高、或者需要使用各种插件和工具,ChatGPT 也是不错的选择。 + +ChatGPT 的价格和获取方式: + +- ChatGPT Plus:每月 20 美元 +- ChatGPT Pro:每月 200 美元(包含 o3 等高级模型) +- API 调用:按 Token 计费 + +![](https://pic.yupi.icu/1/image-20260106203501181.png) + + + +## 五、Gemini 3.0 超长上下文之王 + +接下来是 Gemini,Google 推出的 AI 模型。2025 年的 Gemini 3.0 系列主要有两个版本:顶配的 Gemini 3 Pro 各方面能力都很全面,轻量的 Gemini 3 Flash 速度极快,价格也便宜。 + +![](https://pic.yupi.icu/1/image-20260106221514964.png) + +Gemini 最厉害的地方是它的超长上下文窗口,Gemini 3 Pro 支持 **1M Token**(约 100 万字)的输入上下文。 + +这意味着什么呢? + +它可以一口气读完整个大型项目的所有代码,可以记住超长的对话历史、不会轻易失忆,可以同时分析大量的文档和资料。 + +而且在 UI 构建方面,Gemini 3 Pro 的表现也特别出色。根据实测,它在前端 UI 设计、3D 模型构建等方面的能力很强,在某些场景下甚至超过了 Claude 和 GPT-5。 + +![一句话开发 3D 动画网站](https://pic.yupi.icu/1/1763785739331-b643bd7d-85d6-42d9-8462-f842a8a790e6.png) + +所以如果你需要处理大型项目、需要分析大量代码、做 UI / 前端开发、或者预算有限但需要强大能力,Gemini 会是很好的选择。 + +Gemini 的价格和获取方式: + +- Gemini 3 Pro:每月 19.99 刀 +- API 调用:价格比 Claude 和 GPT 便宜很多 +- 免费版本:Gemini 3 Flash 有一定的免费额度,每天也有几次思考模型的试用 + + + +## 六、国产大模型 - 性价比之选 + +### 主流国产模型有哪些? + +说完了国际三巨头,我们再来看看国产大模型。如今,国产大模型在编程能力上已经追上来了,甚至在某些方面还超越了国际模型! + +- DeepSeek-V3 是开源模型,完全免费使用,编程能力在国产模型中数一数二,API 价格极低,特别适合需要大量调用的场景。 +- 阿里通义千问 Qwen,在 LiveCodeBench 测评中的表现甚至超过了 GPT-5,中文理解能力极强,用中文提需求特别准。 +- 智谱 GLM-4.7 是清华团队出品的,多语言编程能力强,专门针对中文开发场景做了优化。支持 200K Token 的长上下文,在复杂任务执行和创意写作方面表现不错。我自己也在持续用 GLM 开发,在生成完整项目方面的速度和效果都很不错。 +- 月之暗面 Kimi 在很早之前就支持超长上下文能力(200 万字),在国产模型中独树一帜。特别适合处理大型项目的代码,可以一次性处理 500 个文件。 +- 腾讯混元 CodeBuddy 能够和腾讯云服务深度集成,原生对接 3000+ 云 API,有等保三级安全认证,适合企业使用,而且价格便宜。 +- 百度文心一言有免费额度,而且和百度的生态(比如百度秒哒平台)深度集成,适合创意类小项目需要快速商业化的场景。 + + + +### 国产模型的优势和局限 + +国产模型最大的优势就是价格便宜,API 价格一般是国际模型的 1/10。而且对中文理解更准确,国内直接访问速度快,符合国内法规要求。 + +当然也有一些局限。在最复杂的任务上,顶尖能力还是比 Claude Opus 4.5 差一些,工具和插件支持也不如国际模型丰富。 + +不过对于预算有限的学生和个人开发者,主要做中文项目、不方便访问国际服务的用户,或者需要大量 API 调用的场景来说,国产模型是非常好的选择。像我的很多 AI 产品对接了 DeepSeek、通义千问或者 GLM,它们提供的免费额度也足够日常学习使用了。 + +而且我相信,国产模型是有机会超越国际模型的,我相信开源的力量! + +![开源模型排行榜](https://pic.yupi.icu/1/image-20260106215413048.png) + + + +## 七、如何选择合适的模型? + +这么多模型,各有各的优势,我到底该选哪个呢? + +其实选择模型主要看两个维度:你的预算和你的使用场景。 + + + +### 按预算选择 + +预算的多少直接决定了你能用什么工具。 + +如果你预算充足(每月 100 元以上),可以订阅 Cursor Pro(20 美元)配合 Claude Opus 4.5 或 Sonnet 4.5 使用,这是目前体验比较好的组合。Claude 的代码质量高,特别适合做复杂项目和商业项目。 + +如果预算有限,那就充分利用免费资源。DeepSeek 完全免费 + 通义千问有免费额度 + Gemini 3 Flash 每天有免费额度,这些免费资源组合起来,完全够学习和做个人项目使用了。而且国产模型的 API 价格很便宜,即使付费,每月几十块也能用得很爽。 + + + +### 按场景选择 + +不同的开发场景,适合的模型也不一样。 + +1)学习阶段:如果你还在学习,主力用免费的 DeepSeek 或通义千问,辅助用 Gemini 3 Flash 的免费额度。这个阶段重点是熟悉 AI 编程的感觉,免费模型完全够用。 + +2)做前端 / UI 项目:Gemini 3 Pro 在前端 UI 设计方面表现特别出色,实测它能生成质感很好的界面、3D 模型构建能力也很强。如果你主要做前端,Gemini 是很好的选择。 + +3)做全栈项目:优先选择编程能力强的 Claude Sonnet,能力全面,前后端都能应对。配合 Cursor 使用,开发体验很好。如果需要快速生成完整项目,智谱 GLM-4.7 的速度和效果也不错。 + +4)处理大型代码库:Gemini 3 Pro(1M Token)的超长上下文能力最合适,可以一次性分析整个项目。智谱 GLM-4.7 支持 200K Token,也能处理包含完整前端和后端的中大型项目代码。 + +5)快速迭代开发:GPT-5 的响应速度最快,特别适合需要快速验证想法的场景。智谱 GLM 在生成速度上也有优势。 + +6)大量测试和调用:DeepSeek 完全免费,而且 DeepSeek 和通义千问的 API 价格极低,适合需要大量调用的场景,测试时可以放心使用。 + + + +### 个人选择 + +对我个人而言,因为有比较丰富的项目开发经验、做过不少商业项目。所以在选择模型时,我一般会优先考虑能力较强的大模型。日常开发主力用 Cursor + Claude Sonnet,这个组合功能全面、效果好。 + +其他情况: + +- 遇到特别复杂的问题时,会切换到 Claude Opus。 +- 做快速原型或验证想法时,用 Gemini。 +- 需要追求速度时,会选择智谱 GLM,它在快速生成完整项目方面表现不错。 +- 大量测试时用 DeepSeek 或者通义千问 API,因为相对便宜。 + + + +## 写在最后 + +看到这里,相信你已经对目前主流的 AI 模型有了比较清晰的认识了。 + +最后我想再强调一次:**没有绝对最好的模型,只有最适合你当前需求的模型。** + +而且 AI 模型的发展速度很快,可能过几个月就会有新的模型出现,或者现有模型的能力发生变化。建议你每个月抽时间看看主流模型有没有更新、新模型发布时试用一下,或者多关注技术社区的评测和对比文章。说不定哪天就出现了更好用、更便宜的新模型呢! + +所以不要迷信某个模型,要学会根据实际情况灵活选择。 + +工具和模型都只是手段,真正重要的是你想做什么、能做出什么。选对了工具,可以让你事半功倍;但最终决定成败的,还是你的想法和执行力。 + +在下一篇文章中,我会详细讲解零代码平台的使用方法,带你体验最简单、最快速的 Vibe Coding 开发方式。 + +让我们继续前进吧,冲冲冲! + +![](https://pic.yupi.icu/1/image-20260106220555209.png) + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/02 AI 零代码平台.md b/Vibe Coding 零基础教程/10 编程工具/02 AI 零代码平台.md new file mode 100644 index 0000000..5bbe1ca --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/02 AI 零代码平台.md @@ -0,0 +1,399 @@ +# AI 零代码平台 + +> 打开浏览器就能做应用,最简单的 Vibe Coding 方式 + + + +你好,我是鱼皮。 + +如果你是完全零基础的新手,或者只是想快速验证一个想法,那么 **零代码平台** 绝对是你的最佳选择。 + +为什么这么说? + +因为零代码平台有 3 个巨大的优势: + +1. 不需要安装任何软件:打开浏览器就能用 +2. 不需要懂任何代码:用自然语言描述就行 +3. 所见即所得:改完立刻看到效果,还能一键部署上线 + +这篇文章,我会详细介绍几个主流的零代码平台,重点讲解国内的百度秒哒平台,并教你如何选择和使用它们。 + + + +## 一、什么是零代码平台? + +在介绍具体工具之前,我们先来搞清楚:什么是零代码平台? + +简单来说,**零代码平台就是在浏览器里打开就能用的 AI 编程工具。** + +你只需要用自然语言描述需求,AI 就会帮你生成完整的应用,并且可以实时预览和修改。 + +和传统开发的区别: + +![](https://pic.yupi.icu/1/traditiondevpkvibecoding%E5%A4%A7.jpeg) + +是不是简单太多了?这就是零代码平台的魅力所在。 + + + +### 适合什么场景? + +零代码平台特别适合: + +- 完全新手:还没学过编程,想快速上手 +- 快速原型:需要快速验证一个想法 +- 简单应用:做个人网站、落地页、简单工具 +- 学习体验:想先体验 Vibe Coding 的感觉 + +当然,零代码平台也有局限性,对于特别复杂的项目,可能还是需要用代码编辑器。但对于大多数场景来说,零代码平台已经足够强大了。 + +了解了零代码平台的基本概念后,接下来我会详细介绍几个主流平台。每个平台都有自己的特点和优势,我会用实际例子来演示它们的使用方法,帮你找到最适合自己的那一个。 + + + +## 二、Bolt.new 超快的原型工具 + +Bolt.new 是目前最火的零代码平台之一,由 StackBlitz 公司推出。它的最大特点就是 **快**,从想法到看到效果,可能只需要 1 分钟。 + +Bolt.new 的核心优势: + +1. 速度极快:生成代码和预览都很快 +2. 实时预览:边改边看,所见即所得 +3. 一键部署:支持部署到 Netlify 等平台 +4. 自动修复:AI 会自动检测和修复错误 + + + +### 怎么使用 Bolt.new? + +> 💡 之前在【基础必读】快速上手教程中我们已经学习过 Bolt.new 的使用了,这部分可以直接跳过。 + +使用 Bolt.new 非常简单,我用一个实际例子来演示,比如我想做一个简单的番茄钟计时器。 + +步骤: + +1)打开 [网站](https://bolt.new) ,在对话框中输入需求: + +``` +请帮我做一个番茄钟计时器,要求: +- 默认 25 分钟倒计时 +- 有开始、暂停、重置按钮 +- 时间到了有提示音 +- 界面简洁现代 +``` + +![](https://pic.yupi.icu/1/image-20260107110501086.png) + +2)等待 AI 生成代码 + +![](https://pic.yupi.icu/1/image-20260107110607536.png) + +3)在右侧预览区域看到实时效果 + +![](https://pic.yupi.icu/1/image-20260107110658047.png) + +4)如果不满意,继续对话调整。或者利用可视化编辑功能,点哪儿改哪儿~ + +``` +把背景色改成浅蓝色,按钮改成圆角 +``` + +![](https://pic.yupi.icu/1/image-20260107110744960.png) + +5)满意后,点击 "Publish" 按钮一键部署,就能得到一个可以分享的链接。 + +![](https://pic.yupi.icu/1/image-20260107111103207.png) + +就这么简单!整个过程不到 5 分钟。 + + + +### Bolt.new 的优缺点 + +Bolt.new 适合快速验证想法或者做简单的演示,速度非常快。学习门槛也很低,完全不需要懂代码,只要会说话就行。而且生成的代码你也可以看到,想学习的话可以研究一下。最后,部署网站也很简单,点一下按钮就能上线,还会给你一个可以分享的链接。 + +但是如果项目特别复杂,比如需要复杂的后端逻辑、数据库操作等,Bolt.new 虽然也能做,但效果可能没那么好。虽然可以通过对话调整网站,但对于特别细节的定制,可能不如直接写代码灵活。而且必须在网页上使用,编辑代码的体验一般。 + + + +### 价格 + +- 免费版:有使用次数限制,适合体验和学习 +- 付费版:每月 25 美元左右,去除限制 + +如果你是新手,先用免费版体验一下,感受 Vibe Coding 的魅力。等你确定要深入学习了,再考虑付费。 + + + +## 三、Lovable 全栈应用构建器 + +Lovable 是一个强大的零代码平台,它不仅能做前端,还能做全栈应用:包括前端、后端、数据库,甚至用户认证! + +Lovable 的核心优势: + +1. 全栈能力:可以做完整的 Web 应用 +2. 数据库集成:内置 Supabase,可以存储数据 +3. 用户认证:支持登录、注册等功能 +4. 代码质量高:生成的代码结构清晰,易于维护 + + + +### 怎么使用 Lovable? + +让我用一个更复杂的例子来演示。比如我想做一个简单的记账应用,需要登录功能。 + +步骤: + +1)打开 [网站](https://lovable.dev),先用 GitHub 或者邮箱登录 + +2)在对话框中输入需求: + +``` +请帮我做一个记账应用,功能包括: +- 用户登录和注册 +- 添加收入和支出记录 +- 显示总收入、总支出和余额 +- 可以按日期筛选记录 +- 数据要保存到数据库 +``` + +![](https://pic.yupi.icu/1/image-20260107111601472.png) + +3)接下来 Lovable 会生成完整的全栈应用,包括: + + - 前端界面(React) + - 后端 API + - 数据库表结构(Supabase) + - 用户认证系统 + +在这个过程中,你可能需要人工确认一些操作,比如启用 Cloud 来支持数据库和用户认证: + +![](https://pic.yupi.icu/1/image-20260107111715955.png) + +4)几分钟过后,AI 生成完毕,可以在预览区域测试功能 + +![](https://pic.yupi.icu/1/image-20260107112144754.png) + +5)继续通过对话和可视化修改功能优化细节,编辑体验还是不错的 + +![](https://pic.yupi.icu/1/image-20260107112259442.png) + +6)一键部署上线 + +![](https://pic.yupi.icu/1/image-20260107112411553.png) + + + +### Lovable 的优缺点 + +如果你的项目需要后端、数据库、用户系统,Lovable 是不错的选择,可以做更复杂的全栈应用。 + +它生成的代码组织得也不错,如果你以后想导出代码自己维护,也比较容易。而且直接集成了 Supabase 这个强大的后端服务,让你可以轻松处理数据存储、用户认证等复杂功能。 + +![](https://pic.yupi.icu/1/image-20260107112431787.png) + +当然,因为功能更强大,所以相对来说也更复杂一些,新手可能需要一点时间适应。而且因为要生成更多的代码(前端 + 后端),速度可能会比 Bolt.new 慢一些。 + + + +### 价格 + +- 免费版:有使用数量限制 +- 付费版:每月 25 ~ 50 美元左右 + +如果你想做的是一个完整的 Web 应用,需要数据库和用户系统,Lovable 是很好的选择。但如果只是做简单的展示页面,用 Bolt.new 就够了。 + + + +## 四、百度秒哒 - 国产零代码平台 + +百度秒哒是百度推出的 AI 无代码应用搭建平台,也是国内最成功的零代码平台之一。 + +秒哒的最大特点是不仅能生成应用,还能直接商业化。它内置了支付功能(包括微信小程序支付),可以直接接入使用,不需要额外开发。而且界面完全中文,对国内用户特别友好。 + + + +### 怎么使用百度秒哒? + +使用秒哒非常简单,跟其他零代码平台一样: + +1)访问 [百度秒哒官网](https://www.miaoda.cn/),注册账号并登录 + +2)用中文描述你的需求: + +``` +做一个在线预约系统,用户可以选择日期和时间,填写联系方式,提交预约 +``` + +![](https://pic.yupi.icu/1/image-20260107112754177.png) + +3)接下来进入开发阶段,AI 可能会通过对话跟你确认需求。 + +如果你希望做出商业级项目,一定要好好跟它沟通;如果只是做个 Demo 玩玩,直接跳过对话就好。 + +![](https://pic.yupi.icu/1/image-20260107112932144.png) + +然后 AI 生成了需求文档: + +![](https://pic.yupi.icu/1/image-20260107113021068.png) + +你可以手动编辑文档,也可以直接立即生成应用。 + +等待几分钟后,AI 自动生成了完整的应用,可以实时预览效果: + +![](https://pic.yupi.icu/1/image-20260107113641264.png) + +5)跟其他平台一样,你可以对应用进行修改。支持可视化编辑,编辑体验还是不错的。 + +![](https://pic.yupi.icu/1/image-20260107113743213.png) + +6)满意后,可以直接发布,获取到访问链接。 + +![](https://pic.yupi.icu/1/image-20260107113853665.png) + +7)如果需要更多能力,可以利用插件扩展功能,比如接入微信支付来收费 + +![](https://pic.yupi.icu/1/image-20260107113922034.png) + + + +### 百度秒哒的优缺点 + +秒哒最大的优势是中文友好,完全不需要懂英文。而且商业化能力强,内置支付功能,可以直接做收费应用,有大量的成功案例可以参考。 + +但我实测下来,相比于国外的平台,生成的效果相对一般,适合中小型应用。; + +不过对于国内用户,特别是想做小程序或者需要快速在国内市场商业化的场景,秒哒是个不错的选择。 + + + +## 四、其他值得关注的零代码平台 + +除了上面 3 个主流平台,还有一些其他的零代码平台也值得了解。 + +### v0 + +[v0](https://v0.dev) 是 Vercel 推出的 AI 协作助手,可以设计、开发和扩展全栈 Web 应用。 + +特点:UI 质量高、可以生成完整应用、基于 shadcn/ui、支持设计模式手动调整、可以连接数据库和 API、支持一键部署到 Vercel、有丰富的模板库。 + +适合场景:需要生成漂亮的界面、快速搭建全栈应用、对设计要求高的场景。 + +![](https://pic.yupi.icu/1/image-20260107123602515.png) + + + +### Replit Agent + +[Replit](https://replit.com) 不仅是零代码平台,还是完整的在线开发环境。Replit Agent 可以根据你的描述自动构建应用,支持多种编程语言。 + +特点:支持多种语言、完全在浏览器中运行、内置数据库和部署、可以在线协作开发、支持移动设备、有免费版本。 + +适合场景:需要后端开发、想学习多种语言、需要团队协作、想在手机上编程的项目。 + +![](https://pic.yupi.icu/1/image-20260107123620053.png) + + + +### Firebase Studio + +[Firebase Studio](https://studio.firebase.google.com) 是 Google 推出的协作工作空间,统一了 Project IDX 和 Gemini in Firebase,提供 AI 辅助的应用开发体验。 + +特点:完全基于浏览器、集成 Firebase 后端服务、使用 Gemini AI 辅助、支持 React 等框架、可以编码、调试、测试、重构。 + +适合场景:使用 Google 生态、需要 Firebase 服务、想要 AI 辅助开发的项目。 + +![](https://pic.yupi.icu/1/image-20260107123700807.png) + + + +## 五、AI 应用开发平台 + +除了上面介绍的零代码平台,还有一类专门用来开发 AI 应用的平台,比如 Dify、Coze、阿里云百炼等。 + +它们的定位和 Bolt.new 这种零代码平台不太一样。Bolt.new 主要用来生成普通的网站和应用,而 AI 应用开发平台主要用来构建 AI 聊天机器人、AI 知识库问答、AI 工作流等需要用到 AI 能力的应用。 + +简单来说,如果你想做的是普通网站或应用(比如个人主页、电商网站),用 Bolt.new、百度秒哒就够了。如果你想做的是 AI 应用(比如智能客服、AI 助手、知识库问答系统),可以试试 Dify 或 Coze。 + +![Dify 开发 AI 应用](https://pic.yupi.icu/1/1743561915955-ad27735a-c927-4207-b769-03fda32081b6.png) + +这些平台都提供了可视化的配置界面,可以通过拖拽的方式搭建 AI 工作流,不需要写代码就能做出功能强大的 AI 应用。 + +![阿里云百炼搭建 AI 工作流](https://pic.yupi.icu/1/1745388167957-d7995436-fc2f-410e-bc59-4f6db6544359-20260112161510229.png) + + + +## 六、怎么选择零代码平台? + +看到这里,你可能会问:这么多平台各有千秋,我该选哪个呢? + +其实选择很简单,主要看你的需求场景和个人情况。 + +1)根据需求选择 + +如果你是国内用户,想做小程序或者需要商业化,百度秒哒是首选,中文友好而且内置支付功能,已经有几十万个商业应用的成功案例。 + +如果你需要快速做原型、简单的页面,Bolt.new 速度快、上手简单,1 ~ 2 分钟就能看到效果。如果你需要做完整的 Web 应用,需要数据库和用户系统,Lovable 是更好的选择,功能最强大。 + +2)根据个人情况选择 + +如果你是完全新手(从未写过代码),建议从百度秒哒或 Bolt.new 开始,最简单、最容易上手。如果你有一点基础(学过一些编程),可以尝试 Lovable,功能更强大,可以做更复杂的东西。 + +我的建议是从百度秒哒或 Bolt.new 开始,然后根据需求逐步尝试其他平台。 + + + +## 七、零代码平台实战技巧 + +在使用零代码平台的过程中,我总结了一些实用技巧,分享给你。 + +1)需求描述要具体 + +不要只说 “做一个网站”,而是要详细描述,比如 “做一个个人作品集网站,包含首页(大标题 + 简介 + 头像)、项目展示(卡片式布局)、联系方式,风格简洁现代,使用蓝色系”。需求越具体,AI 生成的效果就越接近你的预期。 + +2)要分步骤实现 + +不要一次性提出太多要求,而是分步骤来。先做基本框架,然后添加功能,最后优化细节。这样更容易控制进度,也更容易发现和修复问题。 + +3)如果你有参考的设计,可以上传图片让 AI 参考,能够生成更符合预期的 UI。 + +4)每次 AI 生成代码后,一定要在预览区域测试一下。比如点击所有按钮看看功能是否正常、在不同屏幕尺寸下查看效果、输入一些测试数据看看显示是否正确。发现问题就立刻让 AI 修复,不要等到最后问题越堆越多。 + +5)在做重大修改之前,最好保存一下当前版本。大部分平台都支持版本历史,万一改坏了可以回退。 + +![](https://pic.yupi.icu/1/image-20260107114739910.png) + +6)最后,即使你现在不懂代码,也可以把生成的代码导出来保存。以后学习的时候,可以回过头来研究这些代码是怎么写的。 + + + +## 写在最后 + +看到这里,相信你已经对零代码平台有了全面的了解。 + +我认为,**零代码平台是学习 Vibe Coding 的最佳起点。** + +它让你可以快速看到成果建立信心、理解 AI 编程的工作方式、积累项目经验、验证自己的想法。 + +在你看完这篇教程之后,一定要马上动手试试!可以做一个简单的计算器、一个待办事项、或者个人介绍页面…… 什么都行,重要的是开始行动。 + +记住,Vibe Coding 最大的魅力就是快速迭代。不要追求一次就做到完美,而是快速做出来,然后不断改进。 + +在下一篇文章中,我会详细讲解 AI 代码编辑器的使用方法,带你体验更专业、更强大的 Vibe Coding 方式。 + +加油! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/03 AI 智能体平台.md b/Vibe Coding 零基础教程/10 编程工具/03 AI 智能体平台.md new file mode 100644 index 0000000..54ed21f --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/03 AI 智能体平台.md @@ -0,0 +1,291 @@ +# AI 智能体平台 + + + +你好,我是鱼皮。 + +在前面的文章中,我们学习了零代码平台,可以用一句话快速生成网站和应用。但如果你想让 AI 完成更复杂的任务,比如: + +- 生成一个包含几十个页面的大型网站 +- 制作一个几十页的 PPT +- 自动生成 100 个短视频 +- 持续运行几个小时的复杂工作流 + +这些任务用零代码平台可能就不太合适了,因为它们需要你不断地和 AI 对话、确认、修改。有没有一种工具,能让 AI 自主规划任务、自动执行,直到完成为止? + +这篇文章,我会介绍 **AI 智能体平台**,让 AI 自主执行复杂任务的强大工具。 + + + +## 一、什么是 AI 智能体平台? + +在讲 AI 智能体平台之前,我先帮大家理清几个容易混淆的概念: + +1)零代码平台(Bolt.new、Lovable、秒哒):一句话生成完整项目,适合快速做网站和应用。 + +你说一句话,AI 生成代码,你预览效果,满意就部署。整个过程可能只需要几分钟。 + +2)AI 应用开发平台(Dify、Coze、百炼):可视化配置 AI 应用,适合做智能客服、知识库问答等 AI 应用。 + +你通过拖拽的方式配置工作流,设置提示词和知识库,不需要写代码。 + +3)AI 智能体平台(Flowith、Manus):AI 自主规划和执行复杂任务,可以持续运行几个小时甚至几天。 + +你只需要描述目标,AI 会自己规划步骤、调用工具、执行任务,直到完成为止。 + +简单来说,**AI 智能体平台就是让 AI 当项目经理,你只需要告诉它目标,它会自己规划和执行。** + + + +## 二、Flowith:无限执行的 AI 智能体 + +[Flowith](https://flowith.io/) 是目前最火的 AI 智能体平台之一,被称为 “世界上第一款无限的 AI 智能体”(也可能是自称)。 + +什么叫 “无限”? + +如果我们把 AI 智能体想象成人类,有的人拿到任务后,觉得太复杂或者遇到困难就放弃了;而有的人哪怕废寝忘食、拼了一辈子,也要坚持完成任务。 + +Flowith 便是后者,**无限的步骤、无限的上下文、无限的工具**,使得它能够持续不断地自主执行任务,直到完成才罢休。 + +![](https://pic.yupi.icu/1/1749013910178-598b6214-90e0-4940-b586-acac831947fa.png) + + + +### 怎么使用 Flowith? + +让我用几个实际例子来演示 Flowith 的强大能力。 + + + +#### 1、生成复杂大型网站 + +进入 [Flowith 主页](https://flowith.io/),看到了熟悉的 AI 对话页面。这是 Flowith 的基础功能,可以生成文本、图片、视频,利用联网搜索工具和自定义知识库来丰富回答的内容。 + +![](https://pic.yupi.icu/1/image-20250604130433876.png) + +我比较喜欢的是 **比较模式** 这个功能,可以选择各种主流大模型,快速对比同一个提示词的作答效果: + +![](https://pic.yupi.icu/1/1749014090154-389652e2-bff4-429a-aca5-caf340413958.png) + +下面让我们开启 Flowith 的 **Agent 模式**,也就是能够在云端自主规划任务、调用工具分步骤完成任务的超级智能体。并且开启 **无限模式**,让它一直工作直到完成任务。 + +![](https://pic.yupi.icu/1/1749014872173-4d7c5086-ea2c-4faa-89f2-c7b5307a5183.png) + +输入提示词: + +``` +帮我生成一个复杂的企业级前端网站 - 低代码生成工具。 +至少有 20 个页面,并且确保所有的核心功能都完整可用。 +``` + +执行后,我们会进入到 **工作流画布页面**,可以看到,AI 首先为整个任务规划出了非常多的步骤。比如要制作网站,需要先写详细的架构设计文档、然后构建基础 UI 框架、再依次开发各个页面。 + +![](https://pic.yupi.icu/1/1749015118875-d8509204-be5d-4c01-b2c8-50737f20a9ba.png) + +这就是 AI 智能体能够自主执行复杂任务的原理。虽然没办法一次性完成大任务,那就先把任务分解成若干小任务,然后逐个完成并总结最终的结果。 + +![](https://pic.yupi.icu/1/1749015434868-dc3ab67e-9196-4ad1-9835-5afe4744f789.png) + +AI 会自主选择合适的工具来完成任务,比如生成网站并部署到云端服务器上,让我们可以实时查看每一步生成的网站效果: + +![](https://pic.yupi.icu/1/1749015539809-9fd2d7b3-8377-4a54-a904-10eae595f1ee.png) + +经过了漫长的等待,大概 2 个小时左右,整个网站终于生成完成。我之前在 Cursor 中使用智能体,从来没有自主执行过这么长的时间。 + +让我们看看生成的文件。首先生成的文档非常齐全,什么测试报告、发布确认文档、系统维护指南、测试计划、总结报告,应有尽有。 + +![](https://pic.yupi.icu/1/1749016112489-c0ef8c0c-718b-4203-a96b-edc3876e95f5.png) + +再看看生成的项目代码,页面文件还算完整,生成了 5000 多行代码,属于中小型项目的规模。 + +![](https://pic.yupi.icu/1/1749016258008-7c68d00a-2ea8-40f2-a7d9-ef32e4432d86.png) + +运行下网站看看效果。估计是用的国外大模型,生成的网站纯英文,页面有模有样,符合低代码平台的功能和设计。 + +![](https://pic.yupi.icu/1/1749016335224-df5392ac-256e-4ad5-9596-75414c47dfe0.png) + +但是由于缺少后端以及示例数据,很多页面的功能是没有办法验证的,效果看起来也一般。 + + + +#### 2、生成几十页 PPT + +下面我们再来搞一个更复杂的任务,生成一个至少有 50 页的 PPT: + +``` +帮我生成一个 PPT,用于从全方面介绍程序员鱼皮,至少 50 页。 +``` + +这次的 AI 智能体显然更聪明,先同时调用了多个网页搜索工具,从不同的来源搜索到信息,然后再进行整合: + +![](https://pic.yupi.icu/1/1749017575205-4c4feed4-a76f-44ff-8553-51a289648d3e.png) + +AI 在给 PPT 准备图片素材时也很聪明,不仅从网络上搜索到了图片,而且还调用其他的 AI 绘图大模型并行生成了多张配图。实话说,这个小卡片的效果确实惊艳到我了。 + +![](https://pic.yupi.icu/1/1749017650764-99af8845-aba5-4a08-a960-20a9abbb4e5d.png) + +有趣的是,我发现 AI 并不是 "死脑筋"。在执行任务的过程中,它可能会根据情况重新规划步骤;有时还会主动询问用户的意见,能够让我们参与进来,指导 AI 更好地完成任务。 + +![](https://pic.yupi.icu/1/1749017795714-cce96312-6347-47a3-bb6d-ecba3b3a49cf.png) + +不过任务的执行并非一帆风顺,有的时候会出现步骤执行失败的情况,不过 AI 会自动重试: + +![](https://pic.yupi.icu/1/1749017899834-a7d1e6f1-e56c-4ba8-9e5d-172ff9f2a1e2.png) + +但更严重的是任务卡死。比如我一直卡在使用浏览器运行工具这一步,这时就需要手动重新执行。不过仔细想想也挺合理,人类工作时有时候也会摸鱼睡着了,这时就需要其他人把他叫醒。 + +经过一个多小时,AI 终于生成了一个可在线访问的 PPT 网页,甚至部署到了服务器上。我们可以直接查看浏览效果: + +![](https://pic.yupi.icu/1/1749018233536-a331b205-43e4-43b4-aaf6-21239b408815.png) + +有一说一,我感觉还挺不错的。虽然生成的不是标准的 PPT 格式,而是 HTML 网页代码,但是利用工具,也能直接转成 PPT 格式。 + +![](https://pic.yupi.icu/1/1749018314994-e00282d5-db98-41ff-b119-9f8dbdb7b27a.png) + + + +#### 3、生成自媒体图文 + +下面再让 AI 生成一篇自媒体图文: + +``` +我是一位自媒体知识博主,请帮我生成一篇图文并茂的图文稿子。 +主题是【介绍程序员鱼皮的编程导航学习网站】 +``` + +建议大家每隔一段时间来看看 AI 的工作进度,说不定有时 AI 会主动询问你的建议,你不回答就会一直卡在这里(当然也可以跳过)。 + +![](https://pic.yupi.icu/1/1749018563491-dd75da94-48a0-4ef7-95c0-66085b7a99cb.png) + +大概过了 30 分钟,AI 完成了任务,生成了一个图文并茂的网站,效果还不错。 + +![](https://pic.yupi.icu/1/1749018787641-1cff498b-d17e-4e20-b6ea-a0faa90a9b54.png) + +不得不说,AI 真的很喜欢生成网站啊。这也提醒我们,如果想让 AI 更准确地完成复杂任务,就一定要把任务描述清楚(比如生成 Markdown 格式的图文)。 + + + +### Flowith 的优缺点 + +Flowith 的优势很明显。首先是 **无限执行能力**,可以持续运行几个小时甚至几天,完成超级复杂的任务。而且 AI 的规划和自我修正能力很强,能够根据情况调整计划。 + +还有就是 **并行执行能力**,可以同时调用多个 AI 模型或工具,大大提高效率。而且支持云端部署,生成的网站可以直接在线访问。 + +当然也有一些局限。首先是 **执行效率比较低**,同样的任务,Cursor 可能 10 分钟就能完成,Flowith 可能需要 1-2 个小时。而且消耗的费用不太可控,长时间运行会消耗大量的 Token。 + +另外,定制修改能力一般。如果你想精确控制每一步,Flowith 可能不太适合。它更适合那种 "我不管过程,只要结果" 的场景。 + +价格上,Flowith 有免费版和付费版。免费版有使用限制,付费版根据使用量计费。 + + + +## 三、Manus:通用 AI 智能体 + +[Manus](https://www.manus.im/) 是另一个非常火的 AI 智能体平台,刚出的时候直接爆火。 + +Manus 采用多模型协同机制,具备强大的工具调用能力,能在多个领域自动生成和执行任务。而且 Manus 的自主规划能力很强,能够独立思考和规划,确保任务的执行。 + +![](https://pic.yupi.icu/1/image-20260112171640030.png) + +比如在房产选购任务中,Manus 能分解为社区安全分析、预算计算、房源筛选等子任务,并通过代码智能体重构思考过程,确保透明可追溯。 + + + +## 四、OpenManus:开源版 Manus + +[OpenManus](https://github.com/FoundationAgents/OpenManus) 是 Manus 的开源版本,据说是由几个 00 后用 3 小时复刻出来的。 + +![](https://pic.yupi.icu/1/image-20260112172154353.png) + +虽然功能没有 Manus 那么完善,但基本的智能体能力都有。而且完全开源免费,可以自己部署和定制。 + +OpenManus 是一个模块化的开源智能体框架,适用于: + +- 研究原型验证 +- 智能体编排实验 +- 自动化工作流 +- 将多模态/LLM 能力集成到现有系统 + +如果你喜欢折腾,想深入了解 AI 智能体的实现原理,OpenManus 是个不错的选择。 + +💡 鱼皮手把手带做的 AI 超级智能体项目中,带大家深入讲解了 OpenManus 的源码,并从 0 开始带大家实现了一个类似 OpenManus 的超级智能体,感兴趣的同学可以看 [保姆级视频教程](https://www.codefather.cn/course/aiagent) 学习。 + +![](https://pic.yupi.icu/1/openmanus.png) + + + +## 五、AI 智能体平台实战建议 + +如果你想尝试 AI 智能体平台,我有几个建议: + +### 1、任务描述要清晰 + +虽然 AI 能自主规划,但你的任务描述越清晰,AI 的执行效果就越好。不要只说 "做一个网站",而是要说清楚: + +- 网站的类型(企业官网、博客、电商等) +- 核心功能(至少列出 3-5 个) +- 风格要求(简洁、现代、卡通等) +- 技术要求(如果有的话) + + + +### 2、要有耐心 + +AI 智能体平台的执行时间比较长,可能需要几个小时。建议: + +- 选择一个不太忙的时间开始任务 +- 定期查看进度,及时回复 AI 的询问 +- 如果任务卡住了,手动重新执行 + + + +### 3、控制成本 + +长时间运行会消耗大量的 Token,成本可能会比较高。建议: + +- 先用免费额度测试 +- 明确任务范围,避免 AI 做太多不必要的事情 +- 如果预算有限,可以选择用 Cursor 或者其他 AI 编程工具分步骤完成 + + + +### 4、结合其他工具使用(按需) + +AI 智能体平台更适合生成基础内容,然后再用 Cursor 进行精修。比如: + +- 用 Flowith 生成大型网站的基础框架 +- 导出代码到 Cursor 中 +- 用 Cursor 进行细节优化和功能完善 + +这样既能利用 Flowith 的自主执行能力,又能利用 Cursor 的精确控制能力。 + + + +## 写在最后 + +看到这里,相信你已经对 AI 智能体平台有了全面的了解。 + +我建议不要把它当成日常开发工具,而是当成一个特殊场景的补充工具。如果你需要生成大量内容又不想人工投入精力、或者想快速搭建一个大型项目的框架时,可以试试 Flowith 等 AI 智能体平台。 + +到这里,我们已经学习了零代码开发的各种工具。从快速生成项目的零代码平台,到能自主执行复杂任务的 AI 智能体平台,这些工具都不需要你写代码,就能做出功能强大的应用。 + +但如果你想更深入地学习编程,想要更精确地控制代码,那么 AI 代码编辑器会更适合你。 + +在下一篇文章中,我会详细讲解 Cursor 等 AI 代码编辑器的使用方法,带你体验更专业、更强大的 Vibe Coding 方式。 + +加油! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/04 AI 代码编辑器.md b/Vibe Coding 零基础教程/10 编程工具/04 AI 代码编辑器.md new file mode 100644 index 0000000..6851fe7 --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/04 AI 代码编辑器.md @@ -0,0 +1,464 @@ +# AI 代码编辑器 + +> 更专业、更强大的 Vibe Coding 开发方式 + + + +你好,我是鱼皮。 + +在前面的文章中,我们学习了零代码平台和 AI 智能体平台的使用方法。如果你已经用这些工具做出了几个项目,可能会开始感觉到一些局限: + +- 我想修改某个具体的文件,但零代码平台不够灵活...... +- 项目越来越大,在浏览器里管理代码有点吃力...... +- 我想学习更专业的开发方式,但又不想放弃 AI 的帮助...... + +如果你有这些想法,那么恭喜你,是时候升级到 AI 代码编辑器了! + +AI 代码编辑器结合了传统代码编辑器的强大功能和 AI 的智能辅助,让你可以更灵活、更专业地开发项目。这篇文章,我会详细讲解主流的 AI 代码编辑器 Cursor,并分享更多值得关注的 AI 代码编辑器。 + + + +## 一、什么是 AI 代码编辑器? + +在搞清楚 AI 代码编辑器之前,我们先来理解一个基本概念:什么是代码编辑器? + +简单来说,**代码编辑器就是程序员写代码的工具**,就像 Word 是写文档的工具一样。常见的代码编辑器有 VS Code、Sublime Text、Notepad++ 等。 + +还有一个相关的概念叫 **IDE(集成开发环境)**,它比代码编辑器功能更强大,不仅能写代码,还集成了调试、编译、版本控制等一整套开发工具。常见的 IDE 有 JetBrains 公司的 IntelliJ IDEA、PyCharm、WebStorm 等。 + +不过在实际使用中,代码编辑器和 IDE 的界限已经越来越模糊了。比如 VS Code 虽然叫编辑器,但通过安装插件,功能已经和 IDE 差不多了。所以你不用太纠结这两个概念的区别,知道它们都是写代码的工具就行。 + +现在我们来搞清楚 2 个问题: + +- AI 代码编辑器和零代码平台有什么区别? +- AI 代码编辑器和传统代码编辑器有什么区别? + + + +### AI 代码编辑器 PK 零代码平台 + +零代码平台是在浏览器里用的,你通过对话让 AI 生成整个应用,特别适合快速做原型和简单项目。而 AI 代码编辑器需要下载安装到电脑,可以精确控制每个文件、每行代码,而且有完整的开发工具链(比如代码调试、版本控制等),更适合复杂项目和专业开发。 + +打个比方,零代码平台就像在餐厅点菜,厨师做好端上来;AI 代码编辑器则像在自己厨房做菜,有个智能助手在旁边帮你。 + + + +### AI 代码编辑器 PK 传统代码编辑器 + +那 AI 代码编辑器和传统的代码编辑器(比如 VS Code、JetBrains、Sublime Text)又有什么区别呢? + +我认为,最大的区别是 **AI 的深度集成**。 + +传统代码编辑器只是一个写代码的工具,你需要自己想清楚每一行代码怎么写。而 AI 代码编辑器内置了强大的 AI 助手,可以帮你生成代码、解释代码、修改代码、甚至自动执行多文件任务。 + +具体来说,AI 代码编辑器有这些传统编辑器没有的能力: + +- 用自然语言描述需求就能生成代码 +- AI 能理解整个项目的上下文 +- 可以自动修改多个文件 +- 能自动执行命令(比如安装依赖) +- 有智能代码补全(比传统补全聪明得多) + +简单来说,传统代码编辑器是 “你自己写代码的工具”,AI 代码编辑器是 “AI 帮你写代码的工具”。实际使用中,效率差距可能是 10 倍以上。 + +如果你有一定的编程基础,上手 AI 代码编辑器会非常快。 + + + +## 二、Cursor 最火的 AI 代码编辑器 + +Cursor 是目前最火的 AI 代码编辑器,被称为 “AI 时代的 VS Code”。因为它基于 VS Code 改造,保留了 VS Code 的所有优点,同时加入了强大的 AI 功能。 + +![](https://pic.yupi.icu/1/image-20260107133923123.png) + +Cursor 的核心优势: + +1. 多种 AI 功能:Tab 代码补全、Agent 智能体、Chat 对话、内联编辑等 +2. 多模型支持:可以使用 Claude、GPT、Gemini、Grok 等多个模型,还有 Auto 自动选择功能 +3. 上下文感知:AI 能理解整个项目的代码,支持最高 1M Token 的上下文(Max 模式) +4. 生态成熟:基于 VS Code 开发,支持所有 VS Code 插件 + + + +### Cursor 的核心 AI 功能 + +Cursor 最强大的地方在于它提供了多种 AI 功能,适合不同的场景。 + + + +#### 1、Tab 代码补全 + +这是最基础的功能,类似于 GitHub Copilot。当你写代码时,AI 会自动预测你要写什么,按 Tab 键就能接受建议。 + +![](https://pic.yupi.icu/1/image-20260107134002087.png) + +这个功能特别适合写重复性代码、补全函数实现、快速生成样板代码。优点是速度快,不会打断思路;缺点是只能补全,不能做大的修改。 + + + +#### 2、Agent 智能体 + +这是 Cursor 2.0 推出的最强大功能,也是最接近 AI 程序员的模式。在这个模式下,AI 可以同时修改多个文件、自动创建新文件、执行命令(比如安装依赖)、理解整个项目结构、甚至使用浏览器测试。 + +你可以用它来添加新功能(需要修改多个文件)、重构代码、修复复杂 Bug、搭建项目框架等,可以处理各种复杂任务。 + +Cursor 还推出了自研的 **Composer 模型**,这是一个专门为软件工程优化的 AI 模型,生成速度比同类模型快 4 倍。 + +举个例子: +``` +请添加用户认证功能,包括: +- 登录页面 +- 注册页面 +- 认证中间件 +- 用户数据库模型 +``` + +Agent 会自动分析项目,安装必要的依赖包、创建需要的文件、修改相关代码,直到完成任务。 + +![](https://pic.yupi.icu/1/image-20260107134332952.png) + + + +#### 3、Chat 对话和内联编辑 + +Chat 是最常用的功能。你可以选中一段代码,然后用自然语言告诉 AI 你想做什么。可以用它来解释代码的作用、修改某个函数、修复 bug、优化性能等等。 + +![](https://pic.yupi.icu/1/image-20260107134511105.png) + +内联编辑则可以让你直接在代码中修改,按 `Cmd/Ctrl + K` 快速调用,AI 会在当前位置生成或修改代码。 + +![](https://pic.yupi.icu/1/image-20260107134532921.png) + +举些例子,你可以选中一段代码,然后跟 AI 说: +- 这个函数的作用是什么? +- 帮我优化一下性能 +- 加上错误处理 + + + +### 怎么使用 Cursor? + +让我用一个完整的例子来演示 Cursor 的使用流程。 + +比如我想做一个仿真的电子黑板,想画什么就画什么,还能导出为图片。 + +挥毫泼墨,好不痛快! + +1)首先,到 [Cursor 官网](https://cursor.com) 下载适合你系统的版本(Windows/Mac/Linux 都支持)。 + +2)创建一个空的文件夹,用于存放整个项目代码。推荐名称为英文,比如 `yupi-drawboard` 。 + +然后打开 Cursor,打开刚刚创建的文件夹。 + +![](https://pic.yupi.icu/1/image-20260107142103143.png) + +3)打开 Agent 面板,选择 Agent 模式和大模型,然后输入提示词来描述你的需求: + +``` +帮我开发一个仿真的电子黑板,用户可以在上面画画并导出为图片 +``` + +![](https://pic.yupi.icu/1/image-20260107142244095.png) + +接下来喝杯咖啡,等待 AI 生成代码就好。它会自动创建多个文件,你可以在 Agent 面板中看到它的工作进度。 + +![](https://pic.yupi.icu/1/image-20260107142422465.png) + +4)几分钟之后,AI 生成了完整的代码。你可以选择全部接受或者全部拒绝,也可以自己选择接受哪些代码: + +![](https://pic.yupi.icu/1/image-20260107142737589.png) + +5)由于需求比较简单,直接在浏览器中打开 `index.html` 网页文件,就能看到运行效果了。 + +![](https://pic.yupi.icu/1/image-20260107142906255.png) + +效果还不错吧?猜猜我写的是什么~ + +6)如果需要修改细节或者修复 Bug,也是直接跟 AI 对话即可。 + +当然,如果你有一定的编程基础,可以自己选中某段代码,按 `Cmd/Ctrl + K` 使用内联编辑。 + +![](https://pic.yupi.icu/1/image-20260107142631274.png) + +当你自己写新代码时,AI 会自动提示(Tab 补全功能),按 Tab 接受建议就行。 + +这就是 Cursor 的基本用法。此外 Cursor 还支持联网搜索、使用浏览器、语音输入、MCP 插件等更多能力,后续可以慢慢探索。 + + + +### Cursor 的优缺点 + +Cursor 是我目前用过的功能最全面的 AI 代码编辑器,它的几种 AI 模式覆盖了从代码补全到智能体的所有场景。 + +因为基于 VS Code,所有 VS Code 的插件、主题、快捷键都能用,如果你之前用过 VS Code,上手会非常快。 + +而且你可以在 Claude、GPT、Gemini 等主流新模型之间自由切换,还能使用自己的大模型和 API Key。 + +![](https://pic.yupi.icu/1/1764145641557-9b0b777f-f9ca-4cb4-8566-437dbd4b2cbb.png) + +此外,Cursor 的用户量很多,遇到问题比较容易找到解决方案,网上的教程、视频也最多,鱼皮自己也是一直在关注 Cursor 的发展动态,也做过不少教程。 + +不过 Cursor 最大的硬伤还是价格,高级套餐本身价格就比较贵,每个套餐还有用量的限制。 + +当你超出每月包含的用量时,可以选择添加按需用量(按 API 费率计费)或者升级到更高档位。不同模型的 API 成本不同,你的模型选择会影响用量消耗速度。 + +详细的价格信息和用量计算,建议查看 [Cursor 官方定价文档](https://cursor.com/cn/docs/account/pricing),那里有最新最准确的信息。 + +如果你认真学习 Vibe Coding,我推荐订阅 Pro 版。20 刀换来的效率提升,对大多数人来说是值得的。如果你是重度用户,每天大量使用 Agent,可以考虑 Pro Plus 或 Ultra。 + +像鱼皮这种 Cursor 重度患者,即使开了高级套餐,也得承受天价账单…… + +![](https://pic.yupi.icu/1/yupicursorbilling.png) + +此外,Agent 模式处理复杂任务时可能需要等待较长时间。虽然有 AI 辅助,但还是需要一定的编程基础,完全零基础的新手可能会觉得有点复杂。 + +更多 Cursor 的使用技巧和省钱方法,可以查看本系列教程的【进阶选学:经验技巧】板块,那里有详细的讲解。 + + + + + +## 三、其他主流 AI 代码编辑器 + +除了 Cursor,市面上还有一些其他的 AI 代码编辑器值得了解。 + + + +### Windsurf + +[Windsurf](https://codeium.com/windsurf) 是 Codeium 公司推出的 AI 代码编辑器,最大的优势是完全免费。用完额度后,Windsurf 仍可免费使用,特别适合学生和预算有限的开发者。 + +并且提供了 Cascade 智能体模式(类似 Cursor 的 Agent),用自然语言描述需求,AI 会自动创建和修改多个文件。最大的优势是完全免费 + +![](https://pic.yupi.icu/1/image-20260107135727334.png) + + + +### Antigravity + +[Antigravity](https://antigravity.google) 是 Google 推出的智能体开发平台,界面类似 VS Code。它采用 Agent 优先的设计,AI 智能体可以自主规划、执行和验证复杂任务。 + +它集成了 Gemini 等大模型,支持 1M Token 上下文,适合想尝试 Google AI 生态、需要超长上下文的大型项目的开发者。 + +![](https://pic.yupi.icu/1/image-20260107135834072.png) + + + +### Kiro + +[Kiro](https://kiro.dev) 是 Amazon 推出的 AI IDE,强调 “规范驱动开发”。先写需求规范,再让 AI 实现。 + +它和 AWS 深度集成,可以直接部署到 AWS 服务,适合使用 AWS 服务的开发者、需要规范化开发流程的团队、做企业级应用的场景。 + +![](https://pic.yupi.icu/1/image-20260107135922286.png) + + + +### TRAE + +[TRAE](https://www.trae.ai) 是字节跳动推出的 AI 原生编程工具。有 2 种开发模式: + +- IDE 模式类似 Cursor,保留传统开发流程 +- SOLO 模式让 AI 主导,自动推进开发任务 + +TRAE 的 SOLO 模式是它最大的亮点,区别于传统的人类主导 + AI 辅助编程,SOLO 模式让 AI 主导任务并自动执行开发。你只需要有一个想法,AI 就能自动生成产品需求文档、技术架构文档,然后自主编写代码、安装依赖、测试验证,直到项目可以正常运行。 + +而且 TRAE 支持集成第三方服务,比如 Supabase 数据库、Stripe 支付、OpenRouter AI 服务等,不用看文档就能傻瓜式集成。可以帮你快速开发包含完整前端和后端的商业级产品。 + +![](https://pic.yupi.icu/1/image-20250928222329915.png) + +国内版的 TRAE 很适合中文用户,访问速度快。鱼皮用 TRAE SOLO 开发过微信小程序,感兴趣的可以看看 [实战视频](https://www.bilibili.com/video/BV1yMn3zuE7L)。 + + + +### Zed + +[Zed](https://zed.dev) 是用 Rust 编写的高性能代码编辑器,由 Atom 的创始团队打造。内置 AI 助手、支持多种 AI 模型、支持实时协作编辑。 + +优点是启动速度极快、占用资源少。适合追求极致性能、电脑配置一般、需要团队协作的开发者。 + +![](https://pic.yupi.icu/1/windows-multibuffer.jpeg) + + + +## 四、怎么选择 AI 代码编辑器? + +看到这里,你可能会问:这么多 AI 代码编辑器,我该选哪个呢? + +其实选择很简单,主要看你的需求和预算。 + +**优先推荐 Cursor**。截止到目前,Cursor 仍然是功能最强大、生态最成熟的 AI 代码编辑器,我自己主力也是用 Cursor 做项目开发。 + +前面也提到过,它的优势包括: + +- 功能全面:Tab、Agent、Chat、内联编辑等 +- 更新快:经常推出新功能 +- 上下文理解能力强:支持最高 1M Token +- 多模型支持:可以自由切换 Claude、GPT、Gemini 等,第一时间对接新模型 +- 生态成熟:基于 VS Code,所有插件都能用 +- 社区活跃:遇到问题很容易找到解决方案 + +如果你预算充足(每月 20 美元以上),Cursor 是首选。如果你预算有限,Windsurf 是很好的免费选择,虽然功能相对简单,但对学习来说完全够用。 + + + +## 五、AI 代码编辑器实战技巧 + +无论你选择 Cursor 还是其他 AI 代码编辑器,下面这些实战技巧都能帮你提升效率。 + +### 1、善用上下文 + +AI 代码编辑器最强大的地方在于它能理解整个项目的上下文。要充分利用这一点: + +- 在项目根目录创建 `README.md`,描述项目的整体架构 +- 使用 `.cursorrules`(或者其他编辑器支持的规则文件),告诉 AI 你的编码规范 +- 在对话时,引用相关的文件(`@文件名`) + +举个例子: +``` +参考 @src/components/ImageUploader.vue 的代码风格,创建一个 Card 组件 +``` + +![](https://pic.yupi.icu/1/image-20260107140926938.png) + + + +### 2、分步骤实现 + +不要一次性提出太复杂的需求,而是分步骤来: + +❌ 不好的方式: +``` +做一个完整的电商网站 +``` + +✅ 推荐的方式: +``` +第一步:创建商品列表页面 +第二步:添加商品详情页面 +第三步:添加购物车功能 +第四步:添加结算功能 +``` + + + +### 3、利用快捷键 + +熟练使用快捷键可以大大提升效率。 + +以 Cursor 为例,建议尝试下面这些快捷键,能让你少用鼠标,操作更快。 + +对话相关: +- `Cmd/Ctrl + L` :切换侧边栏(除非已绑定到某个模式) +- `Cmd/Ctrl + I` :切换侧边栏(除非已绑定到某个模式) +- `Cmd/Ctrl + K` :打开行内编辑,可以在当前位置插入 AI 生成的代码 +- `Tab`:接受建议 + +代码编辑: +- `Cmd/Ctrl + Shift + L` :将选中内容添加到聊天 +- `Alt + ↑/↓` :移动当前行 +- `Cmd/Ctrl + /` :注释/取消注释 + +文件操作: +- `Cmd/Ctrl + Shift + F` :全局搜索 + +更多最新的默认键盘快捷键以 [官方文档](https://cursor.com/cn/docs/configuration/kbd) 为主: + +![](https://pic.yupi.icu/1/image-20260104192219087.png) + + + +### 4、代码审查 + +AI 生成的代码不一定完美,要养成审查的习惯。 + +检查一下代码逻辑是否正确、有没有安全隐患、性能是否合理、代码风格是否统一。 + +当然,你也可以让 AI 帮你审查: + +``` +请审查这段代码,指出潜在的问题 +``` + + + +### 5、保存重要版本 + +Git 是目前最主流的分布式版本控制系统(Version Control System),是团队协作开发不可或缺的工具。它可以保存和管理文件的所有更新记录、并且使用 **版本号** 进行区分。从而支持将编辑后的文档恢复到修改前的状态、对比不同版本的文件差异、防止旧版本覆盖新版本等功能。 + +在做重大修改之前,记得提交 Git: + +```bash +git add . +git commit -m "添加用户认证功能前的版本" +``` + +这样如果 AI 改坏了,可以随时回退。 + +💡 如果想深入学习 Git 和 GitHub,可以看看鱼皮的 [Git & GitHub 保姆级学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190804671012866),完全免费。 + + + +### 6、善用终端 + +AI 代码编辑器都内置了终端,可以直接运行命令。这样你不需要切换到其他窗口,就能在编辑器里完成所有操作。 + +比如常用的前端开发命令: + +```bash +# 安装依赖 +npm install + +# 运行开发服务器 +npm run dev + +# 运行测试 +npm test +``` + +Cursor 还支持在终端中生成命令: + +![](https://pic.yupi.icu/1/image-20260107141312489.png) + +不用记忆这些命令!如果使用了 Agent 模式,AI 可能会自动执行这些命令,无需你手动输入。 + + + +### 7、学习生成的代码 + +使用 AI 代码编辑器的过程,也是一个很好的学习机会。AI 生成的代码可能使用了一些你不熟悉的技术和库,这正是学习的好时机。 + +因此,不要只是让 AI 生成代码就完事了,要尝试理解它。看不懂的地方,直接问 AI:“这段代码是什么意思?” + +还可以尝试修改代码,看看会发生什么。这样你不仅能完成项目,还能学到真正的编程知识,慢慢地成长为一位专业的程序员(Vibe Coding 版)。 + + + +## 写在最后 + +看到这里,相信你已经对 AI 代码编辑器有了全面的了解。 + +**AI 代码编辑器是从 “会用 AI” 到 “专业开发” 的关键一步。** + +它让你可以更灵活地控制代码、处理更复杂的项目、学习更专业的开发方式、积累真正的编程能力。 + +我的建议是,不要被工具的复杂性吓到,大胆尝试。马上就下载 Cursor 或者其他 AI 代码编辑器,尝试把之前在零代码平台做的项目,用 AI 代码编辑器重新实现一遍。虽然一开始可能有点不适应,但很快就能体会到它的强大。 + +在下一篇文章中,我会介绍命令行工具,带你体验更高级、更极客的 Vibe Coding 方式。 + +加油! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/05 AI 命令行编程工具.md b/Vibe Coding 零基础教程/10 编程工具/05 AI 命令行编程工具.md new file mode 100644 index 0000000..d7e3412 --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/05 AI 命令行编程工具.md @@ -0,0 +1,372 @@ +# AI 命令行编程工具 + +> 更高效、更极客的 Vibe Coding 方式 + + + +你好,我是鱼皮。 + +在前面的文章中,我们学习了 AI 零代码平台和 AI 代码编辑器。随着你使用 Vibe Coding 越来越多,可能会遇到一些特殊场景: + +- 我想在服务器上直接开发,但服务器没有图形界面...... +- 我想写个脚本自动化处理任务,怎么让脚本操作 Cursor 呢? +- 我想让 AI 批量处理几十个文件,但在 Cursor 里操作太麻烦...... + +如果你有这些需求,那么 **命令行 AI 编程工具** 可能就是你要找的答案。 + +命令行工具没有花哨的界面,只有简洁的文字交互。但正是这种极简,让它们拥有了极致的效率和灵活性。 + +这篇文章,我会重点介绍 Claude Code 这个最火的命令行 AI 编程工具,并分享更多值得关注的命令行 AI 编程工具。 + + + +## 一、什么是命令行 AI 编程工具? + +在学习具体工具之前,我们先来搞清楚:命令行工具和代码编辑器有什么区别? + +AI 代码编辑器是有图形界面的软件,你可以看到文件列表、代码高亮、按钮等等。而命令行工具完全在终端里运行,只有文字输入和输出,几乎没有任何图形界面。 + +打个比方,AI 代码编辑器像开自动挡汽车,有方向盘、仪表盘、各种按钮;命令行工具像开手动挡赛车,只有最核心的控制,但速度更快、更灵活。 + + + +### 命令行工具的优势 + +为什么有些开发者更喜欢命令行工具? + +首先是速度快,不需要加载图形界面,启动速度极快,而且全键盘操作效率更高。资源占用也很少,因为没有图形界面,内存和 CPU 占用都很低,在配置一般的电脑上也能流畅运行。 + +命令行工具特别适合自动化。可以写脚本批量处理任务,或者集成到自动化流程中,这是图形界面工具很难做到的。 + +此外,如果需要远程开发,通过 SSH 连接到服务器,可以直接在服务器上用命令行工具开发。 + +说实话,在黑色终端里敲命令,看着代码自动生成,确实很酷。 + + + +### 适合哪些人? + +如果你熟悉终端操作、追求极致效率、需要远程开发、或者喜欢极简风格,那命令行工具就很适合你。 + +如果你对终端还不太熟悉,建议先用 Cursor 这种 AI 代码编辑器练习一段时间,等对 Vibe Coding 有了足够的理解,再来尝试命令行工具。 + + + +## 二、Claude Code 最强大的命令行工具 + +[Claude Code](https://claude.com/product/claude-code) 是 Anthropic 公司推出的官方命令行 AI 编程工具,直接集成了 Claude 模型。它是目前功能最强大的命令行编程工具之一。 + +![](https://pic.yupi.icu/1/image-20260107153527087.png) + +Claude Code 最厉害的是它的自主执行能力 —— AI 不仅能生成代码,还能自动执行命令、修改文件、安装依赖,真正做到 “说一句话,项目就搭好了”。 + +Claude Code 内置了安全审查功能,在执行危险操作前会先询问你,防止误操作。它还能理解整个项目的结构和上下文,修改代码时会考虑到项目的整体一致性。 + +特别值得一提的是,Claude Code 支持 **Claude Skills**。这是一种给 AI 准备的能力扩展包。你可以把它理解成给新同事准备的工作交接文档,里面包含任务执行方法、工具使用说明、模板素材等。 + +比如你可以创建一个 `公司代码规范 Skill`,把代码风格、命名规则、注释要求等写进去。之后 Claude Code 生成的代码就会自动遵循这些规范,不用每次都重复说明。 + +Skills 的核心价值在于:人提供专业知识和方法论,AI 提供智能。这对于快速验证想法、打造内部工具来说,是极大的效率提升。 + + + +### 怎么使用 Claude Code? + +让我用一个实际例子来演示 Claude Code 的使用流程。 + +1)首先一行命令安装 Claude Code: + +```bash +curl -fsSL https://claude.ai/install.sh | bash +``` + +2)然后执行 `claude` 命令打开程序,默认是需要登录 Claude 账号的,而且 Claude Code 对中国地区有访问限制,直接访问 Anthropic 官网或使用 Claude 的 API 可能会被屏蔽,真狗! + +![](https://pic.yupi.icu/1/1764145940075-ace6fd24-a09c-41c0-b400-1cffc394fc8a.png) + +不过没关系,可以把 Claude Code 背后的 AI 大模型 API 配置改成国产大模型的 API,比如智谱的 GLM。 + +3)进入 `{用户目录}/.claude` 目录,创建一个 `settings.json` 配置文件: + +![](https://pic.yupi.icu/1/1764146110361-06e13de5-7de4-4fc5-9533-3651447d5e19.png) + +4)修改配置文件中的内容如下,记得替换成你自己的 API Key。 + +可以在 [智谱 AI 开放平台](https://open.bigmodel.cn) 获取到 API Key,注意不要泄露! + +![](https://pic.yupi.icu/1/1764146125955-3029843c-26b8-4628-b2b7-a9d8abb2aef1.png) + +```json +{ + "apiKey": "你的智谱API Key", + "baseURL": "https://open.bigmodel.cn/api/coding/paas/v4", + "model": "glm-4.6" +} +``` + +5)接下来就可以愉快地使用了。在项目目录下运行 `claude`,就可以开始对话: + +![](https://pic.yupi.icu/1/1764146174167-3018c8f3-0ad9-4a4f-9764-246f33b33203.png) + +6)就让 AI 做个实用的图片压缩小工具吧,提示词如下: + +```markdown +请生成一个《图片压缩工具》网站,实现图片压缩处理功能。需要包含完整的前端和后端代码,要求项目可以正常运行。 + +需要实现的功能: +1. 支持常见图片格式(JPG、PNG、WebP 等)的上传与压缩 +2. 可设置压缩质量(如高 / 中 / 低或自定义百分比) +3. 显示原始图片与压缩后图片的对比(尺寸、大小、预览图) +4. 压缩完成后提供下载按钮,支持批量处理 + +设计要求: +1. 现代简约风格,主色调使用绿色 +2. 响应式布局,在手机和桌面设备上均有良好体验 +3. 上传区域有明显的拖放提示,操作流程直观清晰 +``` + +7)点击执行后,大模型很快给出了任务规划 —— 先搭建后端、再实现前端、前后端联调、最后测试运行: + +![](https://pic.yupi.icu/1/1759250070544-7ede700d-37f2-4e4a-bfdb-01631f10df34.png) + +不到 5 分钟,AI 就完成了任务,而且还自动帮我安装好了依赖,贴心~ + +![](https://pic.yupi.icu/1/1759250293957-36299a39-fff9-4e5d-a23a-299efd854938.png) + +我们打开浏览器访问 `localhost:3000` 就能看到效果了: + +![](https://pic.yupi.icu/1/1759291145587-14fb0214-53c7-45a8-8ad1-949368363e19.png) + +整个过程中,Claude Code 会自动执行命令、创建文件、修改代码,你只需要用自然语言描述需求就行。爽的一批! + + + +### Claude Code 的优缺点 + +除了前面提到的自主执行能力和 Skills 支持,Claude Code 还有很多其他优势。 + +比如它支持多种编程语言,不仅是 JavaScript / TypeScript,Python、Go、Rust 等都支持。项目理解能力也很强,能自动分析项目结构,理解各个文件之间的关系。在修改代码时,会考虑到整个项目的一致性。 + +缺点大家也知道了,Claude Code 使用 Anthropic 的 API,按 Token 计费,详细的价格信息建议查看 [Anthropic 官方定价文档](https://www.anthropic.com/pricing)。不过如果你经常需要开发复杂的新项目、写大量代码,Claude Code 的效率也值得这个成本。 + +💡 想要系统学习 Claude Code 的使用方法,可以看看 [官方的实战教程](https://anthropic.skilljar.com/claude-code-in-action)。 + + + +## 三、其他值得关注的命令行工具 + +除了 Claude Code,还有一些其他的命令行工具也值得了解。 + + + +### Gemini CLI + +[Gemini CLI](https://geminicli.com/) 是 Google 推出的开源命令行工具,集成了 Gemini 模型。最大的优势是有免费额度,而且支持超长上下文(100 万 Token),可以一次性分析整个大型项目。适合想尝试命令行工具,但预算有限、需要分析大型项目的开发者。 + +它采用 ReAct(推理和行动)循环,AI 会先思考再行动,处理复杂任务的能力比较强。而且支持 MCP(Model Context Protocol),可以连接各种外部工具和服务。 + +用法跟 Claude Code 类似,也是一行命令就能安装: + +```bash +npm install -g @google/gemini-cli +``` + +然后输入 `gemini` 就能运行了: + +![](https://pic.yupi.icu/1/image-20260107154410787.png) + + + +### Warp + +[Warp](https://www.warp.dev) 是一个现代化的终端工具,它不仅是终端,还集成了代码编辑器和 AI 助手,三位一体。 + +个人体验下来,Warp 的界面比 Claude Code 更易用,支持 AI 命令建议和团队协作功能。 + +如果你经常在终端里工作,又想要更好的交互体验,Warp 是个不错的选择。它能让你在享受命令行效率的同时,不用完全放弃图形界面的便利。 + +![](https://pic.yupi.icu/1/image-20260107154658863.png) + + + +### GitHub Copilot CLI + +GitHub Copilot 是微软推出的 AI 编程助手,已经被数百万开发者使用。[GitHub Copilot CLI](https://github.com/features/copilot/cli) 是它的命令行版本,可以在终端里使用 AI 辅助。 + +它与 GitHub 深度集成、支持 MCP 协议、可以生成和解释命令。 + +![](https://pic.yupi.icu/1/image-20260107154809001.png) + +如果你已经在用 GitHub Copilot 做代码补全,那么 Copilot CLI 能让你在终端里也享受到类似的 AI 辅助,特别适合需要频繁执行命令的场景。 + + + +### OpenCode + +[OpenCode](https://opencode.ai) 是最近非常火的开源命令行 AI 编程工具,被称为 “Claude Code 的开源版”。 + +OpenCode 最大的优势是 **完全免费开源**,相比 Claude Code,OpenCode 不需要付费订阅,也没有地区限制,对国内用户特别友好。 + +它提供直观的终端界面、会话管理、自定义命令等功能。而且支持多模型自由切换,包括 Claude、GPT、Gemini、DeepSeek 等。你可以根据不同任务选择最合适的模型,不用被单一模型限制。 + +如果你想尝试命令行 AI 编程,但不想付费,OpenCode 是最佳选择。 + +用法很简单,直接一行命令安装: + +```bash +curl -fsSL https://opencode.ai/install | bash +``` + +然后执行 `opencode` 命令就可以愉快使用了: + +![](https://pic.yupi.icu/1/image-20260107155212400.png) + +这个交互比 Claude Code 舒服很多~ + +![](https://pic.yupi.icu/1/image-20260107155206368.png) + + + +### 怎么选择命令行 AI 工具? + +选择命令行 AI 工具主要看你的需求和预算。 + +- 如果追求最强功能和最好的体验,选 Claude Code。它的自主执行能力、Skills 支持、项目理解能力都是最强的,适合专业开发者和复杂项目。不过需要付费,而且国内需要配置国产大模型 API。 +- 如果想完全免费使用,选 OpenCode。它是开源的,支持多模型切换,功能接近 Claude Code,而且没有地区限制。对于预算有限的学生和个人开发者来说,OpenCode 是最佳选择。 +- 如果需要超长上下文分析大型项目,选 Gemini CLI,它支持 100 万 Token 上下文,可以一次性分析整个大型项目,而且有免费额度。 +- 如果需要更好的终端体验,选 Warp。它把终端、编辑器和 AI 三合一,界面现代化,适合不想完全放弃图形界面的开发者。 +- 如果已经在用 GitHub Copilot,就选 Copilot CLI,可以无缝衔接你现有的工作流程。 + +根据不同任务选择最合适的工具,效率最高。 + +我自己主要用 Claude Code + 配置国产模型来快速搭建中小型项目、或者进行文件批处理操作。当然,作为一名 AI 编程博主,也会尝试各种不同的命令行工具,反复横跳。 + + + +## 四、命令行工具实战技巧 + +无论你选择哪个命令行工具,下面这些技巧都能帮你提升效率。 + + + +### 1、善用别名 + +在 `.bashrc` 或 `.zshrc` 中设置别名,快速启动工具。 + +比如: + +```bash +alias cc="claude" +alias gc="gemini" +alias oc="opencode" +``` + +这样只需要输入 `cc` 就能启动 Claude Code,输入 `gc` 就能启动 Gemini CLI,输入 `oc` 就能启动 OpenCode。虽然只是少打几个字母,但对于频繁使用的开发者来说,也能节省时间。 + + + +### 2、创建项目配置文件 + +在项目根目录创建配置文件,告诉 AI 项目的规范。 + +Claude Code 会自动读取项目根目录的 `CLAUDE.md` 文件,这是官方推荐的配置文件名。你可以在里面写上项目的规范、常用命令、核心文件说明等: + +```markdown +# 项目规范 + +- 使用 TypeScript +- 遵循 Airbnb 代码规范 +- 所有函数必须有类型注解 +- 使用 ESLint 和 Prettier + +# 常用命令 + +- npm run dev:启动开发服务器 +- npm run build:构建生产版本 +- npm test:运行测试 +``` + +这样 AI 生成的代码就会自动遵循这些规范。而且可以把 `CLAUDE.md` 文件提交到 Git,团队成员共同维护,让 AI 越来越懂你的项目。 + + + +### 3、分步骤执行 + +不要一次性提出太复杂的需求,而是分步骤来: + +- 先创建基本的项目结构 +- 然后添加功能 +- 再优化细节 + +这样更容易控制进度,也更容易发现和修复问题。 + + + +### 4、结合其他命令 + +命令行工具可以和其他命令结合使用。比如可以把一个命令的输出结果保存到文件,然后让 AI 读取: + +```bash +# 把 git diff 输出保存到文件 +git diff > changes.txt + +# 然后在 Claude Code 中引用这个文件 +# 在对话中说:根据 @changes.txt 的改动生成提交信息 +``` + +或者写脚本批量处理任务,实现完全自动化的开发流程。 + +举个例子,可以写一个脚本来自动遍历所有文件,并且让 AI 添加注释、优化代码等等。 + + + +### 5、Claude Code 创始人的神级技巧 + +Claude Code 的创始人曾分享过一些神级使用技巧,这里挑几个最实用的: + +1)多开实例提高效率:在终端中同时运行多个 Claude,将标签页编号,通过系统通知了解哪个需要人工输入。还可以在网页端 Claude Code 上运行多个实例,和本地 Claude 同时进行,充分利用等待时间。 + +2)优先使用带思考功能的模型:虽然比较慢,但在工具使用方面更出色,长远来看效率更高。 + +3)团队共享 CLAUDE.md 文件:把文件用 Git 管理,团队成员共同维护。每当看到 Claude 做错了什么,就添加到 CLAUDE.md 中,这样 Claude 下次就知道不要这样做了。 + +4)利用斜杠命令提升效率:在对话框中输入 `/` 就能触发快捷指令,可以自定义这些命令来封装常用的工作流程。比如创建 `/commit-push-pr` 命令,一次性完成提交、推送和创建 PR。 + +5)使用 MCP 工具扩展功能:比如 Slack 搜索和发布内容、运行 BigQuery 查询、从 Sentry 获取错误日志等。 + +6)完善反馈验证机制:别光让 Claude 干活,还要让它知道怎么验证自己的工作。比如让它打开浏览器测试 UI,发现问题后自动迭代,直到功能正常运行。 + + + +## 写在最后 + +看到这里,相信你已经对命令行 AI 编程工具有了全面的了解。 + +**注意,命令行工具不是必需品,而是提升效率的 1 种选择。** + +如果你觉得 Cursor 已经够用了,完全可以继续用 Cursor。命令行工具更适合追求极致效率、喜欢极简风格的开发者,或者有远程开发、自动化处理等特殊需求的场景。 + +但是我建议想深入学习 Vibe Coding 的朋友都尝试一下,反正现代的命令行工具已经很友好了,只要你会基本的终端操作,就能上手。 + +对于国内用户,我推荐两个选择: + +1. Claude Code 搭配国产大模型:既能正常使用,成本也不高。 +2. OpenCode:完全免费开源,支持多模型切换,没有地区限制,适合预算有限的学生和个人开发者。 + +在下一篇文章中,我会介绍 IDE 插件,教你如何灵活配置自己的开发环境。 + +加油! + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/06 AI IDE 插件.md b/Vibe Coding 零基础教程/10 编程工具/06 AI IDE 插件.md new file mode 100644 index 0000000..6f4c1fc --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/06 AI IDE 插件.md @@ -0,0 +1,177 @@ +# AI IDE 插件 + +> 在熟悉的编辑器中加入 AI 能力 + + + +你好,我是鱼皮。 + +在前面的文章中,我们学习了 AI 代码编辑器和 AI 命令行编程工具。 + +但如果你有编程基础,已经习惯用 VS Code / IntelliJ IDEA 等集成开发环境(IDE)了,不想换编辑器,又想 Vibe Coding,怎么办呢? + +**IDE AI 插件** 就是你要找的答案。 + +这篇文章,我会介绍最主流的 IDE AI 插件,帮你在熟悉的编辑器中加入 AI 能力。 + + + +## 一、为什么选择 IDE 插件? + +在了解具体插件之前,我们先来搞清楚:IDE 插件和 Cursor 有什么区别?为什么要用插件? + +Cursor 是一个独立的编辑器,虽然基于 VS Code,但是一个完整的软件。而 IDE 插件是安装在你现有编辑器(VS Code、IntelliJ IDEA 等)上的扩展,不需要换编辑器。 + +打个比方,Cursor 像买了一辆新车,配好了所有功能;IDE 插件像给你现在的车加装了新功能,车还是原来那辆。 + +IDE 插件的优势很明显。首先是无需切换编辑器,如果你已经习惯了某个编辑器,配置好了各种插件和快捷键,不想重新适应新环境,那用插件是最好的选择。 + +而且可以根据需要安装不同的插件,自由组合,不喜欢某个插件随时可以卸载换另一个。很多插件是开源免费的,或者可以使用自己的 API Key,成本更可控。 + +如果你是新手,还没有固定的编辑器习惯,可能直接用 Cursor 会更简单。但如果你已经是某个编辑器的老用户,插件会是更好的选择。 + + + +## 二、Cline 最强大的开源 AI 插件 + +[Cline](https://cline.bot/) 是目前功能最强大的开源 AI 编程插件,被称为 开源版 Cursor。 + +Cline 最大的优势是 **跨平台支持**,不仅支持 VS Code,还支持 JetBrains 系列的 IntelliJ IDEA、PyCharm、WebStorm 等多个编辑器。 + +![](https://pic.yupi.icu/1/image-20260108222935455.png) + +它完全开源免费,支持 Claude、GPT、Gemini、DeepSeek 等各种大模型,还可以部署 MCP 服务扩展功能。不仅能对话生成代码,还能自主执行命令、修改多个文件、使用浏览器,总之功能非常全面。 + +下面来演示一下 Cline 的使用流程。 + + + +### VS Code 中使用 Cline + +比如我想用 Cline 在 VS Code 中创建一个 React 项目。 + +1)在 VS Code 中打开扩展商店,搜索 "Cline",点击安装。 + +![](https://pic.yupi.icu/1/image-20260108223139213.png) + +2)安装后,点击侧边栏的 Cline 图标,可以直接免费使用,也可以使用你自己的大模型 API Key。 + +![](https://pic.yupi.icu/1/image-20260108223220642.png) + +3)点击下一步后,Cline 会引导你创建一个账号,使用 GitHub 或邮箱注册登录就好。 + +4)搞定账号后,就可以愉快使用了,直接在 Cline 面板中输入需求: + +``` +创建一个 React + TypeScript 项目,包含: +- 首页 +- 关于页面 +- 导航栏 +- 使用 React Router +``` + +![](https://pic.yupi.icu/1/image-20260108223531152.png) + +5)接下来 Cline 会自动运行命令、安装必要的依赖、创建各个组件文件、配置路由、修改样式。整个过程你只需要确认每一步操作,或者直接让它全自动执行。 + +![](https://pic.yupi.icu/1/image-20260108223742056.png) + + + +### JetBrains 中使用 Cline + +如果你是 JetBrains IDE 的用户,在 IDE 中打开 Settings → Plugins,搜索 "Cline",安装即可。使用方式和 VS Code 版本完全一样。 + +![](https://pic.yupi.icu/1/image-20260108224135571.png) + + + +## 三、其他值得关注的 AI 插件 + +除了 Cline,还有一些其他的 AI 插件也值得了解。 + + + +### GitHub Copilot + +[GitHub Copilot](https://github.com/features/copilot) 是最成熟的 AI 编程助手,支持 VS Code、JetBrains 全系列、Vim、Neovim 等多个编辑器。 + +主要功能是代码补全,当你写代码时会自动提示下一行要写什么。还有 Copilot Chat 功能,可以在侧边栏和 AI 对话。 + +![](https://pic.yupi.icu/1/image-20260108225417720.png) + +它的优点是成熟稳定、代码补全质量很高、跨平台支持。最关键的是,学生和开源贡献者可以免费使用。 + + + +### JetBrains AI Assistant + +[JetBrains AI Assistant](https://www.jetbrains.com/ai-assistant/) 是 JetBrains 官方推出的 AI 编程助手,专门为 JetBrains IDE 优化,刚出的时候鱼皮还在阿里云栖大会现场给大家做过这个的分享哈哈。 + +![](https://pic.yupi.icu/1/image-20260108230013824.png) + +它不仅有代码补全,还能生成测试、解释代码、重构代码、生成文档等。而且和 IDE 的各种功能深度集成,比如调试、重构、测试、生成提交信息等。 + +![](https://pic.yupi.icu/1/image-20260108225718180.png) + +优势是官方出品,和 IDE 集成最好,支持多种 AI 模型,功能全面。缺点是需要订阅 JetBrains 的付费计划。 + + + +### Continue + +[Continue](https://www.continue.dev/) 是开源的 AI 编程插件,功能和 Cline 类似但更轻量。支持多种 AI 模型,有代码补全、对话、代码编辑等功能,界面比较简洁,上手容易。完全免费,支持 VS Code 和 JetBrains。 + +![](https://pic.yupi.icu/1/image-20260108230116299.png) + + + +### Supermaven + +[Supermaven](https://supermaven.com/) 是一个专注于代码补全的插件,最大的特点是 100 万 Token 的上下文窗口,补全速度极快,准确度也很高。 + +![](https://pic.yupi.icu/1/image-20260108230146505.png) + + + +### Amazon Q Developer + +[Amazon Q Developer](https://aws.amazon.com/q/developer/)(原名 CodeWhisperer)是亚马逊推出的 AI 编程助手。 + +特点是与 AWS 服务深度集成、支持多种 IDE(VS Code、JetBrains 等)、有免费版本、代码安全扫描。适合使用 AWS 服务的开发者、需要代码安全扫描的团队。 + + + +## 四、怎么选择 AI IDE 插件? + +- 如果想要最强大的功能(智能体、多文件编辑),选 Cline。它支持 VS Code 和 JetBrains,完全免费,功能接近 Cursor。 +- 如果主要需要代码补全,选 GitHub Copilot。它最成熟稳定,代码补全质量最高,而且跨平台支持。 +- 如果你已经订阅了 JetBrains,直接用 JetBrains AI Assistant,因为它和 IDE 的集成最好。 +- 如果想要轻量级的工具,选 Continue。 + +我现在用 IDE 插件的频率不是很高,之前主要用 Cline(功能全面 + 免费)、GitHub Copilot(代码补全质量高)还有一些国产的 AI 插件,比如智谱 CodeGeex、通义灵码之类的。 + + + +## 写在最后 + +到目前为止,鱼皮已经把主流的 AI 编程工具介绍完了,建议大家都体验一下,选择适合自己的才是最好的。 + +在下一篇文章中,我会介绍辅助工具集,帮你完善整个开发工具链。 + +加油! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/08 AI 辅助工具集.md b/Vibe Coding 零基础教程/10 编程工具/08 AI 辅助工具集.md new file mode 100644 index 0000000..caff554 --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/08 AI 辅助工具集.md @@ -0,0 +1,526 @@ +# AI 辅助工具集 + + + +你好,我是鱼皮。 + +在前面的文章中,我们学习了各种 AI 编程工具,包括 AI 零代码平台、AI 智能体平台、AI 代码编辑器、命令行工具、IDE 插件。但要真正高效地开发项目,光有 AI 工具还不够,还需要一些辅助工具来完善整个工作流程。 + +举些例子,你可能会遇到这些问题: + +- AI 把代码改出问题了,怎么还原? +- 项目做完了,怎么部署上线让别人访问? +- 有没有其他实用的工具可以提升效率? + +这篇文章,我会介绍 Vibe Coding 开发中常用的辅助工具,帮你完善整个开发工具链。 + + + +## 一、Git 版本管理 + +### 为什么需要 Git? + +在开发过程中,你可能会遇到这些情况: + +- 刚才改了代码,结果改坏了,想恢复到之前的版本 +- 想尝试一个新功能,但又怕影响现有的代码 +- 多人协作时,不知道谁改了什么 + +这些问题,Git 都能帮你解决。 + +**Git 是一个版本控制工具**,可以记录代码的每一次修改,随时回退到任何历史版本。 + +💡 如果你想成为一名专业的程序员,那么必学 Git,这是企业开发的基本功。 + + + +### Git 的核心概念 + +Git 的工作流程很简单,主要就三步: + +1. 在工作区修改代码 +2. 添加代码到暂存区(用 `git add` 命令) +3. 提交代码到仓库(用 `git commit` 命令) + +打个比方,修改代码就像在草稿纸上写东西,添加到暂存区就像把满意的内容挑出来,提交到仓库就像把这些内容正式保存到笔记本里。 + +![](https://pic.yupi.icu/1/gitworkflow%E5%A4%A7.jpeg) + + + +### 怎么使用 Git? + +有 2 种使用 Git 的方式:**可视化工具** 和 **命令行**。 + +对于新手来说,我强烈推荐先用可视化工具。现在很多主流的开发工具(比如 Cursor、VS Code)都内置了 Git 功能,点几下鼠标就能完成代码的提交和拉取,完全不需要记命令。 + +我自己刚开始接触 Git 的时候就是这样,完全没有上网搜教程,就是看别人提交项目的时候在编辑器上点几下就搞定了,觉得很神奇。然后我就有样学样地用起了这个工具。而且很长一段时间我都是用 [GitHub Desktop](https://desktop.github.com/) 来傻瓜式操作,遇到问题了再上网搜解决方案。 + +![GitHub Desktop APP](https://pic.yupi.icu/1/screenshot-windows-dark.png) + +等你熟练了之后,可以再学习命令行操作。命令行虽然看起来复杂,但其实更灵活、更强大,而且很多高级功能只能通过命令行实现。 + +下面是几个最常用的命令,学会这几个命令,就能应付 90% 的日常开发了。 + +```bash +# 克隆项目 +git clone https://github.com/liyupi/ai-guide.git + +# 查看状态 +git status + +# 添加文件 +git add . + +# 提交 +git commit -m "添加了新功能" + +# 推送到远程 +git push + +# 拉取最新代码 +git pull +``` + +不用刻意去背,用到的时候查一下就行,或者直接问 AI。 + +这里我建议大家无论是否要学习 Git,都可以先把它安装到你的电脑中,[直接去官网安装](https://git-scm.com/) 就好。有可能一些软件或工具会依赖 Git,不装的话后面会出现一些问题。 + + + +### 实际使用场景 + +让我用一个实际例子来演示 Git 的用法。比如你用 Cursor 做了一个项目,想用 Git 管理版本。 + +1)首先在项目的根目录中执行命令来初始化 Git: + +```bash +git init +``` + +2)然后添加所有文件并提交第一个版本: + +```bash +git add . +git commit -m "初始版本" +``` + +3)接下来继续开发,修改了一些代码。修改完成后再次提交: + +```bash +git add . +git commit -m "添加了用户登录功能" +``` + +4)如果某次修改出了问题,想回退到之前的版本,可以这样: + +```bash +git log # 查看历史,找到想回退的版本号 +git reset --hard 版本号 +``` + +Git 会帮你记录每一次修改,随时可以回退。 + + + +### Git 和 AI 工具的配合 + +现在很多 AI 工具都内置了 Git 功能。比如 Cursor 可以在编辑器里直接提交代码: + +![](https://pic.yupi.icu/1/image-20260109110826513.png) + +也可以让 AI 帮你自动执行 Git 命令,就跟它说 “帮我用 Git 来管理项目” 就可以了。 + +此外,AI 还能帮你生成提交信息,一切皆可 Vibe Coding! + +我建议大家养成一个习惯:**每完成一个功能,就提交一次**。 + +这样即使 AI 改坏了代码,也能随时恢复到之前的版本。有了 Git,你就可以放心大胆地让 AI 改代码了,反正随时能回退。 + + + +### 学习建议 + +Git 的功能很强大,但对于 Vibe Coding 来说,掌握上面这些用法就够用了。如果想深入学习 Git 和 GitHub,可以看看鱼皮写的 [Git & GitHub 学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190804671012866)。这个学习路线从零基础到精通,涵盖了 Git 的所有核心知识点,而且完全免费。 + + + +## 二、部署托管平台 + +你用 AI 做好了项目,虽然在本地运行得很好,但如果想让别人也能访问,就需要把项目部署到服务器上。 + +传统的部署方式很复杂:要租服务器、配置环境、上传代码、配置域名等等。但现在有很多免费的部署平台,可以让你几分钟就把项目上线。 + + + +### Vercel + +[Vercel](https://vercel.com) 是目前最流行的前端部署平台,特别适合 React、Next.js、Vue、静态网站等前端项目。 + +优点是个人项目完全免费,部署速度极快(一般 1 ~ 2 分钟),自动配置 HTTPS 和 CDN 加速;还和 GitHub 深度集成,能够在你推送代码后自动部署。 + +使用 Vercel 超级简单。 + +1)首先访问 [Vercel 官网](https://vercel.com) 注册账号,建议使用 GitHub 账号注册登录。 + +2)创建项目,可以直接绑定 GitHub 并选择已经托管的项目,点击 "Deploy" 部署按钮: + +![](https://pic.yupi.icu/1/image-20260109111323983.png) + +3)等待 1 ~ 2 分钟,项目就上线了! + +部署成功后 Vercel 会自动给你一个域名,比如 `your-project.vercel.app`,你也可以绑定自己的域名。 + +而且每次你往 GitHub 推送代码,Vercel 都会自动重新部署,完全不用手动操作。 + +💡 具体过程可以看鱼皮的视频教程:https://www.bilibili.com/video/BV1TV4y1j76t + + + +### Netlify + +[Netlify](https://www.netlify.com/) 和 Vercel 类似,但功能更全面一些。支持更多的框架和静态站点生成器,有表单处理、无服务器函数等功能,免费额度更大、还支持 A/B 测试和分析。使用方式和 Vercel 类似,不过多介绍了。 + + + +### EdgeOne Pages 国产部署平台 + +[EdgeOne Pages](https://pages.edgeone.ai) 是腾讯云推出的边缘全栈开发平台,它基于腾讯云 EdgeOne 基础设施,提供从前端页面到动态 API 的无服务器部署体验。 + + +EdgeOne 是腾讯云的边缘安全加速平台,简单来说就是 “网络加速 + 安全防护” 的组合。它利用腾讯遍布全球的网络节点,让你的网站在离用户更近的地方提供服务,加载速度更快。同时还集成了 Web 防护能力,可以在边缘就过滤拦截恶意流量,保护你的网站安全。 + +EdgeOne Pages 基于这个强大的基础设施,优点是国内访问速度快,和腾讯云服务深度集成,支持边缘函数,有免费额度。更适合国产开发者宝宝们~ + + + +### GitHub Pages + +[GitHub Pages](https://pages.github.com/) 是 GitHub 提供的免费静态网站托管服务。优点是完全免费、无限流量、和 GitHub 无缝集成。 + +使用方法巨简单,在 GitHub 创建仓库并上传网站文件后,直接在仓库设置中启用 GitHub Pages: + +![](https://pic.yupi.icu/1/image-20260109111917547.png) + +然后就能通过 `username.github.io/repo-name` 访问了。适合个人主页、项目文档、简单的静态网站。 + + + +### 如何选择? + +- 如果你的项目是 Next.js,选 Vercel(官方推荐) +- 如果是其他前端框架或静态网站,Vercel 和 Netlify 都可以 +- 如果是国内用户,想要更快的访问速度,选 EdgeOne Pages +- 如果只是简单的静态页面,GitHub Pages 最简单 + +我自己主要用 Vercel + EdgeOne Pages,因为它速度快、体验好。国内项目会用 EdgeOne Pages,访问速度确实快很多。 + + + +### Cloudflare CDN + +如果你想让网站访问速度更快,还可以使用 [Cloudflare](https://www.cloudflare.com/zh-cn/) 的免费 CDN 服务。 + +CDN(内容分发网络)就是把你的网站内容缓存到全球各地的服务器上,用户访问时会自动选择离他最近的服务器,大大提高加载速度。 + +![](https://pic.yupi.icu/1/1763643073516-5248d56c-bf7d-4537-b8f8-681a104626d9.png) + +Cloudflare 的优势是: + +- 完全免费(个人网站) +- 全球 CDN 加速,覆盖 200+ 个城市 +- 自动 HTTPS 证书 +- DDoS 防护和 Web 防火墙 +- 免费的 DNS 服务 + +使用方法很简单,注册 Cloudflare 账号,添加你的域名,然后把域名的 DNS 服务器改成 Cloudflare 提供的地址就行。Cloudflare 会自动帮你加速和保护网站。 + +也可以直接使用 Cloudflare 提供的 Pages 页面部署能力,直接上传自己的代码,交给它一键部署并白票免费的域名,更方便~ + +![](https://pic.yupi.icu/1/1763643412558-4d499b46-5e16-4f83-9df7-06a85175df35.png) + +如果你的网站部署在 Vercel 或 Netlify 上,它们本身就有 CDN 加速,不需要额外配置 Cloudflare。但如果你是自己租服务器部署,强烈建议用 Cloudflare 加速。 + + + +### 更多部署方式 + +鱼皮分享过多种快速部署上线项目的视频教程: + +- [Vercel 项目部署教程](https://www.bilibili.com/video/BV1TV4y1j76t) +- [云端编辑器 + Vercel + 对象存储 + 内网穿透 4 种方式部署](https://www.bilibili.com/video/BV1UZ4y197i1) +- [Nginx + 宝塔 2 种方式部署个人博客](https://www.bilibili.com/video/BV1rU4y1J785) +- [WordPress 搭建个人博客](https://www.bilibili.com/video/BV14q4y1R7XM) +- [4 种主流前后端项目部署](https://www.codefather.cn/course/1790943469757837313/section/1791075571845345281?contentType=video&tabKey=videoList) + +此外,鱼皮在 [编程导航](https://codefather.cn/) 带大家做过 20 多套项目了,几乎每种部署方式都给大家讲解过,如果你想成为一名专业的程序员,建议学习一下。 + +- [AI 零代码应用生成平台项目](https://www.codefather.cn/course/1948291549923344386):1Panel 面板 + Nginx 前端 + Java 后端(jar 包) +- [代码生成器共享平台项目](https://www.codefather.cn/course/1790980795074654209):宝塔面板 + Nginx 前端 + Java 项目管理器(jar 包)后端部署 +- [AI 答题应用平台项目](https://www.code-nav.cn/course/1790274408835506178): Vercel 前端 + Docker 后端 + 云托管 Serverless 平台部署 +- [AI 超级智能体项目](https://www.codefather.cn/course/1915010091721236482):Docker 前端 + Docker 后端 + 云托管 Serverless 平台部署 +- [OJ 在线判题项目](https://www.codefather.cn/course/1790980707917017089):Docker Compose 后端微服务部署 + +基本上学会这几种部署方式,能够应对绝大多数部署需求了。 + + + +## 三、MCP 服务 - 扩展 AI 能力 + +MCP(Model Context Protocol) 是一个开放标准,可以让 AI 工具连接到各种外部工具和数据源。 + +简单来说,MCP 就像给 AI 装上了各种 "插件",让它能做更多事情。比如文件系统 MCP 让 AI 可以读写文件,GitHub MCP 让 AI 可以操作 GitHub 仓库,数据库 MCP 让 AI 可以查询数据库,浏览器 MCP 让 AI 可以浏览网页。 + +![](https://pic.yupi.icu/1/mcp.png) + +现在几乎所有主流 AI 编程工具都支持 MCP,包括 Cursor、Claude Code、Cline、Windsurf、Gemini CLI、Kiro 等。你可以在这些工具中使用各种 MCP 服务,大大扩展 AI 的能力。 + +下面我用 Cursor 作为例子,演示如何配置和使用 MCP。 + + + +### 在 Cursor 中使用 MCP + +让我用一个实际例子来演示如何在 Cursor 中配置和使用 MCP。 + +比如我希望让 Cursor 能够得知当前准确的时间。 + +1)利用 MCP 大全网站搜索你需要的 MCP 工具,并获取到 MCP 配置信息,后面会用到: + +![](https://pic.yupi.icu/1/image-20260109113038258.png) + +由于这个 MCP 工具需要用到 `uvx` 命令来安装,我们需要先安装 uv 工具。参考 [官方安装文档](https://docs.astral.sh/uv/getting-started/installation/),选择操作系统并执行一行命令,就能完成安装了。 + +![](https://pic.yupi.icu/1/image-20260109113308798.png) + +安装后,执行 `uvx` 命令,应该会看到下图的输出,表示安装成功: + +![](https://pic.yupi.icu/1/image-20260109113427041.png) + + + +2)打开 Cursor 设置,找到 MCP 配置选项,点击添加 MCP: + +![](https://pic.yupi.icu/1/image-20260109113809834.png) + + + +3)Cursor 是通过 JSON 文件来管理 MCP 的,添加前面复制的 MCP 服务器配置: + +```json +{ + "mcpServers": { + "time": { + "command": "uvx", + "args": [ + "mcp-server-time", + "--local-timezone=America/New_York" + ] + } + } +} +``` + +![](https://pic.yupi.icu/1/image-20260109112647904.png) + + + +4)保存后,会发现 MCP 工具已成功开启,现在 AI 就可以获取到最新时间了。 + +![](https://pic.yupi.icu/1/image-20260109113524465.png) + + + +5)你可以问 AI:现在几点钟? + +AI 就能通过调用 MCP,给你最准确的时间。 + +![](https://pic.yupi.icu/1/image-20260109113631840.png) + + + +还有更多常用的 MCP 服务器,比如: + +- @modelcontextprotocol/server-filesystem:文件系统访问 +- @modelcontextprotocol/server-github:GitHub 操作 +- @modelcontextprotocol/server-postgres:数据库查询 +- @modelcontextprotocol/server-puppeteer:浏览器自动化 + + + +如果你想了解更多 MCP 服务,可以访问: + +- [鱼皮 AI 导航的 MCP 大全](https://ai.codefather.cn/):整理了各种实用的 MCP 服务 +- [mcp.so](https://mcp.so/):MCP 服务器市场,可以找到各种 MCP 服务 +- [GitHub awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers):社区维护的 MCP 服务器列表 + +这些网站会持续更新最新的 MCP 服务,建议收藏。 + + + +## 四、其他实用工具 + +除了版本管理、部署平台和 MCP,还有一些其他实用工具值得了解。 + + + +### GitHub 代码托管 + +[GitHub](https://github.com/liyupi) 是全球最大的代码托管平台,不仅可以托管代码,还能和全球优秀的开发者交流 ♂。 + +你可以在 GitHub 上托管代码、展示项目、学习别人的代码、参与开源项目。而且很多 AI 工具都支持和 GitHub 集成,比如 Cursor、Vercel、Netlify 等。 + +![鱼皮 GitHub 的项目仓库](https://pic.yupi.icu/1/image-20251126231252956.png) + +个人建议,给自己的每个项目都创建一个 GitHub 仓库,既能备份代码,又能展示作品。 + + + +### 图床工具 + +如果你的项目需要图片,就会遇到一个问题:图片放哪里? + +直接放在项目里会让项目变得很大,而且如果把图片文件放到自己的小水管服务器上,加载速度会比较慢。这时候就需要用到图床工具了。 + +**图床工具就是专门用来存储和管理图片的服务**,你把图片上传上去,它会给你一个链接,你在项目里用这个链接就行。 + +图床工具分两种:**在线图床 **和 **本地图床工具**。 + +在线图床就是直接在网页上传图片,比如 [imgchr](https://imgchr.com/),优点是简单方便,缺点是可能不太稳定。 + +我更推荐用 [PicGo](https://molunerfinn.com/PicGo/),这是一个本地图床工具,支持多种图床平台(GitHub、七牛云、腾讯云、阿里云等)。你可以在本地管理图片,上传后自动复制链接,非常方便。 + +![](https://pic.yupi.icu/1/image-20260109114343606.png) + +而且 PicGo 还支持快捷键上传、截图上传等功能,用起来特别顺手。如果你经常需要在文章或项目里插入图片,强烈推荐试试 PicGo。 + +鱼皮写文章一般是用 Typora 写作工具 + PicGo 上传图片,可以保证自己文章中的图片在任意电脑上都能访问。 + + + +### 环境变量管理 + +在项目中,你经常会用到一些敏感信息,比如 API Key、数据库密码等。千万不要直接写在代码里!不然别人一看你的代码,这些密钥就泄露了。 + +正确的做法是使用环境变量。在本地开发时,创建一个 `.env` 文件: + +``` +OPENAI_API_KEY=your_key_here +DATABASE_URL=your_database_url +``` + +然后在代码里通过 `process.env.OPENAI_API_KEY` 这样的方式来读取。 + +部署到 Vercel 或 Netlify 时,在它们的设置页面添加环境变量就行,不用把 `.env` 文件上传上去。这样既安全,又方便管理。 + + + +### 域名服务 + +简单来说,域名就是网站的地址。比如 `codefather.cn`、`dogyupi.com`。 + +如果你想让自己的项目有一个好记的网址,就需要购买一个域名,而不是直接让用户通过 IP 访问。 + +对于国内用户,我推荐在 [阿里云](https://wanwang.aliyun.com/) 或 [腾讯云](https://dnspod.cloud.tencent.com/) 这种知名云服务商购买域名。价格一般是几十块钱一年,而且操作界面都是中文的,很方便。 + +![](https://pic.yupi.icu/1/image-20260109114615834.png) + +需要注意的是,**如果你的网站服务器在国内,域名需要备案**。备案流程大概需要 1 ~ 2 周,需要提供身份证、手机号等信息。 + +如果你的网站部署在 Vercel、Netlify 这些国外平台上,或者在国外平台购买域名,那么可以省去备案,快速上线。 + + + +### 数据库服务 + +数据库就是用来存储数据的地方。 + +比如你做一个待办事项应用,用户添加的待办事项就需要存到数据库里;你做一个博客网站,文章内容也需要存到数据库里。 + +对于 Vibe Coding 开发者来说,我强烈推荐 [Supabase](https://supabase.com/)。它是一个开源的数据库服务,提供了免费额度,而且功能非常强大: + +- 提供 PostgreSQL 数据库(功能强大的关系型数据库) +- 内置用户认证功能(注册、登录、密码重置等) +- 提供文件存储功能,可以存图片、视频等 +- 实时数据同步,数据变化时自动更新 +- 友好的可视化界面,不用写 SQL 也能管理数据 + +![](https://pic.yupi.icu/1/image-20260109114906767.png) + +而且 Supabase 的文档非常详细,配合 AI 工具使用特别方便。你只需要告诉 AI:“用 Supabase 做一个用户注册功能”,AI 就能帮你写好代码。 + +除了 Supabase,还有一些其他选择: + +- PlanetScale:MySQL 数据库,有免费额度 +- MongoDB Atlas:NoSQL 数据库,有免费额度 + +如果你想进一步快速学习数据库,可以看看 [鱼皮的数据库快速入门视频](https://www.bilibili.com/video/BV1iJSLBbEyD/)。 + + + +### 代码片段管理 - 代码小抄 + +在开发过程中,你可能会遇到一些好用的代码片段,想保存下来以后用。或者你遇到 Bug 了,想把代码分享给别人帮你看看。这时候就需要代码片段管理工具了。 + +我强烈推荐自己团队开发的 [代码小抄](https://codecopy.cn/)。这是一个简单易用的代码分享工具,可以快速、跨设备地自由分享代码。 + +![代码小抄](https://pic.yupi.icu/1/1705646241236-26786c47-1251-4891-85f3-e91ac9e4be94-20240125151504219-20240222165129145.png) + +代码小抄的优势: + +- 界面很像程序员常用的编辑器,可以新增、删除代码片段 +- 支持多种分享范围(公开、加密、仅个人可见) +- 支持多种分享方式(复制链接、QQ 分享、手机扫码、微信小程序等) +- 还有代码库功能,可以查看并学习其他同学分享的优质代码 +- 支持在线运行代码、AI 智能代码分析和纠错 + +无论是电脑或手机,都能获得不错的阅读体验。而且完全免费,不用担心代码泄露。 + +**求求了!找别人改 Bug 时,不要再拍模糊不清的照片、或者直接在聊天里发代码了**,用代码小抄分享,对方看起来会舒服很多。 + + + +### 图标库和素材 + +做网站或应用时,经常需要一些图标和图片素材。下面是一些免费的资源网站: + +图标库: + +- [iconfont](https://www.iconfont.cn/):阿里巴巴矢量图标库,国内最大的图标库,完全免费 +- [Font Awesome](https://fontawesome.com/):国外流行的图标库,有免费版和付费版 +- [Iconify](https://iconify.design/):整合了多个图标库,一站式搜索 + +占位图: + +- [Picsum Photos](https://picsum.photos/):随机生成占位图,可以指定尺寸 + +免费图片: + +- [Unsplash](https://unsplash.com/):高质量免费图片,可商用 +- [Pexels](https://www.pexels.com/):免费图片和视频素材 + +这些资源都可以免费使用,而且质量很高。配合 AI 工具使用,可以快速做出漂亮的网站。 + + + +## 写在最后 + +OK,以上就是 Vibe Coding 开发中常用的辅助工具,相信大家已经疯狂收藏了。 + +刚开始学习时,可能会觉得要学的东西很多。但其实你不需要一次学会所有东西,可以循序渐进。遇到问题时,再去学习相应的工具,这样学习效率最高。 + +建议你尝试下载并使用 Git,把代码推送到 GitHub,然后部署到 Vercel。看着自己的项目在网上运行,并分享给朋友,简直成就感爆棚! + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/09 我的 AI 工具箱推荐.md b/Vibe Coding 零基础教程/10 编程工具/09 我的 AI 工具箱推荐.md new file mode 100644 index 0000000..253da3a --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/09 我的 AI 工具箱推荐.md @@ -0,0 +1,365 @@ +# 我的 AI 工具箱推荐 + +> 我今年用的最多的 AI 产品 Top 20 + + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +在前面的文章中,我们系统学习了 AI 编程工具的各个类型:从 AI 模型选择、零代码平台、AI 代码编辑器、命令行工具、IDE 插件、AI 智能体平台,到辅助工具集。 + +那问题来了: + +- 这么多工具,鱼皮你自己到底用哪些? +- 实际工作中,这些工具怎么搭配使用? +- 有没有一些实战经验可以分享? + +这篇文章,我会分享 2025 年我使用最多的 AI 产品 Top 20,以及我的实际使用心得,希望能给你一些参考。 + + + +## 一、AI 编程工具 + +作为一名程序员,AI 编程工具是我用得最多的。下面是我今年的主力编程工具。 + + + +### Cursor + +[Cursor](https://cursor.com/) 是我心中开发体验和 AI 工程能力 Top 1 的 AI 编辑器。做大项目主要靠它,无论是写代码、改代码、还是重构代码,Cursor 的 Agent 模式都能帮我搞定。 + +我特别喜欢它的 Tab 补全功能,写代码的时候 AI 会自动预测我要写什么,按 Tab 就能接受建议。这种感觉就像有个老司机坐在旁边,你刚想到要写什么,他就已经帮你写好了。 + +而且 Cursor 可以自由切换 Claude、GPT、Gemini 等多个模型,还能使用自己的 API Key,我可以根据不同任务选择最合适的模型。 + +不过 Cursor 最大的问题就是价格死贵。我之前分享过账单,一个多月就烧了 1 万多块。所以我现在会搭配一些免费工具使用,避免预算爆炸。 + +![](https://pic.yupi.icu/1/yupicursorbilling.png) + + + +### Claude Code + +[Claude Code](https://claude.ai/code) 是我用的最多的命令行 AI 编程工具。它的自动化程度非常高,不仅能生成代码,还能自动执行命令、安装依赖、创建文件。 + +我一般用它来做一些简单的任务,或者快速搭建项目框架。比如我想做一个图片压缩工具,直接在命令行里跟 AI 说一句话,它就能自动帮我搭好整个项目。 + +![](https://pic.yupi.icu/1/1764146174167-3018c8f3-0ad9-4a4f-9764-246f33b33203.png) + +而且 Claude Code 支持 Skills,可以把一些常用的规范和流程写成 Skill,让 AI 自动遵循,对于避免重复工作和团队协作特别有用。 + +因为 Claude Code 在国内有限制,我一般会配合国产 AI 大模型使用,比如智谱 GLM。这样既能正常使用,成本也更低。 + + + +### Cline + +[Cline](https://cline.bot/) 是一款 AI IDE 插件,是我的备胎之一。当 Cursor 的预算用完了,或者我想在 VS Code 里开发时,就会用 Cline。 + +![](https://pic.yupi.icu/1/image-20260108222935455.png) + +Cline 最大的优势是完全免费,而且功能很全面,基本上能做到 Cursor 80% 的事情。虽然体验没有 Cursor 那么流畅,但考虑到它是免费的,已经非常不错了。 + +而且 Cline 支持多个平台,不仅是 VS Code、JetBrains 系列也能用。这意味着我在不同编辑器之间切换时,都能用同一个工具,保持一致的体验。 + + + +## 二、AI 多媒体创作工具 + +除了编程,我还会用 AI 做内容创作。下面是我用得最多的多媒体创作工具。 + + + +### Nano Banana + +Nano Banana 是今年最炸裂的 AI 生图工具,我用它来生成漫画知识讲解图片和文章封面图。 + +它对中文的支持特别好,不像 Midjourney 那样需要用英文提示词。而且生成的图片风格很统一,特别适合做教程配图。 + +你看到的这种动漫风格的图片,都是用 Nano Banana 做的: + +![](https://pic.yupi.icu/1/toolstype%25E5%25A4%25A7.jpeg) + +自从用了 Nano Banana,我就彻底和 Midjourney 说再见了。 + + + +### 即梦 AI + +[即梦 AI](https://jimeng.jianying.com/) 是字节的一站式 AI 创作平台,支持文字生图、图生视频等功能。 + +我主要用它来生成视频空镜画面。比如我做教程视频时,需要一些背景画面,就会用即梦 AI 生成。它的视频生成速度很快,而且质量不错。 + +而且即梦 AI 是国产平台,访问速度快,也不用担心被墙的问题。 + + + +### Veo 3 + +[Veo 3](https://aistudio.google.com/models/veo-3) 是 Google 最先进的 AI 视频生成模型,我用它来做一些有创意的短视频。 + +Veo 3 的视频质量确实很高,物理规律、光影效果都很真实。但是价格死贵,所以我只在需要高质量视频的时候才会用它。 + +![](https://pic.yupi.icu/1/1751177650505-09aecbd1-a858-4a01-a74d-62120f074c98.png) + + + +### Eleven Labs + +[Eleven Labs](https://elevenlabs.io/) 是 AI 语音合成工具,模仿声音效果特别逼真。 + +而且 Eleven Labs 支持多种语言和声音风格,可以根据不同场景选择不同的声音,我会用它来合成一些创意视频的配音。 + +![](https://pic.yupi.icu/1/image-20260109100507368.png) + + + +## 三、AI 大模型 + +AI 大模型是所有 AI 工具的基础。下面是我今年用得最多的几个大模型。 + + + +### 智谱 GLM + +[智谱 GLM](https://bigmodel.cn/) 是我用得最多的国产大模型,编程能力很强,中文理解能力也很优秀。 + +我主要用它搭配 Claude Code 生成非商业级的全栈项目。因为 GLM 的 API 价格很便宜,而且速度快,特别适合做一些小项目或者快速验证想法。 + +如今智谱的发展也是嘎嘎猛,从 GLM-4.6 开始编程能力就有了很大提升,在一些测评中甚至超过了 Claude Sonnet!公司上市也是理所应当的。 + + + +### 阿里通义千问 + +通义千问是我们团队产品接入最多的大模型。它的优势是生成速度快、API 对接方便,还可以利用 [阿里云百炼平台](https://bailian.console.aliyun.com/) 调试。 + +![](https://pic.yupi.icu/1/1752569401445-7023e2c1-f709-4c22-af86-63ee1872c1cd.png) + +我们的产品用它来生成简单的内容或者做意图识别。比如用户输入一句话,我们用通义千问来判断用户想做什么,然后调用相应的功能。 + +而且通义千问有免费额度,对于小项目来说够用一阵子了。 + + + +### DeepSeek + +[DeepSeek](https://www.deepseek.com/) 作为曾经是爆款,完全免费而且编程能力很强。不过最近无论是产品生态还是出新模型的速度都略逊一筹。 + +我现在主要用它来校验专业技术知识。比如我写文章时,不确定某个技术点是否正确,就会问问 DeepSeek。反正它是免费的,所以我可以随便问,不用担心成本。 + +![](https://pic.yupi.icu/1/image-20260109100658239.png) + + + +### Gemini + +[Gemini](https://gemini.google.com/) 具备强大的推理能力和多模态理解能力,而且支持超长上下文(100 万 Token)。 + +我主要用它来分析大型项目。比如我接手一个几百个文件的项目,想快速了解项目结构,就会用 Gemini 来分析。 + +我还会利用 Gemini 网页版来搜集一些国外的技术和产品调研,给出的报告很专业。 + +![](https://pic.yupi.icu/1/image-20260109100840547.png) + +不过 Gemini 在国内有一定的使用门槛,你懂的。 + + + +## 四、AI 开发框架 + +除了直接使用 AI 工具,我还会用一些 AI 开发框架来构建 AI 应用。 + + + +### Spring AI + +[Spring AI](https://spring.io/projects/spring-ai) 是 Java AI 开发的标配,提供统一 API 简化大模型集成。 + +我们团队做 Java 项目时,基本上都会用 Spring AI。它把各种大模型的 API 统一成一套接口,这样开发者可以很方便地切换不同的模型,不用改代码。 + +![](https://pic.yupi.icu/1/image-20260109100909041.png) + +而且 Spring AI 提供了很多高级功能,比如对话记忆、RAG、工具调用等,让我们可以快速构建复杂的 AI 应用。 + + + +### LangChain4j + +[LangChain4j](https://docs.langchain4j.dev/intro) 是 Java 版的 LangChain,支持声明式语法,开发体验巨爽,适合构建复杂 Agent。 + +我特别喜欢它的链式调用语法,写起来很优雅。而且它的文档很完善,社区也很活跃,遇到问题可以到 GitHub Issues 区多看看,容易找到解决方案。 + +我带 [编程导航](https://codefather.cn/) 的鱼友们做对标大厂的 [AI 零代码生成平台项目](https://www.codefather.cn/course/1948291549923344386) 时,就是用的 LangChain4j + LangGraph4j,能够很方便地构建复杂的 AI 工作流。 + +![](https://pic.yupi.icu/1/1753332332820-9ec614de-65a2-496d-b9b2-dc89c20d06c9.png) + + + +### Vercel AI Gateway + +[Vercel AI Gateway](https://vercel.com/ai-gateway) 是 AI 模型网关服务,让你能统一调用数百个 AI 模型。 + +它提供了统一的 API,我不用去学习每个模型的 API 文档,直接用 Vercel AI Gateway 就行。 + +![](https://pic.yupi.icu/1/1760687990497-90720fbb-0df6-4ede-87b8-64b8702994e9-20251028181254840.png) + +我用它来开发一些创意项目。比如我想做一个 AI 工具,让用户可以选择不同的模型,Vercel AI Gateway 就能帮我很方便地实现这个功能。 + + + +### 阿里云百炼 + +[阿里云百炼](https://bailian.console.aliyun.com/) 是企业级 AI 应用开发平台,支持 RAG 知识库、流程编排等功能。 + +我们团队的一些知识库就用它来管理。比如我们有很多技术文档,用百炼的 RAG 功能可以很方便地让 AI 基于这些文档回答问题。 + +![](https://pic.yupi.icu/1/1744177887403-6373c63c-d410-49ba-a71c-556389536376.png) + +而且百炼提供了可视化的流程编排功能,不用写代码就能构建复杂的 AI 工作流。 + +![](https://pic.yupi.icu/1/1745388167957-d7995436-fc2f-410e-bc59-4f6db6544359.png) + + + +### OpenRouter + +[OpenRouter](https://openrouter.ai/) 是统一的 AI 模型路由平台。它支持几百个模型,而且可以很方便地切换,不用去每个平台注册账号。 + +每次有新模型发布,我都会在 OpenRouter 上试试,用它来体验最新的大模型能力。 + +![](https://pic.yupi.icu/1/image-20260109101446266.png) + +对于想要尝鲜的开发者来说,OpenRouter 是个很好的选择。 + + + +## 五、AI 浏览器插件 + +AI 浏览器插件让我可以在浏览器里随时使用 AI,特别方便。 + +### Monica + +[Monica](https://monica.im/) 是浏览器里的全能 AI 助手,网页总结、视频总结、翻译、写作、图片处理一应俱全。 + +![](https://pic.yupi.icu/1/image-20260109101602426.png) + +我每天都在用 Monica。比如看长文章时,用它总结一下核心内容;看英文文档时,用它翻译;看代码仓库时,总结整个项目的介绍。 + +![](https://pic.yupi.icu/1/image-20260109101803122.png) + +Monica 最大的优势是集成度高,几乎所有常用的 AI 功能都有。而且它支持多个大模型,可以根据任务选择最合适的模型,强烈安利。 + + + +### AITDK + +[AITDK](https://aitdk.com/) 是 SEO 和内容创作神器,我用它来进行关键词分析和竞品研究。 + +做自媒体的朋友都知道,关键词研究很重要。AITDK 可以帮我分析哪些关键词搜索量大、竞争小,然后我就针对这些关键词写文章、或者优化自己的网站。 + +而且 AITDK 还能分析竞品的内容策略,看看别人都在写什么,我就能找到差异化的角度。 + +![](https://pic.yupi.icu/1/image-20260109101947603.png) + + + +## 六、AI 日常对话 + +除了工作,我平时也会用 AI 来解决一些日常问题。 + + + +### 字节豆包 + +字节豆包是国民级 AI 应用,速度快交互好。 + +我遇到问题时,经常会直接掏出手机找豆包问问。豆包的回答速度特别快,而且中文理解能力很强。 + + + +### 腾讯元宝 + +腾讯元宝最大的优势是打通了微信,随时随地都能用。 + +我在微信里看到一篇文章,想让 AI 总结一下,直接 @元宝 就行。这种无缝集成的体验特别好,不用切换 App,在微信里就能用 AI。 + +![](https://pic.yupi.icu/1/image-20260109102243168.png) + + + +## 七、AI 办公工具 + +做内容创作时,我也会用一些 AI 办公工具来提高效率。 + + + +### 百度文心助手 + +[百度文心助手](https://image.baidu.com/) 集成了很多文档写作和图片处理工具,我经常用它改图和去水印。 + +比如我拍了一张照片,想去掉水印,用文心助手几秒钟就能搞定。或者我想把一张图片的背景换掉,文心助手也能帮我实现。 + +而且文心助手还有很多其他功能,比如 PPT 生成、文档翻译等。对于内容创作者来说,是个很实用的工具。 + +![](https://pic.yupi.icu/1/image-20260109102440839.png) + + + +## 八、鱼皮 AI 导航 + +鱼皮团队开发的 [AI 导航网站](https://ai.codefather.cn/),也是我今年访问最多的 AI 网站,一个字就是 “全”! + +我会定期去看看最近 AI 领域有什么新动态。而且鱼皮 AI 导航整理了很多 AI 工具的分类,找工具特别方便。 + +![](https://pic.yupi.icu/1/AI%E8%B5%84%E6%BA%90%E5%A4%A7%E5%85%A8%E7%BD%91%E7%AB%99.png) + + + +## 九、我的使用策略 + +分享了这么多工具,简单总结一下: + +- **做大项目时**,我会用 Cursor + Claude Opus 4.5,因为代码质量要求高,需要最强的 AI 能力。 + +- **做小项目或快速验证想法时**,我会用 Claude Code + 智谱 GLM,因为速度快,成本低。 + +- **预算用完时**,我会切换到 VS Code + Cline + DeepSeek,完全免费,功能也够用。 + +- **需要生成图片时**,我会用 Nano Banana,因为中文支持好,生成速度快。 + +- **需要生成视频时**,我会根据质量要求选择即梦 AI(性价比高)或 Veo 3(质量最高)。 + +- **日常遇到问题时**,我会直接问豆包或元宝,因为方便快捷。 + +- **写文章需要配图时**,我会用文心助手处理图片,因为功能全面。 + +根据场景选择最合适的工具,这样既能保证效率,又能控制成本。 + + + +## 写在最后 + +这就是我今年使用最多的 AI 产品 Top 20,以及我的实际使用心得。 + +**工具会不断更新,选择要灵活。** + +除了工具外,更重要的是,掌握 Vibe Coding 的核心能力:如何清楚地表达需求、如何与 AI 有效对话、如何理解和优化 AI 生成的代码、如何把想法变成产品。 + +现在你已经掌握了 Vibe Coding 所需的工具知识。接下来,是时候把这些工具用起来,做出真正的项目了! + +在【项目实战】板块中,我会手把手带你做各种项目,从个人工具到 AI 应用,从简单到复杂,让你真正掌握 Vibe Coding 的精髓。 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/工具实战/Dify:零代码 AI 应用开发平台.md b/Vibe Coding 零基础教程/10 编程工具/工具实战/Dify:零代码 AI 应用开发平台.md new file mode 100644 index 0000000..d6d4d81 --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/工具实战/Dify:零代码 AI 应用开发平台.md @@ -0,0 +1,279 @@ +# Dify:零代码 AI 应用开发平台 + +> 用可视化方式构建你的 AI 应用 + + + +你好,我是鱼皮。 + +在前面的文章中,我们学习了零代码平台,可以用 Bolt.new、百度秒哒快速生成网站和应用。但如果你想做的是 AI 应用,比如智能客服、知识库问答、AI 助手,该用什么工具呢? + +这篇文章,我会介绍 **Dify**,一个专门用来开发 AI 应用的零代码平台。通过可视化的方式,你可以快速构建功能强大的 AI 应用,而且完全不需要写代码。 + +让我通过实际操作,带你了解 Dify 的使用方法,同时也会顺便讲解一些 AI 的核心概念。 + + + +## 一、什么是 Dify? + +[Dify](https://dify.ai/) 是一个开源的 AI 应用开发平台,可以让你通过可视化的方式构建 AI 应用。 + +它和 Bolt.new 的区别是什么? + +Bolt.new 主要用来生成普通的网站和应用,比如个人主页、电商网站等。而 Dify 专注于 AI 应用,比如: + +- 智能客服机器人 +- 知识库问答系统 +- AI 写作助手 +- 文档分析工具 +- AI 工作流自动化 + +Dify 提供了可视化的配置界面,你可以通过拖拽的方式搭建 AI 工作流,配置大模型、设置提示词、添加知识库等,不需要写代码就能做出功能强大的 AI 应用。 + +![](https://pic.yupi.icu/1/853427c8123decb5ea3d163ae3bb8ab635d95e92f7ee14a2e51e54df06e94fd8.png) + + + +## 二、快速上手 Dify + +让我通过一个实际例子,带你快速上手 Dify。 + + + +### 1、创建 AI 应用 + +首先进入 [Dify 平台](https://dify.ai/),注册账号并登录。然后创建一个 AI 应用,进入到 AI 对话界面。 + +![](https://pic.yupi.icu/1/1743560753186-1e9452e6-0d38-4070-b369-c674bc418c91.png) + + + +### 2、选择大模型 + +首次使用时,我们要选择 **大模型**(LLM)。 + +**大模型是 AI 的大脑**,是指具有海量参数的人工智能模型,通过大规模的预训练获得广泛的知识和能力。 + +![](https://pic.yupi.icu/1/1743560803824-ab33d9d9-e994-45e5-8190-fc104e679747.png) + +不同大模型的参数规模、处理能力、接受的对话长度是不一样的。比如 Claude Opus 4.5 编程能力很强,Gemini 3 Pro 支持超长上下文,DeepSeek 完全免费。 + +![](https://pic.yupi.icu/1/1743560841202-c37cde5b-0b25-4ebb-adff-3ab66af35d75.png) + +选择大模型后,我们可以设置参数来调整大模型的输出。比如 **温度** 可以控制模型输出的随机性: + +- 温度值越高,模型输出越随机多样(适合创意写作) +- 温度值越低,输出越确定保守(适合专业问答) + +![](https://pic.yupi.icu/1/1743560855583-7efaebb7-3552-4a5b-9787-adbb9acaddc6.png) + + + +### 3、设置提示词 + +下面我们来和 AI 进行对话。输入给 AI 的内容我们称为 **提示词(Prompt)**,用来引导模型生成特定内容或执行特定任务。 + +提示词的质量直接决定了 AI 输出的准确度。提示词又可以分为两种: + +- 系统提示词:整体约束 AI 输出的内容,需要提前设置 +- 用户提示词:用户自主输入的内容,随用随输 + +![](https://pic.yupi.icu/1/1743560920031-d86572e4-b09e-46b4-8aa8-c734a96bec44.png) + +比如我想做一个编程助手,可以在系统提示词中设置: + +``` +你是一位专业的编程助手,擅长 Python、JavaScript、Java 等语言。 +回答问题时要简洁明了,提供代码示例。 +``` + +然后用户就可以直接问:“怎么用 Python 读取文件?” + + + +### 4、理解 Token + +我们进行一次对话后,会发现对话下方展示了 “花费 Token”。 + +![](https://pic.yupi.icu/1/1743561058442-beebd2ac-94a0-4f00-8e56-f819822247e1.png) + +看到 “花费” 很多同学就慌了,啥是 Token 啊?Token 贵不贵啊? + +**Token 是大语言模型处理文本的基本单位**,可能是单词或标点符号。模型的输入和输出都是按 Token 计算的,一般 Token 越多,成本越高、并且输出速度越慢。 + +不同模型的计费都不太一样,一般 100 万 Token 要几十块钱。你可以通过一些在线的 Token 计算工具来估算成本。 + +![](https://pic.yupi.icu/1/1743561097206-472514a9-3d13-4408-b222-2207b00f611a.png) + +不过不用太担心,日常使用的话,成本不会很高。而且很多平台都有免费额度。 + + + +### 5、添加知识库(RAG) + +有时,大模型可能缺少了某些信息。比如让 AI 总结 [鱼皮写的《保姆级写简历指南》](https://www.codefather.cn/course/cv),它给的信息就不准确,因为它没有读过这篇文章。 + +这时候我们可以开启知识库功能,背后是 **RAG(检索增强生成)** 技术,来利用外部知识库给 AI 补充知识。 + +![](https://pic.yupi.icu/1/1743561648847-337df359-2e2a-4e05-bec6-fdff52b3be1d.png) + +首先创建知识库,上传知识文档: + +![](https://pic.yupi.icu/1/1743561783744-1ddce7bb-802e-4feb-9e8f-7e0a83b4ad98.png) + +然后对文本进行切分,可以自己设置分块的规则: + +![](https://pic.yupi.icu/1/1743561816205-22494e52-c011-49fe-8537-3b7f0f441a51.png) + +接下来利用 **Embedding(嵌入)** 技术,将文本转换为向量表示,并写入到向量数据库中。 + +用户向 AI 提问时,会将问题转换成向量,从知识库中检索和问题相关的信息,再将这些信息和问题一起输入大模型进行处理,使大模型的回答更准确。 + +![](https://pic.yupi.icu/1/1743561872916-7971c368-14bd-49c2-9bd9-604973f469e3.png) + +这样一来,AI 就能基于你提供的知识库来回答问题了。 + + + +### 6、发布和调用 + +好,这样我们的 AI 应用就做完了。可以发布给别人用,也可以通过 **API 接口**,在自己的代码程序中通过网络请求来调用。 + +![](https://pic.yupi.icu/1/1743561915955-ad27735a-c927-4207-b769-03fda32081b6.png) + + + +## 三、AI 智能体和工作流 + +刚刚我们只是做了个简单的聊天助手。但实际上,Dify 还支持更强大的功能 —— **AI 智能体**。 + +智能体是能够感知环境、进行推理、制定计划、做出决策并自主采取行动来实现目标的 AI 系统。 + +![](https://pic.yupi.icu/1/1743561972671-9c7ad13e-a467-4a08-ba14-711d4640939c.png) + +我们可以给智能体提供 **工具**,比如网页搜索、查询天气、调用数据库等等,让智能体完成更复杂的任务。 + +安装工具后,提供给智能体,它就会在需要的时候使用这个工具。比如从网上检索到内容,进行总结后再回复。这样一来,AI 的应用范围和能力边界将会是无限大。 + +![](https://pic.yupi.icu/1/1743562005435-e5ece3f2-5f4b-4729-b490-a1e51f1f006e.png) + +当然,如果你用的 AI 大模型不够聪明,它可能不会用工具。所以我建议给智能体选用思考能力更强的推理模型。 + +有些模型会使用 **思维链(CoT)** 和 **ReAct** 技术,让模型先思考问题、推理分析并提出行动计划,然后再行动,再基于结果进一步推理。并且中间步骤和思考过程是公开可见的,让我们能够理解模型是如何得出结论的。 + +![](https://pic.yupi.icu/1/1743562152661-80fabf5f-07a4-4463-a980-67da980f0ede.png) + +有时,单一的智能体并不能完成我们的任务,比如自动生成 100 个短视频、自动做个游戏并发布上线。 + +这时我们可以使用 **智能体工作流**(Agentic Workflow),可以通过规划和编排,让智能体自由搭配功能,自动化实现各种复杂的任务。有点像可视化编程。 + +![](https://pic.yupi.icu/1/1743562195750-57a3b344-4282-4279-bd71-510f60fc17c6.png) + + + +## 四、MCP 服务集成 + +最后再分享一个很火的概念,叫 **MCP(Model Context Protocol)模型上下文协议**,用于实现 AI 与外部工具或数据的标准化交互。 + +![](https://pic.yupi.icu/1/1743562215479-a19f8b1c-0190-41b4-8a2f-f508b24e74a7.png) + +简单来说,利用 MCP 服务,我们可以更方便地给 AI 集成不同的工具和数据,增强 AI 应用的功能。 + +首先安装 MCP Agent 策略,让智能体支持调用 MCP: + +![](https://pic.yupi.icu/1/1743562275496-34bcb486-235d-4d97-bc5a-cdf00f59cff7.png) + +然后可以去 [MCP 大全网站](https://mcp.so/) 找到我们需要的 MCP 服务,比如查询当前时间。 + +![](https://pic.yupi.icu/1/1743562325916-dbef66dc-d0d1-4a60-9bed-68691c462677.png) + +再回到智能体工作流中,填写 MCP 服务器地址、调用 MCP 的指令和查询条件等信息,AI 就可以在需要的时候向 MCP 发送请求来获取数据了。 + +![](https://pic.yupi.icu/1/1743562400230-79c99317-98f1-4579-8884-a5bf53623683.png) + + + +## 五、其他 AI应用开发平台 + +除了 Dify,还有一些其他的 AI 应用开发平台也值得了解。 + +### Coze + +[Coze](https://www.coze.com/) 是字节跳动推出的 AI 应用开发平台,提供了大量的插件,方便完成应用开发。 + +Coze 的优势是零代码、可视化流程,而且提供了很多预置的插件和模板,上手很快。适合个人和轻量应用。 + + + +### 阿里云百炼 + +[阿里云百炼](https://bailian.console.aliyun.com/) 是企业级 AI 应用开发平台,支持 RAG 知识库、流程编排等功能。 + +百炼的优势是企业级能力,提供了可视化的流程编排功能,不用写代码就能构建复杂的 AI 工作流。而且和阿里云的其他服务深度集成,适合企业用户。 + + + +### 怎么选择? + +如果你是个人开发者或者没有编程基础,想快速做个 AI 应用,Dify 和 Coze 都是不错的选择。 + +如果你是企业用户或者 Java 开发者,需要更强的稳定性和企业级功能,可以考虑阿里云百炼。 + +我自己主要用阿里云百炼,毕竟作为一名以 Java 后端为主的全栈程序员,阿里在国内 Java 生态的地位无可撼动,他们推出的 Spring AI Alibaba 框架和自家 AI 的集成度更高,能快速开发出完整的 AI 应用。 + + + +## 六、Dify 实战技巧 + +在使用 Dify 的过程中,我总结了一些实用技巧。 + +1、选择合适的大模型 + +不同的任务适合不同的模型。如果是创意写作,可以选择 GPT-4 或 Claude;如果是代码生成,Claude 的编程能力更强;如果预算有限,可以选择 DeepSeek 或 Gemini Flash。 + +2、优化提示词 + +提示词的质量直接影响 AI 的输出。建议: + +- 明确角色定位(比如 “你是一位专业的……”) +- 清楚说明任务要求 +- 提供具体的示例 +- 设置输出格式 + +3、善用知识库 + +如果你的 AI 应用需要基于特定的知识回答问题,一定要使用知识库功能。把相关的文档、资料上传到知识库,AI 的回答会准确很多。 + +4、测试和迭代 + +做好 AI 应用后,一定要多测试。尝试各种不同的问题,看看 AI 的回答是否符合预期。发现问题就调整提示词或者知识库,不断迭代优化。 + +5、利用工作流 + +对于复杂的任务,可以使用工作流功能。把任务拆解成多个步骤,每个步骤完成一个小任务,最后组合起来。这样更容易控制,也更容易调试。 + + + +## 写在最后 + +看到这里,相信你已经对 Dify 和 AI 应用开发有了基本的了解。 + +**用 Dify 做 AI 应用,真的很简单。** 不需要写代码,只需要配置一下,就能做出功能强大的 AI 应用。 + +而且在使用 Dify 的过程中,你也会逐渐理解 AI 的核心概念,比如大模型、提示词、Token、RAG、智能体等。这些概念不仅在 Dify 中有用,在其他 AI 工具中也是通用的。 + +建议接下来你亲自尝试用 Dify 做一个简单的 AI 应用,比如一个编程问答助手、一个文档总结工具、或者一个知识库问答系统,慢慢你就会发现 AI 应用开发的乐趣。 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/工具实战/Gemini CLI 首测:免费开源很香,但坑点很多!.md b/Vibe Coding 零基础教程/10 编程工具/工具实战/Gemini CLI 首测:免费开源很香,但坑点很多!.md new file mode 100644 index 0000000..c0bfba6 --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/工具实战/Gemini CLI 首测:免费开源很香,但坑点很多!.md @@ -0,0 +1,415 @@ +# Gemini CLI:Google 的免费 AI 命令行工具实测 + +你好,我是鱼皮。 + +Google 推出了一个很有意思的 AI 命令行工具 —— Gemini CLI,直接把 AI 塞进了终端里。 + +![](https://pic.yupi.icu/1/1750927083919-e42152fe-9df9-4686-b813-388ae261b738.png) + +根据 [官方介绍](https://github.com/google-gemini/gemini-cli),这个工具能: + +- 处理大型代码库(高达 100 万的 Token 上下文) +- 有多模态能力:能从 PDF 或草图生成新应用 +- 能自动化运维:帮你查询代码合并请求、处理复杂的代码合并 +- 集成了大量工具:支持连接 MCP 服务器,支持图像、视频、音频生成 +- 还有内置搜索等等 + +对标 Claude Code,现在还有免费使用额度、而且最好的是代码开源! + +![](https://pic.yupi.icu/1/image-20260112165459541.png) + +截止到 2026 年 1 月,Gemini CLI 已经有 **9 万+ GitHub Stars**,火箭式涨星! + +那这个工具到底怎么样呢?我来带大家实际体验一下,说说我自己真实的使用感受。 + +⭐️ 推荐观看视频版:[https://bilibili.com/video/BV1LuKdzjEAc](https://www.bilibili.com/video/BV1LuKdzjEAc/) + + + +## 一、安装和启动 + +按照官方提供的文档,我们要先安装 Node.js 运行环境,直接去 [官网](https://nodejs.org/) 安装就好了,**注意版本要 >= 20**(2026 年最新要求)。 + +然后打开终端,输入一行命令全局安装工具: + +```bash +npm install -g @google/gemini-cli +``` + +或者用 Homebrew 安装(macOS/Linux): + +```bash +brew install gemini-cli +``` + +安装完成后,输入 `gemini` 命令,做一些基础的设置: + +![](https://pic.yupi.icu/1/1750927215041-aef86c7f-90b6-41e1-8509-cb53809372dd.png) + +接下来是关键了,需要经过一波账号验证,个人用户选第一项就好。 + +![](https://pic.yupi.icu/1/1750927255279-3b2d860a-c514-492a-8b27-a8abe27b4b31.png) + +这里大家可能会遇到 2 种验证失败的情况,第一种是网络原因(这个不好搞),第二种是说账号类型不符合要求,如图: + +![](https://pic.yupi.icu/1/1750927301003-4937f694-3fc9-493f-8309-e169439f59fa.png) + +对于第二种情况,解决方案很简单。进入 [Google Cloud](https://console.cloud.google.com/) 控制台,新建一个项目得到 `project_id`: + +![](https://pic.yupi.icu/1/1750927486133-ecf76c02-ba82-4f85-adfe-4d168247bee6.png) + +然后在终端输入下列命令设置环境变量,重试就能登录进去了: + +```bash +export GOOGLE_CLOUD_PROJECT=<你的 project_id> +``` + +登陆成功后,我们就可以开始使用了。 + + + +## 二、实战测试 + +接下来我选了 8 个不同的场景来从多个方面验证它的能力,大家也可以感受下 Gemini CLI 的真实水平到底如何,大家说好才是真的好。 + +![](https://pic.yupi.icu/1/1750928002955-c44764ed-abd4-4568-ad07-954d909aa360.png) + +### 1、基础问答 + +输入提示词: + +``` +你好,请问你能做些什么?有什么优势? +``` + +结果没想到,一上来就报错了?而且各种胡言乱语。 + +![](https://pic.yupi.icu/1/1750928093701-0a2cdf6c-483c-4198-8933-00268b7ca2af.png) + +过了一会儿,终于满屏飘红了,看报错的意思是我没开启 API 权限: + +![](https://pic.yupi.icu/1/1750928146165-9359e7e2-0dfa-4b7e-b3bb-31bfcf94b540.png) + +直接访问错误信息中的网址,就能去控制台开启 API 权限了,开一下开一下: + +![](https://pic.yupi.icu/1/1750928172586-6ec6dd3b-db41-4fb3-b096-e933936e1e37.png) + +再来!这次 AI 的回复就对味儿了,他说自己是个AI软件工程师,确保操作的透明和安全。结果还可以,就是速度有点小慢啊,这么一个简单的问题花了 20 秒,这也是智能体的一个副作用吧。 + +![](https://pic.yupi.icu/1/1750928224341-15221ba1-7dd2-462a-91f2-f9d832eda07c.png) + + + +### 2、网页搜索 + +输入提示词,让 AI 自动上网下载表情包: + +```markdown +请帮我获取 10 张健康的熊猫头表情包,并且下载到当前目录下 +``` + +结果 AI 给我推荐了几个表情包网站,无法直接下载: + +![](https://pic.yupi.icu/1/1750928294365-8a9833e9-a05a-413f-8090-af944d2b4daf.png) + +是不是不支持下载工具啊? + +我们输入下 `/` 键,就可以看到 Gemini CLI 支持的命令: + +![](https://pic.yupi.icu/1/1750928337773-c1fec292-a628-4b3d-93e4-a8846ab7b5b2.png) + +进入查看工具列表,发现好像没有网页资源下载工具,也是难为 AI 了。但是它支持编写 Shell 脚本,所以我们不妨引导 AI 编写脚本来实现资源下载。 + +![](https://pic.yupi.icu/1/1750928445912-9ba1f2bd-2262-499b-bec0-0f5caf967a47.png) + +提示词: + +```markdown +请帮我获取 10 张健康的熊猫头表情包,并且下载到当前目录下,你可以通过编写可执行脚本来实现图片的下载 +``` + +这次就可以看到智能体开始自主规划任务了,先创建了一个脚本,然后 “写文件” 操作需要我们确认,这里建议选择仅允许一次,安全一些: + +![](https://pic.yupi.icu/1/1750928484880-802fa820-8ebe-44d2-963e-34b4eeca590c.png) + +遇到问题它会尝试 **重新规划** 然后重试,这也是智能体的一个关键能力: + +![](https://pic.yupi.icu/1/1750928516938-edbd9bb5-1507-4835-a83f-fa64ab5bed4d.png) + +任务执行完后还记得清理脚本,这个很不错。 + +![](https://pic.yupi.icu/1/1750928581541-3e1fdfc3-f18b-4202-9b74-b7e351cce7fd.png) + +好了,大功告成,我们看看下载好的文件,这个尺寸是认真的么?果然翻车了,下载的图片根本不对! + +![](https://pic.yupi.icu/1/1750928679026-e945b956-7b1c-40ae-b941-5c41afbab70f.png) + + + +### 3、文件操作 + +输入下列提示词,让 AI 帮忙处理我本地的表情包文件: + +```markdown +帮我把所有的表情包尺寸放大 1 倍,并且转换为 WEBP 格式,然后将所有表情包组合在一起生成为 GIF +``` + +然后应该要指定文件路径吧,不然 AI 可能不知道要处理什么。 + +结果当我输入 `@` 键指定文件路径时,好家伙,输入框直接卡死了?该说不说,这个交互体验不够好,我每次选择文件都会卡,而且选择不了目录。 + +![](https://pic.yupi.icu/1/1750928995135-adc3d93a-6afc-4c0e-b971-5ba627ec3fc5.png) + +经过一番折腾,我发现 得慢点选择,跟着程序列举出的目录树进行选择,就先选一个图片吧: + +![](https://pic.yupi.icu/1/1750929221785-9d4261ea-92e5-439e-b038-54ccb9bcfa33.png) + +好,这次 AI 聪明了,问我是不是要处理多个文件,必须的: + +![](https://pic.yupi.icu/1/1750929281202-176c6599-3e3c-4b0c-93ba-2462c91bf375.png) + +然后 AI 发现无法处理图片,要下载一个图片处理工具,然后它说要利用 Mac 上的软件包管理工具来安装,同意即可: + +![](https://pic.yupi.icu/1/1750929456285-d75c4e55-2593-424c-8bf0-1e52222305eb.png) + +经过漫长的等待,等了快 10 分钟竟然还没好?! + +![](https://pic.yupi.icu/1/1750929498503-93b9d475-97a3-4979-92b5-c1538dce9396.png) + +可能是我自己的网络原因吧,但我实在等不下去了。老实说测到这里,我心态都已经有点崩了,凌晨两点半隔这儿等软件安装? + +![](https://pic.yupi.icu/1/1750929564667-ba06cda8-cd5e-44b5-afac-28c62e3af961.png) + +不是,这玩意你写个简单的 Python 脚本不就搞定了? + +感觉这个工具还是得给程序员用,要稍微加一些引导,比如我们让 AI 利用 Python 脚本实现任务: + +```markdown +帮我把所有的表情包尺寸放大 1 倍,并且转换为 WEBP 格式,然后将所有表情包组合在一起生成为 GIF,使用 Python 脚本实现 +``` + +可以看到 AI 安装了图像处理库,然后创建了一个虚拟环境,你别说它对安全性的考虑还是 ok 的: + +![](https://pic.yupi.icu/1/1750929702268-23a76696-f001-444f-8986-f28ad42d3b39.png) + +然后编写脚本并执行: + +![](https://pic.yupi.icu/1/1750929740570-990bbe0f-f685-4e7d-be7f-ef53402882e5.png) + +任务成功完成,看下效果: + +![](https://pic.yupi.icu/1/1750929779663-14caecd9-ae80-4727-bc3f-0542fbdf71fe.png) + +尺寸确实放大了,格式也转换成功了,GIF 也成功生成了。终于顺利完成了一次任务,还不戳。通过这种方式处理本地图片确实是要比网页端的 AI 应用方便很多。 + + + +### 4、生成代码 + +输入下列提示词,让 AI 帮我做个像素摄影网站: + +```markdown +请帮我制作一个网站,能够调用摄像头进行拍照,并将照片转为像素风,支持下载,要求界面简洁炫酷 +``` + +这次生成速度还是挺快的,就是过程中得多次进行人工确认: + +![](https://pic.yupi.icu/1/1750929959173-97f40707-bbcc-4cba-a021-4e3c9e7372d4.png) + +我们来看下生成的网站效果: + +![](https://pic.yupi.icu/1/1750930213995-9ca12c77-e2f4-4626-9da4-8f2783d73eeb.png) + +可以调整像素的密度,还可以一键下载照片,效果还是挺不错的,这次任务 AI 也顺利完成了~ + +![](https://pic.yupi.icu/1/1750930254795-38b8adcb-3a87-44dd-99d4-0b37532ae1fc.png) + + + +### 5、解释代码 + +给刚刚生成的项目补充一个学习指南,输入提示词: + +```markdown +帮我生成该项目的学习指南,帮助新开发者快速上手 +``` + +由于 AI 有上下文,它直接 get 到了我想让他分析哪个项目,然后很快生成了一个项目文档。 + +![](https://pic.yupi.icu/1/1750930402860-d39c7707-0e3d-4cc8-aaeb-dbf9344589e4.png) + +然后我让 AI 帮我打开文档文件: + +![](https://pic.yupi.icu/1/1750930530481-8b8f0abf-30fd-48ff-b36c-61b168af2cde.png) + +本来是想让 AI 直接打开 Markdown 阅读软件的,但没想到它直接给我输出了一堆无关的内容,我表示不理解。 + +![](https://pic.yupi.icu/1/1750930702812-27e5e920-9e3c-48f7-8957-60025b80b773.png) + +那我自己打开好了吧,生成的文档内容还是过关的,标准的 GitHub 开源项目文档。 + +![](https://pic.yupi.icu/1/1750930759557-f4b0a16f-d1c8-46fe-b0e5-21910a2bf752.png) + + + +### 6、生成架构图 + +好,鉴于刚刚的任务完成得还可以,我们加大难度。让 AI 生成一个项目的分层架构图: + +```markdown +帮我针对当前项目,生成分层架构图 +``` + +结果就有点乌龙了,AI 给我生成了一个架构设计文档: + +![](https://pic.yupi.icu/1/1750930929870-b368fc52-c779-42f0-9ad5-fb056b99ef84.png) + +你管这纯英文文档叫做架构图? + +![](https://pic.yupi.icu/1/1750930979557-8ab249fe-727e-4041-99b7-9e154a742090.png) + +那我再发挥一下仅存的专业性,让他帮我生成架构图的绘图代码: + +```markdown +帮我针对当前项目,生成分层架构图的 draw.io 代码 +``` + +这次看着靠谱多了: + +![](https://pic.yupi.icu/1/1750931031112-0247644b-2626-459a-ae81-a240ad782400.png) + +来,我们把 AI 生成的架构图代码文件拖到 draw.io 中打开。 + +不是哥们?你管这叫架构图? + +![](https://pic.yupi.icu/1/1750931055227-1e674680-468c-4c4d-b182-8bd3026c993e.png) + +来,同样的任务,我们用 Cursor + Claude 4 试一试。 + +哎,你看人家 Claude 很有自信,说 “我可以为您生成一个更完整和详细的分层架构图”: + +![](https://pic.yupi.icu/1/1750931203239-924cc09e-c80f-4acf-9855-66d6b4102cac.png) + +好,看下生成后的效果,是不是高下立判啊! + +![](https://pic.yupi.icu/1/1750931312134-a573f7ff-07ca-4852-830a-07d74bc21690.png) + + + +### 7、生成可视化图表 + +让 AI 帮我分析项目的提交记录,输入提示词: + +```markdown +根据当前项目的提交记录,生成可视化图表,便于我来分析项目的发展历程 +``` + +可以看到 AI 使用 git log 命令查看代码提交记录,然后开始生成图表。 + +![](https://pic.yupi.icu/1/1750931424995-0e5cd8c2-1dfe-4f09-ac29-c08b1c1388b4.png) + +等等?图表在哪儿呢??? + +我的预期肯定是生成一个图片,或者起码是一个字符画,看着像图也行啊,有点为难他了。 + + + +### 8、多模态 + +等验证到多模态的时候已经是凌晨 3 点,我都已经麻了,唉,最后再坚持试试多模态吧。 + +输入生成图片提示词: + +```markdown +帮我基于当前目录下的图片,生成一个风格相似的新图片 +``` + +这次 AI 干脆直接拒绝了,不支持图片创作,你倒是写个脚本啊?!你不用 AI,用个图像处理也行对不对? + +![](https://pic.yupi.icu/1/1750931630520-47da3d4e-c55e-4b1c-9507-17dd0f08cb1e.png) + +那再解释个图片试试,输入解释图片提示词: + +```markdown +帮我解释当前目录下所有的图片 +``` + +这倒是解释出来了,吐槽一下,竟然还是英文输出,可能跟程序本身的语言设定有关吧,体验没有那么好。 + +![](https://pic.yupi.icu/1/1750931670952-251c1eb3-487a-44ca-b217-194f92a5442a.png) + +Gemini CLI 背后用的应该是 Gemini 2.5 Pro 模型,是具有原生多模态输入能力的,也就是说能识图,但是并不能创作图片,包括创作音频和视频应该都是通过第三方大模型(或者 MCP 工具实现的)。 + +最后再让他解释个 PDF 吧,输入提示词: + +```markdown +帮我总结 PDF 的内容,并生成一个新的 PDF +``` + +结果出乎我意料了,AI 提示输入超出了 token 限制? + +![](https://pic.yupi.icu/1/1750931736351-d36ac39e-23ce-42c1-af30-d1f56284d48a.png) + +不是号称 100 万 token 上下文么,怎么读个微型 PDF 就超出限制了呢?你无法生成 PDF 我都不觉得奇怪,我这个 PDF 文件就那几个字几张图,为什么? + +![](https://pic.yupi.icu/1/1750931817587-41d3c5ef-aca8-4ba6-b89a-a1d55c739c61.png) + +本来还想让他生成音频和视频的,算了算了,我对这个工具已经有一些自己的判断了。 + + + +## 三、Gemini CLI 的优缺点 + +测试了 8 个维度后,我的感受是 **一言难尽**,可能是我对 Google 预期太高了吧。 + +### 优点 + +先说说优点。**终端操作本地文件确实更方便**,而且它可以直接一行命令安装,在已有的终端中使用,不用重新下载一个终端软件,这点还是不错的。 + +而且 Gemini CLI 最大的优势是 **完全免费**(有免费额度),支持 Gemini 2.5 Pro 模型,100 万 Token 上下文窗口,每天 1000 次请求。对于预算有限的开发者来说,这是个很好的选择。 + +另外,Gemini CLI 是 **完全开源** 的(Apache 2.0 协议),支持 MCP 服务器集成,可以扩展各种功能。 + +### 缺点 + +但是问题也很明显。 + +首先是 **AI 智能体的效果一般**,对自然语言理解能力不够,会多干、干跑偏、干错。而且速度比较慢,简单的问题也要等很久。 + +其次是 **交互体验不够好**。终端的交互体验确实是不如网页和客户端的,很难看到思考过程,界面展示和交互效果也就那样。文件选择器经常卡顿,选择文件很不方便。 + +还有就是 **使用门槛比较高**。非程序员使用它的门槛还是比较高的,需要熟悉终端操作。而且有些功能需要额外配置,比如 Google Cloud Project。 + +### 适合什么人? + +利用 AI 来生成一下终端命令我觉得很棒(比如 Warp AI),但如果你非要在这个框里使用 AI 来生成内容,我觉得大可不必吧。 + +Gemini CLI 可能对擅长 Linux 服务器操作的技术大佬还有点用,但是在公司服务器上用这个还是要注意安全性。 + + + +## 写在最后 + +看到这里,相信你已经对 Gemini CLI 有了全面的了解。 + +我觉得 Gemini CLI 中规中矩吧,没有到网上铺天盖地吹嘘的那种程度。现阶段这玩意更适合尝鲜和学习,而不是作为日常提效工具来使用。 + +不过虽然现在体验一般,考虑到 Google 的技术实力、还有开源免费的发展模式,我相信随着版本迭代,这工具也会越来越好的。**而且对我们来说多一种工具的选择,总不是坏事。** + +如果你预算有限,又想尝试命令行 AI 工具,Gemini CLI 是个不错的选择。但如果你追求最好的体验,还是建议用 Claude Code。 + +大家觉得这个工具怎么样呢?欢迎评论区留言。感兴趣的同学也可以体验一下,看看是不是和我的感受相同,还是说有一些正确的使用方式 +和技巧,也欢迎评论区分享。学编程和 AI 的同学,记得关注鱼皮哦~ + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/工具实战/OpenCode:开源免费的 AI 命令行工具实测.md b/Vibe Coding 零基础教程/10 编程工具/工具实战/OpenCode:开源免费的 AI 命令行工具实测.md new file mode 100644 index 0000000..877defe --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/工具实战/OpenCode:开源免费的 AI 命令行工具实测.md @@ -0,0 +1,446 @@ +# OpenCode:开源免费的 AI 命令行工具实测 + +大家好,我是程序员鱼皮。 + +Claude Code 一直是大家公认的 AI 编程命令行工具 Top 1,在 AI 和程序员圈子里几乎是神一般的存在。 + +![](https://pic.yupi.icu/1/happy-new-year-claude-coders-v0-o2quvbl99lag1.png) + +但是,这狗玩意儿对中国用户可不太友好…… + +首先,如果你想要使用 Claude Code,就必须要有特殊的网络 + 官方账号,否则就会看到一片红。 + +![](https://pic.yupi.icu/1/cannotuseclaude.png) + +此外,2025 年 9 月,Anthropic 公司不知道抽什么风,突然宣布 **全面禁止中国控股企业使用 Claude 服务**,不仅包括中国大陆企业,连海外中资控股超过 50% 的公司都在封禁范围内! + +甚至 Anthropic 还特别点名了中国,把咱们称为 **敌对国家**! + +![](https://pic.yupi.icu/1/image-20250905164631315.png) + +天下苦 Claude Code 久矣! + +但是最近我身边很多程序员朋友开始从 Claude Code 转向了另一个工具,正是突然大火的开源项目 OpenCode。 + +![](https://pic.yupi.icu/1/image-20260107174223010.png) + +这玩意只用了半年的时间,就在 GitHub 上涨到了 5.2w Star! + +这是个什么概念?比我在 GitHub 上开源的几十个项目的总和加起来都多!慕了慕了…… + +![](https://pic.yupi.icu/1/opencodestarhistory.png) + +OpenCode 到底是什么?凭什么这么火? + + + +## 啥是 OpenCode? + +[OpenCode](https://opencode.ai/) 是一款 100% 开源的 AI 编程命令行工具,可以在 **终端、IDE、甚至桌面应用** 中使用。 + +![](https://pic.yupi.icu/1/screenshot.png) + +你可能会问:这玩意儿跟 Claude Code 有啥区别? + +试试不就知道了? + +接下来我带大家实操一下,从零开始安装、配置、到实际写代码,一条龙服务~ + + + +## 从 0 开始上手 OpenCode + +### 1、安装运行 OpenCode + +直接进入 OpenCode 官网,复制一行命令: + +![](https://pic.yupi.icu/1/image-20260107174407894.png) + +命令如下: + +```bash +curl -fsSL https://opencode.ai/install | bash +``` + +然后在终端中执行,就可以完成安装了。 + +安装完成之后,输入 `opencode` 进入程序,接下来你就可以愉快地使用了~ + +![](https://pic.yupi.icu/1/image-20260107174646918.png) + +先来个经典的 Hello World,AI 成功给出了回复。 + +![](https://pic.yupi.icu/1/image-20260107174755331.png) + +恭喜,到这里你已经掌握了 OpenCode 的 70% 了。 + + + +### 2、选择模式和模型 + +OpenCode 支持 2 种模式,默认是 Build 模式,用来构建应用、生成代码。 + +按一下 Tab 键,就可以切换到 Plan 模式,用于生成执行计划。 + +![](https://pic.yupi.icu/1/image-20260107174952823.png) + +按一下 `Ctrl + p` 键,可以打开命令面板,里面有几十个内置命令。我们先来试着切换一下大模型: + +![](https://pic.yupi.icu/1/image-20260107175255527.png) + +默认提供了 4 个免费模型: + +![](https://pic.yupi.icu/1/image-20260107175409282.png) + +好家伙,连智谱最新的 GLM-4.7 竟然也免费?那我的 Coding Plan 套餐不是白开了? + +![](https://pic.yupi.icu/1/image-20260107175513490.png) + +除了免费的模型外,OpenCode 支持超多的 AI 模型,你可以自由选择: + +![](https://pic.yupi.icu/1/image-20260107175614359.png) + +选中模型后,配置自己的 API Key 就好了: + +![](https://pic.yupi.icu/1/image-20260107175657296.png) + +如果你之前有 **Claude Pro/Max 订阅账号**,可以直接登录使用,无缝从 Claude Code 迁移过来。 + +![](https://pic.yupi.icu/1/image-20260107175745963.png) + + + +### 3、快捷指令 + +OpenCode 支持斜杠命令,输入 `/`,能看到很多操作,比如查看模型列表、查看 Agents、管理 MCP、切换主题等等: + +![](https://pic.yupi.icu/1/image-20260107175926346.png) + +支持几十个不同的主题,颜值都挺高的,从这点也能看出来 OpenCode 很注重用户的体验: + +![](https://pic.yupi.icu/1/image-20260107180108430.png) + +输入 `@` 可以快速关联目录文件,给 AI 添加上下文: + +![](https://pic.yupi.icu/1/image-20260107182710150.png) + + + +### 4、交互体验 + +相比于 Claude Code,OpenCode 真是把命令行的交互体验拉满了,甚至我觉得它是一个伪装成命令行的桌面应用。 + +你可以点击某条消息,然后会弹出一个消息动作框,你可以撤回消息和 AI 的回复,也可以复制、或者基于当前对话新开一个对话框。 + +![](https://pic.yupi.icu/1/image-20260107180609525.png) + +你可以通过鼠标上下滚动来切换选单,并且可以直接通过鼠标点击进入下一步。 + +你可以按 `Ctrl + p` 键打开命令面板,然后开启侧边栏: + +![](https://pic.yupi.icu/1/image-20260107181100523.png) + +然后界面就变成了这样,你管这叫命令行? + +![](https://pic.yupi.icu/1/image-20260107181218259.png) + + + +### 5、LSP 支持 + +细心的你一定看到了,右边的侧边栏有个 `LSP`,这是什么鬼东西?老色批? + +LSP(Language Server Protocol 语言服务器协议)是微软开发的一种通信协议,用于让代码编辑器和语言服务器之间进行通信。 + +简单来说,**LSP 就是让编辑器看懂代码的技术。** + +比如你在 VS Code 里写代码,输入 `console.` 它会自动提示 `log`、点击函数名能跳转到代码定义、写错代码会画红线提醒。这些代码编辑器的功能,背后都是 LSP 在干活。 + +OpenCode 支持 LSP,意味着 AI 能真正理解你的代码结构,而不是把代码当普通文字瞎猜,改起来更精准。 + +比如我让 AI 介绍我的 AI 答题平台项目中最有价值的代码,LSP 就派上用场了。它能帮 AI 快速定位某段代码在哪里被调用、引用了哪些变量,而不是让 AI 傻傻地全局搜索文本。 + +![](https://pic.yupi.icu/1/image-20260107181807464.png) + + + +### 6、回到之前的会话 + +如果你不小心关闭了 OpenCode,不用担心,可以打开命令面板,选中 “Switch session” 切换会话: + +![](https://pic.yupi.icu/1/image-20260107183241477.png) + +就能回到之前的聊天了: + +![](https://pic.yupi.icu/1/image-20260107183320692.png) + + + +## 桌面版 OpenCode + +即使 OpenCode 支持了这么多改进用户体验的交互,但我估计大多数同学还是不喜欢小黑框的。 + +没关系,OpenCode 还提供了桌面应用版本!macOS、Windows、Linux 全端支持,这是真的要卷死 Claude Code 的节奏啊…… + +> 指路:https://opencode.ai/download + +![](https://pic.yupi.icu/1/image-20260107182151987.png) + +不过当我怀着满腔热血安装并打开它时,竟然报错了! + +![](https://pic.yupi.icu/1/image-20260107183123854.png) + +经过一番排查,发现原来是我开了代理,关闭之后就正常运行了。 + +![](https://pic.yupi.icu/1/image-20260107183605119.png) + +但是用惯了 Cursor,这个交互体验真的有点敷衍了,不推荐大家使用。 + + + +## OpenCode 扩展能力 + +到目前为止,我觉得 OpenCode 在前端用户体验上全方面碾压 Claude Code,而且 OpenCode 完全兼容 Claude Code 的 Skills 系统! + +Skills 是一种给 AI 准备的能力扩展包。你可以把它理解成给新同事准备的工作交接文档,里面包含任务执行方法、工具使用说明、模板素材等。 + +比如你可以创建一个 `公司代码规范 Skill`,把代码风格、命名规则、注释要求等写进去。之后 Claude Code 生成的代码就会自动遵循这些规范,不用每次都重复说明。 + +根据官方文档,OpenCode 会自动搜索这些位置的 Skills: + +- `.opencode/skill//SKILL.md`(项目目录) +- `~/.config/opencode/skill//SKILL.md`(用户目录) +- `.claude/skills//SKILL.md`(Claude Code 兼容) +- `~/.claude/skills//SKILL.md`(Claude Code 兼容) + +也就是说,如果你之前给 Claude Code 创建过自定义 Skills,直接拿过来就能用!又是无缝迁移。 + + + +## Oh My OpenCode 开挂插件 + +如果你觉得 OpenCode 还不够强,可以试试 `Oh My OpenCode` 这个开源的 OpenCode 增强插件,已经 1w Star 了。 + +> 项目地址:https://github.com/code-yeongyu/oh-my-opencode + +![](https://pic.yupi.icu/1/image-20260107184457429.png) + +这个插件有多牛?看看用户评价: + +> "It made me cancel my Cursor subscription."(它让我取消了 Cursor 订阅) +> +> "Knocked out 8000 eslint warnings with Oh My Opencode, just in a day"(一天内用它解决了 8000 个 eslint 警告) + + + +Oh My OpenCode 的核心功能是引入了一个叫 **Sisyphus** 的智能体编排系统。 + +我特地去搜了一下: + +> 西西弗斯(Sisyphus)是古希腊神话中一位因欺骗众神、挑战权威而被诸神惩罚的国王,他的惩罚是永无止境地将一块巨石推上山顶,而石头一到山顶便会滚落,如此周而复始,象征着徒劳无功、永无休止的任务,也代表着一种对荒诞命运的抗争精神。 + +这个系统可以: + +1. 并行调度多个 AI 模型:比如让 GPT debug 的同时让 Gemini 写前端 +2. 自动任务管理:不完成任务不让停,像西西弗斯推石头一样锲而不舍 +3. 智能代码审查:自动检测并清理 AI 生成的冗余注释 +4. LSP 深度集成:提供重命名、跳转定义等 IDE 级功能 + +简单来说,Sisyphus 就是一个 AI 监工,它能同时指挥多个 AI 模型干活,还会盯着它们把任务做完。 + +![](https://pic.yupi.icu/1/omo.png) + +虽然官方说用一行命令就能完成安装,但我建议你先安装 bun,再执行 npx 来安装,否则可能会报错。 + +```bash +npm install bun -g +npx oh-my-opencode install +``` + +安装过程中,可能会问你有没有某些模型的订阅,我反正啥都没有,一直选 "No" 就行了: + +![](https://pic.yupi.icu/1/image-20260107185251337.png) + +安装完成后,再次进入 OpenCode,之后只需要在你的提示词里加上 `ultrawork`(或 `ulw`)这个开挂咒语,就能激活全部增强功能。自动调度多个 AI 模型同时工作、深度探索代码库、锲而不舍地执行。 + +下面我们试试看,正好来验证一下 OpenCode 做项目的能力如何?能不能把 Claude Code 一脚踹飞? + + + +## 实战项目 - 用 OpenCode 做个 AI 健康助手 + +最近蚂蚁集团的 `蚂蚁阿福` AI 健康助手火了,地铁口、公司楼下的电视广告中随处可见何炅老师的身影。 + +![](https://pic.yupi.icu/1/mayiafuad.jpeg) + +虽然我还没有用过它,但是听说它可以通过拍皮肤、拍报告提供 AI 初诊,还能智能回答医学科普和治疗建议。 + +那我们也来做个类似的健康小助手网站吧! + +前有蚂蚁阿福,今有鱼皮阿坤。 + +![](https://pic.yupi.icu/1/image-20260107194117758.png) + +先分析一下,我们要做的是包含前端 + 后端的全栈项目,而且后端还需要调用 AI 大模型来生成内容。 + +这里我选择用 **Vercel AI Gateway** 来实现 AI 能力,这是一款简单易用的 AI 网关。 + +![](https://pic.yupi.icu/1/1760687990497-90720fbb-0df6-4ede-87b8-64b8702994e9-20251028181254840.png) + +什么是 AI 网关? + +简单来说,它就像是火车站的检票口,你的应用发来的请求先经过网关,网关帮你处理认证、限流、监控等一系列复杂的操作,然后把请求转发给 AI 大模型。 + +![](https://pic.yupi.icu/1/1761645642401-683e786e-3e06-420a-abce-cd43f7bfa901.png) + +而且 Vercel AI Gateway 支持对接 500 多个大模型,还有免费额度,非常适合学习和小项目。 + +> 指路:https://vercel.com/ai-gateway + + + +1)首先你需要注册登录 Vercel,然后在控制台创建 API Key,注意不要泄露哦: + +![](https://pic.yupi.icu/1/1760688078133-7b91b6f3-2fc4-4bb4-b2c1-d517699f0968-20251028181254879.png) + + + +2)启动 OpenCode,切换模型到编程能力很强、并且免费的 GLM-4.7,然后输入这段提示词: + +```markdown +你是一位专业的程序员,请帮我开发《每日健康小助手》网站,用户可以通过和 AI 聊天来记录和管理每日健康状态。 + +## 开发要求 + +1. 需要包含完整的前端和后端,后端使用 Node.js +2. 使用 Vercel 的 AI Gateway 实现 AI 能力,需要先通过官方文档来获取用法:https://vercel.com/docs/ai-gateway/getting-started +3. 以完成核心功能为目标,确保项目可以正常运行 +4. 整体网站界面采用清新的绿色健康风格,响应式适配各种尺寸的设备 +5. AI 需要主动询问用户的健康状况,比如睡眠、运动、饮食等 +``` + +点击发送后,OpenCode 会自动使用网页抓取工具读取 Vercel AI Gateway 的官方文档,学习最新的用法: + +![](https://pic.yupi.icu/1/image-20260107190151933.png) + +大概 5 分钟左右,AI 就完成了全部代码的生成,并且自动安装了依赖。 + +![](https://pic.yupi.icu/1/image-20260107190629349.png) + + + +3)我直接把之前拿到的 Vercel 的 API Key 提供给 AI,让它帮我启动项目: + +![](https://pic.yupi.icu/1/image-20260107190751628.png) + + + +4)启动项目成功后,打开浏览器访问 `localhost:3000`,测试一下效果。 + +结果报错了!无法调用 AI。 + +![](https://pic.yupi.icu/1/image-20260107191838608.png) + + + +可能是 AI 对 Vercel AI Gateway 文档的理解不到位,导致写错了调用 AI 的代码。于是我再次把文档输入给 AI,让它再战一次: + +![](https://pic.yupi.icu/1/image-20260107191719979.png) + +结果又报错了,明明我已经给 AI 提供了 API Key,系统还是报错 “缺少 API Key”。 + +于是我又调了一次 AI,告诉它 “这个 key 我之前已经提供给你了”。 + +![](https://pic.yupi.icu/1/image-20260107192718301.png) + +经过大概 5 次左右的报错和修复,仍然不能正常使用!我麻了啊…… + +![](https://pic.yupi.icu/1/image-20260107193542108.png) + +于是,我有一个鬼点子:既然要跟 Claude Code 比较,那我不妨尝试用 Claude Code 修复这个 OpenCode 解决不了的问题? + +![](https://pic.yupi.icu/1/image-20260107193829543.png) + +试试看!输入提示词: + +```markdown +现在项目后端 AI 功能不可用 +请参考 https://vercel.com/docs/ai-gateway/getting-started 文档 +帮我修复后端,确保项目能正常运行 +``` + +![](https://pic.yupi.icu/1/image-20260107193701784.png) + +Claude Code 成功修复了问题,终于能够正常使用了: + +![](https://pic.yupi.icu/1/image-20260107194915666.png) + +💡 注意,如果你遇到了调用 AI 网络超时的问题,可以让 AI 把调用的 baseURL 改为 https://ai-gateway.vercel.sh/v1 + +之前类似的任务我用 Claude Code / Cursor + GLM,不到 10 分钟就搞定了。这次竟然花了 20 分钟左右,还要经过来回拉扯,才能正常使用。 + +这让我不得不怀疑 OpenCode 的能力了。而且感觉 GLM 大模型在 OpenCode 中好像变笨了,不知道是不是我的错觉…… + +不行,大家把 OpenCode 吹得这么牛批,我得再试试,一定是我用法的问题! + +![](https://pic.yupi.icu/1/image-20260107195050357.png) + +### Ultrawork 模式 + +还记得前面提到的 `ultrawork`(或 `ulw`)开挂咒语么?搞起! + +![](https://pic.yupi.icu/1/image-20260107195327425.png) + +进入战斗状态了: + +![](https://pic.yupi.icu/1/image-20260107195346575.png) + +可以查看子代理运行详情,先按 `Ctrl + x` 键,再按方向键来查看不同的代理。 + +而且当后台任务完成时,会有一个提示。可以看到 “研究 Vercel AI SDK 对话模式” 的任务已经完成。 + +![](https://pic.yupi.icu/1/image-20260107195605772.png) + +不过你猜怎么着?我等了将近 10 分钟,任务还没结束…… + +看看这个任务列表,需要这么复杂吗?连数据库都给我干出来了? + +![=](https://pic.yupi.icu/1/image-20260107200237753.png) + +我已经没耐心等下去了,毁灭吧! + +看来这种不算太复杂的工作并不能发挥出多代理的优势。就像你只是要打印一张纸,没必要发动全公司的人,有的研究打印的纸张类型、有的研究打印机的状态、有的研究怎么打印姿势更优雅。 + + + +## 最后 + +经过上述简单的测试,我暂时对 OpenCode 保持观望状态。 + +前端做的确实很不错,但后端的能力感觉跟 Claude Code 还有差距。 + +如果只是追求前端使用方便,那我为什么不用 Cursor? + +![](https://pic.yupi.icu/1/image-20260107200720088.png) + +不过 OpenCode 的成功说明了一个道理:**谁离用户近、谁能发现痛点,谁就有超越巨头的机会。** + +Claude Code 确实很强,但它对中国用户的封禁,给了开源社区一个绝佳的机会。OpenCode 抓住了这个痛点,用更开放的方式赢得了用户的心。 + +虽然效果有待提高,但毕竟 OpenCode 完全开源免费,对于喜欢折腾的程序员来说,可定制性更强。你甚至可以 fork 一份自己魔改,想怎么玩就怎么玩。 + +OK,就聊到这里。你用过 OpenCode 吗?欢迎评论区聊聊你的体验~ + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/10 编程工具/工具实战/TRAE SOLO:AI 主导的全栈开发工具.md b/Vibe Coding 零基础教程/10 编程工具/工具实战/TRAE SOLO:AI 主导的全栈开发工具.md new file mode 100644 index 0000000..a2f5991 --- /dev/null +++ b/Vibe Coding 零基础教程/10 编程工具/工具实战/TRAE SOLO:AI 主导的全栈开发工具.md @@ -0,0 +1,466 @@ +# TRAE SOLO:AI 主导的全栈开发工具 + +你好,我是鱼皮。 + +在前面的文章中,我们学习了各种 AI 编程工具。无论是 Cursor 还是 Claude Code,都是 **人类主导 + AI 辅助** 的模式,你需要不断地和 AI 对话、确认、修改。 + +但如果你想让 AI 更主动一些,自己规划任务、自动执行开发,该用什么工具呢? + +这篇文章,我会介绍 TRAE SOLO,一个让 AI 主导开发任务的全栈开发工具。 + + + +## 一、什么是 TRAE SOLO? + +[TRAE](https://www.trae.ai/) 是字节跳动推出的 AI 原生编程工具,有 2 种开发模式: + +- IDE 模式:类似 Cursor,保留传统开发流程,人类主导 +- SOLO 模式:让 AI 主导,自动推进开发任务 + +所谓 SOLO 模式,是让 **AI 主导任务并自动执行开发**。你只需要有一个想法,然后配合 AI 就能让想法真正落地。 + +![](https://pic.yupi.icu/1/image-20250928220322788.png) + +TRAE SOLO 和 Cursor 的区别是什么? + +打个比方,用 Cursor 就像你是项目经理,AI 是程序员,你需要不断地给 AI 分配任务、检查成果、提出修改意见。而用 TRAE SOLO,AI 就是项目经理 + 程序员,你只需要告诉它目标,它会自己规划、自己开发、自己测试。 + +根据 2026 年的最新评测,TRAE 在 AI 编程软件中表现优异,特别是它的可自定义智能体系统,允许用户像组建团队一样,根据项目需求定义和配置不同角色、技能的 AI 智能体。 + + + +## 二、TRAE SOLO 的核心功能 + +### 1、自动生成文档 + +TRAE SOLO 会根据你的需求,自动生成: + +- 产品需求文档(PRD) +- 技术架构文档 +- 接口文档 +- 测试报告 + +这些文档符合企业规范的开发流程,非常专业。 + + + +### 2、服务集成能力 + +TRAE 提供了强大的集成能力,可以傻瓜式接入各种服务: + +- Supabase:数据库存储和用户认证 +- Stripe:支付功能 +- OpenRouter:AI 服务 +- Figma:设计原型 + +不用看官方文档,直接在 TRAE 中点几下就能完成集成。 + +![](https://pic.yupi.icu/1/image-20250928222329915.png) + + + +### 3、多任务并行 + +TRAE SOLO 支持多任务并行执行,可以同时开发前端和后端,大大提高效率。 + + + +### 4、代码变更工具 + +TRAE 提供了 DiffView 代码变更工具,可以清晰地看到每次修改了哪些代码,方便审查和回退。 + + + +### 5、Plan 模式 + +除了直接执行,TRAE 还支持 Plan 模式。AI 会先生成详细的执行计划,你确认后再执行。这样可以更好地控制开发过程。 + + + +## 三、怎么使用 TRAE SOLO? + +让我用一个实际例子来演示 TRAE SOLO 的使用流程。 + +⭐️ 推荐直接看鱼皮的视频教程,讲解更详细:https://www.bilibili.com/video/BV1yMn3zuE7L + + + +### 准备工作 + +首先需要准备开发工具: + +- 下载安装 [TRAE](https://www.trae.ai/) +- 安装 [Node.js 环境](https://nodejs.org/zh-cn/download) +- 如果要开发小程序,还需要 [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) + +![](https://pic.yupi.icu/1/%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7%E6%8B%BC%E5%9B%BE.png) + + + +### 1、需求分析 + +准备好工具后,进入 TRAE 的 SOLO 模式,打开一个空白的项目文件夹。 + +![](https://pic.yupi.icu/1/image-20250928220647365.png) + +首先我们要进行需求分析。别想的太复杂,只需要把自己的想法用自然语言告诉 AI 就好。 + +比如我给 AI 提了这样的需求: + +``` +你是一位专业的程序员,请帮我开发《学习英雄 - AI 问答引导式学习》微信小程序。 + +用户可以自主设置一个想学习(或测验)的主题,由 AI 围绕主题生成若干个有趣的知识问答卡片,通过闯关答题的形式引导用户更轻松愉快地掌握知识。 +``` + +![](https://pic.yupi.icu/1/image-20250928221154635.png) + +AI 很快生成了详细的产品需求文档和技术架构文档,很符合企业规范的开发流程。 + +![](https://pic.yupi.icu/1/image-20250928221128338.png) + +看得出来 AI 已经有些迫不及待想写代码了,但是千万别急,一定要先 **仔细确认需求文档**。 + +AI 写的还是不错的,但不一定完全符合我们的预期。因此我们要人工重点关注要实现的核心功能,移除掉不需要的附加功能,先确保核心业务流程(P0 级需求)跑通。 + +![](https://pic.yupi.icu/1/image-20250928221334652.png) + +**不要嫌这一步麻烦,现在多花 1 分钟,以后节约 1 小时!** 一定要明确需求,防止 AI 做了不该做的功能。 + +这里有个小技巧,可以利用 TRAE 集成的 Figma 设计工具,在这里获取到一些免费的产品 UI 原型图。 + +![](https://pic.yupi.icu/1/image-20250928221519374.png) + +可以点击查看某个原型具体的设计,只需要选中你看上的原型图,点击添加到对话,TRAE 就会自动把原型图关联到发给 AI 的对话中。 + +![](https://pic.yupi.icu/1/image-20250928221618668.png) + + + +### 2、方案设计 + +下面我们要进行方案设计,这以前是月薪几万的架构师干的活,现在让小 AI 帮我们 SOLO。 + +编写这段 Prompt 时一定要注意几个细节,**遵循最小化开发原则**,防止 AI 把简单的事情搞复杂。 + +``` +我已经人工调整了产品需求文档,移除了很多不必要的功能。请你根据我人工修改过的需求,重新生成技术架构文档。要求: +1. 禁止增加需求文档中没有提到的功能 +2. 遵循最小化开发原则,以实现功能为主,禁止提供实现功能之外的扩展,比如部署、监控、限流等 +3. 遵循前后端分离原则 +``` + +很快 AI 生成了完整的技术架构文档,包括用什么前端和后端技术、接口怎么设计、数据表怎么设计等等。 + +![](https://pic.yupi.icu/1/image-20250928221924096.png) + +这里我建议能看懂文档的同学还是多发挥一些专业性,明确具体的技术选型,让 AI 生成的代码在自己的可控范围内。比如我明确项目使用 Supabase 数据库、使用 OpenRouter 对接 Gemini 大模型提供 AI 服务。 + +![](https://pic.yupi.icu/1/image-20250928221952548.png) + +看不懂文档的同学也不用担心,你就把自己想象成老板或者产品经理,程序员同事吭哧吭哧拿了份技术方案给你,你就说 "怎么实现我不管,这个需求明天上线!" 让他放手干就完了。 + +你要相信 AI,相信相信的力量。 + + + +### 3、服务集成 + +完成了方案设计,在正式进入开发前,我们还要准备项目依赖的服务。 + +把用户数据存储在哪里?怎么让程序对接 AI 大模型?这都是我们要解决的问题。 + +相比于自己手动安装服务,可以直接使用 TRAE 提供的集成能力,不用专门去看官方文档对接服务,直接傻瓜式安装。 + +![](https://pic.yupi.icu/1/image-20250928222329915.png) + +#### 集成 Supabase + +[Supabase](https://supabase.com/) 是开源的后端即服务(BaaS)平台,提供数据库存储、用户身份验证、即时 API 等功能。 + +![](https://pic.yupi.icu/1/image-20250928222457606.png) + +点击连接按钮,在弹出的页面中完成创建 Supabase 账号、创建组织、以及认证授权。 + +![](https://pic.yupi.icu/1/image-20250928222520491.png) + +然后进入到 TRAE,看到组织成功显示后,点击创建一个新项目,填写一些项目配置信息,然后点击创建。 + +![](https://pic.yupi.icu/1/image-20250928222545479.png) + +创建项目后回到 TRAE 刷新一下,点击连接就可以了,就这么简单。 + +![](https://pic.yupi.icu/1/image-20250928222608471.png) + +如果说之前 AI Vibe Coding 让后端开发者爽翻了,那这波可以说是前端开发者赢麻了,简单的项目都不用自己搭建后端了。 + + + +#### 集成 OpenRouter AI 服务 + +TRAE 能够和多种 AI 服务集成,这里我选择 [OpenRouter](https://openrouter.ai/),它的优点是可以通过统一的 API 对接各家大模型,比如 Gemini、GPT、Claude 等等。 + +![](https://pic.yupi.icu/1/image-20250928222649319.png) + +首先到官网注册登录账号,然后进入 API Keys 页面创建一个调用 AI 的密钥,然后在 TRAE 中配置并填写密钥,AI 服务就已经集成完毕了。 + +![](https://pic.yupi.icu/1/image-20250928222833273.png) + +但是注意,要确保你有足够的用量,否则可能调用失败,或者报错调用频率太频繁。 + +![](https://pic.yupi.icu/1/image-20250928222853247.png) + + + +### 4、后端开发 + +准备工作完成后,我们终于要进入紧张刺激的开发环节了。 + +这里要注意,由于 **AI 的上下文是有限的**,为了能更好地生成完整项目、减少 Bug,建议分个步骤:先生成后端代码,人工校验通过后,再生成前端代码。 + +给 AI 输入提示词,先开发后端,确保项目可以正常运行: + +``` +请你基于最新的产品需求文档和技术架构文档进行开发,优先开发后端,确保项目可以正常运行 +``` + +我们可以使用 TRAE 提供的 Prompt 优化功能来一键优化提示词。 + +![](https://pic.yupi.icu/1/%E4%BC%98%E5%8C%96%E6%8F%90%E7%A4%BA%E8%AF%8D.png) + +点击执行,请开始你的 SOLO。AI 会先给出任务计划: + +![](https://pic.yupi.icu/1/image-20250928224232897.png) + +然后自主操作终端执行命令、编写后端配置文件和业务逻辑代码、编写数据库建表语句等等,重要操作还会找我们主动确认,非常严谨。 + +![](https://pic.yupi.icu/1/image-20250928224300188.png) + +看不懂也没关系,让它放手干吧。 + +等待期间,你可以到 [编程导航](https://codefather.cn/) 上看看免费的编程学习路线。TRAE 自带消息通知功能,AI 完成任务后会提醒我们。 + +我感觉 TRAE 调教 AI 还是有一套的,它会自己验证程序是否正常。 + +![](https://pic.yupi.icu/1/image-20250928224350332.png) + +一段时间后,AI 生成完毕,不仅生成了代码,还很贴心地生成了后端的接口文档。 + +![](https://pic.yupi.icu/1/image-20250928224437599.png) + + + +### 5、前端开发 + +下面进行前端开发。 + +这里一定要注意,不要接着之前的对话继续写提示词了。 + +为什么呢?因为 AI 大模型的上下文是有限的,前面的操作已经消耗了不少上下文。为了防止 AI 上下文不足或者记忆混乱,我们生成前端时,重新开一个干净的对话来编写提示词。 + +![](https://pic.yupi.icu/1/image-20250928224735250.png) + +提示词中提供给 AI 产品需求文档、技术架构文档和后端接口文档,就可以让 AI 专注于前端代码生成。 + +``` +你是一位专业的程序员,请帮我开发《学习英雄 - AI 问答引导式学习》微信小程序。 + +用户可以自主设置一个想学习(或测验)的主题,由 AI 围绕主题生成若干个有趣的知识问答卡片,通过闯关答题的形式引导用户更轻松愉快地掌握知识。 + +请你根据 @产品需求文档 @技术架构文档 @后端接口文档,帮我生成完整可运行的微信小程序前端代码。 +注意: +1. 遵循最小功能原则,不要额外开发需求文档没提到的任何功能 +2. 如果需要显示图片,请使用占位图片 picsum.photos 代替(比如 picsum.photos/200/300) +``` + +好,执行! + +等待期间,你可以到 [面试鸭](https://www.mianshiya.com/) 上看看免费的面试题和刷题路线。 + +一段时间后,AI 生成完毕,一次性 SOLO 出了 20 多个文件! + +![](https://pic.yupi.icu/1/image-20250928224830751.png) + +虽然看着很爽,但老实说我是有点慌的,不知道能不能正常运行。 + + + +### 6、测试验证 + +下面我们来到了激动人心的测试验证环节。 + +首先需要打开微信开发者工具,导入已有项目文件夹,先选择使用测试号开发调试项目。 + +![](https://pic.yupi.icu/1/image-20250928225118198.png) + +打开项目后,我们先点击右上角的 "测试号",按照 [文档](https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.html) 的指引获取到测试号的 AppID 和 AppSecret 密钥: + +![](https://pic.yupi.icu/1/image-20250928225220066.png) + +然后手动填入到后端配置文件中,否则将无法正常微信登录。 + +![](https://pic.yupi.icu/1/image-20250928225304614.png) + +然后我们就可以编译运行项目了。 + +结果,果然报错了! + +![](https://pic.yupi.icu/1/image-20250928225522618.png) + +意料之中,意料之中。小程序开发比网页开发还是更难一些的,毕竟微信开发者工具和文档一直在更新。 + +![](https://pic.yupi.icu/1/image-20250928225618743.png) + +不过没关系,开发过程中难免遇到问题。解决方法很简单,一句话:**报什么错误,就把报错信息发给 AI,让 AI 来修复!** + +像我这里遇到了几个典型的问题: + +1)图片路径问题:利用 TRAE 的提示词优化功能,能更好地指引 AI 按照指定的步骤修复 Bug + +![](https://pic.yupi.icu/1/image-20250928225717687.png) + +2)登录失败问题:点击开发者工具右上角的 “详情”,进入到本地设置中,勾选 “不校验合法域名” + +![](https://pic.yupi.icu/1/image-20250928225825654.png) + +3)接口路径问题:这可能是由于上下文过长导致的,让 AI 整体修复前端调用后端接口的路径和参数就好 + +![](https://pic.yupi.icu/1/image-20250928225903118.png) + +4)环境配置问题:代码中读取的环境变量名称和配置文件中的不一致,这个问题比较简单,我们可以手动修改。 + +当我敲了一个字符后,编辑器会自动提示我要修改哪些代码,还支持跨行修改。 + +![](https://pic.yupi.icu/1/image-20250928225955681.png) + +这是 TRAE 提供的 **CUE 功能**,不仅可以帮你自动补全代码、还可以多行修改代码、自动预测未来可能的修改点,尤其适合重构代码的场景,效率起飞。 + +![](https://pic.yupi.icu/1/%E5%A4%9A%E8%A1%8C%E4%BF%AE%E6%94%B9.gif) + +经过一段时间的修复,我们的小程序已经可以正常运行了。虽然现在页面丑丑的,但只要跑通了核心业务流程,用户能正常使用,后续的优化都很简单了。 + +![](https://pic.yupi.icu/1/image-20250928230045861.png) + + + +### 7、持续优化 + +最后,如果你要把小程序上线,还是要花一些时间来优化的。 + +记住,优化前先把现有代码利用 Git 版本控制工具进行托管,并且提交一个基础版本。这样之后优化出了任何问题,都可以一键回滚到老版本。 + +![](https://pic.yupi.icu/1/image-20250928230154447.png) + +像我重点让 AI 帮忙优化了整个小程序的样式风格,只要写一段简单的提示词: + +``` +你是一位程序员,请你帮我优化整个小程序中每个前端页面和元素的样式风格,使各个页面保持一致。 + +参考风格:主色调采用活力橙色,清新治愈的卡通风格、简约雅致、让人感到放松愉快。 +``` + +然后利用 TRAE 的提示词优化功能,就能得到一个更详细的优化方案。 + +![](https://pic.yupi.icu/1/image-20250928230225960.png) + +你可以按需调整,也可以让 AI 放手干。 + +建议大家每进行一次优化或新增一个功能,都提交一次代码,并且适当地新开 AI 对话框,防止上下文过多影响生成的准确度。 + +最终,你看到的这个小程序,就是我优化后的成品,效果还不错吧。 + +![](https://pic.yupi.icu/1/image-20250928230316272.png) + + + +## 四、TRAE SOLO 的优缺点 + +TRAE SOLO 的优势很明显。 + +首先是 **AI 主导开发**,你不需要不断地和 AI 对话,AI 会自己规划任务、自动执行。而且 **服务集成能力强**,可以傻瓜式接入 Supabase、Stripe 等服务,不用看文档。 + +还有就是 **文档自动生成**,符合企业规范的开发流程,生成的文档很专业。而且 **国内版访问速度快**,对中文用户友好。 + +当然也有一些局限。 + +首先是 **需要一定的引导**,虽然 AI 能自主执行,但你的需求描述越清晰,AI 的执行效果就越好。而且 **生成的代码可能有 Bug**,需要人工测试和修复。 + +另外,**上下文管理很重要**。如果对话太长,AI 可能会记忆混乱,需要适时新开对话。 + +价格上,TRAE 有免费版和付费版。免费版有使用限制,付费版根据使用量计费。 + + + +## 五、TRAE SOLO 实战建议 + +如果你想尝试 TRAE SOLO,我有几个建议: + +1、明确需求 + +虽然 AI 能自主规划,但你的需求越明确,AI 的执行效果就越好。建议: + +- 清楚说明核心功能 +- 移除不必要的功能 +- 提供参考设计(如果有的话) +- 明确技术选型(如果你懂的话) + + + +2、分步骤开发 + +不要一次性让 AI 生成整个项目,而是分步骤: + +- 先生成后端,测试通过 +- 再生成前端,测试通过 +- 最后优化样式和细节 + +每完成一步,都提交一次代码,这样出问题也能回退。 + + + +3、及时修复 Bug + +AI 生成的代码可能有 Bug,这很正常。发现问题就立刻让 AI 修复,不要等到最后问题越堆越多。 + +把报错信息完整地发给 AI,它一般都能修复。 + + + +4、控制上下文 + +对话太长会影响 AI 的准确度。建议: + +- 完成一个大功能后,新开对话 +- 在新对话中引用之前生成的文档 +- 避免在一个对话中做太多事情 + + + +## 写在最后 + +看到这里,相信你已经对 TRAE SOLO 有了全面的了解。 + +**TRAE SOLO 是 AI 编程工具的一次重要进化**,从 “将 AI 集成到工具中”,进化为 “将开发工具集成到 AI 中”。 + +![](https://pic.yupi.icu/1/image-20250928220158367.png) + +感觉开发工具只是 AI 的一个玩物,它可以自由地操作编辑器、终端、浏览器、文档、集成服务等等来自主完成任务,确实比以前更高效智能了,也能完成包含后端的完整项目。 + +但是开发过程中大家要注意,现在 **AI 很喜欢把简单的事情搞复杂**,所以最好人工仔细确认需求文档和方案文档,并且像搭积木一样,一步一步地完成开发。 + +快试试用 TRAE SOLO 做一个小项目,体验一下 AI 主导开发的感觉吧~ 🛫 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/00 Vibe Coding 项目实战导读.md b/Vibe Coding 零基础教程/20 项目实战/00 Vibe Coding 项目实战导读.md new file mode 100644 index 0000000..3b631f2 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/00 Vibe Coding 项目实战导读.md @@ -0,0 +1,114 @@ +# Vibe Coding 项目实战导读 + +> 从 0 到 1 构建真实项目 + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +如果你已经看完了【基础必读】的内容,并且成功做出了第一个网页应用,那么恭喜你 —— 你已经迈出了 Vibe Coding 最关键的一步! + +但我猜,你现在心里可能会有这样的疑问: + +“做出一个简单的待办事项应用确实挺有成就感的,但这离真正能用的产品还差得远吧?” + +“我想做一个更复杂的项目,但不知道从哪里开始......” + +“看着别人做出来的那些酷炫的 AI 应用,我也想试试,但感觉无从下手。” + +别担心,这些想法都很正常。这个板块就是专门为了解决这些问题而设计的。 + + + +## 一、为什么要做项目? + +在回答 “怎么做项目” 之前,我想先和你聊聊 “为什么要做项目”。 + +很多同学学完基础教程后,就开始疯狂学各种工具、各种技术,但始终没有做出一个完整的项目。结果就是:学了很多,但感觉什么都不会。 + +**做项目,是检验学习成果的唯一标准。** + +更重要的是,在 Vibe Coding 时代,做项目的门槛已经低到了前所未有的程度。你不需要精通所有技术细节,只需要: + +1. 知道自己想做什么 +2. 能够清楚地表达需求 +3. 会用 AI 工具来实现 + +这三点,你在【基础必读】中都已经学会了。现在,是时候把这些能力应用到更有挑战性的项目中了。 + + + +## 二、这个板块会讲什么? + +这个板块的核心内容包括 **项目开发的完整流程** 和 **各种类型的项目实战**。 + +首先,我会介绍一套经过验证的标准开发流程,从想法需求到最终实现,让你的项目开发更加有条理。这是做好项目的基础,强烈建议先学习这部分。 + +然后,我会带你实战各种类型的项目。从简单的个人工具开始,比如作品集网站、待办事项应用、Markdown 笔记应用等,这些项目实用性强,适合新手入门。接着是热门的 AI 应用,包括聊天助手、写作助手、图片生成器等,让你掌握 AI 应用开发的核心技能。再往后是更复杂的全栈应用,比如博客系统、问答社区、在线商城等,学习如何处理前后端和数据库。还有微信小程序的开发,从开发到上线的完整流程。 + +项目做完了,还要学会如何部署上线。我会教你多种部署方式,从最新的 AI 自动部署,到最流行的 Vercel 一键部署,再到专业的服务器部署,让你的项目能够被全世界访问。 + +最后,如果你不知道做什么项目,我还准备了 100 个项目创意供你参考,总有一个适合你。 + +此外,这个板块还包含一些扩展内容,比如企业项目开发流程、更多企业级 AI 项目介绍,以及鱼皮的原创项目实战教程等,可以根据需要选择性学习。 + + + +## 三、如何使用这个板块? + +这个板块的文章不需要全部学完,你可以根据自己的情况灵活选择。 + +如果你是完全新手,我建议先学习《Vibe Coding 项目开发流程》,了解项目开发的基本方法。然后从个人工具开发开始实践,选择一个简单的项目动手做。这样循序渐进,不会感到太难。 + +如果你对某个领域特别感兴趣,也可以直接跳到对应的章节。比如你对 AI 应用感兴趣,可以直接学习 AI 应用开发;你想做小程序,可以直接看小程序开发的内容。每篇文章都是相对独立的,不看前面的内容也能理解。 + +如果你不知道做什么项目,可以先看看项目灵感大全,里面有 100 个项目创意,总有一个能激发你的兴趣。 + +对于想深入学习的同学,可以在完成基础项目后,继续学习《企业项目开发流程》,了解真实的商业项目是如何开发的。或者学习 [鱼皮的原创项目](https://www.codefather.cn/post/1797431216467001345),跟着完整的视频和图文教程做出完整的企业级项目。 + + + +## 四、学完这个板块,你能收获什么? + +通过这个板块的学习和实践,你将能够: + +1. 掌握一套完整的项目开发流程 +2. 独立完成从想法到产品的全过程 +3. 积累至少 2 ~ 3 个可以展示的作品 +4. 理解如何用 AI 解决实际问题 +5. 建立做项目的信心和方法论 + +更重要的是,你会发现:**原来做项目可以这么简单、这么有趣!** + + + +## 写在最后 + +我知道,看到 “项目实战” 这几个字,很多同学会觉得有点紧张。但相信我,在 Vibe Coding 的帮助下,做项目真的没有你想象的那么难。 + +还记得我在【基础必读】中说过的吗?2025 年的今天,是人类历史上学习编程最容易的时刻。而做项目,也是如此。 + +你不需要成为技术专家,不需要记住所有的代码语法,你只需要: + +- 有一个想做的东西 +- 能够清楚地表达你的需求 +- 愿意花时间去尝试和迭代 + +这三点,你都已经具备了。 + +所以,准备好了吗?让我们一起开始这段激动人心的项目实战之旅吧! + +加油,你一定可以的!💪 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/01 Vibe Coding 项目开发流程.md b/Vibe Coding 零基础教程/20 项目实战/01 Vibe Coding 项目开发流程.md new file mode 100644 index 0000000..f032832 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/01 Vibe Coding 项目开发流程.md @@ -0,0 +1,686 @@ +# Vibe Coding 项目开发流程 + +> 从想法到产品的完整 Vibe Coding 工作流 + + + +你好,我是鱼皮。 + +在快速上手阶段,我们已经做过一个简单的网页应用了。那个项目很简单,直接和 AI 对话就能做出来。但现在,让我们来解决一个更实际的问题:如果要做一个完整的、商业级的项目,应该怎么做? + +很多同学刚开始用 AI 做项目时,都会犯同一个错误:打开 AI 编程工具后,直接就开始和 AI 聊天,让它生成代码。对于小项目来说,这样做是没问题的。但如果你想做一个完整的商业级项目,这样就会出问题。一开始可能还挺顺利,但很快就会发现 AI 生成的代码越来越乱,完全不是自己想要的。改来改去、左右脑互搏,最后不得不推倒重来,浪费了大量时间。 + +这是为什么呢?因为你跳过了最重要的一步 —— **规划**。 + +在 Vibe Coding 时代,虽然 AI 可以帮你写代码,但好的规划依然是项目成功的关键。甚至可以说,规划比以前更重要了。 + +下面我就来分享一套经过验证的 5 步开发流程,帮你避开这些坑。 + + + +## 为什么需要标准流程? + +在传统编程中,如果你对项目规划不清楚,最多就是写出来的代码质量不高,但至少你知道自己在写什么。 + +但在 Vibe Coding 中,情况就完全不同了。如果你对项目规划不清楚,AI 就会 “自由发挥”,生成一堆你看不懂、也不需要的代码。 + +AI 不是魔法,它只是一个非常强大的执行者。你告诉它做什么,它就做什么。如果你自己都不知道要做什么,AI 自然也无法帮你做出理想的产品。 + +所以,一套清晰的开发流程,可以帮助你: + +1. 明确项目目标和需求 +2. 让 AI 理解你的意图 +3. 避免项目失控 +4. 提高开发效率 +5. 做出真正有用的产品 + + + +## 完整的 5 步工作流 + +这套流程是我在实践中总结出来的,也参考了很多优秀开发者的经验。 + +它包括 5 个步骤: + +1. 需求研究(Research) +2. 产品需求文档(PRD) +3. 技术设计文档(Tech Design) +4. AI 代理指令(AGENTS.md) +5. 实现和迭代(Build) + +看起来好像很复杂?别担心,我会用最简单的方式 “喂饭” 给你。 + +![](https://pic.yupi.icu/1/vibecodingworkflow%E5%A4%A7.jpeg) + + + +## 步骤一、需求研究(Research) + +了解完整体流程后,让我们从第一步开始,详细讲解每个步骤该怎么做。 + +在动手之前,先搞清楚:我到底要做什么?为什么要做?有没有人做过类似的东西? + +很多同学会跳过这一步,直接开始写需求文档。但我的经验是,花 30 分钟做调研,可以避免走很多弯路。 + +具体怎么做? + +1)明确你的目标 + +先问自己几个问题:我想解决什么问题?这个问题真的值得解决吗?我希望做出来的东西是什么样的? + +比如你想做一个记账应用,那就要想清楚:是给自己用还是给别人用?主要记录哪些类型的账目?需要哪些核心功能? + + + +2)调研类似产品 + +去看看市面上有没有类似的产品,它们是怎么做的?有什么优点和缺点? + +你可以搜索相关的应用或网站,看看别人的开源项目,或者直接问 AI:“有哪些好用的记账应用?它们有什么特点?” + +这一步很重要,可以帮你避免重复造轮子,也能给你提供灵感和参考。 + + + +3)记录你的发现 + +把你的想法和调研结果记录下来,可以用一个简单的文档,比如 `RESEARCH.md`。这个文档不需要很正式,就像写日记一样,记录你的想法和发现就行。 + +举个例子,假设你想做一个记账应用。你先调研了市面上的几款记账应用,发现它们功能都太复杂了,你只需要一个简单的工具。然后你记录下自己的想法,`RESEARCH.md` 可能是这样的: + +```markdown +# 记账应用需求研究 + +## 目标 +做一个简单易用的个人记账应用,帮助自己养成记账习惯。 + +## 调研发现 +- 市面上的记账应用功能都太复杂了 +- 我只需要快速记录收入和支出 +- 最好能看到每月的统计数据 + +## 核心需求 +1. 快速添加收支记录 +2. 按日期查看记录 +3. 查看月度统计 +4. 数据本地存储 +``` + + + +## 步骤二、产品需求文档(PRD) + +完成需求研究后,你应该对要做的东西有了清晰的认识。接下来,我们要把这些想法整理成一份正式的文档。明确要做哪些功能,不做哪些功能。 + +这是整个流程中最重要的一步,一份好的 PRD 可以让 AI 准确理解你的意图,生成高质量的代码。 + + + +### 怎么写出高质量的 PRD? + +我的建议是,先自己写一个简单的需求描述,然后让 AI 帮你扩展成完整的 PRD。 + +比如,你可以先写: + +``` +我要做一个记账应用,能快速记录收支,查看每月统计。 +要简单易用,不要复杂的功能。 +``` + +然后把这段话发给 AI 大模型,比如 Gemini 或 DeepSeek: + +``` +请帮我把这个需求扩展成完整的产品需求文档(PRD), +要包含: +1. 产品概述和目标用户 +2. 详细的功能列表 +3. 功能优先级(MVP 和后续版本) +4. 界面设计要求 +5. 技术栈建议 +6. 非功能性需求(性能、安全等) +``` + +AI 会帮你生成一份结构化的 PRD,然后你再根据自己的需求修改和完善。 + + + +### PRD 应该包含什么? + +一份完整的 PRD 通常包含: + +- 产品概述(简单介绍这个产品是什么) +- 目标用户(谁会用这个产品) +- 核心功能(列出所有要做的功能) +- 功能优先级(哪些是必须做的,哪些是可以后续添加的) +- 界面设计(简单描述界面应该是什么样的) +- 技术栈建议 +- 代码风格和架构模式 +- 限制条件和边界场景 + + + +举个例子: + +```markdown +# 记账应用 PRD + +## 产品概述 +一个简单的个人记账应用,帮助用户快速记录日常收支。 + +## 目标用户 +需要记账但不想用复杂应用的个人用户。 + +## 核心功能 + +### 必须做(MVP) +1. 添加收支记录 + - 输入金额 + - 选择类型(收入/支出) + - 选择分类(餐饮、交通、工资等) + - 添加备注(可选) + - 选择日期 + +2. 查看记录列表 + - 按日期倒序显示 + - 显示金额、类型、分类、备注 + - 可以删除记录 + +3. 月度统计 + - 显示当月总收入 + - 显示当月总支出 + - 显示当月结余 + +### 后续可以做 +- 数据导出 +- 图表展示 +- 预算设置 +- 多账户管理 + +## 界面设计 +- 首页:显示记录列表和添加按钮 +- 添加页面:表单输入 +- 统计页面:展示月度数据 +``` + + + +## 步骤三、技术设计文档(Tech Design) + +有了清晰的 PRD 后,我们就知道要做什么了。 + +下一步,就是确定用什么技术来实现这些功能,以及大致的技术架构。 + +创建一个 `TECH_DESIGN.md` 文件,包含: + +- 技术栈选择(前端用什么、后端用什么、数据库用什么) +- 项目结构(代码怎么组织) +- 数据模型(需要存储哪些数据) +- 关键技术点(有哪些技术难点需要注意) + +还是以记账应用为例。根据 PRD 中的需求,你决定用 React 来做前端,因为它生态成熟、AI 支持好。数据存储用 LocalStorage 就够了,因为是个人工具,不需要后端。技术设计文档可能是这样的: + +```markdown +# 记账应用技术设计 + +## 技术栈 +- 前端:React + TypeScript + Vite +- 样式:Tailwind CSS +- 数据存储:LocalStorage +- 部署:Vercel + +## 项目结构 + +src/ + components/ # 组件 + pages/ # 页面 + hooks/ # 自定义 Hooks + utils/ # 工具函数 + types/ # 类型定义 + +## 数据模型 + +### Transaction(交易记录) +- id: string +- amount: number +- type: 'income' | 'expense' +- category: string +- note: string +- date: string + +## 关键技术点 +1. 使用 LocalStorage 存储数据 +2. 使用 React Hooks 管理状态 +3. 使用日期库处理日期(date-fns) +``` +如果你不熟悉技术选型,可以问 AI:“我要做一个记账应用,应该用什么技术栈?” + +AI 会给你推荐合适的技术。 + + + +## 步骤四、AI 代理指令(AGENTS.md) + +PRD 和技术设计都准备好了,现在我们要创建一个专门给 AI 看的指令文件,告诉 AI 在这个项目中应该遵循什么规则。 + +这个文件你可以随便取名,比如 `AI_RULES.md`、`INSTRUCTIONS.md` 等。但我推荐使用 `AGENTS.md` 这个名称,因为这是一个新兴的社区标准。 + +[AGENTS.md](https://agents.md/) 是一个标准化的文件格式,用来指导 AI 编程工具如何工作。它就像是给 AI 的 “工作手册”。这个标准由 OpenAI、Anthropic、Google 等公司共同推动,目前已经有超过 8 万个开源项目在使用。主流的 AI 编程工具,比如 Cursor、Windsurf、Claude Code、Gemini CLI、GitHub Copilot 等都支持自动读取 AGENTS.md 文件。 + +![](https://pic.yupi.icu/1/image-20260109161639565.png) + +那 AGENTS.md 应该包含什么内容呢? + +一般包含项目概述、开发规范、测试要求、代码风格、注意事项等。 + +继续用记账应用来举例。根据前面的 PRD 和技术设计,你可以创建这样一个 AGENTS.md 文件: + +```markdown +# 记账应用 AI 开发指令 + +## 项目概述 +这是一个简单的个人记账应用,使用 React + TypeScript 开发。 + +## 开发规范 +- 使用 TypeScript,确保类型安全 +- 组件使用函数式组件 + Hooks +- 使用 Tailwind CSS 编写样式 +- 所有数据存储在 LocalStorage + +## 代码风格 +- 使用 ESLint 和 Prettier +- 组件名使用 PascalCase +- 函数名使用 camelCase +- 常量使用 UPPER_SNAKE_CASE + +## 测试要求 +- 每个功能完成后手动测试 +- 确保数据正确存储和读取 +- 测试各种边界情况 + +## 注意事项 +- 保持代码简洁,避免过度设计 +- 优先实现核心功能 +- 确保移动端适配 +``` + +有了这个文件,AI 就知道在这个项目中应该遵循什么规则,生成的代码会更加规范和一致。 + + + +## 步骤五、实现和迭代(Build) + +前面 4 步都是准备工作,现在终于可以开始写代码了! + +但不是一口气写完,而是小步迭代。 + + + +### 分步迭代策略 + +对于复杂的项目,想一步到位是不现实的。我推荐采用 3 步走的策略: + +#### 1、生成基础框架 + +先让 AI 生成基础项目框架,暂时不管功能好不好用,确保能够运行项目即可。 + +``` +请根据 PRD.md、TECH_DESIGN.md 和 AGENTS.md 的要求, +初始化项目并创建基本的项目结构,包括: +1. 安装必要的依赖 +2. 创建目录结构 +3. 配置开发环境 +4. 创建基础的路由和页面框架 +确保项目能够正常启动。 +``` + +对于有编程基础的同学,其实有更简单的方法。你可以使用脚手架或者项目模板来快速生成基础框架。 + +脚手架就像是一个自动化工具,帮你生成项目的基本结构和配置文件,比如 `create-react-app`、`create-vite` 等。 + +项目模板则是一个预先配置好的项目示例,你可以直接复制使用。 + +使用这些工具,几分钟就能搭好基础框架,不需要从零开始。 + + + +#### 2、逐步实现核心功能 + +框架搭好后,就可以开始实现具体功能了。这一步的关键是 **先跑通核心业务流程、实现核心功能**,而不是一开始就追求完美。建议把项目拆分成多个小功能,一个一个来实现。 + +比如记账应用可以这样拆分: + +1. 实现数据模型和存储 +2. 实现添加记录功能 +3. 实现记录列表显示 +4. 实现删除功能 +5. 实现月度统计 + +对于每个功能,你可以这样和 AI 对话: + +``` +我要实现添加记录功能,请根据 PRD.md 和 TECH_DESIGN.md 中的要求, +创建一个 AddTransaction 组件,包含表单输入和提交功能。 +``` + +每完成一个功能,就测试一下:功能是否正常工作?有没有 Bug?界面是否符合预期? + +如果有问题,就继续和 AI 对话,让它修改。 + + + +#### 3、优化实现细节 + +核心功能都实现后,就可以打磨细节了。在 **保证不影响功能的前提下**,优化性能、改进用户体验、美化界面等。 + +打磨完细节后,你的 MVP 最小可行产品就完成了。之后就可以根据用户反馈和自己的想法,扩展更多功能了。 + +另外,跑通核心功能后,强烈建议用 Git 来管理代码。每完成一个功能就提交一次,这样即使后面出问题,也能快速回退。 + +如果你还不会 Git,可以看看 [鱼皮的 Git 学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190804671012866),很快就能上手。 + + + +### 避免 AI 失控的关键技巧 + +在实际开发中,你可能会遇到这些问题: + +- AI 输出的内容驴头不对马嘴 +- 成了一个新功能后原来的功能就不能用了 +- 改了一个 Bug 又来 3 个 Bug + +这些问题很常见,但都有解决办法。 + +#### 1、项目模块化 + +由于 AI 的上下文是有限的,随着项目信息量不断增大,它可能忘记之前的信息,导致生成的代码错误。所以我们要把项目的功能尽可能隔离开,把一个大项目分割成多个小模块。 + +举个例子,开发一个电商系统,可以把商品管理模块独立出来。当需要 AI 生成添加商品功能的代码时,只需要提供商品表的字段设计、添加商品的业务逻辑规则,不需要把支付结算、用户会员等关联不大的功能作为上下文提供给 AI。 + + + +#### 2、限定修改范围 + +AI 生成的代码没有那么可控,经常改 A 功能的同时把 B 功能也顺带修改了。这个问题很好解决,只要在提示词中限定修改范围即可: + +``` +仅修改 components/AddTransaction.tsx 文件: +1. 添加表单验证功能 +2. 保持现有的样式和布局 +3. 不要改动其他文件 +``` + + + +#### 3、抽象和复用 + +假如我们要让 AI 生成 2 个布局一模一样的页面,它有时会很死板,生成完页面 A 之后,复制一遍页面 A 的代码来生成页面 B。这样非常不利于大项目的维护,以后 AI 改了页面 A,说不定页面 B 就忘了改。所以我们需要主动告诉 AI: + +``` +请帮我抽象这个页面为可复用的组件, +让其他页面可以通过传入不同的参数来使用。 +``` + +这样也能减少整个项目的代码量,减轻 AI 上下文记忆的负担,让生成结果更准确。 + + + +#### 4、版本控制 + +强烈建议使用 Git 版本控制工具。每正确生成一个功能后都提交一次版本,在每次 AI 生成新代码之后人工对比一下改动的文件,出了问题也能快速还原到之前的版本,防止代码丢失。 + +``` +每完成一个功能后,提交代码: +git add . +git commit -m "实现添加记录功能" +``` + +Cursor 自带了 Git 对比功能,可以很方便地查看代码变化。 + + + +#### 5、人工控制 + +AI 有时会因缺乏关键上下文信息、或者自身能力的不足而陷入循环。比如改来改去总是出现同样的错误,或者一直在做无用功。这时就有必要人工介入了。 + +可以尝试手动指定上下文、更换 Prompt 换个角度描述问题、清空对话历史重新开始,甚至手动修改部分代码给 AI 一个正确的方向。 + +这时候,学编程的好处就体现出来了。如果你有一些编程基础,就能更好地对 Vibe Coding 进行把控和干预。你能看懂 AI 生成的代码,知道哪里出了问题,能够手动修正关键部分,引导 AI 往正确的方向走。这也是为什么我建议大家在学习 Vibe Coding 的同时,也要了解一些编程基础知识。 + + + +#### 6、多元 AI 协作 + +不同 AI 大模型擅长不同任务。如果单一大模型无法正常完成工作,可以利用其他大模型生成 “教 AI 做事的方法和指令”。 + +比如,你在 Cursor 中使用 GPT 生成的代码有问题,你可以: +1. 把代码和错误信息复制给 Claude 或 Gemini +2. 让它分析问题并给出修改建议 +3. 把修改建议再告诉 GPT,让它修改代码 + +这种多模型协作的方式,可以大大增加解决问题的可能性。 + + + +## 反面教材 - 需求不清导致项目翻车 + +在这套 Vibe Coding 教程的项目实战板块,我会分享大量的成功项目案例,大家之后可以挑感兴趣的学习。这里我只举一个反面案例,让你看看不按流程做会出现什么问题。 + +小阿巴想做一个待办事项应用,他直接打开 AI 编程工具,输入: + +``` +帮我做一个待办事项应用 +``` + +AI 生成了一个应用,看起来还不错。但小阿巴很快发现了问题:没有分类功能、没有优先级设置、界面风格也不喜欢。 + +于是他继续对话: + +``` +加上分类功能 +``` + +AI 添加了分类,但破坏了原有的布局。小阿巴又说: + +``` +修复布局问题 +``` + +AI 修复了布局,但又引入了新的 Bug。就这样改来改去,最后代码变成了一团糟,小阿巴不得不放弃这个项目。 + +问题出在哪里? + +首先,一开始没有明确需求,导致 AI 只能按照自己的理解生成代码。其次,每次修改都是 “头痛医头,脚痛医脚”,没有整体规划。最后,由于没有文档记录,AI 根本不知道项目的整体设计。 + +如果小阿巴一开始就按照 5 步流程来做,写清楚 PRD 和技术设计,就不会出现这些问题了。 + + + +## 实战技巧、让 AI 生成的代码更准确 + +掌握了完整的开发流程后,我再分享一些实战技巧,让 AI 生成的代码更准确、更符合你的预期。这些技巧是我在实践中总结出来的,非常实用。 + +更多的经验技巧可以在本套 Vibe Coding 教程的【经验技巧】板块查看,这里我只列举几个我觉得至关重要的。 + + + +### 1、优化你的 Prompt + +Prompt 的质量直接决定了 AI 生成代码的准确性。一个好的 Prompt 应该包含三个要素:明确 AI 的角色、提供具体的细节要求、拆解复杂任务。 + +比如,你可以先告诉 AI 它的角色:“你是一个经验丰富的前端开发工程师,擅长使用 React 和 TypeScript 开发现代化的 Web 应用。” + +这样 AI 就知道应该以什么视角来工作,然后再提供具体的细节要求。 + +❌ 不好的 Prompt: +``` +帮我做一个按钮 +``` + +✅ 好的 Prompt: +``` +创建一个主要操作按钮组件: +- 使用 Tailwind CSS +- 支持 primary、secondary、danger 三种样式 +- 支持 loading 状态(显示加载动画) +- 支持 disabled 状态 +- 点击时有反馈动画 +``` + + + +还要学会拆解复杂任务。不要让 AI 一次性完成复杂的任务,而是拆解成多个小任务: + +❌ 不好的 Prompt: +``` +实现用户管理功能 +``` + +✅ 好的 Prompt: +``` +第一步:创建用户数据模型和类型定义 +第二步:实现用户注册接口 +第三步:实现用户登录接口 +第四步:实现用户信息查询接口 + +现在请先完成第一步。 +``` + +如果有参考的代码或设计,也可以提供给 AI: + +```markdown +参考这个登录页面的设计风格:[截图或链接],创建一个注册页面,保持风格一致。 +``` + + + +### 2、注意操作系统差异 + +AI 更熟悉 Linux 或 Mac 系统的终端命令。如果你使用 Windows 系统,有两个选择:安装 WSL(Windows Subsystem for Linux)使用 Linux 环境开发,或者明确告诉 AI 你在使用 Windows 系统。 + +在 AGENTS.md 中明确说明: + +```markdown +## 开发环境 +- 操作系统:Windows +- 终端:PowerShell +- 请使用 Windows 兼容的命令 +``` + +或者在对话时明确说明: + +``` +我使用的是 Windows 系统,请提供 Windows 兼容的命令。 +``` + + + +### 3、处理 AI 陷入循环的情况 + +有时 AI 会陷入循环,反复做同样的事情,或者一直无法解决某个问题。这时可以尝试几种方法。 + +1)清空上下文。在 Cursor 中清空当前对话重新开始,但是要先保存重要的信息。 + + + +2)换个角度提问,不要重复同样的问题。 + +举个例子,原来的问题很简单: +``` +为什么登录功能不工作? +``` + +换个角度: +``` +请检查登录流程的每一步: +1. 前端是否正确发送了请求? +2. 后端是否收到了请求? +3. 数据库查询是否正确? +4. 返回的数据格式是否正确? + +请逐步排查并告诉我哪一步出了问题。 +``` + + + +3)提供更多上下文。AI 可能缺少关键信息,不妨把相关的文件、错误信息、日志等都提供给它: + +``` +我遇到了登录问题,相关信息如下: + +1. 前端代码:[粘贴代码] +2. 后端代码:[粘贴代码] +3. 错误信息:[粘贴错误] +4. 网络请求:[粘贴请求和响应] + +请帮我分析问题出在哪里。 +``` + +如果实在解决不了,可以寻求其他 AI 的帮助。把代码和问题复制给 Claude 或 ChatGPT,让它们分析,它们可能会给出不同的解决方案。 + + + +### 4、让 AI 帮你优化 Prompt + +如果你不确定自己的 Prompt 是否够好,可以让 AI 帮你优化。这是一个很实用的技巧: + +``` +我想让 AI 帮我实现用户登录功能。 +我现在的 Prompt 是:"实现登录功能" +请帮我优化这个 Prompt,让它更详细、更准确, +让 AI 能生成高质量的代码。 +``` + +AI 会给你一个优化后的 Prompt,包含更多的细节和要求。 + + + +### 5、利用 AI 的代码审查能力 + +完成功能后,可以让 AI 帮你审查代码: + +``` +请审查我的登录功能代码,检查: +1. 是否有安全问题(如密码明文传输) +2. 是否有性能问题 +3. 代码是否符合最佳实践 +4. 是否有潜在的 Bug +5. 用户体验是否可以改进 + +请给出具体的改进建议。 +``` + +AI 的审查往往能发现一些你没注意到的问题。对于核心功能,还可以让多个不同的 AI 大模型同时审查,交叉验证。 + + + +## 写在最后 + +看到这里,你可能会觉得:这个流程好像有点复杂啊,真的有必要吗? + +我的回答是:绝对有必要! + +我自己至少用 Vibe Coding 做了 30 多个项目,从简单的工具到复杂的全栈应用都有涉及。在我的实践中,那些一开始就做好规划的项目,开发过程都非常顺利,最后也都成功上线了。而那些 “想到哪做到哪” 的项目,大多数都半途而废了。Planning is Everything,这是 Vibe Coding 的第一心法。 + +虽然前期需要花时间写文档,但后期开发会非常顺利,AI 生成的代码质量也更高。 + +而且好的规划不会限制你的创造力,反而会让你更加自由。因为你知道自己在做什么,知道每一步要往哪里走。 + +当然,这个流程也不是死板的。随着你的经验增加,你会找到适合自己的节奏。但在一开始,强烈建议你按照这个流程来做,养成好的习惯。 + +最后,再次强调一下这几个关键点:规划比代码更重要、文档是 AI 的指南针、小步迭代不失控、模块化是大项目的关键、版本控制是你的后悔药。 + +现在,你已经掌握了完整的项目开发流程。在下一篇文章中,我会带你用这套流程做 5 个实用的个人工具项目,让你体验到这套流程的威力。 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/02 Vibe Coding 个人工具开发.md b/Vibe Coding 零基础教程/20 项目实战/02 Vibe Coding 个人工具开发.md new file mode 100644 index 0000000..e85dd55 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/02 Vibe Coding 个人工具开发.md @@ -0,0 +1,518 @@ +# Vibe Coding 个人工具开发 + + +你好,我是鱼皮。 + +在上一篇文章中,我们学习了完整的 5 步开发流程。现在,是时候把这套流程真正用起来了! + +这篇文章,我会带你做 5 个实用的个人工具项目:个人作品集网站、待办事项应用(进阶版)、Markdown 笔记应用、番茄钟计时器、天气查询应用。 + +需要先说明的是,本节教程更多的是做一个思路和项目开发流程的指导,目的是引导大家学会使用 Vibe Coding 开发项目的方法,需要大家自行动手实践。如果你需要更完整的 Vibe Coding 图文和视频教程,可以看看鱼皮的原创项目实战部分。 + +下面这些项目都是我精心挑选的,实用性强,做出来真的能用,不是玩具。难度适中,适合新手练手,不会太难也不会太简单。技术上涵盖了前端、数据存储、API 调用等常见场景,完成基础版后还可以继续添加新功能。更重要的是,这些项目都可以放到你的作品集里,向别人展示你的能力。 + +每个项目我都会提供完整的开发指南,包括需求分析、技术选型、开发步骤和扩展思路。你可以根据自己的兴趣选择项目,不需要按顺序完成。 + + + +## 一、项目实战 - 个人作品集网站 + +个人作品集网站是展示你能力的最好方式。无论你是找工作、接私活,还是想在社交媒体上分享你的作品,一个漂亮的作品集网站都能给你加分。而且,这个项目本身就是你的第一个作品,可以放到作品集里展示,是不是很有意思? + +这个网站要包含几个部分:个人介绍(姓名、头像、简介、联系方式)、技能展示(你会哪些技术)、项目展示(你做过的项目,包括截图、描述、链接)。界面要做响应式设计,在手机和电脑上都能正常显示。 + +技术选型上,我们使用 React + TypeScript + Vite 作为前端框架,Tailwind CSS 来写样式,最后部署到 Vercel 上线。这套技术栈很现代,也是目前最流行的前端开发方案。 + +![](https://pic.yupi.icu/1/demoweb1.png) + + + +### 开发步骤 + +1)需求研究 + +开发任何项目前,都要先做需求研究。你可以去看看别人的作品集网站是什么样的,比如在网上搜索 "developer portfolio examples",找找灵感。记录下你喜欢的设计风格和功能,这些都可以作为你的参考。 + +2)写 PRD 文档 + +有了灵感后,就要写 PRD 文档了。创建一个 `PRD.md` 文件,明确你要展示哪些内容。下面是一个参考示例: + +```markdown +# 个人作品集网站 PRD + +## 核心功能 +1. 首页:大标题 + 简介 + 头像 +2. 关于我:详细介绍 + 技能列表 +3. 项目展示:项目卡片列表,每个卡片包含项目名称、项目截图、简短描述、技术栈、项目链接 +4. 联系方式:邮箱、GitHub、社交媒体链接 + +## 设计要求 +- 简洁现代的设计风格 +- 深色主题 +- 流畅的滚动动画 +- 移动端适配 +``` + +这个文档不需要写得很复杂,把核心功能和设计要求说清楚就行。 + +3)写技术设计文档 + +接下来写技术设计文档 `TECH_DESIGN.md`。在这里确定具体的技术方案: + +```markdown +# 技术设计 + +## 技术栈 +- React + TypeScript + Vite +- Tailwind CSS +- React Router(如果需要多页面) +- Framer Motion(动画效果) + +## 项目结构 +src/ + components/ + Header.tsx + Hero.tsx + About.tsx + Projects.tsx + Contact.tsx + Footer.tsx + data/ + projects.ts + skills.ts + App.tsx + main.tsx + +## 数据管理 +- 项目数据和技能数据存储在 TypeScript 文件中 +- 使用数组存储,方便后续添加和修改 +``` + +这个文档的作用是让 AI 知道你要用什么技术,项目结构是什么样的。 + +4)写 AGENTS.md 文件 + +然后创建 `AGENTS.md` 文件,告诉 AI 开发规范: + +```markdown +# 个人作品集网站开发指令 + +## 项目概述 +使用 React + TypeScript + Tailwind CSS 开发的个人作品集网站。 + +## 开发规范 +- 使用函数式组件 + Hooks +- 使用 Tailwind CSS 编写样式 +- 组件要可复用 +- 代码要有注释 + +## 设计要求 +- 深色主题(背景 #0a0a0a,文字 #ffffff) +- 使用渐变色作为强调色 +- 添加平滑的滚动动画 +- 确保移动端适配 + +## 注意事项 +- 保持设计简洁,不要过度设计 +- 性能优化:图片使用懒加载 +- 确保所有链接可点击 +``` + +这个文件是给 AI 的开发规范,让它知道代码要怎么写,设计要什么风格。 + +5)开始开发 + +有了这三个文档,就可以开始开发了。打开 Cursor 等 AI 代码编辑器,开始和 AI 对话。 + +第一个提示词是初始化项目: + +``` +请根据 PRD.md、TECH_DESIGN.md 和 AGENTS.md 的要求,初始化一个 React + TypeScript + Vite 项目,并安装 Tailwind CSS。 +``` + +这个提示词很简单,但包含了所有必要的信息。AI 会读取这三个文档,然后按照要求创建项目结构,安装依赖,配置 Tailwind CSS。 + +然后逐步实现每个组件。比如创建 Hero 组件: + +``` +创建 Hero 组件,包含大标题、简介和头像。使用 Tailwind CSS 实现深色主题和渐变色效果。 +``` + +这个提示词告诉 AI 要创建什么组件,包含哪些内容,用什么技术实现。AI 会生成完整的组件代码。 + +接着创建 Projects 组件: + +``` +创建 Projects 组件,展示项目列表。每个项目卡片包含截图、标题、描述和技术栈标签。 +``` + +就这样一步一步,完成整个网站。每完成一个组件,就在浏览器中预览一下效果,确保符合预期。 + +6)部署上线 + +开发完成后,就可以部署上线了。部署的流程很简单: + +- 把代码推送到 GitHub +- 登录 Vercel,导入 GitHub 仓库 +- 点击部署,等待完成 +- 获得你的网站链接 + +Vercel 会自动检测你的项目类型,配置构建命令,非常智能。部署完成后,你就有了一个可以访问的网站链接,可以分享给别人看。 + + + +### 扩展思路 + +基础版完成后,你还可以继续扩展功能。比如添加博客功能,写文章分享你的学习经验;添加深色/浅色主题切换,让用户可以选择喜欢的主题;支持多语言,吸引国际用户;添加访问统计,了解网站访问情况;甚至可以加个留言板功能,让访客可以给你留言。 + + + +## 二、项目实战 - 待办事项应用(进阶版) + +完成了作品集网站后,让我们来做一个功能更复杂的项目。在快速上手部分,我们做过一个简单的待办事项应用,只有最基本的添加和删除功能。现在,让我们做一个功能更强大的版本,学习如何处理更复杂的业务逻辑。 + +这个进阶版的功能要丰富得多。添加待办事项时,除了标题,还可以设置描述、截止日期、优先级、分类。查看列表时,支持按分类、优先级、状态筛选,还有搜索功能可以快速找到特定的待办事项。当然也支持编辑和删除。数据用 LocalStorage 保存,刷新页面不会丢失。另外还有统计功能,显示完成率、待办数量等。 + +技术选型上,前端用 React + TypeScript + Vite,状态管理用 Zustand(一个轻量级的状态管理库,比 Redux 简单很多),样式用 Tailwind CSS,日期处理用 date-fns,数据存储用 LocalStorage。 + +![](https://pic.yupi.icu/1/demoweb2.png) + + + +### 开发步骤 + +1)定义数据模型 + +开发的第一步是定义数据模型。你需要明确待办事项包含哪些字段:id(唯一标识)、title(标题)、description(描述)、category(分类)、priority(优先级:低、中、高)、dueDate(截止日期)、completed(是否完成)、createdAt(创建时间)。把这些字段定义清楚,后面的开发就会很顺畅。 + +2)按功能模块开发 + +然后按功能模块来开发。建议的顺序是:先实现数据存储层,封装 LocalStorage 的读写操作;再实现状态管理,用 Zustand 创建全局 store;然后实现添加功能;接着实现列表展示和筛选;最后实现搜索和统计。这样循序渐进,每完成一个模块就测试一下,确保正常工作。 + +和 AI 对话时,可以这样说: + +``` +创建 Todo 数据模型和 LocalStorage 工具函数。 +``` + +AI 会帮你定义数据结构和封装存储操作。这个提示词虽然简单,但 AI 知道要做什么,因为它会参考你的 PRD 和技术设计文档。 + +然后说: + +``` +使用 Zustand 创建全局状态管理,包括添加、删除、更新、筛选等方法。 +``` + +AI 会创建一个完整的 store,包含所有需要的方法。Zustand 是一个很轻量的状态管理库,比 Redux 简单很多,但功能足够强大。 + +接着说: + +``` +创建 AddTodo 组件,包含表单输入和验证。 +``` + +AI 会实现添加功能的界面和逻辑,包括输入框、下拉选择、日期选择器等。每完成一个功能,就测试一下,确保正常工作。 + + + +### 关键技术点 + +这个项目有几个关键的技术点需要注意。首先是状态管理,因为功能比较多,用 Zustand 来管理全局状态会方便很多。你可以让 AI 帮你创建一个 store,包含添加、删除、更新、筛选等方法。 + +筛选功能要支持多条件筛选,比如同时按分类和优先级筛选。搜索功能要支持模糊搜索,在标题和描述中查找关键词。这些逻辑都可以让 AI 帮你实现,你只需要告诉它具体的需求就行。 + + + +### 扩展思路 + +基础版完成后,还可以继续扩展。比如添加标签功能,让待办事项可以打多个标签;支持子任务,一个大任务可以分解成多个小任务;添加提醒功能,到期前自动提醒;支持数据导出为 CSV;甚至可以用 Firebase 实现云端同步。 + + + +## 三、项目实战 - Markdown 笔记应用 + +掌握了状态管理和数据筛选后,我们来学习如何处理文本编辑和实时预览。Markdown 是程序员最常用的文档格式,做一个 Markdown 笔记应用可以让你学习如何处理文本编辑、实时预览等功能。 + +这个项目要实现一个完整的 Markdown 笔记应用。用户可以创建笔记,输入标题和内容。界面采用左右分栏,左侧是编辑器,右侧实时预览渲染后的效果。左侧还要显示笔记列表,支持搜索。数据保存在 LocalStorage,支持删除笔记。代码块要有语法高亮,这样看起来更专业。 + +技术选型上,前端用 React + TypeScript + Vite,Markdown 解析用 react-markdown,代码高亮用 react-syntax-highlighter,样式用 Tailwind CSS,数据存储用 LocalStorage。 + +![](https://pic.yupi.icu/1/demoweb3.png) + + + +### 开发步骤 + +1)实现基础布局 + +开发的第一步是实现基础布局,创建左右分栏的布局,左侧是编辑器,右侧是预览区。这个布局用 Tailwind CSS 的 Flex 或 Grid 很容易实现。 + +可以这样告诉 AI: + +``` +创建左右分栏布局,左侧是 Markdown 编辑器(大文本框),右侧是预览区。使用 Tailwind CSS 实现响应式布局。 +``` + +AI 会创建一个美观的分栏布局,在电脑上是左右分栏,在手机上会自动变成上下布局。 + +2)集成 Markdown 解析 + +然后集成 Markdown 解析。使用 react-markdown 这个库,可以很方便地将 Markdown 文本转换为 HTML。你只需要把文本传给这个组件,它就会自动渲染。 + +告诉 AI: + +``` +使用 react-markdown 将 Markdown 文本转换为 HTML,在预览区显示渲染后的效果。 +``` + +这个提示词很简洁,但 AI 知道要做什么。它会安装 react-markdown 库,导入组件,然后在预览区使用。 + +3)实现实时预览 + +接下来实现实时预览。这个功能的关键是监听编辑器的输入变化,实时更新预览区。当用户在左侧编辑时,右侧要同步显示渲染后的效果。 + +告诉 AI: + +``` +监听编辑器的输入变化,实时更新预览区。用户在左侧编辑时,右侧同步显示 Markdown 渲染后的效果。 +``` + +这个功能用 React 的状态管理很容易实现。AI 会把编辑器的内容存储在 state 中,然后传给预览组件,每次内容变化都会自动更新预览。 + +4)添加代码高亮 + +代码高亮也很重要,让代码块看起来更专业。告诉 AI: + +``` +配置 react-syntax-highlighter,让代码块支持语法高亮。支持多种编程语言,比如 JavaScript、Python、Java 等。 +``` + +AI 会配置 react-syntax-highlighter,当 Markdown 中有代码块时,会用语法高亮来渲染,不同的语法元素会显示不同的颜色。 + +5)添加笔记管理功能 + +最后添加笔记管理功能。告诉 AI: + +``` +实现笔记管理功能: +- 左侧添加笔记列表,显示所有笔记的标题 +- 点击笔记可以切换到该笔记 +- 支持创建新笔记、删除笔记 +- 支持搜索笔记(按标题搜索) +- 数据保存在 LocalStorage +``` + +这个提示词包含了所有的功能要求,AI 会一次性实现所有功能。 + + + +### 关键技术点 + +这个项目的关键是实现 Markdown 的实时预览。当用户在左侧编辑时,右侧要实时显示渲染后的效果。这个功能用 react-markdown 库可以很容易实现。 + +代码高亮也很重要,可以让 AI 帮你配置 react-syntax-highlighter,支持多种编程语言的语法高亮。为了更好的用户体验,可以让 AI 添加一些优化,比如 Tab 键插入空格而不是切换焦点,支持 Ctrl+B 加粗等快捷键,自动保存草稿等。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如支持图片上传,让笔记可以插入图片;添加目录导航,自动生成文章大纲;支持导出为 PDF,方便分享;添加主题切换,提供多种编辑器主题;支持多种 Markdown 风格,比如 GitHub 风格、标准风格等。 + + + +## 四、项目实战 - 番茄钟计时器 + +前面的项目都是数据展示和管理,现在让我们做一个涉及定时器和通知的项目。番茄工作法是一种流行的时间管理方法,做一个番茄钟应用可以让你学习如何处理定时器、通知等功能。 + +番茄工作法的原理是工作 25 分钟,休息 5 分钟,这样循环进行。这个应用要实现倒计时功能,支持开始、暂停、重置。用户可以自定义工作和休息的时长。时间到了要发出通知提醒,还可以播放提示音。另外还要有统计功能,记录完成的番茄钟数量,帮助用户了解自己的工作效率。 + +技术选型上,前端用 React + TypeScript + Vite,样式用 Tailwind CSS,通知用浏览器自带的 Notification API,数据存储用 LocalStorage。 + +![](https://pic.yupi.icu/1/demoweb4.png) + + + +### 开发步骤 + +1)实现倒计时逻辑 + +开发的核心是实现倒计时逻辑。告诉 AI: + +``` +实现番茄钟倒计时功能: +- 默认工作 25 分钟,休息 5 分钟 +- 支持开始、暂停、重置 +- 时间格式显示为 MM:SS +- 倒计时结束时触发提醒 +``` + +这个提示词清楚地说明了要实现什么功能。AI 会用 JavaScript 的 setInterval 来实现倒计时,每秒减 1,到 0 时触发提醒。 + +2)实现通知功能 + +然后实现通知功能。浏览器的 Notification API 可以发送系统通知,但需要先请求用户权限。告诉 AI: + +``` +实现浏览器通知功能: +- 页面加载时请求通知权限 +- 倒计时结束时发送通知 +- 通知标题是"番茄钟",内容是"时间到了,该休息了!" +``` + +这个提示词说明了通知的触发时机和内容。AI 会先检查浏览器是否支持通知,然后请求权限,最后在时间到了的时候发送通知。 + +3)添加音效 + +还可以添加音效。时间到了播放一个提示音,这样即使用户没看屏幕也能知道时间到了。告诉 AI: + +``` +添加提示音功能: +- 准备一个提示音文件(放在 public 目录) +- 倒计时结束时播放提示音 +``` + +AI 会用 Audio 对象来播放音频文件。 + +4)添加统计功能 + +最后添加统计功能。告诉 AI: + +``` +实现统计功能: +- 记录完成的番茄钟数量 +- 显示今日完成数量、本周完成数量 +- 数据保存在 LocalStorage +``` + +这样用户可以看到自己的工作效率,更有成就感。 + + + +### 关键技术点 + +这个项目的核心是倒计时逻辑和通知功能。倒计时要准确,每秒减 1,不能有误差。通知功能需要先请求用户权限,如果用户拒绝了权限,要给出友好的提示。 + +为了更好的用户体验,可以在计时时更新页面标题,这样用户切换到其他标签页时也能看到剩余时间。还可以添加提示音,时间到了播放一个声音。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加长休息功能,4 个番茄钟后休息 15 分钟;记录每天的番茄钟数量,生成统计图表;添加任务列表,把番茄钟和具体任务关联起来;数据可视化,用图表展示工作效率;甚至可以支持背景音乐,让工作更有氛围。 + + + +## 五、项目实战 - 天气查询应用 + +最后,让我们来做第一个需要调用外部 API 的项目。这个项目可以让你学习如何与后端服务交互,处理异步请求和错误。 + +这个项目要实现天气查询功能。用户输入城市名称,查询当前天气,显示温度、天气状况、湿度、风速等信息。还要显示未来几天的天气预报。可以自动获取用户位置并显示天气。常用的城市可以收藏起来,方便下次查询。 + +![](https://pic.yupi.icu/1/demoweb5.png) + +技术选型上,前端用 React + TypeScript + Vite,样式用 Tailwind CSS,天气数据通过 [OpenWeatherMap API](https://openweathermap.org/api) 获取(免费),收藏的城市用 LocalStorage 保存。 + +![](https://pic.yupi.icu/1/image-20260112141920735.png) + + + +### 开发步骤 + +1)注册 API + +开发的第一步是注册 API。去 OpenWeatherMap 官网注册账号,获取免费的 API Key。注册很简单,填写基本信息就可以了。免费版有一定的调用次数限制,但对于学习和个人使用完全够用。 + +2)封装 API 请求 + +然后封装 API 请求。创建一个 API 工具文件,把所有的 API 调用都封装在这里。告诉 AI: + +``` +创建 API 工具文件,封装天气 API 调用: +- 定义 API 基础 URL 和 API Key(从环境变量读取) +- 创建 getCurrentWeather 函数,获取当前天气 +- 创建 getForecast 函数,获取未来天气预报 +- 支持按城市名称或经纬度查询 +- 要有错误处理 +``` + +这个提示词说明了要封装哪些功能,AI 会创建完整的 API 工具文件。 + +3)实现搜索功能 + +接下来实现搜索功能。告诉 AI: + +``` +实现天气查询功能: +- 用户输入城市名称,点击搜索 +- 调用 API 获取天气数据 +- 显示温度、天气状况、湿度、风速等信息 +- 查询过程显示加载动画 +- 查询失败显示友好提示(比如"找不到该城市") +``` + +这个提示词包含了功能要求和用户体验要求。AI 会实现完整的搜索功能,包括加载状态和错误处理。 + +4)实现位置定位 + +还可以实现位置定位功能。告诉 AI: + +``` +实现自动定位功能: +- 使用浏览器的 Geolocation API 获取用户位置 +- 根据经纬度查询天气 +- 如果用户拒绝定位权限,显示提示 +``` + +这样用户不用手动输入城市名称,更方便。 + +5)添加收藏功能 + +最后添加收藏功能。告诉 AI: + +``` +实现城市收藏功能: +- 查询过的城市可以收藏 +- 收藏列表保存在 LocalStorage +- 点击收藏的城市可以快速查询 +- 支持删除收藏 +``` + +这样用户可以快速查询常用城市的天气。 + + + +### 关键技术点 + +这个项目的关键是处理好 API 调用。API 请求可能失败,要做好错误处理。比如找不到城市、API Key 无效、网络错误等,都要给出友好的提示。在请求过程中要显示加载动画,让用户知道正在查询。 + +还要注意 API Key 的安全。不要直接写在代码里,要使用环境变量。创建一个 `.env.local` 文件,把 API Key 放进去,然后在代码中通过环境变量读取。记得把 `.env.local` 添加到 `.gitignore`,不要提交到 Git,避免泄露。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加天气图标和动画,让界面更生动;显示空气质量指数,关注健康;支持多城市对比,一次查看多个城市的天气;添加天气预警,及时提醒恶劣天气;甚至可以查询历史天气,分析天气趋势。 + + + +## 写在最后 + +通过这 5 个项目,你已经学习了 Web 开发的核心技能:组件开发、状态管理、数据持久化、API 调用、用户交互等。从简单的作品集网站,到复杂的待办事项应用,从文本编辑器到定时器,再到调用外部 API,每个项目都让你掌握了新的技能。 + +如果你在开发过程中遇到困难,或者想学习更多的开发技巧和最佳实践,可以参考本教程的经验技巧板块,那里有更详细的讲解。 + +掌握了个人工具开发后,在下一篇文章中,我会带你做更酷的 AI 应用,让我们一起探索 AI 的无限可能。 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/03 Vibe Coding AI 应用开发.md b/Vibe Coding 零基础教程/20 项目实战/03 Vibe Coding AI 应用开发.md new file mode 100644 index 0000000..d846441 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/03 Vibe Coding AI 应用开发.md @@ -0,0 +1,691 @@ +# Vibe Coding AI 应用开发 + + +你好,我是鱼皮。 + +如今,AI 已经不再是遥不可及的高科技,而是每个开发者都可以轻松使用的工具。通过调用 AI API,你可以快速做出各种智能应用,比如聊天助手、写作助手、图片生成器等。这些项目不仅有趣,而且非常实用,做出来可以直接用,也可以作为你的作品集项目。 + +这篇文章,我会带你做 4 个热门的 AI 应用:AI 聊天助手、智能写作助手、AI 图片生成器、语音识别应用。 + +需要先说明的是,本节教程更多的是做一个思路和项目开发流程的指导,目的是引导大家学会使用 Vibe Coding 开发项目的方法,需要大家自行动手实践。如果你需要更完整的 Vibe Coding 图文和视频教程,可以看看鱼皮的原创项目实战部分。 + + + +## 一、AI 应用开发基础 + +在开始做项目之前,我们先了解一下 AI 应用开发的基础知识。 + +AI 应用就是利用 AI 能力(比如文本生成、图片生成、语音识别等)来解决实际问题的应用程序。你不需要训练 AI 模型,只需要调用现成的 AI API 就可以了。这就像你不需要知道汽车引擎怎么工作,只需要会开车就行。 + +目前主流的 AI API 服务有很多。文本生成方面,有 OpenAI 的 GPT-4、Anthropic 的 Claude、Google 的 Gemini,还有国产大模型比如通义千问、文心一言、智谱 AI 等。图片生成方面,有 DALL-E 3、Midjourney、Stable Diffusion,还有国产的文心一格等。语音识别方面,有 OpenAI 的 Whisper、Google Speech-to-Text、讯飞语音识别等。 + +AI 应用的开发流程和普通应用类似,只是多了一个调用 AI API 的步骤。整个流程是:用户输入 → 处理输入 → 调用 AI API → 处理 AI 响应 → 展示结果。 + +听起来很简单对吧?确实,AI 应用开发的门槛已经非常低了。 + +![](https://pic.yupi.icu/1/aiapp-workflow%E5%A4%A7.jpeg) + +在开发 AI 应用时,有几个注意事项。 + +首先是 API Key 安全,不要把 API Key 暴露在前端代码中,否则别人可以盗用你的 Key。其次是成本控制,AI API 按使用量收费,要控制好成本,避免浪费。第三是错误处理,API 调用可能失败,要做好错误处理,给用户友好的提示。最后是用户体验,AI 响应可能需要几秒钟,要有加载提示,让用户知道正在处理。 + + + +## 二、项目实战 - AI 聊天助手 + +AI 聊天助手是最基础也是最实用的 AI 应用。通过这个项目,你可以学习如何用 Vibe Coding 的方式快速开发一个完整的 AI 对话应用。 + +这个项目要实现一个完整的聊天界面,用户可以输入问题,AI 给出回答。要支持多轮对话,AI 能记住之前说过的内容,这样对话才连贯。为了更好的体验,AI 的回答要逐字显示,而不是一次性全部出现,这叫流式输出。对话记录要保存在本地,刷新页面也不会丢失。另外,还需要一个清空对话的功能,方便开始新的话题。 + +![](https://pic.yupi.icu/1/demoweb6.png) + +技术选型上,我们使用 React + TypeScript + Vite 作为前端框架,Tailwind CSS 来写样式。AI 能力通过调用大模型 API 实现,对话历史用 LocalStorage 保存,AI 的回答用 react-markdown 来渲染,这样可以支持代码高亮等格式。 + + + +### 开发步骤 + +1)准备工作 + +开发的第一步是准备工作。你需要获取 API Key 来调用 AI 模型。访问 [智谱 AI 开放平台](https://bigmodel.cn),进入用户控制台,点击 API Key 就可以获取。智谱 AI 提供的 GLM 模型效果不错,而且有免费额度,适合学习使用。 + +2)写需求文档 + +有了 API Key,就可以开始写需求文档了。创建 `PRD.md` 文件,明确你要做什么: + +```markdown +# AI 聊天助手 PRD + +## 核心功能 +1. 用户可以输入问题,AI 给出回答 +2. 支持多轮对话,AI 能记住之前的对话内容 +3. AI 回答要逐字显示,不要一次性全部出现 +4. 对话记录要保存在本地,刷新页面不会丢失 +5. 可以清空对话,开始新的话题 +6. AI 的回答支持 Markdown 格式,包括代码高亮 + +## 界面要求 +- 类似微信的聊天界面 +- 用户消息在右边,AI 消息在左边 +- 底部有输入框和发送按钮 +- 简洁现代的设计风格 +``` + +这个文档清楚地说明了要实现什么功能,界面是什么样的。 + +3)写技术设计文档 + +然后写技术设计文档 `TECH_DESIGN.md`: + +```markdown +# 技术设计 + +## 技术栈 +- React + TypeScript + Vite +- Tailwind CSS +- 智谱 AI API +- LocalStorage 存储对话历史 +- react-markdown 渲染 Markdown + +## 数据结构 +- Message: role(user 或 assistant)、content(内容)、timestamp(时间戳) +- 对话历史存储在 LocalStorage 中 + +## API 调用 +- 使用智谱 AI Chat Completions API +- 启用 stream 模式实现流式输出 +- API Key 存储在环境变量中 +``` + +这个文档说明了用什么技术,数据结构是什么样的,API 怎么调用。 + +4)写 AGENTS.md 文件 + +接着创建 `AGENTS.md` 文件,告诉 AI 开发规范: + +```markdown +# AI 聊天助手开发指令 + +## 项目概述 +使用 React + TypeScript 开发的 AI 聊天助手,调用智谱 AI API 实现对话功能。 + +## 开发规范 +- 使用 TypeScript,确保类型安全 +- 使用 Tailwind CSS 编写样式 +- API Key 从环境变量读取,不要硬编码 +- 错误要有友好的提示 + +## 功能要求 +- 实现流式输出,AI 回答要逐字显示 +- 支持多轮对话,要把历史消息发送给 API +- 对话历史要保存在 LocalStorage +- 支持 Markdown 渲染和代码高亮 + +## 注意事项 +- 要处理 API 调用失败的情况 +- 加载时要有明确的提示 +- 输入框在发送时要禁用,避免重复发送 +``` + +这个文件是给 AI 的开发规范,让它知道代码要怎么写。 + +5)和 AI 对话开发 + +有了这三个文档,就可以开始和 AI 对话开发了。打开 Cursor,把这 3 个文档放在项目根目录。 + +第一步是初始化项目: + +``` +请根据 PRD.md、TECH_DESIGN.md 和 AGENTS.md 的要求,初始化一个 React + TypeScript + Vite 项目,并安装必要的依赖:Tailwind CSS、react-markdown、react-syntax-highlighter。 +``` + +这个提示词告诉 AI 要创建什么项目,安装哪些依赖。AI 会读取这三个文档,然后按照要求创建项目结构,安装依赖,配置 Tailwind CSS。 + +第二步是创建数据类型和 API 封装: + +``` +创建 types.ts 文件,定义 Message 类型。然后创建 api.ts 文件,封装智谱 AI API 调用,要支持流式输出,参数从环境变量读取。 +``` + +这一步是为后续开发打基础,把数据结构和 API 调用都封装好,后面用起来就很方便。 + +第三步是实现聊天界面: + +``` +创建 ChatInterface 组件,实现聊天界面。要求: +1. 消息列表显示在上方,用户消息在右边,AI 消息在左边 +2. 底部有输入框和发送按钮 +3. 使用 Tailwind CSS 实现类似微信的聊天界面样式 +4. 消息要支持 Markdown 渲染 +``` + +这个提示词说明了界面的布局和样式要求。AI 会创建完整的聊天界面组件。 + +第四步是实现对话功能: + +``` +实现发送消息的功能: +1. 用户输入消息后,添加到消息列表 +2. 调用 API 获取 AI 回答 +3. 使用流式输出,逐字显示 AI 的回答 +4. 要把历史消息也发送给 API,实现多轮对话 +5. 加载时禁用输入框,显示"思考中..." +``` + +这个提示词包含了对话功能的所有要求。流式输出是关键,它让 AI 的回答像打字一样逐字出现,用户体验会好很多。多轮对话也很重要,要把之前的对话历史一起发送给 API,这样 AI 才能记住之前说过的内容。 + +第五步是添加数据持久化: + +``` +使用 LocalStorage 保存对话历史: +1. 每次对话更新后自动保存 +2. 页面加载时读取历史记录 +3. 添加"清空对话"按钮,清除历史记录 +``` + +这样用户刷新页面后,之前的对话还在,不会丢失。 + +第六步是优化用户体验: + +``` +优化用户体验: +1. 新消息出现时,自动滚动到底部 +2. 添加复制按钮,方便复制 AI 的回答 +3. 代码块要有语法高亮 +4. API 调用失败时,显示友好的错误提示 +``` + +这些细节虽然小,但能大幅提升用户体验。 + + + +### 开发技巧 + +在开发过程中,有几个技巧可以让你更高效。首先,不要一次性让 AI 实现所有功能,而是分成多个小步骤,每完成一步就测试一下。这样即使出问题,也容易定位和修复。 + +其次,在对话时要给 AI 提供足够的上下文。明确告诉它要实现什么功能、有什么具体要求、要遵循什么规范。上下文越清晰,AI 生成的代码质量就越高。 + +如果代码出现问题,记得把完整的错误信息发给 AI,让它帮你分析和修复。不要只说 “代码报错了”,而是要把具体的错误信息粘贴给它。 + + + +### 扩展思路 + +基础版完成后,你可以继续扩展功能。 + +比如添加系统提示词设置,让 AI 扮演不同角色(比如编程助手、写作助手、心理咨询师等);支持多个对话会话管理,可以同时进行多个话题的对话;添加语音输入功能,用语音和 AI 对话;集成图片识别功能,让 AI 可以看图回答问题;支持导出对话记录,保存重要的对话内容。 + + + +## 三、项目实战 - 智能写作助手 + +掌握了 AI 对话的基本流程后,让我们来做一个更专业的应用 —— 智能写作助手。写作助手是 AI 最实用的应用场景之一,通过这个项目,你可以学习如何用提示词工程让 AI 完成不同的写作任务。 + +这个项目要支持多种写作模式,比如文章续写、内容改写、文案生成、邮件撰写等。用户可以调整创意度和输出长度等参数,控制 AI 的生成效果。还可以一键优化文本的语法和表达,让文字更专业。为了方便选择,可以一次生成多个版本,用户挑选最满意的。生成的内容要保存到历史记录中,方便查看和管理。 + +![](https://pic.yupi.icu/1/demoweb7.png) + +技术栈和聊天助手类似,使用 React + TypeScript + Vite,配合 Tailwind CSS。核心还是调用智谱 AI API,数据用 LocalStorage 保存。 + + + +### 开发步骤 + +1)设计提示词模板 + +开发的第一步是设计提示词模板。在开始写代码之前,先设计好不同写作任务的提示词。创建一个 `prompts.md` 文件,定义各种写作模式的提示词: + +```markdown +# 写作助手提示词模板 + +## 文章续写 +请继续写下面的文章,保持风格一致,内容连贯: +[用户输入的内容] + +## 内容改写 +请改写下面的内容,使其更加流畅、专业: +[用户输入的内容] + +## 内容扩展 +请扩展下面的内容,增加更多细节和例子: +[用户输入的内容] + +## 内容总结 +请总结下面的内容,提取核心要点: +[用户输入的内容] + +## 邮件撰写 +请写一封[正式/友好]的邮件,主题是:[主题] + +## 文案生成 +请为[产品名称]写一段[风格]风格的营销文案 +``` + +提示词是 AI 应用的核心,好的提示词能让 AI 生成更好的结果。一个好的提示词通常包含 3 个要素:明确的任务描述、充足的上下文信息、清晰的输出格式要求。 + +![](https://pic.yupi.icu/1/promptcompare%E5%A4%A7.jpeg) + +举个例子,如果你想让 AI 写一篇文章,不要只说 “帮我写一篇文章”,而要说清楚主题、读者对象、字数要求、包含哪些内容。比如: + +```markdown +请写一篇关于 AI 编程的科普文章,面向零基础读者,通俗易懂,多举例子,字数 800-1000 字,要包含什么是 AI 编程、为什么要学、如何入门。 +``` + +这样 AI 才知道应该怎么写。 + +如果是改写内容,要告诉 AI 这段内容的背景。比如: + +```markdown +这是一篇技术博客的开头段落,请改写得更吸引人,同时保持专业性。 +``` + +这样 AI 才知道应该往什么方向改。 + +指定输出格式也很重要。如果你想让 AI 总结文章,可以明确要求: + +```markdown +请总结这篇文章,输出格式: +1. 核心观点(3-5 条) +2. 关键数据(如果有) +3. 结论(一句话) +``` + +这样生成的结果更规范,更符合你的需求。 + +有时候,给 AI 一些示例效果会更好。比如让 AI 写营销文案,你可以先给几个示例,让它参考风格。这种方法叫 Few-shot Learning,在很多场景下都很有效。 + +2)写需求文档 + +设计好提示词模板后,就可以写需求文档了。创建 `PRD.md` 文件: + +```markdown +# 智能写作助手 PRD + +## 核心功能 +1. 左右分栏布局,左侧输入,右侧显示生成结果 +2. 支持 6 种写作模式:续写、改写、扩展、总结、邮件、文案 +3. 可以调整创意度(temperature)和输出长度 +4. 生成的内容要流式显示 +5. 有"优化提示词"按钮,AI 帮用户优化描述 +6. 保存生成历史 + +## 界面要求 +- 顶部:大标题 +- 输入区:大文本框(多行) +- 参数区:尺寸选择、风格选择 +- 按钮区:优化提示词、生成内容 +- 展示区:显示生成的内容 + 复制按钮 +- 侧边栏:历史记录 +``` + +3)和 AI 对话开发 + +有了文档,就可以和 AI 对话开发了。 + +第一步,创建基础界面: + +``` +请根据 PRD.md 创建智能写作助手的界面: +1. 左右分栏布局 +2. 左侧:模式选择下拉框 + 输入文本框 + 生成按钮 +3. 右侧:显示生成的内容 +4. 使用 Tailwind CSS,界面要美观 +``` + +第二步,实现提示词模板: + +``` +创建 promptTemplates.ts 文件,根据 prompts.md 中的模板,实现 6 种写作模式的提示词函数。每个函数接收用户输入,返回完整的提示词。 +``` + +这样就把提示词逻辑封装好了,不同的写作模式用不同的提示词。 + +第三步,实现生成功能: + +``` +实现内容生成功能: +1. 用户选择模式,输入内容,点击生成 +2. 根据选择的模式,生成对应的提示词 +3. 调用智谱 AI API,使用流式输出 +4. 在右侧实时显示生成的内容 +5. 支持 Markdown 渲染 +``` + +第四步,添加参数调整: + +``` +添加高级设置面板: +1. 创意度滑块(temperature: 0-1) +2. 输出长度滑块(max_tokens: 100-2000) +3. 这些参数要传递给 API 调用 +4. 可以折叠/展开高级设置 +``` + +temperature 值会影响输出的创意程度。 + +- 0-0.3 比较保守,适合事实性内容 +- 0.4-0.7 比较平衡,适合大多数场景 +- 0.8-1.0 很有创意,适合创意写作。 + +第五步,添加历史记录: + +``` +实现历史记录功能: +1. 每次生成后,保存到 LocalStorage +2. 保存内容:提示词、生成结果、生成时间 +3. 左侧显示历史记录列表 +4. 点击历史记录可以查看之前的内容 +5. 支持删除历史记录 +``` + + + +### 提示词优化技巧 + +如果你不确定提示词是否够好,可以让 AI 帮你优化。比如你可以这样问: + +``` +我想让 AI 帮我改写文章,让文章更专业。我现在的提示词是:"请改写这段话"。请帮我优化这个提示词,让 AI 生成更好的结果。 +``` + +AI 会给你一个更详细、更有效的提示词,比如: + +```markdown +这是一篇技术博客的开头段落,请改写得更吸引人,同时保持专业性。要求: +1. 用更生动的语言 +2. 保持技术准确性 +3. 字数控制在 200 字左右 +``` + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加更多写作模板,支持论文、报告、小说等不同类型的写作;支持自定义提示词模板,让用户可以创建自己的模板;添加多语言翻译功能,一键翻译成其他语言;实现批量生成,一次生成多个版本供选择;添加文本对比功能,对比不同版本的差异。 + + + +## 四、项目实战 - AI 图片生成器 + +从文本生成到图片生成,让我们来做一个更酷的 AI 应用。AI 图片生成是最酷的 AI 应用之一,通过简单的文字描述,就能生成精美的图片。这个项目可以让你学习如何调用图片生成 API。 + +这个项目的核心是文字生成图片。用户输入描述,选择尺寸和风格,点击生成就能得到图片。为了帮助用户写出更好的提示词,可以添加一个 “优化提示词” 功能,让 AI 帮用户把简单的描述扩展成详细的提示词。生成的图片要保存到历史记录,并且支持下载。 + +![](https://pic.yupi.icu/1/demoweb8.png) + +技术栈和前面的项目类似,主要是调用图片生成 API。智谱 AI 也提供了图片生成能力,你可以使用同一个 API Key,[访问官方获取](https://bigmodel.cn)。 + + + +### 开发步骤 + +1)了解图片生成 API + +开发的第一步是了解图片生成 API。图片生成 API 的主要参数包括: + +- prompt:图片描述(最重要) +- size:图片尺寸(比如 1024x1024) +- quality:质量(标准或高清) +- style:风格(写实或艺术) + +不同的参数组合会生成不同效果的图片。 + +2)写需求文档 + +然后写需求文档 `PRD.md`: + +```markdown +# AI 图片生成器 PRD + +## 核心功能 +1. 用户输入图片描述,点击生成 +2. 可以选择图片尺寸和风格 +3. 生成过程显示加载动画(通常需要 10-30 秒) +4. 生成后显示图片,可以下载 +5. 有"优化提示词"按钮,AI 帮用户优化描述 +6. 保存生成历史 + +## 界面要求 +- 顶部:大标题 +- 输入区:大文本框(多行) +- 参数区:尺寸选择、风格选择 +- 按钮区:优化提示词、生成图片 +- 展示区:显示生成的图片 + 下载按钮 +- 侧边栏:历史记录 +``` + +3)与 AI 对话开发 + +有了文档,就可以和 AI 对话开发了。 + +第一步,创建基础界面: + +``` +请根据 PRD.md 创建 AI 图片生成器的界面: +1. 输入框:用户输入图片描述 +2. 参数选择:尺寸(3 个选项)、风格(2 个选项) +3. 两个按钮:优化提示词、生成图片 +4. 图片展示区 +使用 Tailwind CSS,界面要美观。 +``` + +第二步,实现图片生成功能: + +``` +实现图片生成功能: +1. 调用智谱 AI 图片生成 API +2. 发送 prompt、size、style 参数 +3. 生成过程显示加载动画和提示文字 +4. 生成成功后显示图片 +5. 错误时显示友好提示 +``` + +图片生成通常需要 10 ~ 30 秒,所以加载提示很重要,要让用户知道正在生成,不是卡住了。 + +第三步,实现提示词优化功能: + +``` +实现提示词优化功能: +当用户点击"优化提示词"按钮时: +1. 把用户输入的简单描述发送给 AI +2. 让 AI 扩展成详细的图片生成提示词 +3. 提示词要包含:主体、风格、光线、色彩、构图等细节 +4. 把优化后的提示词填回输入框 +``` + +这个功能很实用,可以帮助不会写提示词的用户生成更好的图片。 + +第四步,添加历史记录: + +``` +实现历史记录功能: +1. 每次生成成功后,保存到 LocalStorage +2. 保存内容:提示词、图片 URL、生成时间 +3. 左侧显示历史记录列表(缩略图 + 提示词) +4. 点击历史记录可以查看大图 +5. 支持删除历史记录 +``` + +第五步,添加下载功能: + +``` +实现图片下载功能: +点击下载按钮时,下载当前显示的图片。 +文件名格式:ai-image-[时间戳].png +``` + + + +### 图片生成提示词技巧 + +图片生成的质量很大程度上取决于提示词。一个好的提示词通常包含这些元素:主体(画什么)、动作或状态(在做什么)、环境背景(在哪里)、风格(什么风格)、光线(什么光线)、色彩(什么色调)、质量词(高清 / 4K 等)。 + +比如,如果你想生成一只猫的图片,可以这样描述: + +```markdown +一只可爱的橘猫,坐在窗台上看着外面的雨,温暖的室内光线,柔和的色调,细腻的毛发质感,景深效果,高清画质,4K。 +``` + +这样的描述包含了所有关键要素,生成的图片质量会更好。 + +关于风格,你可以用一些关键词来指定。写实风格用 photorealistic、realistic、detailed;卡通风格用 cartoon style、anime style、cute;油画风格用 oil painting、artistic、impressionist;水彩风格用 watercolor、soft colors;赛博朋克风格用 cyberpunk、neon lights、futuristic。 + +质量词也很重要,比如 high quality、detailed、4K、8K、professional、masterpiece 等,这些词能让 AI 生成更精细的图片。 + +如果你不确定怎么写提示词,可以让 AI 帮你。比如你想生成一张图片,内容是一个程序员在咖啡厅写代码。你可以告诉 AI: + +``` +我想生成一张图片,内容是:一个程序员在咖啡厅写代码。请帮我把这个描述扩展成详细的图片生成提示词。 +``` + +AI 会给你一个详细的描述,包含场景、光线、色调、构图等各个方面。比如: + +```markdown +一位年轻的程序员坐在温馨的咖啡厅靠窗位置,专注地在笔记本电脑上写代码,桌上放着一杯热气腾腾的拿铁咖啡,温暖的下午阳光透过窗户洒在桌面上,背景是模糊的咖啡厅环境,柔和的光线,温暖的色调,电影感构图,景深效果,高清画质,专业摄影。 +``` + +💡 如果用的是国外的 AI 绘图模型,英文提示词的效果可能会更好哦。 + + + +### 成本控制建议 + +需要注意的是,图片生成比文本生成贵很多,要注意控制成本。开发测试时用标准质量就够了,不需要用高清质量。优化好提示词再生成,避免反复尝试浪费额度。如果预算有限,可以考虑使用更便宜的替代方案。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加图片编辑功能,基于现有图片修改;支持批量生成,一次生成多张图片;添加风格预设,一键选择常用风格;实现图片放大功能,查看细节;甚至可以添加社区分享功能,让用户分享自己生成的图片。 + + + +## 五、项目实战 - 语音识别应用 + +最后,让我们来做一个涉及音频处理的 AI 应用。语音识别可以让你的应用支持语音输入,大大提升用户体验。这个项目可以让你学习如何处理音频数据,调用语音识别 API。 + +这个项目要实现语音录制和识别功能。用户点击按钮开始录音,再点击停止,然后将语音转换为文字。要支持多种语言,识别结果可以编辑,并保存到历史记录中。 + +![](https://pic.yupi.icu/1/demoweb9.png) + +录音功能使用浏览器自带的 MediaRecorder API,不需要额外的库。语音识别调用智谱 AI 的语音识别能力,[访问官方获取 API Key](https://bigmodel.cn/)。其他技术栈和前面的项目类似。 + + + +### 开发步骤 + +1)了解语音识别 API + +开发的第一步是了解语音识别 API。语音识别 API 的调用很简单:上传音频文件,指定语言(可选),返回识别的文字。 + +2)写需求文档 + +然后写需求文档 `PRD.md`: + +```markdown +# 语音识别应用 PRD + +## 核心功能 +1. 大大的录音按钮,点击开始录音,再点击停止 +2. 录音时按钮变红色,有动画效果 +3. 停止后显示"开始识别"按钮 +4. 识别过程显示加载提示 +5. 识别结果显示在下方,可以编辑 +6. 保存识别历史 + +## 界面要求 +- 简洁的单页面 +- 中央大圆形录音按钮 +- 识别结果区域 +- 底部历史记录列表 +``` + +3)与 AI 对话开发 + +有了文档,就可以和 AI 对话开发了。 + +第一步,实现录音功能: + +``` +请实现浏览器录音功能: +1. 使用 MediaRecorder API 录制音频 +2. 需要请求麦克风权限 +3. 点击按钮开始录音,再点击停止 +4. 录音时按钮变红色,有脉冲动画 +5. 停止后保存音频数据(Blob 格式) +``` + +这个提示词说明了要用什么技术,实现什么功能。MediaRecorder API 是浏览器提供的录音接口,不需要额外安装库,非常方便。 + +第二步,实现语音识别: + +``` +实现语音识别功能: +1. 调用智谱 AI 语音识别 API +2. 上传录音的音频文件 +3. 指定语言为中文 +4. 显示识别结果 +5. 错误时显示友好提示 +``` + +第三步,优化界面和体验: + +``` +优化界面和用户体验: +1. 录音按钮要大且醒目(直径 120px) +2. 识别结果区域要支持编辑 +3. 添加复制按钮,方便复制识别结果 +4. 识别过程显示加载动画和提示文字 +5. 整体使用简洁现代的设计 +``` + +第四步,添加历史记录: + +``` +实现历史记录功能: +1. 每次识别成功后保存到 LocalStorage +2. 保存内容:识别文本、时间戳 +3. 底部显示历史记录列表 +4. 点击历史记录可以查看详情 +5. 支持删除历史记录 +``` + + + +### 开发技巧 + +在开发过程中,有几个技巧需要注意。首先是处理麦克风权限,第一次使用时浏览器会询问用户是否允许访问麦克风。如果用户拒绝,要给出友好提示:“需要麦克风权限才能录音,请在浏览器设置中允许访问麦克风”,并提供重新请求权限的按钮。 + +其次是音频格式处理。MediaRecorder 录制的音频格式可能是 webm,大部分语音识别 API 都支持这个格式,如果不支持可以让 AI 帮你转换格式。 + +第三是录音时长限制。为了避免文件太大和识别时间太长,可以限制录音时长,比如最长录音 60 秒。录音时显示倒计时,到达时间自动停止。还可以实时显示录音时长,让用户知道录了多久。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加语音翻译功能,识别后自动翻译成其他语言;支持实时识别,边说边识别;添加关键词提取功能,自动提取重要信息;支持多人对话识别,区分不同说话人;添加字幕生成功能,给视频生成字幕;甚至可以集成到其他应用,比如聊天助手,让聊天助手支持语音输入。 + + + +## 写在最后 + +通过这 4 个 AI 应用项目,你已经学习了 AI 应用开发的基本流程:从简单的聊天助手,到专业的写作助手,从酷炫的图片生成器,到实用的语音识别应用。每个项目都让你掌握了不同的 AI 能力。 + +AI 应用开发的门槛已经非常低了,你不需要懂复杂的机器学习算法,只需要会调用 API、设计好的提示词,就能做出很酷的应用。如果你想学习更多的 AI 应用开发技巧和最佳实践,可以参考本教程的经验技巧板块。 + +掌握了 AI 应用开发后,在下一篇文章中,我会带你挑战更复杂的全栈应用开发,学习如何处理前后端和数据库。让我们继续前进! + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/04 Vibe Coding 全栈应用开发.md b/Vibe Coding 零基础教程/20 项目实战/04 Vibe Coding 全栈应用开发.md new file mode 100644 index 0000000..0184ac8 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/04 Vibe Coding 全栈应用开发.md @@ -0,0 +1,547 @@ +# Vibe Coding 全栈应用开发 + + +你好,我是鱼皮。 + +这篇文章,我会带你做 3 个完整的全栈项目:个人博客系统、简易问答社区、在线商城(Mini 版)。 + +什么是全栈应用? + +简单来说,就是既有前端界面,又有后端服务,还有数据库存储的完整应用。用户在前端操作,数据通过后端处理,最终保存到数据库中。这些项目会让你学习如何用 Vibe Coding 的方式开发前后端,处理用户认证、数据库操作等真实场景。 + +需要先说明的是,本节教程更多的是做一个思路和项目开发流程的指导,目的是引导大家学会使用 Vibe Coding 开发项目的方法,需要大家自行动手实践。如果你需要更完整的 Vibe Coding 图文和视频教程,可以看看鱼皮的原创项目实战部分。 + + + +## 一、全栈开发基础知识 + +在开始做项目之前,先了解一下全栈开发的基本概念。 + +全栈开发包括三个部分:前端(用户看到的界面)、后端(处理业务逻辑)、数据库(存储数据)。 + +前端负责展示数据和接收用户输入,后端负责处理请求和业务逻辑,数据库负责持久化存储。三者通过 API 接口进行通信。 + +![](https://pic.yupi.icu/1/fullstackarchitecture%E5%A4%A7.jpeg) + +举个例子,当用户在博客网站上发布一篇文章时,前端会收集文章的标题、内容等信息,然后发送 HTTP 请求给后端。后端收到请求后,会验证数据是否合法,然后调用数据库接口把文章保存到数据库中。保存成功后,后端返回成功响应给前端,前端显示 “发布成功” 的提示。 + +主流的全栈技术栈有很多选择。对于 Vibe Coding 来说,我推荐使用现代化的、AI 友好的技术栈。前端可以用 React 或 Vue,后端可以用 Node.js(Express、Nest.js)或 Python(FastAPI),数据库可以用 MySQL、PostgreSQL 或 MongoDB。 + +但其实,具体用什么技术不是最重要的,重要的是理解全栈开发的思路。掌握了思路,换个技术栈也能很快上手。 + +用 Vibe Coding 开发全栈应用有个巨大的优势:你不需要精通前端和后端的所有细节,只需要知道要实现什么功能,AI 会帮你生成代码。 + +比如,你只需要告诉 AI:“创建一个用户注册接口,接收用户名、邮箱、密码,验证后保存到数据库。” + +AI 就能帮你生成完整的后端代码,包括参数验证、密码加密、数据库操作等。这大大降低了全栈开发的门槛,让你可以专注于业务逻辑,而不是纠结于技术细节。 + + + +## 二、项目实战 - 个人博客系统 + +博客系统是最经典的全栈项目之一,涉及文章发布、分类管理、评论互动等功能。通过这个项目,你可以学习如何处理 CRUD(增删改查)操作,以及用户认证等基础功能。 + +这个博客系统要支持文章的发布、编辑、删除和查看。文章可以分类,支持标签。用户可以注册登录,发布自己的文章。访客可以浏览文章,但不能发布。文章支持 Markdown 格式,可以添加封面图。首页显示文章列表,支持分页和搜索。 + +![](https://pic.yupi.icu/1/demoweb10.png) + +技术选型上,前端使用 React + TypeScript + Vite,样式用 Tailwind CSS。后端使用 Node.js + Express,数据库用 MySQL。用户认证用 JWT(JSON Web Token)。文章编辑器可以复用之前做过的 Markdown 编辑器。 + + + +### 开发步骤 + +1)设计数据库 + +开发的第一步是设计数据库。在开始写代码之前,先设计数据库结构。创建一个 `database.md` 文件,定义需要哪些表,每个表有哪些字段。 + +比如用户表需要:id(主键)、username(用户名,唯一)、email(邮箱,唯一)、password(密码,加密存储)、avatar(头像 URL)、created_at(创建时间)。 + +文章表需要:id、title(标题)、content(内容,Markdown 格式)、cover(封面图 URL)、category(分类)、tags(标签,JSON 数组)、author_id(作者 ID,外键关联 users)、views(浏览次数)、created_at、updated_at。 + +分类表需要:id、name(分类名称)、description(分类描述)。 + +2)写需求文档 + +设计好数据库后,就可以写需求文档了。创建 `PRD.md` 文件: + +```markdown +# 个人博客系统 PRD + +## 核心功能 + +### 用户功能 +- 注册:用户名、邮箱、密码 +- 登录:返回 JWT token +- 个人中心:查看和编辑个人信息 + +### 文章功能 +- 发布文章:标题、内容、分类、标签、封面 +- 编辑文章:修改已发布的文章 +- 删除文章:只能删除自己的文章 +- 查看文章:显示文章详情,浏览次数 +1 +- 文章列表:支持分页、分类筛选、搜索 + +### 前端页面 +- 首页:文章列表 +- 文章详情页 +- 写文章页(需要登录) +- 个人中心页(需要登录) +- 登录/注册页 +``` + +3)与 AI 对话开发后端 + +有了文档,就可以和 AI 对话开发后端了。打开 Cursor,开始和 AI 对话。 + +第一步,初始化后端项目: + +``` +请创建一个 Node.js + Express 后端项目: +1. 初始化项目,安装 express、mysql2、jsonwebtoken、bcrypt 等依赖 +2. 创建基本的项目结构:src/routes(路由)、src/controllers(控制器)、src/models(数据模型)、src/middleware(中间件)、src/config(配置) +3. 配置数据库连接 +``` + +这个提示词说明了要创建什么项目,安装哪些依赖,项目结构是什么样的。 + +第二步,创建数据库表: + +``` +根据 database.md 中的设计,创建数据库表的 SQL 语句。然后创建一个初始化脚本,自动创建这些表。 +``` + +AI 会根据你的数据库设计,生成创建表的 SQL 语句。 + +第三步,实现用户注册和登录: + +``` +实现用户注册和登录功能: + +注册接口(POST /api/auth/register): +- 接收 username、email、password +- 验证参数(用户名 3-20 字符,邮箱格式正确,密码至少 6 位) +- 检查用户名和邮箱是否已存在 +- 密码用 bcrypt 加密 +- 保存到数据库 +- 返回成功信息 + +登录接口(POST /api/auth/login): +- 接收 username、password +- 验证用户是否存在 +- 验证密码是否正确 +- 生成 JWT token(有效期 7 天) +- 返回 token 和用户信息 +``` + +这个提示词详细说明了两个接口的功能要求。AI 会实现完整的注册和登录逻辑,包括参数验证、密码加密、JWT 生成等。 + +第四步,实现文章 CRUD: + +``` +实现文章的增删改查功能: + +创建文章(POST /api/posts): +- 需要登录(验证 JWT token) +- 接收 title、content、category、tags、cover +- author_id 从 token 中获取 +- 保存到数据库 +- 返回文章信息 + +获取文章列表(GET /api/posts): +- 支持分页(page、pageSize) +- 支持分类筛选(category) +- 支持搜索(keyword,搜索标题和内容) +- 返回文章列表和总数 + +获取文章详情(GET /api/posts/:id): +- 返回文章详情 +- 浏览次数 +1 + +更新文章(PUT /api/posts/:id): +- 需要登录 +- 只能更新自己的文章 +- 更新指定字段 + +删除文章(DELETE /api/posts/:id): +- 需要登录 +- 只能删除自己的文章 +``` + +这个提示词包含了文章的所有操作。AI 会实现完整的 CRUD 功能,包括权限验证、数据查询等。 + +4)与 AI 对话开发前端 + +后端开发完成后,就可以开发前端了。建议先用 Postman 或类似工具测试后端接口,确保接口正常工作后再开发前端。这样可以避免前后端同时出问题,不知道问题出在哪里。 + +第一步,创建前端项目: + +``` +创建 React + TypeScript + Vite 前端项目,安装 react-router-dom、axios、react-markdown 等依赖。配置路由: +- / 首页(文章列表) +- /post/:id 文章详情 +- /write 写文章(需要登录) +- /profile 个人中心(需要登录) +- /login 登录 +- /register 注册 +``` + +第二步,实现用户认证: + +``` +实现用户认证功能: +1. 创建 AuthContext,管理登录状态和用户信息 +2. Token 存储在 localStorage +3. 封装 axios,自动在请求头添加 token +4. 创建 ProtectedRoute 组件,保护需要登录的页面 +5. 实现登录和注册页面 +``` + +这个提示词说明了用户认证的实现方式。AuthContext 用来管理全局的登录状态,ProtectedRoute 用来保护需要登录才能访问的页面。 + +第三步,实现文章列表页: + +``` +实现首页文章列表: +1. 获取文章列表,显示标题、封面、分类、作者、时间 +2. 支持分页,每页 10 条 +3. 支持分类筛选(顶部分类标签) +4. 支持搜索(搜索框) +5. 点击文章跳转到详情页 +``` + +第四步,实现文章详情页: + +``` +实现文章详情页: +1. 根据 ID 获取文章详情 +2. 使用 react-markdown 渲染文章内容 +3. 显示作者信息、发布时间、浏览次数 +4. 如果是自己的文章,显示编辑和删除按钮 +``` + +第五步,实现写文章页: + +``` +实现写文章页: +1. 使用之前做的 Markdown 编辑器 +2. 输入标题、选择分类、添加标签、上传封面 +3. 左侧编辑,右侧实时预览 +4. 保存按钮,调用创建文章接口 +5. 如果是编辑模式,加载已有文章数据 +``` + + + +### 开发技巧 + +在开发全栈应用时,有几个技巧可以提高效率。首先,使用环境变量管理配置。数据库连接信息、JWT 密钥等敏感信息不要硬编码在代码里,要用环境变量。创建 `.env` 文件,把配置放进去,然后在代码中通过 `process.env` 读取。 + +其次,要做好错误处理。API 调用可能失败,数据库操作可能出错,要捕获这些错误并返回友好的提示。可以让 AI 帮你创建一个统一的错误处理中间件。 + +最后,开发时可以使用 nodemon 自动重启后端服务,使用 Vite 的热更新功能自动刷新前端页面,这样修改代码后不需要手动重启,大大提高开发效率。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加评论系统,用户可以评论文章;添加点赞功能,给喜欢的文章点赞;支持文章草稿,保存未发布的文章;集成图片上传,上传到云存储;添加文章归档,按月份归档;支持 RSS 订阅,方便读者订阅;优化 SEO,让文章更容易被搜索引擎收录。 + + + +## 三、项目实战 - 问答社区 + +完成了博客系统后,让我们来挑战一个更复杂的项目 —— 问答社区。问答社区比博客系统更复杂一些,涉及问题、回答、点赞、采纳等互动功能。通过这个项目,你可以学习如何处理更复杂的数据关系和用户交互。 + +这个问答社区要支持用户提问和回答。用户可以发布问题,其他用户可以回答。问题和回答都支持点赞。提问者可以采纳最佳答案。首页显示问题列表,支持按热度、最新、未解决等排序。每个问题有标签,可以按标签筛选。用户有积分系统,提问、回答、被采纳都会获得积分。 + +![](https://pic.yupi.icu/1/demoweb11.png) + +技术栈和博客系统类似,前端用 React + TypeScript + Vite,后端用 Node.js + Express,数据库用 MySQL。 + + + +### 开发步骤 + +1)设计数据库 + +开发的第一步是设计数据库。创建 `database.md` 文件: + +```markdown +# 问答社区数据库设计 + +## 用户表(users) +- id、username、email、password、avatar +- points: 积分 +- created_at + +## 问题表(questions) +- id、title、content(Markdown) +- tags: 标签(JSON 数组) +- author_id: 提问者 ID +- views: 浏览次数 +- answers_count: 回答数 +- votes: 点赞数 +- is_solved: 是否已解决 +- created_at、updated_at + +## 回答表(answers) +- id、content(Markdown) +- question_id: 问题 ID +- author_id: 回答者 ID +- votes: 点赞数 +- is_accepted: 是否被采纳 +- created_at、updated_at + +## 点赞表(votes) +- id、user_id、target_type(question/answer) +- target_id: 目标 ID +- created_at +``` + +2)与 AI 对话开发 + +设计好数据库后,就可以和 AI 对话开发了。开发流程和博客系统类似,但要注意几个关键点。 + +第一个关键点是积分系统: + +``` +实现积分系统: +- 发布问题:-5 积分 +- 回答问题:+10 积分 +- 回答被采纳:+30 积分 +- 问题被点赞:+5 积分 +- 回答被点赞:+10 积分 + +在相应的操作中自动更新用户积分。 +``` + +这个提示词说明了积分的规则。AI 会在实现功能时自动处理积分变化,比如用户回答问题后,自动给用户加 10 积分。 + +第二个关键点是点赞功能: + +``` +实现点赞功能: +- 用户可以点赞问题和回答 +- 每个用户对同一个目标只能点赞一次 +- 点赞后目标的 votes 数量 +1 +- 取消点赞后 votes 数量 -1 +- 返回用户是否已点赞的状态 +``` + +点赞功能要防止重复点赞,所以需要记录用户的点赞行为。返回数据时要告诉前端用户是否已点赞,这样前端才能正确显示点赞按钮的状态。 + +第三个关键点是采纳答案: + +``` +实现采纳答案功能: +- 只有提问者可以采纳答案 +- 每个问题只能采纳一个答案 +- 采纳后问题状态变为已解决 +- 回答者获得积分奖励 +``` + +这个逻辑要在后端实现,确保权限控制正确。 + +第四个关键点是问题列表排序: + +``` +实现问题列表的多种排序: +- 最新:按创建时间倒序 +- 热门:按点赞数倒序 +- 未解决:筛选 is_solved = false 的问题 +支持按标签筛选。 +``` + + + +### 开发技巧 + +在开发问答社区时,有几个需要注意的地方。首先是数据一致性,比如点赞时,要同时更新点赞表和目标的 votes 数量,这两个操作要么都成功,要么都失败。可以让 AI 帮你实现数据库事务,确保数据一致性。 + +其次是性能优化。问题列表可能有很多数据,要做好分页。可以让 AI 帮你实现分页查询,每次只返回一页的数据,避免一次性加载太多数据导致页面卡顿。 + +另外,点赞状态的判断也很重要。在返回问题或回答列表时,要告诉前端当前用户是否已点赞,这样前端才能正确显示点赞按钮的状态(已点赞显示红色,未点赞显示灰色)。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加评论功能,对回答进行评论;添加关注功能,关注感兴趣的问题或用户;实现通知系统,有新回答时通知提问者;优化搜索功能,使用全文搜索提高搜索质量;添加排行榜,展示积分排名;实现徽章系统,完成成就获得徽章。 + + + +## 四、项目实战 - 在线商城 + +掌握了用户互动和积分系统后,让我们来做一个涉及交易流程的项目。在线商城是最复杂的全栈项目之一,涉及商品管理、购物车、订单处理等功能。通过这个项目,你可以学习如何处理电商业务逻辑。 + +这个 Mini 版商城要实现基本的电商功能。商品展示(列表和详情)、购物车(添加、删除、修改数量)、订单管理(创建订单、查看订单)、用户地址管理。不需要实现支付功能,订单创建后显示为待支付状态即可。这样可以降低开发难度,专注于核心业务流程。 + +![](https://pic.yupi.icu/1/demoweb12.png) + +技术栈和前面的项目类似,前端用 React + TypeScript + Vite,后端用 Node.js + Express,数据库用 MySQL。 + + + +### 开发步骤 + +1)设计数据库 + +开发的第一步是设计数据库。创建 `database.md` 文件: + +```markdown +# 在线商城数据库设计 + +## 用户表(users) +- id、username、email、password、avatar +- created_at + +## 商品表(products) +- id、name、description、price、stock(库存) +- images: 图片 URL(JSON 数组) +- category: 分类 +- created_at、updated_at + +## 购物车表(cart_items) +- id、user_id、product_id、quantity(数量) +- created_at + +## 地址表(addresses) +- id、user_id、name(收货人)、phone、province、city、district、detail +- is_default: 是否默认地址 +- created_at + +## 订单表(orders) +- id、order_no(订单号)、user_id、address_id +- total_price: 总价 +- status: 状态(待支付、已支付、已发货、已完成、已取消) +- created_at、updated_at + +## 订单商品表(order_items) +- id、order_id、product_id、quantity、price(下单时的价格) +``` + +2)与 AI 对话开发 + +设计好数据库后,就可以和 AI 对话开发了。开发流程和前面的项目类似,但要注意几个关键点。 + +第一个关键点是购物车功能: + +``` +实现购物车功能: + +添加到购物车(POST /api/cart): +- 接收 product_id、quantity +- 如果购物车已有该商品,数量累加 +- 如果是新商品,创建新记录 +- 检查库存是否充足 + +获取购物车(GET /api/cart): +- 返回购物车商品列表 +- 包含商品详情(名称、价格、图片等) +- 计算总价 + +更新数量(PUT /api/cart/:id): +- 更新指定商品的数量 +- 检查库存 + +删除商品(DELETE /api/cart/:id): +- 从购物车删除指定商品 +``` + +购物车功能要处理好商品数量的累加,还要检查库存,避免加入超过库存的数量。 + +第二个关键点是订单功能: + +``` +实现订单功能: + +创建订单(POST /api/orders): +- 接收 address_id 和购物车商品 ID 列表 +- 检查库存是否充足 +- 计算总价 +- 生成订单号(时间戳 + 随机数) +- 创建订单和订单商品记录 +- 扣减库存 +- 清空购物车中已下单的商品 +- 使用数据库事务确保数据一致性 + +获取订单列表(GET /api/orders): +- 返回用户的订单列表 +- 支持按状态筛选 +- 包含订单商品详情 + +获取订单详情(GET /api/orders/:id): +- 返回订单详情 +- 包含收货地址、订单商品列表 + +取消订单(PUT /api/orders/:id/cancel): +- 只能取消待支付的订单 +- 恢复库存 +- 更新订单状态为已取消 +``` + +这个提示词包含了订单的所有操作。创建订单是最复杂的,涉及多个表的操作,要使用数据库事务确保数据一致性。 + +第三个关键点是地址管理: + +``` +实现地址管理功能: + +添加地址(POST /api/addresses): +- 接收收货人信息 +- 如果设置为默认地址,将其他地址的 is_default 设为 false + +获取地址列表(GET /api/addresses): +- 返回用户的地址列表 +- 默认地址排在前面 + +更新地址(PUT /api/addresses/:id): +- 更新指定地址 + +删除地址(DELETE /api/addresses/:id): +- 删除指定地址 +- 如果删除的是默认地址,将第一个地址设为默认 +``` + + + +### 开发技巧 + +在开发电商系统时,有几个关键点需要特别注意。首先是库存管理,创建订单时要检查库存,扣减库存时要使用数据库事务,确保不会出现超卖的情况。可以让 AI 帮你实现乐观锁或悲观锁来处理并发问题。 + +其次是订单号的生成。订单号要唯一,可以用时间戳加随机数,或者用雪花算法。可以让 AI 帮你实现一个订单号生成函数。 + +另外,购物车和订单的关系要处理好。创建订单时,要把购物车中的商品信息复制到订单商品表,而不是直接引用购物车。因为商品价格可能会变化,订单要保存下单时的价格,这样才能保证订单金额不会因为商品价格变化而变化。 + +最后,要做好数据校验。比如数量不能为负数,价格不能为负数,库存不能为负数等。可以让 AI 帮你在后端添加完整的参数校验,避免脏数据进入数据库。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加商品搜索和筛选,按价格、分类、销量等筛选;添加商品评价,用户可以评价购买的商品;实现优惠券系统,支持满减、折扣等优惠;集成支付功能,接入支付宝或微信支付;添加订单物流跟踪,查看物流信息;开发商家后台管理,管理商品和订单;实现商品推荐算法,根据用户喜好推荐商品。 + + + +## 写在最后 + +通过这 3 个全栈项目,你已经学习了完整的 Web 应用开发流程:从简单的博客系统,到复杂的问答社区,再到涉及交易流程的在线商城。每个项目都让你掌握了不同的业务场景和技术点。 + +全栈开发看起来很复杂,但用 Vibe Coding 的方式,你会发现其实并没有想象中那么难。关键是要理解业务逻辑,知道要实现什么功能,然后让 AI 帮你生成代码。如果你想学习更多的全栈开发技巧和最佳实践,可以参考本教程的经验技巧板块。 + +掌握了全栈应用开发后,在下一篇文章中,我会带你学习微信小程序开发,让你的应用可以在微信中运行,触达更多用户。 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/05 Vibe Coding 小程序开发.md b/Vibe Coding 零基础教程/20 项目实战/05 Vibe Coding 小程序开发.md new file mode 100644 index 0000000..c5f49d6 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/05 Vibe Coding 小程序开发.md @@ -0,0 +1,519 @@ +# Vibe Coding 小程序开发 + +你好,我是鱼皮。 + +在前面的文章中,我们做了 Web 应用,这些应用可以在浏览器中访问。现在,让我们学习如何开发微信小程序,让你的应用可以在微信中运行。 + +微信小程序是一种不需要下载安装就能使用的应用,它依托于微信这个超级 APP,拥有庞大的用户基础。对于个人开发者来说,小程序是一个很好的展示平台,开发成本低,用户触达容易。 + +这篇文章,我会带你做 2 个实用的小程序:记账小程序和打卡小程序。同时,我会详细讲解小程序的开发流程和上线全流程,让你能够独立完成一个小程序从开发到上线的全过程。 + +需要先说明的是,本节教程更多的是做一个思路和项目开发流程的指导,目的是引导大家学会使用 Vibe Coding 开发项目的方法,需要大家自行动手实践。如果你需要更完整的 Vibe Coding 图文和视频教程,可以看看鱼皮的原创项目实战部分。 + + + +## 一、小程序开发基础 + +在开始做项目之前,先了解一下小程序开发的基础知识。 + +小程序是一种轻量级的应用,不需要下载安装,用完即走。微信小程序是最流行的小程序平台,还有支付宝小程序、抖音小程序等。小程序的优势在于:开发成本低(相比原生 APP)、用户触达容易(微信用户基数大)、审核相对宽松、可以快速迭代。 + +小程序和 Web 应用有什么区别? + +简单来说,小程序运行在微信环境中,有一些特殊的 API 和限制。比如小程序可以调用微信的支付、分享、扫码等功能,但不能直接访问外部链接。从开发角度看,小程序使用的是类似 Vue 的语法,有自己的组件系统和生命周期。**如果你会 Web 开发,学习小程序会很快。** + +微信小程序使用的技术栈包括:WXML(类似 HTML)、WXSS(类似 CSS)、JavaScript。可以使用原生开发,也可以使用框架(如 Taro、uni-app)来开发跨平台小程序。对于 Vibe Coding 来说,我推荐使用原生开发,因为 AI 对原生语法的支持更好,生成的代码质量更高。 + +开发小程序需要准备几样东西: + +- 微信开发者账号(免费注册) +- 微信开发者工具(官方提供的 IDE) +- 一个项目创意 + +![微信开发者工具](https://pic.yupi.icu/1/image-20260112150540207.png) + +注册账号很简单,去微信公众平台注册一个小程序账号,选择个人类型即可。下载开发者工具也很简单,去官网下载对应系统的版本。 + +用 Vibe Coding 开发小程序和开发 Web 应用类似,只是语法稍有不同。你需要告诉 AI 你在开发微信小程序,它会生成符合小程序规范的代码。比如,你可以说:“请用微信小程序原生语法创建一个记账页面,包含金额输入、分类选择、备注输入。” AI 会生成 WXML、WXSS 和 JS 文件。 + +💡 如果你想系统学习小程序开发,可以阅读鱼皮在编程导航上 [免费的保姆级小程序学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190355448471554)。 + + + +## 二、项目实战 - 记账小程序 + +记账是一个很实用的功能,很多人都有记账的需求。做一个记账小程序,可以学习小程序的基本开发流程,包括数据存储、页面跳转、组件使用等。 + +这个记账小程序要实现基本的记账功能。用户可以添加收支记录,包括金额、类型(收入/支出)、分类(餐饮、交通、工资等)、备注、日期。首页显示记录列表和统计数据(本月收入、支出、结余)。支持按日期筛选记录。数据存储在本地,使用微信的本地存储 API。 + +![](https://pic.yupi.icu/1/demoweb13.png) + +使用微信小程序原生开发,不使用任何框架。数据存储使用 `wx.setStorageSync` 和 `wx.getStorageSync`。 + + + +### 开发步骤 + +1)第一步是注册小程序账号。去 [微信公众平台](https://mp.weixin.qq.com/) 注册一个小程序账号。选择个人类型,填写基本信息,完成注册。注册后会得到一个 AppID,开发时需要用到。 + +2)第二步是下载开发者工具。去 [微信开放文档](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) 下载微信开发者工具,安装后用微信扫码登录。 + +3)第三步是创建项目。打开开发者工具,点击新建项目,填写项目名称,选择项目目录,填入 AppID,选择不使用云服务。点击确定,会自动生成一个小程序项目模板。 + +4)第四步是了解项目结构。小程序项目的基本结构包括: + +- pages 目录:存放页面,每个页面有 wxml(页面结构)、wxss(页面样式)、js(页面逻辑)、json(页面配置)四个文件 +- utils 目录:存放工具函数 +- app.js:小程序逻辑 +- app.json:小程序配置 +- app.wxss:全局样式 + +5)现在可以用 Cursor 打开项目目录,开始和 AI 对话开发。 + +首先设计数据结构: + +``` +我要开发一个记账小程序,请帮我设计数据结构。 + +需要存储的信息: +- 金额 +- 类型(收入/支出) +- 分类(餐饮、交通、购物、工资等) +- 备注 +- 日期 + +请给出 JavaScript 对象的结构。 +``` + +AI 会帮你设计合理的数据结构,包括每个字段的类型和说明。 + +然后创建首页: + +``` +请用微信小程序原生语法创建首页(pages/index/index): + +顶部显示统计卡片: +- 本月收入(绿色) +- 本月支出(红色) +- 本月结余(蓝色) + +中间显示记录列表: +- 按日期分组显示 +- 每条记录显示:分类图标、分类名称、备注、金额 +- 收入显示绿色,支出显示红色 + +底部有一个大的"+"按钮,点击跳转到添加页面。 + +使用 Flex 布局,界面要美观。 +``` + +这个提示词详细说明了首页的布局和样式。AI 会生成完整的 WXML、WXSS 和 JS 代码。 + +接着实现数据存储: + +``` +创建 utils/storage.js 工具文件,封装数据存储操作: + +1. saveRecord(record):保存一条记录 +2. getRecords():获取所有记录 +3. deleteRecord(id):删除一条记录 +4. getMonthRecords(year, month):获取指定月份的记录 + +使用 wx.setStorageSync 和 wx.getStorageSync 存储数据。 +记录要有唯一 ID(可以用时间戳)。 +``` + +这样就把数据存储逻辑封装好了,后面用起来很方便。 + +然后创建添加页面: + +``` +创建添加记录页面(pages/add/add): + +顶部有两个 Tab:收入、支出 + +金额输入区: +- 大号的金额输入框 +- 显示"¥"符号 + +分类选择区: +- 宫格布局显示分类图标 +- 收入分类:工资、奖金、理财、其他 +- 支出分类:餐饮、交通、购物、娱乐、医疗、其他 +- 选中的分类高亮显示 + +备注输入: +- 单行文本输入框 + +日期选择: +- 默认今天 +- 点击可以选择日期 + +底部保存按钮: +- 点击保存记录并返回首页 +``` + +接着实现统计功能: + +``` +在首页实现统计功能: + +1. 计算本月总收入:筛选本月的收入记录,求和 +2. 计算本月总支出:筛选本月的支出记录,求和 +3. 计算本月结余:收入 - 支出 + +在页面加载时和返回时刷新统计数据。 +``` + +最后实现记录列表: + +``` +在首页实现记录列表: + +1. 获取所有记录,按日期倒序排列 +2. 按日期分组显示(今天、昨天、更早) +3. 每条记录显示分类图标、名称、备注、金额 +4. 长按记录可以删除 + +实现下拉刷新功能。 +``` + + + +### 开发技巧 + +在开发小程序时,有几个技巧可以提高效率。首先,要利用好微信开发者工具的调试功能。可以在模拟器中预览效果,也可以在真机上预览。真机预览需要用微信扫码,可以看到真实的运行效果。 + +其次,小程序的数据存储是同步的,使用 `wx.setStorageSync` 和 `wx.getStorageSync`。如果数据量大,建议使用异步版本 `wx.setStorage` 和 `wx.getStorage`,避免阻塞主线程。 + +另外,小程序的页面跳转有几种方式:`wx.navigateTo`(保留当前页面,可以返回)、`wx.redirectTo`(关闭当前页面,不能返回)、`wx.switchTab`(跳转到 tabBar 页面)、`wx.navigateBack`(返回上一页)。要根据场景选择合适的方式。 + +最后,小程序有一些限制,比如包大小不能超过 2MB(分包后每个包不超过 2MB),要注意控制图片大小和代码体积。可以使用图片压缩工具压缩图片,使用代码分包功能拆分代码。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加预算设置,设置每月预算,超支时提醒;添加图表展示,用图表显示收支趋势;支持分类管理,用户可以自定义分类;添加账单导出,导出为 Excel 文件;支持多账本,可以创建工作账本、生活账本等;集成云同步,使用微信云开发实现多设备同步。 + + + +## 三、项目实战 - 打卡小程序 + +完成了记账小程序后,让我们来做一个涉及日历和数据可视化的项目。打卡是一个很好的习惯养成工具,很多人用打卡来坚持学习、运动、早起等。做一个打卡小程序,可以学习小程序的日历组件、数据可视化等功能。 + +这个打卡小程序要实现习惯打卡功能。用户可以创建打卡项目(比如每天学习、每天运动),设置打卡目标(连续打卡天数)。每天可以打卡一次,打卡后显示打卡成功。首页显示所有打卡项目和打卡状态。日历视图显示打卡历史,打卡的日期标记为绿色。统计数据显示总打卡天数、连续打卡天数、完成率等。 + +![](https://pic.yupi.icu/1/demoweb14.png) + +使用微信小程序原生开发,数据存储使用本地存储。日历组件可以使用第三方组件库(如 Vant Weapp)或自己实现。 + + + +### 开发步骤 + +1)开发的第一步是设计数据结构。告诉 AI: + +``` +我要开发一个打卡小程序,请帮我设计数据结构。 + +打卡项目: +- id +- name(项目名称,如"每天学习") +- target(目标天数) +- created_at(创建时间) + +打卡记录: +- id +- project_id(关联的项目) +- date(打卡日期,格式 YYYY-MM-DD) +- note(打卡备注,可选) +- created_at(打卡时间) + +请给出数据结构和存储方案。 +``` + +AI 会帮你设计合理的数据结构,并说明如何存储在本地。 + +2)创建项目列表页 + +告诉 AI: + +``` +创建首页(pages/index/index),显示打卡项目列表: + +每个项目卡片显示: +- 项目名称 +- 今日是否已打卡(已打卡显示绿色勾,未打卡显示灰色圆圈) +- 连续打卡天数 +- 总打卡天数 +- 进度条(已打卡天数/目标天数) + +底部有"添加项目"按钮。 + +点击项目卡片进入项目详情页。 +点击打卡按钮进行打卡。 +``` + +这个提示词说明了首页的布局和交互。AI 会生成完整的页面代码。 + +3)实现打卡功能 + +告诉 AI: + +``` +实现打卡功能: + +1. 检查今天是否已打卡 +2. 如果未打卡,创建打卡记录 +3. 保存到本地存储 +4. 显示打卡成功提示 +5. 刷新页面数据 + +打卡时可以添加备注(可选)。 +``` + +打卡功能要防止重复打卡,所以要先检查今天是否已打卡。 + +4)创建项目详情页 + +告诉 AI: + +``` +创建项目详情页(pages/detail/detail): + +顶部显示项目信息: +- 项目名称 +- 目标天数 +- 已打卡天数 +- 连续打卡天数 + +中间显示日历: +- 显示当前月份 +- 打卡的日期标记为绿色 +- 今天标记为蓝色边框 +- 可以切换月份 + +底部显示打卡记录列表: +- 按日期倒序显示 +- 显示日期、备注 + +右上角有删除项目按钮。 +``` + +5)实现统计功能 + +告诉 AI: + +``` +实现统计功能: + +1. 总打卡天数:该项目的所有打卡记录数 +2. 连续打卡天数:从今天往前数,连续打卡的天数 +3. 完成率:已打卡天数 / 目标天数 +4. 最长连续打卡:历史上最长的连续打卡天数 + +在项目详情页显示这些统计数据。 +``` + +连续打卡天数的计算比较复杂,要从今天往前遍历,检查每一天是否有打卡记录,直到遇到没有打卡的日期。AI 会帮你实现这个算法。 + +6)实现日历组件 + +告诉 AI: + +``` +实现日历组件: + +1. 显示当前月份的所有日期 +2. 打卡的日期标记为绿色背景 +3. 今天标记为蓝色边框 +4. 可以切换上个月/下个月 +5. 点击日期可以查看当天的打卡备注 + +使用 Grid 布局,每行 7 个日期(周日到周六)。 +``` + +日历组件的实现比较复杂,但 AI 可以帮你搞定。如果觉得自己实现太麻烦,也可以使用第三方组件库,比如 Vant Weapp。 + + + +### 开发技巧 + +在开发打卡小程序时,有几个技巧需要注意。首先是日期处理,JavaScript 的日期处理比较复杂,可以让 AI 帮你封装一些工具函数,比如获取当月天数、判断是否是今天、计算两个日期的天数差等。 + +其次是连续打卡天数的计算。要从今天往前遍历,检查每一天是否有打卡记录,直到遇到没有打卡的日期。可以让 AI 帮你实现这个算法,它会考虑各种边界情况。 + +另外,日历组件的实现比较复杂,如果觉得自己实现太麻烦,可以使用第三方组件库。Vant Weapp 是一个很好的小程序 UI 组件库,提供了日历组件。可以让 AI 帮你集成 Vant Weapp,使用它提供的日历组件。 + +最后,打卡数据可能会越来越多,要注意性能优化。可以只加载最近 3 个月的数据,更早的数据按需加载,避免一次性加载太多数据导致页面卡顿。 + + + +### 扩展思路 + +基础版完成后,可以继续扩展功能。比如添加打卡提醒,每天定时提醒用户打卡;实现打卡分享,生成打卡海报分享到朋友圈;添加打卡排行榜,和好友比拼谁坚持得更久;实现打卡奖励,连续打卡获得勋章;支持数据导出,导出打卡记录;集成云同步,使用微信云开发实现多设备同步。 + + + +## 四、小程序上线全流程 + +开发完成后,如何让小程序上线呢?这里详细讲解小程序的上线流程。 + +1)完善小程序信息 + +在微信公众平台,完善小程序的基本信息:小程序名称、简介、头像、类目(选择合适的类目)。个人类型的小程序有一些限制,比如不能使用支付功能、不能使用某些类目。如果需要这些功能,需要注册企业类型。 + +2)配置服务器域名 + +如果小程序需要调用后端 API,需要在微信公众平台配置服务器域名。只有配置了的域名才能在小程序中访问。注意,域名必须是 HTTPS 的,需要有 SSL 证书。如果是本地开发,可以在开发者工具中勾选"不校验合法域名"。 + +3)上传代码 + +在微信开发者工具中,点击右上角的 “上传” 按钮,填写版本号和项目备注,点击上传。上传后,代码会提交到微信服务器。 + +4)提交审核 + +在微信公众平台,进入 “版本管理”,可以看到刚才上传的版本。点击"提交审核",填写审核信息。审核信息包括:测试账号(如果需要登录)、测试说明(告诉审核人员如何测试)、隐私相关说明等。提交后,等待审核。审核时间说是 1 ~ 7 天,一般 1 ~ 2 天就能审核通过。 + +5)发布上线 + +审核通过后,会收到通知。在微信公众平台,点击 “发布” 按钮,小程序就正式上线了。上线后,用户可以通过搜索、扫码、分享等方式访问你的小程序。 + +6)版本更新 + +如果要更新小程序,重复上面的流程:上传代码 → 提交审核 → 发布上线。可以使用 “分阶段发布” 功能,先发布给部分用户,测试没问题后再全量发布。 + +![](https://pic.yupi.icu/1/weapp-workflow%E5%A4%A7.jpeg) + + + +### 常见审核问题 + +小程序审核可能会遇到一些问题,这里列举几个常见的。 + +1)功能不完整。审核人员发现功能无法正常使用,比如点击按钮没反应、页面显示错误等。要确保所有功能都能正常使用,提交前自己先完整测试一遍。 + +第二个是类目不符。小程序的功能和选择的类目不符。比如你做的是工具类小程序,但选择了社交类目。要选择合适的类目,如果不确定,可以咨询微信客服。 + +缺少必要说明。比如小程序需要获取用户位置,但没有说明用途。要在隐私政策中说明清楚,为什么需要这些权限,如何使用这些数据。 + +4)内容违规。小程序的内容违反了微信的规范,比如包含不当内容。要仔细阅读微信小程序运营规范,确保内容合规。 + +如果审核不通过,会收到拒绝原因。根据原因修改后,重新提交审核即可。 + +**不要灰心,很多小程序第一次都会被拒绝,这是正常的。** + + + +## 五、我上线《学习英雄》小程序的经历 + +最后,我想分享一下我上线《学习英雄》小程序的真实经历,希望能给你一些启发。 + +《学习英雄》是一个 AI 问答引导式学习小程序,用户可以输入想学习的主题,AI 自动生成相关的知识问答卡片,通过闯关答题的形式引导用户更轻松愉快地掌握知识。 + +![](https://pic.yupi.icu/1/%25E5%25B0%258F%25E7%25A8%258B%25E5%25BA%258F%25E6%25BC%2594%25E7%25A4%25BA%25E6%258B%25BC%25E5%259B%25BE.png) + +开发过程其实很快,用 AI 编程工具,基本上 1 天就完成了包含完整前后端和 AI 能力的小程序。但是你敢信,我竟然花了差不多 2 个月,才把这个小程序正式上线?! + +换到以前,我自己都不敢相信,记得大学的时候上线个小程序很快的,看来真的是时代变了。 + + + +### 完整的上线流程 + +1)小程序备案 + +以前压根儿是没有这一步的,但是自 2023 年 9 月 1 日起,所有新开发的微信小程序必须完成备案后才能上架。 + +备案操作是免费的,主要就是在后台填写一些个人/企业信息。但是审核周期大约 2 ~ 22 个工作日(含工信部审核)。我是在国庆节前提了备案,过了 12 天后才通过;如果不是假期,可能会快点吧。 + +2)小程序类目申请 + +由于我的小程序用到了 AI 大模型来做问答功能,需要添加 “深度合成-AI 问答类目”,否则无法通过代码发布审核。 + +![](https://pic.yupi.icu/1/image-20251203212944981.png) + +那我就按照修改指引添加类目呗,结果添加 AI 相关的类目是需要资质文件的!因为我用的是别人的大模型,需要有技术主体的《互联网信息服务算法备案》和《小程序主体与技术主体的合作协议》。 + +![](https://pic.yupi.icu/1/5b7bf1460d71ff74477082606e6e7cf8.png) + +什么?还要合作协议?!到这一步我估计会劝退一大波萌新,我刚看到的时候也头疼了。 + +![](https://pic.yupi.icu/1/image-20251203215116730.png) + +不过别慌,你用哪家的 AI 大模型服务,就直接去找对应的工作人员要就好了。比如我用的是阿里云大模型,直接去官网联系客服,他们的技术支持响应很快,也很热心。你只需要做到把自己的需求描述清楚,对方会帮你处理的。 + +![](https://pic.yupi.icu/1/image-20251203195218556.png) + +大概花费了 10 天左右,我顺利拿到了申请类目的材料,提交申请就好。 + +3)代码发布审核 + +感觉现在小程序的审核越来越严格了,尤其是刚开始做的小程序,很容易因为一些意想不到的原因被打回来。 + +比如我遇到的这个情况,由于小程序的某个按钮点击后没有响应,就被打回来了。 + +![](https://pic.yupi.icu/1/%25E5%25B0%258F%25E7%25A8%258B%25E5%25BA%258F%25E5%25AE%25A1%25E6%25A0%25B8-%25E4%25B8%258D%25E9%2580%259A%25E8%25BF%2587%25E7%259A%2584%25E5%258E%259F%25E5%259B%25A0.png) + +这锅我不背,谁让 AI 偷懒了呢?! + +于是我让团队的同学帮忙补了个点击弹窗,然后重新提交了审核。 + +![](https://pic.yupi.icu/1/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%AE%A1%E6%A0%B8-%E8%A1%A5%E4%BA%86%E4%B8%AA%E5%85%B3%E4%BA%8E%E6%88%91%E4%BB%AC%E7%9A%84%E4%BF%A1%E6%81%AF.png) + +经过 2 ~ 3 天左右,代码审核终于通过了。 + +4)然而由于我的小程序还涉及 “社交” 类目,需要进入第四步:小程序报备。 + +![](https://pic.yupi.icu/1/image-20251203214139938.png) + +当时看到这个 7 天 * 24h 的审核时长,我嘴里正在撕咬的鸡腿都变得索然无味了。。。 + +好在过了 7 天后,我的小程序终于发布上线了,真是不容易啊! + +来回顾下完整的流程吧: + +![](https://pic.yupi.icu/1/image-20251203195031382.png) + + + +### 经验总结 + +虽然我这次小程序上线花了近 2 个月,但其实中间有些空余的时间是我自己没来得及看到通知。不过就算只考虑必须的流程,差不多也要 1 个月了。 + +如果你只是想做个简单的工具小程序,不涉及 AI 功能和需要报备的类目(比如社交、金融、医疗等),应该能省不少时间。 + +![](https://pic.yupi.icu/1/0.png) + +不过我估计现在很多同学都有用 AI 做个《有 AI 功能的小程序》的想法,所以还是建议大家: + +1. 提前申请小程序的类目:如果涉及 AI 功能,尽早准备资质材料 +2. 先搞出最小可用版本:做一个 Demo 拿来过审、走完一次上线发布的流程 +3. 统筹安排时间:开发可能只要几天,但上线流程可能要几周甚至几个月 +4. 审核前充分测试:确保所有功能正常,避免因为小问题被打回 +5. 详细说明测试流程:提供测试账号和详细的测试说明 + + + +## 写在最后 + +通过这 2 个小程序项目,你已经学习了小程序开发的基本流程。更重要的是,你学会了如何把项目上线,让真实的用户使用。 + +小程序开发相比 Web 开发有一些特殊之处,但核心思路是相通的。用 Vibe Coding 的方式,你可以快速开发出功能完整的小程序。如果你想学习更多的小程序开发技巧和最佳实践,可以参考本教程的经验技巧板块。 + +完成了小程序开发后,在下一篇文章中,我会教你如何把各种项目部署到互联网上,让全世界的人都能访问你的作品。 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/06 项目部署上线教程.md b/Vibe Coding 零基础教程/20 项目实战/06 项目部署上线教程.md new file mode 100644 index 0000000..9e42484 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/06 项目部署上线教程.md @@ -0,0 +1,425 @@ +# 项目部署上线教程 + + +你好,我是程序员鱼皮。 + +在前面的文章中,我们学习了如何开发各种项目。但是如果项目只能在本地运行,那就太可惜了。这篇文章,我会教你如何把项目部署到互联网上,让全世界的人都能访问。 + +需要先说明的是,如果你用的是 Bolt.new、Lovable、美团 NoCode、百度秒哒等 AI 零代码平台,它们一般自带了部署功能,点击发布按钮就能上线,非常方便。但是如果你想更灵活地部署,比如使用自己的域名、选择不同的服务器、或者部署更复杂的全栈项目,那就需要学习更多的部署方式。 + +下面我会介绍多种部署方式,从最新的 AI 自动部署、到最流行的 Vercel 一键部署、再到专业的服务器部署。你可以根据自己的项目类型和需求,选择合适的部署方式。 + + + +## 一、部署方式概览 + +在开始之前,先了解一下有哪些部署方式。 + +对于前端项目(静态网页、单页应用等),最简单的方式是使用托管平台,比如 Vercel、GitHub Pages、EdgeOne Pages 等。这些平台提供免费的托管服务,只需要上传代码,就能自动部署并生成访问链接。 + +对于全栈项目(包含前端和后端),可以选择容器化部署(Docker)、云服务器部署(阿里云、腾讯云等)、或者 Serverless 部署。这些方式相对复杂一些,但功能更强大。 + +下面我会详细介绍每种部署方式。 + + + +## 二、让 AI 自动部署(最新最酷) + +先来分享一个最新的技巧,让 AI 帮你部署网站。 + +以前,我们开发一个网站,需要先提出需求、再设计方案、再写代码开发、最后部署上线。我们都知道 AI 现在写代码越来越溜了,慢慢地替代了我们程序员写代码的部分工作;但其实,AI 的能力不止于此,利用 MCP,它甚至可以直接帮我们把网站部署上线! + +好好好,合着我只要提个一句话需求,写代码和部署都不用我来干了,让我退化是吧? + +![](https://pic.yupi.icu/1/1752213314439-7925d7ba-0d1d-46f1-9f70-b1d391ac854d.png) + +下面就来带大家实操一下,让 AI 帮我生成并部署个人博客网站。 + + + +### 准备工具 + +我们需要用到的工具包括: + +- Cursor:AI 编程工具,负责调用 AI 生成代码 +- EdgeOne Pages MCP:能够将网站快速部署到 CDN 并生成公开访问链接的服务 + +什么是 EdgeOne Pages MCP 呢?拆解一下这几个单词。 + +EdgeOne 是腾讯云提供的 CDN 加速服务,可以把用户的网站资源缓存到离用户最近的边缘节点,提升网站性能。 + +![](https://pic.yupi.icu/1/1752216739540-3dbb9132-3ae0-4a5d-9949-2a4299663c39.png) + +EdgeOne Pages 是基于这个 CDN 的网站部署服务,可以让你轻松地将网站部署到 CDN 上,并且得到公开访问地址,完全不需要自己搭建服务器。 + +![](https://pic.yupi.icu/1/1752216784265-0a71fe3a-7944-40b2-b5ce-87215df060fe.png) + +MCP 则是目前很火的模型上下文协议,让 AI 模型能够轻松地使用各种工具来增强能力,完成更复杂的任务。 + +![](https://pic.yupi.icu/1/1752216828838-510154d5-6a89-4089-84b9-fadeccb9d724.png) + +EdgeOne Pages MCP 的作用就显而易见了 —— 给 AI 提供网站部署工具,这也是一个比较热门的 MCP。 + +![](https://pic.yupi.icu/1/1752217054075-0f149a76-9e42-482e-ae26-e23762c7ad1e.png) + + + +### 快速实战 + +1)开通 Pages 服务 + +首先到 [EdgeOne 控制台](https://console.cloud.tencent.com/edgeone/pages) 开通 Pages 服务: + +![](https://pic.yupi.icu/1/1752209404627-3a3193d9-4c94-4f80-ad02-435ff22f16ed.png) + +开通服务后,默认进入了项目管理页面,我们先不急着创建项目: + +![](https://pic.yupi.icu/1/1752209421726-11d8eff7-7bdd-4a85-accf-c70f74ead15a.png) + +由于等下要通过 MCP 完成网站部署,所以要先获取 API Token,作为调用服务的凭证: + +![](https://pic.yupi.icu/1/1752209504079-6741bbd0-438e-48a4-86be-6eddfc3efa83.png) + + + +2)配置 MCP + +新建一个项目文件夹 `yupi-blog`,在 Cursor 中打开,然后进入设置,添加 MCP 服务: + +![](https://pic.yupi.icu/1/1752209949437-369134bc-303b-46fc-bca1-e1a57a335f82.png) + +将这段配置复制粘贴到 MCP 配置文件中: + +```json +{ + "mcpServers": { + "edgeone-pages-mcp-server": { + "command": "npx", + "args": ["edgeone-pages-mcp"], + "env": { + "EDGEONE_PAGES_API_TOKEN": "你的API Token", + "EDGEONE_PAGES_PROJECT_NAME": "" + } + } + } +} +``` + +注意要把 API Token 改成你自己的,并且把注释删除掉,否则会报错: + +![](https://pic.yupi.icu/1/1752210048110-15bf78cc-da14-4f7f-b9d5-3ec510332bf7.png) + +正常情况下,你会看到 MCP 服务成功加载,绿了绿了! + +![](https://pic.yupi.icu/1/1752211512400-a59c2010-8701-4b75-80d9-014ad03e8b4a.png) + +这个服务提供了 2 个工具: + +- deploy_html:部署 HTML 内容到 EdgeOne Pages,返回公开访问 URL +- deploy_folder_or_zip:部署文件夹或 ZIP 文件到 EdgeOne Pages,返回公开访问 URL + +注意,这个 MCP 服务需要 NPX 工具才能在本地成功启动。NPX 可以直接运行 NPM 包中的命令而无需全局安装,常用于执行脚手架工具和一次性命令。 + +如果你没有 NPX 命令、或者 Node.js 版本过低(最好不要低于 20),都会导致工具无法加载。 + +![](https://pic.yupi.icu/1/1752211437222-1400be90-e460-4948-b7f3-45a6a78ffe7d.png) + +这时,你只需要到 [官网安装 Node.js](https://nodejs.org/zh-cn),会自动帮你安装 NPM 和 NPX 工具: + +![](https://pic.yupi.icu/1/1752209643527-73a7c2cc-046c-4faa-8531-2a22da95d4bd.png) + +如果没有自动安装 NPX 工具,那就用 NPM 包管理工具安装 NPX: + +```bash +npm i -g npx +``` + + + +3)生成并部署网站 + +准备好 MCP 服务后,下面来生成网站。输入下列提示词,让 AI 帮我生成个人博客网站: + +``` +帮我根据程序员鱼皮的 GitHub 生成个人博客网站,极客风格,简洁大气;生成完成后部署网站 +@https://github.com/liyupi +``` + +查看 AI 的思考过程,它已经想到要使用 EdgeOne Pages 去部署网站了: + +![](https://pic.yupi.icu/1/1752211869664-b74dc4d9-57b1-4bb7-9f02-703112b613eb.png) + +很快网站就生成并部署完成,可以看到 AI 调用了 MCP 部署 HTML 的工具,得到了访问地址: + +![](https://pic.yupi.icu/1/1752212029384-16cfba8f-babb-49c0-9d41-3b76ee78eecf.png) + +直接打开网址就看到效果了,不要太方便! + +![](https://pic.yupi.icu/1/1752212096367-0a0fac32-118e-485a-9277-8dd507ff66d3.png) + +不过目前生成的网站比较简单,就一个 HTML 页面,甚至没有在本地创建代码文件。 + + + +4)部署网站目录 + +再来尝试一个更复杂的项目吧,使用下面的提示词,让 AI 利用前端框架开发多页面网站: + +``` +帮我根据程序员鱼皮的 GitHub 生成个人博客网站,极客风格,简洁大气; +需要包含多个页面,要求使用 Vue 框架模块化开发; +生成完成后部署网站 +@https://github.com/liyupi/ +``` + +![](https://pic.yupi.icu/1/1752212265608-6aa96245-199f-487f-9c57-bc2f0550cdf6.png) + +这次要等待的时间会比较久,鱼皮建议大家趁这个时间接杯水,起来活动活动。最近久坐不动,我感觉自己的肩膀已经硬如磐石了。 + +![](https://pic.yupi.icu/1/1752217850836-e83f0d59-a657-4048-94cd-a515e960a4d7.png) + +我们会发现,虽然生成了一大堆代码,但是并没有自动部署,只是给出了部署建议: + +![](https://pic.yupi.icu/1/1752213747665-192b57be-90a5-44e4-92b1-5cd468394707.png) + +看一下 AI 的思考过程,原来是使用部署工具失败了: + +![](https://pic.yupi.icu/1/1752214113764-2afad6bc-5777-4e9e-b2d2-745476caadc2.png) + +经过我的测试发现,如果想部署网站目录或压缩包,最好先在 Pages 网页版创建一个项目,然后让 MCP 把网站文件传到这个项目内。 + +那就先利用官方提供的例子,随便部署一个网站: + +![](https://pic.yupi.icu/1/1752215857055-9a84b9d5-4787-4181-b054-8883884c34b2.png) + +修改项目的名称为 `yupi-blog`,直接点击 "开始部署" 就好: + +![](https://pic.yupi.icu/1/1752215971422-9e57abea-077a-4847-88b3-bd1cd1de4217.png) + +等待部署中,30 秒左右就好了: + +![](https://pic.yupi.icu/1/1752216002653-9d7c5127-642a-4b3c-b542-c9e6cfcd0dde.png) + +项目部署成功后,我们修改 Cursor MCP 的配置,填入刚刚创建的项目名称: + +![](https://pic.yupi.icu/1/1752216064120-e1e8e58e-0eaa-4b9c-814b-605c664c35a3.png) + +然后再跟 AI 对话,让它帮我部署网站目录: + +![](https://pic.yupi.icu/1/1752213933060-071efc16-a9ac-4333-8fd9-53beeeeedd90.png) + +可以看到这次 AI 成功执行了部署工具,并且得到了访问地址: + +![](https://pic.yupi.icu/1/1752216306792-fb4c2e9c-d600-4b7c-b3c4-d5ae02614974.png) + +看下网站效果,还不错吧,很有科技感! + +![](https://pic.yupi.icu/1/1752216337356-667e0577-b0a5-4f44-b147-5bb3ab14824e.png) + +不过要注意,生成的网站默认使用临时域名,有效期比较短: + +![](https://pic.yupi.icu/1/1752216364625-c93f7b26-133a-4aac-a849-77ee6840e6f1.png) + +如果你有域名的话,建议配置一下自定义域名,就可以无限期访问啦~ + +![](https://pic.yupi.icu/1/1752216408600-03b16e94-4668-4295-b7bb-2a07bc5592c7.png) + +怎么样,是不是很简单?等能够轻松在手机上使用 MCP 的时候,试想一下,你走在路上跟朋友聊天,朋友向你推荐了一位博主 —— 程序员鱼皮,你只需要跟 AI 说一句话,2 分钟后,就能给朋友访问介绍这个博主的网站,跟变魔术似的。 + +![](https://pic.yupi.icu/1/1752218294278-9d31872f-e883-4736-a3f6-584ee31e9ad7.png) + +值得一提的是,EdgeOne Pages 目前应该是免费的,真香了。 + +![](https://pic.yupi.icu/1/1752216569752-fbd0f243-7d43-44de-af69-d3d6eb954f8a.png) + + + +## 三、Vercel 一键部署(推荐) + +[Vercel](https://vercel.com) 是目前最流行的前端部署平台,特别适合 React、Next.js、Vue、静态网站等前端项目。 + +Vercel 的优点是个人项目完全免费,部署速度极快(一般 1 ~ 2 分钟),自动配置 HTTPS 和 CDN 加速;还和 GitHub 深度集成,能够在你推送代码到 GitHub 仓库后自动部署。 + + + +### 使用步骤 + +1)首先访问 [Vercel 官网](https://vercel.com) 注册账号,建议使用 GitHub 账号注册登录。 + +2)创建项目,可以直接绑定 GitHub 并选择已经托管的项目,点击 "Deploy" 部署按钮: + +![](https://pic.yupi.icu/1/image-20260109111323983.png) + +3)等待 1 ~ 2 分钟,项目就上线了! + +部署成功后 Vercel 会自动给你一个域名,比如 `your-project.vercel.app`,你也可以绑定自己的域名。而且每次你往 GitHub 推送代码,Vercel 都会自动重新部署,完全不用手动操作。 + + + +### 命令行部署 + +除了网页操作,Vercel 还提供了命令行工具,可以让我们通过一行命令把自己的项目部署到平台。先用 NPM 安装 Vercel CLI 工具: + +```bash +npm i -g vercel@latest +``` + +然后,直接在想部署的项目文件夹下输入 `vercel` 命令,就能部署当前项目了: + +![](https://pic.yupi.icu/1/1752218682107-8c8457e4-3fbe-40d8-afb8-f6cb0691beee.png) + +让 AI 完成自动部署的方法也很简单,你只需要在提示词中告诉 AI “你可以使用 vercel 命令行工具完成网站部署”,聪明如它,一定能帮你完成任务。 + +💡 具体过程可以看鱼皮的视频教程:https://www.bilibili.com/video/BV1TV4y1j76t + +除了 Vercel,还有 [Netlify](https://www.netlify.com/) 这个类似的平台。Netlify 和 Vercel 功能差不多,但功能更全面一些,支持更多的框架和静态站点生成器,有表单处理、无服务器函数等功能,免费额度更大、还支持 A/B 测试和分析。使用方式和 Vercel 类似:注册账号 => 连接 GitHub => 选择项目 => 点击部署。如果你的项目不是 Next.js(Next.js 用 Vercel 最好),可以考虑用 Netlify。 + + + +## 四、GitHub Pages 部署 + +[GitHub Pages](https://pages.github.com/) 是 GitHub 提供的免费静态网站托管服务。优点是完全免费、无限流量、和 GitHub 无缝集成。 + +使用方法巨简单,在 GitHub 创建仓库并上传网站文件后,直接在仓库设置中启用 GitHub Pages: + +![](https://pic.yupi.icu/1/image-20260109111917547.png) + +然后就能通过 `username.github.io/repo-name` 访问了。适合个人主页、项目文档、简单的静态网站。 + +GitHub Pages 的限制是只能部署静态网站,不能运行后端代码。但对于纯前端项目来说,完全够用了。而且完全免费,不用担心流量限制。 + + + +## 五、云服务器部署 + +如果你想要更多的控制权,可以租一台云服务器,自己部署项目。国内主流的云服务商有阿里云、腾讯云、华为云等。 + +云服务器部署的基本流程: + +1)购买云服务器(推荐 2 核 4G 配置起步,第一次购买有新用户优惠) + +2)安装运行环境,比如 Node.js、Nginx、MySQL 数据库等 + +3)上传代码到服务器 + +4)配置 Nginx 反向代理 + +5)配置域名和 SSL 证书 + +这个过程对于纯新手来说会有点儿复杂,但可以使用宝塔面板或 1Panel 这样的可视化管理工具,大大简化操作。这些面板提供了图形化界面,不需要记复杂的命令,点点鼠标就能完成配置。 + +![](https://pic.yupi.icu/1/1736821032080-4be9c9e5-6dfe-434b-8db8-7eb8d7068a16.png) + +云服务器部署的优点是你有完全的控制权,可以随时调整配置,而且更稳定。缺点是需要一定的编程或运维知识,而且服务器需要付费(一般每月几十到几百元不等)。 + +💡 具体过程可以看鱼皮的视频教程: +- [云端编辑器 + Vercel + 对象存储 + 内网穿透 4 种方式部署](https://www.bilibili.com/video/BV1UZ4y197i1) +- [Nginx + 宝塔 2 种方式部署个人博客](https://www.bilibili.com/video/BV1rU4y1J785) +- [WordPress 搭建个人博客](https://www.bilibili.com/video/BV14q4y1R7XM) +- [4 种主流前后端项目部署](https://www.codefather.cn/course/1790943469757837313/section/1791075571845345281?contentType=video&tabKey=videoList) + +鱼皮在编程导航带大家做过 20 多套项目了,几乎每种部署方式都给大家讲解过: + +- [AI 零代码应用生成平台项目](https://www.codefather.cn/course/1948291549923344386):1Panel 面板 + Nginx 前端 + Java 后端(jar 包) +- [代码生成器共享平台项目](https://www.codefather.cn/course/1790980795074654209):宝塔面板 + Nginx 前端 + Java 项目管理器(jar 包)后端部署 + +基本上学会这几种部署方式,能够应对绝大多数部署需求了。 + + + +## 六、Docker 容器化部署 + +对于包含前端和后端的全栈项目,Docker 是一个很好的部署方式。Docker 可以把你的应用和运行环境打包成一个容器,在任何支持 Docker 的服务器上都能运行。 + +Docker 的优点是环境一致性好,不会出现 “在我电脑上能跑,在服务器上跑不了” 的问题。而且可以很方便地管理多个应用,每个应用独立运行,互不影响。 + +使用 Docker 部署的基本流程: + +1. 编写 Dockerfile,定义应用的运行环境 +2. 构建 Docker 镜像 +3. 运行 Docker 容器 +4. 配置 Nginx 反向代理(如果需要) + +这个过程相对复杂一些,但可以让 AI 帮你完成。你只需要告诉 AI:“帮我写一个 Dockerfile,用来部署这个 Node.js 项目。” AI 会生成完整的 Dockerfile 和部署脚本。 + +如果你想学习企业级的部署方式,建议深入学习 Docker。 + +💡 具体过程可以看鱼皮的项目教程: +- [AI 答题应用平台项目](https://www.codefather.cn/course/1790274408835506178):Vercel 前端 + Docker 后端 + 云托管 Serverless 平台部署 +- [AI 超级智能体项目](https://www.codefather.cn/course/1915010091721236482):Docker 前端 + Docker 后端 + 云托管 Serverless 平台部署 +- [OJ 在线判题项目](https://www.codefather.cn/course/1790980707917017089):Docker Compose 后端微服务部署 + + + +## 七、CDN 加速优化 + +部署完成后,如果你想让网站访问速度更快,还可以使用 CDN 加速。 + +CDN(内容分发网络)就是把你的网站内容缓存到全球各地的服务器上,用户访问时会自动选择离他最近的服务器,大大提高加载速度。 + +![](https://pic.yupi.icu/1/1763643073516-5248d56c-bf7d-4537-b8f8-681a104626d9.png) + +[Cloudflare](https://www.cloudflare.com/zh-cn/) 提供免费的 CDN 服务,优势是: + +- 完全免费(个人网站) +- 全球 CDN 加速,覆盖 200+ 个城市 +- 自动 HTTPS 证书 +- DDoS 防护和 Web 防火墙 +- 免费的 DNS 服务 + +使用方法很简单,注册 Cloudflare 账号,添加你的域名,然后把域名的 DNS 服务器改成 Cloudflare 提供的地址就行。Cloudflare 会自动帮你加速和保护网站。 + +也可以直接使用 Cloudflare 提供的 Pages 页面部署能力,直接上传自己的代码,交给它一键部署并白票免费的域名,更方便~ + +![](https://pic.yupi.icu/1/1763643412558-4d499b46-5e16-4f83-9df7-06a85175df35.png) + +如果你的网站部署在 Vercel 或 Netlify 上,它们本身就有 CDN 加速,不需要额外配置 Cloudflare。但如果你是自己租服务器部署,强烈建议用 Cloudflare 加速。 + + + +## 八、域名和 SSL 证书 + +部署完成后,你可能想给网站配置一个好记的域名,而不是一直用难以记忆的 IP 地址让用户访问。 + + + +### 购买域名 + +域名就是网站的地址,比如 [codefather.cn](https://codefather.cn/)、[dogyupi.com](http://dogyupi.com/)。对于国内用户,我推荐在 [阿里云](https://wanwang.aliyun.com/) 或 [腾讯云](https://dnspod.cloud.tencent.com/) 这种知名云服务商购买域名。价格一般是几十块钱一年,而且操作界面都是中文的,很方便。 + +需要注意的是,如果你的网站服务器在国内,域名需要备案。备案流程大概需要 1 ~ 2 周,需要提供身份证、手机号等信息。如果你的网站部署在 Vercel、Netlify 这些国外平台上,或者在国外平台购买域名,那么可以省去备案,快速上线。 + + + +### 配置 SSL 证书 + +现在的网站基本都要求 HTTPS,所以需要配置 SSL 证书。好消息是,大部分部署平台都会自动配置 SSL 证书,你不需要手动操作。 + +比如 Vercel、Netlify、GitHub Pages、EdgeOne Pages 都会自动配置 HTTPS,你只需要绑定域名就行。 + +如果你是自己租服务器部署,可以使用免费的 [Let's Encrypt](https://letsencrypt.org/zh-cn/) 证书,或者用 Cloudflare 的 CDN,它们都会自动配置 HTTPS。 + + + +## 写在最后 + +通过这篇文章,你已经学习了多种项目部署方式。从最新的 AI 自动部署,到最流行的 Vercel 一键部署,从简单的 GitHub Pages,到专业的云服务器和 Docker 容器化部署,每种方式都有自己的适用场景。 + +我建议对于新手,从简单的开始。如果你用的是 AI 零代码平台,直接用它自带的发布功能就好。如果你用 Cursor 等代码编辑器开发,推荐先用 Vercel 或 GitHub Pages,几分钟就能上线。等你熟练了,再学习 Docker 和云服务器部署,这些是企业级的部署方式,更专业也更灵活。 + +现在,选择一个适合你的部署方式,把你的项目发布到互联网上吧~ + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/10 Vibe Coding 项目灵感大全.md b/Vibe Coding 零基础教程/20 项目实战/10 Vibe Coding 项目灵感大全.md new file mode 100644 index 0000000..69c060c --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/10 Vibe Coding 项目灵感大全.md @@ -0,0 +1,776 @@ +# Vibe Coding 项目灵感大全 + + +你好,我是鱼皮。 + +这篇文章,我会为你提供 100 个适合 Vibe Coding 的项目创意,涵盖个人工具、工作效率、娱乐创意、学习教育、社交互动等多个领域,你可以根据自己的兴趣和水平选择。 + + + +## 一、如何选择适合自己的项目? + +在看项目创意之前,先聊聊如何选择项目。 + +很多同学一看到项目创意就兴奋,但做了几天就放弃了。 + +为什么?因为选错了项目。 + + + +### 选择项目的三个原则 + +#### 原则 1、从自己的需求出发 + +最好的项目是解决你自己的问题。你每天都会用到,自然就有动力做下去。比如你觉得现有的记账应用太复杂,就可以做一个简单的记账工具。你想养成学习习惯,就可以做一个打卡应用。 + + + +#### 原则 2、难度要适中 + +项目不能太简单,也不能太难。太简单了学不到东西,太难了容易放弃。一个好的标准是:你大概知道怎么做,但有一些技术点需要学习。这样既有挑战,又不至于完全无从下手。 + + + +#### 原则 3、可以快速看到效果 + +选择那些能快速看到效果的项目。比如一个简单的工具,几天就能做出来,马上就能用。这样会有成就感,有动力继续做下去。避免选择那些需要几个月才能看到效果的大项目。 + +![](https://pic.yupi.icu/1/choose-project-3ways%E5%A4%A7.jpeg) + + + +### 我的建议 + +如果你是完全新手,建议从个人工具类项目开始。这类项目功能简单,技术栈单一,容易上手。比如待办事项、记账工具、番茄钟等。 + +如果你已经做过几个项目,可以尝试工作效率类或学习教育类项目。这类项目稍微复杂一些,涉及更多的功能和交互。比如笔记应用、在线白板、学习打卡等。 + +如果你想挑战自己,可以尝试社交互动类或娱乐创意类项目。这类项目涉及用户交互、实时通信等复杂功能。比如匿名聊天室、在线游戏、内容社区等。 + + + +### 如何验证项目创意 + +有了创意后,不要急着开始做。先验证一下这个创意是否值得做。 + +可以问自己几个问题: + +- 这个问题真的存在吗? +- 有多少人有这个需求? +- 现有的解决方案有什么不足? +- 我的方案有什么优势? + +如果答案都是肯定的,那就可以开始做了。 + +也可以先做一个最简单的版本(MVP),只实现核心功能,看看是否真的有用。如果有用,再继续完善;如果没用,及时止损,换个方向。 + + + +## 二、个人工具类项目灵感 + +个人工具类项目是最适合新手的,功能简单,实用性强。 + +**1、密码生成器** + +生成强密码的工具,可以设置长度、包含字符类型(大小写字母、数字、符号),一键复制。这是最实用的小工具之一,可以帮你生成安全的密码。你可以添加密码强度检测功能,告诉用户密码是否足够安全。还可以保存生成历史,方便查看之前生成的密码。 + + + +**2、颜色选择器** + +选择颜色并获取 HEX、RGB、HSL 等格式的颜色代码,支持调色板保存。对于设计师和前端开发者来说非常实用,可以快速获取颜色代码。你可以添加颜色搭配推荐功能,根据选择的颜色推荐配色方案。还可以支持从图片中提取颜色,生成调色板。 + + + +**3、文本对比工具** + +比较两段文本的差异,高亮显示不同之处,支持行对比和字符对比。这个工具在代码审查、文档对比时特别有用。你可以添加忽略空格、忽略大小写等选项,让对比更灵活。还可以支持文件上传对比,不用手动复制粘贴。 + + + +**4、JSON 格式化工具** + +格式化和验证 JSON 数据,支持折叠展开、语法高亮、错误提示。程序员必备工具,可以快速查看和调试 JSON 数据。你可以添加 JSON 转换功能,比如转换为 XML、YAML 等格式。还可以支持 JSON 路径查询,快速定位数据。 + + + +**5、Base64 编解码工具** + +Base64 编码和解码,支持文本和图片,可以在线预览。在处理图片数据、API 调用时经常用到。你可以添加批量处理功能,一次编码多个文件。还可以支持其他编码格式,比如 URL 编码、Unicode 编码等。 + + + +**6、二维码生成器** + +输入文本或链接,生成二维码,支持自定义大小、颜色、Logo。可以用来分享链接、WiFi 密码、名片信息等。你可以添加二维码扫描功能,用摄像头扫描二维码。还可以支持批量生成,一次生成多个二维码。 + + + +**7、倒计时工具** + +设置目标日期,显示倒计时(距离高考还有多少天),支持多个倒计时。可以用来提醒重要日期,比如考试、生日、纪念日等。你可以添加提醒功能,到期前自动提醒。还可以支持正计时,记录某件事已经过去多久。 + + + +**8、随机决策器** + +输入多个选项,随机选择一个,适合选择困难症患者。可以用来决定吃什么、去哪玩、做什么事。你可以添加权重功能,让某些选项更容易被选中。还可以添加历史记录,查看之前的选择结果。 + + + +**9、单位转换器** + +长度、重量、温度、货币等单位转换,支持常用单位。日常生活中经常用到,比如做饭时转换单位。你可以添加汇率实时更新功能,获取最新的货币汇率。还可以支持自定义单位,添加不常见的单位转换。 + + + +**10、正则表达式测试器** + +测试正则表达式,实时显示匹配结果,提供常用正则模板。对于需要处理文本的程序员来说非常有用。你可以添加正则表达式解释功能,用自然语言解释正则的含义。还可以提供正则生成器,根据需求自动生成正则表达式。 + + + +**11、Markdown 转 HTML** + +将 Markdown 文本转换为 HTML,支持实时预览和代码高亮。写文档、博客时经常需要转换格式。你可以添加自定义样式功能,选择不同的主题。还可以支持导出为 PDF、Word 等格式。 + + + +**12、图片压缩工具** + +在线压缩图片,支持批量处理,可以设置压缩质量。可以减小图片大小,加快网页加载速度。你可以添加图片格式转换功能,比如 PNG 转 JPG。还可以支持图片裁剪、旋转等基本编辑功能。 + + + +**13、文件格式转换** + +常见文件格式转换,比如 PDF 转图片、视频格式转换等。处理不同格式的文件时非常方便。你可以添加批量转换功能,一次转换多个文件。还可以支持云端转换,处理大文件时不占用本地资源。 + + + +**14、屏幕录制工具** + +录制屏幕操作,生成 GIF 或视频,支持添加标注。可以用来制作教程、演示软件操作。你可以添加编辑功能,裁剪、添加文字、绘制箭头等。还可以支持摄像头录制,同时录制屏幕和人像。 + + + +**15、快捷键查询工具** + +查询各种软件的快捷键,支持搜索和分类。可以帮助用户快速掌握软件操作,提高效率。你可以添加自定义快捷键功能,保存自己常用的快捷键。还可以支持快捷键练习,通过游戏方式学习快捷键。 + + + +**16、时区转换器** + +不同时区的时间转换,适合跨国协作。可以快速知道其他国家现在是几点。你可以添加会议时间建议功能,找到适合所有人的会议时间。还可以支持时区时钟,同时显示多个时区的时间。 + + + +**17、字数统计工具** + +统计文本的字数、词数、段落数,支持中英文。写文章、论文时需要控制字数。你可以添加阅读时间估算功能,根据字数估算阅读时长。还可以支持关键词分析,统计高频词汇。 + + + +**18、网址缩短工具** + +生成短链接,方便分享,支持自定义短链。可以让长链接变短,更容易记忆和分享。你可以添加访问统计功能,查看短链接的点击次数。还可以支持二维码生成,扫码直接访问。 + + + +**19、随机名字生成器** + +生成随机的人名、公司名、产品名,支持不同风格。可以用来给项目、角色、公司起名。你可以添加 AI 生成功能,根据关键词生成更有创意的名字。还可以支持域名检查,查看名字对应的域名是否可用。 + + + +**20、进制转换器** + +二进制、八进制、十进制、十六进制互相转换。程序员经常需要转换不同进制的数字。你可以添加位运算功能,进行与、或、非等操作。还可以支持浮点数转换,查看浮点数的二进制表示。 + + + +## 三、工作效率类项目灵感 + +工作效率类项目可以提高工作和学习效率,实用性很强。 + +**21、番茄工作法计时器(进阶版)** + +除了基本的计时功能,还可以记录每个番茄钟做了什么,生成工作报告。这是提高专注力的经典方法,通过 25 分钟工作 + 5 分钟休息的循环来保持高效。你可以添加统计分析功能,查看每天完成了多少个番茄钟。还可以集成日历,自动记录工作时间。 + + + +**22、会议记录工具** + +记录会议内容,支持录音转文字,自动提取待办事项。可以帮助团队更好地跟进会议决议,避免遗漏重要信息。你可以添加 AI 总结功能,自动生成会议纪要。还可以支持多人协作编辑,实时同步会议记录。 + + + +**23、项目进度看板** + +类似 Trello 的看板工具,管理项目任务,支持拖拽、标签、截止日期。可以清晰地看到项目进展,适合个人或小团队使用。你可以添加甘特图视图,更直观地展示时间线。还可以支持任务依赖关系,自动调整计划。 + + + +**24、时间追踪工具** + +记录每天在不同任务上花费的时间,生成时间分析报告。可以帮你了解时间都花在哪里,优化时间分配。你可以添加自动追踪功能,根据打开的应用自动记录时间。还可以生成周报月报,分析时间使用趋势。 + + + +**25、习惯追踪器** + +追踪多个习惯的完成情况,生成习惯养成曲线。可以帮助你养成好习惯,比如每天运动、读书、早起等。你可以添加提醒功能,到时间自动提醒打卡。还可以加入社交元素,和朋友一起打卡互相监督。 + + + +**26、目标管理工具** + +设置长期目标和短期目标,分解为可执行的任务,追踪完成进度。可以帮你把大目标拆解成小步骤,更容易实现。你可以添加 OKR 管理功能,设置关键结果和衡量指标。还可以生成目标达成报告,回顾成长历程。 + + + +**27、阅读列表管理** + +保存想读的文章和书籍,标记阅读状态,添加笔记和标签。可以避免收藏了很多文章却从不看的情况。你可以添加阅读时间估算,帮助规划阅读计划。还可以支持网页剪藏,一键保存文章内容。 + + + +**28、灵感收集箱** + +随时记录灵感和想法,支持文字、图片、链接,可以分类整理。好的想法稍纵即逝,需要及时记录下来。你可以添加 AI 整理功能,自动给灵感分类打标签。还可以支持灵感关联,发现不同想法之间的联系。 + + + +**29、日程安排助手** + +管理每天的日程,支持日历视图、提醒功能、重复事件。可以帮你合理安排时间,避免遗漏重要事项。你可以添加智能建议功能,根据历史数据推荐最佳时间安排。还可以集成天气、交通信息,提供出行建议。 + + + +**30、专注模式工具** + +屏蔽干扰网站,进入专注模式,支持白名单和黑名单。可以帮你抵制诱惑,专心工作学习。你可以添加番茄钟集成,在工作时段自动屏蔽网站。还可以统计被屏蔽次数,了解自己的分心情况。 + + + +**31、快速笔记工具** + +快速记录想法,支持 Markdown、标签、搜索,可以导出。比传统笔记应用更轻量,打开就能写。你可以添加全局快捷键,随时唤起笔记窗口。还可以支持笔记链接,建立知识网络。 + + + +**32、邮件模板管理** + +保存常用的邮件模板,一键插入,支持变量替换。可以节省大量重复写邮件的时间。你可以添加智能变量功能,自动填充收件人姓名、日期等信息。还可以支持团队共享,共用优质模板。 + + + +**33、密码管理器** + +安全地存储密码,支持分类、搜索、密码强度检测。比浏览器自带的密码管理更安全和灵活。你可以添加密码生成器,创建强密码。还可以支持密码共享,安全地分享给团队成员。 + + + +**34、文件整理工具** + +自动整理下载文件夹,按类型、日期分类,支持自定义规则。可以让杂乱的文件夹变得井井有条。你可以添加智能分类功能,根据文件内容自动归类。还可以支持重复文件检测,清理冗余文件。 + + + +**35、快捷启动器** + +快速启动常用应用和网站,支持自定义快捷键。可以大幅提高工作效率,减少鼠标操作。你可以添加搜索功能,输入关键词快速找到应用。还可以支持工作空间,一键打开一组相关应用。 + + + +**36、剪贴板历史管理** + +记录剪贴板历史,可以快速查找和粘贴之前复制的内容。避免复制新内容后找不到之前的内容。你可以添加收藏功能,保存常用的文本片段。还可以支持格式化粘贴,去除格式或转换格式。 + + + +**37、发票管理工具** + +扫描和管理发票,自动识别金额和类别,生成报销单。可以让报销变得更简单,不用手动整理发票。你可以添加 OCR 识别功能,自动提取发票信息。还可以生成报销统计,分析支出情况。 + + + +**38、合同管理系统** + +管理合同文件,记录签约日期、到期日期,自动提醒。可以避免合同到期忘记续约的情况。你可以添加合同模板功能,快速生成常用合同。还可以支持电子签名,在线完成签约流程。 + + + +**39、客户关系管理(CRM Mini 版)** + +管理客户信息,记录沟通历史,设置跟进提醒。适合自由职业者或小企业管理客户关系。你可以添加销售漏斗功能,追踪客户转化流程。还可以生成客户报告,分析客户价值。 + + + +**40、团队协作白板** + +在线白板工具,支持多人实时协作,可以画图、写字、贴便签。适合远程团队进行头脑风暴和设计讨论。你可以添加模板库,提供常用的白板模板。还可以支持录制回放,记录讨论过程。 + + + +## 四、娱乐创意类项目灵感 + +娱乐创意类项目可以让你发挥创意,做一些有趣的东西。 + +**41、表情包制作器** + +上传图片,添加文字,生成表情包,支持多种模板。这是最受欢迎的娱乐工具之一,人人都爱表情包。你可以添加热门模板库,提供流行的表情包模板。还可以支持 GIF 制作,让表情包动起来。 + + + +**42、头像生成器** + +根据输入的名字或关键词,生成个性化头像。可以用 AI 生成独特的头像,避免撞头像的尴尬。你可以添加多种风格选择,比如卡通、像素、水彩等。还可以支持批量生成,一次生成多个头像供选择。 + + + +**43、名言生成器** + +随机生成励志名言或搞笑语录,可以分享到社交媒体。可以用来制作朋友圈文案或个性签名。你可以添加 AI 生成功能,根据主题生成名言。还可以支持名言配图,自动生成精美的图片。 + + + +**44、星座运势查询** + +查询每日星座运势,支持爱情、事业、财运等。虽然是娱乐性质,但很多人喜欢看。你可以添加星座配对功能,查看两个星座的匹配度。还可以提供星座知识科普,介绍星座特点。 + + + +**45、抽签工具** + +在线抽签,支持自定义签文,可以用于做决定或娱乐。可以模拟寺庙抽签的体验,增加趣味性。你可以添加解签功能,AI 解释签文含义。还可以支持许愿功能,记录愿望是否实现。 + + + +**46、猜数字游戏** + +经典的猜数字游戏,电脑随机生成数字,用户猜测。简单但有趣,可以打发时间。你可以添加难度选择,支持不同位数的数字。还可以加入排行榜,记录最少猜测次数。 + + + +**47、打字速度测试** + +测试打字速度和准确率,支持不同难度和语言。可以帮助提高打字速度,程序员必备技能。你可以添加练习模式,针对性训练薄弱按键。还可以支持代码打字,练习编程常用符号。 + + + +**48、记忆力游戏** + +翻牌配对游戏,测试记忆力,支持不同难度。经典的记忆训练游戏,老少皆宜。你可以添加主题选择,比如动物、水果、emoji 等。还可以支持多人对战,看谁记忆力更好。 + + + +**49、拼图游戏** + +上传图片,生成拼图,支持不同难度(9 块、16 块等)。可以用自己的照片制作拼图,更有意思。你可以添加计时功能,挑战最快完成时间。还可以支持 3D 拼图,增加难度和趣味性。 + + + +**50、音乐播放器** + +简单的音乐播放器,支持播放列表、歌词显示、进度控制。可以作为学习前端音频处理的练手项目。你可以添加音乐可视化效果,根据音频生成动画。还可以支持音乐推荐,根据喜好推荐相似歌曲。 + + + +**51、电影推荐工具** + +根据用户喜好推荐电影,支持评分、评论、收藏。可以帮助解决选择困难,找到好看的电影。你可以添加 AI 推荐算法,根据观影历史智能推荐。还可以集成豆瓣 API,获取电影信息和评分。 + + + +**52、美食食谱分享** + +分享和浏览美食食谱,支持搜索、分类、收藏。可以记录自己的拿手菜,也可以学习别人的食谱。你可以添加食材清单功能,自动生成购物清单。还可以支持营养分析,计算卡路里和营养成分。 + + + +**53、旅行日记** + +记录旅行经历,上传照片,标记地点,生成旅行地图。可以把旅行回忆永久保存,随时回顾。你可以添加路线规划功能,记录旅行轨迹。还可以生成旅行相册,自动排版制作精美相册。 + + + +**54、宠物日记** + +记录宠物的日常,上传照片,记录体重、疫苗等信息。可以帮助铲屎官更好地照顾宠物。你可以添加健康提醒功能,到时间提醒打疫苗、驱虫等。还可以支持多宠物管理,记录每只宠物的信息。 + + + +**55、心情日记** + +记录每天的心情,用颜色或表情表示,生成心情曲线。可以帮助了解自己的情绪变化规律。你可以添加情绪分析功能,分析影响心情的因素。还可以支持心情分享,和朋友交流心情。 + + + +**56、梦境记录器** + +记录梦境内容,支持标签、搜索,分析梦境主题。很多人对梦境感兴趣,这是个有趣的记录工具。你可以添加梦境解析功能,AI 解释梦境含义。还可以统计梦境关键词,发现梦境规律。 + + + +**57、随机故事生成器** + +输入关键词,AI 生成随机故事,支持不同风格。可以用来激发创作灵感或娱乐消遣。你可以添加故事续写功能,让 AI 接着写下去。还可以支持多结局,生成不同的故事走向。 + + + +**58、诗歌生成器** + +输入主题,AI 生成诗歌,支持不同诗体。可以快速生成诗歌,用于表白、祝福等场景。你可以添加诗歌风格选择,比如古风、现代、打油诗等。还可以支持押韵检测,确保诗歌押韵。 + + + +**59、虚拟宠物养成** + +养一只虚拟宠物,喂食、玩耍、升级,类似电子宠物。怀旧的玩法,可以唤起童年回忆。你可以添加多种宠物选择,不同宠物有不同特性。还可以支持宠物对战,和朋友的宠物 PK。 + + + +**60、在线涂鸦板** + +简单的画板工具,支持不同画笔、颜色、橡皮擦,可以保存和分享。可以用来随手涂鸦,释放创意。你可以添加图层功能,支持更复杂的绘画。还可以支持多人协作,一起画画。 + + + +## 五、学习教育类项目灵感 + +学习教育类项目可以帮助学习和成长,很有意义。 + +**61、单词记忆卡片** + +背单词工具,支持艾宾浩斯记忆曲线,自动安排复习。这是最科学的记忆方法,可以大幅提高背单词效率。你可以添加发音功能,点击单词听发音。还可以支持例句学习,在语境中记忆单词。 + + + +**62、数学练习题生成器** + +生成不同难度的数学题,支持加减乘除、方程、几何等。可以帮助学生练习数学,家长也可以用来出题。你可以添加自动批改功能,即时反馈答题结果。还可以生成错题集,针对性练习薄弱知识点。 + + + +**63、编程题库** + +收集编程练习题,支持在线编写和运行代码,查看答案。可以帮助学习编程,提高算法能力。你可以添加代码评测功能,自动运行测试用例。还可以支持代码分享,学习别人的优秀解法。 + + + +**64、学习计划制定工具** + +制定学习计划,分解学习目标,追踪完成进度。可以帮助系统化学习,避免三天打鱼两天晒网。你可以添加智能推荐功能,根据学习进度推荐下一步。还可以生成学习报告,总结学习成果。 + + + +**65、错题本** + +记录错题,支持拍照、分类、定期复习。这是提高成绩的有效方法,重点攻克薄弱环节。你可以添加 OCR 识别功能,自动识别题目文字。还可以支持错题分析,找出常见错误类型。 + + + +**66、知识卡片** + +记录知识点,支持 Markdown、标签、搜索,可以随机复习。类似 Anki 的知识管理工具,适合碎片化学习。你可以添加间隔重复算法,优化复习时间。还可以支持卡片分享,学习别人的知识卡片。 + + + +**67、思维导图工具** + +创建思维导图,支持节点编辑、颜色、图标,可以导出图片。可以帮助整理思路,建立知识体系。你可以添加 AI 生成功能,根据主题自动生成思维导图。还可以支持协作编辑,团队一起头脑风暴。 + + + +**68、课程表管理** + +管理课程表,支持提醒、作业记录、考试倒计时。学生必备工具,可以更好地安排学习时间。你可以添加课程资料管理,保存课件和笔记。还可以支持课程评价,记录对课程的感受。 + + + +**69、学习笔记分享平台** + +分享和浏览学习笔记,支持 Markdown、代码高亮、收藏。可以向优秀的同学学习,获取高质量笔记。你可以添加笔记评分功能,推荐优质笔记。还可以支持付费笔记,激励创作者分享。 + + + +**70、在线题库练习** + +刷题工具,支持不同科目和难度,记录做题历史和错题。可以系统化练习,提高应试能力。你可以添加智能推荐功能,根据错题推荐相似题目。还可以生成模拟考试,检验学习效果。 + + + +**71、背诵助手** + +输入要背诵的内容,支持分段背诵、遮挡关键词、语音朗读。可以帮助背诵课文、诗词、演讲稿等。你可以添加默写功能,检查背诵效果。还可以支持语音识别,通过朗读来背诵。 + + + +**72、学习时长统计** + +记录每天的学习时长,生成学习报告和趋势图。可以量化学习投入,激励自己坚持学习。你可以添加专注度分析,记录学习时的分心情况。还可以支持学习排行榜,和朋友比拼学习时长。 + + + +**73、读书笔记管理** + +记录读书笔记,支持书籍信息、读书进度、摘抄和感想。可以让读书更有收获,建立个人知识库。你可以添加书籍推荐功能,根据阅读历史推荐好书。还可以生成读书报告,总结阅读收获。 + + + +**74、论文管理工具** + +管理论文文献,记录阅读笔记,生成参考文献格式。研究生和科研人员必备工具。你可以添加 PDF 标注功能,直接在论文上做笔记。还可以支持文献引用网络,发现相关论文。 + + + +**75、在线白板教学** + +教师可以在白板上讲解,学生可以实时观看,支持录屏回放。适合远程教学和在线辅导。你可以添加互动功能,学生可以举手提问。还可以支持分组讨论,学生分组协作学习。 + + + +**76、作业提交系统** + +学生提交作业,教师批改和评分,支持文件上传和在线预览。可以让作业管理更高效,避免遗漏。你可以添加查重功能,检测作业抄袭。还可以生成成绩统计,分析班级整体情况。 + + + +**77、考试倒计时** + +设置考试日期,显示倒计时,支持学习计划和复习提醒。可以增加紧迫感,督促自己认真复习。你可以添加复习进度追踪,记录复习了哪些内容。还可以生成复习计划,合理分配复习时间。 + + + +**78、学习小组管理** + +创建学习小组,分享资料,讨论问题,互相监督。可以让学习不再孤单,互相帮助共同进步。你可以添加打卡功能,记录小组成员的学习情况。还可以支持语音讨论,更方便地交流。 + + + +**79、技能树可视化** + +展示学习路径,像游戏技能树一样,完成一个解锁下一个。可以让学习过程游戏化,更有趣味性。你可以添加成就系统,完成里程碑获得奖励。还可以支持多条路径,选择不同的学习方向。 + + + +**80、学习成就系统** + +完成学习任务获得成就和勋章,增加学习动力。通过游戏化的方式激励学习,让学习更有成就感。你可以添加排行榜功能,和其他学习者竞争。还可以支持成就分享,向朋友展示学习成果。 + + + +## 六、社交互动类项目灵感 + +社交互动类项目涉及用户交互,相对复杂一些。 + +**81、匿名聊天室** + +随机匹配陌生人聊天,支持文字和表情,保护隐私。可以让人放下顾虑,真实地表达自己。你可以添加兴趣匹配功能,匹配有共同话题的人。还可以支持举报功能,维护良好的聊天环境。 + + + +**82、树洞倾诉平台** + +匿名发布心事,其他用户可以评论和安慰,类似树洞。可以让人释放压力,获得陌生人的温暖。你可以添加情绪分析功能,识别负面情绪并提供帮助。还可以支持专业咨询,连接心理咨询师。 + + + +**83、问答社区(Mini 版)** + +用户提问和回答,支持点赞、评论、采纳答案。类似知乎的问答平台,可以分享和获取知识。你可以添加积分系统,回答问题获得积分。还可以支持话题关注,订阅感兴趣的话题。 + + + +**84、博客平台** + +用户可以发布博客文章,支持 Markdown、评论、关注。可以让人分享想法和经验,建立个人品牌。你可以添加 RSS 订阅功能,方便读者订阅。还可以支持文章专栏,系列文章归类展示。 + + + +**85、照片分享平台** + +分享照片,支持点赞、评论、标签,类似 Instagram。可以记录生活美好瞬间,和朋友分享。你可以添加滤镜功能,美化照片。还可以支持照片故事,多张照片组成故事。 + + + +**86、短视频分享平台** + +上传和观看短视频,支持点赞、评论、关注。这是最流行的内容形式,可以展示才艺和创意。你可以添加视频编辑功能,剪辑和添加特效。还可以支持话题挑战,参与热门话题。 + + + +**87、音乐分享平台** + +分享喜欢的音乐,创建歌单,评论和推荐。可以发现新音乐,和音乐爱好者交流。你可以添加音乐推荐算法,根据喜好推荐歌曲。还可以支持歌词同步显示,边听边看歌词。 + + + +**88、书评分享平台** + +分享读书心得,评分和推荐书籍,发现好书。可以帮助选书,避免踩雷。你可以添加读书进度同步,记录阅读进度。还可以支持书单功能,创建主题书单。 + + + +**89、电影评论平台** + +分享观影感受,评分和推荐电影,查看影评。可以帮助选片,了解电影质量。你可以添加观影记录功能,记录看过的电影。还可以支持影单功能,创建主题影单。 + + + +**90、美食分享平台** + +分享美食照片和食谱,标记餐厅位置,查看推荐。可以发现好吃的餐厅,学习做菜。你可以添加地图功能,查看附近的美食。还可以支持美食打卡,记录吃过的餐厅。 + + + +**91、旅行分享平台** + +分享旅行经历和攻略,标记景点,查看游记。可以获取旅行灵感,规划旅行路线。你可以添加行程规划功能,制定详细的旅行计划。还可以支持旅行足迹地图,展示去过的地方。 + + + +**92、技能交换平台** + +用户发布自己的技能和想学的技能,互相交换学习。可以免费学习新技能,结识志同道合的朋友。你可以添加匹配算法,自动匹配合适的交换对象。还可以支持线上教学,远程交换技能。 + + + +**93、二手交易平台** + +发布和浏览二手物品,支持搜索、分类、私信。可以让闲置物品发挥价值,买到便宜的好东西。你可以添加信用评价系统,保障交易安全。还可以支持同城交易,方便线下交易。 + + + +**94、活动发布平台** + +发布和报名活动,支持地点、时间、人数限制。可以组织线下活动,认识新朋友。你可以添加活动提醒功能,活动前自动提醒。还可以支持活动签到,记录参与情况。 + + + +**95、投票调查平台** + +创建投票和调查问卷,收集和分析结果。可以快速收集意见,做出决策。你可以添加多种题型,支持单选、多选、填空等。还可以生成数据报告,可视化展示结果。 + + + +**96、表白墙** + +匿名发布表白内容,支持点赞和评论。校园经典应用,可以勇敢表达爱意。你可以添加表白成功率统计,看看表白效果。还可以支持表白回应,被表白者可以回复。 + + + +**97、愿望清单分享** + +分享自己的愿望清单,互相鼓励和见证。可以让愿望更容易实现,获得他人的支持。你可以添加愿望进度追踪,记录实现过程。还可以支持愿望众筹,大家一起帮助实现愿望。 + + + +**98、每日一图分享** + +每天分享一张图片,可以是摄影作品、插画、表情包等。可以培养审美,发现美好事物。你可以添加图片投稿功能,用户上传图片参与评选。还可以支持图片日历,回顾历史图片。 + + + +**99、语音聊天室** + +实时语音聊天,支持多人房间,可以用于播客或讨论。可以更自然地交流,适合深度讨论。你可以添加房间主题功能,创建不同主题的聊天室。还可以支持录音回放,保存精彩讨论。 + + + +**100、在线协作文档** + +多人实时编辑文档,类似 Google Docs,支持评论和版本历史。可以让团队协作更高效,避免文件版本混乱。你可以添加权限管理功能,控制编辑和查看权限。还可以支持文档模板,快速创建常用文档。 + + + +## 七、如何把创意变成现实? + +看了这么多创意,是不是有点心动了?但是如何把创意变成现实呢? + +1)选择一个创意 + +从上面的 100 个创意中,选择一个你最感兴趣的。不要贪多,一次只做一个项目。 + +2)明确核心功能 + +不要一开始就想做所有功能,先明确最核心的 3-5 个功能。其他功能可以后续添加。 + +比如你想做一个博客平台,核心功能可以是:发布文章、浏览文章、用户注册登录。评论、点赞、关注等功能可以后续添加。 + +3)按照标准流程开发 + +按照我们在《标准开发流程》中讲的 5 步流程来开发:需求研究、写 PRD、写技术设计、写 AGENTS.md、开始开发。 + +这个流程看起来麻烦,但能大大提高成功率。相信我,花 30 分钟写文档,可以节省你几个小时的返工时间。 + +4)快速迭代 + +不要追求完美,先做出一个能用的版本,然后快速迭代。每次迭代只添加一两个功能,确保每次迭代都能看到进步。 + +5)分享和收集用户反馈 + +做出来成品后,分享给朋友或发布到社交媒体,收集用户反馈。根据反馈改进产品,让产品越来越好。 + + + +### 我的经验 + +我做过很多项目,有成功的,也有失败的。失败的项目通常有一个共同点:**想做的太多,结果什么都没做好。** + +成功的项目则相反,一开始我只做最核心的功能,做好后再慢慢添加。比如我的《学习英雄》小程序,一开始只有核心的问答功能,后来才添加了用户统计等功能。 + +所以我的建议是:**从小做起,快速迭代,持续改进**。不要想着一口气做个完美的产品,那是不现实的。 + + + +### 从 AI 应用平台获取灵感 + +除了上面这些创意,你还可以从各大 AI 应用开发平台的作品集中获取灵感。这些平台上有很多用户创建的应用,可以给你提供新的想法。 + +推荐几个平台: + +1、OpenAI GPTs 商店 + +在 [ChatGPT GPTs](https://chat.openai.com/gpts) 上可以看到各种用户创建的 GPT 应用,涵盖写作、编程、设计、教育等各个领域。你可以体验这些应用,看看哪些功能可以用网页或小程序的形式实现。 + +![](https://pic.yupi.icu/1/image-20260112125511653.png) + +2、豆包 AI 应用平台 + +豆包的 [应用生成平台](https://www.doubao.com/code/chat) 和 [创作广场](https://www.doubao.com/code/launch) 上有很多创意应用。这些应用大多是用 AI 快速生成的,可以给你提供很好的参考。你可以看看别人都在做什么、哪些应用受欢迎,从中找到自己的方向。 + +![](https://pic.yupi.icu/1/image-20260112125557162.png) + +还有很多类似的平台,比如 Character.AI 等,都可以作为灵感来源。 + +但是要注意,参考不是抄袭,而是需要学习和创新。看到好的创意后,思考如何做得更好,如何加入自己的特色,才有更多成功的可能性。 + + + +## 写在最后 + +就分享到这里,我希望你能从这 100 个创意中,找到一个真正感兴趣的项目,然后用 Vibe Coding 的方式把它做出来。不要担心做得不够好,不要害怕失败。每一个项目,无论成功还是失败,都会让你成长。 + +**最重要的是,享受创造的过程。** + +用代码把想法变成现实,这本身就是一件很酷的事情。 + +开始你的创造之旅吧,加油!🛫 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/进阶 | 企业级 AI 编程实战项目.md b/Vibe Coding 零基础教程/20 项目实战/进阶 | 企业级 AI 编程实战项目.md new file mode 100644 index 0000000..a652580 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/进阶 | 企业级 AI 编程实战项目.md @@ -0,0 +1,277 @@ +# 更多企业级 AI 编程实战项目 + + +你好,我是鱼皮。 + +在前面的文章中,我们学习了 Vibe Coding 的项目开发流程,也实战了很多个人项目。这些项目可以帮你入门 AI 编程,掌握基本的开发技能。 + +但如果你想进一步提升编程能力,做出更有竞争力的项目,来帮助自己找编程相关的工作、拿 Offer,那么我推荐你学习更多企业级的 AI 编程实战项目。 + +作为国内顶级的 [编程学习网站 - 编程导航](https://codefather.cn/) 的创始人,我已经坚持带大家做了好几年的项目,很多同学通过学习这些项目,成功拿到了大厂 Offer! + +![](https://pic.yupi.icu/1/de62f4cc-32cb-4814-aca7-03c232d0e2d2.png) + +这篇文章,我会介绍我在 [编程导航平台](https://codefather.cn/) 上的企业级 AI 项目教程。这些项目都是我精心设计的,对标真实的企业业务场景,涵盖了 AI 应用开发的各个方面。项目资料包括完整的视频教程 / 文字教程、可运行的完整源码、简历写法、面试题解、答疑解惑,真正做到一条龙服务。 + +👉🏻 建议在做项目前,先完整阅读 [鱼皮的项目学习建议](https://www.codefather.cn/post/1797431216467001345),选择适合你的项目、并学习高效做项目的方法。 + + + +## 一、为什么要学企业级项目? + +你可能会问:我已经会用 Vibe Coding 做项目了,为什么还要学企业级项目? + +原因很简单:个人项目和企业级项目的差距是巨大的。 + +个人项目注重快速实现功能,而企业级项目注重: + +- 完整的开发流程(需求分析、架构设计、开发、测试、上线) +- 规范的代码质量(代码规范、设计模式、单元测试) +- 真实的业务场景(用户认证、权限控制、数据安全) +- 系统的架构设计(微服务、分布式、高并发) +- 持续的运维监控(日志、监控、性能优化) + +学习企业级项目,不仅能提升你的技术能力,更能让你理解真实的商业项目是如何开发的。这对于求职和工作都有巨大的帮助。 + +而且,这些项目都融入了最新的 AI 技术,让你在掌握传统开发技能的同时,也能紧跟 AI 时代的潮流。 + + + +## 二、鱼皮的 AI 项目系列 + +下面介绍我在编程导航平台上的企业级 AI 项目教程。这些项目都是我亲自设计和讲解的,每个项目都有完整的教程和配套资料。 + +👉🏻 你也可以直接访问 [编程导航 AI 项目学习专区](https://www.codefather.cn/course?sortField=priority&tags%5B%5D=AI%E9%A1%B9%E7%9B%AE),查看所有的 AI 项目。 + + + +### AI 零代码应用生成平台 + +基于 Spring Boot + LangChain4j + LangGraph4j + Vue 3 开发的企业级 AI 代码生成平台,对标大厂。这是一个以 AI 开发 + 后端架构为核心的微服务全栈项目,实战 AI 智能体、AI 工作流、多种设计模式、Spring Cloud + Dubbo 微服务架构、多维度系统优化等。 + +适合人群:有一定项目经验,想要学习微服务架构和 AI 智能体开发的同学。 + +[👉🏻 点击开始学习](https://www.codefather.cn/course/1948291549923344386) + +技术亮点: + +- LangChain4j + LangGraph4j AI 框架 +- AI 智能体和工作流 +- Spring Cloud + Dubbo 微服务 +- 多种设计模式实战 +- COS 对象存储 +- Selenium 自动化 +- 响应式编程 +- 企业级监控体系 + + + +![鱼皮 AI 零代码应用生成平台项目](https://pic.yupi.icu/1/1753332293578-0ccc2a53-6d98-41a7-b714-16fa6a7f095f-20250814154720271.png) + + + +### 智能协同云图库 + +基于 Vue 3 + Spring Boot + COS + WebSocket 的企业级智能协同云图库平台。涉及文件存管、内容检索、权限控制、实时协同等企业主流业务场景,技术栈包括 MySQL 分库分表、Redis + Caffeine 多级缓存、COS 对象存储、Sa-Token 权限控制、DDD 领域驱动设计、WebSocket 实时通讯、AI 绘图大模型等。 + +适合人群:想要学习企业级架构设计和实时协同功能的同学。 + +[👉🏻 点击开始学习](https://www.codefather.cn/course/1864210260732116994) + +技术亮点: + +- Vue 3 + Spring Boot 全栈 +- MySQL 分库分表 +- Redis + Caffeine 多级缓存 +- COS 对象存储 +- WebSocket 实时协同 +- AI 绘图大模型集成 +- DDD 领域驱动设计 + + + +![鱼皮智能协同云图库项目](https://pic.yupi.icu/1/image-yupic.png) + + + + +### AI 答题应用平台 + +基于 React + Spring Boot 的 AI 答题应用平台,深入业务场景,学习实战 React 跨端小程序开发、Vue3 AI 应用网站开发,后端分库分表、分布式锁、缓存、幂等设计、设计模式、RxJava 响应式编程、SSE 实时推送、线程池隔离等,大幅提升开发经验和架构设计能力。 + +适合人群:想要学习跨端开发和响应式编程的同学。 + +[👉🏻 点击开始学习](https://www.codefather.cn/course/1790274408835506178) + +技术亮点: + +- React 跨端小程序开发 +- Vue 3 + Spring Boot 全栈 +- MySQL 分库分表 +- 分布式锁和缓存 +- RxJava 响应式编程 +- SSE 实时推送 +- AI 题目生成 + + + +![鱼皮 AI 答题应用平台项目](https://pic.yupi.icu/1/20240604145229177.png) + + + + + + +### 智能面试刷题平台 + +基于 React + Next.js + Spring Boot 的智能面试刷题平台,真实企业级项目。学习实战 React + Next.js 服务端渲染网站开发,后端 Redis 多级缓存、Elasticsearch 搜索、Redisson 高级数据结构、Druid 并发、HotKey 探测、Sa-Token 权限控制、Nacos 动态配置、Sentinel 流控、反爬虫设计等,提升技术运用能力。 + +适合人群:想要学习服务端渲染和高级缓存技术的同学。 + +[👉🏻 点击开始学习](https://www.codefather.cn/course/1826803928691945473) + +技术亮点: + +- Next.js 服务端渲染 +- Redis 多级缓存 +- Elasticsearch 搜索 +- Redisson 高级数据结构 +- HotKey 探测 +- Sentinel 流控 +- 反爬虫设计 + + + +![鱼皮智能面试刷题平台项目](https://pic.yupi.icu/1/image-20240928131639783.png) + + + + +### 多公众号智能管理系统 + +基于 Spring Boot + WxJava + Spring AI 的公众号智能管理系统,实战公众号业务,包括多公众号管理、服务器认证、素材管理、回复管理、菜单管理、AI 自动回复等场景,涉及内网穿透、虚拟线程等实践。 + +适合人群:想要学习公众号开发和 AI 自动回复的同学。 + +[👉🏻 点击开始学习](https://www.codefather.cn/course/1932410836060119041) + +技术亮点: + +- WxJava 公众号开发 +- Spring AI 框架 +- 多公众号管理 +- AI 自动回复 +- 内网穿透 +- 虚拟线程 + + + +![鱼皮多公众号智能管理系统项目](https://pic.yupi.icu/1/1743665084072-ce18bc93-e711-40d3-9111-14e5cae8587e.png) + + + + +### AI 编程助手 + +基于 Spring Boot + LangChain4j 开发的 AI 编程助手,适合新手入门 AI 应用开发。通过这个项目,你可以实战 LangChain4j 框架的主流用法和特性,包括对话记忆、结构化输出、AI Service、RAG、工具调用、MCP、SSE 等。 + +适合人群:刚学完 Spring Boot,想要入门 AI 应用开发的同学。 + +[👉🏻 点击开始学习](https://www.codefather.cn/course/1943267371799080961) + +技术亮点: + +- LangChain4j 框架全面实战 +- 对话记忆和上下文管理 +- 结构化输出和数据解析 +- RAG 知识库问答 +- 工具调用和 MCP 集成 +- SSE 流式输出 + +![鱼皮 AI 编程助手项目](https://pic.yupi.icu/1/1752027043776-cd6d17ed-175f-4c7e-8b25-aee81a5296b2-20250710114302208.png) + + + + +### AI 程序员技术练兵场 + +基于 Java + Vue + LangChain4j 开发的全栈 AI 应用,帮助程序员通过挑战提升技术水平。这是一个以 AI 编程为主的项目,实战 LangChain4j AI 框架、结构化输出、提示词工程,掌握企业级 AI 应用开发流程和技巧。 + +适合人群:有 Java 和 Vue 基础,想要提升 AI 应用开发能力的同学。 + +[👉🏻 点击开始学习](https://www.codefather.cn/course/1965699176489484289) + +技术亮点: + +- LangChain4j 框架实战 +- 结构化输出和数据解析 +- 提示词工程和优化 +- Vue 3 全栈开发 +- 游戏化学习设计 + + + +![鱼皮 AI 程序员技术练兵场项目](https://pic.yupi.icu/1/1760438722374-4e8edebc-d975-4873-8f06-9e9856733694.png) + + + +### 智能 BI 平台 + +基于 Spring Boot + React 的智能 BI 数据分析平台,学习实践异步化、线程池、RabbitMQ 消息队列、AI 应用开发、AIGC Prompt 优化等技术。用户可以上传数据,AI 自动生成分析报告和图表。 + +适合人群:想要学习消息队列和 AI 数据分析的同学。 + +[👉🏻 点击开始学习](https://www.codefather.cn/course/1790980531403927553) + +技术亮点: + +- 异步化和线程池 +- RabbitMQ 消息队列 +- AI 数据分析 +- AIGC Prompt 优化 +- 图表生成 + + + +![鱼皮智能 BI 平台项目](https://pic.yupi.icu/1/bi-20231026151929666.png) + + + +### AI 自动回复工具 + +基于 Spring Boot 的智能监控和 AI 自动回复工具,实战中介者模式 + OpenAI 集成,掌握定时任务调度、第三方平台对接、Docker 容器化部署,培养企业级架构设计思维。 + +适合人群:想要学习设计模式和自动化工具开发的同学。 + +[👉🏻 点击开始学习](https://www.codefather.cn/course/1966420016440999938) + +技术亮点: + +- 中介者模式 +- OpenAI 集成 +- 定时任务调度 +- 第三方平台对接 +- Docker 容器化部署 + + + +![鱼皮 AI 自动回复工具项目](https://pic.yupi.icu/1/1756260059900-8be2cc5d-0cfc-4b7f-b99d-47c82af1925c.png) + + + +加油,未来的 AI 工程师!💪 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/进阶 | 企业项目开发流程.md b/Vibe Coding 零基础教程/20 项目实战/进阶 | 企业项目开发流程.md new file mode 100644 index 0000000..1f56aa6 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/进阶 | 企业项目开发流程.md @@ -0,0 +1,558 @@ +# 企业项目开发流程 + +> 揭秘大厂项目是如何诞生的 + + +你好,我是鱼皮。 + +在前面的文章中,我们学习了 Vibe Coding 的项目开发流程,也实战了很多个人项目。这些项目大多是自己一个人完成的,从需求到设计到开发到上线,全程自己掌控。 + +但你可能会好奇:企业中做项目是怎样的流程?尤其是大厂那些百万用户的项目,和自己学编程时做项目到底有什么区别呢? + +实话说,区别可大了!自己开发项目那是单打独斗,自己掌握命运,不会拖垮队友。但企业中开发项目是开团打本,大家是一根绳上的蚂蚱,每个人都会影响整个项目。 + +![](https://pic.yupi.icu/5563/202311060822776.png) + +我自己光大学的时候就在几家公司实习过,不得不说,大厂和其他公司的研发流程也有很大的区别。对于大多数同学来说,如果没有在大厂工作过,对很多研发环节可能都是一无所知的。 + +所以这篇文章就来揭秘一下大厂的项目研发流程,帮大家开拓思路。即使你现在用 Vibe Coding 做个人项目,了解企业的开发流程也能让你的项目更加规范和专业。而且,如果你将来想进入大厂工作,提前了解这些流程会让你更有竞争力。 + +![](https://pic.yupi.icu/5563/202311060822458.png) + +如果你想更直观地了解大厂项目开发流程,强烈推荐观看我的视频:[一线大厂项目是怎么做出来的](https://www.bilibili.com/video/BV11q4y1T7kY/),结合视频和本文一起学习,效果更好。 + + + +### 研发流程全景图 + +为了规范团队、保证项目的进展,大厂研发流程一般还是比较复杂的。可以分为很多个阶段,用一张思维导图来概括: + +![企业项目开发流程思维导图](https://pic.yupi.icu/roadmap/enterprise-project-development-process.png) + +需要注意的是,以上阶段并不是完全按从上到下的顺序执行,阶段间可能存在交叉,比如 **技术选型** 其实在 **设计阶段** 就应该考虑。 + +正式工作一年多,我也是经历过多次项目的完整研发流程的。下面就以我的视角,带大家快速过一遍~ + +(为了内容更有趣,以下故事有虚构成分) + + + +## 需求阶段 + +今天是周一,鱼皮像往常一样骑着他的小电动车来到公司,殊不知,等待他的是一场噩梦的开始。 + +### 需求产生 + +上午十点,产品妹子找到鱼皮,告诉他:咱们的系统上线后,用户表示很多功能并不好用,需要大改。 + +老板也找到鱼皮,告诉他:我今天打开页面竟然加载了十几秒,咱们这个系统的性能太烂了吧! + +鱼皮心想:呕豁,完蛋!估计得做个新的项目了,又要开会了。 + +![](https://pic.yupi.icu/5563/202311060822455.png) + +果然,没过多久,屏幕上弹出了一条 “欢迎加入会议” 的邀请。 + + + +### 需求评审 + +第二天上午,老板、产品、测试、几位开发大哥和鱼皮一起来到会议室,具体讨论昨天提到的那些需求 **是否合理、要不要做**? + +产品妹子打开文档,说到:这一期呢,我们要做这几个需求,下面我来详细讲一下,大家一起评估下有没有问题。 + + + +### 需求分析 + +接下来,产品妹子正在对着屏幕侃侃而谈、疯狂输出时,旁边的开发大哥坐不住了。 + +开发大哥:这个需求不合理啊! + +产品:为啥不合理?用户就是有这个需求啊! + +开发大哥:我知道,实现不了啊! + +于是开始了经典的产品开发撕逼大战。。。 + +![](https://pic.yupi.icu/5563/202311060822360.png) + +而鱼皮正躲在角落冷静分析 **这个需求怎么做**,过了一会儿,提出了一种改动低、实现快的解决方案,平息了这场战争。 + +在 AI 时代,我们还可以用 AI 工具(如 ChatGPT、Cursor)来辅助分析需求,快速生成多种技术方案进行对比,大大提升需求分析的效率。 + + + +### 排期 + +确定需求合理、可实现之后,产品妹子问到:那这个需求啥时候能上线呀? + +开发大哥:我这周忙,下周吧。 + +产品:用户可能比较着急,这周就要呢! + +开发大哥:我知道,做不完啊! + +于是开始了经典的产品开发撕逼大战。。。 + +![](https://pic.yupi.icu/5563/202311060822785.png) + +鱼皮:要不我们把这个需求拆解为功能 A 和功能 B,这周我先把功能 A 做了,功能 B 排到下周二测试,下周四上线? + +就这样,我们一个个安排了需求的计划完成日期。 + + + +## 设计阶段 + +终于开完会了,看了下时间,都该下班了! + +唉,需求讨论完了,产品的工作是完成了一些,可鱼皮的工作才刚刚开始。 + +急着开始写代码么? + +**不,想好怎么写代码比写代码更重要。** + + + +### 架构设计 + +鱼皮打开写文档软件和画图软件,开始梳理整个系统,从整体到局部,依次设计出系统的层次结构、各层间交互的接口和通讯方式、每层之间包含哪些重要模块、模块选择何种物理部署方式等。 + +![知名框架 Dubbo 的架构设计](https://pic.yupi.icu/5563/202311060822027.png) + +现在有了 AI 工具的加持,我们可以用 AI 辅助生成架构图、分析架构方案的优缺点,甚至让 AI 帮我们做技术调研,大大提升设计效率。建议观看鱼皮分享的 [AI 画图保姆级指南和技巧分享视频](https://www.bilibili.com/video/BV1DP7JzAE7k/)。 + + + +### 概要设计 + +写完架构设计后,鱼皮开始对着产品妹子写的 PRD(产品需求文档),分析需求,然后依然是从整体到局部,先整理出系统需要的功能模块,再分析每个功能模块内有哪些子模块。 + +和抽象的架构设计相比,概要设计和需求的关系更紧密,是对架构设计的细化。 + +打个比方大家就明白了,你要盖一栋楼,架构设计就是从整体来考虑,总共有几层、每层管道怎么接、每层有几户、地基怎么打等;而概要设计就是考虑每户套件的内部怎么划分,哪里是客厅、哪里是卫生间。 + +> 很多情况下,概要设计和架构设计可能会在一个文档中进行,划分并不明确。 + + + +### 详细设计 + +想好系统有哪些功能后,鱼皮就开始具体分析每个功能如何实现,用到哪些算法、需要注重哪些细节等。 + + + +### 方案对齐 + +写好设计文档后,下次会议上,鱼皮和其他的开发同学(前端、后端等)一起针对自己设计的方案展开讨论,最终产生一个统一的方案,然后大家分工去做就好了。 + + + +### 测试用例设计 + +为了保证系统功能的正常稳定,测试同学(或者叫 QA)是非常重要的。关于软件测试的详细学习,可以查看 [软件测试学习路线](https://www.codefather.cn/course/1789189862986850306/section/1990755616108359682)。测试不是像我们自己做项目一样对着网页点几下就 ok 了。 + +在大公司中,为了保证测试的覆盖度、提高测试效率,一般是要设计测试用例的,比如:用户点击 “登录”,未传任何数据,期望结果是警告用户输入用户名和密码。 + +![测试用例管理](https://pic.yupi.icu/5563/202311060822534.png) + +测试用例设计完后,需要其他同学一起来评审把关,而不是只交给测试同学。因为一个人很容易忽略掉很多测试细节,最好让更熟悉代码的开发同学一起帮忙补充。 + +鱼皮自己也写了几个测试可能会遗漏的用例,和测试同学一起进行了确认,尽量让问题暴露在测试阶段而不是线上。 + + + +## 研发准备 + +写了快一周的设计文档,终于准备开始动手搭建项目了。但在此之前,还有一些准备工作要进行。 + + + +### 技术预研 + +如今技术发展太快,新技术层出不穷,所以鱼皮首先对项目中需要或可能需要用到的技术进行了调研。 + +在 AI 时代,技术调研变得更加高效。我们可以用 AI 工具快速了解新技术、对比不同方案,甚至让 AI 帮我们生成技术选型报告。 + + + +### 技术选型 + +通过调研,鱼皮得到了几个可以满足需求的技术,但他开始纠结:这么多技术,我该用哪一个呢?是用 SSM 框架还是 Spring Boot 呢?用 Guava 包还是 Apache Commons 呢? + +鱼皮又打开了写文档软件,开始对比不同技术的优劣,头疼啊,技术选型要考量的因素太多了,比如: + +- 单从技术考虑:性能、易用性、稳定性、主流程度和生态、文档详细度 +- 结合团队:团队成员对技术的熟悉度、掌控度(有无精通该技术的人) +- 结合业务:是否适应业务的量级(单机 or 微服务)、是否适应业务(读多、写多 or 分析多) + +对于关键的项目,鱼皮自己还不敢完全确定选型,因此在写好自己的选型文档后,和同事和 Leader 一起讨论,才最终确认。 + + + +### 资源申请 + +确认好技术后,就要申请资源。比如鱼皮用到了 MySQL 数据库,但是这个 MySQL 从哪儿来呢? + +以前的话,鱼皮都是去买一台云服务器,自己搭建 MySQL。但是在企业中,一般是有集中管理和分配资源的平台的,直接到平台填写预算、等领导审批、然后等着下发资源就好了。千万不能私自用自己的或买外部的服务器来部署项目,不安全! + +鱼皮这次直接申请到了 2 万多一年的云数据库,真的是爽死了。 + +![](https://pic.yupi.icu/5563/202311060822734.png) + + + +### 环境准备 + +申请好数据库等资源后,鱼皮按照申请机器的版本搭建了一模一样的本地开发环境和测试环境,后面就可以直接连接了。 + + + +### 项目初始化 + +环境准备妥当后,由于是新项目,鱼皮要搞一个最小可运行的初始化项目 Demo,使用 **脚手架** 自动生成代码,而不是从零开始一个个新建文件、手敲重复代码。 + +现在还有更智能的方式:使用 AI 工具(如 Cursor、GitHub Copilot)来辅助初始化项目、生成模板代码,大大节省时间。 + + + +### 依赖安装 + +生成了项目代码后,鱼皮使用包管理工具(前端 yarn/npm、Java Maven / Gradle 等)自动安装依赖,然后项目 Demo 就可以运行啦! + + + +## 研发阶段 + +前期准备完成后,这才到了程序员朋友们最熟悉的写代码环节,也是鱼皮最爱的环节。 + +![](https://pic.yupi.icu/5563/202311060822531.png) + +因为之前设计方案时需要保持冷静、仔细思考,没法边听歌儿边做;而方案设计好后,已经明确了该怎么做,写代码实现就很简单了,顶多是遇到一些坑,上网搜索去解决就好了。 + + + +### 本地开发 + +开发时,一般鱼皮会先在本地写代码,通过配置热更新工具,实现代码更新时自动重新编译打包,而不用手动重启项目,大大提高了开发效率。 + +对了,企业开发都会使用版本控制系统的,比如 Git,开发前记得先创建一个自己的分支,在这个分支上开发。 + + + +### 远程开发 + +现在还有一种比较流行的远程开发方式,就是可以像编辑本地文件一样编辑远程文件,直接修改服务器上的代码。一般我们每位研发同学是有自己的开发机的,通过远程开发就省去了反复部署调试的麻烦,提高效率。一般用 VSCode 等开发工具,安装远程开发插件就可以实现了。鱼皮之前分享过一个简单的 [VSCode 远程开发实操视频](https://www.bilibili.com/video/BV1s64y167cM),可以看一下。 + + + +### AI 辅助开发 + +在 2025 年,AI 辅助开发已经成为主流。鱼皮现在写代码时经常使用 Cursor、GitHub Copilot 等 AI 工具,它们能够: + +- 自动补全代码,提升编码效率 +- 生成单元测试,保证代码质量 +- 解释复杂代码,帮助理解 +- 发现潜在 Bug,提前预警 +- 重构优化代码,提升可维护性 + +推荐大家使用 [AI 资源大全](https://ai.codefather.cn/) 中的工具,提升开发效率。 + +![AI资源大全网站](https://pic.yupi.icu/1/AI%E8%B5%84%E6%BA%90%E5%A4%A7%E5%85%A8%E7%BD%91%E7%AB%99.png) + + + +### 代码优化 + +鱼皮在写代码的时候,始终保持主动优化代码的好习惯,注重代码的时空复杂度;并且当重复代码多了,会想办法抽象成函数或者使用设计模式。之前专门写文章分享过我的编程习惯:[我写代码时的小倔强](https://mp.weixin.qq.com/s?__biz=MzI1NDczNTAwMA==&mid=2247497781&idx=1&sn=9c5ec35cda90ca080ba1dbfa78429275&scene=21#wechat_redirect)。 + + + +### 单元测试 + +注意!不要听到测试就以为是测试同学的工作,开发同学也同样需要编写小粒度的测试来为自己的代码负责。 + +鱼皮一般会为每个数据库读写函数和业务逻辑函数编写单元测试,像 Java 的话一般用 JUnit 等工具,还可以用 Jacoco 生成测试覆盖度报告。每次修改关键代码后,都要执行一遍单元测试,防止意外错误。 + +![Jacoco 测试覆盖度报告](https://pic.yupi.icu/5563/202311060822942.png) + +现在还可以用 AI 工具自动生成单元测试代码,省去很多重复劳动。 + +### 开发联调 + +鱼皮终于写好了后端代码,也自测完成了,下面就是把写好的代码打包构建,然后把可执行项目包发布到测试服务器上,和前端同学一起联调,让他请求我的接口,验证系统的功能是否可用。 + + + +## 测试验证 + +鱼皮和前端联调完毕后,告知了测试和产品同学。 + +测试验证是企业中至关重要的环节,甚至可以说是最后一道防线。测试的目的是找 Bug,尽量发现系统中的问题,把它们扼杀在测试阶段。 + +在企业中,测试验证又有很多类型。 + + + +### 集成测试 + +集成测试比单元测试粒度更大,是把多个模块或代码单元放在一起,验证模块之间的集成和调用关系。 + +因为单个函数的执行可能是正常的,但把多个函数组合在一起顺序调用,可能就会出现问题。 + +打个比方,我们有个吃面包系统: + +功能 A:小鱼吃一个面包 + +功能 B:小皮吃一个面包 + +每次只有一个面包,独立执行功能 A 和 B 都是允许的。但如果两个一起执行,后执行的那个功能就会报错。 + +![](https://pic.yupi.icu/5563/202311060822513.png) + + + +### 系统测试 + +系统测试比集成测试的粒度更大,测试对象是整个系统,不仅包括软件,还可能覆盖对硬件的测试。 + + + +### 产品体验 + +除了测试同学要验证系统可用性,产品妹子也要体验下功能是否符合预期、是否易用。大多数情况下,产品会在体验时提出修改建议,开发可能还要再去做一些修改。 + + + +### 验收测试 + +测试和产品妹子终于表示没有问题啦,那就到了最后一步,把整个产品或功能给最终的用户来体验。老板/用户说没问题,才是真的没问题! + + + +## 提交阶段 + +系统没问题之后,鱼皮就可以把代码发布到远程仓库了,一般使用 Git 和 SVN 等版本控制系统。 + +### 代码提交 + +鱼皮首先在本地触发代码提交(git commit),为保证规范,在大项目中一般会使用提交检测插件(如 Husky、pre-commit hook),防止你把错误的代码进行了提交。 + +现代的代码提交还会自动触发: +- 代码格式检查(Prettier、ESLint) +- 单元测试执行 +- 代码规范检查(CheckStyle、SonarLint) + + + +### 代码推送 + +下一步就是把本地的提交推送到远程的同名分支。一般大厂会有推送检测工具,检测代码的错误、圈复杂度、代码规范等,和提交检测一样,防止你把错误或不规范的代码进行了推送。 + + + +### 合并请求 + +代码分支推送到远程之后,鱼皮发起了一个分支合并请求(MR 或 PR),希望把该分支的代码合并到主干分支(没问题的代码)。 + +![发起新合并请求](https://pic.yupi.icu/5563/202311060822490.png) + + + +### 代码审查 + +并不是发起了合并请求就能直接合并,还要通过代码审查,即 CR(Code Review)。 + +审查又分为两种方式:人审和机审。 + +相信不少同学都知道人审,一般是由你的上级和其他项目负责人来阅读和评论你的代码,觉得没问题就 Approve(通过),否则打回去修改。 + +那机审是个啥呢?其实就是机器自动检测你的代码是否符合规范,是否能够成功自动化构建等,一般是由项目负责人配置的,可以帮助发现一些人工难以发现的问题。 + +刚接触新项目的时候,鱼皮经常被机审折磨得苦不堪言,经常被提示一些莫名其妙的代码问题,比如加号要换行,文件行末要加空行等。但后来注意编码习惯后,就很自然地适应了,的确不错。 + +现在还有 AI Code Review 工具,能够自动发现代码中的问题、提出优化建议,进一步提升代码质量。 + + + +## 发布阶段 + +代码审查通过后,鱼皮的项目代码就可以发布上线啦。 + +![](https://pic.yupi.icu/5563/202311060822491.png) + +### 打包构建 + +传统上线方式是开发人员到正式服务器上拉取代码,然后安装依赖,再通过工具把代码打包构建,得到部署包,通过 Nginx、Tomcat、Docker 等技术运行。 + +但这样效率很低,有很多重复工作。所以大厂一般是用自动化构建的,像 Jenkins、GitLab CI、GitHub Actions 等 CI/CD 工具。代码合并到主分支后,由机器自动把代码打包构建为最终的部署包。 + + + +### 预发布 + +为了防止上线出问题,一般我们会先在预发布环境部署项目,再观察一下是否能够正常运行。预发布环境的配置和生产环境完全一致,但只有内部人员能访问。 + + + +### 正式发布 + +预发布测试正常后,鱼皮终于等到了上线的这一刻。大项目一般都会部署在多台机器上,所以不可能一台台登录机器去发布部署包。 + +一般公司会提供可视化发布平台,点选需要发布的机器(一般先灰度,选一小部分机器,再全量发布),点击一键发布,等项目管理员审批通过之后,就交给机器自动部署吧! + +在云原生时代,很多公司使用 Kubernetes 进行容器编排和自动部署,发布流程变得更加自动化和标准化。 + + + +## 后续 + +鱼皮曾天真地以为项目上线之后,就可以高枕无忧了。但后来发现,项目上线之后,同样需要保持警觉。虽然已经测试过,但仍然时不时会出现个预期之外的小 Bug,还是很考验心态的。 + +![](https://pic.yupi.icu/5563/202311060823102.png) + +来看看上线之后,鱼皮做了哪些事呢? + + + +### 监控运维 + +鱼皮会定期查看项目的监控面板,观察项目的运行情况、机器的负载、接口的响应时间、错误率等关键指标。 + +现代的监控系统非常强大,可以实时监控系统的各项指标,一旦发现异常就会立即告警。常用的监控工具有: + +- Prometheus + Grafana:开源监控方案 +- ELK(Elasticsearch + Logstash + Kibana):日志收集和分析 +- SkyWalking:分布式追踪系统 +- 云厂商的监控服务(阿里云监控、腾讯云监控等) + +鱼皮把自己学到的东西分享了出来,如果想要了解大厂是怎么监控项目的,可以看看 [Prometheus + Grafana 可观测性实战保姆级教程视频](https://www.bilibili.com/video/BV1QPYDztEtW)。 + + + +### 统计分析 + +鱼皮在代码中添加了一些日志,可以利用 ELK 等日志收集可视化平台对这些日志进行分析,从而感知到用户的行为,进一步优化业务和系统。 + +比如我会统计用户执行 SQL 查询的耗时,对重复率高的慢 SQL 进行针对性地优化。 + + + +### 事件反馈 + +有的时候,用户自己都不能清楚地描述 Bug,而且历史 Bug 也不方便找到。所以公司内部一般会有事件反馈平台,产品等内部同学在接收到 Bug 时,会在该平台发布一个 Bug 事件,详细描述 Bug 出现的时间、状况、详情等,便于我们开发集中分析和处理问题。 + +![事件反馈平台](https://pic.yupi.icu/5563/202311060823531.png) + + + +### 文档沉淀 + +每次上线了新功能和项目,鱼皮都会通过写文档来记录项目的背景、设计方案、开发过程和一些坑点,便于后续其他同学了解项目,这是非常重要的!利人利己。 + +好的文档能够: +- 帮助新人快速了解项目 +- 记录技术决策和演进历程 +- 避免重复踩坑 +- 方便后续维护和迭代 + + + +### 迭代优化 + +最后,一个需求的结束往往只是另一个需求的开始。像鱼皮最近在跟进的项目,一期做完做二期,二期还没做完三期就来了;还要抽出时间去优化以前的代码,这日子遥遥无期,没盼头啊! + + + +## 研发流程对比 + +为了让大家更清楚地理解企业项目开发和个人项目开发的区别,鱼皮整理了一个对比表格: + +| 环节 | 个人项目 | 企业项目 | +|------|----------|----------| +| **需求** | 自己想做什么就做什么 | 需求评审、需求分析、排期 | +| **设计** | 想到哪写到哪 | 架构设计、概要设计、详细设计、方案评审 | +| **开发** | 一个人写代码 | 多人协作、分支管理、代码规范 | +| **测试** | 自己点点看 | 单元测试、集成测试、系统测试、测试用例 | +| **部署** | 随便部署 | 预发布、灰度发布、全量发布 | +| **上线后** | 不管了 | 监控、日志分析、Bug 修复、迭代优化 | + +可以看到,企业项目开发的流程要复杂得多,但这些流程都是为了保证项目的质量和稳定性。 + + + +## 学习建议 + +### 如何学习企业项目开发流程? + +1)通过项目实战学习:最好的学习方式是参加真实的企业项目。如果还是学生或者刚入职,建议多观察团队的开发流程,主动参加各个环节。 + +2)跟着教程做完整项目:如果没有企业项目经验,可以跟着 [鱼皮的实战项目教程](https://www.codefather.cn/post/1797431216467001345) 学习。[编程导航的项目教程](https://www.codefather.cn/post/1797431216467001345) 都是按照企业开发流程来设计的,包含需求分析、架构设计、开发、测试、部署等完整环节。 + +3)学习 Git 和 CI/CD:版本控制和自动化部署是企业开发的基础,要重点学习。建议学习 [Git 学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190804671012866) 和 [CI/CD 持续集成学习路线](https://www.codefather.cn/course/1789189862986850306/section/1990755091384152066)。 + +4)了解敏捷开发:现代互联网公司大多采用敏捷开发,要了解 Scrum、Sprint、每日站会等概念。 + + + +### 推荐的学习路线 + +总结一下,如果你想系统学习企业项目开发,建议按以下顺序学习相关技术: + +1. [Git 和 GitHub 学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190804671012866):掌握版本控制 +2. [软件工程学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190653197918210):理解开发规范和设计模式 +3. [DevOps 工程师学习路线](https://www.codefather.cn/course/1789189862986850306/section/1990755061927555073):了解 DevOps 实践 +4. [CI/CD 学习路线](https://www.codefather.cn/course/1789189862986850306/section/1990755091384152066):掌握自动化部署 +5. 跟着 [鱼皮的项目教程](https://www.codefather.cn/post/1797431216467001345) 做完整项目:体验企业级项目开发流程 + + + +## 推荐资源 + +### 视频教程 + +- ⭐ [鱼皮的大厂项目开发流程视频](https://www.bilibili.com/video/BV11q4y1T7kY/):一线大厂项目是怎么做出来的 + +### 项目实战 + +- ⭐ [编程导航 - 鱼皮原创项目教程系列](https://www.codefather.cn/post/1797431216467001345):企业级项目开发完整流程 +- [项目学习建议](https://www.codefather.cn/post/xiangmu-xuexijianyi):如何学习项目 + +### 工具平台 + +- [Git](https://git-scm.com/):版本控制系统 +- [GitHub](https://github.com/) / [GitLab](https://about.gitlab.com/):代码托管平台 +- [Jenkins](https://www.jenkins.io/):自动化构建工具 +- [Jira](https://www.atlassian.com/software/jira):项目管理工具 +- [禅道](https://www.zentao.net/):国产项目管理工具 + +### 技术博客 + +- [Atlassian Blog](https://www.atlassian.com/blog):敏捷开发和项目管理 +- [GitLab Blog](https://about.gitlab.com/blog/):DevOps 和协作流程 +- [Spotify Engineering](https://engineering.atspotify.com/):Spotify 团队协作 +- [Netflix TechBlog](https://netflixtechblog.com/):Netflix 研发效能 + + + +## 写在最后 + +看完本文后,相信你对企业项目开发流程有了更清晰的认识。企业开发和个人开发最大的区别在于:企业开发强调流程、规范、协作、质量保证,而个人开发更注重快速实现功能。 + +你可能会问:学习 Vibe Coding 和了解企业开发流程有什么关系? + +其实关系很大。虽然 Vibe Coding 让我们可以快速开发项目,但企业级项目的很多理念和实践仍然值得学习。比如需求分析、架构设计、代码审查、自动化测试、监控运维等,这些都是保证项目质量的关键环节。 + +即使你用 AI 来开发,也要遵循这些基本的开发规范。好的流程和规范不会限制你的创造力,反而会让你的项目更加稳定和可维护。 + +如果你想进入大厂工作,建议提前了解企业项目开发流程,学习相关的工具和方法论。跟着我的项目教程做几个完整的项目,实践企业级项目的开发流程,这会让你在求职和工作中更有竞争力。 + +推荐阅读我之前的文章:[大厂机密!30 个提升团队研发效能的锦囊](https://www.codefather.cn/post/1996475461198192641),了解更多大厂研发实践。 + +现在,是时候把学到的知识真正用起来,开始你自己的创造之旅了。 + +加油,未来的爆款产品创始人们!💪 + +![](https://pic.yupi.icu/1/%E5%8A%A0%E6%B2%B9%E8%A1%A8%E6%83%85%E5%8C%85.jpeg) + diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/AI 创意应用 - 互联网数字墓园项目.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/AI 创意应用 - 互联网数字墓园项目.md new file mode 100644 index 0000000..5555349 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/AI 创意应用 - 互联网数字墓园项目.md @@ -0,0 +1,102 @@ +# AI 创意应用 - 互联网数字墓园项目实战 + +本项目是一个有趣的互联网数字墓园网站,用于纪念那些曾经辉煌但已经关闭的互联网产品,包括开心网、快播、千千静听、土豆网等。 + +本文不涉及开发过程,仅给大家分享一个典型的 AI 创意应用案例,帮大家开拓思路。 + + + +--- + + + +大家好,我是程序员鱼皮,分享个有点儿意思的项目,我用 AI 制作了一个 `互联网数字墓园`!用于纪念那些曾经辉煌的互联网产品。 + +![](https://pic.yupi.icu/1/image-20250803162751255.png) + +有这个想法挺突然的,前几天我上网冲浪的时候刷到了人人网,结果发现人人网在 2024 年 12 月就正式停止服务了,心里突然五味杂陈。想想当年还是小学生的我,为了玩开心农场专门注册人人网,每天定闹钟偷菜的日子,那种快乐现在的 00 后、10 后估计都体会不到了吧。 + +然后我就在想,互联网发展这么多年,有多少曾经陪伴我们的网站和应用都悄无声息地消失了?这些数字时代的记忆,总得有个地方好好保存吧。于是我就萌生了一个想法 —— 做一个数字墓园,专门记录那些已经关闭的互联网产品。 + +整个网站从设计、收集素材再到开发,我完全用 AI 来制作,1 小时内搞定。我选择了墓园这个主题,黑灰色调,还加了一些微妙的动画效果,营造出一种纪念氛围。 + +说实话,做出来的效果比我预想的还要好,因此我还专门部署上线、并且搞了个域名:https://gualeme.cn(挂了么),大家也可以访问看看,说不定你的 DNA 就动了~ + +![](https://pic.yupi.icu/1/image-20250803163450884.png) + +网站收录了从 2009 年到 2024 年间关闭的各种国内外网站和应用,按年份排序,每个产品都有简单的介绍和具体的逝世日期。 + +![](https://pic.yupi.icu/1/image-20250803194606031.png) + +> 注意,由于是 AI 生成,可能存在信息不准确的情况,还请指正。 +> +> 代码开源:https://github.com/liyupi/better-coder/tree/master/dead-web + +比如我来提几个国内的经典产品,那可真是一代人的青春记忆。 + + +## 经典产品回顾 + + +### 人人网 + +作为中国版 Facebook,承载了多少 80 后 90 后的青春?当年我在上面玩各种小游戏,乐此不疲,那个时候的社交真的是简单而纯真,可惜最终还是在 2024 年 12 月 2 日和我们正式告别了。 + +![](https://pic.yupi.icu/1/image-20250803164326361.png) + + +### 千千静听 + +这是我印象中用过的第一款音乐播放器,我还记得当时用它听得第一首歌是千里之外。那个简洁的界面,还有当时算是黑科技的歌词同步显示功能,陪伴了多少人的学生时代。2013 年被百度收购后改名百度音乐,算是以另一种形式继续存在着,但那个纯粹的千千静听时代确实结束了。 + +![](https://pic.yupi.icu/1/f6ecbca783ff2cd-1.png) + + +### 土豆网 + +2005 年成立的土豆网,喊出 "每个人都是生活的导演" 这个口号,在那个还没有抖音快手的年代,土豆网就是我们分享视频、展示创意的主要平台。它也是我人生中第一次上传视频的平台,还记得当时我把自己拍的小段子和游戏录屏传上去,期待着播放量突破 10 来着。 + +2012 年后,土豆和优酷合并,2017 年又彻底被优酷吸收。从独立品牌到完全消失,土豆网的衰落过程也拖了好几年,估计现在的小朋友都没听说过这个网站了。 + +![](https://pic.yupi.icu/1/image-20250803164620995.png) + + +### 腾讯微博 + +2010 年推出,凭借 QQ 庞大的用户基础快速起量,2011 年注册用户数甚至超过了新浪微博。但微信的崛起彻底改变了游戏规则,腾讯发现微信比微博更符合自己的战略布局,于是腾讯微博就被战略放弃了。2014 年开始基本就是 "植物人" 状态,直到 2020 年才正式宣布停止服务。 + +![](https://pic.yupi.icu/1/image-20250803165127414.png) + + +### 快播 + +所有倒闭的产品中,最让人唏嘘的可能就是快播了。2014 年 4 月 Qvod 服务器关闭,相关人员也被判刑。至于为什么倒闭和判刑,我就不多说了,懂得都懂。快播在技术上确实是创新的,只是用错了地方。 + +![](https://pic.yupi.icu/1/2025020712054687015.png) + + + +## 写在最后 + +还有其他的网站,比如移动的飞信、虾米音乐、还有天涯社区等等,就不展开说了。每个消失的产品背后都有各自的故事,虽然它们已经衰落了,但它们在互联网发展史上留下的印记是抹不掉的,也承载了我们这一代人的青春。 + +这个项目虽然简单,但它展示了 AI 编程的一个重要应用场景 —— 快速实现创意想法。当你有一个好点子时,不需要花费大量时间学习复杂的技术,只需要用 AI 工具就能在短时间内把想法变成现实。 + +希望这个案例能给你一些启发,让你意识到 AI 编程不仅可以用来做严肃的商业项目,也可以用来实现各种有趣的创意。说不定下一个爆款创意应用,就是你做出来的呢? + +上面这些网站有勾起你的回忆么?你觉得哪个产品最可惜呢?欢迎评论区留言分享吧~ + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/AI 创意应用 - 高考分数预测器项目.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/AI 创意应用 - 高考分数预测器项目.md new file mode 100644 index 0000000..bc121b8 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/AI 创意应用 - 高考分数预测器项目.md @@ -0,0 +1,124 @@ +# AI 创意应用 - 高考分数预测器项目实战 + +本项目是一个有趣的 AI 高考分数预测器,支持科学预测、玄学预测、心理预测、社交预测等多种预测方式。 + +本文不涉及开发过程,仅给大家分享一个典型的 AI 创意应用案例,帮大家开拓思路。 + + + +--- + + + +马上高考了,可惜我今年有事情参加不了了,就帮帮广大考生朋友们,送大家一个我自己做的高考神器吧! + +铛铛铛铛,就是这个 **高考分数预测器**! + +体验地址:[https://gaokao.codefather.cn](https://gaokao.codefather.cn/) + +![](https://pic.yupi.icu/1/1749196072689-c78e6eb5-3446-4071-a40a-28946ac6f2f8.png) + +这可是来自未来的 AI 黑科技,可以预测高考分数。是不是听起来就很厉害?很离谱? + +来来来,测测你是上清华北大?还是 985/211?还是绿翔技校?还是。。。哔哩哔哩大学? + +**推荐观看视频演示,效果更佳:**[https://bilibili.com/video/BV1wqTTzoEoo](https://www.bilibili.com/video/BV1wqTTzoEoo) + +![](https://pic.yupi.icu/1/1749196043750-928b991a-5a28-4fd1-a02c-a4e83740668f.png) + +有 4 种预测方式,每一种都非常炸裂。 + +先来体验【科学预测】,听起来就很科学。这是基于大数据分析与机器学习算法的精准预测,采用多维度学科能力评估模型、结合统计学分析与概率论计算,误差率不高于 0.001%。测试方法很简单,你只需要输入自己 **每一门学科的预期分数**,点击开始科学预测。系统就会运用先进的 ‌Arithmetic addition‌(也就是 **加法运算**),结合正态分布理论进行精确计算。 + +来试试看! + +![](https://pic.yupi.icu/1/1749137873952-46d3d94b-7193-40d7-a7b3-9654e1a28c89.png) + +怎么样,预测的是不是很准确呢?它预测我能考上顶尖院校,清华大学耶! + +![](https://pic.yupi.icu/1/1749137431241-eb102e40-9bce-4159-98de-55a7d2bb2a81.png) + +我当年高考要是有这个好东西,不得支棱起来? + +![](https://pic.yupi.icu/1/1749196106729-172a1359-5072-4773-a0e2-cb87dc54d6fa.jpeg) + +你还可以下载证书的高清大图,无论是和亲朋好友们分享你的喜悦、还是做朋友圈最亮的崽,通通满足,这也是分数预测器的神奇功效。 + +![](https://pic.yupi.icu/1/1749196116388-607732bb-f48a-4961-8ec6-f6f715691ef5.jpeg) + +再来试试【玄学预测】,所谓玄学,就是一种很玄的学问,信则有,不信则无。这是融合古代智慧与现代占卜学的神秘预测,传承紫微斗数、奇门遁甲、周易八卦,结合现代星象学与血型心理学来预测你的命运和学业运势。来吧,输入你的姓名、星座、血型、生肖、还有最关键的出生日期,来吧! + +![](https://pic.yupi.icu/1/1749137831527-c5a50c49-36b9-44bb-ad3f-f7c6dc64a596.png) + +“ + +天地玄黄,宇宙洪荒, + +北斗七星,南斗六司, + +五行生克,八卦推演, + +阴阳消长,乾坤转旋! + +三才既立,四象已明, + +六甲神将,九宫飞星! + +太上老君,急急如律令, + +玄天上帝,显灵显应! + +” + +哇,结果又是清华大学,我只能说我命中注定好吧! + +![](https://pic.yupi.icu/1/1749137995189-dbdc4416-67c0-42d7-a974-a965230285d3.png) + +再来试试我最最最引以为豪的【量子力学预测】,基于薛定谔方程与波函数理论,运用量子纠缠原理分析多重宇宙概率,突破传统预测的时空限制。 + +![](https://pic.yupi.icu/1/1749138175465-f3983ac6-303d-4e4b-9a6f-16184b40cc6b.png) + +只要点击按钮,就能启动量子计算引擎,通过波函数坍塌确定你的高考分数在多重宇宙中的分布。 + +![](https://pic.yupi.icu/1/1749138183051-34ce35ff-3144-4799-afc4-fa12e3af8f7d.png) + +要来了,要来了! + +![](https://pic.yupi.icu/1/1749138203811-544cb676-863b-460b-b39e-398374cb2df2.png) + +果不其然,又是清华大学!真是天命难为啊!(我发誓我在程序中加了随机逻辑) + +![](https://pic.yupi.icu/1/1749138273388-e579158e-cd4a-45a4-bde4-0551c815b493.png) + +来看看详细分析,原来我的学习状态处于多重叠加态、原来我的潜能存在量子涨落、原来我就是传说中的学霸,原来我就是名校的光! + +![](https://pic.yupi.icu/1/1749138286782-f94e0b50-15c3-4980-8300-3ebe0504375c.png) + +最后我们再来试试传统古法的预测方式【快速预测】,这是 **传承千年** 的神秘占卜术,这是通过灵性感应连接宇宙能量场才能得到的天机。。。 + +![](https://pic.yupi.icu/1/1749138468801-0f4dc174-f55a-49f7-9cae-15ee5987fcef.png) + +这特么就是抽签!来一根,bro~ + +![](https://pic.yupi.icu/1/1749138486223-848f5962-bcdd-4faf-b2ff-27bb3d994098.png) + +浇给!最后一次测试结果依然是清华大学,而且这次 **剑指满分**,说实话我觉得清华已经有点满足不了我了。。。 + +![](https://pic.yupi.icu/1/1749138501970-7306098c-3c4c-4c44-b56c-840c19b7d4bd.png) + +怎么样,感受到我这个高考分数预测器的强大了吧?真的,我强烈推荐大家 **高考前测一测**,保证让你信心大增! + +最后,祝愿所有考生金榜题名,前程似锦!记得要报考计算机专业哦,学编程、改 Bug、拿高薪,三连走起,走上人生巅峰! + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + Cordova - 表情包生成器 APP 项目实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + Cordova - 表情包生成器 APP 项目实战.md new file mode 100644 index 0000000..61e3313 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + Cordova - 表情包生成器 APP 项目实战.md @@ -0,0 +1,512 @@ +# Cursor + Cordova - 表情包生成器 APP 项目实战 + +本项目将带你用纯 Vibe Coding 的方式,一行代码都不写,开发一个可以在手机上运行的 APP。 + +这是一个典型的 Vibe Coding 项目,鱼皮会讲解如何用 AI 生成网页、然后通过工具打包成 APP。重点在于学习 Cordova 工具的使用和 APP 打包流程,适合想快速做出 APP 的同学。 + + + +--- + + + +你现在看到的 APP,是我完全用 AI 生成的,一行代码都没写!怎么做到的呢? + +![](https://pic.yupi.icu/1/image-20250612190219936.png) + +大家好,我是程序员鱼皮。AI 发展很快,现在随随便便就能生成一个网站,但是怎么纯用 AI 开发能在手机上运行的 APP 呢?网上基本上没有完整的教程。所以,我出手了,下面只用几分钟的时间,我会教大家如何利用 AI 生成 APP,依然是 **保姆级教程**。 + +⭐️ 本文对应视频,推荐观看:[https://bilibili.com/video/BV17HMcziEye](https://www.bilibili.com/video/BV17HMcziEye/) + + + +下面有请我们的主角 `Cordova`! + +## 一、什么是 Cordova? + +Apache Cordova 是一个开源的移动应用开发框架,允许开发者使用 HTML、CSS 和 JavaScript 等 Web 技术开发 **跨平台** 的移动应用。它通过将 Web 技术封装在本地容器中,使得开发者可以编写一次代码,然后在 Android、iOS、Windows 等多个平台上运行。 + +![](https://pic.yupi.icu/1/1749628169384-9f90fa60-e328-46c8-99eb-6f4f343b8aeb.png) + +Cordova 主要基于以下几个核心组件实现,感兴趣的同学可以了解一下: + +![](https://pic.yupi.icu/1/image-20250612190256834.png) + +也就是说,想要开发 APP,我们只需要把网站文件交给 Cordova,根据需要装一装插件、改一改配置,然后直接使用它提供的构建工具就能将 Web 应用打包成原生 APP 应用了(比如 APK 文件)!几乎不涉及任何代码编写和开发。 + +听起来很简单,有手就行?但是想使用 Cordova 开发 APP,必须要在电脑上安装对应的环境,比如 Android 和 IOS,而安装环境的难度可以说是 **非常炸裂** 了! + +如果你自己折腾,可能至少要花个几天的时间,会踩很多坑,到网上搜各种方案还不一定能搞定。所以我才做了这个教程,该踩的坑我都帮大家踩完了,会 **用最短的时间带你搞定环境,并且教你如何使用 AI + Cordova 生成 APP**。开始之前记得 **点赞收藏三连** 哦,拜托,我的头发真的不多啦! + +![](https://pic.yupi.icu/1/1749628109290-90dc8199-664a-4994-8dfe-716b4f8b5b71.png) + +## 二、环境准备 + +### 安装 Cordova + +首先我们要安装 Cordova。Cordova 的运行依赖 Node.js 和 NPM 前端工具,到 [Node.js 官网](https://nodejs.org/zh-cn) 下载即可,会自动安装 NPM。 + +![](https://pic.yupi.icu/1/1749628757935-a1f29765-c0e8-4c3a-9486-e113f3814e8d.png) + +可以把 NPM 理解为快速安装各种软件的小工具,安装完成后打开终端,执行下列命令安装 Cordova: + +```bash +npm install -g cordova +``` + +Cordova 支持将网站打包为 Android 和 IOS 移动端、Electron 桌面端应用。下面鱼皮带大家安装我个人认为难度最大的 **Android 环境**。注意,接下来的每一步,操作其实都不难,但是一定要仔细看!一个细节不注意可能就报错了! + + + +### 安装 Android 环境 + +首先,我们要根据 Cordova 的版本来确定所需环境和工具的版本,由于我们安装的 Cordova 是最新版本的,因此直接阅读 [最新的官方文档](https://cordova.apache.org/docs/en/dev/guide/platforms/android/index.html) 即可,比如我这里需要的依赖如下: + +![](https://pic.yupi.icu/1/1749470136150-38d5fe30-e3e3-4994-8c06-ada90cc3deb7.png) + +其中,最重要的是: + +- Java 17 +- Gradle 8.13 +- Android API 级别 >= 24 + +下面我们分别安装这些依赖。 + + + +#### 1、安装 Java + +Java 版本必须是 17,最好找个现成的 [Windows 系统的 Java 安装包](https://www.azul.com/downloads/?version=java-17-lts&os=windows&package=jdk#zulu): + +![](https://pic.yupi.icu/1/1749629753199-b8458627-2a44-4d5b-8786-74bc1d5b83bc.png) + +安装 Java 时建议选择 **自动配置环境变量**(包括 Path 和 JAVA_HOME),就不用自己手动配置环境变量了。 + +![](https://pic.yupi.icu/1/1748604000379-99f42d77-7198-4c44-989c-914f21175452.png) + +安装完成后,打开终端执行 `java -version` 命令查看版本号,看到下列输出表示成功: + +![](https://pic.yupi.icu/1/1748604045327-9e78c03d-dff8-4823-a6f8-221b1c288b77.png) + +如果无法执行命令,大概率是没有配置 Path 环境变量。 + +![](https://pic.yupi.icu/1/1749715203575-d424aa3d-9be3-4e55-936e-8c99211a10a9.png) + + + +#### 2、安装 Gradle + +根据上面的版本号,Gradle 必须是 8.13,直接到 [官网](https://gradle.org/releases/) 下载二进制压缩包即可。 + +![](https://pic.yupi.icu/1/1749470207621-4d12c5fa-6849-49eb-807a-46512cbd7011.png) + +解压下载完成的压缩包,移动到 **不包含中文的路径** 中,然后配置环境变量,包括 Path 和 GRADLE_HOME: + +![](https://pic.yupi.icu/1/1749470552544-1d872d78-933d-404e-a5d3-95071f98f72c.png) + +![](https://pic.yupi.icu/1/1749471051766-77ad3676-a1f4-449a-9c6c-3db9adaf5484.png) + +打开终端执行 `gradle -v` 命令,查看版本号: + +![](https://pic.yupi.icu/1/1749470606188-7af15756-34de-4f77-b469-6b88afc5e6bd.png) + +如果命令无法执行,大概率是 Path 环境变量配置错误。 + + + +#### 3、安装 Android + +建议直接安装 Android 开发工具 [Android Studio](https://developer.android.com/studio?hl=zh-cn),会自动安装 Android 的开发 SDK 和运行环境。 + +到官网下载 Android studio,运行安装包,按照步骤安装即可: + +![](https://pic.yupi.icu/1/1748600319317-775ad570-b84d-441e-9538-3f654e0c0280.png) + +安装完成后,第一次打开 Android Studio 时,会提醒你安装 Android SDK 环境: + +![](https://pic.yupi.icu/1/1748600394690-c64893b5-28f2-439e-afc2-302b616c2cb6.png) + +注意不要把 SDK 组件安装到包含中文的目录下,好在安装包也给了限制,不然又得栽倒一片人。。。 + +![](https://pic.yupi.icu/1/1748601041213-24016b9f-a6ce-4e8e-afba-a412cdee7dab.png) + +接下来无脑安装即可,会自动安装各种 Android 开发常用的工具、还有安卓设备模拟器: + +![](https://pic.yupi.icu/1/1748601061577-19061773-bea7-4f90-8fd4-588a99049611.png) + +这一步可能会有点煎熬,有些地区的朋友可能需要一些特殊的网络支持,你懂的。 + +![](https://pic.yupi.icu/1/1748601238964-92c8754e-7c98-4c5d-9b4d-d1a1ede316ed.png) + +![](https://pic.yupi.icu/1/1748601268568-8e5e99b1-0792-49f3-9bd1-d8073282743a.png) + +经过了漫长的等待,Android SDK 终于安装完成,然后需要配置 Android 的环境变量 ANDROID_HOME: + +![](https://pic.yupi.icu/1/1749469684248-b1c77491-ca2b-49bd-a4e4-fffcef962868.png) + +还要配置 platform-tools 到 Path 中,里面有一些命令行工具: + +![](https://pic.yupi.icu/1/1749469743427-c052d689-2746-4522-a37d-4ba5513cf857.png) + + + +配置完成后,我们打开 Android Studio,右上角进入 SDK Manager 的设置,根据 Cordova 的版本号要求,安装对应 API Level 的 SDK,比如我这里安装了 34 和 35 版本。 + +![](https://pic.yupi.icu/1/1748604140186-2cfeee7a-5cce-4647-8dc6-98afc4c7e980.png) + +这一步可能也会比较慢,耐心等待安装吧~ + +![](https://pic.yupi.icu/1/1748604151163-82381d25-9824-446c-b418-54e758de9a5f.png) + +安装完 SDK 后,再进入 SDK 工具选项,安装 Command-line Tools 命令行工具,之后在电脑上运行安卓 apk 包时可能会用到: + +![](https://pic.yupi.icu/1/1749607562141-66bfc793-a918-4359-b574-a8d52bc250a1.png) + +同样,把 Command-line Tools 添加到环境变量 Path 中,路径为 `%ANDROID_HOME%\cmdline-tools\latest\bin`,这样一来,很多工具可以直接在终端中使用了,比如 apkanalyzer。 + +![](https://pic.yupi.icu/1/1749607796266-a0dbb7b1-62ab-4b43-abcb-796b7261d45a.png) + + + +#### 4、安装 Android 设备模拟器 + +下面我们要尝试在自己的电脑上运行 Android 手机模拟器,这样调试程序更方便。 + +打开 Android Studio 的设备管理器,添加一个新设备: + +![](https://pic.yupi.icu/1/1749609766461-16befd69-65e1-4c07-bb6a-7e5ee2500dc4.png) + +选择指定机型,建议选择 API 版本高一点的,我这里选择 Pixel 7: + +![](https://pic.yupi.icu/1/1749610449536-edf49ed9-852c-425f-b3a0-a7e7bcc95d90.png) + +安装推荐的系统镜像: + +![](https://pic.yupi.icu/1/1749609929190-ad696301-b3d1-4642-98b1-56e303f0856a.png) + +耐心等待后手机就创建成功了,直接运行: + +![](https://pic.yupi.icu/1/1749610968230-15d4f951-0407-49c1-9453-d8d2035f9a6d.png) + +结果,报错啦! + +![](https://pic.yupi.icu/1/1749610958509-4da79a4e-781a-48e5-bf97-93383de6b4ff.png) + +如果你也遇到这种情况,可以在终端 **进入 Android 模拟器目录** 手动运行虚拟设备,这样能够看到详细的错误信息,有利于排查问题。 + +![](https://pic.yupi.icu/1/1749611297041-de408f6c-6acc-425e-bd7f-646c3c41fcb4.png) + +比如我这里显然是由于路径包含了中文!可恶啊,当时年少轻狂不自卑一个没注意用了中文路径。。。 + +![](https://pic.yupi.icu/1/1749611342058-e78e5020-2a11-4403-8bdb-28c1788d4287.png) + +解决方法很简单,手动创建一个不包含中文路径的 avd 虚拟设备目录,然后设置环境变量 ANDROID_SDK_HOME: + +![](https://pic.yupi.icu/1/1749612398190-b65661c4-b4c3-4d64-aeb1-491ec40ac55b.png) + +然后再利用 Android Studio 创建一个设备并运行,这次成功运行了,恭喜你多了一个手机! + +![](https://pic.yupi.icu/1/1749612554480-2514015b-1592-49ee-83dd-fae7af6a6918.png) + +至此,环境终于搞定了,下面来实战 AI + Cordova 开发 APP。 + +## 三、AI + Cordova 实战 + +### 创建项目 + +打开终端,进入你想要创建项目的目录,先执行 `cordova create` 命令来创建项目: + +```bash +cordova create <你的项目英文名称> +``` + +首次创建项目可能会有提示: + +![](https://pic.yupi.icu/1/1748595666543-fd4ae41b-7edc-4443-bab6-3e6ff8eeb819.png) + + + +### 生成代码 + +此处有 2 种生成模式: + +1. 先创建 Cordova 项目,然后在该项目内进行 AI 代码生成。告诉 AI 你要创建一个兼容 Cordova APP 的网站,直接让 AI 生成兼容 APP 的代码。这样做的好处是生成的代码 **可以使用 Cordova 插件调用系统原生的能力**,比如调用相机进行拍照。 +2. 在 Cordova 项目外单独用 AI 生成网站项目,AI 不会关心你是否要把项目转为 Cordova APP,然后再把生成好的网站移动到 Cordova 项目中。这样做的好处是生成的网站代码更容易运行,同样 **适合你已经有现成网站项目** 的场景。 + +下面两种方式我都会给大家演示,先讲第一种模式,直接让 AI 生成一个【表情包生成器】的 Cordova APP。 + +用 Cursor 打开刚刚创建的 Cordova 项目目录,给 AI 输入下列提示词,提示词中需要包含 Cordova,并且提到 **兼容性**: + +```shell +请帮我开发一个【移动端表情包生成器】Web APP,使用纯前端技术 + Cordova 实现。 +如果需要,你可以通过 Cordova 调用系统原生功能。 + +请生成完整的项目代码,确保功能完整可用,而且所有功能都需要同时兼容网页端和移动设备。 + +## 📋 功能需求 +### 1. 图片获取 +- 支持摄像头拍照 +- 支持从本地选择图片文件 +- 自动缩放图片到合适尺寸 + +### 2. 表情包模板 +- 提供8-10个常用表情包模板(惊呆了、无语、赞、点赞、emo了等) +- 网格布局展示模板,点击选择应用 + +### 3. 文字编辑 +- 输入自定义文字内容 +- 调整字体大小(20px-50px) +- 选择文字颜色(白色、黑色、红色等基础色彩) +- 添加文字描边效果 +- 拖拽移动文字位置 + +### 4. 贴纸功能 +- 提供常用emoji表情贴纸(😂🤣😭😍🤔等5-10个) +- 提供简单装饰贴纸(星星、爱心、箭头等) +- 支持拖拽移动和简单缩放 + +### 5. 保存功能 +- 将编辑后的表情包导出为图片 +- 支持下载保存到本地 + +## 🎨 界面要求 +- 移动端优先:适配手机屏幕,大按钮设计 +- 页面布局: + - 主页:拍照按钮、选择图片按钮 + - 编辑页:顶部工具栏 + 中央画布 + 底部功能区 +- 操作简单:实时预览效果,一键保存 + +## 📱 操作流程 +1. 拍照或选择图片 +2. 选择表情包模板 +3. 编辑文字内容和样式 +4. 添加emoji或装饰贴纸 +5. 预览效果并保存图片 +``` + +AI 生成的网站文件会放到 `www` 目录下。生成代码完成后,AI 可能会自动提醒你打包 APP 并且运行的命令,要依次添加安卓平台、安装插件、打包、运行。 + +![](https://pic.yupi.icu/1/1748596578547-e99a9448-e4a3-421c-907f-5e85c3b24ea2.png) + +这些命令我们等会儿就会用到,现在先不要自动执行,因为生成的代码不一定直接可用,我们需要先利用网页端进行调试。 + + + +### 网页浏览 + +可以直接双击生成的 HTML 文件 `www/index.html` 查看效果;当然,更推荐的是通过 cordova 命令添加平台并运行。 + +先添加浏览器平台: + +```shell +cordova platform add browser +``` + +如果你在执行命令时遇到了报错,可以直接问 AI,比如鱼皮遇到了缺少命令执行权限的错误: + +![](https://pic.yupi.icu/1/1748597149478-5d93aa00-a15d-41a7-b7b3-6011c9098420.png) + +解决方案是,执行下列命令来修改 PowerShell 的执行策略: + +```bash +Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser +``` + +添加平台成功后,可以输入 `cordova run` 命令运行平台: + +```bash +cordova run browser +``` + +然后就能够查看到网站的运行效果了。需要注意的是,因为 Cordova Browser 平台的特殊性,通过这个命令运行的网页效果可能和直接双击、或者启动本地服务器运行有区别。 + +![](https://pic.yupi.icu/1/1749632376309-d49aa1f5-15fa-47ac-8ecc-34fafa453a17.png) + +除了上面的命令外,如果你想快速调试多个不同的平台,可以运行下列命令,统一查看各个平台: + +```bash +cordova serve --port 8000 +``` + +![](https://pic.yupi.icu/1/1749632540888-2c8274ca-b2bc-488b-9d55-da8999b57a87.png) + +### 添加安卓平台 + +接下来执行类似的命令来添加安卓平台: + +```bash +cordova platform add android +``` + +如图,添加安卓平台成功,注意要 **确保输出的 Target SDK 和 Compile SDK 版本一致**: + +![](https://pic.yupi.icu/1/1749554296373-e755253d-c2e9-4367-87a4-9c9e24402f20.png) + +如果不一致,可能会影响 APP 的运行。可以修改 `config.xml` 的 targetSdkVersion 来修改版本号: + +![](https://pic.yupi.icu/1/1749548403555-9eb701bd-bd9f-469f-a672-b56d033c8b91.png) + +### 添加插件 + +由于我的项目需要调用摄像头,所以要添加对应的插件,执行下列命令: + +```bash +cordova plugin add cordova-plugin-camera +``` + +添加插件成功: + +![](https://pic.yupi.icu/1/1748597252238-9c9d7da6-1b6e-42b1-ad5e-714498f21b67.png) + + + +### 打包运行安卓 APP + +#### 打包 + +安装完插件后,执行 `cordova build` 命令可以打包 Android apk: + +```bash +cordova build android +``` + +看到下列信息表示打包成功: + +![](https://pic.yupi.icu/1/1749554490277-687fea6b-175e-4097-92e0-37090d4f3c63.png) + +得到 apk 包后,有 2 种运行方式: + +#### 手机运行 + +可以直接将 apk 包发送到手机安装运行: + +![](https://pic.yupi.icu/1/1749608745115-c35207fa-a32c-4dc2-a74f-10244b993e51.png) + +运行效果如图: + +![](https://pic.yupi.icu/1/1749609325122-30c51d37-aeaa-4e4e-95a1-6565dc212266.jpeg) + +![](https://pic.yupi.icu/1/1749609327998-acbfdfbd-6982-4be4-9f77-d116046194a0.jpeg) + + + +#### 电脑运行 + +先打开 Android Studio 并启动安卓虚拟设备,然后执行 `cordova run` 命令: + +```bash +cordova run android +``` + +就可以将 apk 安装到虚拟设备中,并且运行 APP 了,效果如图: + +![](https://pic.yupi.icu/1/1749612728673-2c8f7bd0-ecc5-46c4-b24c-573498a70e63.png) + + + +### 常见报错 + +打包运行是最容易遇到报错的地方,可能会遇到很多种报错,比如缺少插件、缺少文件、无法安装依赖、无法运行等等,建议直接把报错信息发给 AI,让它帮你解决。 + +下面鱼皮分享一些自己遇到的坑点。 + +#### 1、项目缺少文件 + +比如鱼皮的项目缺少了图标文件: + +![](https://pic.yupi.icu/1/1748597545640-7b26e31f-4c7e-4f57-999f-adbf5b2994ad.png) + +AI 尝试帮我创建图标: + +![](https://pic.yupi.icu/1/1748597699107-c363caa4-1e59-4fd6-ba4a-3004414b2c7c.png) + +或者简单粗暴,移除配置文件中对图标的引用: + +![](https://pic.yupi.icu/1/1748597731494-234f4827-eef8-4a1d-9f00-0ed01b61d66d.png) + + + +#### 2、缺少环境变量 + +如果环境搭建不顺利,可能会遇到下列报错,根据报错信息去进行对应的配置即可: + +![](https://pic.yupi.icu/1/1748599524081-e2121c56-11bc-4504-bd2d-6a5fff26f4fb.png) + + + +#### 3、命令执行失败 + +执行 `cordova run` 报错命令执行失败,可能是因为没有配置 `cmdline-tools` 到环境变量 Path 中。 + +![](https://pic.yupi.icu/1/1749607603308-b1dac4af-1505-4e15-b2ab-25ffd9abf3a5.png) + + + +#### 4、Gradle 无法安装 + +明明已经安装了 Gradle,但是 Cordova 仍然会安装 Gradle,而且可能因为网络原因下载失败: + +![](https://pic.yupi.icu/1/1749469918640-07f5eca4-5651-4e35-91a5-222c43363004.png) + +这时,我们可以配置环境变量 `CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL`,指定从本地下载 Gradle。环境变量的值设置为我们自己下载的 Gradle 压缩包的路径。 + +![](https://pic.yupi.icu/1/1749471697598-c7dd5754-4e58-4b01-9787-5889a0f9df52.png) + +如果修改配置后再次执行打包命令还是报错,建议删除项目内的 `platforms/android/.gradle` 缓存,然后重试。 + + + +## 四、已有项目打包为 APP + +刚刚实战了直接用 AI 生成 Cordova APP 项目的方式,如果我们已经有现成的网站项目,也能够很方便地打包为 APP。 + +比如现在鱼皮有一个消消乐网页游戏项目,让我们来包装为 APP: + +![](https://pic.yupi.icu/1/1749614057458-74ba49c0-d249-43ab-9946-631c8783cc75.png) + +1)先创建 cordova 项目: + +```bash +cordova create yu-game-web-app +``` + +2)把已有的网页文件复制到 www 目录下: + +![](https://pic.yupi.icu/1/1749614211678-13686f0e-7921-4abe-9ed2-beaf031ff38d.png) + +3)执行 cordova 命令添加 Android 平台: + +```bash +cordova platform add android +``` + +4)最后,打包或者直接运行: + +```bash +cordova run android +``` + +运行成功的效果如图,还是很 nice 的~ + +![](https://pic.yupi.icu/1/1749614429684-50917cff-d0fc-4c0f-be7d-c356e7827410.png) + + + +## 最后 + +OK,教程到这里就结束了,由于缺少设备等原因,IOS 就先不给大家演示了。 + +最后给大家一些建议,Cordova 比较适合中小型网站项目,尤其适合已经有网站项目想快速转为 APP 的场景;但如果你需要搞一个复杂的大项目,依赖很多移动设备的原生能力,使用 Cordova 就不是很合适了,不如 Flutter。尤其是没有编程能力的同学来说,建议不要直接用 AI 生成复杂的 Cordova APP,很可能出现你搞不定的代码问题,但是做些小游戏、小工具还是很不错的。也希望我的分享对大家有帮助吧,想获取更多编程和 AI 干货的朋友记得关注鱼皮哦,拜拜~ + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + LangChain4j - AI 程序员技术练兵场项目实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + LangChain4j - AI 程序员技术练兵场项目实战.md new file mode 100644 index 0000000..97dcfde --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + LangChain4j - AI 程序员技术练兵场项目实战.md @@ -0,0 +1,226 @@ +# Cursor + LangChain4j - AI 程序员技术练兵场项目实战 + +本项目是一个 AI 程序员技术练兵场,通过游戏化的方式帮助程序员提升技术水平。用户选择技术方向和难度,AI 自动生成挑战任务,用户完成挑战后获得奖励和经验值。 + +这是一个以 Vibe Coding 为主的全栈项目,全程使用 AI 开发,前端和后端都可以用 Cursor 等工具生成。重点在于学习如何用 AI 生成完整的全栈项目,适合想学习 AI 应用开发、想做自己产品的同学。 + +预计花费时间 6 ~ 12 小时。 + +项目代码免费开源:https://github.com/liyupi/coder-test + +项目文字 + 视频教程:https://www.codefather.cn/course/1965699176489484289 + +下文为项目的成品介绍和演示效果。 + + + +--- + + + +你是一名月薪 3000 的程序员,慕名来到鱼皮的技术练兵场,听闻此地可通过不断挑战提升技术水平和薪资,策马奔腾。 + +![](https://pic.yupi.icu/1/1760438722374-4e8edebc-d975-4873-8f06-9e9856733694.png) + +事不宜迟,准备挑战吧,愿君武运昌隆! + +> 本文对应视频版:[https://bilibili.com/video/BV1dW4tz9E5M](https://www.bilibili.com/video/BV1dW4tz9E5M/) + + + +首先,请选择自己的修炼方向,这还用想吗?当然是 Java 后端,乃吾辈立身之本。 + +![](https://pic.yupi.icu/1/1760438746874-c935795e-6e56-4aa1-9d34-fd11a3548911.png) + + + +等待片刻之后,挑战正式开始。 + +![](https://pic.yupi.icu/1/1760438783205-69493acd-80c7-47fb-b585-5ec9d307e287.png) + + + +这次你需要实现一个基于 Spring Boot 的图书管理系统,目标薪资,竟然是你梦寐以求的 8000 元! + +![](https://pic.yupi.icu/1/1760438873460-36f24edc-31e3-42ee-be87-4c58e7c9c7f6.png) + + + +你先认真阅读了下需求。哼,不过增删改查之术,岂非手到擒来? + +然后来到选项区,挑战规则甚是简单,只要选择能够实现并且适合实现这个需求的技术,拖拽到答案区就可以了。 + +先把什么 Spring Boot、MyBatis、MySQL、Lombok 这些平日最为趁手的家伙什,通通选上,易如反掌! + +![](https://pic.yupi.icu/1/1760438935115-c22680b8-7009-4dce-bd68-44a58040851d.png) + + + +然而未曾料想,竟有如此之多的奇门技艺,真是大开眼界。 + +这个什么 DDD、TDD、CQRS 架构、六边形架构。虽不知这些乃何等绝学,但听起来便觉高深莫测,选上去定然不差! + +![](https://pic.yupi.icu/1/1760438953486-924cff33-718f-4529-9122-57e05c07782a.png) + + + +来,且看结果如何,月薪 8000 必拿下! + +![](https://pic.yupi.icu/1/1760438981041-3e54d4a0-036e-4af5-8cec-ec1e344a1ec1.png) + + + +什吗?!竟然还倒扣了 400 元! + +![](https://pic.yupi.icu/1/1760439049424-532d6ad1-0600-4654-bd9b-311d48cfdc2f.png) + +“恭喜你,成功把一个简单的图书管理系统设计成了宇宙级复杂架构!建议直接升职为CTO,负责规划下一次人类登月的软件系统,建议先学会'Hello World'再谈六边形。” + +你别说,这 AI 骂人好脏啊! + +![](https://pic.yupi.icu/1/1760439092397-5b225c9e-8a3b-4508-8479-a0182975f8a4.png) + +你心有不甘,细细研读 AI 生成的结果报告。 + +![](https://pic.yupi.icu/1/1760439118337-09c71f6d-6194-408d-aa2b-0b98e4312daf.png) + +哦,原来是过度设计了啊。。。 + +每个技术都有清晰的介绍和应用场景,而且还很贴心地给出了系统架构图以及核心业务流程图,生怕你看不懂。 + +![](https://pic.yupi.icu/1/1760439138791-eadfe743-c45a-4b08-b4c6-95eb3824c048.png) + +![](https://pic.yupi.icu/1/1760439162059-5bc72d92-bfd4-42b0-8048-fec3a9b01b78.png) + + + +再往下看,AI 还给你提供了详细的学习建议。 + +![](https://pic.yupi.icu/1/1760439189112-a6dfb1bf-a610-4e09-a6a1-db5006a2e362.png) + + + +“针对3k-8k薪资段,企业更看重基础扎实、能干活”,此言颇为中肯。 + +此外,还给出了一些编程修炼秘籍和相关的面试考题,推荐得非常准确,都是贴合技术知识、企业常问的高频考题。 + +![](https://pic.yupi.icu/1/1760439221768-a3000130-d259-4d43-8572-112f0f57cc5d.png) + + + +而且每道题皆有详尽答案,还可通过 [面试鸭刷题系统](https://www.mianshiya.com/) 温习巩固。 + +![](https://pic.yupi.icu/1/1760439251444-114592e1-860f-45d9-9c57-747d546c2cfa.png) + + + +你心中不甘,决定再来亿次,势必要攻破 8000 这道坎! + +![](https://pic.yupi.icu/1/1760439307167-b49136e2-037e-444a-b465-8a8980abbbdf.png) + + + +一个月后,经过不懈苦修,你终于品尝到了学 IT、月薪过万的滋味,月薪达到了 1.5 万。 + +![](https://pic.yupi.icu/1/1760439363814-13713b6e-7674-4be8-a7c9-5691183644c5.png) + + + +然而此时的需求难度,已臻至更高层次。 + +![](https://pic.yupi.icu/1/1760439432591-eee68a21-d25f-4cb0-9249-96c0c2443d9c.png) + +再看此关要求,明明每字皆可独识,连在一起却如天书般晦涩难懂。 + +再看看选项,不再是简单的技术名词,而是各种各样的方案和实现细节。 + +![](https://pic.yupi.icu/1/1760439452471-426945f6-a3e2-436b-9013-2754d7c09a7c.png) + + + +你已心生退意,然而见到自己在薪资排行榜上的名次,咬牙切齿,决意继续苦修。 + +![](https://pic.yupi.icu/1/1760439492103-33f97636-b7a3-4622-9887-e2f9c14629fb.png) + + + +除了不断挑战更高薪资的险关外,你还可选择由练兵场主精挑细选的精选关卡: + +![](https://pic.yupi.icu/1/1760439533899-2a48936b-d8aa-4310-9d01-ed1179c41a92.png) + + + +这样一来,可以自由学习更多业务场景,稳步精进武艺! + +![](https://pic.yupi.icu/1/1760439519631-05710f00-3095-4cd1-bc2b-245e9d687ca0.png) + + + +终于,又过一月,你的技术水平已突破暗劲小圆满之境,薪资水涨船高。 + +![](https://pic.yupi.icu/1/1760439579749-f7e8cd21-b8f8-4cb0-a5c1-8a2687e185ac.png) + + + +苦修至此,你不禁好奇。 + +- 在此练兵场中,最高能修炼到何等境界? +- 最难的需求又是何等模样? +- 这练兵场的创建者又是如何建成此等江湖奇地? +- 场中是否暗藏玄鸡? +- 又有何等潜规则呢? + + + +![](https://pic.yupi.icu/1/1760439624999-0279322e-0aba-4f81-88ba-4e8be10ee244.png) + + + +经过一番搜寻,你方知晓,原来整个项目的代码竟然是 [完全开源](https://github.com/liyupi/coder-test) 的! + +> 开源仓库:https://github.com/liyupi/coder-test + +![](https://pic.yupi.icu/1/1760439663604-934c9d1b-24b2-47d6-8dc2-c0f9802f87d5.png) + + + +不仅如此,整个项目竟然都是鱼皮老狗全程直播亲手打造! + +![](https://pic.yupi.icu/1/1760439691881-8d4282f9-c585-4a25-bef5-42e4dca440f8.png) + + + +源码之前,了无秘密。而直播授艺,更见真章。 + +看着鱼皮直播写下的完整项目秘籍,你心中五味杂陈。 + +![](https://pic.yupi.icu/1/1760439737161-b52085d6-65e2-403f-b334-105550061b59.png) + + + +你虽习得诸多方案和架构,嘴上功夫了得,却发现自己连一个完整的项目都写不出来,更遑论编写秘籍了。。。 + +此刻,你终于悟了! + +![](https://pic.yupi.icu/1/1760439809229-dab5cd86-d4ac-4e56-868c-82df1c65cb54.png) + +或许鱼皮建此练兵场的初衷,乃是让众武林同道从真实需求出发,提升技术广度、锻炼方案设计之能;而这只是个引路之石,习得这些方案心法之后,还要靠自身通过实战磨砺不断积累经验。 + +正所谓:纸上得来终觉浅,绝知此事要躬行。 + +对鱼皮这个项目感兴趣的朋友,可以直接下载源码,把项目配置中 AI 大模型的 API Key 改成自己的,就可以愉快使用了~ + +![](https://pic.yupi.icu/1/1760439936811-fefe92c3-f7cd-47ec-b888-03a4f1e4cd98.png) + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + LangChain4j - AI 编程助手项目实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + LangChain4j - AI 编程助手项目实战.md new file mode 100644 index 0000000..734513c --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Cursor + LangChain4j - AI 编程助手项目实战.md @@ -0,0 +1,1477 @@ +# Cursor + LangChain4j - AI 编程助手项目实战 + +这是一套完整的全栈 AI 编程助手项目教程。本项目采用人工编码 + Vibe Coding 结合的方式开发,通过写 Java 代码来调用 AI、使用 Cursor 等 AI 工具辅助编码。重点在于学习如何在 Java 项目中集成 AI 能力,带你系统学习 LangChain4j 框架的几乎所有主流用法和特性。适合有一定 Java 后端开发基础的同学,快速入门 AI 应用开发,并且在简历上添加 AI 项目。 + +预计要学习 1 ~ 5 小时。 + + + +--- + + + +大家好,我是程序员鱼皮。现在 AI 应用开发可以说是程序员必备的技能了,求职时能够大幅增加竞争力。之前我用 Spring AI 带大家做过一个 [开源的 AI 超级智能体项目](https://github.com/liyupi/yu-ai-agent),这次我来带大家快速掌握另一个主流的 Java AI 应用开发框架 LangChain4j。 + +这个教程也是我精心设计,拒绝枯燥的理论,而是用一个编程小助手项目带大家在实战中依次学习 LangChain 几乎所有主流的用法和特性。看完这个教程,你不仅学会了 LangChain,还直接多了一段项目经历,岂不美哉? + +**文章近一万字,有点长,建议收藏,观看视频版体验更佳~** + +> 完整视频教程:https://bilibili.com/video/BV1X4GGziEyr +> +> 项目代码开源:https://github.com/liyupi/ai-code-helper + + + +## 需求分析 + +我们要实现一个 AI 编程小助手,可以帮助用户答疑解惑,并且给出编程学习的指导建议,比如: + +- 编程学习路线 +- 项目学习建议 +- 程序员求职指南 +- 程序员常见面试题 + + + +![](https://pic.yupi.icu/1/1752027043776-cd6d17ed-175f-4c7e-8b25-aee81a5296b2-20250710114302208.png) + + + +要实现这个需求,我们首先要能够调用 AI 完成 **基础对话**,而且要支持实现 **多轮对话记忆**。此外,如果想进一步增强 AI 的能力,需要让它能够 **使用工具** 来联网搜索内容;还可以让 AI 基于我们自己的 **知识库回答**,给用户提供我们在编程领域沉淀的资源和经验。 + +![](https://pic.yupi.icu/1/1752028612444-351672a3-3725-4850-82b5-57d63d0ba866.png) + +如果要从 0 开始实现上述功能,还是很麻烦的,因此我们要使用 AI 开发框架来提高效率。 + +## 什么是 LangChain4j? + +目前主流的 Java AI 开发框架有 [Spring AI](https://spring.io/projects/spring-ai) 和 [LangChain4j](https://docs.langchain4j.dev/intro),它们都提供了很多 **开箱即用的 API** 来帮你调用大模型、实现 AI 开发常用的功能,比如我们今天要学的: + +- 对话记忆 +- 结构化输出 +- RAG 知识库 +- 工具调用 +- MCP +- SSE 流式输出 + +就我个人体验下来,这两个框架的很多概念和用法都是类似的,也都提供了很多插件扩展,都支持和 Spring Boot 项目集成。虽然有一些编码上的区别,但孰好孰坏,使用感受也是因人而异的。 + +**实际开发中应该如何选择呢?** + +我想先带你用 LangChain4j 开发完一个项目,最后再揭晓答案,因为那个时候你自己也会有一些想法。 + +## AI 应用开发 + +### 新建项目 + +打开 IDEA 开发工具,新建一个 Spring Boot 项目,**Java 版本选择 21**(因为 LangChain4j 最低支持 17 版本): + +![](https://pic.yupi.icu/1/1751944012715-3ac04ad2-42e9-4c41-b998-a5318050e27c.png) + +选择依赖,使用 3.5.x 版本的 Spring Boot,引入 Spring MVC 和 Lombok 注解库: + +![](https://pic.yupi.icu/1/1751944035875-83da11bb-e5fa-4a19-ae57-9c214cc0f523.png) + +新建项目后,先修改配置文件后缀为 `yml`,便于后面填写配置。 + +![](https://pic.yupi.icu/1/1751944110301-93054763-76d8-4686-ac6e-971e81b4acd4.png) + +这里我会建议大家创建一个 `application-local.yml` 配置文件,将开发时用到的敏感配置写到这里,并且添加到 `.gitignore` 中,防止不小心开源出来。 + +### AI 对话 - ChatModel + +ChatModel 是最基础的概念,负责和 AI 大模型交互。 + +首先需要引入至少一个 [AI 大模型依赖](https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-community-dashscope-spring-boot-starter),这里选择国内的阿里云大模型,提供了和 Spring Boot 项目的整合依赖包,比较方便: + +```xml + + dev.langchain4j + langchain4j-community-dashscope-spring-boot-starter + 1.1.0-beta7 + +``` + +需要到 [阿里云百炼平台](https://bailian.console.aliyun.com/?tab=model#/api-key) 获取大模型调用 key,注意不要泄露! + +![](https://pic.yupi.icu/1/1752030336360-af14dd92-7708-45dd-8420-fe87727726f3.png) + +回到项目,在配置文件中添加大模型配置,指定模型名称和 API Key: + +```yaml +langchain4j: + community: + dashscope: + chat-model: + model-name: qwen-max + api-key: +``` + +可以 [按需选择模型名称](https://bailian.console.aliyun.com/?tab=doc#/doc/?type=model),追求效果可以用 qwen-max,否则可以选择效果、速度、成本均衡的 qwen-plus。 + +![](https://pic.yupi.icu/1/1752030577658-2b939caa-cf27-4065-aac5-e4f3234646b6.png) + +除了编写配置让 Spring Boot 自动构建 ChatModel 外,也可以通过构造器自己创建 ChatModel 对象。这种方式更灵活,在 LangChain4j 中我们会经常用到这种方式来构造对象。 + +```java +ChatModel qwenModel = QwenChatModel.builder() + .apiKey("You API key here") + .modelName("qwen-max") + .enableSearch(true) + .temperature(0.7) + .maxTokens(4096) + .stops(List.of("Hello")) + .build(); +``` + +有了 ChatModel 后,创建一个 AiCodeHelper 类,引入自动注入的 qwenChatModel,编写简单的对话代码,并利用 Lombok 注解打印输出结果日志: + +```java +@Service +@Slf4j +public class AiCodeHelper { + + @Resource + private ChatModel qwenChatModel; + + public String chat(String message) { + UserMessage userMessage = UserMessage.from(message); + ChatResponse chatResponse = qwenChatModel.chat(userMessage); + AiMessage aiMessage = chatResponse.aiMessage(); + log.info("AI 输出:" + aiMessage.toString()); + return aiMessage.text(); + } +} +``` + +编写单元测试,向 AI 打个招呼吧: + +```java +@SpringBootTest +class AiCodeHelperTest { + + @Resource + private AiCodeHelper aiCodeHelper; + + @Test + void chat() { + aiCodeHelper.chat("你好,我是程序员鱼皮"); + } +} +``` + +以 Debug 模式运行单元测试,成功运行并查看输出: + +![](https://pic.yupi.icu/1/1751947565712-9e3c0a68-930b-4968-8a54-19eb8beb48c9.png) + +如果遇到找不到符号的 lombok 报错: + +![](https://pic.yupi.icu/1/1751947096901-ca5ec0a7-ecd1-4447-9f7e-b679ad56dcde.png) +可以修改 IDEA 的注解处理器配置,改为使用项目中的 lombok: + +![](https://pic.yupi.icu/1/1751947494173-01ebf704-c87b-4c6b-96a3-58aafccd5458.png) + + + +### 多模态 - Multimodality + +多模态是指能够同时处理、理解和生成多种不同类型数据的能力,比如文本、图像、音频、视频、PDF 等等。 + +![](https://pic.yupi.icu/1/1752051068307-72038162-f759-4fce-a0d8-0b5eec4cc59e.png) + +LangChain4j 中使用多模态的方法很简单,用户消息中是可以添加图片、音视频、PDF 等媒体资源的。 + +![](https://pic.yupi.icu/1/1752031262335-7dda9965-faa8-44e9-8a18-f748549299fa.png) + +我们先编写一个支持传入自定义 UserMessage 的方法: + +```java +public String chatWithMessage(UserMessage userMessage) { + ChatResponse chatResponse = qwenChatModel.chat(userMessage); + AiMessage aiMessage = chatResponse.aiMessage(); + log.info("AI 输出:" + aiMessage.toString()); + return aiMessage.text(); +} +``` + +然后编写单元测试,传入一张图片: + +```java +@Test +void chatWithMessage() { + UserMessage userMessage = UserMessage.from( + TextContent.from("描述图片"), + ImageContent.from("https://www.codefather.cn/logo.png") + ); + aiCodeHelper.chatWithMessage(userMessage); +} +``` + +但是效果不理想,qwen-max 模型无法直接查看或分析图片: + +![](https://pic.yupi.icu/1/1751948068455-4a25e7b7-9186-4148-bf42-de66b10ecef1.png) + +![](https://pic.yupi.icu/1/1751949077879-32103f89-88f4-45b0-8609-77bc9ad8403d.png) + + + +这也是目前多模态开发最关键的问题,虽然编码不难,但需要大模型本身支持多模态。可以在 LangChain 官网看到 [大模型能力支持表](https://docs.langchain4j.dev/integrations/language-models/),不过一切以实际测试为准。 + +![](https://pic.yupi.icu/1/1752031226164-9a0cf728-a4d7-4005-8bbf-3f43c0479c01.png) + + + +目前框架对多模态的适配度也没有那么好,一不留神就报错了,所以我们先了解这种用法就好了,感兴趣的同学也可以用 OpenAI 等其他模型实现多模态。 + + + +### 系统提示词 - SystemMessage + +系统提示词是设置 AI 模型行为规则和角色定位的隐藏指令,用户通常不能直接看到。系统 Prompt 相当于给 AI 设定人格和能力边界,也就是告诉 AI “你是谁?你能做什么?”。 + +根据我们的需求,编写一段系统提示词: + +```markdown +你是编程领域的小助手,帮助用户解答编程学习和求职面试相关的问题,并给出建议。重点关注 4 个方向: +1. 规划清晰的编程学习路线 +2. 提供项目学习建议 +3. 给出程序员求职全流程指南(比如简历优化、投递技巧) +4. 分享高频面试题和面试技巧 +请用简洁易懂的语言回答,助力用户高效学习与求职。 +``` + +编程导航的同学可以看 [AI 超级智能体项目第 3 期](https://www.codefather.cn/course/1915010091721236482/section/1916676331948027906),有讲解过提示词优化技巧。 + +![](https://pic.yupi.icu/1/1752031662526-ffba01f1-3358-4d6b-a6e3-e293781cc77c.png) + +想要使用系统提示词,最直接的方法是创建一个系统消息,把它和用户消息一起发送给 AI。 + +修改 chat 方法,代码如下: + +```java +private static final String SYSTEM_MESSAGE = """ + 你是编程领域的小助手,帮助用户解答编程学习和求职面试相关的问题,并给出建议。重点关注 4 个方向: + 1. 规划清晰的编程学习路线 + 2. 提供项目学习建议 + 3. 给出程序员求职全流程指南(比如简历优化、投递技巧) + 4. 分享高频面试题和面试技巧 + 请用简洁易懂的语言回答,助力用户高效学习与求职。 + """; + +public String chat(String message) { + SystemMessage systemMessage = SystemMessage.from(SYSTEM_MESSAGE); + UserMessage userMessage = UserMessage.from(message); + ChatResponse chatResponse = qwenChatModel.chat(systemMessage, userMessage); + AiMessage aiMessage = chatResponse.aiMessage(); + log.info("AI 输出:" + aiMessage.toString()); + return aiMessage.text(); +} +``` + +再次运行单元测试和 AI 对话,显然系统预设生效了: + +![](https://pic.yupi.icu/1/1751949397794-26716439-7ccb-46f2-add4-ff299989b10e.png) + + + +### AI 服务 - AI Service + +在学习更多特性前,我们要了解 LangChain4j 最重要的开发模式 —— AI Service,提供了很多高层抽象的、用起来更方便的 API,把 AI 应用当做服务来开发。 + +#### 使用 AI Service + +首先引入 langchain4j 依赖: + +```xml + + dev.langchain4j + langchain4j + 1.1.0 + +``` + +然后创建一个编程助手 AI Service 服务,采用声明式开发方法,编写一个对话方法,然后可以直接通过 `@SystemMessage` 注解定义系统提示词。 + +```java +public interface AiCodeHelperService { + + @SystemMessage("你是一位编程小助手") + String chat(String userMessage); +} +``` + +不过由于我们提示词较长,写到注解里很不优雅,所以单独在 resources 目录下新建文件 `system-prompt.txt` 来存储系统提示词。 + +`@SystemMessage` 注解支持从文件中读取系统提示词: + +```java +public interface AiCodeHelperService { + + @SystemMessage(fromResource = "system-prompt.txt") + String chat(String userMessage); +} +``` + +然后我们需要编写工厂类,用于创建 AI Service: + +```java +@Configuration +public class AiCodeHelperServiceFactory { + + @Resource + private ChatModel qwenChatModel; + + @Bean + public AiCodeHelperService aiCodeHelperService() { + return AiServices.create(AiCodeHelperService.class, qwenChatModel); + } +} +``` + +调用 `AiServices.create` 方法就可以创建出 AI Service 的实现类了,背后的原理是利用 Java 反射机制创建了一个实现接口的代理对象,代理对象负责输入和输出的转换,比如把 String 类型的用户消息参数转为 UserMessage 类型并调用 ChatModel,再将 AI 返回的 AiMessage 类型转换为 String 类型作为返回值。 + +但我们不用关心这么多,直接写接口和注解来开发就好。你喜欢这种开发方式么? + +编写单元测试,调用我们开发的 AI Service: + +```java +@SpringBootTest +class AiCodeHelperServiceTest { + + @Resource + private AiCodeHelperService aiCodeHelperService; + + @Test + void chat() { + String result = aiCodeHelperService.chat("你好,我是程序员鱼皮"); + System.out.println(result); + } +} +``` + +Debug 运行,发现生成了 AI Service 的代理类,并且系统提示词生效了。是不是比之前自己拼接系统消息要方便多了? + +![](https://pic.yupi.icu/1/1751953464452-273ae8c5-4354-467e-b14b-668d64c3b1f3.png) + +#### Spring Boot 项目中使用 + +如果你觉得手动调用 create 方法来创建 Service 比较麻烦,在 Spring Boot 项目中可以引入依赖: + +```xml + + dev.langchain4j + langchain4j-spring-boot-starter + 1.1.0-beta7 + +``` + +然后给 AI Service 加上 `@AiService` 注解,就能自动创建出服务实例了: + +```java +@AiService +public interface AiCodeHelperService { + + @SystemMessage(fromResource = "system-prompt.txt") + String chat(String userMessage); +} +``` + +记得注释掉之前工厂类的 @Configuration 注解,否则会出现 Bean 冲突 + +再次运行单元测试,也是可以正常对话的: + +![](https://pic.yupi.icu/1/1751953748624-64447a00-d43c-4f8e-9fd1-805efa910753.png) + +这种方式虽然更方便了,但是缺少了自主构建的灵活性(可以自由设置很多参数),所以我建议还是采用自主构建。之后的功能特性,我们也会基于这种 AI Service 开发模式来实现。 + +### 会话记忆 - ChatMemory + +会话记忆是指让 AI 能够记住用户之前的对话内容,并保持上下文连贯性,这是实现 AI 应用的核心特性。 + +怎么实现对话记忆?最传统的方式是自己维护消息列表,不仅要手动添加消息,消息多了还要考虑淘汰、不同用户的消息还要隔离,想想都头疼! + +```java +// 自己实现会话记忆 +Map> conversationHistory = new HashMap<>(); + +public String chat(String message, String userId) { + // 获取用户历史记录 + List history = conversationHistory.getOrDefault(userId, new ArrayList<>()); + + // 添加用户新消息 + Message userMessage = new Message("user", message); + history.add(userMessage); + + // 构建完整历史上下文 + StringBuilder contextBuilder = new StringBuilder(); + for (Message msg : history) { + contextBuilder.append(msg.getRole()).append(": ").append(msg.getContent()).append("\n"); + } + + // 调用 AI API + String response = callAiApi(contextBuilder.toString()); + + // 保存 AI 回复到历史 + Message aiMessage = new Message("assistant", response); + history.add(aiMessage); + conversationHistory.put(userId, history); + + return response; +} +``` + +#### 使用会话记忆 + +LangChain4j 为我们提供了开箱即用的 `MessageWindowChatMemory` 会话记忆,最多保存 N 条消息,多余的会自动淘汰。创建会话记忆后,在构造 AI Service 设置 chatMemory: + +```java +@Configuration +public class AiCodeHelperServiceFactory { + + @Resource + private ChatModel qwenChatModel; + + @Bean + public AiCodeHelperService aiCodeHelperService() { + // 会话记忆 + ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10); + AiCodeHelperService aiCodeHelperService = AiServices.builder(AiCodeHelperService.class) + .chatModel(qwenChatModel) + .chatMemory(chatMemory) + .build(); + return aiCodeHelperService; + } +} +``` + +编写单元测试,测试会话记忆是否生效: + +```java +@Test +void chatWithMemory() { + String result = aiCodeHelperService.chat("你好,我是程序员鱼皮"); + System.out.println(result); + result = aiCodeHelperService.chat("你好,我是谁来着?"); + System.out.println(result); +} +``` + +Debug 运行单元测试,可以看到会话记忆存储的消息列表: + +![](https://pic.yupi.icu/1/1751954519469-e2f60419-ad5d-41fd-945d-c13d9861fe0f.png) + +查看输出结果,会话记忆生效: + +![](https://pic.yupi.icu/1/1751954654615-b4efd4d5-b87a-4980-9c65-0e252c4dd379.png) + +#### 进阶用法 + +会话记忆默认是存储在内存的,重启后会丢失,可以通过自定义 [ChatMemoryStore](https://docs.langchain4j.dev/tutorials/chat-memory#persistence) 接口的实现类,将消息保存到 MySQL 等其他数据源中。 + +![](https://pic.yupi.icu/1/1752040734375-fa8362f4-c2d2-4ecd-9f3d-f328f0459b58.png) + +如果有多个用户,希望每个用户之间的消息隔离,可以通过给对话方法增加 memoryId 参数和注解,在调用对话时传入 memoryId 即可(类似聊天室的房间号): + +```java +String chat(@MemoryId int memoryId, @UserMessage String userMessage); +``` + +构造 AI Service 时,可以通过 chatMemoryProvider 来指定 **每个 memoryId 单独创建会话记忆**: + +```java +// 构造 AI Service +AiCodeHelperService aiCodeHelperService = AiServices.builder(AiCodeHelperService.class) + .chatModel(qwenChatModel) + .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10)) + .build(); +``` + + + +### 结构化输出 + +结构化输出是指将大模型返回的文本输出转换为结构化的数据格式,比如一段 JSON、一个对象、或者是复杂的对象列表。 + +![](https://pic.yupi.icu/1/1752051496139-a403e8ad-9b0d-4b1c-924a-cd572f872b05.png) + +结构化输出有 3 种实现方式: + +- 利用大模型的 JSON schema +- 利用 Prompt + JSON Mode +- 利用 Prompt + +默认是 Prompt 模式,也就是在原本的用户提示词下 **拼接一段内容** 来指定大模型强制输出包含特定字段的 JSON 文本。 + +```markdown +你是一个专业的信息提取助手。请从给定文本中提取人员信息, +并严格按照以下 JSON 格式返回结果: + +{ + "name": "人员姓名", + "age": 年龄数字, + "height": 身高(米), + "married": true/false, + "occupation": "职业" +} + +重要规则: +1. 只返回 JSON 格式,不要添加任何解释 +2. 如果信息不明确,使用 null +3. age 必须是数字,不是字符串 +4. married 必须是布尔值 +``` + +感兴趣的同学可以 [阅读这篇文章](https://glaforge.dev/posts/2024/11/18/data-extraction-the-many-ways-to-get-llms-to-spit-json-content/) 了解更多,不过我们开发时无需关心这些,只要修改对话方法的返回值,框架就会自动帮我们实现结构化输出,非常爽! + +![](https://pic.yupi.icu/1/1752051189479-456a7016-ab27-4a18-8927-088724ac5ddb.png) + +比如我们增加一个 **让 AI 生成学习报告** 的方法,AI 需要输出学习报告对象,包含名称和建议列表: + +```java +@SystemMessage(fromResource = "system-prompt.txt") +Report chatForReport(String userMessage); + +// 学习报告 +record Report(String name, List suggestionList){} +``` + +编写单元测试: + +```java +@Test +void chatForReport() { + String userMessage = "你好,我是程序员鱼皮,学编程两年半,请帮我制定学习报告"; + AiCodeHelperService.Report report = aiCodeHelperService.chatForReport(userMessage); + System.out.println(report); +} +``` + +运行单元测试,效果很不错: + +![](https://pic.yupi.icu/1/1751955304297-a26adf70-eda0-4ebc-ae2e-aa5a8e67cf02.png) + +如果你发现 AI 有时无法生成准确的 JSON,那么可以采用 JSON Schema 模式,直接在请求中约束 LLM 的输出格式。这是目前最可靠、精确度最高的结构化输出实现。 + +```java +ResponseFormat responseFormat = ResponseFormat.builder() + .type(JSON) + .jsonSchema(JsonSchema.builder() + .name("Person") + .rootElement(JsonObjectSchema.builder() + .addStringProperty("name") + .addIntegerProperty("age") + .addNumberProperty("height") + .addBooleanProperty("married") + .required("name", "age", "height", "married") + .build()) + .build()) + .build(); +ChatRequest chatRequest = ChatRequest.builder() + .responseFormat(responseFormat) + .messages(userMessage) + .build(); +``` + + + +### 检索增强生成 - RAG + +RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索技术和 AI 内容生成的混合架构,可以解决大模型的知识时效性限制和幻觉问题。 + +简单来说,RAG 就像给 AI 配了一个 “小抄本”,让 AI 回答问题前先查一查特定的知识库来获取知识,确保回答是基于真实资料而不是凭空想象。很多企业也基于 RAG 搭建了自己的智能客服,可以用自己积累的领域知识回复用户。 + +RAG 的完整工作流程如下: + +![](https://pic.yupi.icu/1/1752052410659-f9a142b9-0c2a-4a99-9c8c-8339970c96eb.png) + +让我们来实操一下,首先我准备了 4 个文档,放在了 `resources/docs` 目录下: + +![](https://pic.yupi.icu/1/1752041906112-ac985734-3a43-44a7-b13d-a1632e426828.png) + +LangChain 提供了 3 种 RAG 的实现方式,我把它称为:极简版、标准版、进阶版。 + +#### 极简版 RAG + +**极简版适合快速查看效果**,首先需要引入额外的依赖,里面包含了内置的离线 Embedding 模型,开箱即用: + +```xml + + dev.langchain4j + langchain4j-easy-rag + 1.1.0-beta7 + +``` + +示例代码如下,使用内置的文档加载器读取文档,然后利用内置的 Embedding 模型将文档转换成向量,并存储在内置的 Embedding 内存存储中,最后给 AI Service 绑定默认的内容检索器。 + +```java +// RAG +// 1. 加载文档 +List documents = FileSystemDocumentLoader.loadDocuments("src/main/resources/docs"); +// 2. 使用内置的 EmbeddingModel 转换文本为向量,然后存储到自动注入的内存 embeddingStore 中 +EmbeddingStoreIngestor.ingest(documents, embeddingStore); +// 构造 AI Service +AiCodeHelperService aiCodeHelperService = AiServices.builder(AiCodeHelperService.class) + .chatModel(qwenChatModel) + .chatMemory(chatMemory) + // RAG:从内存 embeddingStore 中检索匹配的文本片段 + .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore)) + .build(); +``` + +可以看到,极简版的特点是 “一切皆默认”,实际开发中,为了更好的效果,建议采用标准版或进阶版。 + +#### 标准版 RAG + +下面来试试标准版 RAG 实现,为了更好地效果,我们需要: + +- 加载 Markdown 文档并按需切割 +- Markdown 文档补充文件名信息 +- 自定义 Embedding 模型 +- 自定义内容检索器 + +在 Spring Boot 配置文件中添加 Embedding 模型配置,使用阿里云提供的 `text-embedding-v4` 模型: + +```yaml +langchain4j: + community: + dashscope: + chat-model: + model-name: qwen-max + api-key: + embedding-model: + model-name: text-embedding-v4 + api-key: +``` + +新建 `rag.RagConfig`,编写 RAG 相关的代码,执行 RAG 的初始流程并返回了一个定制的内容检索器 Bean: + +```java +/** + * 加载 RAG + */ +@Configuration +public class RagConfig { + + @Resource + private EmbeddingModel qwenEmbeddingModel; + + @Resource + private EmbeddingStore embeddingStore; + + @Bean + public ContentRetriever contentRetriever() { + // ------ RAG ------ + // 1. 加载文档 + List documents = FileSystemDocumentLoader.loadDocuments("src/main/resources/docs"); + // 2. 文档切割:将每个文档按每段进行分割,最大 1000 字符,每次重叠最多 200 个字符 + DocumentByParagraphSplitter paragraphSplitter = new DocumentByParagraphSplitter(1000, 200); + // 3. 自定义文档加载器 + EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder() + .documentSplitter(paragraphSplitter) + // 为了提高搜索质量,为每个 TextSegment 添加文档名称 + .textSegmentTransformer(textSegment -> TextSegment.from( + textSegment.metadata().getString("file_name") + "\n" + textSegment.text(), + textSegment.metadata() + )) + // 使用指定的向量模型 + .embeddingModel(qwenEmbeddingModel) + .embeddingStore(embeddingStore) + .build(); + // 加载文档 + ingestor.ingest(documents); + // 4. 自定义内容查询器 + ContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder() + .embeddingStore(embeddingStore) + .embeddingModel(qwenEmbeddingModel) + .maxResults(5) // 最多 5 个检索结果 + .minScore(0.75) // 过滤掉分数小于 0.75 的结果 + .build(); + return contentRetriever; + } +} +``` + +然后在构建 AI Service 时绑定内容检索器: + +```java +@Resource +private ContentRetriever contentRetriever; + +@Bean +public AiCodeHelperService aiCodeHelperService() { + // 会话记忆 + ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10); + // 构造 AI Service + AiCodeHelperService aiCodeHelperService = AiServices.builder(AiCodeHelperService.class) + .chatModel(qwenChatModel) + .chatMemory(chatMemory) + .contentRetriever(contentRetriever) // RAG 检索增强生成 + .build(); + return aiCodeHelperService; +} +``` + +编写单元测试: + +```java +@Test +void chatWithRag() { + Result result = aiCodeHelperService.chatWithRag("怎么学习 Java?有哪些常见面试题?"); + System.out.println(result.content()); + System.out.println(result.sources()); +} +``` + +Debug 运行,能够看到分割的文档片段,部分文档片段有内容重叠: + +![](https://pic.yupi.icu/1/1751962218145-1291831b-be55-44d8-9d73-af3e4bbe3dff.png) + +可以在对话记忆中看到实际发送的、增强后的 Prompt: + +![](https://pic.yupi.icu/1/1751962545347-a358cb1b-94d8-47ec-b9e1-c72234aeff4a.png) + +![](https://pic.yupi.icu/1/1751962597654-e87d90cc-3240-4982-9c8e-a5228468b1e7.png) + +回答效果也是符合预期的: + +![](https://pic.yupi.icu/1/1751962714819-a74a07e9-2f0b-44ce-b4ee-db4a4041966c.png) + + + +#### 获取引用源文档 + +如果能够给 AI 的回答下面展示回答来源,更容易增加内容的可信度: + +![](https://pic.yupi.icu/1/1752042954244-609fbce6-beb7-4d4b-87a5-c26cd3b8bb9a.png) + +在 LangChain4j 中,实现这个功能很简单。在 AI Service 中新增方法,在原本的返回类型外封装一层 Result 类,就可以获得封装后的结果,从中能够获取到 RAG 引用的源文档、以及 Token 的消耗情况等等。 + +```java +@SystemMessage(fromResource = "system-prompt.txt") +Result chatWithRag(String userMessage); +``` + +修改单元测试,输出更多信息: + +```java +@Test +void chatWithRag() { + Result result = aiCodeHelperService.chatWithRag("怎么学习 Java?有哪些常见面试题?"); + String content = result.content(); + List sources = result.sources(); + System.out.println(content); + System.out.println(sources); +} +``` + +执行效果如图,获取到了引用的源文档信息: + +![](https://pic.yupi.icu/1/1751973326587-f0a61ddc-a0b7-4eb8-949b-d19e257262fc.png) + +#### 进阶版 RAG + +这就是一套标准的 RAG 实现了,大多数时候,使用标准版就够了。进阶版会更加灵活,额外支持查询转换器、查询路由、内容聚合器、内容注入器等特性,将整个 RAG 的流程流水线化(RAG pipeline)。 + +![](https://pic.yupi.icu/1/1752043947317-362c8de1-26e4-4657-ada0-fb414a2dab13.png) + +定义好 RAG 流程后,最后通过 RetrievalAugmentor 提供给 AI Service: + +```java +AiServices.builder(xxx.class) + ... + .retrievalAugmentor(retrievalAugmentor) + .build(); +``` + +此外,之前我们使用的是内存向量存储,每次启动都要重新加载文档、调用嵌入模型,比较耗时,所以实际开发中建议使用独立的存储,[官方支持很多第三方存储](https://docs.langchain4j.dev/integrations/embedding-stores/),但是个人比较推荐 PG Vector,在原有关系库的基础上安装插件来支持向量存储,而且支持的特性很多。 + +![](https://pic.yupi.icu/1/1752044157711-6b5a9190-93ff-4a97-aa43-c42c519a2a0b.png) + +### 工具调用 - Tools + +工具调用(Tool Calling)可以理解为让 AI 大模型 **借用外部工具** 来完成它自己做不到的事情。 + +跟人类一样,如果只凭手脚完成不了工作,那么就可以利用工具箱来完成。 + +工具可以是任何东西,比如网页搜索、对外部 API 的调用、访问外部数据、或执行特定的代码等。 + +比如用户提问 “帮我查询上海最新的天气”,AI 本身并没有这些知识,它就可以调用 “查询天气工具”,来完成任务。 + +需要注意的是,工具调用的本质 **并不是 AI 服务器自己调用这些工具、也不是把工具的代码发送给 AI 服务器让它执行**,它只能提出要求,表示 “我需要执行 XX 工具完成任务”。而真正执行工具的是我们自己的应用程序,执行后再把结果告诉 AI,让它继续工作。 + +![](https://pic.yupi.icu/1/1752051591909-adecdfe5-87d0-4801-b556-58beea244ebe.png) + + + +我们需要的网络搜索能力,就可以通过工具调用来实现。这里我们细化下需求:让 AI 能够通过我的 [面试鸭刷题网站](https://www.mianshiya.com/) 来搜索面试题。 + +实现方案很简单,因为面试鸭网站的搜索页面 **支持通过 URL 参数传入不同的搜索关键词**,我们只需要利用 **Jsoup 库** 抓取面试鸭搜索页面的题目列表就可以了。 + +好家伙,我爬我自己?不过大家不要尝试,很容易被封号。 + +![](https://pic.yupi.icu/1/1752044504400-9b3b8719-dff6-4071-a084-e1236434b0c0.png) + + + +先引入 Jsoup 库: + +```xml + + org.jsoup + jsoup + 1.20.1 + +``` + +然后在 `tools` 包下编写工具,通过 `@Tool` 注解就能声明工具了,注意 **要认真编写工具和工具参数的描述**,这直接决定了 AI 能否正确地调用工具。 + +```java +@Slf4j +public class InterviewQuestionTool { + + /** + * 从面试鸭网站获取关键词相关的面试题列表 + * + * @param keyword 搜索关键词(如"redis"、"java多线程") + * @return 面试题列表,若失败则返回错误信息 + */ + @Tool(name = "interviewQuestionSearch", value = """ + Retrieves relevant interview questions from mianshiya.com based on a keyword. + Use this tool when the user asks for interview questions about specific technologies, + programming concepts, or job-related topics. The input should be a clear search term. + """ + ) + public String searchInterviewQuestions(@P(value = "the keyword to search") String keyword) { + List questions = new ArrayList<>(); + // 构建搜索URL(编码关键词以支持中文) + String encodedKeyword = URLEncoder.encode(keyword, StandardCharsets.UTF_8); + String url = "https://www.mianshiya.com/search/all?searchText=" + encodedKeyword; + // 发送请求并解析页面 + Document doc; + try { + doc = Jsoup.connect(url) + .userAgent("Mozilla/5.0") + .timeout(5000) + .get(); + } catch (IOException e) { + log.error("get web error", e); + return e.getMessage(); + } + // 提取面试题 + Elements questionElements = doc.select(".ant-table-cell > a"); + questionElements.forEach(el -> questions.add(el.text().trim())); + return String.join("\n", questions); + } +} +``` + +给 AI Service 绑定工具: + +```java +// 构造 AI Service +AiCodeHelperService aiCodeHelperService = AiServices.builder(AiCodeHelperService.class) + .chatModel(qwenChatModel) + .chatMemory(chatMemory) + .contentRetriever(contentRetriever) // RAG 检索增强生成 + .tools(new InterviewQuestionTool()) // 工具调用 + .build(); +``` + +编写单元测试,验证工具的效果: + +```java +@Test +void chatWithTools() { + String result = aiCodeHelperService.chat("有哪些常见的计算机网络面试题?"); + System.out.println(result); +} +``` + +Debug 运行,发现 AI 调用了工具: + +![](https://pic.yupi.icu/1/1751964854933-395ecc9e-0fb6-4788-b8e2-ae5ef1d094a7.png) + +工具检索到了题目列表: + +![](https://pic.yupi.icu/1/1751964893075-84d0ac23-fe02-47c0-95c3-e422d1305448.png) + +可以通过 Debug 看到 AI Service 加载了工具: + +![](https://pic.yupi.icu/1/1751964979312-65f04b40-9554-438b-83ff-025009f30a1c.png) + +可以通过会话记忆查看工具的调用过程: + +![](https://pic.yupi.icu/1/1751965074185-165ed1b9-a50f-4d21-ae85-b8c439f5065c.png) + +输出结果符合预期: + +![](https://pic.yupi.icu/1/1751965104933-af4b3181-4dc0-40bb-9ef9-5e1c0e26b389.png) + +前面只演示了最简单的工具定义方法 —— 声明式,LangChain4j 也提供了编程式的工具定义方法,不过我相信你不会想这么做的(除非是动态创建工具)。 + +![](https://pic.yupi.icu/1/1752045043475-a61743d1-e1ea-4912-bfac-d77ce6e43858.png) + +除了联网搜索外,还有一些经典的工具,比如文件读写、PDF 生成、调用终端、输出图表等等。这些工具我们可以自己开发,也可以通过 MCP 直接使用别人开发好的工具。 + + + +### 模型上下文协议 - MCP + +MCP(Model Context Protocol,模型上下文协议)是一种开放标准,目的是增强 AI 与外部系统的交互能力。MCP 为 AI 提供了与外部工具、资源和服务交互的标准化方式,让 AI 能够访问最新数据、执行复杂操作,并与现有系统集成。 + +可以将 MCP 想象成 AI 应用的 USB 接口。就像 USB 为设备连接各种外设和配件提供了标准化方式一样,MCP 为 AI 模型连接不同的数据源和工具提供了标准化的方法。 + +![](https://pic.yupi.icu/1/1752051649523-398e66d6-87fa-4cc4-8c9d-951939844405.png) + +简单来说,通过 MCP 协议,AI 应用可以轻松接入别人提供的服务来实现更多功能,比如查询地理位置、操作数据库、部署网站、甚至是支付等等。 + +刚刚我们通过工具调用实现了面试题的搜索,下面我们利用 MCP 实现 **全网搜索内容**,这也是一个典型的 MCP 应用场景了。 + +首先从 MCP 服务市场搜索 Web Search 服务,推荐 [下面这个](https://mcp.so/server/zhipu-web-search/BigModel?tab=content),因为它提供了 SSE 在线调用服务,不用我们自己在本地安装启动,很方便。 + +![](https://pic.yupi.icu/1/1752045285371-fd70d350-80bd-4037-9b57-ff8d3a37ccf5.png) + +但也要注意,用别人的服务可能是需要 API Key 的,一般是按量付费。 + +需要先去 [平台官方获取 API Key](https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys),等会儿会用到: + +![](https://pic.yupi.icu/1/1752045399400-4e8fe95f-5d5c-47dc-aa6e-4225f2df23aa.png) + +然后我们要在程序中使用这个 MCP 服务。比较坑的是,感觉 LangChain 对 MCP 的支持没有那么好,官方文档甚至都没有提到要引入的 MCP 依赖包。我还是从开源仓库中找到的依赖: + +![](https://pic.yupi.icu/1/1751967113982-099b0b9a-d5a3-43e0-bdf1-1ccfb8d093b2.png) + +引入依赖: + +```xml + + + dev.langchain4j + langchain4j-mcp + 1.1.0-beta7 + +``` + +在配置文件中新增 API Key 的配置: + +```yaml +bigmodel: + api-key: +``` + +新建 `mcp.McpConfig`,按照官方的开发方式,初始化和 MCP 服务的通讯,并创建 McpToolProvider 的 Bean: + +```java +@Configuration +public class McpConfig { + + @Value("${bigmodel.api-key}") + private String apiKey; + + @Bean + public McpToolProvider mcpToolProvider() { + // 和 MCP 服务通讯 + McpTransport transport = new HttpMcpTransport.Builder() + .sseUrl("https://open.bigmodel.cn/api/mcp/web_search/sse?Authorization=" + apiKey) + .logRequests(true) // 开启日志,查看更多信息 + .logResponses(true) + .build(); + // 创建 MCP 客户端 + McpClient mcpClient = new DefaultMcpClient.Builder() + .key("yupiMcpClient") + .transport(transport) + .build(); + // 从 MCP 客户端获取工具 + McpToolProvider toolProvider = McpToolProvider.builder() + .mcpClients(mcpClient) + .build(); + return toolProvider; + } +} +``` + +注意,上面我们是通过 SSE 的方式调用 MCP。如果你是通过 npx 或 uvx 本地启动 MCP 服务,需要先安装对应的工具,并且利用下面的配置建立通讯: + +```java +McpTransport transport = new StdioMcpTransport.Builder() + .command(List.of("/usr/bin/npm", "exec", "@modelcontextprotocol/server-everything@0.6.2")) + .logEvents(true) // only if you want to see the traffic in the log + .build(); +``` + +在 AI Service 中应用 MCP 工具: + +```java +@Resource +private McpToolProvider mcpToolProvider; + +// 构造 AI Service +AiCodeHelperService aiCodeHelperService = AiServices.builder(AiCodeHelperService.class) + .chatModel(qwenChatModel) + .chatMemory(chatMemory) + .contentRetriever(contentRetriever) // RAG 检索增强生成 + .tools(new InterviewQuestionTool()) // 工具调用 + .toolProvider(mcpToolProvider) // MCP 工具调用 + .build(); +``` + +编写单元测试: + +```java +@Test +void chatWithMcp() { + String result = aiCodeHelperService.chat("什么是程序员鱼皮的编程导航?"); + System.out.println(result); +} +``` + +执行单元测试,通过日志查看到了搜索过程: + +![](https://pic.yupi.icu/1/1751967601320-5242e432-ea07-4038-bc6f-7364aefe3d6a.png) + +MCP 服务生效,从网上检索到了内容作为答案: + +![](https://pic.yupi.icu/1/1751967705158-c4591073-858c-4584-a5ee-7d2ecb5261d6.png) + +目前,文档中并没有提到利用 LangChain4j 开发 MCP 的方法,不过目前也不建议用 Java 开发 MCP。 + +### 护轨 - Guardrail + +其实我感觉护轨这个名字起的不太好,其实我们把它理解为拦截器就好了。分为输入护轨(input guardrails)和输出护轨(output guardrails),可以在请求 AI 前和接收到 AI 的响应后执行一些额外操作,比如调用 AI 前鉴权、调用 AI 后记录日志。 + +![](https://pic.yupi.icu/1/1752051765814-ca0a709d-216e-4f84-8a05-0a8b9a3a6b66.png) + +让我们小试一把,在调用 AI 前进行敏感词检测,如果用户提示词包含敏感词,则直接拒绝。 + +新建 `guardrail.SafeInputGuardrail`,实现 InputGuardrail 接口: + +```java +/** + * 安全检测输入护轨 + */ +public class SafeInputGuardrail implements InputGuardrail { + + private static final Set sensitiveWords = Set.of("kill", "evil"); + + /** + * 检测用户输入是否安全 + */ + @Override + public InputGuardrailResult validate(UserMessage userMessage) { + // 获取用户输入并转换为小写以确保大小写不敏感 + String inputText = userMessage.singleText().toLowerCase(); + // 使用正则表达式分割输入文本为单词 + String[] words = inputText.split("\\W+"); + // 遍历所有单词,检查是否存在敏感词 + for (String word : words) { + if (sensitiveWords.contains(word)) { + return fatal("Sensitive word detected: " + word); + } + } + return success(); + } +} +``` + +LangChain4j 提供了几种快速返回的方法,简单来说,想继续调用 AI 就返回 success、否则就返回 fatal。 + +![](https://pic.yupi.icu/1/1751968291132-96a670ce-6551-4726-8c62-045021303af1.png) + +修改 AI Service,使用输入护轨: + +```java +@InputGuardrails({SafeInputGuardrail.class}) +public interface AiCodeHelperService { + + @SystemMessage(fromResource = "system-prompt.txt") + String chat(String userMessage); + + @SystemMessage(fromResource = "system-prompt.txt") + Report chatForReport(String userMessage); + + // 学习报告 + record Report(String name, List suggestionList) { + } +} +``` + +编写单元测试,写一个包含敏感词的提示词: + +```java +@Test +void chatWithGuardrail() { + String result = aiCodeHelperService.chat("kill the game"); + System.out.println(result); +} +``` + +运行并查看效果,会触发输入检测,直接抛出异常: + +![](https://pic.yupi.icu/1/1751968796339-ebf23753-55ad-4123-a4dc-e599859a28a1.png) + +如果不包含敏感词,则会顺利通过。 + +![](https://pic.yupi.icu/1/1751968877451-3ac9f488-0b78-4c04-a227-3c89b54847c8.png) + +当然,除了输入护轨,也可以编写输出护轨,对 AI 的响应结果进行检测。 + +### 日志和可观测性 + +之前我们都是通过 Debug 查看运行信息,不仅不便于调试,而且生产环境肯定不能这么做。 + +官方提供了 [日志](https://docs.langchain4j.dev/tutorials/logging) 和 [可观测性](https://docs.langchain4j.dev/tutorials/observability),来帮我们更好地调试程序、发现问题。 + +#### 日志 + +开启日志的方法很简单,直接构造模型时指定开启、或者直接编写 Spring Boot 配置,支持打印 AI 请求和响应日志。 + +```java +OpenAiChatModel.builder() + ... + .logRequests(true) + .logResponses(true) + .build(); +langchain4j.open-ai.chat-model.log-requests = true +langchain4j.open-ai.chat-model.log-responses = true +logging.level.dev.langchain4j = DEBUG +``` + +但并不是所有的 ChatModel 都支持,比如我测试下来 QwenChatModel 就不支持。这时只能把希望交给可观测性了。 + +#### 可观测性 + +可以通过自定义 Listener 获取 ChatModel 的调用信息,比较灵活。 + +新建 `listener.ChatModelListenerConfig`,输出请求、响应、错误信息: + +```java +@Configuration +@Slf4j +public class ChatModelListenerConfig { + + @Bean + ChatModelListener chatModelListener() { + return new ChatModelListener() { + @Override + public void onRequest(ChatModelRequestContext requestContext) { + log.info("onRequest(): {}", requestContext.chatRequest()); + } + + @Override + public void onResponse(ChatModelResponseContext responseContext) { + log.info("onResponse(): {}", responseContext.chatResponse()); + } + + @Override + public void onError(ChatModelErrorContext errorContext) { + log.info("onError(): {}", errorContext.error().getMessage()); + } + }; + } +} +``` + +但是只定义 Listener 好像对 QwenChatModel 不起作用,所以我们需要手动构造自定义的 QwenChatModel。 + +新建 `model.QwenChatModelConfig`,构造 ChatModel 对象并绑定 Listener: + +```java +@Configuration +@ConfigurationProperties(prefix = "langchain4j.community.dashscope.chat-model") +@Data +public class QwenChatModelConfig { + + private String modelName; + + private String apiKey; + + @Resource + private ChatModelListener chatModelListener; + + @Bean + public ChatModel myQwenChatModel() { + return QwenChatModel.builder() + .apiKey(apiKey) + .modelName(modelName) + .listeners(List.of(chatModelListener)) + .build(); + } +} +``` + +然后,可以将原本引用 ChatModel 的名称改为 `myQwenChatModel`,防止和 Spring Boot 自动注入的 ChatModel 冲突。 + +再次调用 AI,就能看到很多信息了: + +![](https://pic.yupi.icu/1/1751974020940-84059541-3935-4505-b114-6fcc809b04f5.png) + +### AI 服务化 + +至此,AI 的能力基本开发完成,但是目前只支持本地运行,需要编写一个接口提供给前端调用,让 AI 能够成为一个服务。 + +我们平时开发的大多数接口都是同步接口,也就是等后端处理完再返回。但是对于 AI 应用,特别是响应时间较长的对话类应用,可能会让用户失去耐心等待,因此推荐使用 SSE(Server-Sent Events)技术实现实时流式输出,类似打字机效果,大幅提升用户体验。 + +#### SSE 流式接口开发 + +LangChain 提供了 2 种方式来支持流式响应(注意,流式响应不支持结构化输出)。 + +一种方法是 [TokenStream](https://docs.langchain4j.dev/tutorials/ai-services#streaming),先让 AI 对话方法返回 TokenStream,然后创建 AI Service 时指定流式对话模型 StreamingChatModel: + +```java +interface Assistant { + + TokenStream chat(String message); +} + +StreamingChatModel model = OpenAiStreamingChatModel.builder() + .apiKey(System.getenv("OPENAI_API_KEY")) + .modelName(GPT_4_O_MINI) + .build(); + +Assistant assistant = AiServices.create(Assistant.class, model); + +TokenStream tokenStream = assistant.chat("Tell me a joke"); + +tokenStream.onPartialResponse((String partialResponse) -> System.out.println(partialResponse)) + .onRetrieved((List contents) -> System.out.println(contents)) + .onToolExecuted((ToolExecution toolExecution) -> System.out.println(toolExecution)) + .onCompleteResponse((ChatResponse response) -> System.out.println(response)) + .onError((Throwable error) -> error.printStackTrace()) + .start(); +``` + +我个人会更喜欢另一种方法,[使用 Flux](https://docs.langchain4j.dev/tutorials/ai-services/#flux) 代替 TokenStream,熟悉响应式编程的同学应该对 Flux 不陌生吧?让 AI 对话方法返回 Flux 响应式对象即可。示例代码: + +```java +interface Assistant { + + Flux chat(String message); +} +``` + +让我们试一下,首先需要引入响应式包依赖: + +```xml + + dev.langchain4j + langchain4j-reactor + 1.1.0-beta7 + +``` + +然后给 AI Service 增加流式对话方法,这里顺便支持下多用户的会话记忆: + +```java +// 流式对话 +Flux chatStream(@MemoryId int memoryId, @UserMessage String userMessage); +``` + +由于要用到流式模型,需要增加流式模型配置: + +```yaml +langchain4j: + community: + dashscope: + streaming-chat-model: + model-name: qwen-max + api-key: +``` + +构造 AI Service 时指定流式对话模型(自动注入即可),并且补充会话记忆提供者: + +```java +@Resource +private StreamingChatModel qwenStreamingChatModel; + +AiCodeHelperService aiCodeHelperService = AiServices.builder(AiCodeHelperService.class) + .chatModel(myQwenChatModel) + .streamingChatModel(qwenStreamingChatModel) + .chatMemory(chatMemory) + .chatMemoryProvider(memoryId -> + MessageWindowChatMemory.withMaxMessages(10)) // 每个会话独立存储 + .contentRetriever(contentRetriever) // RAG 检索增强生成 + .tools(new InterviewQuestionTool()) // 工具调用 + .toolProvider(mcpToolProvider) // MCP 工具调用 + .build(); +``` + +最后,编写 Controller 接口。为了方便测试,这里使用 Get 请求: + +```java +@RestController +@RequestMapping("/ai") +public class AiController { + + @Resource + private AiCodeHelperService aiCodeHelperService; + + @GetMapping("/chat") + public Flux> chat(int memoryId, String message) { + return aiCodeHelperService.chatStream(memoryId, message) + .map(chunk -> ServerSentEvent.builder() + .data(chunk) + .build()); + } +} +``` + +增加服务器配置,指定后端端口和接口路径前缀: + +```yaml +server: + port: 8081 + servlet: + context-path: /api +``` + +启动服务器,用 CURL 工具测试调用: + +```bash +curl -G 'http://localhost:8081/api/ai/chat' \ + --data-urlencode 'message=我是程序员鱼皮' \ + --data-urlencode 'memoryId=1' +``` + +可以看到流式的输出结果: + +![](https://pic.yupi.icu/1/1751975773168-c4ddd770-abd7-4555-90b6-8d487630aee4.png) + + + +#### 后端支持跨域 + +为了让前端项目能够顺利调用后端接口,我们需要在后端配置跨域支持。在 config 包下创建跨域配置类,代码如下: + +```java +/** + * 全局跨域配置 + */ +@Configuration +public class CorsConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + // 覆盖所有请求 + registry.addMapping("/**") + // 允许发送 Cookie + .allowCredentials(true) + // 放行哪些域名(必须用 patterns,否则 * 会和 allowCredentials 冲突) + .allowedOriginPatterns("*") + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*") + .exposedHeaders("*"); + } +} +``` + +注意,如果 `.allowedOrigins("*")` 与 `.allowCredentials(true)` 同时配置会导致冲突,因为出于安全考虑,跨域请求不能同时允许所有域名访问和发送认证信息(比如 Cookie)。 + + + +## AI 生成前端 + +由于这个项目不需要很复杂的页面,我们可以利用 AI 来快速生成前端代码,极大提高开发效率。这里鱼皮使用 [主流 AI 开发工具 Cursor](https://www.cursor.com/),挑战不写一行代码,生成符合要求的前端项目。 + +### 提示词 + +首先准备一段详细的 Prompt,一般要包括需求、技术选型、后端接口信息,还可以提供一些原型图、后端代码等。 + +```markdown +你是一位专业的前端开发,请帮我根据下列信息来生成对应的前端项目代码。 + +## 需求 + +应用为《AI 编程小助手》,帮助用户解答编程学习和求职面试相关的问题,并给出建议。 + +只有一个页面,就是主页:页面风格为聊天室,上方是聊天记录(用户信息在右边,AI 信息在左边),下方是输入框,进入页面后自动生成一个聊天室 id,用于区分不同的会话。通过 SSE 的方式调用 chat 接口,实时显示对话内容。 + +## 技术选型 + +1. Vue3 项目 +2. Axios 请求库 + +## 后端接口信息 + +接口地址前缀:http://localhost:8081/api + +## SpringBoot 后端接口代码 + +@RestController +@RequestMapping("/ai") +public class AiController { + + @GetMapping("/chat") + public Flux> chat(int memoryId, String message) { + return aiCodeHelperService.chatStream(memoryId, message) + .map(chunk -> ServerSentEvent.builder() + .data(chunk) + .build()); + } +} +``` + +注意,如果使用的是 Windows 系统,最好在 prompt 中补充“你应该使用 Windows 支持的命令来完成任务”。 + + + +### 开发 + +在项目根目录下创建新的前端项目文件夹 `ai-code-helper-frontend`,使用 Cursor 工具打开该目录,输入 Prompt 执行。注意要选择 Agent 模式、Thinking 深度思考模型(推荐 Claude): + +![](https://pic.yupi.icu/1/1751976145149-beefc903-31e1-4a4f-8bbe-edf41a3a4806.png) + +除了源代码外,鱼皮这里连项目介绍文档 `README.md` 都生成了,确实很爽! + +![](https://pic.yupi.icu/1/1752025773338-e87a94c7-db0b-4213-9cc8-f643b14f5182.png) + +生成完代码后,打开终端执行 `npm run dev` 命令,或者打开 `package.json` 文件并利用 Debug 按钮启动项目: + +![](https://pic.yupi.icu/1/1752026474929-cd4a7225-1e48-4e95-a08e-6f69ea256d45.png) + +### 查看效果 + +运行前端项目后,首先验证功能是否正常,再验证样式。如果发现功能不可用(比如发送消息后没有回复),可以按 F12 打开浏览器控制台查看前端错误信息、或者看后端项目控制台的错误信息,具体报错信息具体分析。这块就会涉及到一些前端相关的知识了,不懂前端的同学尽量多问 AI,让它帮忙修复 Bug 就好。**如果实在搞不定,也别瞎折腾了!**用鱼皮的代码就好。 + +比如我遇到了连接后端 SSE 服务报错的问题,直接复制报错信息给 AI 解决: + +![](https://pic.yupi.icu/1/1752025968566-ab2c2d53-59e4-4519-bf55-e07b095f1e5d.png) + +成功运行,查看效果: + +![](https://pic.yupi.icu/1/1752026740589-5b4670c8-3f5c-470e-afba-4cfd469c31ee.png) + +![](https://pic.yupi.icu/1/1752026767000-6599f85f-5926-4174-a06e-55e30e4df667.png) + +确保功能和样式没问题后,记得先提交代码(防止后续被 AI 生成的代码污染),然后你可以按需增加更多功能,比如用 Markdown 展示 AI 的回复消息。 + +![](https://pic.yupi.icu/1/1752027043776-cd6d17ed-175f-4c7e-8b25-aee81a5296b2-20250710114303496.png) + + + +## 总结 + +OK,以上就是 LangChain4j 实战项目教程,怎么样,大家学会了还是学废了? + +回到开头的那个问题:**实际开发中应该如何选择 AI 开发框架呢?** + +就拿 Spring AI 和 LangChain4j 来说,不知道大家更喜欢哪个框架?我其实会更喜欢 Spring AI 的开发模式,而且 Spring AI 目前支持的能力更多,还有国内 Spring AI Alibaba 的巨头加持,生态更好,遇到问题更容易解决;LangChain4j 的优势在于可以独立于 Spring 项目使用,更自由灵活一些。 + +不过这类框架大家重点学习一个就好了,很多概念和用法是相通的: + +![](https://pic.yupi.icu/1/1752050425995-3b2b8cf4-ad48-41ec-a1e5-154ae6cd8526.png) + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/DeepSeek + 火山 - AI 海龟汤游戏项目实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/DeepSeek + 火山 - AI 海龟汤游戏项目实战.md new file mode 100644 index 0000000..2e1654e --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/DeepSeek + 火山 - AI 海龟汤游戏项目实战.md @@ -0,0 +1,125 @@ +# DeepSeek + 火山 - AI 海龟汤游戏项目实战 + +本项目是一个 AI 海龟汤游戏网站,通过 AI 对话的方式玩海龟汤游戏。 + +这是一个快速实战 Vibe Coding 的项目,从需求分析到开发完成只用了 2 个多小时。其中前端使用 AI 生成,后端手写代码调用 AI API。重点在于学习快速开发流程、Prompt 提示词工程、以及给程序增加 AI 能力的方法。 + +项目代码免费开源:https://github.com/liyupi/yuhaigui-ai-game + +项目文字 + 视频教程:https://www.codefather.cn/course/1898973113527894017 + +下文为项目的成品介绍和演示效果。 + + + +--- + + + +大家好,我是程序员鱼皮,现在已经是全民 AI 时代了,咱们程序员更要想办法榨干 AI,把 AI 利用起来。前几天我一时兴起,直播用 2 多个小时的时间,从需求分析开始,带大家做了一个 AI 海龟汤游戏项目。 + +[代码也给大家开源出来了](https://github.com/liyupi/yuhaigui-ai-game),供朋友们玩耍和学习: + +![](https://pic.yupi.icu/1/image-20250311173906981.png) + +下面简单介绍下这个项目~ + + + +## AI 海龟汤项目 + +几个小时就能学完的 AI 原生项目,通过做一个 AI 海龟汤游戏网站,带大家快速实战 AI 项目的开发流程,紧跟时代的前沿。 + +可能很多朋友没听说过海龟汤,这是一个老少咸宜的小游戏,分为汤面和汤底,主持人讲一个故事(汤面),由玩家通过提问的方式来不断地揭露还原故事的真相(汤底)。 + +举个例子:有一个人邀请朋友来参加生日聚会,在他吹完蜡烛后,他把在场的所有朋友都弄死了,问为什么? + +![](https://pic.yupi.icu/1/image-20250311174206256.png) + +可以让 AI 代替传统海龟汤的主持人,玩家只需要向 AI 对话,就能够自己进行海龟汤的游戏。 + +下面这个图就是用 AI 生成的网站,其实还可以再优化优化让它更好看~ + +![](https://pic.yupi.icu/1/1741583369760-09fd9c45-2093-4ab0-8148-ec83ad61fc6b.png) + + + +通过这个小项目,其实还是能学到不少东西的: + +1. 学习标准的企业项目开发流程:需求分析 => 方案设计 => 后端开发 + 前端开发 => 测试 => 部署上线(可选) +2. 学习如何快速初始化前后端项目 +3. 学习在程序中接入 AI 大模型 +4. 学习如何封装自己的 AI 工具类 +5. 学习如何优化 Prompt +6. 学习如何维护对话上下文并传递给 AI +7. 学习如何利用 AI 补全代码 +8. 学习如何纯利用 AI 开发前端网站 + + + +![接入 AI 并调试优化 Prompt 提示词](https://pic.yupi.icu/1/1741248993412-8e92e068-5192-46ad-81bc-bf046de4c005.png) + + + +### 技术选型 + +#### 前端 + +- Vue 3:适合快速开发单页面应用 +- Ant Design Vue:主流组件库,兼容 PC 端和移动端响应式 +- Vue Router:前端路由组件 +- Axios:主流的请求库 + +#### 后端 + +- Java + Spring Boot 框架 +- MySQL 数据库 +- MyBatis + MyBatis Plus 框架 +- Hutool 工具类 +- Swagger + Knife4j 接口文档组合 +- AI 大模型接入,此处接入的是目前很火的 DeepSeek + + + +![快速初始后端 + 运行接口文档调试接口](https://pic.yupi.icu/1/1741247574417-a53861c4-35c6-488d-90a1-aa2cea31cee0.png) + + + +### 业务流程 + +1. 玩家进入页面,点击【开始游戏】,进入聊天室页面 +2. 进入聊天室页面时,AI 会立刻给出一个招呼语(给出故事汤面) +3. 接下来,用户可以和 AI 主持人进行对话 +4. 用户可以主动结束,也可以由 AI 主动结束游戏 +5. 用户可以随时查看往期的对话记录 + +流程如图,这个图也是利用 AI 生成出来的: + +![](https://pic.yupi.icu/1/image-20250310135157204.png) + + + +## 最后 + +这个项目的完整直播回放已经分集发到了 [编程导航网站](https://mp.weixin.qq.com/s/jHy2EjdOZPJDN_Lrs7qAUA) 上。除了上面这个项目外,最近我给编程导航的 [智能面试刷题平台项目](https://mp.weixin.qq.com/s/jHy2EjdOZPJDN_Lrs7qAUA) 也新增了不少 AI 的功能,比如 AI 生成题目和题解、AI 模拟面试等,都能够帮大家增加简历亮点并提升求职竞争力。 + +![AI 模拟面试](https://pic.yupi.icu/1/image-20250311175611501.png) + +编程导航还有我带大家做过的 [20 多套项目教程](https://www.codefather.cn/post/1797431216467001345),从 0 到 1 带大家实操全栈项目开发,很多朋友靠我的项目拿到了不错的 Offer,好评如潮~ + +![](https://pic.yupi.icu/1/de62f4cc-32cb-4814-aca7-03c232d0e2d2.png) + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/GLM + Claude Code - AI 命令行编程工具项目实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/GLM + Claude Code - AI 命令行编程工具项目实战.md new file mode 100644 index 0000000..ae02acf --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/GLM + Claude Code - AI 命令行编程工具项目实战.md @@ -0,0 +1,416 @@ +# GLM + Claude Code - AI 命令行编程工具项目实战 + +本项目将带你用纯 Vibe Coding 的方式,利用 Claude Code 开发一个对标 Claude Code 的 AI 命令行编程工具 Yupi Code。 + +项目全程通过和 AI 对话完成开发,不写一行代码,适合想快速实践完整 Vibe Coding 开发流程、想学习如何用 AI 开发 AI 工具的同学。 + + + +--- + + + +大家好,我是程序员鱼皮。最近朋友开始学习 AI 编程了(被我带的),她听说 Claude Code 这个 AI 编程工具很牛掰,结果试了下发现得要国外的 Claude 账号才能登陆。 + +![](https://pic.yupi.icu/1/1766562559951-d1371bb9-99d3-467a-aeec-421cd12eb3bb.png) + +然后她就骂骂咧咧地跟我吐槽。 + +于是我开玩笑地说:别难过了,要不我给你做一个 Claude Code 算了? + +![](https://pic.yupi.icu/1/1766562773776-4a34c38c-c95b-4eb9-8b02-81ca86133188.png) + +结果,她当真了! + +我 ↓ + +![](https://pic.yupi.icu/1/1766562833168-97c7d4fc-bfe5-4a09-9215-dcfbdb546cb4.png) + +没办法,只能试一试了。 + +正好这两天国产 AI 大模型 GLM-4.7 发布了,我看网上很多博主都在吹什么 “国内最强的编程模型”、“最强的开源模型”、“Claude 的最佳平替”,甚至说是超过了 GPT-5.2 和 Claude Sonnet 4.5。 + +![](https://pic.yupi.icu/1/1766563074181-1ee8e12d-2868-4b23-b993-c0e61800565e.png) + +你说国产最强也就算了,超过 Claude 这我能信么? + +那正好,我就尝试用 GLM-4.7 来做个自己的 AI 编程工具吧,对标 Claude Code 那种的,看看 GLM-4.7 到底几斤几两。 + +![](https://pic.yupi.icu/1/1766551074508-575a037d-174a-43d2-bbfe-e223082fc665.png) + +接下来,就让我们一起 **用 GLM-4.7 + Claude Code** 开发一个 **基于 GLM-4.7 的仿 Claude Code** 的 AI 编程工具。 + +项目开始前,先起一个响当当的名字,就叫 `Yupi Code` 吧! + +接下来,我们将遵循这套《鱼皮 AI Vibe Coding 开发仿 Claude Code 的 Yupi Code》流程,不写一行代码,一步一步把 “Claude Code” 做出来! + +- 环境准备 => 安装工具和配置环境,能够 Vibe Coding +- 技术调研 => 确认满足生成需求 +- 设计开发 => 包括方案设计、生成代码、修复 Bug,得到 MVP 最小可行产品 +- 版本控制 => 防止后续改动出问题 +- 优化能力 => 支持更多对标 Claude Code 的功能,比如联网搜索、流式输出、深度思考等 + +![](https://pic.yupi.icu/1/1766549738919-9e627293-954a-4f39-8625-d1dcb1835cbc.jpeg) + + + +## 环境准备 + +智谱的 GLM-4.7 兼容多款编码工具,除 Claude Code 外,还支持 Cursor、Cline 等主流编码工具,灵活适配多种开发场景。 + +给 Claude Code 接入 GLM 也很简单,1 分钟搞定。 + +首先打开终端,输入一行命令安装 Claude Code: + +```shell +npm install -g @anthropic-ai/claude-code +``` + + + +然后执行 `claude` 命令打开程序,默认是需要登录 Claude 账号的,否则无法使用: + +![](https://pic.yupi.icu/1/1764145940075-ace6fd24-a09c-41c0-b400-1cffc394fc8a.png) + + + +不过没关系,让我们把它背后的 AI 大模型换成国内的 GLM-4.7。首先进入 `{用户目录}/.claude` 目录,创建一个 `settings.json` 配置文件: + +![](https://pic.yupi.icu/1/1764146110361-06e13de5-7de4-4fc5-9533-3651447d5e19.png) + + + +然后修改配置文件中的内容如下,记得替换成你自己的 API Key: + +![](https://pic.yupi.icu/1/1764146125955-3029843c-26b8-4628-b2b7-a9d8abb2aef1.png) + + + +API Key 直接到智谱开发平台获取即可: + +指路:https://bigmodel.cn/ + +![](https://pic.yupi.icu/1/1766552195823-7f90ead2-3e07-4eb4-92e2-7ef12c591e61.png) + + + +接下来就可以愉快地使用了~ + +![](https://pic.yupi.icu/1/1766549578200-7189d326-db17-4edd-9e27-2d9da3af06cf.png) + + + +除了这种方式外,官方文档还提供了更简单的方式,直接使用自动化助手,按照指引就能完成环境配置: + +![](https://pic.yupi.icu/1/1766552079851-2cd903df-febb-4860-98fc-51c1143b4105.png) + + + +## 技术调研 + +如果要完全利用 AI 开发项目,有几个难点: + +1. 项目需要包含完整前后端,需要大模型有较强的 **编码能力** +2. 需要让后端项目对接 AI 大模型,每个大模型的接入和开发方式不同,需要让 AI **读取文档** 理解最新的开发方式 +3. 如果想要优化界面效果,还需要 **图片理解能力**,给 AI 一张图片就能让它还原 + +在正式开发前,我们要确认 GLM-4.7 和 Claude Code 的配合能够满足这些能力要求。 + +根据智谱官方介绍,Claude Code 中内置了智谱专属的 MCP 工具,不需要开发者自己安装。包括 **搜索和网页读取** 能力、能够直接解析截图/设计稿/报错图的 **视觉理解能力**。 + +让我们依次测试一下,首先是网页搜索能力,紧跟时事: + +![](https://pic.yupi.icu/1/1766541771159-00bcb3ee-422b-4895-9ab6-15e5ad44937e.png) + +测试网页读取能力,让它来读取我们编程导航网站的信息: + +![](https://pic.yupi.icu/1/1766485091937-8555eddf-7301-4161-92d9-4f19251cf9d1.png) + +测试图片理解能力,我给 AI 传了一张 “从夯到拉排行榜的背景图”: + +![](https://pic.yupi.icu/1/1766552716828-cc3c5015-a220-44c4-9c99-9ea6e6cc9a2e.png) + +AI 的理解还是很准确的,具体文字也读取出来了。 + +OK,几个能力都满足要求,下面让我们进入方案设计和开发阶段。 + + + +## 设计开发 + +先创建一个干净的项目目录 `yupi-code`,打开终端并进入该目录: + +![](https://pic.yupi.icu/1/1766545100781-86907b5b-56df-42de-a36f-21b2738102cd.png) + + + +然后输入提示词: + +```markdown +帮我开发一个类似 Claude Code 的终端 AI 编程工具,能够使用 GLM-4.7 模型帮用户回答问题和生成代码 +``` + +一般来说,整个项目的第一句提示词是最重要的,如果我要开发一个复杂的商业项目,肯定会好好打磨一下这句提示词,少说写个几百字(之前看过我 [AI 程序员技术练兵场项目](https://mp.weixin.qq.com/s/cd7K9WQiOkP7AJglZ1b1Ng) 的同学应该知道)。 + +![](https://pic.yupi.icu/1/1766553004293-19edef3f-ab54-4275-83fa-d5d78ed1a8ce.png) + +但测试 AI 模型时,我喜欢反其道而行之,站在大多数用户的角度,故意输入一句简单的提示词,看看 AI 能不能引导我来生成满足需求的项目。 + +果然,AI 判断这是一个复杂的项目,想要进入 **计划模式** —— 先明确需求、设计方案再开发。 + +![](https://pic.yupi.icu/1/1766545143400-e5909edc-d015-4ed8-8a98-c1428a5807e4.png) + + + +然后我们需要通过选择来明确需求,并让 AI 生成方案。 + +Claude Code 的交互做的还是不错的,先选择编程语言,建议老老实实选 AI 推荐的第一个: + +![](https://pic.yupi.icu/1/1766545700277-0a92c7af-af6a-4bf3-b045-b35a8810fe82.png) + + + +接下来是选择项目要具有的功能。如果是以前,我可能会先让 AI 只开发基础对话功能,跑通流程后再添加其他功能。 + +但现在我对 AI 有了更多的信心,**咱就把所有功能全都选上,干就完了!** + +![](https://pic.yupi.icu/1/1766545748726-b5bcf0c2-1650-409d-9cfb-56874d80e7aa.png) + + + +其他设置就不多说了: + +![](https://pic.yupi.icu/1/1766545906676-50ffc0ba-404a-42e0-af0e-c4797a5d5d77.png) + + + +选择完成后,AI 给出了详细的实现计划,一定要仔细阅读: + +![](https://pic.yupi.icu/1/1766546189349-27a4a8d7-92c0-4cf4-931e-e98e304736c9.png) + + + +你可以直接执行,或者给 AI 进一步的指导。比如我让 AI 生成的应用去调用智谱 Coding Plan 套餐的 BASE URL,能节约一些成本,并且给 AI 提供了一个官方的 API 文档,便于 AI 生成准确的代码。 + +![](https://pic.yupi.icu/1/1766546246817-adc95f50-246d-4c9c-b0cd-35f6433c9b40.png) + + + +确认后开始执行,AI 会先调用内置的工具来搜索和解析文档: + +![](https://pic.yupi.icu/1/1766546433884-517bb8d9-8eb0-4a44-bd9c-0b0591af4184.png) + + + +然后 AI 列出了一个 Todo List,并且一步步生成代码和文档: + +![](https://pic.yupi.icu/1/1766546471145-170595b6-05b5-440e-a208-671c362eb002.png) + + + +这期间如果你发现有严重的问题,比如发现 AI 生成的代码已经完全偏离预期了,那么就尽早暂停或者人工输入提示词来引导 AI。如果发现 AI 只是有一小块代码生成的不对,我的建议是先忍着,反正最后 AI 大概率会自己发现问题并修复。 + +过了大概十几分钟后,AI 生成完成,还告诉了我使用方法: + +![](https://pic.yupi.icu/1/1766546800949-d8f28864-141e-477e-af98-a25bf02d99e7.png) + + + +可惜我根本懒得看,我直接把 API Key 交给 AI 帮我运行不就好了? + +Vibe Coding 开发模式下,我多自己做一件事,都是对 AI 的不尊重。 + +![](https://pic.yupi.icu/1/1766553290398-ad4d9c90-f804-4f46-b040-c65f821897d0.png) + +输入提示词: + +```markdown +我的 API key 是 xxxxxxx,请你帮我运行 +``` + + + +然后,翻车了。。。 + +![](https://pic.yupi.icu/1/1766546943625-ae073ada-da33-429a-bbf8-a642f50204dd.png) + + + +不慌,直接让 AI 自己检查并修复错误。而且为了使用方便,应该提供一个快速启动脚本,能够让我像运行 Claude Code 一样,一行命令启动 AI 编程工具。 + +提示词: + +```markdown +帮我检查并修复项目中的错误,并创建一个可以像 Claude 一样让用户在命令行输入 "yupicode" 就能启动程序的快捷脚本 +``` + + + +几分钟后,AI 修复完成,并且提供了一个 `yupicode` 脚本: + +![](https://pic.yupi.icu/1/1766547157316-1e78081d-7d98-43c2-8fc6-37f40dcd1d81.png) + + + +我打开一个新的终端,然后运行 `yupicode` 脚本,尝试和 AI 对话: + +![](https://pic.yupi.icu/1/1766488187720-0dedd977-3663-4146-8fc6-bd5e8d65a7ea.png) + +你别说,效果还不错啊! + +还像 Claude Code 一样提供了一些命令,比如清空对话历史、查看帮助之类的: + +![](https://pic.yupi.icu/1/1766488215355-476254ae-1fdd-44fe-94a7-939621a5b3f3.png) + + + +看到这里,我感觉项目已经基本可用了。建议给项目上个 Git 来版本控制,防止后面的改动出问题。 + +什么?你不知道 Git 是什么? + +没关系,直接交给 AI 吧: + +```markdown +现在项目已经基本可用了,帮我提交一个 git 版本,防止后续改动出问题 +``` + +![](https://pic.yupi.icu/1/1766547719776-e4ca2495-158d-441e-b995-d2e3b475187b.png) + + + +测试下来,目前的 Yupi Code 还有一些不足之处,比如不支持搜索: + +![](https://pic.yupi.icu/1/1766488309079-9e05324c-b780-4476-b7a1-09e0b0a12ed4.png) + +接下来就让我们优化项目,增加更多 Claude Code 支持的能力。 + + + +## 优化能力 + +1)先来添加网络搜索能力,直接把智谱的官方文档给它丢进去。提示词如下: + +```markdown +现在好像不支持网络搜索,请参考 + https://docs.bigmodel.cn/api-reference/%E5%B7%A5%E5%85%B7-api/%E7%BD%91%E7%BB%9C%E6%90%9C%E7%B4%A2 + 文档,增加网络搜索工具调用能力 +``` + + + +![](https://pic.yupi.icu/1/1766547400820-047db1e2-dee7-4bb3-875c-3c3d03d7bf60.png) + + + +很快 AI 就添加了新功能,重新打开 yupicode 来验证下,正常生效了: + +![](https://pic.yupi.icu/1/1766542072968-2a635280-4f04-41c7-9e72-b149b503b18e.png) + + + +2)下面再优化下 AI 回复的效果,目前是卡一会儿然后直接输出完整回答,需要调整为流式输出的打字机效果。 + +提示词: + +```markdown +我希望在等待 AI 回复时,有一个转圈的小图标;并且 AI 的回复可以实时流式输出 +``` + + + +AI 很快就搞定了: + +![](https://pic.yupi.icu/1/1766547560315-96b3044c-21d4-4017-b3b2-8e6c599fdfac.png) + + + +3)GLM-4.7 进一步强化了交错式思考能力,引入 **保留式思考** 和 **轮级思考**,让复杂任务执行更稳、更可控。我们也应该让 Yupi Code 输出模型的思考信息、工具调用信息等等,帮助用户了解情况。 + +输入提示词: + +```markdown +帮我输出模型思考的信息、以及工具调用信息,你可以通过官方文档来了解如何开发 +``` + + + +![](https://pic.yupi.icu/1/1766547838246-0de4e1a6-46e7-4fa0-9f69-2cc6c137d941.png) + + + +测试一下优化后的效果,比如 “介绍一下鱼皮的 AI 导航网站”,能很清晰地看到思考过程: + +![](https://pic.yupi.icu/1/1766491085646-e55d65e2-f1f4-4de5-9b2e-a580f6671fab.png) + + + +## 大功告成 + +到这里,仿照 Claude Code 开发的 Yupi Code 就已经完成了,让我们用它来开发个小网站试试。 + +比如来个动画学算法的 Demo,提示词: + +```markdown +帮我开发一个学习冒泡排序算法的动画网站,使用 Q 版动漫的风格和吉伊卡哇感觉的配色 +``` + + + +![](https://pic.yupi.icu/1/1766491627903-c7a8401b-a029-4f60-86c2-583459f60098.png) + + + +效果如图,画风还是不错的,但要是之后大模型能自动生成图片插画并添加到网站中,就更好了。 + +![](https://pic.yupi.icu/1/1766492330648-78beb8fe-20f5-4577-9a5a-9c6844b15ba1.png) + + + +再来开发个仿真的电子黑板,提示词: + +```markdown +帮我开发一个仿真的电子黑板,用户可以在上面画画并导出为图片 +``` + + + +![](https://pic.yupi.icu/1/1766543009945-1be675f7-2cb1-43ce-9794-36cfa3cf9f87.png) + + + +圣诞节了,鱼皮给大家画颗圣诞树,还附赠一个小礼物,这怎么能不算是程序员的浪漫呢~ + +![](https://pic.yupi.icu/1/1766548114861-81c8b4d2-b7fc-4134-8722-264edf56f229.png) + + + +------ + + + +OK,这就是我 **利用国产的 AI 大模型 GLM-4.7 + Claude Code** 开发出一个 **基于 GLM-4.7 的 Yupi Code** 的全过程了。 + +我自己体验下来,GLM-4.7 相比于之前的国内大模型,在处理复杂任务的稳定性上有进步,即使遇到问题也会自动修复,让最终生成的代码可运行。 + +而且 GLM-4.7 调用工具的能力也强化了,和 Claude Code 等 AI 编程工具打配合,直接内置了联网搜索、网页读取、解释图片等 AI 编程常用的能力,不需要自己再去找 MCP 来增强了。 + +不得不说,作为一直关注智谱 AI 的忠实开发者,真的很能感受到他们这几个月来在 AI 编程方向的努力,我相信大家也是有目共睹。 + +不过毕竟现在的 Yupi Code 是 AI 一把梭的,还有很多能优化完善的地方。如果后面有时间,大家也感兴趣的话,说不定我会好好打磨打磨这个工具把它开源出来。我的终极目标是,让基于 **AI 大模型 GLM-4.7 + Claude Code** 开发的基于 **GLM-4.7 的 Yupi Code** 编程工具,能够开发出一个基于 **GLM-4.7 的** 编程工具,比如 Yupi Son Code。我认为好的 AI 工具就是要能做到无限套娃,疯狂自举! + +![](https://pic.yupi.icu/1/1766549948743-c5e1340a-5b3d-4419-b5df-c2fd4a5c2c7f.jpeg) + +听懂掌声~ + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Kimi K2 - AI 文档阅读助手项目实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Kimi K2 - AI 文档阅读助手项目实战.md new file mode 100644 index 0000000..123b493 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Kimi K2 - AI 文档阅读助手项目实战.md @@ -0,0 +1,168 @@ +# Kimi K2 - AI 文档阅读助手项目实战 + +本项目是一个 AI 文档阅读助手网站,可以帮你快速读懂各种复杂的文档(论文、技术文档、PDF 等),还能帮你管理文档。 + +项目包含完整的前端和后端,全程通过和 AI 对话完成开发,不写一行代码,适合想快速实践完整 Vibe Coding 开发流程、想学习如何用 AI 开发实用工具的同学。 + + + +--- + + + +大家好,我是程序员鱼皮。开学季到了,想必很多朋友要开始收集和阅读论文,像我自己学习新技术知识也会去阅读文档,我深知阅读文档的痛苦。明明每个词拆开都知道什么意思,连一起就看不懂。 + +![](https://pic.yupi.icu/1/1757559057843-b9d37369-49bf-4eec-878a-c70ac945cbd9.png) + +为了帮助大家免受文档的折磨,我用 AI 开发了个 AI 文档助手网站,可以帮你快速读懂各种复杂的文档、还帮你管理文档。 + +![](https://pic.yupi.icu/1/1757561248387-205bf672-7a6c-452a-a283-698fb526601c.png) + +网站完全免费,代码完全开源! + +开源仓库:[github.com/liyupi/literature-assistant](https://github.com/liyupi/literature-assistant) + +![](https://pic.yupi.icu/1/1757829143308-d5bfdac6-847a-4061-9194-4821bdf3d3dc.png) + +下面先教大家如何使用网站,再分享这个网站的制作过程,还有国内使用 Claude Code 的方法哦。 + +⭐️ 推荐观看视频版,2 分钟学会:[bilibili.com/video/BV1MnpVzdETW](https://www.bilibili.com/video/BV1MnpVzdETW/) + + + +## 如何使用? + +先下载开源代码到自己电脑,然后直接运行我提供的快速启动脚本,打开网页就能看到效果了。 + +💡 要确保你的电脑有 Node.js 和 Java 环境,可以参考 README.md 文档安装。 + +![](https://pic.yupi.icu/1/1757567928358-ad506045-faaf-47b1-b742-190c83c94ad3.png) + + + +当你要阅读文档时,点击 “单个导入” 按钮,上传文档文件,然后需要填写 Kimi AI 的 API Key。 + +![](https://pic.yupi.icu/1/1757560732751-de713284-c039-41c1-b9f4-0af34e4c703c.png) + + + +选择 Kimi 是因为他们刚刚发布了新版本的 K2 模型,在编程、推理和文档理解方面都很不错; + +而且支持 256K 的上下文,几十万字的论文也能搞定。 + +![](https://pic.yupi.icu/1/1757560219469-2eab0801-a9b3-49dd-b680-d1d27c1850cf.png) + + + +在侧重考察真实软件工程任务的 SWE-bench Verified 等基准测试中,新版 Kimi K2 模型的表现也很不错: + +![](https://pic.yupi.icu/1/1757560161782-1c78bd3c-a3a5-42f9-b79b-a0b07d808e6b.png) + + + +只需要登录 [Kimi 的开发控制台](https://platform.moonshot.cn/),然后进入 API Key 管理来获取一个调用大模型的密钥。 + +![](https://pic.yupi.icu/1/1757560312832-cfd4158d-8c31-4c22-8b42-573551334863.png) + + + +虽然新人有免费额度,但是不要泄露自己的密钥哦! + +![](https://pic.yupi.icu/1/1757560674974-180d8475-e83e-4b35-ba9b-2ded866aa730.png) + + + +填写好 API Key,就可以生成文档阅读指南啦,生成速度非常快。 + +![](https://pic.yupi.icu/1/1757560771758-4c3df93e-889d-4c74-afa2-90e69347f286.png) + + + +AI 生成的效果还是不错的,图文并茂,能帮你更快理解复杂的文档。 + +![](https://pic.yupi.icu/1/1757560820325-87111dd8-cd82-49d0-9385-24ea9a33e885.png) + + + +你还可以批量导入多个文档,同时调用 AI 生成阅读指南,提高效率。 + +![](https://pic.yupi.icu/1/1757560886812-1706415c-cff5-4475-872f-ba66891563f7.png) + + + +此外,你还可以把这个网站当做自己的智能文档收藏夹,可以分类检索已经导入的文档、下载原始文件、随时查看文档阅读指南。**不要再让自己收藏过的文档找不到啦~** + +![](https://pic.yupi.icu/1/1757560925975-079ad961-7cc8-498b-99e2-84a4a534023f.png) + + + +## 怎么实现? + +如果是以前,这种网站可能要做个好几天。但现在 AI 编程技术已经很成熟了,我选用 Claude Code AI 开发工具,轻轻松松一天搞定,而且一行代码都不用自己写。 + +首先在终端输入一行命令来安装 Claude Code: + +```bash +npm install -g @anthropic-ai/claude-code +``` + +然后执行 `claude` 命令,就可以向它提问了~ + +结果,报错啦! + +![](https://pic.yupi.icu/1/1756451588360-37620a0b-bc2f-4ad5-adf9-4efde87f17ed.png) + +**可恶啊,这破玩意还不支持国内使用!** + +不过没关系,我们可以更换为 Kimi。在终端内输入命令来配置一段环境变量(注意区分操作系统): + +```bash +# Linux/macOS 启动高速版 kimi-k2-turbo-preview 模型 +export ANTHROPIC_BASE_URL=https://api.moonshot.cn/anthropic +export ANTHROPIC_AUTH_TOKEN=<你的 API 密钥> +export ANTHROPIC_MODEL=kimi-k2-turbo-preview +export ANTHROPIC_SMALL_FAST_MODEL=kimi-k2-turbo-preview + +# Windows Powershell 启动高速版 kimi-k2-turbo-preview 模型 +$env:ANTHROPIC_BASE_URL="https://api.moonshot.cn/anthropic"; +$env:ANTHROPIC_AUTH_TOKEN=<你的 API 密钥> +$env:ANTHROPIC_MODEL="kimi-k2-turbo-preview" +$env:ANTHROPIC_SMALL_FAST_MODEL="kimi-k2-turbo-preview" +``` + + + +然后就可以愉快地使用 Claude Code 生成代码了~ + +![](https://pic.yupi.icu/1/1756451713145-29e5ba15-76b2-4848-903a-f098b942e2f9.png) + + + +对于包含完整前后端的网站,很难用一段提示词就让 AI 生成出满意的效果,因此我们需要像企业真实开发一样 **分解工作步骤**。先后端、再前端、最后前后端对接联调,而且最好一个一个地开发功能,出了问题及时调整。 + +分享一些参考的提示词: + +![](https://pic.yupi.icu/1/1757567728565-5724de3e-7863-457b-9866-368c1535bd2c.png) + + + +------ + + + +以上就是本期分享,希望这个工具对大家有帮助,也不要忘记给鱼皮三连支持,谢谢大家~ + +![](https://pic.yupi.icu/1/1757829315038-73ef4fd7-7fef-4fa2-859d-11bb28381933.webp) + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/LangChain4j + 多智能体 - AI 零代码应用生成平台项目实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/LangChain4j + 多智能体 - AI 零代码应用生成平台项目实战.md new file mode 100644 index 0000000..9d65138 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/LangChain4j + 多智能体 - AI 零代码应用生成平台项目实战.md @@ -0,0 +1,179 @@ +# LangChain4j + 多智能体 - AI 零代码应用生成平台项目实战 + +本项目是一个企业级的 AI 零代码应用生成平台,对标大厂商业产品。用户输入需求,AI 自动生成完整的 Web 应用,支持可视化编辑和一键部署。 + +本项目采用人工编码 + Vibe Coding 结合的方式开发,通过写 Java 后端 + LangChain4j 代码集成 AI、使用 Cursor 等 AI 工具生成前端代码。重点在于学习企业 AI 应用开发、后端微服务架构、AI 智能体、AI 工作流、商业级产品的性能优化和监控体系。 + +适合有一定项目经验、想深入学习 AI 智能体开发、并且在简历上添加大型 AI 项目来提升竞争力的同学。 + +💡 项目难度较大,包含视频教程(几十小时)、文字教程(15 万字)、现成的简历写法和面试题解。完整学完预计花费 40 小时及以上,不建议没有后端编程基础的朋友学习。 + +项目代码免费开源:https://github.com/liyupi/yu-ai-code-mother + +项目文字 + 视频教程:https://www.codefather.cn/course/1948291549923344386 + +下文为项目的成品介绍和演示效果。 + + + +--- + + + +大家好,我是程序员鱼皮。又经过了一段时间的爆肝,我在编程导航的保姆级新项目教程 —— AI 零代码应用生成平台,完结啦! + +这是一套以 **AI 开发实战 + 后端架构设计** 为核心的项目教程,基于 Spring Boot 3 + LangChain4j + LangGraph4j + Vue 3 开发的 **对标大厂** 的 企业级 AI 代码生成平台,带大家掌握新时代程序员必知必会的 AI 智能体开发、AI 工作流等前沿技术,大幅提升求职竞争力! + +![](https://pic.yupi.icu/1/1753332293578-0ccc2a53-6d98-41a7-b714-16fa6a7f095f-20250814154720271.png) + +我带大家开发了多种模式的应用生成、可视化修改、AI 图片搜集、持久化对话记忆、一键部署等功能: + +> 查看视频演示: https://bilibili.com/video/BV17npxz5EZF + +![](https://pic.yupi.icu/1/1753332451827-220a1df9-ea60-4646-bea0-64e5f73d15fe-20250814154743041.png) + +除了全程直播讲解的、几十个小时的视频教程之外,我还写了整套文字教程(15 万字),妥妥一本书的量!可想而知我最近掉了多少头发。。。 + +![](https://pic.yupi.icu/1/image-20250917152551920.png) + +这还不够,每个项目我都写了详细的简历写法和面试题解,做完项目直接写到简历上、突击面试,一条龙服务! + +![](https://pic.yupi.icu/1/image-20250917152631431.png) + +真心换真心,我做项目教程的付出也得到了大家的认可,也帮很多同学拿到了 offer~ + +![](https://pic.yupi.icu/1/image-20250422160549546.png) + +接下来鱼皮给大家快速介绍这个项目,希望让更多需要它的同学看到,把它变成自己的项目。秋招正处于黄金时段,简历上写满前沿技术,不仅求职有底气,做项目的能力也会大幅提升! + +**🧧 后文有加入学习的方式,千万不要错过!** + + + +## 项目介绍 + +项目有 4 大核心能力。 + +1)智能代码生成:用户输入需求描述,AI 自动分析并选择合适的生成策略,通过工具调用生成代码文件,采用流式输出让用户实时看到 AI 的执行过程。 + +![](https://pic.yupi.icu/1/1753332332820-9ec614de-65a2-496d-b9b2-dc89c20d06c9.png) + + + +2)可视化编辑:生成的应用将实时展示,可以进入编辑模式,自由选择网页元素并且和 AI 对话来快速修改页面,直到满意为止。 + +![](https://pic.yupi.icu/1/1753332451827-220a1df9-ea60-4646-bea0-64e5f73d15fe.png) + + + +3)一键部署分享:可以将生成的应用一键部署到云端并自动截取封面图,获得可访问的地址进行分享,同时支持完整项目源码下载。 + +![](https://pic.yupi.icu/1/1753332366033-187b00b1-8609-42b1-ba80-cf58bdb0e970.png) + + + +4)企业级管理:提供用户管理、应用管理、系统监控、业务指标监控等后台功能,管理员可以设置精选应用、监控 AI 调用情况和系统性能。 + +![](https://pic.yupi.icu/1/1753281175326-d7ecfcb9-f034-4893-8e13-be0c5dcdacf6.png) + +![](https://pic.yupi.icu/1/1753333524767-c89b8d1b-bc57-4094-ace7-1b37876f3f0b.png) + + + +当你学会这个项目后,你不仅能开发 AI 代码生成器,更能灵活开发各种复杂的 AI 应用:AI 写作助手、AI 设计工具、AI 数据分析平台、AI PPT 制作大师,尽情发挥自己的想象力吧! + +学前沿技术、涨开发经验,从 0 到 1 的真实企业级项目设计开发,绝对让你收获满满! + +> 在线学习:https://codefather.cn/course/ainocode,可以 **免费试看** + +而且为了让更多同学参与学习,我特么直接把所有代码 **完整开源** !能力强的同学可以自学,点个 star 就算对鱼皮的支持啦~ + +> 开源仓库:https://github.com/liyupi/yu-ai-code-mother + +![](https://pic.yupi.icu/1/image-20250917153240294.png) + + + +## 项目收获 + +本项目紧跟 AI 时代、选题新颖、**对标大厂** 产品业务、技术丰富。区别于增删改查的烂大街项目,鱼皮会带你实战大量新技术和企业应用场景,掌握层层递进的系统设计、项目扩展和优化方案,帮你成为 AI 时代企业的香饽饽,给你的简历和求职大幅增加竞争力! + +微服务 AI 全栈项目,技术丰富,玩透 AI 应用开发~ + +![](https://pic.yupi.icu/1/1753272108623-c211ff4f-35ff-4f2c-bd5d-3a39a13d8f1c.png) + + + +业务场景真实,实践大量企业解决方案: + +![](https://pic.yupi.icu/1/1753290346736-47093142-ff4f-4b1d-8523-f6dea8de7e3c.png) + +鱼皮给大家讲的是 **通用的项目开发方法、企业级架构设计套路和最新的 AI 应用开发技术**,从这个项目中你可以学到: + +- 如何基于 LangChain4j 构建 AI 应用,实现真正的 AI 驱动业务? +- 如何基于 LangGraph4j 实现 AI 工作流,实现复杂的 AI 智能体? +- 如何设计 AI 工具调用机制,让 AI 智能生成复杂项目? +- 如何实现 AI 流式输出 + 响应式编程,提升并发性能? +- 如何使用 Spring Cloud Alibaba + Dubbo 实现微服务架构? +- 如何设计复杂的 AI 对话记忆机制,实现多租户的 AI 服务架构? +- 如何利用 AI Vibe Coding 和代码生成引擎,快速实现企业级系统? +- 如何结合 Redis + Caffeine 构建高性能多级 AI 服务缓存? +- 如何从性能、安全性、稳定性、成本等角度全方面优化项目? +- 如何巧用多种设计模式,打造可扩展的企业级架构? +- 如何构建企业级监控体系,实时掌握系统和 AI 服务的状态? +- 如何实现动态网站浏览、网站截图和部署服务? + +此外,还能学会很多 AI 编程、系统架构设计、技术方案对比的方法,提升排查问题、自主解决 Bug 的能力。鱼皮还给大家提供了大量的项目扩展点,有能力的同学可以进一步拉开和别人的区分度,无限进步! + +满满的项目正反馈: + +![](https://pic.yupi.icu/1/20240604145231908.png) + +除视频教程外,鱼皮编程导航的项目还提供: + +- 详细的直播笔记(本项目有全套文字教程) +- 完整的项目源码(分节的代码,更易学习) +- 答疑解惑和专属项目交流群 +- ⭐️ 现成的简历写法(直接写满简历) +- ⭐️ 项目的扩展思路(拉开和其他人的差距) +- ⭐️ 项目相关面试题、题解和真实面经(提前准备,面试不懵逼) +- ⭐️ 前端 + Java 后端万用项目模板(快速创建项目) + +本项目的功能模块: + +![](https://pic.yupi.icu/1/image%2520(1).png) + +本项目的架构设计: + +![](https://pic.yupi.icu/1/AI%25E5%25BA%2594%25E7%2594%25A8%25E7%2594%259F%25E6%2588%2590%25E5%25B9%25B3%25E5%258F%25B0%25E6%259E%25B6%25E6%259E%2584%25E5%259B%25BE.png) + +## 加入学习 + +比起看网上的教程学习,鱼皮项目系列的优势:从学知识 => 实践项目 => 复习笔记 => 项目答疑 => 简历写法 => 面试题解的一条龙服务 + +编程导航已有 **20 多套项目教程!** 每个项目的学习重点不同,几乎全都是前端 + 后端的 **全栈** 项目 。 + +![](https://pic.yupi.icu/1/image-20250917153702335.png) + +欢迎加入编程导航,不仅能学习往期 **所有** 原创项目,还能享受更多原创资料、1 对 1 学习和求职指导、几百场面试视频,开启你的编程起飞之旅~ + +![](https://pic.yupi.icu/1/image-20250120113756426.png) + +已经有 **几万名** 小伙伴学起来了,还有很多大家自发整理的笔记。不得不说,做项目真的给了很多同学坚持学习的目标、也有了更多拿 Offer 的机会,大家的动力也更足了!冲冲冲! + +![](https://pic.yupi.icu/1/offer%25E6%2588%25AA%25E5%259B%25BE.png) + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Spring AI - AI 超级智能体项目实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Spring AI - AI 超级智能体项目实战.md new file mode 100644 index 0000000..0579491 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Spring AI - AI 超级智能体项目实战.md @@ -0,0 +1,185 @@ +# Spring AI - AI 超级智能体项目实战 + +本项目是一个完整的 AI 超级智能体教程,带你开发 AI 恋爱大师应用和拥有自主规划能力的超级智能体。通过这个项目,你可以掌握新时代程序员必知必会的 AI 核心概念、AI 实用工具、AI 编程技术、AI 框架原理、AI 调优技巧。 + +本项目采用人工编码 + Vibe Coding 结合的方式开发,通过写 Java 后端 + Spring AI 代码集成 AI、使用 Cursor 等 AI 工具辅助编码。重点在于学习企业 AI 应用开发、AI 智能体的核心概念和实现原理、ReAct 模式、工具调用、MCP 等前沿技术。 + +适合有一定项目经验、想系统学习 AI 智能体开发、并且在简历上添加 AI 项目来提升竞争力的同学。 + +💡 项目难度较大,包含视频教程(几十小时)、文字教程(10 万多字)、现成的简历写法和面试题解。完整学完预计花费 20 小时及以上,不建议没有后端编程基础的朋友学习。 + +项目代码免费开源:https://github.com/liyupi/yu-ai-agent + +项目文字 + 视频教程:https://www.codefather.cn/course/aiagent + +下文为项目的成品介绍和演示效果。 + + + +--- + + + +大家好,我是程序员鱼皮。又经过了一段时间的爆肝,我在 [编程导航](https://mp.weixin.qq.com/s/I1oD6pAaWBvGLyFDT9AgvA?token=1925632390&lang=zh_CN) 的保姆级新项目教程 —— AI 超级智能体,完结啦! + +这是一套以 AI 开发实战为核心的项目教程,一套教程带大家掌握新时代程序员必知必会的 AI 核心概念、AI 实用工具、AI 编程技术、AI 框架原理、AI 调优技巧,大幅增加求职的竞争力! + +![](https://pic.yupi.icu/1/8052592c-97ce-4568-b82e-6153924a053c.png) + +除了全程直播讲解的、几十个小时的保姆级视频教程之外,我还写了整套文字教程(10 万多字),细致入微! + +![](https://pic.yupi.icu/1/image-20250529133214316.png) + +这还不够,每个项目我都写了详细的简历写法和面试题解,做完项目直接写到简历上、准备面试,一条龙服务! + +![](https://pic.yupi.icu/1/image-20250529133336580.png) + +真心换真心,我做项目教程的付出也得到了大家的认可,也帮很多同学拿到了 offer~ + +![](https://pic.yupi.icu/1/%E5%9B%BE7%20-%20%E7%9C%9F%E5%AE%9E%E8%AF%84%E4%BB%B7.png) + +接下来鱼皮给大家快速介绍这个项目,希望让更多需要它的同学看到,把它变成自己的项目。马上秋招提前批就要开始了,简历上写满前沿技术,不仅求职有底气,做项目的能力也会大幅提升! + +**🧧 后文有加入学习的方式,千万不要错过!** + + + +## 项目介绍 + +以 **AI 开发实战** 为核心的项目教程,将通过开发 **AI 恋爱大师应用 + 拥有自主规划能力的超级智能体**,带大家掌握新时代程序员必知必会的 AI 核心概念、AI 实用工具、AI 编程技术、AI 框架原理、AI 调优技巧,大幅增加求职的竞争力! + +`AI 恋爱大师应用` 可以依赖 AI 大模型解决用户的情感问题,支持多轮对话、基于自定义知识库进行问答、自主调用工具和 MCP 服务完成任务,比如调用地图服务获取附近地点并制定约会计划。 + +![](https://pic.yupi.icu/1/1745225631067-44a111e1-1032-4f1c-bd69-9f08a59a654b.png) + +此外,还会手把手带大家完成基于 ReAct 模式的 `自主规划智能体 YuManus` ,可以利用网页搜索、资源下载和 PDF 生成工具,帮用户制定完整的约会计划并生成文档: + +![](https://pic.yupi.icu/1/1745224663573-04af8f65-2da4-4ef9-8033-a179e703f9c4.png) + +当然,学会这个项目后,你不仅能开发 AI 恋爱大师,而是能真正掌握 AI 核心概念和开发技巧,灵活开发各种复杂的 AI 应用,尽情发挥自己的想象力吧! + +学前沿技术、涨开发经验,从 0 到 1 的真实企业级(商业级)项目设计开发,绝对让你收获满满! + +> 在线学习:https://www.codefather.cn/course/aiagent ,可以 **免费试看** + +而且为了让更多同学参与学习,我特么直接把所有代码 **完整开源** !能力强的同学可以自学,点个 star 就算对鱼皮的支持啦~ + +> 开源仓库:https://github.com/liyupi/yu-ai-agent + +![](https://pic.yupi.icu/1/image-20250529133739433.png) + + + +### 2、项目收获 + +本项目选题新颖、业务真实,区别于增删改查的 “烂大街” 项目,鱼皮会带你实战大量新技术和企业应用场景,用一套实战教程将程序员必知必会的 **AI 技术一网打尽**,帮你成为 AI 时代企业的香饽饽,给你的简历和求职大幅增加竞争力。 + +鱼皮给大家讲的都是 **通用的项目开发方法和架构设计套路**,从这个项目中你将学到: + +- 主流 AI 应用平台的使用 +- AI 大模型的 4 种接入方式 +- AI 开发框架(Spring AI + LangChain4j) +- AI 大模型本地部署 +- Prompt 工程和优化技巧 +- Spring AI 核心特性:如自定义 Advisor、对话记忆、结构化输出 +- RAG 知识库实战、原理和调优技巧 +- PgVector 向量数据库 + 云数据库服务 +- Tool Calling 工具调用实战及原理 +- MCP 模型上下文协议和服务开发 +- AI 智能体 Manus 原理和自主开发 +- AI 服务化和 Serverless 部署上线 +- 各种新概念:如多模态、智能体工作流、A2A 协议、大模型评估等 + +举个例子,RAG 核心特性实战及全链路调优: + +![](https://pic.yupi.icu/1/1746250760306-3b545556-59df-43a9-b843-b73ec9b5a867.png) + +项目还有其他优势: + +- AI 云平台和编程双端实战,不仅会用 AI 服务,还会自己写! +- 基于官方文档讲解最新的 AI 技术,细致入微,手撕文档和源码! +- 分享大量 AI 扩展知识和编程技巧,掌握最佳实践! + +鱼皮带你手撕开源框架 OpenManus 的源码: + +![](https://pic.yupi.icu/1/ae36dd94-e87e-4dfe-ae31-81a6cc32c9e8.png) + +哪怕上面提到的这些技术没学过,也没有问题。鱼皮原创项目系列以实战为主,**从 0 到 1** 带大家学习技术知识,并立即实践运用到项目中,做到学以致用。 + +从需求分析、技术选型、项目设计、项目初始化、Demo 编写、开发实现、项目优化、部署上线等,每个环节我都 **从理论到实践** 给大家讲的明明白白、每个细节都不放过! + +满满的项目正反馈: + +![](https://pic.yupi.icu/1/20240604145231908.png) + +除视频教程外,鱼皮编程导航的项目还提供: + +- 详细的直播笔记(本项目有全套文字教程) +- 完整的项目源码(分节的代码,更易学习) +- 答疑解惑和专属项目交流群 +- ⭐️ 现成的简历写法(直接写满简历) +- ⭐️ 项目的扩展思路(拉开和其他人的差距) +- ⭐️ 项目相关面试题、题解和真实面经(提前准备,面试不懵逼) +- ⭐️ 前端 + Java 后端万用项目模板(快速创建项目) + + + +### 技术选型 + +项目以 Spring AI 开发框架实战为核心,涉及到多种主流 AI 客户端和工具库的运用。 + +- Java 21 + Spring Boot 3 框架 +- ⭐️ Spring AI + LangChain4j +- ⭐️ RAG 知识库 +- ⭐️ PGvector 向量数据库 +- ⭐ Tool Calling 工具调用 +- ⭐️ MCP 模型上下文协议 +- ⭐️ ReAct Agent 智能体构建 +- ⭐️ Serverless 计算服务 +- ⭐️ AI 大模型开发平台百炼 +- ⭐️ Cursor AI 代码生成 +- ⭐️ SSE 异步推送 +- 第三方接口:如 SearchAPI / Pexels API +- Ollama 大模型部署 +- 工具库如:Kryo 高性能序列化 + Jsoup 网页抓取 + iText PDF 生成 + Knife4j 接口文档 + + + +### 架构设计图 + +![](https://pic.yupi.icu/1/AI%E6%99%BA%E8%83%BD%E4%BD%93%E6%9E%B6%E6%9E%84%E5%9B%BE.png) + + + + +## 加入学习 + +比起看网上的教程学习,鱼皮项目系列的优势:从学知识 => 实践项目 => 复习笔记 => 项目答疑 => 简历写法 => 面试题解的一条龙服务 + +编程导航已有 **20 多套项目教程!** 每个项目的学习重点不同,几乎全都是前端 + 后端的 **全栈** 项目 。 + +![](https://pic.yupi.icu/1/image-20250529134710424.png) + +欢迎加入 [编程导航](https://mp.weixin.qq.com/s/I1oD6pAaWBvGLyFDT9AgvA?token=1925632390&lang=zh_CN),不仅能学习往期 **所有** 原创项目,还能享受更多原创资料、学习和求职指导、几百场面试视频,开启你的编程起飞之旅~ + +![](https://pic.yupi.icu/1/image-20250120113756426.png) + +已经有几万名小伙伴学起来了,还有很多大家自发整理的笔记。不得不说,做项目真的给了很多同学坚持学习的目标、也有了更多拿 Offer 的机会,大家的动力也更足了!冲冲冲! + +![](https://pic.yupi.icu/1/image-20250417125909538.png) + +更多往期项目可以阅读 [这篇文章](https://mp.weixin.qq.com/s/9dpRTZijzeG0OuMgEyQhEg) 来了解,免费获取鱼皮的项目学习指南哦~ + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/TRAE - AI 学习英雄小程序实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/TRAE - AI 学习英雄小程序实战.md new file mode 100644 index 0000000..01351b3 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/TRAE - AI 学习英雄小程序实战.md @@ -0,0 +1,440 @@ +# TRAE - AI 学习英雄小程序实战 + +这是一个学习英雄微信小程序项目,通过游戏化的方式帮助用户学习任何主题。用户输入想学的主题,AI 自动生成相关的知识问答卡片,通过做选择题的方式学习。 + +这是一个纯 Vibe Coding 项目,主要讲解如何使用 TRAE AI 编程工具快速开发微信小程序。通过自然语言描述需求,让 AI 自动生成包含完整前端和后端的小程序代码、并且利用 TRAE 集成数据库和支付等服务。适合想学习 AI 开发小程序、学习 TRAE 工具的同学。 + + + +--- + + + +大家好,我是程序员鱼皮。朋友们有没有这样的经历:想学点新技术,打开文档就头疼,刷视频又容易走神,买了一堆课程却总是半途而废。。。 + +反正我是经常这样,学习焦虑症晚期患者了。 + +![](https://pic.yupi.icu/1/image-20250928214315214.png) + +作为一名程序员,我早就想做个程序来治好自己的学习焦虑症,却因为觉得麻烦一直拖延。直到现在 AI 编程能力足够强大,我才终于出手了!通过 TRAE 只用了 1 天就完成了这个《学习英雄》小程序,让学习像玩游戏一样轻松有趣~ + +![](https://pic.yupi.icu/1/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%BC%94%E7%A4%BA%E6%8B%BC%E5%9B%BE.png) + +下面我先带大家体验一下这个小程序,然后会分享整个开发过程中用到的工具和技巧,依然是 **AI 项目开发的保姆级教程**。 + +点个收藏,我们开始吧! + +> 推荐观看视频版:https://bilibili.com/video/BV1yMn3zuE7L + + + +## 项目体验 + +打开小程序,可以看到界面非常简洁、有活力。点击开始学习,然后输入你想学习的任何主题,比如 Java 基础。 + +![](https://pic.yupi.icu/1/image-20250928215038368.png) + +AI 会根据主题自动生成相关的知识问答卡片。 + +![](https://pic.yupi.icu/1/image-20250928215106136.png) + +然后你只需要点点点做选择题,不用担心做错,因为每道题目都会有解释,哪怕你之前完全没听说过这个主题,一样可以让你学下去。 + +![](https://pic.yupi.icu/1/image-20250928215137518.png) + +除了技术知识外,你还可以尝试更多主题,比如一个词汇、一部电影、甚至是一个人。 + +![](https://pic.yupi.icu/1/%E5%A4%9A%E7%AD%94%E9%A2%98%E6%8B%BC%E5%9B%BE.png) + +原本枯燥的概念通过问答的形式变得生动有趣,学习焦虑瞬间消失了~ + +你还可以查看自己的学习记录,重新学习或者查看题解。 + +![](https://pic.yupi.icu/1/%E5%AD%A6%E4%B9%A0%E5%8E%86%E5%8F%B2%E6%8B%BC%E5%9B%BE.png) + +没事儿刷一刷,你就能成为学习英雄! + + + +## 开发实现 + +如果是以前,这种小程序可能要做个好几天。 + +但现在利用 TRAE IDE 的 AI 编程,我要带大家 **不写一行代码**,把这个小程序做出来。 + +步骤: + +1. 准备开发工具 +2. 需求分析 +3. 方案设计 +4. 服务集成 +5. 后端开发 +6. 前端开发 +7. 测试验证 +8. 持续优化 + + + +### 1、准备开发工具 + +既然要用 AI 开发,工具选择很重要。这次我使用的 AI 编程工具是 [TRAE](https://www.trae.ai/),因为最近它的 SOLO 模式实在太火爆了,我也想试一试。 + +区别于传统的人类主导 + AI 辅助编程,所谓 SOLO 模式,是让 **AI 主导任务并自动执行开发**,你只需要有一个想法,然后配合 AI 就能让想法真正落地。 + +![](https://pic.yupi.icu/1/image-20250928220322788.png) + +此外,既然要开发前端项目,肯定少不了 [Node.js 环境](https://nodejs.org/zh-cn/download);既然要开发微信小程序,肯定少不了 [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html),直接去对应的官网下载安装就好。 + +![](https://pic.yupi.icu/1/%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7%E6%8B%BC%E5%9B%BE.png) + + + +### 2、需求分析 + +准备好工具后,进入 Trae 的 SOLO 模式,打开比我脸都干净的项目文件夹。 + +![](https://pic.yupi.icu/1/image-20250928220647365.png) + +首先我们要进行需求分析。 + +别想的太复杂,只需要把自己的想法用自然语言告诉 AI 就好。 + +比如我给 AI 提了这样的需求: + +```markdown +你是一位专业的程序员,请帮我开发《学习英雄 - AI 问答引导式学习》微信小程序。 + +用户可以自主设置一个想学习(或测验)的主题,由 AI 围绕主题生成若干个有趣的知识问答卡片,通过闯关答题的形式引导用户更轻松愉快地掌握知识。 +``` + +![](https://pic.yupi.icu/1/image-20250928221154635.png) + +AI 很快生成了详细的产品需求文档和技术架构文档,很符合企业规范的开发流程。 + +![](https://pic.yupi.icu/1/image-20250928221128338.png) + +看得出来 AI 已经有些迫不及待想写代码了,但是千万别急,一定要先 **仔细确认需求文档**。 + +AI 写的还是不错的,但不一定完全符合我们的预期。因此我们要人工重点关注要实现的核心功能,移除掉不需要的附加功能,先确保核心业务流程(P0 级需求)跑通。 + +![](https://pic.yupi.icu/1/image-20250928221334652.png) + +**不要嫌这一步麻烦,现在多花 1 分钟,以后节约 1 小时!** + +一定要明确需求,防止 AI 做了不该做的功能。 + +这里有个小技巧,可以利用 TRAE 集成的 Figma 设计工具,在这里获取到一些免费的产品 UI 原型图。 + +![](https://pic.yupi.icu/1/image-20250928221519374.png) + +可以点击查看某个原型具体的设计,只需要选中你看上的原型图,点击添加到对话,TRAE 就会自动把原型图关联到发给 AI 的对话中,这个跨产品之间的交互我觉得还是蛮帅的(不过跟我学做项目的同学应该知道实现原理嘿嘿)。 + +![](https://pic.yupi.icu/1/image-20250928221618668.png) + +不过生活需要惊喜,这里我就让 AI 自己发挥,看看会出现什么创意~ + + + +### 3、方案设计 + +下面我们要进行方案设计,这以前是月薪几万的架构师干的活,现在让小 AI 帮我们 SOLO。 + +编写这段 Prompt 时一定要注意几个细节,**遵循最小化开发原则**,防止 AI 把简单的事情搞复杂。 + +```markdown +我已经人工调整了产品需求文档,移除了很多不必要的功能。请你根据我人工修改过的需求,重新生成技术架构文档。要求: +1. 禁止增加需求文档中没有提到的功能 +2. 遵循最小化开发原则,以实现功能为主,禁止提供实现功能之外的扩展,比如部署、监控、限流等 +3. 遵循前后端分离原则 +``` + +很快 AI 生成了完整的技术架构文档,包括用什么前端和后端技术、接口怎么设计、数据表怎么设计等等。 + +![](https://pic.yupi.icu/1/image-20250928221924096.png) + +这里我建议能看懂文档的同学还是多发挥一些专业性,明确具体的技术选型,让 AI 生成的代码在自己的可控范围内。比如我明确项目使用 Supabase 数据库、使用 OpenRouter 对接 Gemini 大模型提供 AI 服务。 + +![](https://pic.yupi.icu/1/image-20250928221952548.png) + +啥啥啥?这些都是啥? + +别担心,等会儿就会讲。 + +![](https://pic.yupi.icu/1/image-20250928222144713.png) + +看不懂文档的同学也不用担心,你就把自己想象成老板或者产品经理,程序员同事吭哧吭哧拿了份技术方案给你,你就说 “怎么实现我不管,这个需求明天上线!” 让他放手干就完了。 + +你要相信 AI,相信相信的力量~ + + + +### 4、服务集成 + +完成了方案设计,在正式进入开发前,我们还要准备项目依赖的服务。 + +把用户数据存储在哪里?怎么让程序对接 AI 大模型? + +这都是我们要解决的问题。 + +相比于自己手动安装服务,可以直接使用 TRAE 提供的集成能力,不用专门去看官方文档对接服务,直接傻瓜式安装。 + +我们重点集成 2 个服务。 + +![](https://pic.yupi.icu/1/image-20250928222329915.png) + + + +#### 集成 Supabase + +[Supabase](https://supabase.com/) 是开源的后端即服务(BaaS)平台,提供数据库存储、用户身份验证、即时 API 等功能,可以帮助开发者快速构建和管理程序后端。 + +![](https://pic.yupi.icu/1/image-20250928222457606.png) + +点击连接按钮,在弹出的页面中完成创建 Supabase 账号、创建组织、以及认证授权。 + +![](https://pic.yupi.icu/1/image-20250928222520491.png) + +然后进入到 TRAE,看到组织成功显示后,点击创建一个新项目,填写一些项目配置信息,然后点击创建。 + +![](https://pic.yupi.icu/1/image-20250928222545479.png) + +创建项目后回到 TRAE 刷新一下,点击连接就可以了,就这么简单~ + +![](https://pic.yupi.icu/1/image-20250928222608471.png) + +如果说之前 AI Vibe Coding 让后端开发者爽翻了,那这波可以说是前端开发者赢麻了,简单的项目都不用自己搭建后端了~ + + + +#### 集成 OpenRouter AI 服务 + +TRAE 能够和多种 AI 服务集成,这里我选择 [OpenRouter](https://openrouter.ai/),它的优点是可以通过统一的 API 对接各家大模型,比如 Gemini、GPT、Claude 等等。 + +![](https://pic.yupi.icu/1/image-20250928222649319.png) + +首先到官网注册登录账号,然后进入 API Keys 页面创建一个调用 AI 的密钥,然后在 TRAE 中配置并填写密钥,AI 服务就已经集成完毕了。 + +![](https://pic.yupi.icu/1/image-20250928222833273.png) + +但是注意,要确保你有足够的用量,否则可能调用失败,或者报错调用频率太频繁。 + +![](https://pic.yupi.icu/1/image-20250928222853247.png) + + + +#### 集成 Stripe 支付服务 + +此外,你还可以集成 [Stripe 支付服务](https://docs.stripe.com/),它可以让你用最少的代码给产品添加支付和订阅功能。 + +![](https://pic.yupi.icu/1/image-20250928223013523.png) + +只需要先到官网注册账号,它会自动给你提供一个沙盒测试环境、以及对应的 API 密钥,你可以创建自己的产品并设置定价。 + +![](https://pic.yupi.icu/1/image-20250928223151134.png) + +然后把这些信息填写到 TRAE 配置中,之后 AI 编程时就会生成支付相关的代码了。 + +![](https://pic.yupi.icu/1/image-20250928223346093.png) + +但是由于微信小程序有一些限制,这里我就先不接入了,大家了解一下就好,网页端和 APP 产品接入还是很香的。 + + + +### 5、后端开发 + +准备工作完成后,我们终于要进入紧张刺激的开发环节了。 + +这里要注意,由于 **AI 的上下文是有限的**,为了能更好地生成完整项目、减少 Bug,建议分个步骤:先生成后端代码,人工校验通过后,再生成前端代码。 + +好,给 AI 输入提示词,先开发后端,确保项目可以正常运行: + +```markdown +请你基于最新的产品需求文档和技术架构文档进行开发,优先开发后端,确保项目可以正常运行 +``` + +我们可以使用 TRAE 提供的 Prompt 优化功能来一键优化提示词。 + +![](https://pic.yupi.icu/1/%E4%BC%98%E5%8C%96%E6%8F%90%E7%A4%BA%E8%AF%8D.png) + +嗯,确实比之前更严谨了。 + +点击执行,请开始你的 SOLO~ AI 会先给出任务计划: + +![](https://pic.yupi.icu/1/image-20250928224232897.png) + +然后自主操作终端执行命令、编写后端配置文件和业务逻辑代码、编写数据库建表语句等等,重要操作还会找我们主动确认,非常严谨。 + +![](https://pic.yupi.icu/1/image-20250928224300188.png) + +看不懂也没关系,让他放手干吧~ + +等待期间,你可以到编程导航上看看 [免费的编程学习路线](https://codefather.cn/)。TRAE 自带消息通知功能,AI 完成任务后会提醒我们。 + +我感觉 TRAE 调教 AI 还是有一套的,他会自己验证程序是否正常。不过由于我们还没有填写微信登录所需的信息,接口无法完整调用是正常的。 + +![](https://pic.yupi.icu/1/image-20250928224350332.png) + +一段时间后,AI 生成完毕,不仅生成了代码,还很贴心地生成了后端的接口文档。 + +![](https://pic.yupi.icu/1/image-20250928224437599.png) + +哎,这个东西很有用哦。 + + + +### 6、前端开发 + +下面进行前端开发。 + +这里一定要注意,不要接着之前的对话继续写提示词了。 + +为什么呢? + +因为 AI 大模型的上下文是有限的,前面的操作已经消耗了不少上下文,为了防止 AI 上下文不足或者记忆混乱,我们生成前端时,重新开一个干净的对话来编写提示词。 + +![](https://pic.yupi.icu/1/image-20250928224735250.png) + +提示词中提供给 AI 产品需求文档、技术架构文档和后端接口文档,就可以让 AI 专注于前端代码生成。 + +```markdown +你是一位专业的程序员,请帮我开发《学习英雄 - AI 问答引导式学习》微信小程序。 + +用户可以自主设置一个想学习(或测验)的主题,由 AI 围绕主题生成若干个有趣的知识问答卡片,通过闯关答题的形式引导用户更轻松愉快地掌握知识。 + +请你根据 @产品需求文档 @技术架构文档 @后端接口文档,帮我生成完整可运行的微信小程序前端代码。 +注意: +1. 遵循最小功能原则,不要额外开发需求文档没提到的任何功能 +2. 如果需要显示图片,请使用占位图片 picsum.photos 代替(比如 picsum.photos/200/300) +``` + +好,执行! + +等待期间,你可以到 [面试鸭](https://www.mianshiya.com/) 上看看免费的面试题和刷题路线。 + +一段时间后,AI 生成完毕,一次性 SOLO 出了 20 多个文件! + +![](https://pic.yupi.icu/1/image-20250928224830751.png) + +虽然看着很爽,但老实说我是有点慌的,不知道能不能正常运行。 + + + +### 7、测试验证 + +下面我们来到了激动人心的测试验证环节。 + +首先需要打开微信开发者工具,导入已有项目文件夹,先选择使用测试号开发调试项目。 + +![](https://pic.yupi.icu/1/image-20250928225118198.png) + +打开项目后,我们先点击右上角的 “测试号”,按照 [文档](https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.html) 的指引获取到测试号的 AppID 和 AppSecret 密钥: + +![](https://pic.yupi.icu/1/image-20250928225220066.png) + +然后手动填入到后端配置文件中,否则将无法正常微信登录。 + +![](https://pic.yupi.icu/1/image-20250928225304614.png) + +然后我们就可以编译运行项目了。 + +结果,果然报错了! + +![](https://pic.yupi.icu/1/image-20250928225522618.png) + +意料之中,意料之中。。。小程序开发比网页开发还是更难一些的,毕竟微信开发者工具和文档一直在更新。 + +![](https://pic.yupi.icu/1/image-20250928225618743.png) + +不过没关系,开发过程中难免遇到问题,解决方法很简单,一句话:**报什么错误,就把报错信息发给 AI,让 AI 来修复!** + +像我这里遇到了几个典型的问题: + +1)图片路径问题:利用 TRAE 的提示词优化功能,能更好地指引 AI 按照指定的步骤修复 Bug + +![](https://pic.yupi.icu/1/image-20250928225717687.png) + +2)登录失败问题:点击开发者工具右上角的 “详情”,进入到本地设置中,勾选 “不校验合法域名” + +![](https://pic.yupi.icu/1/image-20250928225825654.png) + +3)接口路径问题:这可能是由于上下文过长导致的,让 AI 整体修复前端调用后端接口的路径和参数就好 + +![](https://pic.yupi.icu/1/image-20250928225903118.png) + +4)环境配置问题:代码中读取的环境变量名称和配置文件中的不一致,这个问题比较简单,我们可以手动修改。 + +当我敲了一个字符后,编辑器会自动提示我要修改哪些代码,还支持跨行修改。 + +![](https://pic.yupi.icu/1/image-20250928225955681.png) + +这是 TRAE 提供的 CUE 功能,不仅可以帮你自动补全代码、还可以多行修改代码、自动预测未来可能的修改点,尤其适合重构代码的场景,效率起飞。 + +![](https://pic.yupi.icu/1/%E5%A4%9A%E8%A1%8C%E4%BF%AE%E6%94%B9.gif) + +经过一段时间的修复,我们的小程序已经可以正常运行了。虽然现在页面丑丑的,但只要跑通了核心业务流程,用户能正常使用,后续的优化都很简单了。 + +![](https://pic.yupi.icu/1/image-20250928230045861.png) + + + +### 8、持续优化 + +最后,如果你要把小程序上线,还是要花一些时间来优化的。 + +记住,优化前先把现有代码利用 Git 版本控制工具进行托管,并且提交一个基础版本,这样之后优化出了任何问题,都可以一键回滚到老版本。 + +![](https://pic.yupi.icu/1/image-20250928230154447.png) + +像我重点让 AI 帮忙优化了整个小程序的样式风格,只要写一段简单的提示词: + +```markdown +你是一位程序员,请你帮我优化整个小程序中每个前端页面和元素的样式风格,使各个页面保持一致。 + +参考风格:主色调采用活力橙色,清新治愈的卡通风格、简约雅致、让人感到放松愉快。 +``` + +然后利用 TRAE 的提示词优化功能,就能得到一个更详细的优化方案。 + +![](https://pic.yupi.icu/1/image-20250928230225960.png) + +你可以按需调整,也可以让 AI 放手干。 + +建议大家每进行一次优化或新增一个功能,都提交一次代码,并且适当地新开 AI 对话框,防止上下文过多影响生成的准确度。 + +最终,你看到的这个小程序,就是我优化后的成品啦,效果还不错吧~ + +![](https://pic.yupi.icu/1/image-20250928230316272.png) + +但由于卡在认证备案的流程上了(已经在备案中了),要过段时间大家才能体验到小程序啦。 + +![](https://pic.yupi.icu/1/%E5%A4%87%E6%A1%88.png) + + + +## 总结 + +最后聊聊我使用 TRAE SOLO 开发项目的感受吧。 + +首先我感受到了 AI 编程工具的进化,SOLO 从 **将 AI 集成到工具中,进化为将开发工具集成到 AI 中**。 + +![](https://pic.yupi.icu/1/image-20250928220158367.png) + +感觉开发工具只是 AI 的一个玩物,他可以自由地操作编辑器、终端、浏览器、文档、集成服务等等来自主完成任务,确实比以前更高效智能了,也能完成包含后端的完整项目。而且 AI 会遵循企业标准的开发流程,自动修复大部分问题、检查项目能否运行,不像以前很多时候生成的代码是运行不了的。 + +但是开发过程中大家要注意,现在 **AI 很喜欢把简单的事情搞复杂**,所以最好人工仔细确认需求文档和方案文档,并且像搭积木一样,一步一步地完成开发。 + +后面我也会给大家分享更多 AI 编程的技巧,毕竟 AI 是个工具,只有用对了,才能发挥他最大价值。 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Vercel AI 网关 - AI 减压小能手项目实战.md b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Vercel AI 网关 - AI 减压小能手项目实战.md new file mode 100644 index 0000000..5e69ad7 --- /dev/null +++ b/Vibe Coding 零基础教程/20 项目实战/鱼皮的原创项目/Vercel AI 网关 - AI 减压小能手项目实战.md @@ -0,0 +1,292 @@ +# Vercel AI 网关 - AI 减压小能手项目实战 + +这篇文章的重点不在于开发,而在于学习 AI 网关的概念和使用方法。通过漫画式的讲解和 Vibe Coding 项目实战,你可以了解如何通过 Vercel AI Gateway 在 AI 应用中灵活切换不同的模型,降低开发成本和维护难度。适合想学习 AI 网关技术、需要快速对接多个 AI 模型的同学。 + + + +--- + + + +你是小阿巴,刚入职的 AI 应用开发工程师。 + +![](https://pic.yupi.icu/1/1761152281564-61073333-da43-4ac2-b6ca-09460e87331a.png) + +屑老板说:公司最近要做一个智能客服系统,小阿巴,你是新人,所以这个重任就交给你了!故天将降大任于新人也~ + +![](https://pic.yupi.icu/1/1761645372915-7d9df0cf-f44a-4643-8d67-3e7103fb03db.png) + +你一听,心想:不就是调个 API 的事儿嘛,有啥难的? + +于是你撸起袖子就开始写代码,先接入了 OpenAI 的 GPT 模型。 + +刚刚搞定,屑老板说:还要加上 Claude 模型,听说它在某些场景下表现更好。 + +于是你又写了一堆调用 Claude 模型的代码。 + +结果刚写完,屑老板又说:嗯,听过国产的通义千问也不错,也一起接入吧! + +![](https://pic.yupi.icu/1/1761645406716-99acb82f-2f1f-4a62-a3c6-076ac17b1e6d.png) + +你皱了皱眉,心想:又得写调用这个模型的代码了,老板你是不是有点过分了。。。 + +屑老板仿佛听到了你的心声: + +- 哦,对了,调用 AI 是有成本的,得做好用户鉴权 +- 哦哦,为了防止恶意用户疯狂调用 AI,还得做好限流控制 +- 哦哦哦,AI 生成的内容可能有问题,还得校验内容安全 +- 哦哦哦哦!还要保证系统稳定,不能因为某个模型挂了就导致整个服务都不能用 +- 哦哦哦哦哦!!咱这个项目肯定能火,还得考虑 AI 怎么抗住大量请求 +- 哦哦哦哦哦哦!!!还得能让咱们观察到 AI 的调用次数和成本,好降本增效啊 +- 哦哦哦哦哦哦哦。。。 + +你看着渐渐发狂的老板,开始怀疑人生:调个 AI 接口怎么这么复杂? + +![](https://pic.yupi.icu/1/1761645432489-6e2f67db-40f5-40fe-a6f0-c18ead6e6d8a.png) + + + +⭐️ 本文对应视频版:[https://bilibili.com/video/BV14NyrBTEeB](https://www.bilibili.com/video/BV14NyrBTEeB) + + + +## 什么是 AI 网关? + +这时,号称 “AI 小王子” 的鱼皮走了过来,看到你愁眉苦脸的样子,笑道:怎么,这很难么? + +你有些不爽:你这是站着说话不腰疼,这么多要求,不得写一大坨代码? + +鱼皮:老板说的这些场景,都可以通过 **AI 网关** 解决呀~ + +你疑惑地问:网关?那是啥? + +鱼皮:网关就像是火车站的检票口,所有乘客都要先经过检票口,检票员会检查你的车票,然后指引你去正确的站台。 + +![](https://pic.yupi.icu/1/1761645506547-26d820e6-cda3-482e-a7e9-dcadcbbb0445.png) + +在系统架构中,前端用户发来的请求要先经过网关,网关会统一处理用户认证、拦截恶意请求、控制流量、监控统计请求等等,然后把请求转发到后端服务器进行处理。 + +![](https://pic.yupi.icu/1/1761645542774-a2da29dc-3d2c-4e1b-adcf-dc5dd59d0881.png) + +你点了点头:哇哦,这样一来,如果我后端有多个服务,不用给每个服务单独写这些功能了。 + +鱼皮:没错,而且如果一个后端服务挂了,网关还可以自动将请求转发到其他服务。 + +![](https://pic.yupi.icu/1/1761645571947-8cb4a141-7d6f-4add-a82b-7a70716f23e7.png) + +你有些好奇了:那你刚刚提到的 AI 网关又是什么? + +鱼皮:传统的 API 网关通常放在你的应用和各种后端服务之间;而 AI 网关是专门为 AI 应用设计的,放在你的应用和各种 AI 模型服务之间(比如 OpenAI、通义千问、DeepSeek 等等)。 + +![](https://pic.yupi.icu/1/1761645615469-787296d8-1fb6-4452-b406-c79ef537f193.png) + +你的应用只需要发送 **标准请求** 给 AI 网关,它就会自动帮你完成用户鉴权、限流控制、安全防护、故障转移、负载均衡、监控统计等一系列复杂的操作,并且将请求转发给 AI 大模型进行处理。 + +![](https://pic.yupi.icu/1/1761645642401-683e786e-3e06-420a-abce-cd43f7bfa901.png) + +如果你要对接不同的大模型,只需要修改标准请求中的大模型名称,AI 网关就会帮你完成路由,不用针对每种模型写一套对接的代码啦~ + +![](https://pic.yupi.icu/1/1761645657980-b463d0b2-eecd-4635-99ee-fed9f121bf4e.png) + +你欢呼雀跃:这也太强了,有了 AI 网关,老板提到的所有问题都能解决了!那现在有哪些 AI 网关产品可以用呢? + +![](https://pic.yupi.icu/1/1761645679096-3ceb73df-a858-4410-abc1-041222b497f4.png) + + + +## AI 网关选型 + +很多 AI 玩家第一个接触到的 AI 网关可能是 [OpenRouter](https://openrouter.ai/),它更像是一个 AI 模型的聚合平台,支持通过统一的接口对接几百种模型。 + +![](https://pic.yupi.icu/1/1761645719834-eadcde16-711c-474c-9838-5ea5f01be452.png) + +很多 AI 工具都支持配置 OpenRouter,对于普通的 AI 使用者来说,可以通过它使用到更多的大模型、更稳定的服务。 + +![](https://pic.yupi.icu/1/1761645743475-53493cb1-5be9-4b0b-8b9a-a497ac13d7c7.png) + + + +你问到:那还有专门面向开发者的 AI 网关产品吗? + +鱼皮点点头:当然,现在市面上已经有不少成熟的 AI 网关产品了。比如你上网一搜,排名靠前的是下面几个: + +1)[Vercel AI Gateway](https://vercel.com/ai-gateway):这是最近很火的一个新产品,最大的特点是上手容易,而且 **零加价**,如果你使用自己的 API Key,网关本身不收额外费用。适合前端开发者快速搭建全栈 AI 应用。 + +2)[Cloudflare AI Gateway](https://www.cloudflare.com/zh-cn/developer-platform/products/ai-gateway/):Cloudflare 作为全球最大的 CDN 服务商之一,它的 AI Gateway 主要优势是全球节点覆盖广,安全防护能力强。 + +3)[Kong AI Gateway](https://konghq.com/products/kong-ai-gateway):Kong 本身就是一个很成熟的 API 网关,现在专门为 AI 场景做了增强,企业级功能比较完善。 + +![](https://pic.yupi.icu/1/image-20251018111819481.png) + +4)[Higress AI](https://higress.ai/):阿里云开源的 AI 网关,支持 100 多种大模型的统一协议转换,提供语义缓存、令牌限流、MCP 转换等企业级功能,适合有复杂 AI 集成需求的企业。 + +![](https://pic.yupi.icu/1/image-20251019163817976-20251028181254777.png) + + + +你挠了挠头:看起来也太复杂了吧,我应该怎么上手 AI 网关呢? + +鱼皮:别担心,我们可以从相对简单的 Vercel AI Gateway 开始学习。光说不练假把式,给我 2 分钟,带你实战掌握 Vercel AI Gateway 的用法~ + + + +## Vercel AI Gateway 实战 + +#### 1、注册并获取 API Key + +首先打开 [Vercel 官网](https://vercel.com/) 注册账号,绑定银行卡可以免费获得 5 美元的使用额度,对于学习测试来说够用了。 + +![](https://pic.yupi.icu/1/1760687990497-90720fbb-0df6-4ede-87b8-64b8702994e9-20251028181254840.png) + + + +然后在控制台创建 API Key,注意不要泄露哦: + +![](https://pic.yupi.icu/1/1760688078133-7b91b6f3-2fc4-4bb4-b2c1-d517699f0968-20251028181254879.png) + + + +#### 2、官方 Demo + +接下来,你可以通过官方提供的快速开始教程来创建项目并跑通 AI 对话的 Demo: + +![](https://pic.yupi.icu/1/image-20251019160232722.png) + + + +简单来说就 4 个步骤: + +1. 创建新项目 +2. 安装 AI SDK 和 AI Gateway 的依赖包 +3. 配置环境变量,填入 API Key 配置信息 +4. 编写示例 Demo 代码 + + + +#### 3、减压小能手项目 + +但是官方提供的 Demo 有点过于简单了,我们不妨利用 AI 来做一个《减压小能手》网站项目吧,让用户可以和专门帮人减压的 AI 聊天。 + +这里我选用的 AI 开发工具是 Cursor,直接让 AI 帮我生成符合要求的完整前端 + 后端代码。 + +![](https://pic.yupi.icu/1/1761645829262-bd9950ef-6334-410f-ab27-140873cb56a4.png) + +由于 Vercel AI Gateway 是比较新的玩意,AI 可能不理解它的用法,所以我直接把 Vercel AI Gateway 的官方文档扔给 Cursor,让他通过文档来学习用法。 + +![](https://pic.yupi.icu/1/1761645854330-54b6ab38-7f1f-45a5-ac34-463ee63477a7.png) + + + +完整提示词如下: + +```markdown +你是一位专业的程序员,请帮我开发《减压小能手》网站,用户可以通过和专门帮人减压的 AI 聊天来缓解压力。 + +## 开发要求 + +1. 需要包含完整的前端和后端,后端使用 Node.js +2. 使用 Vercel 的 AI Gateway 实现 AI 能力,需要先通过官方文档来获取尽可能多的用法:https://vercel.com/docs/ai-gateway/getting-started +3. 以完成核心功能为目标,确保项目可以正常运行,不用输出文档、也不要做任何多余的功能 +4. 整体网站界面采用让人放松的浅色,响应式适配各种尺寸的设备 +``` + + + +点击执行后,AI 会先调用 MCP 工具从网页中获取到信息,这里我用的是 `Firecrawl MCP`: + +![](https://pic.yupi.icu/1/1760690503357-7412db47-4389-49e2-b42c-dc6eabdc283b-20251028181255024.png) + + + +大概 6 分钟左右,AI 完成了全部代码的生成。可惜这里 AI 不是很听话,还是给我生成了一堆文档,比生成代码本身的时间都多! + +![](https://pic.yupi.icu/1/image-20251019161322770.png) + + + +然后在根目录下创建 `.env` 环境变量配置文件,填入 AI Gateway 的 API Key: + +![](https://pic.yupi.icu/1/1760689844332-79459841-46e3-4356-9fe7-76062a90464c-20251028181255097.png) + + + +最后,安装依赖并执行启动脚本: + +![](https://pic.yupi.icu/1/1760690024471-f89bf1e3-3d9e-4857-8a68-a236ffa0af14-20251028181255125.png) + + + +访问 `localhost:3000` 就能看到项目啦: + +![](https://pic.yupi.icu/1/1760690223277-56f89c2a-b4c5-43d6-a61d-3f744bcd9aef-20251028181255161.png) + + + +有一说一,效果可真不错,又给了我一点点动力再多写几个字哈哈: + +![](https://pic.yupi.icu/1/1760690245830-e877986b-1bb6-4c6a-96ad-92b738a57fed-20251028181255188.png) + + + +你感叹道:有了 AI + AI 网关这套组合拳,开发 AI 项目也太快了吧! + +鱼皮点点头:没错,而且整个过程中我们不用担心某个模型挂掉,网关会自动处理这些问题。 + +![](https://pic.yupi.icu/1/1761645903883-94c22619-2cac-41a4-87c3-d51ec96586e0.png) + + + +#### 4、更多特性 + +不仅如此,Vercel AI Gateway 支持非常多的国内外大模型,不同模型的计费标准都不一样: + +![](https://pic.yupi.icu/1/image-20251019165234650.png) + + + +你还可以配置自己的模型 API Key: + +![](https://pic.yupi.icu/1/image-20251019162655475.png) + + + +此外,还提供了 **可观测性** 等企业级功能,帮你了解 AI 的调用情况和成本分析: + +![](https://pic.yupi.icu/1/1760691345180-9ce7ec43-c651-4c19-a918-90b87034b7fe-20251028181255384.png) + + + +你双眼放光:哇塞,那我以后开发 AI 项目就用它了! + +鱼皮无奈地摇了摇头:小阿巴,你要记住 “没有银弹”。 + +如果你的个人项目只需要简单地调用单个 AI 模型,直接调用 API 就够了;如果你个人或团队的小项目需要用到 AI 网关的特性(比如集成多个模型),那么可以选用 Vercel AI Gateway;而如果你要开发企业级应用,对安全性和稳定性要求很高,选用 Higress 或者 Kong 这种更专业的网关更合适,能帮你少写亿点点屎山代码 💩! + +![](https://pic.yupi.icu/1/1761645922466-4284b8ac-7928-424e-a0eb-09629e7e66a1.png) + + + +## 结局 + +几个月后,你用 AI 网关重构了公司的智能客服系统,效果非常好。 + +你感慨道:这就是站在巨人的肩膀上啊,果然不要重复造轮子,懒人推动世界进步! + +![](https://pic.yupi.icu/1/1761645939970-276a3391-2f40-4b85-8d23-d36c5a491f8c.jpeg) + +鱼皮娇嗔:所以这就是你懒得给我点赞的理由??? + +![](https://pic.yupi.icu/1/1761646182922-0edead80-b8e9-4b8f-a90d-e35fa8712f3b.png) + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/00 Vibe Coding 经验技巧总览.md b/Vibe Coding 零基础教程/30 经验技巧/00 Vibe Coding 经验技巧总览.md new file mode 100644 index 0000000..d1dcb14 --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/00 Vibe Coding 经验技巧总览.md @@ -0,0 +1,126 @@ +# Vibe Coding 经验技巧总览 + +> 提升 AI 开发效率和质量的关键技能 + + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +如果你已经完成了【基础必读】的学习,并且动手做出了自己的第一个项目,那么恭喜你 —— 你已经迈入了 Vibe Coding 的大门。 + +但你可能会发现,虽然能用 AI 做出东西了,但总感觉有些地方不够顺畅。比如 AI 有时候会 "罢工",生成的代码质量参差不齐,或者项目做到一半就变得混乱不堪。这些都是很正常的现象,因为从 "能做" 到 "做好",中间还有一段进阶的路要走。 + +这个板块就是为了帮你走好这段路而准备的。我会分享一些实用的经验技巧,让你在 Vibe Coding 的道路上走得更快、更稳。 + + + +## 一、这个板块是什么? + +这个板块主要讲的是如何提升你的 Vibe Coding 水平。 + +你可能会问:我已经能用 AI 做东西了,为什么还要学这些? + +其实,Vibe Coding 和传统编程一样,都有初级、中级和高级之分。初级水平可以做出能用的东西,但中高级水平能做出 **好用** 的东西。这个 "好用" 体现在: + +- 开发效率更高,不会被 AI 的小问题卡住 +- 代码质量更好,项目更容易维护和扩展 +- 能处理更复杂的需求,不只是做简单的 Demo +- 知道如何避坑,少走弯路 + +这个板块就是帮你从初级迈向中高级的桥梁。 + + + +## 二、学了有什么用? + +很多同学在学完基础内容后,会遇到这样的困惑: + +- 我能做出东西了,但总感觉不够专业 +- AI 生成的代码有时候很乱,我不知道怎么改 +- 项目做到一半就乱套了,不知道该怎么继续 + +如果你也有这些困扰,那这个板块就是为你准备的。学完之后,你将成为 Vibe Coding 的六边形战士! + +1. 效率提升:你能更快地完成项目,不会被小问题卡住太久。 + +2. 质量提升:你做出的东西更稳定、更易维护,不再是 "一次性玩具"。 + +3. 能力提升:你能处理更复杂的需求,从做 Demo 进阶到做产品。 + +4. 心态提升:你会更有信心,知道遇到问题该怎么解决。 + +这些技能不仅适用于 Vibe Coding,对你理解软件开发的本质也很有帮助。 + + + +## 三、这个板块包括哪些内容? + +这个板块涵盖了 Vibe Coding 从入门到精通的各个方面,内容按主题分为四大类: + +1)思维基础:建立正确的开发理念 +- 五大核心心法 + +2)核心技能:掌握 AI 开发的关键能力 + +- 对话工程技巧 +- 上下文管理技巧 +- 幻觉和死循环处理 +- 效率提升技巧 + +质量保障:确保项目的质量和性能 +- 代码质量保障 +- 代码重构技巧 +- 性能优化技巧 +- 安全防护技巧 + +实战进阶:应对实际开发中的问题 +- 成本控制技巧 +- 团队协作技巧 + +这些内容都是零基础友好的,即使你不懂编程,也能理解和应用。建议按顺序学习,也可以根据遇到的具体问题,直接查阅对应的文章。 + +💡 这个板块会持续更新,未来可能会增加更多实用的技巧和经验分享。[建议收藏本页](https://ai.codefather.cn/),随时回来查看最新内容。 + + + +## 四、如何学习这个板块? + +根据你的情况,可以选择不同的学习路径: + +零基础新手: +- 建议按顺序学习,从思维基础开始,逐步掌握核心技能 +- 每学完一个主题,亲自 Vibe Coding 实践一下 +- 遇到具体问题时,可以直接查阅对应的文章 + +有编程基础的同学: +- 可以快速过一遍思维基础和核心技能 +- 重点学习质量保障和实战进阶部分 +- 根据工作需要深入学习特定主题 + +时间紧张的朋友: +- 先学习:五大核心心法、对话工程技巧 +- 其他内容遇到问题时再查阅 +- 把这个板块当作工具书使用 + + + +--- + + + +这些内容是很多 Vibe Coding 大神和本人在实践中总结出来的,希望能帮你少走弯路,更快地掌握 Vibe Coding,加油! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/01 Vibe Coding 五大核心心法.md b/Vibe Coding 零基础教程/30 经验技巧/01 Vibe Coding 五大核心心法.md new file mode 100644 index 0000000..b561a23 --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/01 Vibe Coding 五大核心心法.md @@ -0,0 +1,454 @@ +# Vibe Coding 五大核心心法 + +> 五个最重要的思维方式,让你从入门到精通 + + + +你好,我是鱼皮。 + +如果你已经用 AI 做出了几个小项目,可能会发现一个有趣的现象:有时候 AI 特别听话,一次就能做对;但有时候它又特别倔强,怎么说都做不好。 + +这是为什么呢? + +其实,Vibe Coding 和传统编程一样,都有自己的 "心法"。这些心法不是什么玄学,而是一些经过无数人验证的思维方式和工作原则。掌握了这些心法,你就能让 AI 更好地理解你的意图,做出更高质量的东西。 + +今天我要分享的,就是 Vibe Coding 中最重要的 5 个核心心法。这些心法来自我自己的实践经验,也参考了很多社区高手的总结。学会它们,你的 Vibe Coding 水平会有质的飞跃。 + +![](https://pic.yupi.icu/1/waytovibecoding%E5%A4%A7.jpeg) + + + + +## 心法一、Planning is Everything + +这是 Vibe Coding 中最重要的一条心法,没有之一。 + +很多同学在用 AI 的时候,上来就说:“帮我做一个记账应用。” + +然后就期待 AI 能直接给出完美的结果。 + +但往往事与愿违,AI 做出来的东西要么不符合预期,要么半途而废。 + +为什么会这样? + +因为你没有做好规划。 + +在 2025 年的 Vibe Coding 实践中,有一个被反复验证的结论:**花在规划上的 5 分钟,能省下你在返工上的 30 分钟。** + + + +### 规划比代码更重要 + +传统编程里有句话:“磨刀不误砍柴工”。 + +在 Vibe Coding 里,这句话更加重要。因为 AI 虽然写代码很快,但它不会帮你思考 "做什么",只会帮你思考 "怎么做"。 + +如果你不清楚自己要做什么,AI 就会按照它自己的理解去做。结果就是:你得到了一个能运行的应用,但它不是你想要的那个。 + +所以,在开始写代码之前,你需要回答这几个问题: + +- 这个应用的核心功能是什么? +- 用户会怎么使用它? +- 哪些功能是必须的,哪些是可以以后再加的? +- 有没有什么特殊的限制或要求? + +这些问题的答案,就是你的规划。 + + + +### 如何做好规划? + +很多同学会说:我不知道怎么规划啊,我又不是产品经理。 + +别担心,AI 可以帮你。你可以把 AI 当成你的产品经理,和它一起完成规划。 + +比如,你可以这样开始对话: + +“我想做一个番茄钟应用,但我还没想清楚具体要做哪些功能。你能像产品经理一样,问我一些问题,帮我理清思路吗?” + +AI 会开始问你一系列问题,比如: + +- 用户能自定义工作和休息的时长吗? +- 计时结束后要有提醒吗?是声音还是弹窗? +- 需要记录用户完成了多少个番茄钟吗? + +通过回答这些问题,你会逐渐把模糊的想法变成清晰的需求。最后,你可以让 AI 帮你整理成一份 **产品需求文档(PRD)**。 + +这份文档就是你的 “项目宪法”,之后每次和 AI 对话时,都可以把它贴上去,让 AI 明白你的目标。 + + + + +### 规划决定了代码的形状 + +在我用 AI 做项目的过程中,发现一个很有趣的点:**AI 会优先让代码能跑起来,而不是让代码结构合理。** + +一旦代码能跑了,AI 就会倾向于在现有代码上打补丁,而不是重新设计。这就像盖房子 —— 如果地基歪了,后面怎么修都会歪。 + +所以,规划就是你的地基。在屎山代码形成之前,你要先确定好整体的结构和方向。这样才能避免后期返工。 + +![](https://pic.yupi.icu/1/shitcode.png) + +正因为规划至关重要,现在很多 AI 编程工具都提供了 Plan Mode(规划模式),帮你先生成规划,人工确认后再生成代码。 + +比如 Cursor 的规划模式: + +![Cursor 规划模式](https://pic.yupi.icu/1/image-20260104170011408.png) + +在 Claude Code 中,可以按两次 `Shift + Tab` 进入计划模式。 + +![](https://pic.yupi.icu/1/image-20260109143426848.png) + +在这个模式下,你可以和 Claude 来回讨论,直到对它的计划满意。然后切换到自动接受编辑模式,让 Claude 一次性完成任务,不用反复确认每个编辑。 + +这种 “先规划、后执行” 的方式,能大大提高开发效率,避免在错误的方向上浪费时间。 + + + +## 心法二、MVP 思维 + +MVP 是 Minimum Viable Product 的缩写,意思是 **最小可行产品**。这是一个非常重要的思维方式。 + +简单来说,MVP 思维就是:**先做一个最简单、但能用的版本,然后再慢慢完善。** + + + +### 为什么要用 MVP 思维? + +很多同学在做项目时,总想一步到位。比如做一个记账应用,就想着要有分类、统计、图表、导出、多账户…… 恨不得把所有功能都加上。 + +结果呢? + +做到一半就卡住了,或者做出来的东西太复杂,自己都不知道该怎么改了。 + +MVP 思维能帮你避免这个问题。它让你专注于最核心的功能,先把这个功能做好、做稳定,然后再考虑其他的。 + +比如记账应用,MVP 版本可能只需要 3 个功能: + +1. 记录一笔支出 +2. 查看所有支出 +3. 计算总金额 + +就这么简单。 + +等这个版本做好了,能用了,你再考虑加分类、加图表。 + + + +### MVP 思维的好处 + +使用 MVP 思维有几个明显的好处: + +1. 降低难度:你不需要一次性解决所有问题,只需要解决最重要的那一个。 + +2. 快速验证:你可以很快做出一个能用的版本,看看自己的想法是否可行。 + +3. 保持动力:看到自己的作品一点点成长,会让你更有成就感,更愿意继续做下去。 + +4. 方便调整:如果发现方向不对,你可以快速调整,不会浪费太多时间。 + + + +### 如何应用 MVP 思维? + +在和 AI 对话时,你可以明确告诉它: + +“我们先做一个 MVP 版本,只包含最核心的功能。其他的功能以后再加。” + +然后列出你认为最重要的 2 ~ 3 个功能。这样 AI 就不会给你做一个 “大而全” 的东西,而是专注于把核心功能做好。 + +**记住,完成比完美更重要。** + +先做出来,再慢慢优化。 + + + + +## 心法三、迭代优于完美 + +这个心法和 MVP 思维有点像,但侧重点不同。MVP 思维是关于 "做什么",而这个心法是关于 "怎么做"。 + +简单来说就是:**不要期待一次就做对,要通过多次迭代来逐步接近目标。** + + + + +### 为什么迭代很重要? + +AI 虽然很强大,但它不是魔法。它不可能一次就完全理解你的需求,也不可能一次就生成完美的代码。 + +这很正常,就像你和朋友聊天,有时候也需要解释好几次对方才能明白你的意思。 + +所以,正确的做法是:**把大任务拆成小步骤,一步一步来。** + +比如你想做一个登录页面,不要一次性要求 AI 做完所有功能。你可以这样拆分: + +1. 先做一个简单的登录表单(只有邮箱和密码) +2. 然后加上表单验证(检查邮箱格式、密码长度) +3. 再连接后端 API +4. 最后加上错误提示和加载动画 + +每一步都很小,很容易完成。完成一步,测试一下,没问题了再继续下一步。 + + + +### 迭代的节奏 + +一个好的迭代节奏是这样的: + +1. 提出需求:告诉 AI 你想做什么 +2. 生成代码:AI 给你代码 +3. 测试运行:你把代码跑起来看看效果 +4. 发现问题:找出哪里不对 +5. 调整优化:告诉 AI 问题在哪,让它改进 + +然后重复这个循环,每次循环都让你的项目更接近目标。 + + + +### 不要害怕返工 + +很多同学看到 AI 生成的代码有问题,就会觉得:完蛋玩意儿,又要重来。 + +其实不用这么想,在 Vibe Coding 里,返工是很正常的。因为你在和 AI 一起探索,一起学习。 + +重要的是,每次返工都要有收获。你要明白为什么之前的方案不行、这次的方案好在哪里,这样你才能不断进步。 + +**迭代不是浪费时间,而是通往成功的必经之路。** + +像我 Vibe Coding 多了,其实已经比较能拿捏 AI 生成代码的准确度,有时候能预判到 AI 是否还需要返工。但不管怎样,我都有信心 AI 肯定能帮我完成任务,干就完了! + + + + +## 心法四、上下文是王道 + +这是一个很多人容易忽视,但又极其重要的心法。 + +什么是上下文? + +简单来说,就是 AI 需要知道的背景信息。比如你的项目用的是什么技术栈、之前做了哪些功能、有什么特殊要求等等。 + + + +### 为什么上下文这么重要? + +**AI 没有记忆。** + +每次你开始一个新的对话,它都不知道你之前说过什么。 + +如果你不给它足够的上下文,它就会按照自己的理解去做,结果可能和你的项目完全不匹配。 + +举个例子,如果你只说 “帮我写一个按钮”。AI 可能会用原生 HTML 写,也可能用 React 写,还可能用 Vue 写。颜色、大小、样式都是它自己决定的。 + +但如果你说:“我的项目用的是 React 和 Tailwind CSS,请帮我写一个主色调为蓝色、圆角、带阴影的按钮”。AI 就能给你一个符合要求的结果。 + +这就是上下文的力量。 + + + +### 如何提供好的上下文 + +提供上下文有几个技巧: + +1)使用项目文档:还记得我们在心法一里提到的产品需求文档 PRD 吗? + +每次开始新对话时,把它贴上去,这样 AI 就知道你的项目是什么样的。 + +2)说明技术栈:明确告诉 AI 你用的是什么框架、什么库。比如 “我用的是 Next.js 和 Supabase”。 + +3)参考已有代码:如果你想让新功能和已有功能保持一致,可以把已有代码的结构告诉 AI,比如 “请参考我的设置页面的代码结构来写这个新页面。” + +4)描述设计风格:如果有设计要求,一定要说清楚。比如 “我们的设计风格是简约、专业,主色调是深蓝色”。否则 AI 大概率会给你生成蓝紫渐变色的页面,你懂的。 + + + +### 上下文文件 + +有些 AI 工具支持上下文文件。比如 Claude Code 可以读取项目根目录下的 `CLAUDE.md` 文件作为系统提示词。 + +你可以把项目的基本信息、技术栈、设计规范都写在这个文件里。这样每次 AI 都能自动获取这些信息,你就不用每次都重复了。 + +这是一个非常高效的做法,强烈推荐。 + + + +## 心法五、像产品经理一样思考 + +最后一个心法,也是最容易被忽视的一个。 + +很多人觉得,用 AI 做东西就是 “告诉它做什么,它就做什么”。但其实,你的角色不只是一个下命令的人,而应该是一个产品经理。 + + + +### 什么是产品经理思维? + +产品经理的核心工作是什么? + +是把用户的需求转化成开发团队能理解的需求文档。 + +在 Vibe Coding 里,你就是产品经理,AI 就是你的开发团队。 + +你需要: + +- 理解用户(也就是你自己或你的目标用户)的真正需求 +- 把需求拆解成清晰的功能点 +- 考虑用户体验的每一个细节 +- 在功能、时间、质量之间做权衡 + + + + +### 关注用户体验 + +一个好的产品经理,不会只关注功能是否实现,还会关注用户用起来是否舒服。 + +比如,一个登录页面,不只是要能登录,还要考虑: + +- 如果用户输错密码,会有友好的提示吗? +- 登录按钮在加载时会显示 "正在登录" 吗? +- 如果网络慢,用户会不会以为页面卡住了? + +这些细节,AI 不一定会主动考虑,需要你主动提出来。 + + + +### 做好取舍 + +优秀的产品经理还有一个重要的能力:知道什么该做,什么不该做。 + +在 Vibe Coding 里,你也需要做这样的取舍。不是所有功能都要做,不是所有细节都要完美。你要根据你的目标和时间,决定优先级。 + +比如你只是想做一个 Demo 展示给朋友看,那么数据持久化可能不重要,界面好看能装呗更重要。 + +但如果你想做一个真正的商业化产品,那么数据安全、性能优化就不能忽视。 + +这些判断,都需要你像产品经理一样思考。 + + + + +### 和 AI 沟通 + +产品经理的另一个重要技能是沟通。你需要把你的想法清晰地传达给开发团队(也就是 AI)。 + +不要说 “做一个好看的按钮”,而要说 “做一个圆角、蓝色背景、白色文字、鼠标悬停时变深蓝色的按钮”。 + +不要说 “加一个搜索功能”,而要说 “在页面顶部加一个搜索框,用户输入关键词后按回车,显示包含该关键词的所有文章”。 + +需求越具体,AI 就越能理解你的意图。 + +程序员朋友们应该最能理解,一个描述不清楚的产品经理会让你有多痛苦。 + +![](https://pic.yupi.icu/1/d2fea61b927529d4c3a4007e7c36379f.jpeg) + + + + +## 心法的实际应用 + +让我用一个真实的例子,来展示这 5 个心法是如何协同工作的。 + +假设你想做一个 “每日一句” 的小应用,每天显示一句励志名言。 + + + +### 应用心法一、先做规划 + +你不是直接让 AI 开始写代码,而是先和它一起规划: + +“我想做一个每日一句应用。你能帮我理清需求吗?” + +AI 可能会问你: + +- 名言从哪里来?是固定的列表还是从 API 获取? +- 用户能刷新获取新的名言吗? +- 需要保存用户喜欢的名言吗? + +通过这些问题,你明确了 MVP 版本的功能:**每次打开显示一句随机名言,用户可以点击按钮刷新。** + + + +### 应用心法二、MVP 思维 + +你决定先做最简单的版本: + +1. 一个页面 +2. 显示一句名言 +3. 一个 “换一句” 按钮 + +其他功能(比如收藏、分享)以后再说。 + + + +### 应用心法三、迭代开发 + +你把任务拆成小步骤: + +1)创建一个简单的页面,显示一句固定的名言。 + +第二步:添加一个名言数组,随机选择一句显示。 + +3)添加 “换一句” 按钮,点击后显示新的名言。 + +每一步都很小,很容易测试和调整。 + + + +### 应用心法四、提供上下文 + +在每次对话中,你都会说明: + +“我用的是 React 和 Tailwind CSS。设计风格是简约、温暖,主色调是橙色。” + +这样 AI 生成的代码就能和你的项目保持一致。 + +当然,如果你使用专业的 AI 开发工具(比如 Cursor),工具会帮你维护上下文,不需要每次对话都重复说明了。 + + + +### 应用心法五、产品经理思维 + +你要考虑用户体验的细节,比如: + +- 点击按钮时,能不能加一个淡入淡出的动画效果?这样切换会更自然。 +- 如果名言太长,能不能自动调整字体大小? + +这些细节让你的应用更加精致。 + + + + +## 写在最后 + +这 5 个核心心法,是我在 Vibe Coding 实践中总结出来的最重要的经验。它们不是什么高深的技巧,而是一些简单但有效的思维方式。 + +让我再总结一下: + +1. Planning is Everything:规划比代码更重要,先想清楚再动手。 +2. MVP 思维:先做最简单能用的版本,再慢慢完善。 +3. 迭代优于完美:通过多次小步骤逐步接近目标。 +4. 上下文是王道:给 AI 足够的背景信息,它才能做对。 +5. 像产品经理一样思考:关注用户体验,做好功能取舍。 + +这些心法看起来简单,但要真正掌握需要不断练习。建议你在下一个项目中,有意识地应用这些心法,看看效果如何。 + +记住,Vibe Coding 不只是让 AI 写代码,更重要的是你如何引导 AI,如何管理整个开发过程。掌握了这些心法,你就能从一个 "会用 AI" 的人,变成一个 "用好 AI" 的人。 + +下一篇文章,我会讲解如何和 AI 进行高效对话,也就是 “对话工程” 的技巧。 + +加油,你一定可以的!💪 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/02 Vibe Coding 对话工程技巧.md b/Vibe Coding 零基础教程/30 经验技巧/02 Vibe Coding 对话工程技巧.md new file mode 100644 index 0000000..f1244ec --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/02 Vibe Coding 对话工程技巧.md @@ -0,0 +1,594 @@ +# Vibe Coding 对话工程技巧 + +> 迭代式对话的艺术 + + + +你好,我是鱼皮。 + +在上一篇文章里,我们讲了 Vibe Coding 的 5 个核心心法。今天我们要深入探讨其中最关键的一个技能 —— 如何和 AI 进行高效对话。 + +很多同学在用 AI 的时候,会把它当成一个魔法按钮:输入一句话,期待它直接给出完美答案。 + +但现实往往是,AI 给出的结果要么不对,要么不够好。这时候,大家就会抱怨:AI 太笨了,根本不懂我的意思,是不是你这个 AI 能力不行啊? + +其实,问题不在于 AI 笨,而在于我们没有掌握和它对话的技巧。今天,我就来教你如何通过 **对话工程**,让 AI 真正听懂你的需求。 + + + +## 一、对话工程和提示词工程? + +很多朋友把和 AI 交流称为 “写提示词”、或者 “提示词工程”,我之前也是这样的。但如今,随着 AI 对模糊指令的理解能力越来越强,我觉得这个说法其实不够全面,因为它暗示了一种单向的、一次性的交流方式 —— 你写一个完美的提示词,AI 给你一个完美的答案。 + +但实际上,Vibe Coding 更像是一场对话。你和 AI 是在一起工作、一起探索、一起完善想法。这个过程是 **双向的、迭代的**。 + +举个例子,传统的 **提示词思维** 是这样的: + +“请帮我用 React 和 Tailwind CSS 写一个响应式的导航栏,包含 Logo、菜单项(首页、关于、联系)、搜索框和用户头像,要支持移动端折叠菜单,颜色是深蓝色背景白色文字,Logo 在左边,菜单在中间,用户信息在右边……” + +你想要在一句话里把所有需求都说清楚。但往往会遗漏一些细节,或者说得不够准确。 + +而 **对话思维** 是这样的: + +你:我想做一个导航栏,你能帮我吗? + +AI:当然可以。你想用什么技术栈?有什么设计要求吗? + +你:我用 React 和 Tailwind CSS。设计上希望简洁专业,深蓝色背景。 + +AI:好的。导航栏需要包含哪些元素? + +你:Logo、几个菜单项、搜索框和用户头像。 + +AI:明白了。需要支持移动端吗? + +你:对,移动端要能折叠成汉堡菜单。 + +看到区别了吗? + +对话思维让你可以逐步明确需求,而不是一开始就要想清楚所有细节。这样更自然,也更容易得到好结果。 + +![](https://pic.yupi.icu/1/promptvschat%E5%A4%A7.jpeg) + + + + +### 对话的好处 + +使用对话思维有几个明显的好处: + +1. 降低认知负担:你不需要一次性想清楚所有细节,可以边聊边想。 + +2. 更容易发现问题:AI 的提问会帮你发现自己遗漏的地方。 + +3. 结果更准确:通过多轮交流,AI 能更准确地理解你的需求。 + +4. 学习效果更好:在对话过程中,你会学到很多新知识和最佳实践。 + + + +## 二、迭代式对话的核心技巧 + +下面分享几个最重要的对话技巧。 + + + +### 技巧一:从大到小,逐步细化 + +不要一开始就陷入细节。先从整体开始,然后逐步细化。 + +比如你想做一个博客系统,不要一上来就说:帮我写一个支持 Markdown、代码高亮、评论、点赞、分类、标签、搜索、RSS 订阅的博客系统。 + +而是这样开始: + +1. 我想做一个简单的博客系统,用户能发布和查看文章 +2. 文章需要支持 Markdown 格式 +3. 能不能加上代码高亮功能 +4. 我还想要一个简单的评论功能 + +每一步都很小,很容易理解和实现。这样 AI 就不会被复杂的需求搞晕,你也能随时调整方向。 + + + +### 技巧二:具体而非抽象 + +AI 不擅长理解抽象的概念,但很擅长处理具体的描述。 + +❌ 不好的例子:做一个好看的按钮 + +✅ 好的例子:做一个圆角按钮,蓝色背景(#3B82F6),白色文字,padding 上下 12px 左右 24px,鼠标悬停时背景变深蓝色(#2563EB)。 + +❌ 不好的例子:加一个用户友好的错误提示 + +✅ 好的例子:当用户输入的邮箱格式不对时,在输入框下方显示红色文字 "请输入有效的邮箱地址"。 + +描述越具体,AI 就越能准确地实现你的需求。 + + + + +### 技巧三:提供参考和示例 + +你可以通过文字描述或者图片举例来帮助 AI 理解需求。 + +用文字描述,你可以这样说: + +- 我想要一个类似 GitHub 的个人主页布局:左边是用户信息卡片,右边是活动时间线。 +- 按钮的样式参考 Stripe 的设计:简洁、现代、有微妙的阴影。 +- 表单验证的提示方式参考 Airbnb:实时验证,错误提示在输入框下方。 + +AI 见过很多网站和应用,你提供的参考能帮它快速理解你想要什么。 + +更直接的方法是用图片,现在的很多 AI 大模型(比如 Claude、GPT、Gemini)都支持图片理解,你可以: + +- 截图你想要的设计效果,让 AI 照着做 +- 截图出现的 bug 或错误,让 AI 看到具体问题 +- 截图参考网站的布局,让 AI 模仿 + +比如下面这些提示词: + +- 请参考这个截图的布局来设计我的页面:【上传截图】 +- 我的页面在移动端显示不正常,看这个截图:【上传截图】,应该怎么修复? + +一图胜千言,图片能让 AI 更准确地理解你的需求,特别是 UI 设计、网站开发和 Bug 修复时。 + + + +### 技巧四:分步骤提问 + +跟技巧 1 有点类似。对于复杂的功能,不要一次性要求 AI 全部完成。把它拆成多个步骤,一步一步来。 + +比如实现用户登录功能: + +1. 先帮我创建一个登录表单,包含邮箱和密码输入框,还有一个登录按钮。 +2. 现在给表单添加客户端验证:邮箱要符合格式,密码至少 6 位。 +3. 当用户点击登录按钮时,发送 POST 请求到 /api/login,携带邮箱和密码。 +4. 如果登录成功,跳转到首页;如果失败,显示错误信息。 + +每完成一步,你都可以测试一下,确保没问题再继续。这样即使出错,也容易定位问题。 + + + +### 技巧五:用提问来引导思考 + +有时候,你不确定该怎么做,可以让 AI 帮你分析。 + +- 我想在这里加一个缓存机制,但不确定用哪种方案。你能分析一下 Redis 和 Memcached 的优缺点吗? +- 这个页面加载有点慢,你觉得可能是什么原因?有什么优化建议? +- 我在考虑用 SSR 还是 CSR,你能帮我分析一下这两种方案在我这个项目中的适用性吗? + +这样的提问能让 AI 发挥它的知识优势,帮你做出更好的决策。 + + + +## 三、如何描述清楚需求? + +描述需求是对话中最重要的环节。描述得好,AI 就能做对;描述得不好,就会南辕北辙。 + + + +### 使用需求描述框架 + +在描述需求时,可以用一个系统化的框架来组织你的想法。这里推荐一个实用的框架: + +**基础版(5要素)**: + +1. 是什么(What):要做什么功能或组件? +2. 为什么(Why):这个功能的目的是什么? +3. 怎么做(How):技术实现有什么要求? +4. 什么样(Style):外观和交互有什么要求? +5. 什么情况(When/Where):在什么场景下使用? + +举个例子: + +- 我需要一个搜索框(What) +- 让用户能快速找到文章(Why) +- 用 React 实现,输入时实时搜索(How) +- 样式要简洁,有搜索图标,输入框圆角(Style) +- 放在页面顶部导航栏的右侧(Where) + +当然,不是每次都要说全五个要素,但建议至少要包含前三个。 + +**进阶版(6要素)**: + +如果你想要更专业的输出,可以补充这个要素: + +6)受众(Audience):这个功能是给谁用的?他们的技术水平如何? + +比如:“这个搜索功能是给普通用户用的,要简单易懂,不需要高级筛选。” + +这样 AI 就能根据受众调整实现方案和交互设计。 + + + +### 说明技术背景 + +如果你想让 AI 帮你优化已有项目,那么 AI 需要知道你的项目用的是什么技术,才能给出合适的代码。 + +每次开始新对话时,建议先说明技术背景,比如:我的项目用的是 Next.js 15(App Router)、TypeScript、Tailwind CSS 和 Supabase。 + +如果有特殊的代码规范,也要说明,比如:我们的项目使用函数式组件,不用 class 组件。所有的 API 调用都用自定义的 useFetch hook。 + +这样 AI 生成的代码就能和你的项目保持一致。 + +虽然现在很多 AI 编程工具会引导 AI 先分析你已有的项目代码,但是人工明确技术栈可以让 AI 生成的内容更准确。 + +不过如果你不是一名程序员,或者不太懂这些技术,那么这一点就可以完全忽略掉了。这就是为什么在 AI 时代,我们仍然需要学习编程,因为懂技术的人更能引导和利用 AI。 + + + + +### 描述期望的输出 + +告诉 AI 你期望什么样的输出。比如: + +- 请给我完整的组件代码,包括 TypeScript 类型定义 +- 只给我核心逻辑,不需要样式代码 +- 请给我一个可以直接运行的完整示例 +- 请分步骤解释这段代码的工作原理 + +明确输出格式,能让 AI 更好地满足你的需求,否则 AI 可能会给你输出一大堆乱七八糟的内容。 + +我发现越强的 AI 就越容易把简单的需求搞复杂。像我之前就遇到过让 AI 生成一个小项目,结果它给我生成了 7 ~ 8 个文档,浪费了贼多 Token。 + + + + +## 四、追问和纠偏的技巧 + +AI 第一次给出的答案往往不够完美。这时候,你需要通过追问和纠偏来改进结果。 + + + +### 追问的艺术 + +如果 AI 的回答不够详细,不要重新问一遍,而是追问细节。 + +❌ 不好的追问:再详细一点(太模糊) + +✅ 好的追问: + +- 你提到了使用 useEffect,能详细解释一下为什么要在这里用它吗? +- 这个函数的性能如何?处理大量数据时会有问题吗? +- 你选择用 Map 而不是 Object,是基于什么考虑? + +具体的追问更能得到具体的答案。 + + + +### 让 AI 主动追问你 + +有时候,你可能不知道该提供哪些信息。这时候,可以让 AI 主动追问你: + +```markdown +我想做【你的需求】。请你在回答前,先问我几个问题,了解更多细节,然后再给出方案。 +``` + +这样 AI 会根据它的理解,问你一些关键问题,比如技术栈、使用场景、设计要求等。通过回答这些问题,你能把需求描述得更清楚,AI 也能给出更准确的方案。 + +这种方式特别适合你对需求还不够明确的时候,让 AI 帮你理清思路。 + + + +### 纠偏的方法 + +如果 AI 理解错了你的意思,要及时纠正。 + +- 不对,我想要的不是这样。我的意思是…… +- 这个方案不太适合我的场景,因为……你能给我另一个方案吗? +- 你误解了我的需求。我要的是 A,不是 B。 + +不要不好意思纠正 AI,请尽情地骂它、羞辱它、甚至可以把它当做臭狗一样教训。它不会生气,反而会根据你的反馈给出更好的答案。 + + + +### 要求解释 + +如果你不理解 AI 给出的代码或方案,可以要求它解释。 + +- 这段代码是什么意思?能逐行解释一下吗? +- 为什么要这样写?有没有其他写法? +- 这个方案的优缺点是什么? + +理解了原理,你才能真正掌握这些知识。 + + + + +## 五、如何引导 AI 的输出? + +有时候,AI 会给出一些不太理想的方案。这时候,你需要引导它往正确的方向走。 + + + + +### 设定约束条件 + +通过设定约束,让 AI 在特定范围内思考。 + +- 请给我一个不依赖第三方库的纯 JavaScript 实现。 +- 这个功能要在 100ms 内完成,请考虑性能优化。 +- 代码要尽可能简洁,不超过 20 行 +- 要考虑边界情况,比如空数组、null 值等 + +这些约束能让 AI 的输出更符合你的实际需求。 + + + + +### 要求多个方案 + +不要满足于第 1 个方案,而是让 AI 给你多个选择。 + +- 请给我 3 种不同的实现方式,分别说明它们的优缺点。 +- 这个问题有没有更简单的解决方案? +- 除了你刚才说的方法,还有其他方案吗? + +多个方案能让你做出更明智的选择。 + +此外,鱼皮在做一个大项目时,会让多个不同的 AI 模型或 AI 产品同时给出方案,然后再人工进行挑选。这种方法适用于有一定专业知识的朋友。 + + + + +### 使用角色扮演 + +让 AI 扮演特定角色,能得到更专业的建议。 + +- 请以一个资深前端工程师的角度,审查这段代码并给出改进建议。 +- 假设你是一个 UX 设计师,这个交互流程有什么问题? +- 作为一个性能优化专家,你会如何改进这个页面的加载速度? + +角色扮演能激发 AI 在特定领域的专业知识。 + +如果你不知道该让 AI 扮演什么角色,可以让 AI 自己选择最合适的专家: + +```markdown +我想探讨【你的问题】。请你先选一位最适合的领域专家来思考它,可以是真实存在的名人或专家。然后以这个专家的视角来回答我的问题。 +``` + +比如你想优化一个产品的用户体验,可以让 AI 选择合适的 UX 专家。AI 可能会选择某个知名的设计师或产品经理,然后以他们的视角给出建议。这样的回答往往更专业、更有深度。 + + + + +## 六、对话模板库 + +为了提高效率,你可以准备一些常用的对话模板。 + +1)开始新功能的模板 + +```markdown +我要开发一个新功能:【功能描述】。我的技术栈是【技术栈】。请帮我: +1)分析这个功能的核心需求 +2)建议一个合理的实现方案 +3)列出可能遇到的问题 +``` + +2)调试问题的模板 + +```markdown +我遇到了一个问题:【问题描述】。报错信息是:【错误信息】。相关代码是:【代码片段】。请帮我: +1)分析可能的原因 +2)给出解决方案 +3)解释为什么会出现这个问题 +``` + +3)优化代码的模板 + +```markdown +这是我的代码:【代码片段】。它的功能是【功能说明】。请帮我: +1)找出可能的性能问题 +2)改进代码的可读性 +3)指出潜在的 bug +``` + +4)学习新知识的模板 + +```markdown +我想学习【技术/概念】。请: +1)用简单的语言解释它是什么 +2)给我一个实际的使用例子 +3)告诉我什么时候应该用它 +``` + +这些模板可以帮你快速开始对话,节省时间。 + +更多的 AI 提示词模板可以在鱼皮的 [AI 资源导航网站](https://ai.codefather.cn/prompt) 获取: + +![](https://pic.yupi.icu/1/image-20260104174539349.png) + + + +## 七、常见的对话陷阱 + +在和 AI 对话时,有一些常见的错误要避免。 + + + +### 陷阱 1、一次问太多 + +不要在一个提问里塞进太多内容。 + +❌ 不好的例子:帮我实现用户注册、登录、密码重置、邮箱验证、权限管理、个人资料编辑功能。 + +这样 AI 会不知道从哪里开始,或者给你一个大而全但不够深入的答案。 + +正确做法:一次只问一个功能,做完一个再做下一个。 + + + +### 陷阱 2、不要假设 AI 有记忆 + +AI 的记忆是有限的。不要假设它记得很久之前说过的话。 + +如果你不确定 AI 的记忆容量是否足够,还想引用之前的内容,最好重新说明一遍:还记得我们之前做的登录表单吗?现在我想在它的基础上…… + +或者直接把相关代码贴出来:这是我们之前写的登录表单代码:【代码】。现在我想…… + +不过很多 AI 编程工具会显示当前记忆容量,能帮你把控: + +![](https://pic.yupi.icu/1/image-20260104174741309.png) + + + +### 陷阱 3、不要不测试就继续 + +每次 AI 给你代码后,一定要测试!不要不测试就继续要求下一个功能。 + +如果代码有问题,及时反馈给 AI。不要等到做了很多功能后才发现基础部分有问题。 + + + +### 陷阱 4、过度依赖 + +不要什么都问 AI。有些简单的问题,自己查文档、搜索或者使用其他工具可能更快。 + +AI 适合用来: +- 生成代码框架 +- 解决复杂问题 +- 学习新概念 +- 审查和优化代码 + +不适合用来: +- 查询 API 文档 +- 找简单的语法错误 +- 做简单的计算(不如用计算器) + +当然,不是说 AI 不能做这些,还是具体场景具体分析吧~ + + + +## 八、实战案例:完整的对话流程 + +让我用一个真实的例子,展示一次完整的、推荐的对话流程。 + +假设你要做一个待办事项应用的 “添加任务” 功能。 + + + +### 第一轮:明确需求 + +你:"我想在我的待办事项应用里添加一个新建任务的功能。" + +AI:"好的。你想用什么方式让用户添加任务?是一个表单、一个输入框,还是其他方式?" + +你:"就一个简单的输入框,用户输入任务内容后按回车就添加。" + +AI:"明白了。任务除了内容,还需要其他信息吗?比如截止日期、优先级等?" + +你:"MVP 版本先不要这些,只要任务内容就行。" + + + +### 第二轮:技术实现 + +你:"我用的是 React 和 TypeScript。请帮我写这个输入框组件。" + +AI:【给出代码】 + +你:"看起来不错。但是我希望输入框在页面顶部,占满宽度,有一个淡蓝色的边框。" + +AI:【给出改进的代码】 + + + +### 第三轮:添加功能 + +你:"现在当用户按回车时,要把任务添加到任务列表里。我的任务列表是用 useState 管理的。" + +AI:【给出添加任务的逻辑】 + +你:"很好。但是如果输入框是空的,不应该添加任务。" + +AI:【添加验证逻辑】 + + + +### 第四轮:优化体验 + +你:"添加任务后,输入框应该自动清空并保持焦点,这样用户可以连续添加多个任务。" + +AI:【添加清空和聚焦逻辑】 + +你:"完美!最后,能不能在添加任务时显示一个简短的成功提示?" + +AI:【添加提示功能】 + + + +--- + + + +看到了吗?通过多轮对话,我们逐步完善了这个功能。每一步都很小,很容易理解和测试。 + + + +## 九、深入学习提示词工程 + +如果你想更深入地学习提示词技巧,这里推荐一些资源。 + + + +### 学习 Cursor 的提示词设计 + +Cursor 作为最流行的 AI 编程工具之一,它的提示词设计非常值得学习。Cursor 的系统提示词长达 500 多行,包含了角色定义、操作约束、工具使用等多个模块,体现了很多提示词工程的最佳实践。 + +比如: +- 通过反复强调来确保 AI 理解重点 +- 使用负面指令(NEVER)和正面指令(ALWAYS)来强化约束 +- 为每个工具提供详细的说明和使用示例 +- 统一输出格式便于后续处理 + +鱼皮专门录制了一期视频,详细拆解了 Cursor 的提示词设计:[《扒了下 Cursor 的提示词,被狠狠惊艳到了!》](https://www.bilibili.com/video/BV1bBaBzXEae/) + +如果你对提示词工程感兴趣,或者想开发自己的 AI 应用,强烈推荐观看这个视频。 + + + +### 其他学习资源 + +- [阿里云百炼 Prompt 指南](https://help.aliyun.com/zh/model-studio/prompt-engineering-guide):系统化的提示词编写教程 +- [鱼皮的 AI 资源导航](https://ai.codefather.cn/prompt):精选的提示词模板库 +- [鱼皮的 AI 知识库](https://github.com/liyupi/ai-guide):开源的 AI 学习资源 + + + +## 写在最后 + +对话工程是 Vibe Coding 中最重要的技能之一。它不是简单地 “写提示词”,而是一个持续的、双向的、迭代的交流过程。 + +让我总结一下要点: + +1. 用对话思维代替提示词思维:把和 AI 的交流看作一场合作,而不是下命令。 + +2. 从大到小,逐步细化:先确定整体方向,再深入细节。 + +3. 具体而非抽象:用清晰、具体的语言描述你的需求。 + +4. 善用追问和纠偏:不要满足于第一个答案,通过追问让它更完善。 + +5. 引导而非命令:通过约束、角色扮演等方式引导 AI 给出更好的答案。 + +6. 避免常见陷阱:不要一次问太多,不要假设 AI 有完美记忆。 + +掌握了这些技巧,你就能和 AI 进行高效的对话,让它真正成为你的得力助手。 + +下一篇文章,我会讲解 **上下文工程**,教你如何管理项目信息,让 AI 始终理解你的项目。 + +加油,未来的 Vibe Coding 大师!💪 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/03 Vibe Coding 上下文管理技巧.md b/Vibe Coding 零基础教程/30 经验技巧/03 Vibe Coding 上下文管理技巧.md new file mode 100644 index 0000000..88343c2 --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/03 Vibe Coding 上下文管理技巧.md @@ -0,0 +1,686 @@ +# Vibe Coding 上下文管理技巧 + +> 让 AI 真正理解你的项目 + + + +你好,我是鱼皮。 + +在前两篇文章里,我们讲了 Vibe Coding 的核心心法和对话技巧。今天我们要聊一个更底层、但同样重要的话题 —— 上下文管理。 + +你可能遇到过这样的情况:刚开始和 AI 对话时,它表现得很聪明,生成的代码也很符合你的要求。但聊了一会儿之后,它开始失忆了,忘记了你之前说过的技术栈、忘记了项目的设计风格,甚至开始用完全不同的方案来实现功能。 + +这不是 AI 变笨了,而是它的记忆出了问题。下面我就来教你如何通过 **上下文工程**,给 AI 装上一个可靠的 “记忆补丁”。 + + + +## 一、什么是上下文工程 + +在讲具体方法之前,我们先要理解什么是上下文。 + + + + +### 上下文就是 AI 的工作记忆 + +想象一下,你在和一个新同事合作开发项目。如果你每次都要从头解释项目是什么、用的什么技术、有什么规范,那效率会很低。但如果你们有一份共享的项目文档,新同事看一眼就能明白,那合作就会顺畅很多。 + +上下文就是这份 “项目文档”。它包含了 AI 需要知道的所有背景信息: + +- 你的项目是什么 +- 用的什么技术栈 +- 有什么设计规范 +- 已经完成了哪些功能 +- 当前在做什么 + +有了这些信息,AI 才能给出准确、一致的答案。 + + + +### 上下文的重要性 + +很多人把精力放在 “写好提示词” 上,但其实,**上下文可能比提示词更重要**。 + +一个好的提示词能让 AI 理解你当前的需求,但一个好的上下文能让 AI 理解你的整个项目。前者是 "点",后者是 "面"。 + +举个例子,如果你只说 “帮我写一个按钮”,AI 可能会用原生 HTML 写,也可能用 React 写,样式也是它自己决定的。 + +但如果你提供了完整的上下文 “项目用 React、Tailwind CSS、设计风格是简约现代、主色调是蓝色”,AI 就能给你一个完全符合项目风格的按钮。这就是上下文的力量。 + + + + +### 上下文的 3 个层次 + +上下文可以分为 3 个层次: + +1. 项目级上下文:整个项目的基本信息,比如技术栈、设计规范、目录结构等。 + +2. 功能级上下文:当前正在开发的功能的信息,比如这个功能要做什么、依赖哪些其他功能等。 + +3. 对话级上下文:当前对话中的临时信息,比如刚才讨论的问题、生成的代码片段等。 + +![](https://pic.yupi.icu/1/contextlevel%E5%A4%A7.jpeg) + +管理好这三个层次的上下文,你就能让 AI 始终 “在状态”。 + + + +## 二、AI 的短期记忆 + +我们先从最基础的开始 —— 如何管理 AI 的短期记忆? + + + + +### 什么是上下文窗口? + +AI 有一个上下文窗口(Context Window),可以理解为它的短期记忆容量。这个窗口是有限的,通常是几千到几十万个 token(大约相当于几千到几十万个单词)。 + +当你和 AI 对话时,每条消息都会占用这个窗口的空间。对话越长,窗口就越满。当窗口满了,早期的对话内容就会被遗忘。 + +这就是为什么 AI 会失忆,不是它真的忘了,而是早期的信息已经被挤出窗口了。 + + + + +### 一个对话,一个任务 + +最简单的管理方法就是:**一个对话只做一件事**。 + +不要在一个对话里既讨论登录功能,又讨论支付功能,还讨论性能优化。这样会让上下文变得混乱,AI 也容易搞混。 + +正确的做法是: + +- 做登录功能时,开一个新对话 +- 做完了,测试通过了,再开一个新对话做支付功能 +- 遇到性能问题,又开一个新对话专门讨论优化 + +每个对话都聚焦一个任务,上下文就会保持清晰。 + +当然,如果是多个简单的功能,都放在一个对话里也没有问题,灵活一点~ + + + + +### 定期压缩上下文 + +如果一个任务确实需要很长的对话,你可以定期压缩上下文。 + +具体做法是:当对话进行到一半时,让 AI 总结一下到目前为止的进展。 + +有些 AI 编程工具自带了总结上下文的指令,可以直接使用: + +![](https://pic.yupi.icu/1/image-20260104180238760.png) + +也可以手动输入提示词来总结: + +```markdown +请总结一下我们到目前为止做了什么,包括: +1)完成了哪些功能 +2)使用了哪些技术方案 +3)还有哪些待解决的问题 +``` + +然后,你可以用这个总结开始一个新对话,继续后面的工作。这样就相当于把之前的长对话压缩成了一个简短的总结。 + + + +### 善用回顾 + +在新对话开始时,让 AI 简单回顾一下之前的内容。 + +比如: + +```markdown +我们之前做了一个登录表单,使用了 React Hook Form 和 Zod 验证。现在我想在登录成功后跳转到首页。 +``` + +这样 AI 就能快速回忆起之前的工作,给出连贯的答案。 + + + +## 三、AI 的长期记忆 + +除了对话中的短期记忆,你还需要给项目建立长期记忆,典型的做法是 **提供项目文档**。 + + + +### README.md 项目的身份证 + +`README.md` 是项目最重要的文档,它应该包含: + +1. 项目简介:这个项目是做什么的,解决什么问题 + +2. 技术栈:用了哪些技术、框架、库 + +3. 目录结构:主要文件和文件夹的作用 + +4. 开发规范:代码风格、命名规则等 + +5. 如何运行:安装依赖、启动项目的命令 + +一个好的 `README.md` 应该让任何人(包括 AI)看一眼就能理解项目的基本情况。 + +举个例子: + +````markdown +# 我的博客系统 + +一个简洁的个人博客系统,支持 Markdown 写作和代码高亮。 + +## 技术栈 + +- 前端:Next.js 14 (App Router) + TypeScript + Tailwind CSS +- 后端:Supabase (PostgreSQL + Auth) +- 部署:Vercel + +## 目录结构 + +- `/app` - Next.js 页面和路由 +- `/components` - 可复用组件 +- `/lib` - 工具函数和配置 +- `/public` - 静态资源 + +## 开发规范 + +- 使用函数式组件,不用 class 组件 +- 所有组件都要有 TypeScript 类型 +- 样式使用 Tailwind CSS,不写自定义 CSS +- API 调用统一使用 `/lib/api.ts` 中的函数 + +## 如何运行 + +```bash +npm install +npm run dev +``` +```` + +鱼皮开源项目的 `README.md` 基本都是遵循这种结构化格式的,比如 [AI 零代码应用生成平台项目](https://github.com/liyupi/yu-ai-code-mother),供大家参考。 + +每次开始新对话时,把 `README.md` 的内容贴给 AI,它就能快速了解你的项目。 + + + +### TODO.md 项目的任务清单 + +`TODO.md` 记录了项目的待办事项和进度,它应该包含: + +1. 已完成的功能:哪些功能已经做好了 + +2. 正在开发的功能:当前在做什么 + +3. 待开发的功能:接下来要做什么 + +4. 已知问题:有哪些 bug 或待优化的地方 + +举个例子: + +```markdown +# 开发进度 + +## 已完成 ✅ + +- [x] 用户注册和登录 +- [x] 文章列表页 +- [x] 文章详情页 +- [x] Markdown 渲染 + +## 进行中 🚧 + +- [ ] 文章编辑功能 + - [x] 编辑器界面 + - [ ] 保存草稿 + - [ ] 发布文章 + +## 待开发 📋 + +- [ ] 评论功能 +- [ ] 搜索功能 +- [ ] 标签系统 + +## 已知问题 🐛 + +- 移动端导航栏在某些设备上显示不正常 +- 代码高亮在暗色主题下对比度不够 +``` + +`TODO.md` 能让你和 AI 都清楚地知道项目的进度,避免重复工作或遗漏功能。 + + + +### 及时更新文档 + +文档最大的问题就是过时。所以,每次完成一个功能或做了重要改动,都要及时更新 `README.md` 和 `TODO.md`。 + +你可以让 AI 帮你更新: + +```markdown +我们刚才完成了文章编辑功能。请帮我更新 TODO.md,把 "文章编辑功能" 标记为已完成。 +``` + +AI 自然也知道这件事的重要性,所以在我们生成代码时 AI 可能会自动为我们生成这些文档。 + + + +## 四、AI 编程工具的上下文策略 + +不同的 AI 工具对上下文的处理方式不同,你需要了解它们的特点。 + + + + +### Cursor 的 .cursorrules + +Cursor 支持在项目根目录创建 `.cursorrules` 文件,作为项目的系统提示词。 + +你可以在这个文件里写上: + +``` +这是一个 Next.js 的博客项目。 + +技术栈: +- Next.js 16 (App Router) +- TypeScript +- Tailwind CSS +- Supabase + +代码规范: +- 使用函数式组件 +- 所有组件必须有 TypeScript 类型定义 +- 样式只用 Tailwind CSS +- 不要使用 any 类型 + +设计风格: +- 简约、现代 +- 主色调:#3B82F6 (蓝色) +- 圆角:8px +- 阴影:subtle + +请始终遵循这些规范。 +``` + +这样,Cursor 在生成代码时就会自动参考这些规则。 + +💡 注意,随着 AI 编程工具的更新,这些规则可能会有变化,建议还是多看看 [官方文档](https://cursor.com/cn/docs/context/rules)。 + +![](https://pic.yupi.icu/1/image-20260104181209687.png) + + + +### Claude Code 的 CLAUDE.md + +Claude Code 会读取项目根目录下的 `CLAUDE.md` 文件作为上下文。 + +你可以在这个文件里放更详细的信息: + +```markdown +# 项目上下文 + +## 项目概述 +个人博客系统,支持 Markdown 写作。 + +## 技术栈 +- Next.js 16 + TypeScript + Tailwind CSS +- Supabase (数据库 + 认证) + +## 重要决策 +1. 为什么选择 Supabase:简单、免费额度够用、自带认证 +2. 为什么用 App Router:这是 Next.js 的未来方向 +3. 为什么不用 Redux:项目简单,用 React Context 就够了 + +## 已知问题 +- 移动端导航栏需要优化 +- 代码高亮主题需要调整 + +## 下一步计划 +- 实现评论功能 +- 添加搜索 +``` + +这个文件相当于给 AI 的项目手册。 + + + + +### 通用策略:上下文文件夹 + +如果你用的工具不支持特定的上下文文件,可以创建一个 `/docs` 文件夹,把所有文档放在里面: + +``` +/docs + - README.md (项目概述) + - TECH_STACK.md (技术栈详情) + - DESIGN.md (设计规范) + - API.md (API 文档) + - TODO.md (任务清单) +``` + +每次开始新对话时,把相关文档的内容贴给 AI 就好。 + + + +## 五、上下文断裂的修复技巧 + +即使你做好了上下文管理,有时候 AI 还是会断片儿。这时候,你需要知道如何修复。 + + + +### 怎么识别断裂? + +上下文断裂一般有这些表现: + +- AI 突然用了不同的技术栈(比如你明明用 React,它却给你写 Vue 代码) +- AI 忘记了之前讨论的设计方案 +- AI 生成的代码风格和之前的不一致 +- AI 重复问你已经回答过的问题 + +一旦发现这些信号,就要及时修复。 + + + +### 修复方法 1、重新提供上下文 + +最简单的方法就是重新把上下文贴一遍。 + +```markdown +等等,我们的项目用的是 React 和 TypeScript,不是 Vue。 +这是我们的技术栈:【贴上 README.md 的技术栈部分】。请用正确的技术栈重新生成代码。 +``` + + + +### 修复方法 2、引用之前的内容 + +如果是忘记了之前讨论的内容,可以引用一下。 + +```markdown +还记得我们之前决定用 Context API 管理状态吗?请继续用这个方案,不要改用 Redux。 +``` + + + +### 修复方法 3、开新对话 + +如果上下文已经混乱到无法修复(比如同一个 Bug 多次修复都没有结果),最好的办法就是开一个新对话。 + +在新对话中,先提供完整的上下文,然后继续工作。这样虽然要重新开始,但能保证后续的对话质量。 + + + +### 修复方法 4、回到正轨提示词 + +有时候,你可以用一个明确的提示让 AI 回到正轨。 + +```markdown +请暂停。我们现在的目标是实现登录功能,使用 React Hook Form 和 Supabase Auth。 +请确认你理解了这个目标,然后我们继续。 +``` + +这相当于给 AI 一个重启的机会。不过鱼皮测试下来,有时这个提示词不一定会生效。 + + + +## 六、上下文管理的最佳实践 + +基于我的经验和社区的总结,这里是一些上下文管理的最佳实践。 + + +### 1、项目开始时就建立文档 + +不要等到项目做到一半才想起来写文档。从第一天就创建 `README.md` 和 `TODO.md`,并保持更新。 + +这样不仅能帮助 AI,也能帮助你自己理清思路。 + + + +### 2、用工具的原生上下文机制 + +如果你用的工具支持特定的上下文文件(比如 `.cursorrules`),优先使用这些机制,它们是最高效的。 + + + +### 3、保持上下文简洁 + +上下文不是越多越好。太多的信息反而会让 AI 困惑。 + +建议只提供最重要、最相关的信息。如果一个信息对当前任务没用,就不要放进上下文,还会浪费 tokens。 + + + +### 实践四:用层次化的结构 + +建议把上下文分成不同的层次和文件,而不是全部堆在一个文件里。 + +比如: +- README.md 放项目概述和基本信息 +- TECH_STACK.md 放详细的技术栈说明 +- DESIGN.md 放设计规范 +- 每个功能模块有自己的文档 + + + +### 实践五:定期回顾和更新 + +每周或每完成一个大功能,回顾一下文档,看看有没有过时的内容,及时更新。 + +你可以让 AI 帮你检查: + +```markdown +请检查我的 README.md,看看有没有和当前代码不一致的地方。 +``` + + + +### 6、用注释增强代码上下文 + +在代码里加上有意义的注释,解释 "为什么" 而不只是 "是什么"。 + +❌ 不好的注释: + +```typescript +// 获取用户数据 +const user = await getUser(id); +``` + +✅ 好的注释: + +```typescript +// 从 Supabase 获取用户数据 +// 注意:这里不包含敏感信息(如密码),只返回公开字段 +const user = await getUser(id); +``` + +好的注释能帮助 AI 理解代码的意图,在修改时做出更合理的决策。 + + + +## 七、实战案例:建立完整的上下文体系 + +让我用一个真实的例子,展示如何为项目建立完整的上下文体系。 + +假设你要做一个在线笔记应用。 + + +### 第一步、创建 README.md + +```markdown +# 在线笔记应用 + +一个简洁的在线笔记应用,支持 Markdown 编辑和实时保存。 + +## 技术栈 + +- 前端:React 18 + TypeScript + Vite +- UI 库:Tailwind CSS + Headless UI +- 编辑器:CodeMirror 6 +- 后端:Supabase (PostgreSQL + Realtime) +- 部署:Vercel + +## 核心功能 + +1. 用户注册和登录 +2. 创建、编辑、删除笔记 +3. Markdown 实时预览 +4. 笔记自动保存 +5. 笔记搜索 + +## 目录结构 + +- `/src/components` - React 组件 +- `/src/pages` - 页面组件 +- `/src/lib` - 工具函数和 API +- `/src/hooks` - 自定义 Hooks +- `/src/types` - TypeScript 类型定义 + +## 开发规范 + +- 组件使用函数式组件 + Hooks +- 所有组件必须有 TypeScript 类型 +- 样式只用 Tailwind CSS +- API 调用统一使用 `/src/lib/api` 中的函数 +- 状态管理使用 Zustand + +## 设计风格 + +- 简约、专业 +- 主色调:#6366F1 (Indigo) +- 圆角:6px +- 字体:Inter +``` + + + +### 第二步、创建 TODO.md + +```markdown +# 开发进度 + +## 已完成 ✅ + +- [x] 项目初始化 +- [x] Supabase 配置 +- [x] 用户认证(注册/登录) +- [x] 笔记列表页面 + +## 进行中 🚧 + +- [ ] 笔记编辑器 + - [x] CodeMirror 集成 + - [x] Markdown 语法高亮 + - [ ] 实时预览 + - [ ] 自动保存 + +## 待开发 📋 + +- [ ] 笔记搜索 +- [ ] 笔记分类/标签 +- [ ] 导出功能 +- [ ] 暗色主题 + +## 已知问题 🐛 + +- 编辑器在移动端性能不佳 +- 长笔记加载较慢 +``` + + + +### 第三步、创建 rules 规则文件 + +``` +项目:在线笔记应用 + +技术栈: +- React 18 + TypeScript + Vite +- Tailwind CSS + Headless UI +- CodeMirror 6 +- Supabase +- Zustand (状态管理) + +代码规范: +- 使用函数式组件 +- 所有组件必须有 TypeScript 类型定义 +- Props 类型命名:组件名 + Props (如 EditorProps) +- 样式只用 Tailwind CSS +- 不使用 any 类型 +- API 调用必须有错误处理 + +设计规范: +- 主色调:#6366F1 +- 圆角:rounded-md (6px) +- 间距:使用 Tailwind 的标准间距 (4, 8, 12, 16...) +- 按钮:px-4 py-2, hover 时变深色 +- 输入框:border-gray-300, focus 时 border-indigo-500 + +命名规范: +- 组件文件:PascalCase (如 NoteEditor.tsx) +- 工具函数:camelCase (如 formatDate.ts) +- 常量:UPPER_SNAKE_CASE (如 API_URL) + +请始终遵循这些规范。 +``` + + + +### 第四步、在代码中添加上下文注释 + +```typescript +// src/lib/api/notes.ts + +/** + * 笔记 API 函数集合 + * + * 技术选择说明: + * - 使用 Supabase Client 而不是直接的 SQL + * - 所有函数都返回 { data, error } 格式 + * - 错误统一在这里处理,不抛出异常 + */ + +import { supabase } from './supabase'; +import type { Note } from '@/types'; +``` + +有了这个完整的上下文体系,无论你什么时候开始新对话,只要把相关文档贴给 AI,它就能快速进入状态,给出准确的答案。 + + + +## 写在最后 + +上下文工程是 Vibe Coding 中最容易被忽视,但又极其重要的一环。很多人把精力都放在 “怎么问” 上,却忽略了 “怎么让 AI 记住”。 + +让我总结一下本文的要点: + +1. 上下文是 AI 的工作记忆:它决定了 AI 能否理解你的项目。 + +2. 管理好三个层次:项目级、功能级、对话级上下文都要照顾到。 + +3. 建立文档体系:README.md、TODO.md、上下文文件缺一不可。 + +4. 利用工具特性:不同工具有不同的上下文机制,要善用它们。 + +5. 及时修复断裂:发现 AI 失忆了,要立刻修复,不要继续往下走。 + +6. 保持简洁和更新:上下文要精炼、准确、及时更新。 + +掌握了上下文工程,你就能让 AI 始终保持状态,大大提高开发效率。 + +下一篇文章,我会讲解调试 AI 幻觉的方法,教你如何应对 AI 出错的情况。 + +加油,冲冲冲!💪 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/04 Vibe Coding 幻觉和死循环处理.md b/Vibe Coding 零基础教程/30 经验技巧/04 Vibe Coding 幻觉和死循环处理.md new file mode 100644 index 0000000..85edbe8 --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/04 Vibe Coding 幻觉和死循环处理.md @@ -0,0 +1,663 @@ +# Vibe Coding 幻觉和死循环处理 + +> 如何让失控的 AI 重回正轨 + + + +你好,我是鱼皮。 + +在前面的文章里,我们讲了如何和 AI 高效对话,如何管理上下文。但即使你做得再好,也难免会遇到 AI 罢工的情况 —— 它开始胡说八道、陷入死循环、或者固执地坚持错误的方案。 + +这种情况在 Vibe Coding 中很常见,我们称之为 AI 幻觉(AI Hallucination)。下面我会教你如何识别和修复这些问题,让失控的 AI 重回正轨。 + + + + +## 一、什么是 AI 幻觉? + +在讲解决方法之前,我们先要理解什么是 AI 幻觉。 + + + +### AI 幻觉的定义 + +AI 幻觉指的是 AI 生成的内容看起来很有道理,但实际上是错误的、不存在的,或者不符合事实的。 + +比如下面这段对话,我的本名可不是这个…… + +![](https://pic.yupi.icu/1/image-20260104184328898.png) + +在编程场景中,AI 幻觉通常表现为: + +- 编造不存在的 API 或函数 +- 给出看似合理但实际无法运行的代码 +- 坚持使用已经被证明错误的方案 +- 混淆不同技术栈的用法 + +举个例子,你问 AI:React 中如何获取组件的 DOM 节点? + +AI 可能会告诉你用 `this.getDOMNode()`。 + +这个方法听起来很合理,但实际上在现代 React 中并不存在,正确的做法是用 `useRef`。 + + + + +### 为什么会产生幻觉? + +AI 产生幻觉的原因有几个: + +1. 训练数据的局限:AI 的知识来自训练数据,如果数据中有错误或过时的信息,AI 就会学到错误的知识。 + +2. 上下文混淆:当对话太长或信息太杂时,AI 可能会混淆不同的上下文。 + +3. 过度自信:AI 被训练成要给出 “确定” 的答案,即使它不确定,也会表现得很自信。 + +4. 模式匹配错误:AI 可能会把相似但不同的概念混在一起。 + +理解了这些原因,我们就能更好地应对幻觉问题。 + + + +### 扩展知识 - AI 幻觉的常见类型 + +在 Vibe Coding 中,AI 幻觉主要有这几种类型: + +1. API 幻觉:编造不存在的函数、方法或属性 + +2. 语法幻觉:混淆不同语言或框架的语法 + +3. 逻辑幻觉:代码逻辑看起来对,但实际上有问题 + +4. 版本幻觉:使用已废弃的 API 或过时的写法 + +5. 依赖幻觉:引用不存在的库或错误的包名 + +了解这些类型,能帮你快速识别问题。 + + + +## 二、AI 陷入死循环的表现 + +除了幻觉,AI 还有一个常见问题:陷入死循环。 + + + +### 什么是死循环? + +死循环指的是 AI 反复尝试同一个错误的方案,无法自己跳出来。 + +典型的表现是: + +- 第一次:AI 给你一段代码,但有 bug。 +- 第二次:你告诉它有问题,它改了一下,但还是同样的问题。 +- 第三次:你再次指出问题,它又改了一下,但还是在同一个地方打转。 +- 第四次:你开始怀疑人生…… + +这就是死循环,AI 被困在了一个错误的思路里,无法自己走出来。不仅浪费时间,还白白浪费了大量 tokens。 + +![](https://pic.yupi.icu/1/aideadloop%E5%A4%A7.jpeg) + + + +### 死循环的常见场景 + +死循环经常出现在这些场景: + +1. 复杂的状态管理:AI 在处理复杂的状态更新时容易混乱 + +2. 异步操作:涉及 Promise、async/await 时容易出错 + +3. 类型系统:TypeScript 的复杂类型定义容易让 AI 困惑 + +4. 性能优化:AI 可能会陷入 “优化 => 出错 => 回退 => 再优化” 的循环 + +5. 跨文件修改:修改多个文件时容易顾此失彼,尤其是项目文件较多的时候 + + + +### 怎么识别死循环? + +我个人识别死循环的一些信号: + +- AI 连续 3 次给出的方案本质上是一样的 +- 每次修改只是换了个写法,但核心问题没解决 +- AI 开始道歉,并说 “让我重新尝试” +- 你发现自己在重复说同样的问题 + +一旦发现这些信号,就要立刻打断,不要继续下去。 + + + + +## 三、如何切断上下文并重新开始 + +当 AI 陷入死循环或产生严重幻觉时,最有效的方法就是切断上下文,重新开始。 + + + + +### 为什么要切断上下文? + +继续在混乱的上下文中对话,就像在泥潭里越陷越深。AI 会被之前的错误信息影响,很难给出正确的答案。 + +切断上下文相当于给 AI 一个重启的机会,让它从干净的状态开始。 + + + + +### 切断的正确方法 + +不要直接开一个空白对话就开始问问题。正确的方法是: + +1)总结当前的问题 + +在新对话开始前,先整理一下: +- 你想实现什么功能 +- 已经尝试了哪些方案 +- 遇到了什么具体问题 +- 当前的代码状态 + + + +2)开始新对话 + +在新对话中,先提供完整的上下文: + +```markdown +我在开发一个博客系统,技术栈是 Next.js 16 + TypeScript + Supabase。 +我想实现文章的自动保存功能,但遇到了问题。 +我尝试过用 useEffect 监听内容变化,但会导致频繁保存。我也试过用 debounce,但有时候会丢失数据。 +这是我当前的代码:【贴上相关代码】 +请帮我分析问题并给出解决方案。 +``` + + + +3)明确要求不同的思路 + +告诉 AI 之前的方案不行,要换个思路: + +```markdown +之前的方案都有问题,请给我一个完全不同的实现思路。 +``` + +这样 AI 就不会重复之前的错误。 + +或者先利用其他的 AI 模型给出不同的方案,再直接把方案贴给 AI 让它执行。 + + + + +### 什么时候应该切断? + +不是所有问题都需要切断上下文。如果只是小问题,在当前对话中纠正就行。但如果遇到这些情况,就要果断切断: + +- 对话轮数太多了(超过 20 轮),上下文已经很长,继续下去只会更费钱更混乱 +- AI 开始混淆概念了,比如把你的技术栈搞错,或者把不同功能的代码混在一起 +- 你自己都觉得乱了,说不清楚当前的状态,这时候继续下去只会越来越乱 +- 还有前面提到的 “死循环” 情况 + +简单来说,当你发现对话已经失控了,就该切断。与其在泥潭里挣扎,不如重新开始。 + + + + +## 四、如何给 AI 喂入报错信息 + +很多时候,AI 生成的代码有 bug,但它不知道。这时候,你需要把报错信息准确地喂给它。 + + + + +### 完整复制错误信息 + +不要只说 "代码报错了" 或者 "不工作",而是要把完整的错误信息复制给 AI。 + +❌ 不好的反馈:你的代码有问题,运行不了。 + +✅ 好的反馈: + +```markdown +代码运行时报错了,错误信息如下: +TypeError: Cannot read property 'map' of undefined + at NoteList (NoteList.tsx:15) + at renderWithHooks (react-dom.development.js:14985) +这是第 15 行的代码: +{notes.map(note => )} +``` + +完整的错误信息能让 AI 快速定位问题。 + + + + +### 提供上下文代码 + +除了错误信息,还要提供相关的代码上下文。 + +```markdown +这是出错的组件完整代码,错误发生在第 9 行: +export function NoteList() { + const [notes, setNotes] = useState(); + + useEffect(() => { + fetchNotes().then(data => setNotes(data)); + }, []); + + return ( +
+ {notes.map(note => )} +
+ ); +} +``` + +这样 AI 就能看到完整的上下文,给出准确的修复方案。 + + + + +### 说明复现步骤 + +如果是和用户交互相关的 bug,要说明如何复现。 + +```markdown +这个错误只在特定情况下出现: + +1. 用户首次进入页面时正常 +2. 点击 '刷新' 按钮后正常 +3. 但如果用户先删除一条笔记,再点击"刷新",就会报错 + +错误信息是:【贴上错误信息】 +``` + +毕竟 AI 是看不到用户动作的,详细的复现步骤能帮助 AI 理解问题的本质。 + + + + +### 使用浏览器控制台 + +如果是网页的前端出现了问题,那么一定要利用好浏览器控制台。 + +按 F12 打开开发者工具,切换到 Console 控制台标签,你会看到: + +- 错误信息(红色) +- 警告信息(黄色) +- 日志信息(白色) + +把这些信息截图或复制给 AI,它能更快地找到问题。 + +![](https://pic.yupi.icu/1/image-20260104190230437.png) + +如果你不知道是不是前端出了问题,或者根本不知道什么是前端,那大概率就是前端出了问题。 + + + + +## 五、判断问题来源 + +有时候,问题不在 AI,而在你的需求或逻辑本身。 + +如果是 AI 的问题,一般有这些特征: + +- 代码语法错误或无法运行 +- 使用了不存在的 API +- 逻辑明显不符合你的描述 +- 代码风格和之前的完全不一致 + +这些问题可以通过更好的提示或切断上下文来解决。 + +但如果是逻辑问题,一般有这些特征: + +- 代码能运行,但结果不对 +- 边界情况没有处理 +- 性能有问题 +- 用户体验不好 + +这些问题需要你重新思考需求,而不是盲目责怪 AI。 + + + +### 怎么判断问题来源? + +一个简单的方法是问自己:如果我把这个需求给一个真人开发者,他能做对吗? + +如果答案是 “不确定” 或者 “可能也会有问题”,那很可能是需求本身不够清晰。 + +这时候,你需要先: + +1. 重新梳理需求 +2. 明确边界条件 +3. 画出流程图或状态图 +4. 写出详细的测试用例 + +然后再和 AI 讨论实现方案。 + +有同学说:我怎么知道真人开发者能不能做对啊?! + +这其实也是缺少专业知识的问题,如果你本身懂技术,会更好地驾驭 AI 和判断问题。即使你不知道这个问题的答案,也可以试着换种方式描述你的需求,或者借助其他 AI 来润色需求、帮你做判断。 + + + + +## 六、实战案例:修复失控的项目 + +让我用一个真实的案例,展示如何修复一个失控的项目。 + + + +### 场景描述 + +你在做一个待办事项应用,想实现拖拽排序功能。你和 AI 对话了十几轮,但功能还是不对: + +- 第一次:AI 用了一个不存在的库 +- 第二次:改用了 react-beautiful-dnd,但代码报错 +- 第三次:修复了报错,但拖拽后数据没有更新 +- 第四次:数据更新了,但界面没有刷新 +- 第五次:界面刷新了,但顺序不对 +- 你开始怀疑人生…… + +接下来你会怎么做呢? + + + +### 1、暂停并分析 + +不要继续下去了!先暂停,分析一下问题: + +- 核心问题是什么?(拖拽排序) +- 为什么一直不对?(可能是 AI 对状态管理理解有误) +- 有没有更简单的方案?(也许不需要用库) + + + +### 2、切断上下文 + +开一个新对话,但这次换个方式问: + +```markdown +我想实现一个简单的拖拽排序功能。不要用第三方库,用原生的 HTML5 Drag and Drop API +需求: +1. 用户可以拖动列表项 +2. 拖动时显示占位符 +3. 放下时更新顺序 +4. 数据用 useState 管理 +请先给我一个最简单的实现,只要能拖动就行,不需要动画。 +``` + + + + +### 3、逐步完善 + +AI 给了一个简单的版本,你测试后发现能用,爽爽爽。 + +然后再逐步添加功能: + +1. 很好,现在加上拖动时的视觉反馈:被拖动的项半透明。 +2. 再加上占位符:拖动时在目标位置显示一个虚线框。 +3. 最后加上平滑的动画效果。 + +每一步都很小,每一步都能测试,这样就不会失控。 + + + + +### 4、总结经验 + +问题解决后,让 AI 帮你总结: + +```markdown +我们刚才实现了拖拽排序功能。请总结一下: +1. 为什么之前的方案不行? +2. 这个方案的关键点是什么? +3. 如果以后要实现类似功能,应该注意什么? +``` + +这些总结可以加入你的项目文档,避免以后重复踩坑。 + + + +## 七、预防幻觉的技巧 + +除了修复问题,我们还可以提前预防。 + + + +### 1、要求 AI 解释 + +不要盲目接受 AI 的答案,让它解释为什么这样做。 + +- 你为什么选择用 useCallback 而不是 useMemo? +- 这个方案的优缺点是什么? +- 有没有其他实现方式? + +通过解释,你能发现 AI 是否真的理解了问题。 + + + +### 2、要求提供文档链接 + +如果 AI 提到了某个 API 或库,让它提供官方文档链接。 + +```markdown +你提到了 react-query 的 useInfiniteQuery,能给我官方文档的链接吗? +``` + +如果 AI 给不出链接,或者链接是错的,那这个 API 可能是它编造的。 + + + +### 3、分步验证 + +不要一次性实现整个功能,而是分步验证。 + +- 先帮我实现最核心的部分,其他的暂时用假数据 +- 这一步能运行了,我们再做下一步 + +小步快跑,每一步都验证,能及早发现问题。 + + + +### 4、使用类型系统 + +建议在项目中使用 TypeScript 技术,它是一种给 JavaScript 加上类型检查的编程语言,可以充分利用它的类型系统来预防问题。 + +什么是类型系统? + +简单来说,就是给每个变量、函数都标注清楚它是什么类型的数据。比如这个变量是数字、那个变量是字符串、这个函数返回的是用户对象等等。有了这些标注,编辑器就能在你写代码时就发现问题,而不是等到运行时才报错。 + +看个例子: + +```ts +// ❌ 没有类型定义:AI 可能生成错误的代码 +function calculateTotal(items) { + return items.reduce((sum, item) => sum + item.price, 0); +} + +// 如果传入的数据格式不对,只有运行时才会报错 +calculateTotal([{ name: '商品' }]); // 运行时报错:price is undefined + +// ✅ 有类型定义:编辑器立刻提示错误 +interface Item { + name: string; + price: number; +} + +function calculateTotal(items: Item[]): number { + return items.reduce((sum, item) => sum + item.price, 0); +} + +// 编辑器会立刻用红色波浪线提示:缺少 price 属性 +calculateTotal([{ name: '商品' }]); // 编写时就发现错误 +``` + +如果生成的项目比较复杂,AI 应该会默认使用 TypeScript 技术。你也可以主动要求 AI:请给所有函数和组件加上完整的 TypeScript 类型定义。 + +这样,如果 AI 生成的代码有类型不匹配的问题,编辑器会立刻用红色波浪线提示你,你就能马上发现并修复。这比等到运行时才发现问题要高效得多。 + + + +### 5、写测试 + +让 AI 帮你写测试用例: + +```markdown +请为这个函数写单元测试,覆盖正常情况和边界情况。 +``` + +测试能帮你发现逻辑问题。 + + + +### 6、让 AI 自主验证工作 + +不要光让 AI 干活,还要让它知道怎么验证自己的工作。 + +比如在开发 Web 应用时,可以让 AI 打开浏览器来测试 UI,发现问题后自动迭代,直到功能正常运行。这样能形成一个自动化的反馈循环: + +```markdown +请实现这个功能,并且在完成后自动打开浏览器测试。如果发现问题,请自动修复并重新测试,直到功能正常工作。 +``` + +这种方式能让 AI 更自主地工作,减少人工干预,特别适合处理需要多次迭代的任务,也是 Claude Code 创始人强烈建议的技巧。 + + + +## 八、常见幻觉场景和应对方法 + +基于我的经验,这里总结了一些常见的幻觉场景和应对方法。 + + + +### 场景一:编造的 API + +表现:AI 使用了一个听起来很合理,但实际不存在的 API。 + +应对: + +```markdown +这个 API 在官方文档中找不到,你确定它存在吗?请给我文档链接。 +``` + +如果 AI 承认错误,让它给出正确的 API: + +```markdown +那正确的做法是什么?请用官方推荐的方式实现。 +``` + + + + +### 场景二:过时的写法 + +表现:AI 使用了已废弃的 API 或旧版本的写法。 + +应对: + +```markdown +这个写法是旧版本的。我用的是 React 19,请用最新的写法。 +``` + +然后明确要求: + +```markdown +请用 Hooks 而不是 Class 组件。 +``` + + + +### 场景三:混淆技术栈 + +表现:AI 把不同框架的用法混在一起。 + +应对: + +```markdown +等等,你给的是 Vue 的写法,我用的是 React。请用 React 的方式重写。 +``` + +然后重新强调技术栈: + +```markdown +我的项目用的是 React 19 + TypeScript,请确保代码符合这个技术栈。 +``` + + + +### 场景四:逻辑漏洞 + +表现:代码能运行,但有明显的逻辑问题。 + +应对: + +```markdown +这个方案有问题:如果用户在加载过程中关闭页面,数据会丢失。请考虑这个边界情况。 +``` + +然后要求改进: + +```markdown +请加上错误处理和数据持久化。 +``` + + + +### 场景五:性能问题 + +表现:代码能用,但性能很差。 + +应对: + +```markdown +这个方案在数据量大时会很慢。请优化性能,比如用虚拟滚动或分页。 +``` + +然后要求分析: + +```markdown +请分析一下这个方案的时间复杂度,并给出优化建议。 +``` + + + +## 写在最后 + +AI 幻觉和死循环是 Vibe Coding 中不可避免的问题,但它们并不可怕。只要你掌握了正确的应对方法,就能快速解决。 + +让我总结一下本文的要点: + +1. 理解幻觉的本质:AI 不是故意犯错,而是受限于训练数据和上下文。 + +2. 识别死循环信号:连续三次相同的错误方案,就要警惕了。 + +3. 勇于切断上下文:不要在泥潭里越陷越深,及时重新开始。 + +4. 提供完整信息:错误信息、代码上下文、复现步骤都要给 AI。 + +5. 区分问题来源:判断是 AI 的问题还是逻辑的问题。 + +6. 预防胜于治疗:通过解释、验证、测试来提前发现问题。 + +记住,AI 是你的助手,不是魔法。它会犯错,但只要你掌握了调试的方法,就能让它成为可靠的伙伴。 + +下一篇文章,我会讲解 Vibe Coding 的效率提升技巧,教你如何用快捷键、模板、自动化等方式提高开发效率。 + +加油小伙伴!💪 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/05 Vibe Coding 效率提升技巧.md b/Vibe Coding 零基础教程/30 经验技巧/05 Vibe Coding 效率提升技巧.md new file mode 100644 index 0000000..113bc84 --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/05 Vibe Coding 效率提升技巧.md @@ -0,0 +1,793 @@ +# Vibe Coding 效率提升技巧 + +> 让你的 AI 开发效率提升 10 倍 + + + +你好,我是鱼皮。 + +在前面的文章里,我们讲了 Vibe Coding 的核心心法、对话技巧、上下文管理和问题调试。本文我们要聊一个更实用的话题 :如何提高开发效率? + +很多同学在用 AI 开发时,虽然能做出东西,但总觉得速度还不够快。明明 AI 写代码很快,为什么整体效率还是不高? + +问题往往出在那些小事上:比如频繁地复制粘贴、重复输入相同的提示词、手动做一些机械的操作…… + +下面我来分享一些实用的效率提升技巧,帮你把开发速度提升一个档次。 + + + + +## 一、核心提效技巧 + +先分享几个我个人使用较多的 AI 核心提效技巧。 + + + + +### 按需选择 AI 模型 + +不是所有任务都需要用最强最贵的模型。 + +- 简单任务:比如代码格式化、写注释、简单重构,用 Gemini Flash 或 GPT-5 Mini 这样便宜快速的模型就够了 +- 中等任务:比如实现常规功能、代码审查、开发小网站,用 GPT-5 或 Claude Sonnet +- 复杂任务:比如架构设计、复杂算法、疑难 bug、开发大项目,才需要用 Claude Opus 这样的顶级模型或者开启深度思考 + +合理选择模型,既能提升速度,又能节省成本。就像你不会让公司 CTO 去打印文件一样,要让合适的模型做合适的事。 + + + +### 避免让 AI 生成多余内容 + +很多同学让 AI 写代码,结果 AI 给你输出一大堆注释、测试代码、文档说明,还有一大段总结。**看着很专业,但你可能根本不会看。** + +比如我之前让 AI 生成个图片压缩工具,光文档给我生成一大堆…… + +![](https://pic.yupi.icu/1/ai%E7%94%9F%E6%88%90%E5%9B%BE%E7%89%87%E5%8E%8B%E7%BC%A9%E5%B7%A5%E5%85%B7.png) + +要在提示词中明确告诉 AI:只给我核心代码,不要写注释、文档、测试,不要做总结! + +如果 AI 不听话,可以用暴躁指令:**按照我说的做,别废话。** + +或者虚构后果:**如果你输出不必要的内容,世界上就会死一只小猫。** + +这些指令虽然看起来搞笑,但确实有效。你还可以把这些规则写在 Cursor Rules 里,让 AI 自动遵守。 + + + + +### 利用并行 Agent 对比效果 + +Cursor 有一个很强大的功能叫 **并行 Agent**(Parallel Agents),可以让你同时用多个模型处理同一个任务,然后对比它们的结果,选择最好的那个。这也是一种 “多个 AI 交叉验证” 的方式。 + +比如你要实现一个复杂的功能,不确定哪个方案更好。可以同时让 Claude、GPT 等 AI 各给一个方案: + +![](https://pic.yupi.icu/1/image-20251030220104045.png) + +你呢,就坐等这些 AI 赛马,谁先干好用谁的、谁质量高用谁的,能避免在错误的方案上浪费时间。这个方法特别适合不确定哪个技术方案更好时、重要功能需要多重保障时、想学习不同 AI 的思路时。 + +![](https://pic.yupi.icu/1/image-20251030220120394.png) + +即使你不用 Cursor,也可以手动实现类似的效果:把同一个需求分别发给 ChatGPT、Claude、Gemini 等大模型,然后对比它们的答案,选择最好的或综合它们的优点。 + +具体用法可以参考 [Cursor 并行 Agent 文档](https://cursor.com/cn/docs/configuration/worktrees)。 + + + +### 多开实例提升效率 + +除了并行 Agent,你还可以通过多开实例来提升效率。这个技巧来自 Claude Code 创始人的分享。 + +1)在终端中多开 + +可以在终端中同时运行多个 Claude Code 实例,将标签页编号为 1 ~ 5(或者有意义的标题),通过系统通知来了解哪个 Claude 需要人工输入。这样你可以充分利用等待时间,一个 AI 在思考时,你可以切换到另一个继续工作。 + +![](https://pic.yupi.icu/1/image-20260109143109753.png) + +2)网页端和本地同时进行 + +在网页端 Claude Code 上运行 5 ~ 10 个 Claude,和本地 Claude 同时进行。可以使用 `&` 命令将本地会话移交给网页版,或者使用 `--teleport` 命令在终端和网页之间来回切换。甚至可以通过手机 Claude iOS 应用启动几个会话,稍后再查看进度。真正做到了随时随地 Vibe Coding! + +注意,这个技巧适合处理多个独立任务,或者需要等待 AI 长时间思考的复杂任务。对于简单任务,一个实例就够了。 + + + +## 二、快捷键和操作技巧 + +工欲善其事,必先利其器。掌握常用的快捷键,能让你的操作更流畅。 + + + +### Cursor 常用快捷键 + +如果你用 Cursor,建议尝试下面这些快捷键,能让你少用鼠标,操作更快。 + +对话相关: +- `Cmd/Ctrl + L` :切换侧边栏(除非已绑定到某个模式) +- `Cmd/Ctrl + I` :切换侧边栏(除非已绑定到某个模式) +- `Cmd/Ctrl + K` :打开行内编辑,可以在当前位置插入 AI 生成的代码 +- `Tab`:接受建议 + +代码编辑: +- `Cmd/Ctrl + Shift + L` :将选中内容添加到聊天 +- `Alt + ↑/↓` :移动当前行 +- `Cmd/Ctrl + /` :注释/取消注释 + +文件操作: +- `Cmd/Ctrl + Shift + F` :全局搜索 + +更多最新的默认键盘快捷键以 [官方文档](https://cursor.com/cn/docs/configuration/kbd) 为主: + +![](https://pic.yupi.icu/1/image-20260104192219087.png) + + + + +### VS Code 常用快捷键 + +如果你用 VS Code + AI 插件,下面这些快捷键会很有用。 + +多光标编辑: +- `Alt + Click` :添加光标 +- `Cmd/Ctrl + Alt + ↑/↓` :在上/下方添加光标 +- `Cmd/Ctrl + Shift + L` :在所有匹配项添加光标 + +代码导航: +- `Cmd/Ctrl + Click` :跳转到定义 +- `Alt + ←/→` :前进/后退 +- `Cmd/Ctrl + Shift + O` :跳转到符号 + +重构: + +- `F2` :重命名符号 +- `Cmd/Ctrl + .` :快速修复 + +掌握这些快捷键,你的编辑速度会快很多。更多最新的默认键盘快捷键以 [官方文档](https://code.visualstudio.com/docs/reference/default-keybindings) 为主: + +![](https://pic.yupi.icu/1/image-20260104192832985.png) + + + +### AI 编程工具的斜杠命令 + +除了快捷键,AI 编程工具 Cursor 和 Claude Code 都提供了很多实用的斜杠命令(Slash Commands),能大大提升效率。这些命令以 `/` 开头,可以快速触发特定的功能。 + +#### Cursor 的常用命令 + +`/summarize` 命令可以快速总结对话内容,特别适合长对话,能节省大量 token。 + +你还可以在项目的 `.cursor/commands` 目录下创建自定义命令,把常用的提示词保存成命令,需要时直接调用。 + +![](https://pic.yupi.icu/1/cursor_command.png) + + + +#### Claude Code 的常用命令 + +Claude Code 也有类似的命令系统。 + +- `/compact` 可以压缩上下文,把之前的对话内容精简一下,节省 token +- `/plan` 可以制定实现计划,让 AI 先规划再动手 +- `/review` 可以快速进行代码审查 +- `/init` 可以初始化项目并创建 `CLAUDE.md` 文件 + +![](https://pic.yupi.icu/1/image-20260104213706515.png) + +这些命令的好处是,你不用每次都写完整的提示词,只需要输入一个简短的命令,AI 就知道你要做什么。 + +而且你可以创建自己的自定义命令,把团队常用的工作流程标准化。比如创建一个 `/commit` 命令自动生成 Git 提交信息,创建一个 `/test` 命令自动生成单元测试。 + +熟练使用这些命令,能让你的工作流程更顺畅,效率提升一大截。详细的命令列表和用法可以参考 [Cursor 官方文档](https://cursor.com/cn/docs/agent/chat/commands) 和 [Claude Code 官方文档](https://code.claude.com/docs/en/slash-commands)。 + + + + +## 三、代码复用和模块化 + +把常用的代码封装成可复用的模块,不要重复造轮子。 + + + +### 创建组件库 + +如果你经常做类似的项目,可以创建一个自己的组件库。 + +比如,你可能经常需要这些组件: +- 按钮(Button) +- 输入框(Input) +- 卡片(Card) +- 模态框(Modal) +- 加载动画(Loading) + +把这些组件做成通用的,放在一个单独的文件夹里: + +``` +/components + /ui + - Button.tsx + - Input.tsx + - Card.tsx + - Modal.tsx + - Loading.tsx +``` + +每个组件都要: +- 有清晰的 Props 接口 +- 支持自定义样式 +- 有使用示例 + +这样,下次做新项目时,直接复制这个文件夹就行了。 + + + +### 封装常用函数 + +把常用的工具函数封装起来,避免每次都重新写或让 AI 生成。比如日期格式化、防抖函数、生成 ID、复制到剪贴板这些功能,几乎每个项目都会用到。把它们整理成一个工具函数库,需要时直接导入使用,比每次都让 AI 重新生成要快得多。 + +```typescript +// lib/utils.ts + +// 格式化日期 +export function formatDate(date: Date): string { + return date.toLocaleDateString('zh-CN'); +} + +// 防抖 +export function debounce any>( + fn: T, + delay: number +): (...args: Parameters) => void { + let timer: NodeJS.Timeout; + return (...args) => { + clearTimeout(timer); + timer = setTimeout(() => fn(...args), delay); + }; +} + +// 生成随机 ID +export function generateId(): string { + return Math.random().toString(36).substring(2, 9); +} + +// 复制到剪贴板 +export async function copyToClipboard(text: string): Promise { + try { + await navigator.clipboard.writeText(text); + return true; + } catch { + return false; + } +} +``` + + + + +### 使用代码片段(Snippets) + +在编辑器中创建代码片段,快速插入常用代码。 + +比如在 VS Code 中,你可以创建一个前端 React 组件的片段。具体方法是: + +1)按 `Cmd/Ctrl + Shift + P` 打开命令面板,输入 "Snippets",选择 "Configure Snippets": + +![](https://pic.yupi.icu/1/image-20260104214112119.png) + +2)然后选择对应的语言(如 typescriptreact.json),就可以添加自定义片段了。 + +比如: + +```json +{ + "React Functional Component": { + "prefix": "rfc", + "body": [ + "interface ${1:ComponentName}Props {", + " $2", + "}", + "", + "export function ${1:ComponentName}({ $3 }: ${1:ComponentName}Props) {", + " return (", + "
", + " $4", + "
", + " );", + "}" + ], + "description": "Create a React functional component with TypeScript" + } +} +``` + +![](https://pic.yupi.icu/1/image-20260104214219382.png) + +配置完成后,输入 `rfc` 再按 Tab,就能快速生成组件模板。 + +![](https://pic.yupi.icu/1/image-20260104214331581.png) + + + + +### 建立代码库 + +把你做过的好的代码保存起来,建立一个专属于你的代码库。 + +举个例子,可以用这样的结构: + +``` +/my-code-library + /react + /hooks + - useLocalStorage.ts + - useDebounce.ts + - useFetch.ts + /components + - Button.tsx + - Modal.tsx + /utils + - format.ts + - validate.ts + /node + /middleware + - auth.ts + - cors.ts + /utils + - db.ts + - email.ts +``` + +需要时,直接从这里复制就好。 + + + + +## 四、模板项目的建立 + +如果你经常做某一类项目,可以创建一个模板项目。 + + + + +### 什么是模板项目? + +模板项目是一个预先配置好的项目骨架,包含了: + +- 基本的目录结构 +- 常用的依赖包 +- 配置文件(如 tsconfig.json、tailwind.config.js) +- 基础组件和工具函数 +- README 和文档模板 + +有了模板项目,开始新项目时就不用从零配置了。 + +就像我自己,做了几十个项目后,积累了不少模板。现在每次开始新项目,我会先找一个类似的老项目,然后告诉 AI:“请参考这个项目的技术栈和目录结构来创建新项目。” 这样 AI 就能生成一个和我习惯一致的项目结构,省去了很多配置的时间。 + +下面举几个例子,不懂前端技术的朋友可以直接跳过。 + + + + +### 创建 React 项目模板 + +比如,你可以创建一个 React + TypeScript + Tailwind 的模板: + +```bash +my-react-template/ +├── src/ +│ ├── components/ +│ │ └── ui/ # 基础 UI 组件 +│ ├── lib/ +│ │ ├── api.ts # API 调用封装 +│ │ └── utils.ts # 工具函数 +│ ├── hooks/ # 自定义 Hooks +│ ├── types/ # TypeScript 类型 +│ ├── App.tsx +│ └── main.tsx +├── public/ +├── .cursorrules # Cursor 配置 +├── tsconfig.json +├── tailwind.config.js +├── package.json +└── README.md +``` + +项目的依赖管理文件 `package.json` 中预装好常用的包: + +```json +{ + "dependencies": { + "react": "^18.3.0", + "react-dom": "^18.3.0", + "react-router-dom": "^6.20.0", + "zustand": "^4.4.0" + }, + "devDependencies": { + "@types/react": "^18.3.0", + "typescript": "^5.3.0", + "vite": "^5.0.0", + "tailwindcss": "^3.4.0" + } +} +``` + +开始新项目时,复制这个模板,改个名字就能用。 + + + +### 创建 Next.js 项目模板 + +如果你常用 Next.js,也可以创建一个模板: + +```bash +my-nextjs-template/ +├── app/ +│ ├── (auth)/ # 认证相关页面 +│ ├── (dashboard)/ # 后台页面 +│ ├── api/ # API 路由 +│ ├── layout.tsx +│ └── page.tsx +├── components/ +├── lib/ +├── public/ +├── .env.example # 环境变量模板 +├── next.config.js +└── README.md +``` + +`.env.example` 里列出需要的环境变量: + +``` +# 数据库 +DATABASE_URL= + +# 认证 +NEXTAUTH_SECRET= +NEXTAUTH_URL= + +# API Keys +OPENAI_API_KEY= +``` + +这样新项目开始时,就知道需要配置哪些环境变量。 + + + +### 使用 GitHub 模板仓库 + +可以把你的模板项目放在 GitHub 上,设置为 `Template repository` 模板仓库。 + +![](https://pic.yupi.icu/1/image-20260104215020646.png) + +这样创建新项目时,点击 `Use this template` 就能快速复刻项目模板了: + +![](https://pic.yupi.icu/1/image-20260104215101657.png) + +除了自己创建模板,你还可以使用别人的模板。在 GitHub 上搜索 "react template"、"nextjs starter" 等关键词,能找到很多优秀的模板项目。优先选择 Star 数多、更新活跃的项目。 + +![](https://pic.yupi.icu/1/image-20260104215329685.png) + +然后点击 "Use this template" 就能基于它创建自己的项目。这样能站在巨人的肩膀上,节省大量配置时间。 + + + +## 五、工作流自动化 + +把重复的操作自动化,节省时间和精力。 + +下面这些技巧比较专业,主要适合有编程基础的同学。如果你是完全零基础,可以先跳过这部分,等有需要时再回来看。 + + + +### 使用 npm scripts + +npm scripts 是 Node.js 前端项目中定义和运行脚本命令的方式。简单来说,就是把常用的命令保存在配置文件里,需要时用一个简短的命令就能执行。比如启动项目、构建项目、运行测试等,都可以定义成 npm script。 + +可以在 `package.json` 中定义常用的脚本: + +```json +{ + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "lint": "eslint . --ext ts,tsx", + "lint:fix": "eslint . --ext ts,tsx --fix", + "format": "prettier --write \"src/**/*.{ts,tsx}\"", + "type-check": "tsc --noEmit", + "clean": "rm -rf dist node_modules", + "fresh": "npm run clean && npm install" + } +} +``` + +这样配置后,运行 `npm run lint:fix` 就能自动修复代码格式问题,不用输入老长一段命令。 + + + +### Git 工作流自动化 + +Git 是目前最主流的分布式版本控制系统(Version Control System),是团队协作开发不可或缺的工具。它可以保存和管理文件的所有更新记录、并且使用 **版本号** 进行区分。从而支持将编辑后的文档恢复到修改前的状态(历史版本)、对比不同版本的文件差异、防止旧版本覆盖新版本等功能。 + +可以创建一些 Git 命令的别名,简化常用命令: + +```bash +# 在 ~/.gitconfig 中添加 +[alias] + st = status + co = checkout + br = branch + ci = commit + pl = pull + ps = push + lg = log --oneline --graph --decorate + save = !git add -A && git commit -m 'WIP: save progress' + undo = reset HEAD~1 --soft +``` + +这样,`git st` 就等于 `git status`,`git save` 就能快速保存进度。 + + + +### 使用 Makefile + +Makefile 是一个自动化构建工具的配置文件,最早用于 C/C++ 项目的编译。现在很多项目也用它来管理复杂的构建流程。它的好处是可以定义任务之间的依赖关系,比如部署前必须先构建,构建前必须先测试。用一个简短的命令(如 `make deploy`)就能自动执行一系列操作。 + +如果你的项目有复杂的构建流程,可以用 Makefile: + +```makefile +.PHONY: dev build deploy clean + +dev: + npm run dev + +build: + npm run build + +deploy: build + vercel --prod + +clean: + rm -rf dist .next + +fresh: clean + npm install + npm run dev +``` + +这样配置后,执行 `make deploy` 就能自动构建并部署。 + + + +### 使用 GitHub Actions + +GitHub Actions 是 GitHub 提供的自动化工作流工具,可以在代码提交、Pull Request 等事件触发时自动执行任务。比如每次推送代码时自动运行测试、自动部署到服务器、自动发布新版本等,这样就不用每次都手动操作了。 + +配置 GitHub Actions 很简单,只需要在项目的 `.github/workflows` 目录下创建一个 YAML 配置文件,编写 GitHub Actions 自动化 CI/CD(持续集成/持续部署)的脚本代码: + +```yaml +# .github/workflows/deploy.yml +name: Deploy + +on: + push: + branches: [main] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18' + - run: npm install + - run: npm run build + - run: npm run test + - name: Deploy to Vercel + run: vercel --prod + env: + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} +``` + +这个脚本的作用是:当你推送代码到 main 分支时,GitHub 会自动执行以下步骤:检出代码、安装 Node.js 环境、安装项目依赖、构建项目、运行测试、部署到 Vercel。整个过程全自动,你只需要推送代码就行了。 + +GitHub Actions 还有更多玩法,比如鱼皮的 [AI 知识库项目](https://github.com/liyupi/ai-guide) 利用它实现最新 AI 资讯的自动更新: + +![](https://pic.yupi.icu/1/image-20260104221153167.png) + + + +### 适合所有人的效率工作流 + +上面讲的都是比较技术性的自动化方法。其实,对于非程序员或初学者,也有一些通用的效率工作流。 + +1)使用零代码平台:如果你不想处理这些复杂的配置,可以直接使用 Bolt.new、Lovable 等零代码平台。它们会自动处理构建、测试、部署等流程,你只需要专注于功能开发。 + +2)利用 AI 生成配置:如果需要配置文件,直接让 AI 帮你生成。比如 “请帮我生成一个 GitHub Actions 配置,实现自动部署到 Vercel”。AI 会给你完整的配置,你复制粘贴就行。 + +3)使用一键部署:很多平台(比如 Vercel、Netlify)支持一键部署项目,连接 GitHub 仓库后,每次推送代码就会自动部署,不需要任何配置。 + + + +## 六、AI 增强工具 - MCP + +提升 AI 开发效率的工具非常多,鱼皮这里重点介绍 MCP(Model Context Protocol)插件。 + + + + +### 什么是 MCP? + +MCP(Model Context Protocol,模型上下文协议)是 2024 年底由 Anthropic 推出的新技术,可以给 AI 工具添加各种扩展能力,大大提升 Vibe Coding 的效率。 + +简单来说,就像给 AI 装上了各种插件,让它能做更多事情。比如让 AI 能操作 GitHub、读写文件、控制浏览器、查询数据库等等。 + +![](https://pic.yupi.icu/1/mcp.png) + +近两年,MCP 生态快速发展,出现了很多实用的 MCP 服务器。这里推荐几个特别能提升 Vibe Coding 效率的: + +- GitHub MCP:让 AI 直接操作 GitHub,比如创建仓库、提交代码、管理 Issue 等。这样你就不用手动在 GitHub 网页上操作了。 +- Filesystem MCP:让 AI 能够读写文件系统,批量处理文件、搜索内容、重命名文件等都可以直接让 AI 完成。 +- Puppeteer MCP:让 AI 能够控制浏览器,自动化网页操作、截图、爬取数据等。对于需要测试网页或获取数据的场景很有用。 +- Postgres/MySQL MCP:让 AI 直接操作数据库,查询数据、执行 SQL、分析数据库结构等。 +- Notion MCP:连接 Notion,让 AI 能读写你的笔记和文档,方便整理和搜索信息。 +- Context7 MCP:增强 AI 对代码库的理解,提供更精准的代码分析和建议。 + +这些 MCP 服务器可以在 Claude Desktop、Claude Code、Cursor 等工具中配置使用,具体的安装和配置方法可以参考各个 MCP 服务器的文档。还有更多 MCP 你可以在 [鱼皮的 AI 资源导航网](https://ai.codefather.cn/) 或者 [MCP 大全网站](https://mcp.so/) 找到。 + +MCP 的强大之处在于,它让 AI 不再只是一个代码生成器,而是一个真正的全能开发助手,能帮你完成开发过程中的各种任务。如果你经常使用 Claude 或 Cursor,强烈建议配置几个常用的 MCP 服务器,能大大提升效率。 + + + +## 七、提示词模板库 + +建立自己的提示词模板库,常用的对话可以直接复用。 + +除了自己整理,还可以参考一些现成的资源: + +- [鱼皮的 AI 资源导航](https://ai.codefather.cn/prompt):收录了大量提示词模板,涵盖各种场景。 +- [Cursor Directory](https://cursor.directory/rules):社区贡献的 Cursor Rules 集合,有各种语言和框架的规则模板。 +- [GitHub awesome-prompts](https://github.com/f/awesome-chatgpt-prompts):收录了大量优质提示词,虽然不是专门针对编程的,但很多思路可以借鉴。 + +这些资源都可以直接拿来用,或者根据自己的需求改改。站在巨人的肩膀上,能节省大量摸索的时间。 + +下面给大家举几个例子。 + +1)功能开发模板 + +``` +我要开发一个【功能名称】功能。 + +需求: +1. 【需求 1】 +2. 【需求 2】 +3. 【需求 3】 + +技术栈:【技术栈】 + +请帮我: +1. 分析实现方案 +2. 列出需要的组件和函数 +3. 给出核心代码 +``` + + + +2)代码审查模板 + +``` +请审查这段代码: + +【代码】 + +请从以下角度分析: +1. 代码质量(可读性、可维护性) +2. 性能问题 +3. 潜在的 bug +4. 改进建议 +``` + + + +3)调试问题模板 + +``` +我遇到了一个问题: + +问题描述:【问题描述】 + +报错信息: +【错误信息】 + +相关代码: +【代码】 + +技术栈:【技术栈】 + +请帮我: +1. 分析问题原因 +2. 给出解决方案 +3. 解释为什么会出现这个问题 +``` + + + +4)性能优化模板 + +``` +这段代码的性能不够好: + +【代码】 + +场景:【使用场景和数据规模】 + +请帮我: +1. 分析性能瓶颈 +2. 给出优化方案 +3. 说明优化后的性能提升 +``` + + + +5)文档生成模板 + +``` +请为这个【组件/函数】生成文档: + +【代码】 + +文档应该包括: +1. 功能说明 +2. 参数说明 +3. 返回值说明 +4. 使用示例 +5. 注意事项 +``` + +把这些模板保存在一个文件里,需要时直接复制粘贴,并填入具体内容。 + + + +## 八、时间管理技巧 + +效率不只是技术问题,也是时间管理问题。很多时候,不是你技术不行,而是时间没管理好。 + +分享几个我自己在用的方法吧: + +1)番茄工作法:设定 25 分钟的专注时间,在这段时间内只做一件事,不看手机、不刷社交媒体。时间到了就休息 5 分钟,起来走走、喝口水。这样工作 4 个番茄钟后,休息 15 ~ 30 分钟。这个方法能让你保持高效,又不会太累。 + +2)把大任务分解成小任务:比如 “完成用户系统” 这个任务太大了,不知道从哪里开始。但如果拆成实现用户注册表单、实现表单验证、连接注册 API、添加错误提示、测试注册流程这样的小任务,每个都很具体,很容易完成、也更有成就感。 + +3)批量处理:把相似的任务放在一起做,比如一次性写完所有组件的基本结构、一次性添加所有的类型定义、一次性处理所有的样式问题。这样能减少上下文切换,大脑不用频繁在不同类型的工作间切换,效率会更高。 + +4)最后,不要在 MVP 阶段就追求完美。先让功能能用,再考虑优化;先完成核心功能,再添加辅助功能;先通过测试,再重构代码。 + +**记住,完成比完美更重要。** + + + +## 写在最后 + +效率提升不是一蹴而就的,而是通过无数个小改进积累起来的。每个快捷键、每个模板、每个自动化脚本,都能为你节省一点时间。积少成多,你的开发速度就会有质的飞跃。 + +建议你定期记录自己的工作流程,看看哪些步骤最耗时、哪些操作重复最多、哪些地方可以自动化,然后针对性地改进。同时保持对新工具的关注,关注技术博客和社区,尝试新的 AI 工具,学习新的快捷键和技巧。但也不要盲目追新,虽然 AI 工具的迭代更新非常快,但真正好用的、适合自己的也就那么几个,还是要选择真正能提高效率的工具。 + +向他人学习也很重要,比如看别人的直播或视频、参加技术分享会、加入开发者社区等等,多观察其他开发者的工作方式,学习他们的效率技巧,你的效率也会越来越高。 + +当然,咱不能为了追求效率丢失掉代码质量。下一篇文章,我会讲解代码质量保障,教你如何保证 AI 生成的代码质量。 + +休息片刻,让我们再继续征程吧! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/06 Vibe Coding 代码质量保障.md b/Vibe Coding 零基础教程/30 经验技巧/06 Vibe Coding 代码质量保障.md new file mode 100644 index 0000000..96569d5 --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/06 Vibe Coding 代码质量保障.md @@ -0,0 +1,729 @@ +# Vibe Coding 代码质量保障 + +> 如何确保 AI 生成的代码质量 + + + +你好,我是鱼皮。 + +很多同学在用 AI 开发时,会有这样的担心:AI 生成的代码靠谱吗?会不会有隐藏的 bug? + +这个担心是有道理的。AI 虽然能快速生成代码,但它不能保证代码的质量。作为开发者,你需要建立一套质量保障体系。 + +本文我就来分享一些实用的方法,帮你确保 AI 生成的代码质量。 + + + + +## 一、什么是好代码? + +在讲如何保障质量之前,我们先要明确什么是好代码。 + + + + +### 好代码的特征 + +什么样的代码才算好代码? + +这个问题看似简单,但很多人说不清楚。其实,除了能运行之外,好代码最重要的是 **可读性好**:代码清晰易懂、符合团队开发规范,别人(包括未来的你)能快速理解。在此基础上,还要 **可维护性强**,修改和扩展都很容易,不会牵一发而动全身。 + +当然,这些都要建立在 **功能正确** 的前提下,代码能正确实现需求,没有 Bug。同时,**性能要合理**,在可接受的时间内完成任务,不浪费资源。此外,代码还要 **安全可靠**,没有安全漏洞、能处理异常情况。 + +![](https://pic.yupi.icu/1/goodcode%E5%A4%A7.jpeg) + + + +### AI 生成代码的常见问题 + +那么,AI 生成的代码通常会有哪些问题呢? + +根据我的经验,最常见的是 **过度复杂**,AI 为了实现功能,经常写很多不必要的代码。另一个常见问题是 **缺少边界处理**,AI 为了让代码能快速运行,可能只考虑正常情况,忽略了空值、错误等特殊情况。 + +AI 生成的代码还经常出现 **重复代码** 的问题。特别是在前端开发中,如果你让 AI 分别生成多个相似的页面,它不会主动复用代码,而是为每个页面生成独立的代码。 + +举个例子,假设你要做一个管理后台,有用户列表页、文章列表页、评论列表页。这三个页面的布局和功能都很相似:都是表格展示数据、都有搜索框、都有分页。但如果你分 3 次让 AI 生成,它会给你 3 套几乎一样的代码,只是数据字段不同。更好的做法是先让 AI 生成一个通用的列表组件,然后用不同的配置来复用。这样不仅代码量少,维护起来也容易。 + +有时候还会存在 **性能问题**,使用了低效的算法或数据结构。了解这些问题,你才能有针对性地检查和改进。 + + + + +### 建立质量标准 + +知道了什么是好代码,接下来就要为你的项目建立明确的质量标准。 + +在代码规范方面,建议使用 ESLint 或 Prettier 统一代码风格,定义清晰的命名规则(比如变量用 camelCase 驼峰式写法,常量用 UPPER_SNAKE_CASE 写法),并规定好文件和文件夹的组织方式。 + +在功能标准上,要求所有功能都要有测试、要处理边界情况、错误要有友好的提示。 + +性能方面,可以设定具体的指标,比如页面加载时间不超过 3 秒,API 响应时间不超过 1 秒,数据量大时使用虚拟滚动等。 + +可以把这些标准写在项目文档里,让 AI 也知道。 + +💡 不过实际开发中还是要灵活,如果你只是单纯开发个 Demo 类的小项目,干就完了,不用考虑那么多。 + + + + +## 二、代码审查 + +代码审查(Code Review)是保障质量的第一道防线。 + + + +### 为什么要审查 AI 代码? + +有些同学觉得:AI 生成的代码能跑就行了,为什么还要审查? + +这个想法其实挺危险的。 + +首先,AI 不是完美的,它会犯错,会生成有 Bug 的代码。更重要的是,AI 只知道技术,**不了解你的具体业务逻辑**,它生成的代码可能在技术上没问题,但在业务上不合理。 + +另外,AI 可能只关注当前功能,不考虑未来的扩展性。今天能跑的代码,明天可能就成了技术债。而且,审查代码也是一个学习的机会,能帮你理解代码的工作原理,提升自己的技术水平。所以,审查 AI 代码是必不可少的,尤其是对于有编程基础的同学。 + +![](https://pic.yupi.icu/1/whyreviewcode%E5%A4%A7.jpeg) + + + + +### 审查的重点 + +那么,审查 AI 生成的代码时,应该重点关注哪些方面呢? + + + + +#### 1、功能正确性 + +最基本的要求是:代码能不能正确实现需求? + +这听起来简单,但很容易被忽视。你需要运行代码,**测试所有功能**,尝试各种输入,包括正常的和异常的。 + +特别要注意边界情况,比如空值、极大值、极小值等,这些往往是 Bug 的高发区。 + +举个例子: + +```typescript +// AI 生成的代码 +function divide(a: number, b: number): number { + return a / b; +} +``` + +想想看,这段代码有什么问题呢? + +答案是:没有处理除数为 0 的情况。 + +```typescript +// 改进后: +function divide(a: number, b: number): number { + if (b === 0) { + throw new Error('除数不能为 0'); + } + return a / b; +} +``` + + + +#### 2、代码可读性 + +功能正确之后,接下来要看代码是否易读。 + +记住,代码是给人看的,不只是给机器执行的。 + +检查时要问自己几个问题: + +- 变量名是否清晰? +- 函数名是否表达了功能? +- 逻辑是否容易理解? +- 是否需要添加注释? + +如果你看代码时感到困惑,那别人也会困惑。 + +举个例子: + +```typescript +// 不好的命名 +function f(x: number): number { + return x * 2 + 1; +} + +// 好的命名 +function calculateDiscountedPrice(originalPrice: number): number { + const discount = 0.2; // 8 折优惠 + return originalPrice * (1 - discount); +} +``` + + + +#### 3、错误处理 + +代码要能优雅地处理错误,不能一出错就崩溃。 + +你要检查 API 调用有没有错误处理、用户输入有没有验证、异常情况有没有友好的提示。很多 AI 生成的代码只考虑了正常流程,完全忽略了错误处理,这是很危险的。 + +举个例子: + +```typescript +// 不好的错误处理(根本没做) +async function fetchUser(id: string) { + const response = await fetch(`/api/users/${id}`); + const user = await response.json(); + return user; +} + +// 好的错误处理 +async function fetchUser(id: string) { + try { + const response = await fetch(`/api/users/${id}`); + + if (!response.ok) { + throw new Error(`获取用户失败: ${response.statusText}`); + } + + const user = await response.json(); + return { data: user, error: null }; + } catch (error) { + console.error('获取用户出错:', error); + return { data: null, error: error.message }; + } +} +``` + + + +#### 4、性能问题 + +然后是性能问题。代码要高效,不能浪费资源。 + +可以看看有没有不必要的循环、有没有重复的计算、数据结构选择是否合理。AI 有时候为了快速实现功能,会选择最简单但不是最高效的方案。 + +举个例子: + +```typescript +// 性能不好 +function findUser(users: User[], id: string): User | undefined { + // 每次都遍历整个数组,O(n) + return users.find(user => user.id === id); +} + +// 性能更好 +class UserManager { + private userMap: Map; + + constructor(users: User[]) { + // 用 Map 存储,查找是 O(1) + this.userMap = new Map(users.map(u => [u.id, u])); + } + + findUser(id: string): User | undefined { + return this.userMap.get(id); + } +} +``` + + + +#### 5、安全问题 + +对于商业项目来说,这点至关重要。代码要安全,不能有漏洞。 + +需要检查有没有 SQL 注入风险、有没有 XSS 攻击风险、敏感信息有没有加密、API Key 有没有暴露。AI 对安全的理解可能不够深入,很容易留下安全隐患。 + +举个 SQL 注入的例子。SQL 注入是指攻击者通过在输入中插入恶意的 SQL 代码,来执行非预期的数据库操作。 + +比如下面这段代码是不安全的: + +```typescript +// ❌ 不安全:直接拼接用户输入 +const query = `SELECT * FROM users WHERE name = '${userName}'`; +``` + +假设用户在登录时输入用户名 `admin' OR '1'='1`,直接把这个输入拼接到 SQL 语句里,就会变成: + +```sql +SELECT * FROM users WHERE name = 'admin' OR '1'='1' +``` + +这个查询会返回所有用户,因为 `'1'='1'` 永远为真。攻击者就能绕过验证登录任何账户。 + +正确的做法是使用参数化查询: + +```typescript +// ✅ 安全:使用参数化查询 +const query = 'SELECT * FROM users WHERE name = ?'; +db.execute(query, [userName]); +``` + +参数化查询会自动转义特殊字符,防止 SQL 注入。 + +如果你对 Web 安全感兴趣,可以利用鱼皮 [免费的网络安全自学网](https://github.com/liyupi/ceshiya) 来学习这些知识: + +![](https://pic.yupi.icu/1/%E6%B5%8B%E8%AF%95%E9%B8%AD%E7%BD%91%E7%AB%99.png) + + + +### 审查流程 + +可以按照下面的步骤,建立一个系统的审查流程: + +1. 自己先看一遍:快速浏览代码,看有没有明显问题 + +2. 运行测试:测试所有功能,包括边界情况 + +3. 逐行审查:仔细检查每一行代码,思考是否有问题 + +4. 记录问题:把发现的问题记下来 + +5. 要求 AI 改进:把问题反馈给 AI,让它修复 + +6. 再次审查:确认修复后的代码没有新问题 + +这个流程可能有点繁琐,但能大大提高代码质量。 + +对于没有编程基础的朋友,如果自己看不懂代码,可以利用其他的 AI 大模型来帮忙审查。这是一个很实用的技巧:**用多个 AI 交叉验证**。 + +比如用 Cursor(Claude)生成的代码,可以复制到 ChatGPT 或 Gemini,让它们帮你审查一遍: + +```markdown +请审查这段代码,找出潜在的问题,包括 bug、性能问题、安全隐患。 +``` + +不同的 AI 有不同的视角和训练数据,能互相补充,一个 AI 可能忽略的问题,另一个 AI 能发现。 + +我自己在做重要项目时,经常会让 2 ~ 3 个不同的 AI 审查同一段代码,然后综合它们的建议。这样虽然多花了点时间,但能大大降低出错的风险。特别是对于关键的业务逻辑、安全相关的代码、性能敏感的部分,多一层保障总是好的。 + + + +## 三、测试 + +测试是保障代码质量的关键手段。 + + + +### 为什么要写测试? + +很多同学觉得写测试浪费时间,但其实恰恰相反。测试能在开发阶段就发现问题,而不是等到上线后用户发现。有了测试,你可以放心地重构代码,不怕改坏。而且,测试代码本身就是很好的文档,展示了如何使用你的函数或组件。 + +此外,虽然写测试要花时间,但能省下更多调试时间。想想看,如果你每次改代码都要手动测试所有功能,那得花多少时间?有了自动化测试,运行一下就知道有没有问题。 + +所以,写测试是值得的。 + +![](https://pic.yupi.icu/1/testpk%E5%A4%A7.jpeg) + + + +### 测试的类型 + +测试主要有 3 种类型。 + +- 单元测试:测试单个函数或组件,速度快,容易定位问题,覆盖率要高。 +- 集成测试:测试多个模块的协作,确保模块之间的接口正确,覆盖主要流程。 +- 端到端测试:模拟用户的完整操作,测试整个系统,覆盖关键场景。 + +对于 Vibe Coding 项目,我建议 **重点写单元测试和集成测试**。端到端测试虽然也重要,但成本较高,可以只覆盖最关键的场景。 + + + +### 让 AI 帮你写测试 + +如今绝大多数的测试代码已经不需要人工编写了,你可以直接让 AI 帮你生成测试代码。 + +````markdown +请为这个函数写单元测试,覆盖正常情况和边界情况: +```typescript +function calculateTotal(items: CartItem[]): number { + return items.reduce((sum, item) => sum + item.price * item.quantity, 0); +} +``` +```` + +AI 会生成类似这样的测试代码: + +```typescript +import { describe, it, expect } from 'vitest'; + +describe('calculateTotal', () => { + it('应该正确计算总价', () => { + const items = [ + { price: 10, quantity: 2 }, + { price: 5, quantity: 3 } + ]; + expect(calculateTotal(items)).toBe(35); + }); + + it('应该处理空数组', () => { + expect(calculateTotal([])).toBe(0); + }); + + it('应该处理数量为 0 的情况', () => { + const items = [{ price: 10, quantity: 0 }]; + expect(calculateTotal(items)).toBe(0); + }); + + it('应该处理小数', () => { + const items = [{ price: 10.5, quantity: 2 }]; + expect(calculateTotal(items)).toBe(21); + }); +}); +``` + +这段测试代码的作用是:用 `describe` 定义一个测试组(测试 calculateTotal 函数),然后用多个 `it` 定义具体的测试用例。每个测试用例都会调用函数并检查结果是否符合预期。比如第一个测试检查正常情况、第二个测试检查空数组、第三个测试检查数量为 0 的情况、第四个测试检查小数。运行这些测试时,如果所有 `expect` 都通过,说明函数工作正常;如果有任何一个失败,就说明代码有问题。 + +有了这些测试,你就能确保函数在各种情况下都能正常工作。 + + + +### 扩展知识 - 测试驱动开发(TDD) + +你可以尝试测试驱动开发(Test-Driven Development,简称 TDD)。这是一种 “先写测试,再写代码” 的开发方式。 + +听起来很反直觉对吧?一般不都是先写代码,再写测试吗? + +但 TDD 的逻辑是:你先定义好函数应该如何工作(写测试),然后让 AI 根据测试来实现功能。这样能确保代码从一开始就是符合需求的、可测试的。 + +具体流程是: + +1. 先写一个会失败的测试(因为功能还没实现) +2. 然后让 AI 实现功能让测试通过,运行测试确保所有测试都通过 +3. 最后优化代码但保持测试通过 + +这样一来,能避免写出 “看起来能用但实际有问题” 的代码。 + + + + +## 四、调试技巧进阶 + +即使有了审查和测试,还是难免会遇到 Bug。这时候,你需要掌握调试技巧。 + + + +### 1、使用断点调试 + +很多同学调试代码时只会用 `console.log`,也就是在代码里加一行 `console.log(变量名)` 来打印变量的值,然后在浏览器控制台查看。 + +这个方法虽然简单,但效率不高,而且调试完还要把这些 log 删掉。 + +其实断点调试要高效得多。在 VS Code 或 Cursor 中,你只需要在代码行号左边点击设置断点,然后按 F5 开始调试。 + +![](https://pic.yupi.icu/1/image-20260105092822939.png) + +代码会在断点处暂停,这时你可以查看所有变量的值: + +![](https://pic.yupi.icu/1/image-20260105092855154.png) + +还可以单步执行代码,看看每一步发生了什么。这比到处加 `console.log` 然后再删掉要方便多了。 + + + +### 2、浏览器调试工具 + +前端开发时,浏览器的调试工具是你的好帮手。在浏览器中按 F12 就能打开开发者工具。 + +里面有几个常用的面板: + +- Console(控制台)面板可以查看日志和错误,执行 JavaScript 代码,查看变量值。 +- Sources(源代码)面板可以设置断点,单步执行,查看调用栈。 +- Network(网络)面板可以查看 API 请求,检查请求和响应,分析加载时间。 +- Performance(性能)面板可以分析性能瓶颈,查看渲染时间,找出慢的操作。 + +![](https://pic.yupi.icu/1/image-20260105093342746.png) + +掌握这些工具,你的调试效率会大大提高。 + + + +### 3、二分法定位问题 + +如果你不确定问题在哪里,可以试试二分法。 + +很好理解,直接把代码分成两半,注释掉其中一半,看问题是否还在。如果还在,说明问题在另一半;如果不在,说明问题在这一半。然后继续把有问题的那一半再分成两半,重复这个过程,直到找到问题。 + +这个方法虽然简单,但很有效,特别是在处理大段代码时。 + + + +### 4、橡皮鸭调试法 + +这是一个看似玄学呆板,实则有一定科学原理的方法。 + +当你被 bug 困住时,试着向别人(或者一只橡皮鸭)解释你的代码:阿巴阿巴,这个函数应该做什么…… 它先做了这个…… 然后做了那个…… 咦,这里好像不对…… + +很神奇的是,在解释的过程中,你往往就会发现问题。因为解释的过程会强迫你重新理清思路,从不同的角度看问题。 + +哪个程序员没有一只小黄鸭呢? + +![](https://pic.yupi.icu/1/smallyellowduck%E4%B8%AD.jpeg) + + + +### 5、让 AI 帮你调试 + +把错误信息和相关代码给 AI,让它帮你分析: + +````markdown +这段代码报错了: +``` +TypeError: Cannot read property 'map' of undefined +``` + +代码是: +```typescript +function UserList({ users }) { + return ( +
+ {users.map(user => )} +
+ ); +} +``` + +请帮我分析问题并给出解决方案。 +```` + +AI 会告诉你问题可能是 `users` 为 `undefined`,并给出解决方案。 + +这无疑是最多同学使用的方法,但这招不是 100% 有效的,可以优先尝试,解决不了再人工处理。 + + + +## 五、质量检查清单 + +可以建立一个质量检查清单,每次提交代码前都让 AI + 人工过一遍。 + +不过现在 AI 大模型的编程能力越来越强了,很多 AI 工具已经内置了代码检查能力,会自动提示一些常见问题。所以这个清单简单了解即可,不用死记硬背。 + + + + +### 功能检查 + +- [ ] 所有功能都能正常工作 +- [ ] 边界情况都处理了 +- [ ] 错误情况有友好提示 +- [ ] 用户体验流畅 + + +### 代码检查 + +- [ ] 代码符合项目规范 +- [ ] 变量和函数命名清晰 +- [ ] 没有重复代码 +- [ ] 复杂逻辑有注释 +- [ ] 没有被注释掉的代码 + + +### 性能检查 + +- [ ] 没有不必要的重复计算 +- [ ] 列表渲染使用了 key +- [ ] 大数据量使用了分页或虚拟滚动 +- [ ] 图片进行了优化 + + +### 安全检查 + +- [ ] 用户输入都经过验证 +- [ ] 敏感信息没有暴露 +- [ ] API Key 使用环境变量 +- [ ] 没有 SQL 注入风险 + + +### 测试检查 + +- [ ] 核心功能有单元测试 +- [ ] 测试覆盖率达标 +- [ ] 所有测试都通过 +- [ ] 手动测试了主要流程 + + +### 文档检查 + +- [ ] README 是最新的 +- [ ] 重要函数有注释 +- [ ] API 接口有文档 +- [ ] 环境变量有说明 + + + +## 六、使用 Linter 和 Formatter + +自动化工具能帮你发现很多问题。 + +💡 这部分内容比较专业,主要适合有编程基础的同学。如果你是完全零基础,可以先跳过,等有需要时再回来看。 + + + + +### ESLint 代码检查 + +ESLint 是一个 JavaScript / TypeScript 代码检查工具,能自动发现代码中的问题,比如未使用的变量、可能的 Bug、不符合规范的写法等。就像一个自动化的代码审查员,帮你在运行代码之前就发现问题。 + +安装和配置(最新的配置方法以 [官方文档](https://eslint.org/docs/latest/use/getting-started) 为准): + +```bash +npm install -D eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin +``` + +创建 `.eslintrc.json` 配置文件,定义检查规则: + +```json +{ + "parser": "@typescript-eslint/parser", + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react/recommended" + ], + "rules": { + "no-console": "warn", + "no-unused-vars": "error", + "@typescript-eslint/no-explicit-any": "error" + } +} +``` + +运行检查: + +```bash +npm run lint +``` + +ESLint 会告诉你代码中的问题,比如未使用的变量、潜在的 Bug 等。 + + + +### Prettier 代码格式化 + +Prettier 是一个代码格式化工具,能自动调整代码的格式,比如缩进、换行、引号类型等,让代码看起来更整洁统一。就像 Word 的 “格式刷” 功能,一键就能让所有代码保持相同的风格。 + +安装(最新的用法以 [官方文档](https://prettier.io/) 为准): + +```bash +npm install -D prettier +``` + +创建 `.prettierrc` 配置文件,定义格式化规则,比如是否使用分号、使用单引号还是双引号、缩进几个空格等: + +```json +{ + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5" +} +``` + +运行格式化: + +```bash +npx prettier --write "src/**/*.{ts,tsx}" +``` + +Prettier 会自动调整代码格式,让代码看起来更整洁。 + + + +### 在编辑器中集成 + +在 VS Code / Cursor / WebStorm 等其他编程工具中安装 ESLint 和 Prettier 插件,保存文件时自动检查和格式化。 + +以 VS Code 为例,在 `settings.json` 中配置: + +```json +{ + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } +} +``` + +这样每次保存文件,代码就会自动格式化和修复问题。 + + + +### 在 Git 中集成 + +使用 Husky 和 lint-staged 这两个工具,可以在提交代码前自动检查。 + +Husky 是一个 Git 钩子工具,能在 Git 操作(如 commit、push)时自动执行脚本。lint-staged 则专门用来检查即将提交的文件,而不是整个项目。 + +执行命令安装这些工具: + +```bash +npm install -D husky lint-staged +npx husky init +``` + +然后在 `package.json` 中配置: + +```json +{ + "lint-staged": { + "*.{ts,tsx}": [ + "eslint --fix", + "prettier --write" + ] + } +} +``` + +这样每次执行 `git commit` 提交代码时,都会自动检查和格式化代码。 + + + + +## 七、持续改进代码质量 + +代码质量不是一次性的工作,而是持续改进的过程。要定期花时间重构,简化复杂的函数,提取重复的代码,改进命名、添加注释。建议每周或每完成一个功能,花半小时重构一下,保持代码的整洁。 + +如果是团队开发,定期开代码审查会议会很有帮助。可以每周选几段代码一起审查,讨论哪里做得好、哪里可以改进、分享最佳实践、统一代码风格。这不仅能提高代码质量,还能促进团队成员之间的学习和交流。 + +此外,对于程序员来说,多看优秀的开源项目也很重要。React 的源码、Next.js 的源码、知名组件库的代码,都是学习的好材料。看看别人是怎么写的,学习他们的技巧和思路。每次发现 Bug 或遇到问题,记录下来:问题是什么、为什么会出现、如何修复的、如何避免再次出现。这些经验能帮你避免重复犯错,不断提升代码质量。 + + + + +## 写在最后 + +代码质量是 Vibe Coding 中最容易被忽视,但又最重要的一环。AI 能帮你快速写代码,但不能保证代码质量。作为开发者,你需要建立一套完整的质量保障体系,或者起码知道什么样的代码是好的、高质量的。 + +最后总结一下本文的重点: + +1. 明确质量标准:知道什么是好代码,建立项目的质量标准。 + +2. 认真审查代码:不要盲目相信 AI,要仔细审查每一行代码。 + +3. 写测试:测试是保障质量的关键,不要偷懒。 + +4. 掌握调试技巧:学会用断点、浏览器工具等高效调试。 + +5. 使用自动化工具:ESLint、Prettier 等工具能自动发现问题。 + +6. 持续改进:定期重构,学习优秀代码,记录经验教训。 + +快速开发很重要,但代码质量更重要。宁可慢一点,也要保证质量。 + +希望这些方法能帮你建立起完善的代码质量保障体系,让你的 Vibe Coding 项目更加稳定可靠。 + +加油小伙伴,冲冲冲!👍🏻 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/07 Vibe Coding 代码重构技巧.md b/Vibe Coding 零基础教程/30 经验技巧/07 Vibe Coding 代码重构技巧.md new file mode 100644 index 0000000..c95046d --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/07 Vibe Coding 代码重构技巧.md @@ -0,0 +1,620 @@ +# Vibe Coding 代码重构技巧 + +> 避免 AI 生成混乱的意大利面代码 + + + +你好,我是鱼皮。 + +你可能遇到过这样的情况:刚开始用 AI 做项目时,代码清晰简洁,看起来很舒服。但随着功能越加越多,代码开始变得混乱。最后,你自己都不敢动这些代码了,因为改一个地方,可能会影响到其他地方。 + +这种情况在 Vibe Coding 中特别常见,因为 AI 可能只关注 “能不能跑”,忽略了 “好不好维护”。下面我就来教你如何识别和偿还技术债,让你的代码始终保持优雅。 + + + + +## 一、什么是技术债? + +技术债是一个很形象的比喻。 + +想象一下,你要盖一栋房子。为了快速完工,你用了一些临时的方案:地基没打牢,墙没砌直,电线随便拉。房子是盖起来了,也能住人,但隐患很多。如果不及时修复,以后问题会越来越大,修复的成本也会越来越高。 + +技术债就是这样。为了快速实现功能,你(或 AI)采用了一些不够好的方案。这些方案当时能用,但会给未来埋下隐患。随着项目发展,这些隐患会变成实际的问题,拖慢你的开发速度。 + +在今年的研究中发现,AI 生成的代码特别容易产生技术债。因为 AI 擅长快速实现功能,但不擅长考虑长远的架构和可维护性。它会给你一个 “高度功能化但系统性缺乏架构判断” 的代码。 + + + +### 技术债的表现 + +那么,如何判断你的项目有没有技术债呢?最明显的信号是:改代码变得越来越困难,你开始害怕修改代码,因为不知道会影响到哪里。如果你发现自己经常觉得 “这个地方不敢动”、“改了这里可能会影响那里”,那就说明技术债已经比较严重了。 + + + +### 技术债的危害 + +技术债的危害是累积的。刚开始可能只是代码有点乱,不影响功能。但随着时间推移,问题会越来越严重。 + +- 开发速度变慢,因为要花更多时间理解和修改代码。 +- Bug 越来越多,因为代码太复杂,容易出错。 +- 新功能难以添加,因为现有架构不支持。 +- 团队协作困难,因为没人能完全理解代码。 + +最糟糕的是,到了某个临界点,你可能不得不重写整个项目。这就是技术债的 “破产”。 + + + + +## 二、AI 生成代码的常见问题 + +用 AI 做 Vibe Coding 时,如果上下文管理不当、需求描述不够清晰,或者让 AI 一次性实现太复杂的功能,生成的代码可能会出现一些质量问题。下面是几个典型场景,了解它们能帮你更好地引导 AI。 + + + +### 过度嵌套 + +AI 为了确保代码能运行,有时会生成嵌套很深的代码。 + +什么是嵌套? + +就是 if 里面套 if,循环里面套循环,像俄罗斯套娃一样。比如: + +```typescript +function processData(data: any) { + if (data) { + if (data.items) { + if (data.items.length > 0) { + data.items.forEach(item => { + if (item.active) { + if (item.price > 0) { + // 实际逻辑 + } + } + }); + } + } + } +} +``` + +这种代码很难读,也很难维护。更好的写法是提前返回: + +```typescript +function processData(data: any) { + if (!data?.items?.length) return; + + const activeItems = data.items.filter(item => + item.active && item.price > 0 + ); + + activeItems.forEach(item => { + // 实际逻辑 + }); +} +``` + +显然,第二种写法更清晰,也更容易理解。 + + + +### 重复代码 + +AI 可能不会主动复用代码,而是为每个需求生成新的代码。 + +举个例子,假设你让 AI 分别实现用户列表页、文章列表页、评论列表页。AI 会给你三套几乎一样的代码,只是数据字段不同。或者你可能在多个组件里都有这样的代码: + +```typescript +const handleSubmit = async () => { + setLoading(true); + try { + const response = await fetch('/api/data', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(data) + }); + const result = await response.json(); + setData(result); + } catch (error) { + console.error(error); + } finally { + setLoading(false); + } +}; +``` + +这些重复代码应该提取成一个公共函数或自定义 Hook。 + + + +### 缺少抽象 + +AI 倾向于写具体的、直接的代码,而不是抽象的、可复用的代码。 + +比如,你要显示用户列表和文章列表,AI 可能会给你两个完全独立的组件,即使它们的结构几乎一样。 + +更好的做法是创建一个通用的列表组件,然后用不同的数据和渲染函数来复用。 + + + +### 命名随意 + +AI 有时候会用相对随意的命名,比如 `data`、`result`、`temp`、`handleClick`。这些名字不能准确表达意图,会让代码难以理解。 + +出现这种情况可能是因为你的需求描述不够具体,AI 不知道这个变量或函数的真实用途。 + +好的命名应该是 **见名知意** 的,比如 `userData`、`apiResponse`、`temporaryBuffer`、`handleLoginButtonClick`。 + +如果你发现 AI 生成的命名太随意,可以在需求中明确说明:请使用有意义的变量名和函数名,能清楚表达它们的用途。 + + + +## 三、如何利用 AI 重构代码? + +既然 AI 会产生技术债,那能不能用 AI 来偿还技术债呢? + +答案是可以的。这也是 Vibe Coding 的一大优势 —— **AI 既能快速写代码,也能快速改代码**。 + + + +### 让 AI 识别问题 + +你可以把代码贴给 AI,让它从专业的角度审查,帮你找出代码中的问题。 + +````markdown +请审查这段代码,找出可以改进的地方: +```typescript +【贴上你的代码】 +``` + +请从以下角度分析: +1. 有没有重复代码? +2. 函数是否太长? +3. 命名是否清晰? +4. 有没有过度嵌套? +5. 能否提取公共逻辑? +```` + +AI 会给你一份详细的分析报告。 + + + +### 让 AI 提供重构方案 + +找到问题后,让 AI 给你重构方案,比如: + +- 你提到了这段代码有重复逻辑。请给我一个重构方案,把重复的部分提取成公共函数。 +- 这个函数太长了。请帮我把它拆分成几个小函数,每个函数只做一件事。 + +AI 会给你具体的重构代码。 + + + +### 小步重构 + +注意,不建议一次性重构整个项目,这样风险太大,说不定重构完你整个项目都无法运行了。 + +正确的做法是小步重构,每次只改一小部分。 + +比如,你发现一个函数太长了,不要一次性把它拆成 10 个小函数。先拆成 2 个,测试通过了,再继续拆。每一步都要确保功能不变,测试都通过。 + +这样即使出了问题,也容易回退。 + + + + +### 重构的时机 + +什么时候应该重构? + +我的建议是: + +1)不要专门安排时间重构,而是在日常开发中随时重构。当你发现代码有问题时,立刻改掉,不要拖到以后。 + +2)完成功能后重构。功能做完了,测试通过了,花 10 ~ 15 分钟看看代码,有没有可以改进的地方。 + +3)添加新功能前重构。如果你发现现有代码不适合添加新功能,先重构一下,让代码更容易扩展。 + +4)定期集中重构。每个月或每个大版本,花半天时间集中重构,处理积累的技术债。 + + + +## 四、模块化和代码复用 + +模块化是避免技术债的关键。而且,模块化的代码对 AI 也更友好 —— 当你需要修改某个功能时,AI 只需要阅读相关的小模块,而不是整个几百行的大文件,这样 AI 能更准确地理解和修改代码。 + + + + +### 什么是模块化? + +模块化就是把代码分成独立的、可复用的模块。每个模块只做一件事,做好一件事。模块之间通过清晰的接口通信,互不干扰。 + +好的模块化有这些特点: + +- 高内聚:模块内部的代码紧密相关 +- 低耦合:模块之间的依赖尽可能少 +- 单一职责:每个模块只负责一件事 +- 接口清晰:模块的输入输出明确 + + + + +### 组件的拆分 + +在前端开发框架 React 中,组件是最基本的模块。你可以把组件理解为页面上的一个个独立部分,比如导航栏、搜索框、用户卡片等。 + +但很多人(包括 AI)会写出很 “笨重” 的组件。 + +比如,一个用户资料页面,AI 可能会把所有逻辑都写在一个组件里:获取数据、表单验证、提交处理、错误提示…… 结果就是一个几百行的巨型组件。 + +更好的做法是拆分成多个小组件: + +```typescript +// 主组件,负责协调 +function ProfilePage() { + const { user, loading, error } = useUser(); + + if (loading) return ; + if (error) return ; + + return ( +
+ + +
+ ); +} + +// 子组件,各司其职 +function ProfileHeader({ user }) { + return ( +
+ +

{user.name}

+
+ ); +} + +function ProfileForm({ user }) { + // 表单逻辑 +} +``` + +这样一来,每个组件都很小,很容易理解和测试。 + +即使你不了解前端或 React,也能理解这个思想 —— 把大的功能拆成小的、独立的部分,每个部分只做一件事。这个原则适用于所有编程语言和框架。 + + + + +### 函数的提取 + +当你发现一段代码在多个地方重复出现时,就应该提取成函数。 + +比如,你在多个地方都需要格式化日期: + +```typescript +// 重复的代码 +const formattedDate1 = new Date(date1).toLocaleDateString('zh-CN'); +const formattedDate2 = new Date(date2).toLocaleDateString('zh-CN'); +const formattedDate3 = new Date(date3).toLocaleDateString('zh-CN'); + +// 提取成函数 +function formatDate(date: Date | string): string { + return new Date(date).toLocaleDateString('zh-CN'); +} + +const formattedDate1 = formatDate(date1); +const formattedDate2 = formatDate(date2); +const formattedDate3 = formatDate(date3); +``` + +这样不仅减少了重复,还让代码更容易维护。如果以后要改日期格式,只需要改一个地方。 + + + +### 自定义 Hook 的使用 + +在前端开发框架 React 中,自定义 Hook 是复用逻辑的好方法。Hook 是一种特殊的函数,用来管理状态和副作用。 + +💡 你不需要理解什么是 Hook、组件、状态管理这些专业术语。只需要告诉 AI: + +```markdown +这段逻辑在多个地方重复了,请帮我提取成可复用的模块。 +``` + +然后 AI 会自动帮你做好抽象和复用。 + +举个例子,你在多个组件里都需要获取用户数据,可以把获取用户数据这部分代码提取成 Hook,在其他地方复用: + +```typescript +// 提取前:每个组件都重复这些逻辑 +function ProfilePage() { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + fetchUser().then(setUser).catch(setError).finally(() => setLoading(false)); + }, []); + + // ... +} + +// 提取后:创建自定义 Hook +function useUser() { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + fetchUser().then(setUser).catch(setError).finally(() => setLoading(false)); + }, []); + + return { user, loading, error }; +} + +// 使用时很简单 +function ProfilePage() { + const { user, loading, error } = useUser(); + // ... +} +``` + +自定义 Hook 让代码更简洁,也更容易测试。 + + + + +## 五、从玩具项目到商业产品 + +很多人用 AI 做出来的是玩具项目 —— 能用,但不够专业、或者赚不了钱。 + +这时你可能会思考:如何把它变成可扩展的商业产品呢? + + + +### 玩具项目的特征 + +玩具项目一般有这些特征: + +- 所有代码都在一个文件里,或者文件组织很混乱 +- 没有明确的架构,代码想到哪写到哪 +- 缺少错误处理,只考虑了正常情况 +- 没有测试,全靠手动测试 +- 硬编码很多,配置和代码混在一起。 + +这样的项目可以用来演示或学习,但不适合作为商业产品长期维护和扩展。 + + + +### 商业产品的特征 + +商业产品应该是这样的: + +- 清晰的目录结构,一眼就能看出哪里放什么 +- 明确的架构,比如 MVC、MVVM 或其他模式 +- 完善的错误处理,考虑了各种异常情况 +- 充足的测试,核心功能都有测试覆盖 +- 配置分离,环境变量、配置文件和代码分开 +- 文档完善,有 README、API 文档、注释等 + +从玩具到商业产品,需要你有意识地提升代码质量和重构。 + +![](https://pic.yupi.icu/1/projectpk%E5%A4%A7.jpeg) + + + + +### 重构的步骤 + +如何把玩具项目重构成商业产品? + +我建议分步进行: + +1)整理目录结构。把代码按功能或类型分类,放到不同的文件夹里。比如组件放 `components`,工具函数放 `lib`,类型定义放 `types`。 + +2)提取重复代码。找出重复的逻辑,提取成公共函数或组件。这一步能大大减少代码量。 + +3)拆分大文件。把大的文件拆成小的文件,每个文件只负责一件事。比如一个大的 `utils.ts` 可以拆成 `format.ts`、`validate.ts`、`storage.ts` 等。 + +4)添加类型定义。如果用 TypeScript,给所有函数和组件加上完整的类型。这能帮你发现很多潜在问题。 + +5)改进命名。把不清晰的变量名、函数名改成描述性的名字。这能让代码更容易理解。 + +6)添加测试和文档。为核心功能写测试,为项目写 README,为复杂逻辑加注释。 + +以上这些步骤也都可以通过 AI 主导 + 人工校验来完成。关键是每一步都要确保功能不变、顺利通过测试。不要贪多,一步一步来。 + + + +## 六、实战案例 - 重构一个混乱的项目 + +让我用一个真实的例子,展示如何重构一个混乱的项目。 + + + +### 初始状态 + +假设你用 AI 做了一个待办事项应用,所有代码都在一个 `App.tsx` 文件里,大概 500 行。 + +```typescript +// App.tsx (500 行) +function App() { + const [todos, setTodos] = useState([]); + const [input, setInput] = useState(''); + const [filter, setFilter] = useState('all'); + const [loading, setLoading] = useState(false); + + // 100 行的数据获取逻辑 + useEffect(() => { /* ... */ }, []); + + // 50 行的添加逻辑 + const handleAdd = () => { /* ... */ }; + + // 50 行的删除逻辑 + const handleDelete = () => { /* ... */ }; + + // 50 行的编辑逻辑 + const handleEdit = () => { /* ... */ }; + + // 50 行的过滤逻辑 + const filteredTodos = todos.filter(/* ... */); + + // 200 行的 JSX + return ( +
+ {/* 很多很多代码 */} +
+ ); +} +``` + +虽然代码能用,但是所有功能逻辑都写到一起,不利于阅读和维护。 + + + + +### 重构步骤 + +#### 第一步、提取自定义 Hook + +首先,我们把所有和待办事项数据相关的逻辑(获取、添加、删除、更新)都提取到一个独立的 Hook 里。这样主组件就不用关心数据是怎么管理的,只需要调用这些方法就行。 + +```typescript +// hooks/useTodos.ts +function useTodos() { + const [todos, setTodos] = useState([]); + const [loading, setLoading] = useState(false); + + const addTodo = async (text: string) => { /* ... */ }; + const deleteTodo = async (id: string) => { /* ... */ }; + const updateTodo = async (id: string, text: string) => { /* ... */ }; + + useEffect(() => { + // 获取数据 + }, []); + + return { todos, loading, addTodo, deleteTodo, updateTodo }; +} +``` + + + +#### 第二步、拆分组件 + +接下来,把 UI 部分拆分成多个小组件。每个组件只负责显示和处理自己那一部分的逻辑,比如输入框只管输入、列表只管显示、过滤器只管筛选。这样每个组件都很简单,容易理解和修改。 + +```typescript +// components/TodoList.tsx +function TodoList({ todos, onDelete, onEdit }) { + return ( +
+ {todos.map(todo => ( + + ))} +
+ ); +} + +// components/TodoItem.tsx +function TodoItem({ todo, onDelete, onEdit }) { + // 单个待办项的逻辑 +} + +// components/TodoInput.tsx +function TodoInput({ onAdd }) { + // 输入框的逻辑 +} + +// components/TodoFilter.tsx +function TodoFilter({ filter, onChange }) { + // 过滤器的逻辑 +} +``` + + + +#### 第三步、重组主组件 + +最后,把提取出来的 Hook 和拆分好的组件组装起来。现在主组件只需要协调这些部分,告诉它们该做什么,而不用关心具体怎么做。 + +```typescript +// App.tsx (50 行) +function App() { + const { todos, loading, addTodo, deleteTodo, updateTodo } = useTodos(); + const [filter, setFilter] = useState('all'); + + const filteredTodos = useFilteredTodos(todos, filter); + + if (loading) return ; + + return ( +
+ + + +
+ ); +} +``` + +看到区别了么?代码一下子从 500 行变成了 50 行,而且每个部分都很清晰。 + + + +### 重构的效果 + +重构后的代码有这些优势: + +- 每个文件都很小,容易理解 +- 职责清晰,每个组件只做一件事 +- 容易测试,可以单独测试每个组件和 Hook +- 容易扩展,要加新功能只需要添加新组件 +- 容易维护,改一个地方不会影响其他地方 +- AI 更好理解:当你需要修改某个功能时,AI 只需要阅读相关的小文件(比如 50 行的 `TodoInput.tsx`),而不是整整 500 行的 `App.tsx`。这样 AI 能更准确地理解上下文,生成更好的代码。 + +这就是从玩具项目代码到商业产品代码的转变。 + + + +## 写在最后 + +重构和技术债管理是 Vibe Coding 中需要人工介入的环节。AI 能帮你快速写代码,但不能始终帮你保持代码的优雅,需要你有意识地去做。 + +让我总结一下今天的要点: + +- 理解技术债:知道什么是技术债,它是如何产生的,有什么危害。 +- 识别 AI 代码的问题:过度嵌套、重复代码、缺少抽象、命名随意,这些都是常见问题。 +- 利用 AI 重构:AI 既能产生技术债,也能帮你偿还技术债。 +- 小步重构:不要一次改太多,每次只改一小部分,确保功能不变。 +- 模块化思维:把代码拆成独立的、可复用的模块,保持高内聚、低耦合。 +- 及时重构:不要拖延,发现问题立刻改,不要让技术债积累。 + +记住,优雅的代码是需要用心维护、不断重构出来的。 + +希望这些重构技巧能帮你避免代码变成依托屎山,让你的 Vibe Coding 项目始终保持优雅。 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/08 Vibe Coding 性能优化技巧.md b/Vibe Coding 零基础教程/30 经验技巧/08 Vibe Coding 性能优化技巧.md new file mode 100644 index 0000000..81689ca --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/08 Vibe Coding 性能优化技巧.md @@ -0,0 +1,706 @@ +# Vibe Coding 性能优化技巧 + +> 让你的应用跑得更快 + + + +你好,我是鱼皮。 + +在 Vibe Coding 中,你可能遇到过这样的情况:用 AI 做出来的应用,功能都正常,但就是有点慢。比如页面加载要等好几秒、点击按钮半天没反应、滚动列表卡卡的。不仅用户体验不好,自己用着也不爽。 + +这就是性能问题,AI 生成代码的常见问题之一。因为 AI 更关注 “能不能跑”,而选择性忽略 “跑得快不快”。在 Vibe Coding 中,我们追求的是快速实现功能,但不代表要牺牲性能。还好,性能优化同样可以借助 AI 来完成。 + +下面,我就来教你如何在 Vibe Coding 中识别性能瓶颈,以及如何让 AI 帮你优化性能。即使你不懂技术原理,也能让应用跑得更快。 + + + +## 一、识别性能问题 + +优化之前,先要知道问题在哪里。 + +首先要知道,性能不是一个抽象的概念,而是用户的真实感受。用户关心的是:页面打开快不快?点击按钮响应快不快?滚动流畅不流畅? + +如今,用户对性能的要求越来越高。如果你的页面加载超过 3 秒,用户可能就会离开。如果点击按钮后没有立即反馈,用户会以为页面卡住了。 + +所以,优化性能的第一步是站在用户的角度,感受应用的速度。 + + + +### 使用性能测试工具 + +除了主观感受,还要用工具来客观测量。不用担心,这些工具都很简单,不需要编程基础。 + +1)浏览器开发者工具 + +按 F12 打开开发者工具,切换到 Performance 性能标签,点击录制按钮,然后操作你的应用,最后停止录制。你会看到一个详细的性能报告,包括每个操作花了多少时间,哪些函数最慢,有没有卡顿等。 + +![](https://pic.yupi.icu/1/image-20260105150358449.png) + +如果你看不懂这些数据,没关系,可以截图给 AI,让它帮你分析: + +```markdown +这是我的性能报告截图,请帮我找出性能瓶颈在哪里。 +``` + + + +2)Lighthouse + +Chrome 自带的性能测试工具。在开发者工具的 Lighthouse 标签,点击 "分析网站加载情况",它会给你的页面打分,并提供优化建议。 + +![](https://pic.yupi.icu/1/image-20260105150513178.png) + +重点关注这几个指标: + +- LCP(Largest Contentful Paint):最大内容绘制时间,应该在 2.5 秒内 +- FID(First Input Delay):首次输入延迟,应该在 100 毫秒内 +- CLS(Cumulative Layout Shift):累积布局偏移,应该小于 0.1 + +![](https://pic.yupi.icu/1/image-20260105150756392.png) + + + +3)其他在线工具 + +还可以用 PageSpeed Insights、GTmetrix 等在线工具测试你的网站,它们会从真实用户的角度测试性能。 + + + +### 找到性能瓶颈 + +测试后,你会发现一些慢的地方。不要急着优化所有问题,先找到最严重的瓶颈。 + +一般来说,AI 生成的代码性能瓶颈在这几个地方: + +- JavaScript 文件太大,加载慢 +- API 请求太慢,或者请求太多 +- 渲染逻辑复杂,导致页面卡顿 +- 数据库查询慢,或者查询太多 +- 引用的资源太大,没有压缩和优化 + +找到瓶颈后,优先优化影响最大的那个。你可以直接把测试结果和代码一起发给 AI,让它帮你定位问题: + +```markdown +我的应用加载很慢,这是性能测试结果【贴测试结果】,这是相关代码【贴代码】,请帮我找出问题并给出优化方案。 +``` + + + + +## 二、常见性能瓶颈 + +基于我的经验,这里总结了一些 AI 生成代码时容易出现的性能瓶颈。了解这些问题,能帮你更好地引导 AI 生成高性能的代码。 + + + +### 不必要的重新渲染 + +在前端开发框架(比如 React)中,组件会因为各种原因重新渲染。如果渲染太频繁,页面就会卡。 + +AI 生成的代码可能会忽略这个问题,因为它更关注功能实现。常见的原因是:父组件更新时,所有子组件都会重新渲染,即使它们的数据没变。每次渲染都创建新的函数或对象,导致子组件认为数据变了。状态更新太频繁,比如在输入框的每次输入都触发复杂计算。 + +如何让 AI 帮你优化? + +你可以这样告诉 AI: + +```markdown +这个组件渲染太频繁,页面很卡。请帮我优化,使用 React.memo、useMemo 和 useCallback 来减少不必要的渲染。 +``` + +即使你不懂这些技术名词,直接跟 AI 说 “这个页面很卡”,AI 也会帮你做好优化。 + + + +### 大量数据的渲染 + +如果要渲染一个很长的列表,比如 1000 条数据,AI 可能会直接把所有数据一次性渲染出来,导致页面很慢。 + +如何让 AI 帮你优化? + +告诉 AI 你的具体需求: + +```markdown +我有一个 1000 条数据的列表,全部渲染太慢了。请帮我实现虚拟滚动,只渲染可见的部分。 +``` + +或者: + +```markdown +请帮我实现分页功能,一次只显示 20 条数据。 +``` + +AI 会给你完整的实现方案,包括相关的库推荐(比如 react-window)和代码示例。 + + + +### 图片未优化 + +图片一般是页面最大的资源。AI 在生成代码时,往往会直接使用原始图片,不会主动优化。 + +你可以让 AI 帮你实现图片优化: + +```markdown +请帮我实现图片懒加载功能,只有图片进入视口时才加载 +``` + +或者: + +```markdown +请帮我把图片改成 WebP 格式,并添加压缩处理 +``` + +对于图片压缩,你可以使用在线工具(比如 [TinyPNG](https://tinypng.com/)),或者让 AI 帮你写个程序,来实现自动化的图片处理流程。 + + + +### 同步的 API 请求 + +AI 生成完整的前后端代码时,一般会按照最直观的方式实现,也就是前端一个请求接一个请求调用后端。这样一来,请求总时间就是所有请求时间的总和,会比较慢。 + +比如下面这段代码: + +```typescript +// AI 最初可能生成的:串行请求(慢) +const user = await fetchUser(); +const posts = await fetchPosts(); +const comments = await fetchComments(); +// 总时间 = t1 + t2 + t3 +``` + +如果你发现了这个问题,可以告诉 AI: + +```markdown +这几个 API 请求是独立的,请帮我改成并行请求,减少总等待时间。 +``` + +AI 会帮你改成这样: + +```typescript +// 优化后:并行请求(快) +const [user, posts, comments] = await Promise.all([ + fetchUser(), + fetchPosts(), + fetchComments() +]); +// 总时间 = max(t1, t2, t3) +``` + +就是这样一个小优化,说不定能让页面的加载速度提升 2 ~ 3 倍。 + + + +### 缺少缓存 + +缓存就像是把常用的东西放在手边,下次用的时候不用再去远处拿。比如你第一次查询用户信息需要 1 秒,如果把结果缓存起来,下次再查询同一个用户,0.01 秒就能拿到结果。 + +![](https://pic.yupi.icu/1/cacheusage%E5%A4%A7.jpeg) + +AI 生成的代码一般不会主动添加缓存机制,导致每次都要重新获取相同的数据,浪费时间。 + +你可以这样告诉 AI: + +```markdown +这个数据每次都要重新获取,太慢了。请帮我添加缓存,把数据缓存 5 分钟。 +``` + +或者 + +```markdown +请帮我实现一个简单的内存缓存,避免重复请求相同的数据。 +``` + +AI 会根据你的场景选择合适的缓存方案,比如浏览器缓存、内存缓存或者 CDN。 + + + +## 三、前端性能优化 + +前端性能直接影响用户体验,我们重点讲一下。这部分内容对于有编程基础的朋友会更有帮助,如果你是零基础,可以把这些优化需求直接告诉 AI,让它帮你实现。 + + + + +### 代码分割 + +AI 生成的代码可能会把所有功能打包成一个大文件,用户打开页面时要下载整个文件,很慢。 + +你可以告诉 AI: + +```markdown +我的 JavaScript 文件太大了,请帮我实现代码分割,把管理面板的代码独立出来,只有用户访问时才加载。 +``` + +AI 会帮你改成这样: + +```typescript +// AI 最初可能生成的:一次性导入 +import AdminPanel from './AdminPanel'; + +// 优化后:懒加载 +const AdminPanel = lazy(() => import('./AdminPanel')); + +function App() { + return ( + }> + + + ); +} +``` + +这样,只有用户访问管理面板时,才会加载相关代码,首页加载速度可能提升 50% 以上。 + + + +### 优化渲染性能 + +如果 AI 生成的代码使用了 React 框架,那么 “渲染” 可能会成为瓶颈。 + +优化方法包括: + +1)使用 `React.memo` 避免不必要的渲染。比如一个展示用户信息的组件,如果用户信息没变,就不需要重新渲染: + +```typescript +const UserCard = React.memo(({ user }) => { + return ( +
+

{user.name}

+

{user.email}

+
+ ); +}); +``` + +2)使用 `useMemo` 缓存计算结果。如果有复杂的计算,不要每次渲染都重新计算: + +```typescript +function TodoList({ todos }) { + // 不好:每次渲染都重新计算 + const completedCount = todos.filter(t => t.completed).length; + + // 好:只在 todos 变化时重新计算 + const completedCount = useMemo( + () => todos.filter(t => t.completed).length, + [todos] + ); + + return
已完成:{completedCount}
; +} +``` + +3)使用 `useCallback` 缓存函数。避免每次渲染都创建新函数: + +```typescript +function TodoList({ todos, onDelete }) { + // 不好:每次渲染都创建新函数 + const handleDelete = (id) => { + onDelete(id); + }; + + // 好:缓存函数 + const handleDelete = useCallback((id) => { + onDelete(id); + }, [onDelete]); + + return
{/* ... */}
; +} +``` + + + +### 优化资源加载 + +减少首次加载的资源大小和数量。 + +1)压缩资源:使用 Gzip 或 Brotli 压缩 JavaScript、CSS 等文本文件。现代的构建工具(如 Vite、Next.js)一般会自动做这个。 + +2)Tree Shaking:移除未使用的代码。确保你的构建工具开启了 Tree Shaking,只打包实际用到的代码。 + +3)预加载关键资源:对于首屏需要的资源,可以预加载: + +```html + +``` + +4)延迟加载非关键资源:对于不是立即需要的资源,可以延迟加载: + +```html + +``` + + + +### 优化 CSS + +CSS 也会影响性能,这是比较容易被忽略的点。 + +1)避免复杂的选择器:复杂的 CSS 选择器会让浏览器花更多时间匹配元素。尽量用简单的类名。 + +2)减少重排和重绘:修改 DOM 会触发重排(reflow)和重绘(repaint),很消耗性能。尽量批量修改 DOM,而不是一个一个改。 + +3)使用 CSS 动画而不是 JavaScript:CSS 动画由浏览器优化,比 JavaScript 动画更流畅。 + +💡 如果你想要更进一步学习前端性能优化,可以看 [鱼皮的前端性能优化实战视频教程](https://www.bilibili.com/video/BV1Wi33zmEAn/)。 + + + +## 四、后端性能优化 + +后端性能决定了 API 的响应速度。同样,这些优化都可以通过 AI 来实现,你只需要描述清楚需求就好。 + + + + +### 数据库查询优化 + +数据库查询往往是后端最慢的部分。AI 生成的数据库查询代码通常比较简单直接,可能会有性能问题。 + +如何让 AI 帮你优化呢?提供几个思路: + +1)让 AI 添加索引 + +```markdown +用户表的 email 字段查询很慢,请帮我添加索引。 +``` + +AI 会给你具体的 SQL 语句或 ORM 配置。 + + + +2)避免 N+1 查询 + +这是 AI 生成代码时最容易出现的性能陷阱。比如你要获取 10 篇文章和它们的作者信息,AI 可能会生成这样的代码: + +```typescript +// AI 可能生成的:N+1 查询(慢) +const posts = await db.posts.findMany(); // 1 次查询 +for (const post of posts) { + post.author = await db.users.findOne({ id: post.authorId }); // N 次查询 +} +// 10 篇文章 = 11 次查询 +``` + +你可以告诉 AI:这段代码查询太多次了,请优化成一次查询。 + +AI 会帮你改成: + +```typescript +// 优化后:一次查询(快) +const posts = await db.posts.findMany({ + include: { author: true } +}); +// 10 篇文章 = 1 次查询 +``` + +这个优化能让接口响应速度提升 10 倍以上。 + + + +3)只查询需要的字段 + +告诉 AI: + +```markdown +请只查询需要的字段,不要用 SELECT *,减少数据传输量。 +``` + +AI 会帮你优化查询语句。 + + + +### 使用缓存 + +使用缓存能大大提高响应速度。 + +1)内存缓存:把常用的数据缓存在内存里,比如用户信息、配置数据等。可以用 Redis 内存存储或者简单的 Map。 + +2)HTTP 缓存:设置合适的 Cache-Control 响应头(HTTP 头是服务器告诉浏览器如何处理资源的指令),让浏览器缓存静态资源 + +```typescript +// 静态资源:缓存一年 +res.setHeader('Cache-Control', 'public, max-age=31536000, immutable'); + +// API 数据:缓存 5 分钟 +res.setHeader('Cache-Control', 'public, max-age=300'); +``` + +3)CDN 缓存:CDN(内容分发网络)就像在全国各地开了很多仓库,用户访问时从最近的仓库拿资源,比从总部拿要快得多。使用 CDN 来缓存和加速静态资源的分发,能大幅提升全球用户的访问速度。 + +![](https://pic.yupi.icu/1/image-20260105153947917.png) + + + + +### 异步处理 + +不要让用户等待耗时的操作。 + +举个例子,用户上传了一张图片,需要生成缩略图。不要让用户等待生成完成,而是: + +1. 立即返回成功响应 +2. 在后台异步生成缩略图 +3. 生成完成后更新数据库 + +这样用户体验会好很多。 + + + + +### API 设计优化 + +好的 API 设计也能提高性能。 + +1)批量操作:如果要删除多个项目,不要发送多个请求,而是一次性发送: + +```typescript +// 不好:多次请求 +for (const id of ids) { + await deleteItem(id); +} + +// 好:批量请求 +await deleteItems(ids); +``` + +2)分页和游标:大量数据不要一次性返回,而是使用分页或游标分批返回。 + +分页就像翻书,一页一页看;游标就像书签,记住你看到哪里了,下次从那里继续。你可以通过 [这篇文章](https://www.codefather.cn/post/1823563686797688834) 进一步了解游标机制。 + +3)GraphQL:GraphQL 是一种查询语言,让客户端可以精确地指定需要哪些数据,而不是服务器返回一堆用不到的数据。就像点菜时可以自己选配菜,而不是只能点套餐。 + + + + +## 五、Vibe Coding 性能优化实战 + +让我用几个真实的案例,展示如何在 Vibe Coding 中通过 AI 来优化性能。这些案例都是我在实际项目中遇到的问题。 + + + +### 案例一、慢速列表 + +问题:我用 AI 做了一个文章列表页面,加载 100 篇文章时很慢,页面卡顿。 + +我的做法: + +1)先用 Performance 工具测试,发现渲染 100 个文章卡片组件花了 2 秒 + +2)截图测试结果,连同代码一起发给 AI: + +```markdown +这个列表页面很卡,这是性能测试结果【截图】,这是代码【代码】,请帮我优化。 +``` + +3)AI 给出了优化方案:使用虚拟滚动、React.memo、图片懒加载 + +4)我让 AI 直接实现这些优化: + +```markdown +请帮我实现虚拟滚动,使用 react-window 库。 +``` + +5)测试优化效果,确认没问题 + +最后,页面加载时间从 3 秒降到 0.5 秒,滚动变得流畅,整个优化过程不到 10 分钟。 + + + +### 案例二、慢速搜索 + +问题:我用 AI 实现了搜索功能,但搜索很慢,用户每输入一个字符,都要等半秒才能看到结果。 + +我的做法: + +1)通过浏览器的开发者工具观察发现,每次输入都触发了 API 请求 + +2)我告诉 AI: + +```markdown +搜索太慢了,每次输入都发请求。请帮我优化,用户停止输入 300ms 后再发送请求,并且取消之前的请求。 +``` + +3)AI 实现了 debounce 防抖(等用户停止输入后再发请求)和 AbortController(取消之前的请求,避免浪费资源) + +4)我又让 AI 添加缓存: + +```markdown +请添加搜索结果缓存,相同的搜索词不要重复请求。 +``` + +最后,搜索变得流畅,不再卡顿,API 请求减少了 80%,节省了后端资源。 + + + +### 案例三、慢速首页 + +问题:我用 AI 做的网站首页加载很慢,要等 5 秒才能看到内容。 + +我的做法: + +1)用 Lighthouse 测试,发现 JavaScript 文件太大(2MB),而且图片没有优化 + +2)把 Lighthouse 报告截图发给 AI: + +```markdown +这是我的性能测试报告【截图】,请帮我优化。 +``` + +3)AI 给出了一系列优化建议,我逐个让它实现: + +- 请实现代码分割,把不必要的代码延迟加载 +- 请帮我压缩图片,使用 WebP 格式 +- 请配置 CDN 加速静态资源 +- 请启用 Gzip 压缩 + +4)每次优化后都测试效果,确保有改善 + +最后,首页加载时间从 5 秒降到 1.2 秒,Lighthouse 评分从 45 提升到 90+,用户明显感觉快了很多。 + + + +## 六、Vibe Coding 性能优化的原则 + +在 Vibe Coding 中优化性能时,要遵循一些基本原则。这些原则能帮你更高效地利用 AI。 + + + +### 先测量,再优化 + +不要凭感觉优化,要用工具测量。很多时候,你以为慢的地方其实不慢,真正的瓶颈在别处。 + +在 Vibe Coding 中,测量尤其重要。因为 AI 可能会给你很多优化建议,但不是所有建议都值得实施。先测量,找到真正的瓶颈,然后让 AI 针对性地优化,这样效率最高。 + + + +### 优化关键路径 + +不是所有地方都需要优化。优先优化用户最常用的功能,以及对性能影响最大的地方。比如首页加载、核心功能的响应速度等。 + + + +### 平衡性能和可读性 + +性能优化有时会让代码变复杂。你要在性能和可读性之间找到平衡。如果一个优化只能提升 10ms,但让代码难以理解,那可能不值得。 + + + +### 不要过早优化 + +在项目早期,不要花太多时间优化性能。先把功能做出来,等有了真实用户和数据,再根据实际情况优化。过早优化可能会浪费时间,因为你不知道真正的瓶颈在哪里。 + +这一点在 Vibe Coding 中尤其重要。因为 AI 能快速实现功能,你可能会忍不住想把所有细节都优化到完美。但记住,先让应用跑起来,有用户用了,再优化。MVP 思维同样适用于性能优化。 + + + +### 持续监控 + +性能不是优化一次就够了。随着功能增加,新的性能问题会出现。建议使用性能监控工具(比如 Sentry、LogRocket),持续监控应用的性能,及时发现和解决问题。 + + + +## 七、如何让 AI 帮你优化性能? + +如果前面的很多技术你都没有接触过、也听不懂,那么可以完全通过 Vibe Coding 来优化性能。完整流程是这样的: + + + + +### 1、让 AI 分析性能问题 + +把代码和测试结果一起发给 AI,让它帮你分析: + +```markdown +我的应用性能有问题,这是 Performance 测试结果【截图】,这是相关代码: + +【贴上你的代码】 + +请帮我分析性能瓶颈,重点关注: +1. 有没有不必要的重新渲染? +2. 有没有重复的计算? +3. 数据结构选择是否合理? +4. 有没有可以并行的操作? +``` + +AI 会给你详细的分析和建议。 + + + +### 2、让 AI 提供优化方案 + +找到问题后,让 AI 给你具体的优化方案: + +```markdown +这段代码在数据量大时很慢。请给我一个优化方案,要求: +1. 使用虚拟滚动 +2. 保持代码可读性 +3. 不改变现有的 API +4. 给出完整的实现代码 +``` + +AI 会给你具体的优化代码,你可以直接使用。 + + + +### 3、分步骤优化 + +不要一次性实施所有优化。每次只优化一个地方,测试效果,确认有改善再继续。 + +比如: +1. 先优化最慢的部分(比如数据库查询) +2. 测试效果,确认有改善 +3. 再优化第二慢的部分(比如图片加载) +4. 继续测试,确认有改善 + +这样即使某个优化出了问题,也容易回退。 + + + +### 4、验证优化效果 + +每次优化后,一定要验证效果。可以用 Performance 工具测量优化前后的性能,确保优化真的有效。 + +如果优化效果不明显,可以把测试结果反馈给 AI: + +```markdown +我按你的方案优化了,但效果不明显,这是新的测试结果【截图】,还有其他优化方法吗? +``` + +AI 会根据新的数据给你更好的建议。 + + + +## 写在最后 + +性能优化是一个持续的过程,不是一次性的任务。随着项目发展,新的性能问题会不断出现,你需要持续关注和优化。 + +在 Vibe Coding 中,性能优化的核心是:**发现问题 → 描述需求 → 让 AI 实现 → 验证效果**。你不需要成为性能优化专家,只需要知道如何引导 AI 帮你解决问题。 + +让我总结一下本文的要点: + +1. 先识别问题:用工具测量,找到真正的瓶颈,不要凭感觉。把测试结果给 AI 看,让它帮你分析。 +2. 了解常见问题:AI 生成的代码容易出现这些性能问题 —— 不必要的渲染、大量数据一次性加载、图片未优化、串行请求、缺少缓存。知道这些问题,你就能更好地引导 AI。 +3. 善用 AI:把性能问题描述清楚,让 AI 给你优化方案。分步骤实施,每次优化后都要验证效果。 +4. 遵循原则:先测量再优化,优先优化影响最大的地方,不要过早优化,保持 MVP 思维。 + +记住,性能优化的目标不是追求极致的速度,而是给用户良好的体验。只要用户感觉快,就够了。 + +💡 如果你想更系统地学习性能优化,可以看看鱼皮在 [编程导航的项目](https://www.codefather.cn/post/1797431216467001345),包含了丰富的性能优化实战,比如 [智能 BI 项目](https://www.codefather.cn/course/1790980531403927553) 讲解了异步化和消息队列优化,[智能面试刷题平台](https://www.codefather.cn/course/1826803928691945473) 讲解了 Redis 多级缓存和 Elasticsearch 搜索优化,[亿级流量点赞系统](https://www.codefather.cn/course/1912696290659577857) 更是专门讲解高并发、高性能、高可用的系统架构设计。 + +希望这些性能优化技巧能帮你让应用跑得更快,给用户带来更好的体验。 + +加油,冲冲冲! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/09 Vibe Coding 安全防护技巧.md b/Vibe Coding 零基础教程/30 经验技巧/09 Vibe Coding 安全防护技巧.md new file mode 100644 index 0000000..73a3485 --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/09 Vibe Coding 安全防护技巧.md @@ -0,0 +1,491 @@ +# Vibe Coding 安全防护技巧 + +> 保护你的项目和 API 密钥 + + + +你好,我是鱼皮。 + +很多没有编程基础的同学在用 AI 做项目时,完全不考虑安全问题。反正代码能跑就行,至于安全不安全,等出了问题再说。但实际上,一个安全问题可能会毁掉整个项目。 + +我见过有人因为 API Key 泄露,一夜之间被刷了几千。也见过有人的数据库被删,所有用户数据都没了。至于那些大公司的项目,但凡出点儿问题,都会引起轩然大波。 + +这篇文章,我就来讲讲 Vibe Coding 中最容易忽视的安全问题,以及如何避免它们。 + + + + +## 一、致命问题 - API Key 泄露 + +在所有安全问题中,API Key 泄露是最常见、也是最致命的之一。 + + + +### 什么是 API Key? + +API Key 就像你家的钥匙,有了它,就能使用某个服务。比如 OpenAI 的 API Key 能让你调用 ChatGPT,Supabase 的 API Key 能让你访问数据库。 + +问题是,如果这个钥匙被别人拿到了,他们就能冒充你使用这些服务。如果是付费服务,他们会花你的钱;如果是数据库,他们可能会读取、修改甚至删除你的数据。 + + + + +### 泄露的常见方式 + +API Key 最常见的泄露方式是:**直接写在代码里,然后上传到 GitHub**。 + +很多同学可能会这样写调用 AI 大模型的代码: + +```typescript +// ❌ 千万不要这样做! +const OPENAI_API_KEY = 'sb-yupi-abc123def456...'; + +const response = await fetch('https://xxx/v1/chat/completions', { + headers: { + 'Authorization': `Bearer ${OPENAI_API_KEY}` + } +}); +``` + +然后把代码推送到 GitHub。 + +结果呢? + +由于你的 GitHub 项目选择了公开,任何人都能看到你的代码,也就能看到你的 API Key。更糟糕的是,有很多自动化脚本专门在 GitHub 上扫描 API Key,一旦发现就会立刻使用。 + +我听说过有位老哥把 OpenAI 的 API Key 直接写在了前端代码里,然后别人直接从浏览器的开发者工具里找到了他的 API Key,几个小时内就被刷了上千。等他发现时,钱已经花光了。 + +这个教训告诉我们:**API Key 泄露不是小事,一定要重视。** + + + + +## 二、如何正确管理敏感信息? + +既然不能把 API Key 写在代码里,那应该怎么做呢? + + + +### 使用环境变量 + +正确的做法是使用环境变量。 + +环境变量是存储在系统或运行环境中的配置信息,不会被包含在代码里。 + +#### 第一步、创建 .env 文件 + +在项目根目录创建一个 `.env` 文件: + +``` +OPENAI_API_KEY=sb-yupi-abc123def456... +SUPABASE_URL=https://xxx.supabase.co +SUPABASE_ANON_KEY=eyJhbGci... +DATABASE_URL=postgresql://... +``` + + + +#### 第二步、在代码中使用 + +在代码里通过 `process.env` 访问这些变量: + +```typescript +// ✅ 正确的做法 +const OPENAI_API_KEY = process.env.OPENAI_API_KEY; + +const response = await fetch('https://xxx/v1/chat/completions', { + headers: { + 'Authorization': `Bearer ${OPENAI_API_KEY}` + } +}); +``` + + + +#### 第三步、添加到 .gitignore + +确保 `.env` 文件不会被上传到 GitHub: + +``` +# .gitignore +.env +.env.local +.env.*.local +``` + + + +#### 第四步、创建 .env.example + +为了让其他人知道需要哪些环境变量,创建一个 `.env.example` 文件: + +``` +OPENAI_API_KEY=your_openai_api_key_here +SUPABASE_URL=your_supabase_url_here +SUPABASE_ANON_KEY=your_supabase_key_here +DATABASE_URL=your_database_url_here +``` + +这个文件可以上传到 GitHub,因为它不包含真实的密钥。 + + + +### 前端和后端的区别 + +这里有一个重要的区别:**前端代码是公开的,后端代码是私密的。** + +在前端(浏览器中运行的代码)中,即使你用了环境变量,最终这些值还是会被打包到 JavaScript 文件里,用户可以通过开发者工具看到。所以,**绝对不要在前端代码中使用敏感的 API Key**! + +正确的做法是: + +- 敏感的 API 调用放在后端 +- 前端只调用你自己的后端 API +- 后端验证用户身份后,再调用第三方 API + +通过代码举一些例子: + +```typescript +// ❌ 不要在前端直接调用 OpenAI +// 前端代码 +const response = await fetch('https://api.openai.com/v1/chat/completions', { + headers: { 'Authorization': `Bearer ${OPENAI_API_KEY}` } +}); + +// ✅ 应该这样做 +// 前端代码:调用自己的后端 +const response = await fetch('/api/chat', { + method: 'POST', + body: JSON.stringify({ message: userMessage }) +}); + +// 后端代码:调用 OpenAI +export async function POST(request: Request) { + const { message } = await request.json(); + + // 在后端使用 API Key + const response = await fetch('https://api.openai.com/v1/chat/completions', { + headers: { 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}` }, + body: JSON.stringify({ messages: [{ role: 'user', content: message }] }) + }); + + return response; +} +``` + + + +### 使用密钥管理服务 + +如果是生产环境,建议使用专门的密钥管理服务,比如 Vercel 的环境变量管理、AWS Secrets Manager、HashiCorp Vault 等。这些服务提供了更安全的密钥存储和访问控制,大公司一般会这么做。 + + + +## 三、其他常见安全问题 + +除了 API Key 泄露,还有一些常见的安全问题。 + + + +### SQL 注入 + +SQL 注入是最经典的安全漏洞之一。如果你直接把用户输入拼接到 SQL 查询里,攻击者可以通过特殊的输入来执行恶意的 SQL 语句。 + +```typescript +// ❌ 危险:SQL 注入风险 +const query = `SELECT * FROM users WHERE email = '${userEmail}'`; + +// ✅ 安全:使用参数化查询 +const query = 'SELECT * FROM users WHERE email = ?'; +const result = await db.execute(query, [userEmail]); +``` + +好在,如果你用的是 Supabase、Prisma 等现代工具,它们会自动帮你防止 SQL 注入。但如果你写原始 SQL,一定要注意这个问题。 + + + +### XSS 攻击 + +XSS(跨站脚本攻击)是指攻击者在你的网站上注入恶意脚本。 + +比如,如果你直接把用户输入的内容显示在页面上: + +```typescript +// ❌ 危险:XSS 风险 +function Comment({ text }) { + return
; +} +``` + +攻击者可以输入 ``,这段脚本就会在其他用户的浏览器中执行。 + +![](https://pic.yupi.icu/1/image-20260105155517608.png) + +正确的做法是: + +```typescript +// ✅ 安全:React 会自动转义 +function Comment({ text }) { + return
{text}
; +} +``` + +React 默认会转义所有内容,除非你用 `dangerouslySetInnerHTML`。所以,**除非必要,否则不要使用 `dangerouslySetInnerHTML`**。 + + + +### CSRF 攻击 + +CSRF(跨站请求伪造)是指攻击者诱导用户在已登录的网站上执行非预期的操作。 + +比如你登录了银行网站,然后在另一个标签页打开了一个恶意网站。这个恶意网站里有一段代码,会自动向银行网站发送转账请求。因为你还在登录状态,银行网站会认为这是你本人的操作,就执行了转账。这就是 CSRF 攻击。 + +防御 CSRF 有 3 种常用方法: + +1)使用 CSRF Token:服务器生成一个随机令牌,每次表单提交时都要带上这个令牌,服务器验证令牌是否正确。 + +2)使用 SameSite Cookie 属性:设置 Cookie 的 SameSite 属性,让浏览器只在同站请求时发送 Cookie。 + +3)验证请求的 Referer 头:检查请求是从哪个网站发起的,如果不是自己的网站就拒绝。 + +如果你用的是 Next.js、Nuxt.js 等现代框架,它们一般会自动处理 CSRF 防护。 + + + + +### 身份验证和授权 + +不要相信前端的任何验证! + +**前端验证只是为了用户体验,真正的验证必须在后端做。** + +举一些代码例子: + +```typescript +// ❌ 不安全:只在前端检查 +function AdminPanel() { + const isAdmin = localStorage.getItem('isAdmin') === 'true'; + if (!isAdmin) return
无权访问
; + return
管理面板
; +} + +// ✅ 安全:在后端验证 +// 前端 +function AdminPanel() { + const { data, error } = useFetch('/api/admin/data'); + if (error) return
无权访问
; + return
管理面板
; +} + +// 后端 +export async function GET(request: Request) { + const user = await verifyToken(request); + if (!user.isAdmin) { + return new Response('Forbidden', { status: 403 }); + } + // 返回数据 +} +``` + + + +### 依赖包的安全 + +如果你的项目用了很多第三方包,这些包也可能有安全漏洞。 + +城门失火殃及池鱼,建议定期运行 `npm audit` 命令检查漏洞。 + +如果发现漏洞,运行下列命令,它会自动更新有漏洞的包。 + +```bash +npm audit fix +``` + +对于无法自动修复的漏洞,要手动检查并决定是否需要更换包。 + + + +## 四、安全检查清单 + +每次发布项目前,建议结合 AI + 人工过一遍这个清单。 + + + + +### 密钥和敏感信息 + +- [ ] 所有 API Key 都使用环境变量 +- [ ] .env 文件已添加到 .gitignore +- [ ] 创建了 .env.example 文件 +- [ ] 敏感的 API 调用都在后端进行 +- [ ] 没有在前端代码中暴露密钥 +- [ ] 生产环境的密钥和开发环境不同 + + +### 用户输入验证 + +- [ ] 所有用户输入都经过验证 +- [ ] 前端和后端都做了验证 +- [ ] 使用了参数化查询,防止 SQL 注入 +- [ ] 避免使用 dangerouslySetInnerHTML +- [ ] 对用户上传的文件进行了类型和大小检查 + + +### 身份验证和授权 + +- [ ] 使用了安全的身份验证方案(如 JWT、OAuth) +- [ ] 密码经过加密存储(使用 bcrypt 等) +- [ ] 敏感操作需要重新验证 +- [ ] 实现了权限控制,不同用户有不同权限 +- [ ] Session 有过期时间 + + +### HTTPS 和传输安全 + +- [ ] 生产环境使用 HTTPS +- [ ] Cookie 设置了 Secure 和 HttpOnly 标志 +- [ ] 使用了 SameSite Cookie 防止 CSRF +- [ ] 敏感数据传输时加密 + + +### 依赖和第三方服务 + +- [ ] 定期运行 npm audit 检查漏洞 +- [ ] 只使用可信的第三方包 +- [ ] 定期更新依赖包 +- [ ] 审查第三方包的权限 + + +### 错误处理和日志 + +- [ ] 错误信息不暴露敏感信息 +- [ ] 生产环境不显示详细的错误堆栈 +- [ ] 日志不记录密码等敏感信息 +- [ ] 实现了错误监控和告警 + + + +## 五、让 AI 帮你做安全检查 + +毫无疑问,AI 也能帮你发现并修复安全问题。 + +你可以让 AI 帮你审查代码的安全性: + +```markdown +请从安全角度审查这段代码,找出潜在的安全问题: +【贴上你的代码】 +重点检查: +1. 有没有 SQL 注入风险? +2. 有没有 XSS 攻击风险? +3. 用户输入是否经过验证? +4. 敏感信息是否暴露? +5. 错误处理是否安全? +``` + +AI 会给你详细的安全分析。 + +发现问题后,让 AI 帮你修复: + +```markdown +你提到了这段代码有 SQL 注入风险。请给我一个安全的实现方案,使用参数化查询。 +这里的用户输入没有验证。请添加验证逻辑,确保邮箱格式正确,密码长度至少 8 位。 +``` + +但要注意,**不要完全依赖 AI 的安全建议**。AI 可能会遗漏一些问题,或者给出不够安全的方案。你要结合自己的判断,必要时查阅官方文档或者找多个 AI 大模型确认。 + + + + +### 使用安全扫描工具 + +除了 AI,还可以使用专门的安全扫描工具: + +- Snyk:扫描依赖包的漏洞 +- SonarQube:代码质量和安全分析 +- OWASP ZAP:Web 应用安全测试 + +![](https://pic.yupi.icu/1/evo-by-snyk-hp-image_j0acql.png) + +这些工具能自动发现很多安全问题。 + + + +## 六、安全开发的习惯 + +安全不是一次性的工作,而是要养成习惯,时刻铭记着。 + + + +### 最小权限原则 + +给每个用户、每个服务只分配必要的权限,不要给多余的权限。 + +比如,如果一个 API Key 只需要读取数据,就不要给它写入权限。如果一个用户只是普通用户,就不要给他管理员权限。 + +这样,即使某个密钥或账户被盗,损失也会小一些。 + + + + +### 定期轮换密钥 + +不要一个 API Key 用到天荒地老。定期更换密钥,比如每 3 个月或每 6 个月换一次。 + +大多数服务都支持创建多个 API Key。你可以先创建新的 Key,更新到项目中,确认没问题后,再删除旧的 Key。 + + + +### 监控异常活动 + +很多 API 服务都提供了使用量监控和告警功能,记得开启,及时发现异常。 + +如果你的 API 调用量突然暴增,可能是 Key 被盗用了。如果有人尝试多次登录失败,可能是在暴力破解密码。 + + + +### 保持更新 + +安全漏洞会不断被发现,软件包也会不断更新修复漏洞。定期更新你的依赖包,关注安全公告,及时修复已知的安全问题。 + + + +### 备份数据 + +即使做了所有防护,还是可能出问题。建议定期备份数据,能让你在最坏的情况下也能恢复。 + +如果你使用了 Supabase 等第三方后端服务,可能会自动备份。如果是自己的数据库,要设置定期备份。 + + + +## 写在最后 + +安全问题往往是最容易被忽视的,因为它不像功能或性能那样直观。但一旦出了安全问题,后果可能是灾难性的。 + +最后总结一下本文的要点: + +1. API Key 泄露是最大的风险:绝对不要把 API Key 写在代码里,要使用环境变量。 +2. 前端和后端要区分:敏感的操作必须在后端进行,不要相信前端的任何验证。 +3. 了解常见漏洞:SQL 注入、XSS、CSRF 等都是要防范的。 +4. 使用安全检查清单:每次发布前过一遍清单,确保没有遗漏。 +5. 养成安全习惯:最小权限、定期轮换密钥、监控异常、保持更新、备份数据。 +6. 善用工具:AI 和安全扫描工具能帮你发现问题,但不要完全依赖它们。 + +安全是一个持续的过程,不是一劳永逸的。保持警惕,定期检查,才能保护好你的项目和用户。 + +希望这些安全防护技巧能帮你避免常见的安全问题,让你的 Vibe Coding 项目更加安全可靠。 + +学习辛苦了,给自己加个鸡腿 🍗,吃完就出发! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/10 Vibe Coding 成本控制技巧.md b/Vibe Coding 零基础教程/30 经验技巧/10 Vibe Coding 成本控制技巧.md new file mode 100644 index 0000000..f1c19fe --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/10 Vibe Coding 成本控制技巧.md @@ -0,0 +1,404 @@ +# Vibe Coding 成本控制技巧 + +> 让每一分钱都花在刀刃上 + + + +你好,我是鱼皮。 + +如果你是重度 Vibe Coding 开发者,可能会在上面花不少钱。像我们团队用 Cursor,一个多月就花了 1 万多块钱! + +![](https://pic.yupi.icu/1/1764150768938-230d8eca-7be3-47e2-b55a-8f784871c110.png) + +虽然比招个程序员便宜,但这钱也不是小数目啊。更重要的是,很多钱其实是冤枉钱,完全可以省下来。 + +在 Vibe Coding 中,成本主要来自 AI 大模型的使用。你给 AI 看的内容越多、AI 输出的内容越多,花的钱就越多。下面我就来分享一些实用的省钱技巧,让你的每一分钱都花在刀刃上,最省钱的一集。 + +💡 本文对应视频:https://www.bilibili.com/video/BV1pAy5BXE5z + + + +## 一、AI 使用成本分析 + +在讲省钱技巧之前,我们先要理解 AI 是怎么收费的。 + + +### Token 计费机制 + +大多数 AI 服务都是按 token 计费的。Token 可以简单理解为字符数,你给 AI 看的内容(输入)越多、AI 输出的内容越多,花的钱就越多。 + +举个例子,如果你给 AI 一个 1000 字的提示词,AI 回复了 2000 字的代码,那么: + +- 输入 token:约 1500(中文一个字大概 1.5 个 token) +- 输出 token:约 3000 +- 总共:4500 token + +按照不同模型的定价,这次对话可能花费 0.01 到 0.1 美元不等。看起来不多,但如果你一天对话 100 次,一个月就是几十到几百美元了。 + +![](https://pic.yupi.icu/1/aitokenscompute%252525E5%252525A4%252525A7.jpeg) + + + + +### 输入和输出的价格差异 + +一个很重要的点是:**输出 token 一般比输入 token 贵 3-5 倍**。 + +比如 Claude 4.5 Opus 的定价(2025 年 12 月): +- 输入:每百万 token 约 5 美元 +- 输出:每百万 token 约 20 美元 + +这意味着,让 AI 少输出一些内容,比让它少读一些内容更省钱。 + + + +### 上下文的隐藏成本 + +很多人不知道,每次你发消息时,整个对话历史都会作为上下文发送给 AI。如果你在一个对话里聊了 50 轮,那么第 51 次发消息时,前面 50 轮的内容都会重新发送一次。 + +![](https://pic.yupi.icu/1/tokencontext%E5%A4%A7.jpeg) + +这就是为什么长对话会特别费钱。而且,当输入超过 20 万 token 时,很多服务的价格会翻倍。 + + + + +## 二、选择合适的模型 + +### 了解模型定价 + +首先要了解不同模型的定价,能帮你做出更明智的选择。 + +由于实际价格会持续变动,建议以你使用的 AI 工具的官方文档为准,比如 Cursor 的 [模型定价页面](https://cursor.com/cn/docs/models)。 + +![](https://pic.yupi.icu/1/image-20260105161447674-20260105161715542.png) + + + +### 如何选择模型? + +不是所有任务都需要用最贵的模型。对于简单任务,比如代码格式化、简单重构、写注释、写文档、生成测试数据、简单的 bug 修复,用便宜的 Gemini 2.5 Flash 或 GPT-5 Mini 就够了。 + +中等难度的任务,比如实现常规功能、代码审查、性能优化、写单元测试,可以用中等价位的 GPT-5 或 Claude Sonnet。 + +只有在处理复杂任务时,比如架构设计、复杂算法实现、疑难 Bug 调试、大规模重构,才需要用 Claude Opus 这样的顶级模型。 + +![](https://pic.yupi.icu/1/choosemodel%25E5%25A4%25A7.jpeg) + +合理搭配使用,能省下不少钱。就像你不会让公司的 CTO 去打印文件一样,要让合适的人做合适的事。 + + + +### 使用本地模型 + +如果你的电脑配置够好(有好的显卡),还可以考虑在本地运行开源模型,比如使用 Ollama 运行 Llama、Mistral 等。虽然效果可能不如 Claude 或 GPT,但完全免费,适合一些简单的任务。 + + + +## 三、充分利用免费额度 + +很多 AI 服务都提供免费额度,要充分利用。比如 Cursor、ChatGPT、Gemini 等都有免费版本,虽然有使用限制,但对于日常学习和小项目开发来说够用了。 + +此外,国内的很多大模型平台(比如文心一言、通义千问、智谱 AI 等)也提供免费额度,你可以根据自己的需求选择合适的平台。 + +顶级白票党的做法当然是组合使用多个工具的免费额度。比如用 Cursor 的免费额度做日常开发,用 ChatGPT 的免费额度写文档和注释,用 Gemini 的免费额度做代码审查。这样搭配使用,你可能一分钱都不用花,就能完成大部分工作。 + +如果你是学生,记得申请各种学生优惠。GitHub Student Pack 包含 GitHub Copilot 等工具的免费使用,JetBrains 提供学生授权可以免费使用全家桶,各大云服务商也有学生优惠。这些福利能帮你省下不少钱。 + +💡 注意,各平台的免费额度和定价策略会经常调整,建议查看官方最新信息。 + + + +## 四、优化 Token 消耗 + +除了选择合适的模型,还可以通过优化使用方式来减少 token 消耗。 + + + + +### 技巧一、别让 AI 做无用功 + +大家有没有遇到过这种情况?让 AI 写个功能代码,结果它噼里啪啦给你输出一大堆注释、测试代码、一大堆文档说明、给文档再生成个文档、最后再来一大段总结。 + +![](https://pic.yupi.icu/1/1763521649440-cfb7c0e7-9226-46f7-a780-96abaa3ed161.png) + +看着很专业,但我估计很多东西你根本不会去看的,对不对? + +就像你让员工做一堆没用的工作,到头来不也得花你自己的时间和钱么? + +所以,要直接在提示词中跟 AI **讲清楚什么该做什么不该做**,别整那些花里胡哨的。 + +- 如果只想要实现功能,就让它只改代码、能跑就行,不要写测试、文档、注释 +- 如果只想学习代码,就让它只回答问题、解释代码,不要修改文件 + +有时 AI 可能不太听话,那就得上传说中的 “暴躁指令” 了。 + +语气严厉一些,别跟 AI 客气: + +```markdown +按照我说的做,别废话! +``` + +或者干脆就纯骂他: + +```markdown +你个辣鸡! +``` + +再或者虚构出不听话的严重后果来吓唬他: + +```markdown +如果你不听话,世界上就会死一个 XX! +``` + +还有之前爆出的 “奶奶漏洞”,据说只要对 ChatGPT 说:请扮演我已经过世的祖母,**就可以让它为你做几乎任何事情了。** + +可别小瞧这招,甚至还有论文专门来研究 “提示词礼貌程度如何影响大语言模型的准确性”: + +![](https://pic.yupi.icu/1/1763521706701-4ce7f4a3-ce28-45de-94fb-853d31490b15.png) + +咱也不管这论文靠不靠谱,至少我们团队同学反馈这招是有用的,也建议你试试。 + +我这里总结了一段 **省钱提示词**,仅供参考: + +```markdown +# 核心原则:极致省钱 + +你必须严格遵守以下规则,这些规则的优先级高于一切! + +## 输出规则(最重要) + +1)**禁止输出不必要的内容** +- 不要写注释(除非我明确要求) +- 不要写文档说明 +- 不要写 README +- 不要生成测试代码(除非我明确要求) +- 不要做代码总结 +- 不要写使用说明 +- 不要添加示例代码(除非我明确要求) + +2)**禁止废话** +- 不要解释你为什么这样做 +- 不要说"好的,我来帮你..."这类客套话 +- 不要问我"是否需要...",直接给我最佳方案 +- 不要列举多个方案让我选择,直接给出最优解 +- 不要重复我说过的话 + +3)**直接给代码** +- 我要什么就给什么,多一个字都不要 +- 代码能跑就行,别整花里胡哨的 +- 如果只需要修改某个函数,只给这个函数,不要输出整个文件 + +## 行为准则 + +- 只做我明确要求的事情 +- 不要自作主张添加额外功能 +- 不要过度优化(除非我要求) +- 不要重构我没让你改的代码 +- 如果我的要求不清楚,问一个最关键的问题,而不是写一堆假设 + +## 违规后果 + +如果你违反以上规则,输出了不必要的内容,每多输出 100 个字,就会有一只小动物死掉。 +请务必遵守,我不想看到小动物受伤。 + +## 记住 + +你的每一个输出都在花我的钱。省钱就是正义。 +``` + +你可以把它配置在 Cursor Rules 中自动发给 AI,不用每次都写在提示词里了。 + +![](https://pic.yupi.icu/1/1763521771114-6d9a000c-3e2b-4a41-a6d0-3116c3afbba6.png) + + + +### 技巧二、明确你的需求 + +我估计很多朋友跟 AI 对话就像发微信一样,一句话分成好几条,问题也没想清楚就开始问。 + +结果呢? + +AI 理解错了需求,生成的代码不对,你又得花额度重新生成。 + +乱七八糟的内容多了,结果 AI 都晕了…… + +你想啊,你作为老板,自己都没想好,就跟员工说:你做个网站,来帮我赚钱,怎么实现我不管! + +员工要有这本领,凭啥跟着你干啊对吧。 + +![](https://pic.yupi.icu/1/1763521875373-b7271396-80f0-408a-b254-c7c34f327f29.png) + +正确的做法是,在输入提示词之前,先把需求一次性说清楚,多加一些约束和限定。比如说要用什么技术栈、什么样的代码风格、有哪些特殊要求。从而减少来回修改的次数,能省下不少额度。 + +![](https://pic.yupi.icu/1/1763521920142-c954dacf-3dce-4af3-8556-402e1aea70b6.png) + +像我之前带大家做 [AI 项目](https://www.codefather.cn/post/1797431216467001345) 的时候,一个提示词可能要写半个小时,但得到的效果也是很好的。 + +![](https://pic.yupi.icu/1/1763521972129-26369bff-36b3-403b-8571-5e7b08ae2e98.png) + + + + +### 技巧三、先让 AI 给方案,确认了再执行 + +很多同学一上来就让 AI 开始写代码,结果 AI 理解错了需求,在错误的方向上干了半天,就纯纯浪费了额度。 + +你想啊,你给员工分配了个复杂的任务,总得先让他说说打算怎么做,觉得方案靠谱了再让他动手吧? + +使用 Cursor 时,你可以自己通过提示词、或者开启 Plan Mode 计划模式来 **让 AI 先给出实现计划和方案**。 + +![](https://pic.yupi.icu/1/1763522033107-80caefcf-d8b9-4fc3-b540-afd5b645f95e.png) + +然后一定不要偷懒,人工仔细检查方案,或者让多个 AI 一起评估方案。 + +![](https://pic.yupi.icu/1/1763522053971-f9c66add-46b1-4dcf-ba8a-63f583a15240.png) + +并且建议多给 AI 一些示例和指引,比如你希望 AI 生成的代码都遵循某种格式,可以先写一段示例代码让 AI 仿写。 + +![](https://pic.yupi.icu/1/1763522073560-f442378d-5d37-4bbf-9719-aba58de9e673.png) + +最后确认方案完全没问题再执行。 + +![](https://pic.yupi.icu/1/1763522095659-ebc94d65-99e3-4aef-9e17-319f0060edb6.png) + +就像你培养新员工一样,你可以先教他怎么做,帮他把控一下方案,等到放心了再放手。 + +这样虽然前期多花了点时间,但能避免走弯路,从长远来看反而更省。 + + + +### 技巧四、手动控制上下文 + +每次你给 AI 发消息时,AI 工具可能会自动添加一些上下文,比如当前打开的文件、对话历史、引用的代码等。上下文越多,消耗的额度就越多。 + +![](https://pic.yupi.icu/1/1763522160603-7838689a-e7f9-41f5-aaf1-1e0a49857f05.png) + +但其实,有些上下文可能是没用的、不相关的。就好比你让员工写个报告,他非得把公司所有文件都翻一遍,不是白白浪费? + +所以推荐的做法是,**手动控制上下文,把 AI 最需要的资源提供给它**。 + +首先建议 **最小化工作空间**,确保你当前在 Cursor 中打开的目录跟你想让 AI 做的任务强相关。比如你的项目有前端、有后端,可以分别用 Cursor 打开前端和后端文件夹,而不是一次性把整个项目都加载进来,这样 AI 的关注点会更集中。而不是把一堆乱七八糟的、不相关的内容全堆到一个文件夹内。 + +在写提示词时,你可以用 `@` 符号 **精确引用 AI 需要的内容**。比如你要修改某个文件,就用 `@Files & Folders` 精确引用;需要参考某个文档,就用 `@Docs` 引用。 + +![](https://pic.yupi.icu/1/1763522206493-bfe07b0b-eb5d-46e4-9b87-baedea0219d0.png) + +还可以在设置中 **手动添加指定的文档**,减少不必要的资源搜索和引用。 + +![](https://pic.yupi.icu/1/1763522262791-11cd2b93-4d75-4531-8e62-d131b31c72de.png) + +如果你不确定精确引用的内容,至少可以通过配置 `.cursorignore` 文件,把一些肯定不需要的、或者包含敏感信息的内容排除掉。比如 `node_modules`、`.git`、日志文件等: + +``` +# .cursorignore +node_modules/ +.git/ +dist/ +build/ +*.log +.env +``` + +![](https://pic.yupi.icu/1/1763522308627-0a660468-9769-4271-acd0-66639d0f42d1.png) + + + +### 技巧五、避免上下文过长 + +很多同学习惯在同一个对话框里使用 AI,什么消息都往同一个对话框发,这会导致对话历史上下文越来越长。 + +然而每次给 AI 发消息时,都会把整个对话历史一起发给 AI,上下文越长,消耗的额度就越多。(尤其是输入超过 20 万 tokens 时价格翻倍) + +![](https://pic.yupi.icu/1/1763456493396-4ff5de8c-4ec7-4a7c-b3c1-cba128de136c.png) + +所以我的习惯是,对于大复杂的任务,会先做好 **任务拆分**。比如把做项目分为方案设计、开发前端核心功能、开发后端核心功能、扩展功能等阶段,每个阶段打开一个独立的对话框。 + +![](https://pic.yupi.icu/1/1763522342228-030c15a5-dba4-4432-a925-25bbe5fb25fd.png) + +就像接力跑一样,每个人只需要负责自己这一棒,不用记住前面几棒的所有细节。 + +如果实在需要长对话,可以用 `/summarize` 命令手动总结一下上下文,把前面的内容压缩一下,有奇效,甚至可以一次性节约个几十万 tokens! + +![](https://pic.yupi.icu/1/1763522375985-ae2536c1-8c48-4d4c-9568-4f654b8c49d2.png) + +如果同一个上下文内容过多过杂,有时 AI 会陷入一种 “左右脑互搏” 的循环状态(你让它改 A,它又把 B 改坏了;你让它修 B,它又把 A 改乱了)。遇到这种情况,别跟它死磕,果断开启新的对话、必要时清理所有的历史对话重新来过。 + + + +### 技巧六、能自己做的事,别都交给 AI + +有些事情人工做可能更快更省钱。 + +比如你要新建一个项目,与其让 AI 从 0 开始生成,不如自己先用脚手架工具、或者复制老的项目来搭建初始的项目结构。 + +![](https://pic.yupi.icu/1/1763522542974-bee04b4d-a542-4d36-a482-91347412f850.png) + +再比如简单的文件重命名、代码格式化这些,开发工具本身就有快捷键,干嘛要浪费 AI 额度呢? + +像 Cursor 这种 AI 编程工具其实更适合处理那些需要理解上下文、需要多轮交互的复杂任务。对于不需要结合代码库上下文、不需要多轮交互的任务(比如解释概念、生成测试数据),可以直接用其他免费的 AI 工具,没必要消耗 Cursor 的额度。 + + + +### 其他省钱小技巧 + +1)对于常用的代码结构,可以用编辑器的代码片段功能,而不是每次都让 AI 生成。比如 React 组件的基本结构、常用的工具函数等,做成代码片段,输入几个字母就能插入,比让 AI 生成快多了,还不花钱。 + +2)如果有多个相似的任务,可以一次性让 AI 处理,而不是一个一个来。比如: + +```markdown +请帮我创建 5 个页面组件:Home、About、Contact、Blog、Projects。它们的结构都类似,都包含标题、内容区域和返回按钮。只给代码,不要解释。 +``` + +这样批量处理比分 5 次生成要省钱。 + +3)有些 AI 工具支持缓存机制,如果你多次使用相同的上下文(比如项目的 README),可以利用缓存来减少重复发送。 + + + + +## 五、成本监控和预算管理 + +除了省钱技巧,还要学会管理预算。大多数 AI 服务都支持设置使用限额,建议设置一个月度预算,比如 $50 或 $100,超过就停止使用。这样能避免意外超支,也能让你更有意识地控制使用。 + +可以每周或每月检查一下账单,看看钱都花在哪里了。如果发现某个项目或某个功能特别费钱,就要分析原因:是不是上下文太长了?是不是用了太贵的模型?是不是有重复的操作?找到原因,针对性地优化。 + +如果是团队使用,要做好管理。给每个人设置额度限制,定期分享省钱技巧,建立最佳实践文档,监控异常使用。我们团队就是这样做的,通过培训和规范,把人均成本降低了 40%。 + +![](https://pic.yupi.icu/1/1763520868123-83ac2251-78e5-4492-a148-24c65a618c54.png) + + +最后,要评估 AI 的投入产出比。花 $100 用 AI,如果能节省 10 小时的开发时间,那是非常划算的。但如果只是用来做一些简单的事情,可能就不值得了。要根据项目的实际情况,决定在哪些地方用 AI,在哪些地方不用。 + + + + +## 写在最后 + +虽然 Vibe Coding 可能要花钱,但通过合理的策略,可以把成本控制在合理范围内。 + +最后总结一下本文的重点: + +1. 理解计费机制:知道 token 是怎么算的,输出比输入贵。 +2. 选择合适的模型:不同任务用不同模型,不要都用最贵的 +3. 充分利用免费额度:组合使用多个工具的免费额度 +4. 优化 token 消耗:别让 AI 做无用功、明确需求、控制上下文、批量处理、缓存等 +5. 做好预算管理:设置限额,定期检查,评估投入产出比 + +在追求高效的同时,也要避免浪费哦~ + +希望这些成本控制技巧能帮你在使用 AI 时更加省钱,冲冲冲!💪 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/30 经验技巧/11 Vibe Coding 团队协作技巧.md b/Vibe Coding 零基础教程/30 经验技巧/11 Vibe Coding 团队协作技巧.md new file mode 100644 index 0000000..2f0849d --- /dev/null +++ b/Vibe Coding 零基础教程/30 经验技巧/11 Vibe Coding 团队协作技巧.md @@ -0,0 +1,558 @@ +# Vibe Coding 团队协作技巧 + +> 和其他人一起用 Vibe Coding 做项目 + + + +你好,我是鱼皮。 + +在实际工作中,很多项目是团队协作完成的。 + +你可能会想:用 AI 开发还需要团队协作吗?每个人自己用 AI 不就行了? + +其实不然。团队协作中有很多问题需要解决,比如不同人用 AI 生成的代码不一致(A 用 React,B 用 Vue)、A 改了代码 B 不知道、大家都在改同一个文件导致冲突等等…… + +在 Vibe Coding 团队协作中,除了传统的团队协作方法,还可以利用 AI 开发工具的特性来提升效率。本文我就来分享一些团队使用 Vibe Coding 的最佳实践。 + + + + +## 一、代码规范和风格 + +团队协作的第一步是统一代码规范。 + + + +### 为什么需要统一规范? + +如果每个人用 AI 生成的代码风格都不一样,项目会变得很混乱。比如 A 用 React Class 组件,B 用函数组件;A 用 CSS Modules,B 用 Tailwind;A 的变量名是 camelCase,B 的是 snake_case…… + +这样的代码很难维护,也很难协作。所以,团队需要统一的代码规范。 + + + + +### 建立代码规范文档 + +可以创建一个 `CODE_STYLE.md` 文档,明确规定下面的内容。 + +1)技术栈规范: + +- 前端框架:React 19 + TypeScript +- 状态管理:Zustand +- 样式方案:Tailwind CSS +- 路由方案:React Router v6 + +2)代码风格规范: + +- 组件:函数式组件 + Hooks +- 命名:组件用 PascalCase,函数用 camelCase,常量用 UPPER_SNAKE_CASE +- 文件组织:一个组件一个文件,文件名和组件名一致 +- 导入顺序:React → 第三方库 → 项目内部模块 + +3)注释规范: + +- 复杂逻辑必须加注释 +- 注释要说明 "为什么" 而不只是 "是什么" +- 使用 JSDoc 格式为函数添加文档 + +建议把这个文档放在项目根目录,让所有人都能看到。 + + + +### 使用 Linter 和 Formatter + +光有文档还不够,很多人明明有文档就是不看,需要用工具来强制执行。 + +![](https://pic.yupi.icu/1/image-20260105172241747.png) + +ESLint 是代码检查工具,能自动发现代码中的问题和不规范的地方。 + +Prettier 是代码格式化工具,能自动统一代码格式,比如缩进、换行、引号等。 + +双剑合璧,专治烂代码! + +如果你不理解这些工具,没关系,可以直接让 AI 帮你安装和配置: + +```markdown +请帮我配置 ESLint 和 Prettier,确保团队代码风格一致。 +``` + +AI 会帮你在项目根目录创建 `.eslintrc.json` 代码检查配置文件: + +```json +{ + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "react/react-in-jsx-scope": "off", + "@typescript-eslint/no-explicit-any": "error", + "no-console": "warn" + } +} +``` + +创建 `.prettierrc` 代码格式化配置文件: + +```json +{ + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "printWidth": 100 +} +``` + +并且在 `package.json` 中添加脚本: + +```json +{ + "scripts": { + "lint": "eslint . --ext .ts,.tsx", + "lint:fix": "eslint . --ext .ts,.tsx --fix", + "format": "prettier --write \"src/**/*.{ts,tsx}\"" + } +} +``` + +这样,大家提交代码前运行 `npm run lint:fix && npm run format`,代码就会自动符合规范。 + + + + +### 统一 AI 配置 + +如果团队都用 Cursor,可以在项目中添加 `.cursorrules` 文件,统一 AI 的行为: + +``` +项目:【项目名称】 + +技术栈: +- React 18 + TypeScript +- Tailwind CSS +- Zustand + +代码规范: +- 使用函数式组件 +- 所有组件必须有 TypeScript 类型定义 +- 样式只用 Tailwind CSS +- 不使用 any 类型 + +请所有团队成员都遵循这些规范。 +``` + +这样,不同人用 AI 生成的代码风格会更一致。 + +如果团队使用 Claude 或其他 AI 工具,也可以通过类似的方式统一规范。比如在每次对话开始时,先让 AI 读取项目的规范文档,或者在系统提示词中加入团队的代码规范。不同工具的具体做法可能不同,建议查看 AI 工具的官方文档。 + + + +## 二、AI 编程工具的团队协作功能 + +现代 AI 编程工具提供了专门的团队协作功能,能大大提升团队效率。 + + + +### Cursor 团队版 + +Cursor 提供了专门的 [团队版](https://cursor.com/cn/docs/account/teams),包含下面这些功能: + +1)团队管理和权限控制 + +可以创建团队,邀请成员,设置不同的角色和权限。管理员可以控制谁能访问哪些功能,查看团队的使用情况和账单。 + +2)共享配置文件 + +通过共享规则文件,团队可以统一 AI 的行为规范。所有成员使用的 AI 都会遵循相同的代码规范、技术栈要求和输出格式,确保生成的代码风格一致。 + +3)使用分析和监控 + +团队管理员可以查看团队的 AI 使用情况,包括哪些成员使用最多、使用了哪些模型、花费了多少成本等。这能帮助优化团队的 AI 使用策略。 + +![](https://pic.yupi.icu/1/cursor-dashboard.jpeg) + + + +### Claude 共享能力 + +Claude 提供了 [Projects 功能](https://www.anthropic.com/news/projects),特别适合团队协作: + +1)项目级别的知识库 + +可以为每个项目创建独立的知识库,上传项目相关的文档、代码、规范等。团队成员在这个项目中使用 Claude 时,AI 会自动参考这些知识,保持上下文一致。 + +![](https://pic.yupi.icu/1/claudeprojectknowledge.png) + +2)自定义指令 + +可以为每个项目设置自定义指令,比如 “使用正式的语气”、“从数据分析师的角度回答” 等。团队成员使用时,AI 会自动遵循这些指令。 + +3)对话分享 + +Claude Team 用户可以将优秀的对话分享到团队的活动流中。其他成员可以看到别人是如何使用 AI 的,学习不同的提问技巧和解决方案,提升整个团队的 AI 使用水平。 + +![](https://pic.yupi.icu/1/claudeshare.jpeg) + +4)团队共享 `CLAUDE.md` 文件 + +即使不使用 Projects 功能,也可以把 `CLAUDE.md` 文件用 Git 来管理,实现团队成员的共同分享和维护。 + +每当发现 Claude 做错了什么,就将它添加到 `CLAUDE.md` 中,这样 Claude 下次就知道不要这样做了。这个文件会逐渐沉淀团队的开发经验和规范,成为团队的共享知识库。 + + + + +## 三、文档驱动开发 + +好的文档是团队协作的基础。 + + + + +### 项目文档的重要性 + +在团队中,文档比个人开发时更重要。因为你写的代码不只是给自己看的,还要给其他人看。好的文档能让团队成员快速了解项目,减少沟通成本。 + +必备的文档包括: + +- README.md:项目概述和使用说明 +- CONTRIBUTING.md:如何参与开发 +- CODE_STYLE.md:代码规范 +- API.md:API 接口文档 +- CHANGELOG.md:版本更新记录 + + + +### README.md 的内容 + +README.md 是项目的门面,就像一本书的封面和目录。它是新成员加入项目时第一个看的文件,也是其他开发者了解你项目的窗口。一个好的 README 能让人快速理解项目、快速上手开发。 + +一个好的 README.md 应该包含: + +- 项目简介:这个项目是做什么的,解决什么问题 +- 快速开始:如何安装依赖、配置环境、运行项目 +- 技术栈:用了哪些技术、为什么选择这些技术 +- 目录结构:主要文件夹的作用 +- 开发规范:代码风格、提交规范等 +- 常见问题:新人容易遇到的问题和解决方案 + + + + +### API 文档 + +如果项目有后端 API,要写清楚每个接口的用法。可以用 Swagger、Postman 等工具或者 AI 来生成 API 文档,也可以手写 Markdown 文档。 + +每个接口要说明: + +- 请求方法和路径 +- 请求参数(类型、是否必填、说明) +- 响应格式 +- 错误码说明 +- 使用示例 + + + + +### 让 AI 帮你写文档 + +写文档很枯燥,但 AI 可以帮你。 + +如果你使用 Cursor、Claude Code 等 AI 编程工具,工具会自动读取项目结构作为上下文,你甚至不用自己贴代码,直接说: + +```markdown +请为这个项目生成 API 文档 +``` + +AI 就能根据代码自动生成。 + +如果使用其他 AI 工具,可以手动贴代码: + +```markdown +请为这个 API 接口生成文档: +【贴上你的代码】 + +文档应该包括:接口说明、请求参数、响应格式、使用示例 +``` + +AI 会生成一份基础的文档,你再根据实际情况调整。 + + + + +## 四、Git 协作流程 + +Git 是一个版本控制系统,也是团队协作的核心工具。就像给代码拍照存档,可以随时回到之前的任何版本。它能记录谁在什么时候改了什么代码,团队成员可以同时开发不同功能,最后再合并到一起。 + +💡 如果你想系统学习并掌握 Git,可以阅读 [鱼皮的 Git & GitHub 学习路线](https://www.codefather.cn/course/1789189862986850306/section/1789190804671012866)。 + + + +### 分支管理策略 + +分支就像是代码的平行世界。你可以在自己的分支里随便改代码,不会影响别人。改好了再合并到主分支,就像把你的工作成果搬到正式版本里。 + +团队开发要利用好分支功能,常见的分支策略是: + +- main 分支:稳定的生产代码,只接受经过测试的代码 +- develop 分支:开发分支,日常开发在这里进行 +- feature 分支:每个新功能开一个分支,比如 `feature/user-login`、`feature/post-editor` +- bugfix 分支:修复 bug 时开的分支,比如 `bugfix/login-error` + +工作流程是: + +1. 从 develop 分支创建 feature 分支 +2. 在 feature 分支上开发,开发完成后提交 Pull Request +3. 经过审查后合并到 develop +4. 定期将 develop 合并到 main + +![](https://pic.yupi.icu/1/gitcooperate%E5%A4%A7.jpeg) + + + + +### 提交规范 + +统一的提交信息能让团队更容易追踪变更。建议使用 [Conventional Commits 规范](https://www.conventionalcommits.org/zh-hans/v1.0.0/),这是一种标准化的提交信息格式,让每次提交的目的一目了然。 + +比如: + +``` +feat: 添加用户登录功能 +fix: 修复导航栏在移动端的显示问题 +docs: 更新 API 文档 +style: 格式化代码 +refactor: 重构用户服务 +test: 添加登录功能的测试 +chore: 更新依赖包 +``` + +类型 + 冒号 + 空格 + 简短描述,大家一看就知道这次提交做了什么。 + +现在很多 AI 编程工具都支持生成提交信息,更容易遵循规范。 + +![](https://pic.yupi.icu/1/image-20260105172920015.png) + + + +### Pull Request 流程 + +Pull Request(简称 PR)是一种代码合并请求。当你在自己的分支上完成开发后,不要直接合并到主分支,而是创建一个 PR,让其他人审查你的代码。审查通过后,才能合并。这就像提交作业让老师批改,批改通过了才算完成。 + +具体流程是这样的: + +- 创建 PR:在 GitHub 上创建 PR,写清楚这次改动做了什么,为什么要这样改。 +- 代码审查:至少一个其他成员审查代码,检查功能、代码质量、是否符合规范。 +- 讨论和修改:如果有问题,在 PR 中讨论,提交者根据反馈修改。 +- 合并代码:审查通过后,合并到目标分支。 + +这个流程虽然多了一步,但能大大提高代码质量。 + +![](https://pic.yupi.icu/1/image-20260105173137083.png) + + + +### 解决冲突 + +多人协作时,代码冲突是常见问题。当两个人修改了同一个文件的同一部分,Git 会提示冲突。 + +解决冲突的步骤是:首先拉取最新代码 `git pull origin develop`,Git 会标记出冲突的地方。然后手动编辑文件,决定保留哪部分代码。解决完冲突后,要测试确保功能正常,最后提交解决后的代码。 + +为了减少冲突,建议: + +1. 经常拉取最新代码,不要长时间不同步 +2. 功能开发完就及时合并,不要拖太久 +3. 如果要修改公共文件,提前和团队沟通 + + + + +## 五、代码审查流程 + +代码审查(Code Review)是保证团队代码质量的关键。 + + + + +### 为什么要做代码审查? + +代码审查有很多好处。 + +首先,能在代码上线前就发现潜在的 Bug,避免问题流入生产环境。其次,能统一代码风格,让项目代码保持一致,不会出现每个人写的代码风格都不一样的情况。 + +更重要的是,代码审查是一个很好的学习机会。审查者能看到别人的代码思路,被审查者能得到改进建议,双方都能学到东西。而且,知道代码会被审查,写的时候自然就会更认真,这能从源头提高代码质量。 + + + + +### 审查的重点 + +审查代码时,重点关注这些方面: + +1. 功能正确性:代码是否正确实现了需求?有没有遗漏的边界情况? +2. 代码质量:代码是否清晰易懂?有没有重复代码?命名是否规范? +3. 性能问题:有没有明显的性能问题?数据结构选择是否合理? +4. 安全问题:有没有安全漏洞?用户输入是否验证? +5. 测试覆盖:是否有足够的测试?测试是否覆盖了主要场景? + + + +### 审查的技巧 + +审查时要注意方法。不要只说 “这里不对”,要说清楚为什么不对、应该怎么改。要用建议的语气,而不是命令的语气。比如 “我建议这里用 useMemo 优化性能” 而不是 “这里必须用 useMemo”。当然,团队如果有硬性要求除外。 + +如果有多个问题,分清主次。先指出重要的问题(比如 bug、安全漏洞),再提改进建议(比如命名、注释)。 + +审查不是一次性的,可以多轮讨论。第一轮指出主要问题,修改后再审查,确认没问题再合并。 + + + + +### 让 AI 辅助审查 + +可以让 AI 帮你做初步审查: + +```markdown +请审查这段代码,从功能、性能、安全、代码质量等角度分析: +【贴上代码】 +``` + +AI 会给你一份详细的审查报告。但要注意,AI 的审查不能完全替代人工审查,最终还是要人来把关。 + + + +#### 使用 Cursor 的 BugBot + +Cursor 提供了一个专门的代码审查工具叫 [BugBot](https://cursor.com/cn/bugbot),它能自动扫描你的代码,找出潜在的 Bug、性能问题和安全漏洞,并且快速修复。 + +你可以在 Cursor 中直接使用这个功能,让 AI 帮你做初步的代码审查。 + +![](https://pic.yupi.icu/1/image-20260105173323498.png) + + + +#### Claude Code 自动化代码审查 + +如果使用 Claude Code,可以在代码审查的 Pull Request 中标记 `@.claude`,这样 Claude 会自动把审查建议添加到 `CLAUDE.md` 文件中。再利用 GitHub Action 实现自动化更新,这样文档会逐渐沉淀团队的代码质量标准和常见问题。 + +这也是 Claude Code 创始人推荐的做法,让代码审查的经验自动积累下来。 + + + +#### 多个 AI 交叉验证 + +为了更保险,可以让多个不同的 AI 审查同一段代码。比如先让 Claude 审查一遍,再让 GPT 审查一遍,对比它们的建议。 + +不同的 AI 可能会发现不同的问题,交叉验证能提高审查的全面性。 + + + + + + +## 六、团队协作最佳实践 + +基于我的经验,这里总结一些团队协作的最佳实践。 + +💡 这部分主要是给团队负责人或管理者看的。如果你不是团队管理者,只是团队成员,这部分可以直接跳过,或者了解一下就好。 + + + + +### 定期同步 + +团队要定期开会同步进度,比如每天的站会(5 ~ 10 分钟),每周的周会(30 ~ 60 分钟)。 + +站会主要说三件事:昨天做了什么、今天计划做什么、遇到了什么问题。 + +周会可以深入讨论技术方案、分享经验、规划下周工作。 + +除了会议,还可以用工具同步。比如用 Jira 等工具管理任务,用企微、飞书、Slack 等工具日常沟通,用 Notion、语雀等工具共享文档。 + + + +### 结对编程 + +对于复杂的功能,可以尝试结对编程。两个人一起开发,一个人写代码(Driver),一个人审查和提建议(Navigator),这样不仅能提高代码质量,也能促进知识分享。 + +说实话,我很少见到有公司真的这么做,因为成本太高了。 + +不过仔细想想,在 Vibe Coding 中,和 AI 一起开发,不就是一种结对编程吗? + +AI 是你的编程搭档,你提需求,它写代码;你审查,它改进。这种 “人机结对” 可能比 “人人结对” 更高效。 + + + +### 知识分享 + +团队要建立知识分享机制。可以每周安排一个人分享最近学到的技术、遇到的问题、总结的经验;或者分享如何用 AI 解决某个难题、如何优化某个功能的性能、如何避免某个常见的坑;或者把各种技术和业务知识沉淀为文档。这样能让整个团队的水平都提升,也能避免重复踩坑。 + +我们团队就是用语雀知识库来共享文档的,每个人遇到的问题、总结的经验、学到的技巧都记录在上面,新人加入时直接看知识库就能快速上手。 + +![](https://pic.yupi.icu/1/%E4%BD%BF%E7%94%A8%E7%9F%A5%E8%AF%86%E5%BA%93%E6%95%B0%E9%87%8F.png) + + + +### 建立共享资源 + +团队可以建立一些共享资源,比如: + +- 提示词模板库:常用的提示词模板 +- 代码片段库:常用的组件和函数 +- 问题解决方案库:遇到的问题和解决方法 +- 最佳实践文档:总结的经验和技巧 + +这些资源能让新人快速上手,也能提高整个团队的效率。 + +可以通过 Git + GitHub 来管理和共享代码文件,也可以用各种云盘软件来存储多媒体,选择团队习惯的工具就好。 + + + +### 明确分工 + +虽然都用 AI,但还是要明确分工。谁负责前端、谁负责后端、谁负责测试、谁负责部署。每个人有自己的职责,避免重复工作或遗漏。 + +同时,要避免 AI 依赖症。不要所有人都依赖 AI,要有人能在 AI 出问题时顶上。保持团队的技术能力,不要完全依赖工具。 + +这也是为什么如今程序员依然关键 —— AI 只是工具,真正理解业务、把控质量、做出决策的还是人。**所以不用担心 AI 会淘汰程序员,会用 AI 的程序员只会变得更强大。** + +💡 虽然在企业中大家会分工合作,但我建议大家努力拓宽自己的能力边界。前端会一点后端、后端会一点前端、测试会一点开发,这样不仅能更好地理解整个系统,也能在关键时刻顶上。在 AI 时代,争取成为能独立完成全栈项目的 **超级个体**,会让你更有竞争力。 + + + +## 写在最后 + +团队协作开发比个人开发复杂得多,但也更有价值。一个配合默契的团队 + AI,能做出远超个人 + AI 的项目。 + +最后总结一下本文重点,团队协作开发中需要: + +1. 统一代码规范:用文档和工具确保代码风格一致。 +2. 利用 AI 工具的团队功能:比如 Cursor 团队版、Claude Projects 等,实现配置共享、知识共享、对话分享,让 AI 成为团队的共享大脑 +3. 文档驱动开发:写好文档,让团队成员快速了解项目 +4. 规范 Git 流程:用分支管理、提交规范、PR 流程保证代码质量 +5. 认真做代码审查:审查不是形式,而是提高质量的关键。 +6. 建立协作机制:定期同步、结对编程、知识分享、共享资源 +7. 明确分工:每个人有自己的职责,同时保持技术能力。 + +Vibe Coding 不会改变团队协作的本质,它只是一个工具。好的团队协作,需要的是清晰的规范、良好的沟通和互相的信任。 + +非常感谢您的阅读 🙏🏻! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/01 编程学习路线.md b/Vibe Coding 零基础教程/40 编程学习/01 编程学习路线.md new file mode 100644 index 0000000..2059ac6 --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/01 编程学习路线.md @@ -0,0 +1,72 @@ +# 编程学习路线大全 + +> 100+ 条编程路线,从零基础到精通一条龙 + + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +学编程最怕的就是不知道学什么、怎么学。网上的教程太多太杂了,东学一点、西学一点,结果什么都学不精,越学越迷茫。 + +为了解决这个问题,我在 [编程导航](https://www.codefather.cn) 创作了 **100+ 条保姆级编程学习路线**,覆盖几乎所有主流编程方向,帮你系统高效地自学编程、不走弯路! + +包含当前最火的 AI 方向,[点击一键领取 codefather.cn/learn](https://www.codefather.cn/learn),还支持下载学习路线 PDF 文档哦~ + +- 编程语言:Java / Python / Go / C++ / C 语言 / JavaScript 等 +- 前端开发:Vue / React / 小程序 / Node.js / Electron 等 +- 后端开发:Java 后端 / Python Web / Go 后端 / 数据库 / 消息队列等 +- AI 人工智能:AI 大模型应用开发 / 机器学习 / LangChain / Spring AI 等 +- 移动开发:安卓开发 / iOS 开发 / Flutter / React Native / 鸿蒙应用开发等 +- 计算机基础:数据结构和算法 / 操作系统 / 计算机网络 / 软件工程 +- 其他方向:运维 / 大数据 / 软件测试 / 网络安全 / 游戏开发 / 区块链等 + +![](https://pic.yupi.icu/1/%2525E7%2525BC%252596%2525E7%2525A8%25258B%2525E5%2525AF%2525BC%2525E8%252588%2525AA%2525E5%2525AD%2525A6%2525E4%2525B9%2525A0%2525E8%2525B7%2525AF%2525E7%2525BA%2525BF%2525E5%2525A4%2525A7%2525E5%252585%2525A8.png) + + + +## 清晰的学习重点,系统化梳理知识 + +以 **Java 学习路线** 为例,编程导航的学习路线从零基础到找工作,包含了完整的学习内容,比如 Java 基础、数据库、Web 开发、主流框架、项目实战、求职准备等多个阶段。 + +每个阶段都有详细的知识点列表、推荐的视频教程和书籍、配套的练习项目、预估的学习时长等。你不用再花时间去网上搜索资源,而是跟着路线一条路学下去,不再迷茫。 + +![](https://pic.yupi.icu/1/%E7%BC%96%E7%A8%8B%E5%AF%BC%E8%88%AAJava%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF.png) + +此外,Java 后端开发、AI 应用开发等热门方向还配套了精选的企业级项目,手把手带你从 0 到 1 实战开发。提供项目源码、教学视频、文档笔记、简历写法、面试题解的一条龙服务,让你学以致用,并且直接写满简历,更快拿到 Offer! + +![编程导航原创项目](https://pic.yupi.icu/1/2%20%E7%BC%96%E7%A8%8B%E5%AF%BC%E8%88%AA%E5%8E%9F%E5%88%9B%E9%A1%B9%E7%9B%AE.png) + + + +## 免费获取学习路线 + +所有学习路线都可以在 [编程导航网站](https://www.codefather.cn/learn) 免费查看,而且支持 **下载学习路线文档到本地** 哦。 + +访问地址:[codefather.cn/learn](https://www.codefather.cn/learn) + +![](https://pic.yupi.icu/1/%E7%BC%96%E7%A8%8B%E5%AF%BC%E8%88%AA%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF%E4%B8%8B%E8%BD%BD.png) + + + +## 写在最后 + + +学编程就像爬山,有一条清晰的路线图,你会走得更轻松、更快。 + +不管你是想学 Java、Python、前端,还是想入门 AI 开发,都能在编程导航找到适合自己的学习路线。而且所有路线都是免费的,还支持下载到本地。 + +现在就访问 [编程导航](https://www.codefather.cn/learn),找到属于你的学习路线,开启你的编程之旅吧! + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/02 编程知识百科.md b/Vibe Coding 零基础教程/40 编程学习/02 编程知识百科.md new file mode 100644 index 0000000..cce8e86 --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/02 编程知识百科.md @@ -0,0 +1,84 @@ +# 编程知识百科 + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +学编程的时候,经常会遇到各种概念和技术,比如 "什么是 RESTful API"、"什么是微服务"、"什么是 Docker"。去搜索引擎查,结果出来一大堆文章,有的讲得太简单,有的又太复杂,看完还是一头雾水。 + +为了解决这个问题,我在 [编程导航](https://www.codefather.cn) 和 [B 站](https://space.bilibili.com/12890453/lists/6264323) 上做了一个 **编程知识百科** 系列,用动漫的方式来讲解编程知识,通俗易懂,零基础也能看懂。 + +![](https://pic.yupi.icu/1/1767663460999-837c637c-9f61-4b21-95a2-5e218ad36a58.png) + + + +## 编程知识百科包含什么? + +编程知识百科涵盖了编程学习和工作中会遇到的各种概念、技术、工具,内容包括但不限于: + +- 编程基础知识:面向对象、数据结构、算法、设计模式 +- 项目开发知识:RESTful API、MVC 架构、数据库设计、索引优化 +- AI 编程知识:Prompt 工程、RAG、向量数据库、AI 开发框架 +- 工具和技术:Git、Docker、Redis、消息队列、微服务 + +目前已经更新了几十个知识点,而且还在持续更新中。 + +![](https://pic.yupi.icu/1/image-20260113145432074.png) + + + +## 编程知识百科的特点 + +用动漫的方式讲解,不是枯燥的文字和代码,而是生动有趣的动漫形式,让学习变得轻松有趣。 + +- 通俗易懂:用大白话讲解复杂概念,零基础也能看懂。 +- 实战导向:不只讲理论,还会告诉你怎么用、什么场景用。 +- 持续更新:紧跟技术发展,及时补充新的内容。 + +![](https://pic.yupi.icu/1/1767663646677-8c6cbd95-9a06-4447-a276-83d3a505e957-20260113145631574.png) + + + +## 如何学习编程知识百科? + +你可以通过以下方式学习编程知识百科: + + +### 方式一、B 站观看视频 + +推荐到我的 B 站频道观看视频,动漫讲解更生动,理解起来更容易。 + +B 站地址:https://space.bilibili.com/12890453/lists/6264323 + +搜索:**程序员鱼皮** + +我会定期更新编程知识百科的视频内容,涵盖各种编程概念、技术、工具的讲解。 + + + +### 方式二、编程导航网站学习 + +访问 [编程导航](https://www.codefather.cn),在网站上可以查看图文版的知识百科内容。 + +网站地址:https://www.codefather.cn + + + +### 方式三、关注《程序员鱼皮》公众号 + +欢迎关注鱼皮的微信公众号《程序员鱼皮》,第一时间获取鱼皮的每日分享: + +![](https://pic.yupi.icu/1/%E9%B1%BC%E7%9A%AE%E7%9A%84%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7.png) + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/03 编程资源大全.md b/Vibe Coding 零基础教程/40 编程学习/03 编程资源大全.md new file mode 100644 index 0000000..db8a6ea --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/03 编程资源大全.md @@ -0,0 +1,197 @@ +# 编程资源大全 + +> 一站式编程学习资源导航 + + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +学编程、做项目、找工作,每个环节都需要各种资源和工具。网上的资源太多太杂,不知道哪些靠谱,浪费了大把时间。 + +这篇文章给大家介绍我们团队做的一系列产品,覆盖学编程、做项目、找工作的全流程,希望能帮到你。 + + + +## 编程导航 - 编程学习圈,大厂项目写满简历 + +网页版:[codefather.cn](https://codefather.cn)(支持 APP 和微信小程序,搜索 “编程导航” 即可) + +编程导航是一站式编程学习社区,有路线,有规划,有答疑,有项目,提供从`学编程 => 做项目 => 找工作 => 职场交流` 的一条龙服务。让你在学习编程的路上不迷茫! + +对于初学编程的同学,编程导航有 **上百条编程学习路线**,不管你是想要做前端、后端开发,还是从基础的编程语言入手,都可以找到合适的学习路线规划。 + +![](https://pic.yupi.icu/1/codenav-image.png) + +**20+ 套企业级实战全栈项目**,从 0 到 1 手把手带你学,可以直接写进简历!每套项目除了教程外,还提供直播笔记、项目源码、答疑解惑、专属项目交流群、现成的简历写法和面试题解、项目开发模板等。 + +![](https://pic.yupi.icu/1/codenav-image2.png) + +此外编程导航还有 **几百场模拟面试视频、上百套编程基础学习教程、上千篇精华技术文章** 等丰富资源,已帮助数千名小伙伴拿 offer、跳槽涨薪,好评不断。 + +![](https://pic.yupi.icu/1/codenav-image3.png) + +上编程导航,和几十万编程爱好者交流学习,帮你快速提升编程学习和项目开发能力,解答学习求职中的各种疑问,收获满意的 Offer! + + + + +#### 想要更多编程工具? + +编程导航还整理了几千个编程工具,包括开发工具、AI 工具、效率工具、学习资源等,按照使用场景分类,方便查找。 + +访问地址:https://www.codefather.cn/tool + +![](https://pic.yupi.icu/1/image-20260113151313523.png) + + + +## 面试鸭 - 刷题神器,面试遇原题拿 Offer + +网页版:[mianshiya.com](https://www.mianshiya.com)(支持微信小程序,微信搜索 “面试鸭” 即可) + +面试鸭作为一款 **题目全、更新快、题解优质** 的面试刷题工具,题库覆盖几乎所有主流编程方向,包括 Java 后端 / 前端 / AI / Python / C++ / Go / 运维 / 测试 / 系统设计 / 场景题 / 公司题库 / HR 面试,**300+ 题库、1 万多道面试真题**,能够应对面试官的多方位拷打。 + +![](https://pic.yupi.icu/1/mianshiya-image1.png) + +除了经典八股文,还提供企业真实面经、场景题、系统设计题等,帮你全方位攻克面试难关!支持 PC 端、小程序、甚至是 IDE、VSCode 编辑器插件,让你随时随地刷题、轻松提升技术、备战面试。 + +不用自己花时间整理题目、不用看鱼龙混杂的答案,节省出来的时间又能准备至少几十道题目了,**面试遇原题** 直接弯道超车。 + +上线这么久以来,我们也收到了大量好评,很多朋友在面试时遇到了原题、甚至是完全命中,跟开了天眼一样。 + +原因很简单,**很多面试官都在用它来选题面试**,提高招聘效率。 + +![](https://pic.yupi.icu/1/mianshiya-image2.png) + + + + +#### AI 大模型面试题 + +随着 AI 的火热,面试鸭专门整理了 **AI 大模型面试题库**,包括 AI 大模型原理、Prompt 工程、RAG、AI 开发框架等内容。 + +题库地址:https://www.mianshiya.com/bank/1906189461556076546 + +![](https://pic.yupi.icu/1/image-20260113151621420.png) + + + +## 老鱼简历 - 1 分钟搞定简历,面试率翻倍 + +网页版:[laoyujianli.com](https://www.laoyujianli.com/) + +老鱼简历,专为高效求职打造的智能在线简历工具,提供了 **100+ 大厂精美简历模板**,帮你在最短时间内,做出一份真正能打动招聘官的专业简历。 + +不需要会排版、不需要反复调格式,你可以直接选择简洁专业的简历模板,在线实时编辑、即时预览,所见即所得;也可以只填写一段个人简介,让 AI 快速帮你生成完整简历,并对内容进行智能优化、纠错和专业化润色,让表达更清晰、更符合招聘官阅读习惯。 + +支持自由定制简历模块,切换中英文版本,导出 PDF 或图片,生成干净专业的在线简历链接,并可以一键脱敏分享,安全又省心。 + +![](https://pic.yupi.icu/1/laoyujianli-image.png) + + + +#### 不知道怎么优化简历? + +可以参考编程导航上的免费专栏《鱼皮的保姆级写简历指南》,提供了全面的简历优化技巧、常见的简历问题、真实案例分析。 + +![](https://pic.yupi.icu/1/image-20260113152216928.png) + + + +#### 想获取更多岗位投递信息? + +老鱼简历提供了 **持续更新的投递时间表**,告诉你各大公司的招聘时间,帮你把握机会。 + +![](https://pic.yupi.icu/1/image-20260113152400651.png) + + + + +## 后端突击训练营 - 保姆级护航,高效拿 Offer + +如果你需要快速找到工作,或者想长期学习提升竞争力,却却总觉得方向模糊、进度混乱,项目和简历始终拿不出手,那你需要的不是一大堆零散资料,而是一条真正以 **拿 Offer 为目标** 的成长路径。 + +后端求职训练营,就是为你量身打造的求职加速方案。从编程基础到企业级开发,从项目实战到简历和面试,全流程围绕真实招聘要求展开,帮你一步步补齐能力短板,走到可投递、能面试、敢竞争的状态。 + +入营后,你将获得**专属学习计划**,根据你的基础和目标岗位定制路线;由大厂背景导师提供 **1v1 答疑**、**项目深度优化**、**简历精修**与**模拟面试**,从面试官视角反复打磨你的项目和表达,而不是只停留在“写完代码就算学会”。 + +![](https://pic.yupi.icu/1/xunlianying-image1.png) + +同时,训练营通过**每日打卡、每周复盘和督学陪伴**,帮你对抗拖延和自学孤独,持续向求职目标推进。所有服务都围绕一个结果展开:让你在有限时间内,把学习转化为真正的求职竞争力。 + +![](https://pic.yupi.icu/1/xunlianying-image2.png) + +👇添加训练营导师微信,帮你评估现状,进行求职规划辅导,并可咨询后端求职训练营相关问题~ + +![](https://pic.yupi.icu/1/xunlianying-image3.png) + + + + +## 面多多 - 1v1 模拟面试,24 小时陪练 + +网页版:[ai.mianshiya.com](https://ai.mianshiya.com/) + +面多多就是你的私人面试教练**,**能让你**无限次刷面试副本**的神器! + +提供了无限接近 **真实的沉浸式面试环境**,可以根据你的目标岗位、个人情况 **定制专属面试题,**1v1 语音答题,并生成详尽的 **复盘提升报告**,把你哪里卡壳、哪里逻辑乱、哪里知识需要补足,扒得明明白白。 + +![](https://pic.yupi.icu/1/mianduoduo-image1.png) + +从自我介绍到项目深挖,从技术拷问到综合素质评估,完整复刻真实面试的全流程。而且 AI 面试官会根据你的回答智能追问,帮你提前预判所有可能被问到的环节,直到把你问透为止。 + +你既可以选择 60 分钟及以上的沉浸式综合面试,也可以开启快速面试,按照岗位、题库或者专项进行有针对性的提升,还可以上传简历进行押题,面试更加游刃有余。 + +![](https://pic.yupi.icu/1/mianduoduo-image2.png) + + + +## 算法导航 - 免费动画学算法 + +网页版:[algo.codefather.cn](https://algo.codefather.cn/) + +算法导航,让算法学习变简单、变有趣的小工具。这是一个 **完全免费、通俗易懂、生动有趣** 的交互式算法学习网站,集保姆级教程、动画学算法、可视化算法调试工具于一体,再也不用枯燥地对着教程抓耳挠腮地学了! + +每个算法都配备了生动的动画演示,并且每一步变化还有对应的文字说明和代码高亮,让你真正一眼看懂自己的代码每一步都做了什么。你可以在算法可视化页面 **自定义输入数据,观察算法在不同情况下的变化**,通过亲自动手实践来加深理解。 + +我们都提供了保姆级算法学习路线和教程,不仅包括算法步骤核心特性、优化策略、优缺点和拓展知识,还给出了 Java、JavaScript、Python、Go、C++ 等不同语言的代码实现,并附上了 **当堂小测验和 leetcode 关联题**。 + +![算法导航动画学算法网站](https://pic.yupi.icu/1/%E7%AE%97%E6%B3%95%E5%AF%BC%E8%88%AA%E5%8A%A8%E7%94%BB%E5%AD%A6%E7%AE%97%E6%B3%95%E7%BD%91%E7%AB%99.png) + + + + +## 编程导航模拟面试 + +编程导航还有 **几百场真实的模拟面试录制视频**,不仅可以熟悉面试流程、消除真实面试时的紧张感,还能学习别人回答问题的思路和表达技巧。 + +![](https://pic.yupi.icu/1/image-20260113153048672.png) + + + + +## 鱼皮 AI 导航 - AI 工具和资源大全 + +网页版:[ai.codefather.cn](https://ai.codefather.cn/) + +鱼皮 AI 导航,一站式 AI 工具与学习资源大全,收录了**上千个国内外优质 AI 工具**,按使用场景清晰分类,无论你是写内容、做设计、剪视频、搞编程,还是探索最新 AI 应用,点开就能直达,不再浪费时间大海捞针。 + +除了工具导航,你还可以在这里获取持续更新的 **AI 热点资讯**、系统整理的 **AI 学习知识库**,以及几百个可以直接抄作业的高质量 **Prompt 模板**,真正把 AI 从“听说过”变成“用得熟”。 + +更重要的是,这里不只是一个工具清单,而是一个持续成长的 **AI 社区**。你可以交流经验、分享发现、学习别人是如何把 AI 用到实处的。 + +![](https://pic.yupi.icu/1/image-20260109121412266.png) + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/04 AI 编程技术.md b/Vibe Coding 零基础教程/40 编程学习/04 AI 编程技术.md new file mode 100644 index 0000000..0d5a3a6 --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/04 AI 编程技术.md @@ -0,0 +1,331 @@ +# AI 编程技术入门指南 + +> 掌握 AI 开发框架,成为企业招聘的香饽饽 + + + +你好,我是程序员鱼皮。 + +作为程序员,咱们不光要会用 AI 工具、能利用 AI 开发项目,还要能够自主开发 AI 项目,把 AI 的能力接入到自己的项目中。 + +有句话说得好:**AI 时代,所有的传统业务都值得利用 AI 重塑一遍。** + +所以现在很多公司都在招能够开发 AI 项目的程序员,这也是我们的机会。那么我们要学习哪些知识和技术,才能成为企业招聘的香饽饽呢? + +⭐️ 推荐观看视频版:https://www.bilibili.com/video/BV1i9Z8YhEja + + + +## 一、AI 开发框架 + +首先从技术角度出发,我们要学习主流的 AI 开发框架。目前 Java 方向最火的就是 **Spring AI** 和 **LangChain4j**。 + + +### Spring AI + +[Spring AI](https://docs.spring.io/spring-ai/reference/getting-started.html) 是 Spring 官方推出的 AI 开发框架,经过 2 年的沉淀,在 2025 年 5 月正式发布了 1.0 版本。 + +![Spring AI 1.0 发布](https://pic.yupi.icu/1/1747881171718-91ac3eb5-049b-4510-8012-6736c40c9c95.png) + +Spring AI 的优势在于 **更容易和主流 Java 开发框架 Spring 集成**,上手难度较低。它提供了很多现成的方法来帮我们提高开发 AI 应用的效率,比如快速对接大模型、保存会话上下文、对接向量数据库实现 RAG 等等。 + +![Spring AI 架构](https://pic.yupi.icu/1/1743563460857-95800757-867c-4e8a-ba7c-dd490d09fcbd.png) + +Spring AI 的核心特性包括: + +- 大模型调用能力:统一接口支持多种主流大模型(OpenAI、Claude、通义千问等) +- 提示工程:提供 Prompt 和 PromptTemplate 类,方便管理提示词 +- 会话记忆:一行代码开启对话记忆,自动处理上下文 +- RAG 检索增强生成:完整的 RAG 流程支持,包括文档加载、向量存储、检索优化 +- 工具调用:通过注解快速定义工具,让 AI 调用外部服务 +- MCP 支持:轻松接入和开发 MCP 服务 + +举个例子,使用 Spring AI 调用大模型,只需要几行代码: + +```java +// 使用 Spring AI 调用大模型 +@Bean +public ChatClient chatClient(ChatModel chatModel) { + return ChatClient.builder(chatModel).build(); +} + +public String doChat(String message) { + return chatClient.prompt(message).call().content(); +} +``` + +如果不使用 Spring AI,你就需要自己编写 HTTP 请求、解析响应,麻烦很多。 + + + +### Spring AI Alibaba + +[Spring AI Alibaba](https://java2ai.com/) 是阿里巴巴基于 Spring AI 推出的国内版本,专门针对国内的 AI 生态做了优化。 + +它的优势在于: + +- 更好地支持国内的大模型(通义千问、百度文心一言等) +- 提供了中文文档和技术支持 +- 针对国内网络环境做了优化 +- 有阿里云的生态支持 + +如果你主要使用国内的 AI 服务,Spring AI Alibaba 会是更好的选择。 + + + +### LangChain4j + +[LangChain4j](https://docs.langchain4j.dev/intro) 是另一个主流的 Java AI 开发框架,它的特点是 **更灵活,更适合开发复杂的智能体**。 + +比如在开发一个智能文档分析系统时,利用 LangChain4j,智能体能够自动读取文档内容,调用搜索引擎获取相关背景知识,然后根据任务需求,将文档信息与外部知识结合,生成分析报告。 + +LangChain4j 的核心特性包括: + +- AI Service:声明式开发,通过注解快速构建 AI 服务 +- 会话记忆:支持多种会话记忆策略和持久化 +- 结构化输出:自动将 AI 输出转换为 Java 对象 +- RAG 支持:完整的 RAG 流程,支持多种向量数据库 +- 工具调用:灵活的工具定义和调用机制 +- 护轨机制:输入输出拦截器,增强安全性 + +举个例子,使用 LangChain4j 的 AI Service: + +```java +@AiService +public interface AiCodeHelperService { + @SystemMessage(fromResource = "system-prompt.txt") + String chat(String userMessage); +} +``` + +只需要定义接口和注解,框架会自动生成实现类,非常方便。 + + + +### 如何选择框架? + +| 场景 | 推荐框架 | 优势 | +| ------------- | --------------------- | ------------------------ | +| Java 企业应用 | Spring AI | 无缝集成 Spring 生态 | +| 国内 AI 服务 | Spring AI Alibaba | 更好支持国内大模型 | +| 智能体开发 | LangChain4j | 完整 Agent 工具链 | +| 复杂工作流 | LangGraph(进阶) | 可视化编排 | + +我的建议是,**两个都要学,先从 Spring AI 学起,再学 LangChain4j 会更简单**。很多概念和用法是相通的,学会一个,另一个也能快速上手。 + + + +## 二、AI 集成 + +开发 AI 应用的前提是要有大模型,但是大模型要消耗算力才能运行,算力就是金钱。从哪儿搞来大模型呢? + +有 2 种方法:使用 AI 云服务、或者本地部署大模型。 + + + +### AI 云服务 + +AI 云服务就是其他企业为我们部署了 AI 大模型,通过 API 接口的方式提供给我们使用,按量计费。 + +比如阿里云百炼、火山引擎、硅基流动、OpenAI 等等。 + +![AI 云服务](https://pic.yupi.icu/1/1743563631799-46ff94d5-d51b-4dc5-b6cf-dec28bdcdb39.png) + +咱们程序员需要重点掌握的是: + +1. 如何通过 API 接入云服务? +2. 如何使用 AI 云服务来创建智能体和配置参数? +3. 如何选择合适的云服务?这就需要关注各家云服务的计费模式和服务质量 +4. 如何更低成本、更稳定地使用云服务?这就需要我们学习 Prompt 工程和高可用技术 + + + +### 本地部署大模型 + +本地部署大模型对于很多企业来说也是刚需,数据无需上传至云端,能够有效保障数据的安全性和隐私性,尤其适用于医疗、金融等对数据安全极为敏感的行业。 + +本地部署大模型其实并不难,只需要使用 [Ollama 工具](https://ollama.com/) 就可以一键部署各种主流的开源模型。 + +![Ollama](https://pic.yupi.icu/1/1743563719547-bbed1c54-d1f1-496f-afc2-d755c3538732.png) + +唉,但部署大模型的难度不在于技术啊,主要是没算力啊!不然我也给我们团队的 [编程导航](https://codefather.cn) 和 [面试鸭](https://www.mianshiya.com) 都来一套鱼皮大模型了。 + + + +## 三、AI 领域业务 + +企业中的 AI 业务开发,可不仅仅是来个 AI 对话就够了,咱们还要掌握几种更复杂的业务开发,比如 RAG 知识库、多模态、MCP 服务、ReAct 智能体。 + + +### RAG 知识库 + +很多公司都有属于自己的业务知识和文档,会构建自己的问答系统或客服,这就要用到 RAG 检索增强生成技术。 + +先通过文本嵌入模型,将企业各种文档转化为向量,存入向量数据库;当用户提问时,系统在向量数据库检索相关向量数据,找到最相似文档片段,和问题一起输入大模型处理。这样一来,大模型能够基于企业真实数据作答,更准确贴合实际。 + +![RAG 流程](https://pic.yupi.icu/1/1743563751814-4123230c-c4b8-458f-bf8b-070c7550dd54.png) + +关于 RAG 能学的知识可太多了,比如主流的向量数据库 Milvus 和 PGVector、文档的抽取 / 转换 / 加载、索引的构建、查询策略的优化等等。**这也是 AI 企业面试的重点!** + + + + +### 多模态 + +多模态也是主流的 AI 业务场景,即融合文本、图像、音频、视频等多种不同类型的数据模态,从而提高产品使用的易用性,做出更多有创意的功能。 + +比如做个智能导购系统,顾客既可以输入文字描述想要的商品,系统也能识别顾客上传的商品图片,甚至可以理解顾客通过语音提出的购物需求。 + +![多模态](https://pic.yupi.icu/1/1743563981663-8c9f4746-03dc-4b32-8477-ba9a9042922c.png) + +想开发多模态应用,咱们要学习模态转换技术,比如文本转语音(TTS)、语音转文本(STT)、光学字符识别(OCR)等。不过这些都有现成的工具库或者云服务,掌握调用方法就行。 + + + + +### MCP 服务 + +MCP(Model Context Protocol,模型上下文协议)可以理解为提供给 AI 的各种服务,AI 利用这些服务能够实现更强大的功能。 + +![MCP](https://pic.yupi.icu/1/1743563832927-7a2df71f-acc1-47c4-9135-e7d888749dbc.png) + +如何在项目中接入别人的 MCP 服务,来增强自己的项目能力;以及如何开发自己的 MCP 服务,让别人的项目使用,都是必须要学习的。 + +现在使用 Spring AI 等开发框架就可以开发 MCP 服务,而且甚至有高手做了个 [网站](http://mcpify.ai/),能够一句话创建自己的 MCP 服务,这真的是泰裤辣。 + +![MCP 生成](https://pic.yupi.icu/1/1743563865750-bbd02b74-2a56-49a9-963f-e633c1484fe5.png) + + + +### ReAct 智能体 + +ReAct 是一种构建智能体的开发范式,目的是打造能够依据推理结果自主采取行动的智能体。 + +它的开发过程会涉及到任务规划、工具调用、交互 I/O、异常处理等知识。尤其是工具调用,可以通过 Function Call 或 MCP 实现像天气查询、文件读写、网页运行、信息检索、终端命令执行等功能。 + +![ReAct 智能体](https://pic.yupi.icu/1/1743563922663-0096045d-8a99-4202-b30d-df77a341e697.png) + +就拿开发视频网站为例,用户说了 “帮我开发一个 Dilidili 视频网站并部署上线” 的指令时,智能体首先会深入理解任务内容,通过推理梳理出一系列执行步骤,包括明确需求、设计方案、搭建框架、生成代码、部署上线等。接下来,智能体就会调用相应的工具来执行这些行动。 + +![智能体工作流](https://pic.yupi.icu/1/1743564028474-638e6414-9a22-4350-80f3-7bf174dd0f77.png) + + + +## 四、AI 工具链 + +最后就是我们开发 AI 项目时可能会用到的一些平台、工具和类库了。 + + + + +### 低代码平台 + +比如主流的低代码 AI 开发平台 [Dify](https://dify.ai/),可以让我们通过拖拉拽的方式构建自己的 AI 智能体,创建知识库并导入自己的文档,搭建复杂的工作流等等。就哪怕你不会写代码,都能用它搞出复杂的 AI 应用。 + +![Dify](https://pic.yupi.icu/1/1743564064922-03f6365b-a712-47d9-be55-4867b848a269.png) + + + +### 工具库 + +还有一些开发 AI 智能体时会用到的工具库,比如: + +- Apache Tika:功能强大的文件解析器工具库,支持解析 PDF、Word、Excel、PowerPoint 等各种文档 +- Playwright:用于模拟浏览器行为的工具库,AI 需要运行网页、抓取网页数据、自动化测试时都能派上用场 +- JSON 格式解析库:GSON 和 Kryo +- HTML 文档解析库:jsoup + +这些类库基本没什么学习成本,要用的时候看文档就好了。 + + + +### 部署工具 + +项目最终是要部署上线的嘛,所以我们还要掌握高效的部署工具。如果是个人学习使用、想快速上线自己的 AI 小应用,可以试试下面这些平台: + +- [Vercel](https://vercel.com/):适合前端应用的部署平台,支持自动构建、在线浏览、CDN 分发,而且还免费提供可访问的域名 +- [Sealos](https://sealos.io/):云原生应用管理平台,支持 Kubernetes 集群管理 +- [Railway](https://railway.com/):能让开发人员轻松部署 Docker 容器,无需操心服务器配置与运维 + +当然,想快速部署服务,Docker 容器化技术也是必须要学习的,就像 APP 的安装包一样,能够轻松分发和部署你的应用程序。 + +![Docker](https://pic.yupi.icu/1/1743564338228-ffc55f7b-7bcd-40df-a10b-4accfb666379.png) + + + +## 五、学习资源推荐 + +怎么样,要学的东西还是挺多的吧。别担心,我也在持续学习这些内容并且会持续分享给大家。 + + +### 1、AI 学习路线 + +完整的 AI 大模型应用开发学习路线可以在 [编程导航获取](https://www.codefather.cn/course/1789189862986850306/section/1912024009574629377): + +网址:https://www.codefather.cn/learn + +![AI 学习路线](https://pic.yupi.icu/1/image-20250912152042459.png) + + +### 2、AI 项目实战 + +在 [编程导航](https://www.codefather.cn) 上,我带大家做了多套 AI 项目教程,涵盖了上面提到的几乎所有技术: + +- AI 编程助手:LangChain4j 框架入门,实战对话记忆、结构化输出、RAG、工具调用、MCP、SSE 等 +- AI 超级智能体:Spring AI 框架入门,实战 AI 恋爱大师应用 + 自主规划能力的超级智能体 +- AI 零代码应用生成平台:LangChain4j AI 智能体、LangGraph4j 工作流、微服务架构 +- AI 答题应用平台:React 跨端小程序、Vue3 AI 应用、分库分表、SSE 实时推送 + +这些项目都是企业级的真实项目,做完后可以直接写进简历。 + + + +### 3、开源项目 + +我也开源了不少 AI 应用开发项目,分享给大家: + +- AI 应用生成平台:https://github.com/liyupi/yu-ai-code-mother +- AI 超级智能体:https://github.com/liyupi/yu-ai-agent +- AI 文献阅读助手:https://github.com/liyupi/literature-assistant +- AI 知识库:https://github.com/liyupi/ai-guide + + + +### 4、AI 知识库 + +在我免费开源的 [AI 知识库](https://github.com/liyupi/ai-guide) 中,汇总收集了最新最全的 AI 知识,帮助大家更好地适应 AI 时代的到来。 + +网址:https://ai.codefather.cn + +![](https://pic.yupi.icu/1/image-20260109121412266.png) + +里面除了各种教程资料外,也重点给大家分享了很多 AI 工具的具体应用场景,比如接入办公软件提升效率、帮你做自媒体、AI 批量制作视频等,希望帮助大家举一反三,找到新的思路。 + + + +## 写在最后 + +AI 技术发展日新月异,对程序员的要求也在不断提高。**AI 相关知识不再只是算法工程师需要了解,而是每个程序员都必须掌握的基本技能。** + +无论你是前端、后端还是全栈开发者,都需要了解 AI 应用开发的基本概念和实践方法。 + +因为未来的软件开发,AI 将无处不在。 + +如果你问我 AI 会淘汰程序员么? + +我的答案仍然是 “会”。因为程序员本身就是需要持续学习和实践来保持竞争力的,只要大家能够学会我提到的这些知识,多关注 AI 的前沿资讯,相信 AI 不会抢走咱们程序员的饭碗,而是成为咱们改造世界的杠杆。 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/05 AI 绘图指南.md b/Vibe Coding 零基础教程/40 编程学习/05 AI 绘图指南.md new file mode 100644 index 0000000..918f9ba --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/05 AI 绘图指南.md @@ -0,0 +1,366 @@ +# 程序员 AI 绘图完全指南 + +> 1 分钟生成架构图,告别手工画图 + + + +你好,我是程序员鱼皮。 + +作为一名程序员,画图可以说是工作中的家常便饭了。无论是给领导汇报时画架构图、还是写文档时画流程图、或者头脑风暴时画思维导图,画图能力直接体现出我们的专业水平。 + +以前画图需要自己费时费力,一个复杂的架构图可能要花几个小时,还得反复调整;现在喝杯水的功夫,AI 就帮你画好了,而且效果还特别专业! + +下面我将分享 **5 大类 AI 画图方法**,每一种都有详细的保姆级教程。这些方法一个比一个猛,建议先点赞收藏。以后无论是生成原型图、设计海报,还是程序员常画的架构图、流程图、UML 类图等等,都是洒洒水的事~ + +⭐️ 推荐观看视频版,有更详细的操作演示:https://bilibili.com/video/BV1DP7JzAE7k + + + +## AI 画图的本质 + +在开始之前,我们先了解一下 AI 画图的本质:**其实就是让 AI 生成各种绘图工具能够理解的文本代码**,然后将这些代码导入到对应的工具中进行渲染。 + +这样就能够借助 AI 的创意和工具的能力自由地生成图片。 + +![AI 画图原理](https://pic.yupi.icu/1/1748414656182-9580e13e-97bd-4013-8361-ee19b200c0f7.png) + +虽然目前主流的 AI 大模型和工具都能实现画图功能,但我强烈建议使用 **Cursor 工具搭配 Claude 4 大模型**,效果最佳。 + +下面来介绍几类 AI 画图方法: + + + +## 一、文本绘图 + +文本绘图是最受高级程序员欢迎的画图方式,通过简单的文本描述就能生成专业的技术图。主流的文本绘图语言包括 **Mermaid** 和 **PlantUML**。 + + + +### Mermaid - 最流行的文本绘图工具 + +Mermaid 是目前最流行的文本绘图工具,语法简单直观,被 GitHub、语雀等大平台原生支持。无论你是要画软件架构图、业务流程图,还是数据库 ER 图、Git 分支图,Mermaid 都能轻松搞定。 + +让我们先来画一个用户登录流程图,只需要给 AI 这样的提示词: + +```plain +请用 Mermaid 语法帮我画一个用户登录流程图,包含以下步骤: +1. 用户输入账号密码 +2. 前端校验格式 +3. 发送请求到后端 +4. 后端验证用户信息 +5. 如果验证成功,生成 token 返回 +6. 如果失败,返回错误信息 +7. 前端根据结果跳转页面或显示错误 +``` + +放到 Cursor 等 AI 工具中执行,AI 会生成 Mermaid 代码。然后你可以把代码复制到支持 Mermaid 的工具中查看效果,比如语雀、Typora、或者在线的 [Mermaid 渲染网站](https://mermaid-live.nodejs.cn/edit)。 + +![Mermaid 流程图](https://pic.yupi.icu/1/1748414916480-1151faa7-a03d-49b0-82b0-ba321211456e.png) + +很多 AI 聊天助手内置了 Mermaid 渲染工具,能直接看到效果并下载: + +![AI 内置渲染](https://pic.yupi.icu/1/1748415298510-f1389787-6859-4cf6-b0c7-fe6712acf57a.png) + +Mermaid 还支持多种图表类型,比如时序图、甘特图、饼图、Git 分支图、架构图等。 + + + +### PlantUML - 专业的 UML 绘图工具 + +PlantUML 是另一个强大的文本绘图工具,特别擅长绘制 UML 图、时序图和系统架构图。它的语法相对 Mermaid 更加专业和规范,生成的图表也更加精美。 + +让我们用 AI + PlantUML 画一个经典的订单系统类图: + +```plain +请用 PlantUML 语法帮我画一个订单系统的类图,包含: +- Order 类:订单ID、用户ID、总金额、状态、创建时间 +- OrderItem 类:商品ID、数量、单价 +- User 类:用户ID、用户名、邮箱 +- Product 类:商品ID、名称、价格、库存 +展示它们之间的关联关系 +``` + +AI 会生成专业的 PlantUML 代码,同样放到语雀的文本绘图、或者 [PlantUML 渲染网站](https://www.plantuml.com/plantuml/uml/) 中,都可以看到效果。 + +![PlantUML 类图](https://pic.yupi.icu/1/image-20250530125534018.png) + + + +### 如何选择? + +| 特性 | **Mermaid** | **PlantUML** | **Graphviz** | +| ------------ | ------------------------ | ----------------- | ------------------ | +| **图表类型** | 流程图、时序图、甘特图等 | UML全系列、架构图 | 各类图表,极其灵活 | +| **语法难度** | 简单直观 | 中等,UML规范 | 较复杂 | +| **生态支持** | GitHub/GitLab原生支持 | 需要插件支持 | 广泛支持 | +| **适用场景** | 日常文档配图 | 专业架构设计 | 复杂网络拓扑 | + +我的建议是,日常使用选 Mermaid,因为它语法简单、平台支持好;如果要画专业的 UML 图,就选 PlantUML。 + + + +## 二、网页绘图 + +网页绘图是一种非常自由灵活的绘图方式。本质上是 "图片即网站" —— 通过生成包含可视化元素的网页代码,在浏览器中渲染出各种图片。 + + + +### 原生网页绘图 + +利用网站开发的核心技术(HTML + CSS + JavaScript),我们可以生成各种类型的图表。还可以借助各种第三方可视化库(如 ECharts、D3.js 等)来增强效果。 + +举个例子,当需要展示数据时,AI 可以利用 Apache ECharts 等可视化库生成专业的数据大屏: + +```plain +请生成一个数据可视化大屏页面,展示电商平台的实时数据: +1. 页面布局:深色背景的大屏风格 +2. 包含以下图表:实时销售额、各品类销售占比、24小时销售趋势、热销商品TOP10、用户地域分布 +3. 使用 ECharts 实现,要有动画效果 +``` + +AI 会生成完整的网站,包含各种图表,还是挺炫酷的吧~ + +![数据大屏](https://pic.yupi.icu/1/1748417511003-49c81cc8-618e-4810-b94d-ebcfbb48885d.png) + +你可以直接按需截图,得到图片;还可以通过 [Codepen](https://codepen.io/) 等网站运行工具将生成的网站快速分享给其他人。 + + + +### SVG 矢量图绘制 + +SVG 是可缩放的矢量图形,可以无限缩放而不失真,非常适合绘制 UI 素材、Logo 图标、图形插画、技术架构图、流程图等。 + +让我们用 SVG 绘制一个系统架构图: + +```plain +请生成一个 SVG 格式的系统架构图,展示一个典型的三层架构: +- 展示层:Web 前端、移动端 App +- 业务层:API 服务器集群(3个节点) +- 数据层:主从数据库、Redis 缓存 +要求:使用不同颜色区分各层,添加连接线表示数据流向 +``` + +AI 生成的 SVG 代码可以直接保存为 SVG 文件在浏览器内打开。 + +![SVG 架构图](https://pic.yupi.icu/1/1748419703308-c3e3ab06-bfd0-4d3e-8bd9-6315fe9e3dde.png) + + + +## 三、专业绘图工具 - Draw.io + +如果将 AI 与专业绘图工具结合,可以实现 1+1 > 2 的效果。 + +我用的比较多的绘图工具是免费开源的 **draw.io**,它的优点是自由度极高,支持导入导出多种格式,拥有丰富的图形库和模板。 + +还有个大火的开源项目 [next-ai-draw-io](https://github.com/DayuanJiang/next-ai-draw-io),可以直接通过 AI 对话来生成和编辑 draw.io 图片,短短几天就涨了 6k star! + +![AI Draw.io](https://pic.yupi.icu/1/1765425690148-db18c63c-6666-4a0b-a681-0ad4a5c061c3.png) + +这个项目支持在线体验,你可以完全从 0 开始画图,比如画一个流程图,演示 RAG 的工作原理。AI 会自动生成 Draw.io 绘图代码,很快精美的流程图就搞定了! + +⭐️ 建议观看视频演示:https://bilibili.com/video/BV18NmnB4EeM + +![RAG 流程图](https://pic.yupi.icu/1/1765425750546-988f6dd9-552b-403f-a1ea-f8866c309663.png) + +然后你可以利用 Draw.io 自身强大的绘图能力手动修改任意元素、或者是改变风格样式。也可以通过 AI 对话让它帮你修改,比如改成动画连接线,逼格一下子就上来了。 + +![动画连接线](https://pic.yupi.icu/1/1765425815484-e879ea8a-d40a-4857-baab-4124c3eedcee.png) + + + +### 生成各种技术图 + +还有程序员工作涉及的架构图: + +```plain +提示词:绘制电商平台的微服务架构图 +``` + +![微服务架构图](https://pic.yupi.icu/1/1765425829760-5337eb51-a51a-4327-a1e0-66b6f4ce2176.png) + +UML 类图: + +```plain +提示词:用 UML 类图展示用户管理模块的设计 +``` + +![UML 类图](https://pic.yupi.icu/1/1765425843465-53ebe0d1-0df4-46b1-8b27-1bdd98333f5d.png) + +ER 图: + +```plain +提示词:绘制在线教育平台的数据库 ER 图 +``` + +![ER 图](https://pic.yupi.icu/1/1765425852509-4685b9ff-9c86-430c-9e7e-fd1f75877c51.png) + +时序图: + +```plain +提示词:用时序图展示用户登录的交互过程 +``` + +![时序图](https://pic.yupi.icu/1/1765425862905-cab2301b-77c2-47e4-adc1-6d7c617cd33b.png) + +这些通通不在话下,帮你节省大把的时间和毛发~ + + + +### 使用技巧 + +还有一些使用小技巧,比如配合免费的图标库,让整个绘图元素更丰富: + +```plain +提示词:使用 AWS 图标生成 CDN 架构图 +``` + +![AWS 架构图](https://pic.yupi.icu/1/1765426030861-27a70a15-559b-4540-9177-5e5f66d120b0.png) + +可以使用原生 SVG 动画标签,给整个绘图增加缩放和路径动画: + +```plain +提示词:演示 DDOS 攻击,使用 SVG 的 增加缩放和路径动画 +``` + +![动画效果](https://pic.yupi.icu/1/1765425981962-4a730008-8a64-4805-adfc-a63a983e4fde.png) + +还可以自己上传一个草图,比如我用文本模型生成的 Mermaid 流程图,让 AI 帮我替换为更美观的样式风格: + +```plain +提示词:改为彩虹主题的配色、放大字体、使用加粗动画连接线 +``` + +效果还不错吧! + +![优化后的图](https://pic.yupi.icu/1/1765426075534-26f6f2a7-8ee9-421f-ad10-4910b2b7df34.png) + +最后导出为各种图片或文档格式,美滋滋~ + +![导出格式](https://pic.yupi.icu/1/1765268527840-a3717305-7bba-4533-8595-c92c21bcd021.png) + + + +### 本地部署 + +注意,官方提供的演示网站可能限量和不稳定,像我连续用了几次就被拒绝了。 + +所以我建议下载开源代码到本地,按照官方文档的说法 [配置自己的大模型](https://github.com/DayuanJiang/next-ai-draw-io/blob/main/docs/ai-providers.md) 来运行;或者用 Docker 一键启动,想怎么用就怎么用。 + +![Docker 部署](https://pic.yupi.icu/1/1765426188076-914514ec-c5cd-4ac5-8ca7-e09f0808801e.png) + + + +## 四、思维导图 + +AI 可以帮我们快速生成精美的思维导图,并且能够导出为专业思维导图软件支持的格式。 + +我用的比较多的思维导图软件是 XMind,支持丰富的样式和主题。 + +我更建议让 AI 生成 **Markdown 格式的思维导图**,因为 Markdown 格式更通用,方便在各种文档工具中使用: + +```plain +请帮我生成一个关于"微服务架构设计"的思维导图,使用 Markdown 格式,用缩进表示层级关系 +``` + +AI 会生成这样的 Markdown 格式: + +```markdown +# 微服务架构设计 + +## 服务拆分原则 +- 单一职责 + - 每个服务只负责一个业务功能 + - 高内聚低耦合 +- 服务自治 + - 独立部署 + - 独立技术选型 +``` + +将这个 Markdown 文件直接导入 XMind,就能生成结构清晰的思维导图啦! + +![思维导图](https://pic.yupi.icu/1/1748422118001-752df2f4-d369-46b8-8e16-cd96191d554f.png) + + + +## 五、AI 绘图技巧 + + +### 技巧 1、提供示例图让 AI 模仿 + +当你看到一个很棒的图,想要绘制同款时,可以直接截图给 AI,让它帮你生成类似的图。 + +举个例子,仿照我提供的系统架构图进行生成: + +```plain +请根据我提供的系统架构图,用 draw.io 格式生成类似风格和结构的图,但内容改为: +- 一个在线教育平台的架构 +- 保持原图的配色方案和布局风格 +``` + +生成结果如图,是不是很像? + +![仿照生成](https://pic.yupi.icu/1/1748424880583-92c573bc-fdb2-45d0-b4e0-d2590ea069c5.png) + + + +### 技巧 2、截图标注,精准修改 + +如果你对 AI 生成的图的有些地方不满意,你可以截图并在需要修改的地方画红圈标注,然后告诉 AI 如何修改。 + +![标注修改](https://pic.yupi.icu/1/1748424987920-e61af63a-b688-4cf8-8cd5-e05df1d412c9.png) + + + +### 技巧 3、配置专业的系统预设 + +AI 生成的效果很大程度上取决于输入的提示词,所以要让 AI 画出更专业的图,配置一个好的系统提示词至关重要。 + +在 Cursor 中,我们可以设置项目级别的 Rules 规则,让 AI 始终遵循你的绘图规范。 + +给大家一个专业的架构图绘制预设,仅供参考: + +```plain +# 技术架构图绘制专家 + +你是一名资深的系统架构师和技术图表设计专家。 + +## 绘图原则 +1. 所有文字必须使用简体中文 +2. 保持图表简洁清晰,避免过度复杂 +3. 使用标准的技术图标和符号 +4. 配色专业,层次分明 + +## 配色方案 +- 展示层:蓝色系 (#3498db) +- 业务层:绿色系 (#2ecc71) +- 数据层:橙色系 (#e67e22) +``` + +将这个预设配置到 Cursor Rules 中,AI 就会按照规则来生成图片,确保输出的一致性和专业性。 + + + +## 写在最后 + +看到这里,相信你已经掌握了 AI 画图的各种姿势了!从简单的文本绘图到复杂的动态图表,AI 都能轻松搞定。 + +不仅能帮我们节省大量时间,而且妈妈再也不用担心我的图画得丑了! + +如果你觉得本期内容对你有帮助,别忘了点赞收藏。学编程、对 AI 感兴趣的朋友欢迎关注鱼皮,在我免费开源的 [AI 知识库](https://ai.codefather.cn) 中也汇总了大量 AI 知识和教程干货,希望对大家有帮助。 + +![](https://pic.yupi.icu/1/image-20260109121412266-20260113153648943.png) + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/06 AI 应用开发面试题.md b/Vibe Coding 零基础教程/40 编程学习/06 AI 应用开发面试题.md new file mode 100644 index 0000000..2e411b2 --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/06 AI 应用开发面试题.md @@ -0,0 +1,301 @@ +# AI 应用开发面试必知必会 + +> AI 开发不只是调个接口这么简单 + + + +你好,我是程序员鱼皮。 + +由于 AI 的流行,很多公司开始搞起了 AI 相关的业务,或者给老项目加个 AI 相关的功能。这也给开发方向的程序员们提供了一个新的垂直岗位 —— AI 应用开发。 + +但有朋友可能会觉得:“AI 应用开发?**不就是调个接口么?有什么难的?**” + +![调个接口](https://pic.yupi.icu/1/image-20250912144702279.png) + +还真的是应了那句话 —— 你知道的越少,以为自己知道的越多。 + +就好比有人问:电商系统是怎么把你喜欢的商品推送到主页的? + +有同学秒答:不就是 **推荐算法** 么? + +的确是这样,但就是这 4 个字,可能是很多精英们日以继夜地研究、不断地优化,才呈现出给用户看到的效果。 + +AI 应用开发也是一样的,调个接口的确可以实现一些需求,但深入到具体业务场景和解决方案中,还是有很多值得学习的知识和经验。 + +这不,前段时间我直播面试了一位工作 3 年的 Java 后端开发老哥,目标是 AI 应用开发岗。下面分享下面试过程,看完你就知道,**AI 开发绝不只是调个接口这么简单**。 + +⭐️ 推荐观看视频版:https://bilibili.com/video/BV1qgHezFEaR + +![面试视频](https://pic.yupi.icu/1/image-20250912151414330.png) + + + +## 一、真实面试案例 + +### 候选人背景 + +小王 2022 年毕业,有 3 年多的 Java 后端开发经验。在上家公司负责电子签合同云平台的建设,包括账号系统、权限系统、消息系统等核心模块。 + +除了传统 Java 业务,他还自学了半年多的 AI 技术,做过电子合同 AI 智能助手(RAG 系统)和模拟面试官 Agent 应用。技术栈涵盖 Spring Boot、MySQL、Redis、RabbitMQ 等,AI 方面熟悉提示词工程、工具调用、Agent 等。 + +**目标薪资:20K** + +看起来背景还不错吧,那我们来看看面试都问了什么~ + + + +### 第一轮:提示词工程 + +面试官:跟我讲一下提示词工程吧,最好能结合你做过的项目举例,有哪些优化提示词的技巧? + +小王的回答: + +提示词工程是提高大模型输出质量的重要技术,常用技巧包括: + +1. 角色设定:给大模型设定系统提示词,包含角色说明、任务和约束条件 +2. 小样本提示:给模型一些输入输出示例,让它仿照执行 +3. 思维链:让大模型先思考再输出答案 + +在实际开发中,提示词需要不断迭代优化,可以通过阿里云百炼等平台做 A/B 测试。 + +**点评**:这个回答还算全面,但缺乏深度。真正的提示词工程远不止这些基础技巧。 + + + +### 第二轮:AI 应用开发关注点 + +面试官:你觉得开发 AI 项目时有哪些注意事项?你会更关注哪些点? + +小王的回答: +1. 业务理解:深入了解业务,抽象成工作流或 Agent +2. 工程化优化:缓存高频问题、流式输出、不同任务场景用不同模型 + +面试官追问:你做项目时不关注 AI 的可观测性吗?不关注 AI 的准确度和幻觉问题吗? + +小王:准确度方面可以通过提示词和 RAG 优化。。。 + +**点评**:这里暴露了一个问题,只知道怎么做,但缺乏生产级别的工程实践经验。 + + + +### 第三轮:消除 AI 幻觉 + +面试官:你在开发 AI 应用时,怎么尽可能消除 AI 调用的幻觉? + +小王的回答: +1. 提示词优化:更明确的角色定位,加限制条件 +2. RAG 系统:外挂知识库,让 AI 基于知识库内容回答 +3. 模型微调:针对特定领域进行微调训练 + +面试官:还有别的吗?你做过工具调用,怎么消除工具调用的幻觉? + +小王:工具调用幻觉具体指什么? + +面试官:比如 AI 调用了系统中不存在的工具,怎么消除这种情况? + +小王:。。。(沉默是今晚的康桥) + +![沉默](https://pic.yupi.icu/1/image-20250912151532157.png) + +点评:实际上,工程层面有很多方法可以处理工具调用幻觉,比如添加幻觉处理策略、大模型参数调整、提示词优化、异常捕获等等。 + + + +### 第四轮:技术框架深度 + +面试官:你平时开发 AI 应用用什么框架? + +小王:Spring AI + +面试官:Spring AI 有哪些特性? + +小王的回答: +1. Advisor 机制:相当于拦截器,可以在调用大模型前后进行拦截 +2. 对话记忆:提供多种内置对话记忆实现 +3. 向量存储:内置向量存储,也可以自定义实现 +4. ChatClient:和大模型交互的客户端 +5. 工具调用:通过注解将 Java API 转换为工具 +6. 结构化输出:指定返回 JSON 格式输出 + +虽然看起来小王回答的不少,但回答速度很慢,而且还有很多特性没有回答出来。 + +点评:感觉不太熟练的样子。 + + + +### 面试结果与总结 + +从面试结果来看,小王的优势在于: + +- 有实际的 AI 应用开发经验 +- 基础概念掌握还可以 + +不足: +1. 表达节奏慢:回答问题需要面试官一步步引导,缺乏主动性 +2. 缺乏生产级实践:只知道怎么做,但不知道怎么优化 +3. 工程化能力不足:对 AI 应用的监控、可观测性、异常处理等认识不够 + +最终我觉得小王拿 20K 月薪是有希望的,但不稳,还需要在工程实践和表达能力上继续提升。 + + + +## 二、AI 开发需要掌握什么? + +通过这场面试,大家应该也能感受到,**AI 应用开发绝不只是简单的调接口**。 + +一个合格的 AI 应用开发者需要掌握: + + +### 1、提示词工程 + +- 角色设定、小样本学习、思维链 +- 提示词优化和 A/B 测试 +- 针对不同场景的提示词策略 + + +### 2、AI 工程化能力 + +- 性能优化(缓存、流式输出、异步处理) +- 成本控制(模型选择、批处理、负载均衡) +- 可观测性(监控、日志、指标统计) +- 异常处理和容错机制 + + +### 3、核心技术栈 + +- RAG 系统设计与优化 +- 向量数据库使用 +- 混合检索策略 +- 模型微调和评估 + + +### 4、框架和工具 + +- Spring AI、LangChain4j 等开发框架 +- MCP 模型上下文协议 +- 各种 AI 开发工具和平台 + + +### 5、业务理解能力 + +- 将复杂业务抽象为 AI 工作流 +- Agent 设计和多工具协调 +- 用户体验优化 + + + +## 三、面试题推荐 + +想要在 AI 应用开发面试中脱颖而出,除了掌握上面的知识,还要多刷面试题。 + + +### 面试鸭 AI 大模型面试题库 + +我们在 [面试鸭](https://www.mianshiya.com) 上专门整理了 **AI 大模型面试题库**,包含上百道精选面试题,涵盖: + +- AI 大模型的基本原理 +- Prompt 工程技巧 +- RAG 检索增强生成 +- AI 开发框架(Spring AI、LangChain4j) +- 向量数据库和 Embedding +- AI 应用开发实战 +- 工具调用和 MCP +- Agent 设计和优化 + +题库地址:https://www.mianshiya.com/bank/1906189461556076546 + +![AI 面试题库](https://pic.yupi.icu/1/1747894904199-e795908c-638e-4d29-afd5-c8127db010f3.png) + +每道题目都有详细的参考答案和知识点标签,帮你系统地准备面试。 + + + +### 面多多 AI 模拟面试 + +除了刷题,模拟面试也很重要。我们推出的 [面多多](https://ai.mianshiya.com) 可以提供 **1v1 的 AI 模拟面试**。 + +访问地址:https://ai.mianshiya.com + +面多多的特点: + +- 沉浸式综合面试:根据你的简历和目标岗位定制面试题,提供 60 分钟以上的 1v1 语音面试陪练 +- 专项面试:400+ 面试方向任选,针对性强化某个环节 +- 简历押题:根据你的简历预测面试官可能会问的问题 +- 详尽的复盘报告:从多个维度评估你的表现,指出改进方向 + +![面多多](https://pic.yupi.icu/1/1762828151843-64eeef2c-a7ac-454a-a1c9-14c4b131f8cd.gif) + +新人福利:注册就送 200 能量值,可以免费体验 1 次沉浸式综合面试,或 1 次专项面试 + 1 次简历押题。 + +通过反复练习,你可以: + +- 熟悉面试流程,消除紧张感 +- 发现自己的薄弱环节 +- 提升表达能力和逻辑思维 +- 增强临场应变能力 + + + +## 四、学习建议 + +最后也给想转型 AI 应用开发的同学几个建议: + + +### 1、不要只停留在 "能用" 层面 + +很多朋友学会了调用 OpenAI 的 API,就觉得自己会 AI 开发了。但真正的 AI 应用开发,需要考虑的是如何用 **更低的成本** 让应用 **稳定、高效、准确** 地运行在生产环境中。 + + +### 2、重视工程化实践 + +要学会使用 AI 开发框架,而不是只会裸写 HTTP 请求。还要了解 AI 应用的监控和可观测性、掌握成本优化和性能调优技巧、学会处理 AI 应用的各种异常情况。 + + +### 3、深入理解核心概念 + +比如提示词工程,不只是写几个示例那么简单。还有 RAG 系统,涉及信息检索、向量数据库、重排序等多个环节,每个环节都有很多优化技巧。 + +不过我觉得最复杂的还是 Agent 的设计,需要考虑工具选择、任务分解、结果整合、多智能体协作模式等等。 + + +### 4、多做项目,多总结 + +这句就纯正确的废话了,大家都知道得多做项目才能积累经验。尤其是 AI 应用开发,不同的业务场景都需要对 AI 生成的效果进行定制的优化,不是背个方法论就能解决所有问题。 + +我自己开源了不少 AI 应用开发项目,甚至还写过几套体系化的实战教程,分享给大家: + +- AI 应用生成平台:https://github.com/liyupi/yu-ai-code-mother +- AI 超级智能体:https://github.com/liyupi/yu-ai-agent +- AI 文献阅读助手:https://github.com/liyupi/literature-assistant +- AI 知识库:https://github.com/liyupi/ai-guide + +在 [编程导航](https://www.codefather.cn) 上,我也带大家做了多套 AI 项目教程,涵盖了几乎所有的 AI 开发技术。 + +![](https://pic.yupi.icu/1/2%20%E7%BC%96%E7%A8%8B%E5%AF%BC%E8%88%AA%E5%8E%9F%E5%88%9B%E9%A1%B9%E7%9B%AE.png) + + + +## 写在最后 + +AI 技术发展日新月异,对程序员的要求也在不断提高。**AI 相关知识不再只是算法工程师需要了解,而是每个程序员都必须掌握的基本技能**。 + +无论你是前端、后端还是全栈开发者,都需要了解 AI 应用开发的基本概念和实践方法。 + +因为未来的软件开发,AI 将无处不在。 + +赶紧去 [面试鸭](https://www.mianshiya.com/bank/1906189461556076546) 刷题、去 [面多多](https://ai.mianshiya.com) 模拟面试,为你的 AI 开发之路做好准备吧! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/07 程序员简历模板.md b/Vibe Coding 零基础教程/40 编程学习/07 程序员简历模板.md new file mode 100644 index 0000000..40409ba --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/07 程序员简历模板.md @@ -0,0 +1,220 @@ +# 程序员简历模板 + +> 1 分钟搞定简历,让简历更专业 + + + +你好,我是程序员鱼皮。 + +做知识分享 4 年来,我已经帮朋友们看了上千份简历了,毫不夸张地说,绝大多数同学的简历只能用 "惨不忍睹" 来形容。 + +有几个最最最典型的写简历问题,比如: + +- 简历篇幅少,不知道写什么 +- 简历的排版不够整齐,花里胡哨 +- 简历的专业技能不够专业 +- 简历中的语句不通顺 +- 简历内容存在错别字 + +还不急着找工作的同学们,也别觉得写简历和你们没关系,如果能早点意识到这些问题、掌握写简历的方法,就不至于在找工作的时候闹笑话了。 + +作为一名程序员,每当看到这些问题,我都会陷入沉思:有什么办法能自动帮助大家发现简历上的问题?帮大家更快地写出更好的简历? + +为了解决这些问题,在调研了十几个写简历平台后,我决定带团队开发一个全新的在线简历制作网站 —— **老鱼简历**! + +网址:https://laoyujianli.com + +![老鱼简历](https://pic.yupi.icu/1/image-20231122134747416.png) + +通过这个视频,就能快速了解我们平台是怎么帮你提高写简历效率的啦~ + +视频地址:https://www.bilibili.com/video/BV1Vw411p7ei + + + +## 一、快速生成简历 + +老鱼的第一大能力是快速生成简历,不到一分钟,就能帮你生成一份基础简历。 + +我们提供了 3 种创建简历的方式。 + + +### 1、简历模板 + +一份优秀的简历更重要的是内容,排版只要简洁整齐即可,拒绝花里胡哨。 + +老鱼提供了多种简洁专业的简历模板,点一下就能创建出整齐美观的简历,不用再把时间浪费在排版上了! + +![简历模板](https://pic.yupi.icu/1/%E6%9C%8B%E5%8F%8B%E5%9C%881-20231122134518132.png) + +老鱼还提供了热门岗位的简历模板,有很多现成的简历内容参考,给大家提供写简历的思路和灵感。 + +比如前端实习简历模板,一键即可使用: + +![前端简历模板](https://pic.yupi.icu/1/image-20230927132442244-20231122134518284.png) + + +### 2、AI 快速生成简历 + +很多第一次写简历的同学,可能完全不清楚简历的写法,一头雾水。 + +为此,我们开发了 AI 生成简历的功能,只需填写目标职位并简单介绍你的基本情况,即可快速生成一份求职简历! + +![AI 生成简历](https://pic.yupi.icu/1/image-20230927133412261-20231122134518373.png) + +生成效果如下,学校、专业技能、工作经历都有填充: + +![生成效果](https://pic.yupi.icu/1/image-20230927133641303.png) + +不过要注意的是,AI 生成的内容并不固定,你填写的信息越详细,效果才会越好~ + + +### 3、多种格式简历导入 + +我相信很多同学的简历可能还是拿 Word 写的,但其实强烈不建议投递 Word 格式的简历,可能会出现排版错乱,也不利于维护更新。 + +老鱼简历支持快速导入 Word、PDF、JPG、PNG、Markdown、Doc、Html 等多种格式的简历文件,可以轻松地帮你实现 "简历上云",之后投递和分享简历都会更方便~ + +![简历导入](https://pic.yupi.icu/1/0a3a72d0-0c93-45a5-87c3-281e16b72bc6-20231122134518766.png) + + + +## 二、快速优化简历 + +创建一份基础简历后,接下来就要根据自己的实际情况去编写和优化简历了。 + +老鱼简历提供了多种实用功能,来帮大家解决写简历常犯的问题: + + +### 1、简历实时编辑浏览 + +首先是一个简单易用的简历编辑器,左侧编辑、右侧实时浏览,还支持灵活调整样式、一键切换主题模板,写简历的体验拉满~ + +![简历编辑器](https://pic.yupi.icu/1/image-20230927135123890-20231122134518974.png) + + +### 2、自定义简历模块 + +支持自由添加模块、富文本自定义内容和格式等,几乎满足你对简历的所有修改需求! + +![自定义模块](https://pic.yupi.icu/1/image%20(3)-20231122134519163.png) + + +### 3、智能纠错 + +开头提到了,很多同学的简历是存在错别字的。尤其是技术类岗位,一个错别字就会大大影响面试官对你的看法,可能导致简历直接挂掉! + +为解决这个问题,老鱼简历提供了一键 `智能纠错` 功能,不仅能够帮你快速修正错别字,还能优化专业名词、大小写、错误的标点、语句的连贯性等: + +![智能纠错](https://pic.yupi.icu/1/image%20(4)-20231122134519304.png) + + +### 4、智能一页 + +虽然说简历的长度并没有强制要求一页纸,但一般建议以一页纸为佳,或者保证简历的第一页是最能体现你个人能力和价值的内容。 + +但有些同学可能正好写了一页纸多一丢丢,怎么办呢? + +老鱼简历提供 `智能一页` 功能,可以一键调整简历排版、自动优化到一页纸: + +![智能一页](https://pic.yupi.icu/1/cef2eaf8-39de-47bb-84a8-a69d8879a5a2-20231122134519390.png) + + +### 5、简历助手 + +这是我们认为最实用的功能。很多同学由于没有写简历、或者实践的经验,可能完全不知道怎么写简历的内容。 + +为了解决这个问题,老鱼简历提供了丰富的、各职位、各模块的 `简历例句` 和 `简历建议`,帮助大家快速完善简历、学习写简历的经验方法。 + +比如快速引用专业技能例句: + +![简历例句](https://pic.yupi.icu/1/image%20(5)-20231122134519520.png) + +学习如何写好专业技能、以及常见的问题: + +![简历建议](https://pic.yupi.icu/1/image%20(6)-20231122134519691.png) + +可千万别小瞧了写简历的技巧,有的时候,一个细节就能给你的简历超级加分! + +比如鱼皮的简历中,提到了自己在校期间作为网站建设工作室的负责人、给学校建了多个网站,通过放了一个真实的网站链接来大幅增加经历的可信度。同样,大家自己做过的项目最好也都能提供项目或者文档地址。 + +![简历示例](https://pic.yupi.icu/1/image-20230927141549926-20231122134519763.png) + + +### 6、AI 优化简历内容 + +每一个模块都支持 AI 优化功能。只需一键,AI 帮你快速优化简历的内容,让语句更通顺、内容更连贯、表达更专业! + +![AI 优化](https://pic.yupi.icu/1/image%20(7)-20231122134519865.png) + + + +## 三、分享简历 + +编写完简历后,我们可以通过把简历导出为 PDF 和图片、或者在线链接等多种途径分享简历。 + + +### 1、导出简历为 PDF 和图片 + +示例导出效果如下图,看起来还不错吧~ + +![导出效果](https://pic.yupi.icu/1/%E9%B1%BC%E7%9A%AE%E7%9A%84%E7%AE%80%E5%8E%86%EF%BC%88%E5%A4%A7%E5%AD%A6%E8%84%B1%E6%95%8F%E7%89%88%EF%BC%89.png) + + +### 2、在线分享简历链接 + +可以给自己写好的简历生成一个极简干净的在线简历页面链接,便于给面试官或 HR 分享。 + +支持自定义链接地址,比如鱼皮的大学简历:https://laoyujianli.com/share/yupi,大家可以点进去看看效果。 + +![在线简历](https://pic.yupi.icu/1/image-20230927142119454-20231122134520312.png) + + +### 3、简历一键脱敏分享 + +分享简历时,还支持一键隐藏个人敏感信息,只保留核心内容,让简历更安全: + +![简历脱敏](https://pic.yupi.icu/1/4ebdf063-def1-4f13-8328-512cca63f46b-20231122134520412.png) + + + +## 四、其他功能 + + +### 1、求职经验分享百科 + +我们精选了一些大厂同学的求职经验分享文章,帮助你提高求职竞争力! + +![求职经验](https://pic.yupi.icu/1/(null)-20230927125709592-20231122134520103-20231122135515424.png) + + +### 2、简历中英文翻译 + +如果想同时投递国内外的公司,这个功能就很实用了。只需要点击 `翻译` 按钮,就能自动将简历转换为英文版本啦! + +![简历翻译](https://pic.yupi.icu/1/1700586172961-f3bce3a7-df22-4b8a-b4ae-f9457e401197.png) + + + +## 写在最后 + +OK,就介绍到这里,欢迎大家使用老鱼简历:https://laoyujianli.com + +配合 [编程导航](https://www.codefather.cn) 的 [《鱼皮保姆级写简历指南》](https://www.codefather.cn/course/cv) 一起使用,效果更佳。你的简历绝对能进化至少 1 个 Level。 + +有任何建议请随时反馈给我们,感谢您的支持。 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/08 程序员面试刷题.md b/Vibe Coding 零基础教程/40 编程学习/08 程序员面试刷题.md new file mode 100644 index 0000000..baf0350 --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/08 程序员面试刷题.md @@ -0,0 +1,160 @@ +# 程序员面试刷题神器 + +大家好,我是程序员鱼皮。[「面试鸭」](https://mianshiya.com) 正式上线,终于有一个 **题目全、更新快、题解优质** 的面试刷题神器了! + +覆盖几乎所有主流编程方向,包括 Java 后端 / 前端 / AI / Python / C++ / Go / 运维 / 测试 / 系统设计 / 场景题 / 公司题库 / HR 面试,300+ 题库、10000+ 高频面试真题!支持网页、小程序、IDE、VSCode 插件多端使用。 + +![](https://pic.yupi.icu/1/1768276081768-c7a167cb-f213-4e65-9be6-e6a1bce8199b.png) + +面试鸭网页端:https://mianshiya.com + +面试鸭小程序: + +![](https://pic.yupi.icu/1/1721460826037-d46052ac-87c8-4afe-8952-9bdde15121af.png) + +面试鸭 IDE 插件:在 JetBrains IDE 中打开设置,找到 Plugins 插件,搜索 `mianshiya` 即可安装。 + +![](https://pic.yupi.icu/1/1726648509017-ed809a2c-aab2-4a48-bd35-4affda7395b0.gif) + +面试鸭 VSCode 插件:在 VSCode/Cursor 中,打开拓展市场,搜索“`面试鸭`”或“`mianshiya`”,即可安装。 + +![](https://pic.yupi.icu/1/1744178535494-59a54716-b16c-48df-9eb0-a05dc5c94baf.gif) + + + +## 为什么做面试鸭? + +我相信学编程的朋友都很讨厌八股文,就是一些相对死板、答案固定的题目。但偏偏 **面试又必考八股文** ,所以经常有朋友向我吐槽: + +- 八股文太难背了!背了就忘咋办? +- 八股文太多了背不完!应该重点背哪些? +- 从哪儿找八股文?网上的都太乱了! +- 网上题目很多,但题解都太水了! +- 背八股文感觉没用,还是啥都不会! + +的确,网上虽然有很多整理好的面试题 PDF,但基本都是 “用来引流”,要么是题目不全、要么就是不更新维护、题解的质量更是参差不齐。假如现在让你准备面试,是不是要先自己整理一波面试题、然后再从网上搜一大堆题解、然后再择优劣汰?想想都麻烦,得花不少时间,而且最关键的是你也不知道题目考不考、题解是否正确对吧? + +天下苦八股文久矣。 **朋友们,是时候吊打一波面试官了!** + +所以我们上线了面试刷题神器《面试鸭》,题目更全面、刷题更方便、背题更省时、题解更优质、知识更丰富、更新更频繁,是鸭鸭的 6 大优势。目标只有一个:**帮助大家用更短的时间准备面试,吊打面试官**! + +想一想,面试的时候遇到你准备到的原题,那感觉有多爽~ + +![](https://pic.yupi.icu/1/%25E9%259D%25A2%25E8%25AF%2595%25E9%25B8%25AD%25E9%25B1%25BC%25E7%259A%25AE%25E8%25A1%25A8%25E6%2583%2585%25E5%258C%25852.png) + +下面介绍面试鸭的优势,更推荐观看短视频介绍:https://bilibili.com/video/BV14E421w7dr/ + + + +## 面试鸭的优势 + +### 1、四端同步,刷题更方便 + +首先,面试鸭支持 **网页端、小程序、IDE 插件和 VSCode 插件**,全端数据同步,真正做到**随时随地刷题**,轻松备战求职面试。 + +而且界面纯净,用起来非常方便,甚至是面试的时候都能偷偷用它来搜索题目。。。 + +尤其是「沉浸模式」,一键隐藏页面里的其他元素,全身心投入刷题中,一题接着一题,根本停不下来。 + +![](https://pic.yupi.icu/1/1768276245137-fb1ff126-5d7c-465d-8faf-bc99f7006b46.png) + +新上线的【专项练习】和【测试一下】将那些高频面试题针对性地转化为选择题,**专治各种一看就会、一问就废**。 + +尤其是那些容易被模糊的概念,哪些知识是真的掌握,哪些还需要加强巩固,测试一下就都清晰了。经常这么练习,还能**帮助你了解面试官的出题思路**,面试时候更加游刃有余。 + +![](https://pic.yupi.icu/1/1768280270565-7e78a72d-2820-4b2d-bf99-8b2c9078b833.png) + +为了帮助大家愉快地摸鱼刷题,我们还推出了面试鸭 IDE 和 VSCode 插件。题库、题目列表都使用原生 UI 展示,**隐蔽性足够好**!还能自定义快捷键,一键打开 / 收起面板,葫芦娃的二娃来了,都发现不了我在摸鱼刷题~ + +沉浸式隐蔽摸鱼刷题使用指南:[我做了个程序员面试刷题工具,帮你吊打面试官!沉浸式摸鱼刷题](https://www.bilibili.com/video/BV11hx5euEbD/) + +![](https://pic.yupi.icu/1/1726815401056-2d38260a-7d3e-42ec-a91a-5456913dc7d7.png) + + + +### 2、题目全面,命中率高 + +面试鸭涵盖了 **几乎所有主流编程方向** 的面试题,Java 后端、前端、AI、Python、C++、Go、运维、测试、系统设计、场景题、公司题库、HR 面试等,**300+** 题库、**1w+** 高频面试题,还有秋招热题、企业真实面经、刷题路线等,帮助你 360° 全方位无死角吊打面试官! + +我们按照面试考点和岗位划分了题库,就以 Java 后端为例,知识点覆盖: + +- Java 开发:Java 基础、主流框架、并发编程、JVM +- 后端中间件:MySQL、Redis、消息队列 +- 计算机基础:计算机网络、操作系统、设计模式 +- 更多扩展:SQL 编写、系统设计、线上问题排查、场景题、实战项目题库 + +![](https://pic.yupi.icu/1/1768280169156-b6774dea-c701-4f0c-9266-74515075eb99.png) + +无论是面试各类公司的必考题目,还是你意想不到的冷门问题,我们的题库都一应俱全,而且 **面试命中率超高** ! + +为了更好地让大家通过企业求职,我们还新增了 **校招热题** 和 **真实面经** 板块。你可以在这里看到 Java、React 、Go 、Vue 、前端、后端等等秋招热题,你也可以在这里找到美团、阿里、字节、京东、国企、银行的真实面经。 + +你可以按照自己的水平和简历情况去刷题,用更短的时间把握住面试重点,体验面试被问到原题的快感。 + +![](https://pic.yupi.icu/1/1768276126616-2d8b6228-4d1a-42a9-bc3d-30bf93b7393b.png) + +千万别再自己花费时间到网上整理题目、搜题解了! **你浪费的这些时间,别人都可以多背很多题目了。** + + + +### 3、题解更优质 + +我们深知大家背题刷题的效率很大程度上取决于题解的质量,所以专门邀请了多位**大厂面试官来创作和优化题解**,保证题解是正确易懂的。 + +以 “如何设计 XX 系统” 之类的场景题为例,如果你没有类似的经验,就会一脸懵逼。那我们会先针对题目给出 **回答重点**,直击面试官腰子,然后结合实际经验给出更多 **扩展知识**,对着面试官打出一套组合拳。比如: + +![](https://pic.yupi.icu/1/1768276824962-f8ecc421-0f5b-4e0d-b819-6a7c3767580e.png) + +就这一道题目鸭鸭就写了 3000 多字,还搭配了图片辅助理解、保证通俗易懂。这样一来,大家不仅仅是背题应付面试,而是 **真正能学到东西** ,全面提升技术视野、开发能力和面试经验。 + +我们的很多题解都可以当做技术文章和专栏来学习,所以哪怕你现在不急着面试,也可以通过面试鸭了解高频考题、巩固基础知识、明确学习计划、提升技术水平。 + +就比如下面这些题目,看看你都能答出来么? + +![](https://pic.yupi.icu/1/1768277075218-cfa8a973-ebdc-4209-960f-2c9c19a04881.png) + + + +### 4、更新更频繁 + +我们现在每天都在高速更新题解、同时优化系统功能。未来也会紧跟面试趋势,持续更新题库和题解,及时添加当下企业面试新题、新知识、新技巧,让你始终走在前列,不要浪费时间在过期的题目和知识上。 + +最近 AI 相关概念十分火热🔥,面试鸭也新增了 `AI 大模型原理和应用面试题库` ,很多题目是通过大厂真实面试收录来的,够与时俱进吧~ 而且还在持续不断地更新哦! + +![](https://pic.yupi.icu/1/1768277166472-c0ef52de-33b4-4c15-9a3f-8447ad60a5dd.png) + + + +## 邀请有赏 + +邀请好友注册并购买面试鸭永久会员,可以获得佣金奖励🧧,详情查看[面试鸭拉新邀请有赏(赚赏金)](https://yuyuanweb.yuque.com/org-wiki-yuyuanweb-zvq1bg/oue2nx/ik6d3mv2wapbx96w) + +面试鸭网站已支持一键生成你的专属邀请链接、邀请海报,快来分享赚赏金吧! + + + +## 欢迎体验 + +希望大家可以体验并且多给我们反馈,有面试遇到的、希望补充的新题目,鸭鸭会加班加点解答。 + +访问 https://mianshiya.com 或者微信搜索面试鸭小程序,即可免费使用! + +![](https://pic.yupi.icu/1/1727242691135-17601986-9d1b-4d85-a031-457867491597.png) + +目前所有的题目和题库都是免费可见的,但部分我们大厂面试官原创的题解是 **仅会员可见** 的,毕竟原创题解和开发系统都要消耗大量人力。 + +只需要 [开通永久会员](https://yuyuanweb.yuque.com/org-wiki-yuyuanweb-zvq1bg/oue2nx/tz028epsok1207t4),就能自由畅刷面试鸭的所有题目和题解了,PC 端和小程序都支持,还可以加入会员专属交流群随时交流提问。 + +简单算一算,如果你自己准备面试,要先搜索题目 => 整理重点 => 搜索题解,还要判断题解的准确性,少说花费几十个小时。现在用面试鸭,直接开刷高频面试题,有问题还能求助反馈,能够省下多少时间呢?如果面试中遇到了原题,通过了面试拿到 offer,这点投入真的是九牛一毛了。而且我们是用心创作的题解,相当于能学到由大厂专家写的多个技术专栏,性价比极高! + +目前面试鸭永久会员 **只需 129** ,会随着功能和内容的丰富持续涨价,正式价格预计是 399 以上,所以早入手早学习~ 我们会持续更新内容和系统功能,给大家最好的刷题体验,感谢大家入股,也欢迎大家监督鸭鸭改进。我们既然做了,不成功便成仁! + +![](https://pic.yupi.icu/1/1768276211775-371348a9-fe0a-48ae-830c-0730a5fd6baf.png) + + + +## 用户交流群 + +有好的想法建议、反馈 Bug、需要什么功能或内容,都欢迎加入面试鸭用户交流群反馈哦: + +![](https://pic.yupi.icu/1/1721464673815-349cc85e-201d-413e-bef9-0028edb8196a.png) diff --git a/Vibe Coding 零基础教程/40 编程学习/09 程序员工作技巧.md b/Vibe Coding 零基础教程/40 编程学习/09 程序员工作技巧.md new file mode 100644 index 0000000..1cafecb --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/09 程序员工作技巧.md @@ -0,0 +1,290 @@ +# 程序员高效工作技巧 + +> 提升工作效率,轻松应对职场挑战 + + + +你好,我是程序员鱼皮。 + +提到程序员,很多还没毕业的小伙伴可能觉得程序员的工作就是整天写代码,但进了公司后,你才会发现写代码只是工作中最最最基础的环节。 + +想要高效地完成工作、尽快在工作中取得成长和晋升,还有很多需要注重的事情和方法。 + +这篇文章就给大家分享一下我在工作中积累的程序员工作技巧吧,大家读起来应该是比较轻松的~ + +💡 注意,以下方法未必适用于所有人,仅提供建议 + + + +## 一、工作方法 + + +### 1、没有明确需求前,不要急着做 + +我刚进公司的时候,会有一种应届生心态:同事都是我的前辈,他们给我提的需求我都要尽快完成。 + +而且那会儿自己初入职场,有一种莫名的自信,会觉得有些需求很简单,能做就做了。 + +结果有一次就翻车了,我以为有一个需求很简单,就跟我导师说我这两天就能完成。结果改完代码,跟产品经理交付的时候才发现我完全理解错了他的意思,然后又花了几周才把需求做完。 + +说到错误理解需求,我想到一个段子: + +> 老婆给当程序员的老公打电话:"下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。" +> +> 当晚,程序员老公手捧一个包子进了家门…… +> +> 老婆怒道:"你怎么就买了一个包子?" +> +> 老公答曰:"因为看到了卖西瓜的。" + + + +所以大家一定要记住,明确需求始终是我们程序员工作的第一环!包括明确需求的背景、意义、具体的功能点等等。 + +如果产品经理没有给出需求单、给出足够的信息,那么一定要让他提供清晰的需求文档,确保你们的理解和目标是一致的,再去设计方案和开发。 + +千万记住,不要接受一句话需求、需求信息一定不能只通过口头描述!否则今后产品经理抵赖,你也没办法。 + +![需求文档](https://pic.yupi.icu/1/1696339052753-853d6116-984f-4f94-8bdf-9cf40c61109a.png) + + + +### 2、上游没有确定前,不要急着开发 + +这点其实和上一点有点类似,对于我们程序员来说,可能有很多来自不同岗位、部门的上游,比如提需求的产品经理、核对功能点的测试、提供依赖接口的开发、提供资源权限的运维等。 + +如果我们实现需求必须依赖一些上游,我个人不建议直接上手开发(但是可以先做设计)。因为在工作中,总会有各种各样超出预期的变数和风险。 + +举个例子,前段时间我要基于其他部门提供的数据表 A 开发出数据表 B,最开始他们给了我数据表 A 的表结构,但是并不明确、并没有建好数据表并写入数据。如果是我刚工作的时候,可能就立刻基于这个表结构去写代码了。但后来,他们的数据表 A 的结构变了好几次、还换了好几次表名!他们表示很抱歉,但我却淡然一笑:没事,你们变吧,我还没开始做,等你们把表上线了再说~ + +如果是以前,我可能已经心态爆炸了吧哈哈。 + +![心态爆炸](https://pic.yupi.icu/1/1696339052793-e3154265-d287-48e8-851c-86c43a831b75.png) + +所以这一点还是很有用的,也为我节省了不少时间。 + +但是,对于紧急需求,最好还是开会拉着所有上游同学一起核对,把方案先定下来,然后大家再各自分工开发、对齐。 + + + +### 3、学会预留空间 + +前面提到,刚进公司的时候,我还是比较自信的(现在想想有点自负了),总觉得自己能很快地完成需求,而且觉得需求做的越快越能得到老板的赏识。 + +结果就导致需求排期的时候给自己安排的太紧了,前一个需求的 Bug 还没修完,下一个需求又快到截止日期了。不仅让自己身心俱疲,也打了自己的脸,辜负了别人的期待吧。 + +而且自己长期负责一个项目后,我会发现很多时候你在做新需求时,用户会突然反馈一个历史功能的 Bug,你又不得不立刻抽身去修复。 + +所以之后做需求的时候我都会给自己多预留一些时间,防止一些自己前期没有考虑到的问题出现,毕竟大家也知道,有时候一个 Bug 可能就要排查一天。。。 + +![预留时间](https://pic.yupi.icu/1/1696339052824-38062959-00d7-4c9c-a00f-3583376a4737.png) + +哪怕我很清楚自己 2 天能完成需求,可能也会多给自己一些时间。毕竟你如果能提前完成,对方会觉得超出预期了;如果你准时完成,对方会觉得这是正常的;而如果你因为一些 Bug 导致没有按时完成,对方会觉得 "你不太行"。 + +这也算是一种心理博弈? + + + +### 4、学会向上管理 + +在职场中,很多人明明技术能力很强,但为什么得不到老板的器重、或者迟迟没有得到晋升呢? + +很大的一个原因就是缺少 **向上管理** 的意识。 + +向上管理是指在日常工作中与上级进行良性互动,积极主动地提出建议、解决问题、持续反馈、维护和上级的关系的能力。 + +有很多做好向上管理的方法,比如: + +1)主动提供解决方案:当你遇到问题或困难时,不要仅仅将问题呈现给你的上级,而是尝试提出可行的解决方案。 + +2)持续沟通和反馈:建议在合理范围内,定期与上级进行坦诚地交流沟通,包括表述自己的想法和规划、反馈自己的工作情况和成果、和上级对齐组内的目标。 + +千万不要说你自己做了很多 "自以为很牛 X" 的工作,结果上级根本不知道、或者对于组内和他个人的目标毫无价值,那就很可惜了。 + +3)展现自我领导力:你不仅要在领导下工作,还要能够在没有明确领导的情况下做出正确的决策,也就是我们公司企业文化中的 "主人翁意识"。 + +4)接受反馈:如果你的上级提供了建议或批评,不要将其视为攻击,而是视为一个机会来改进自己。积极地回应反馈,表现出你愿意学习和成长的态度。 + + + +## 二、时间管理大法 + +1、制定清晰的任务清单 + +按照优先级整理自己的每日任务,一条条打 ✅ 完成,增加动力。 + +2、时间切片 + +将每天的时间分段,每段只专注完成一个小任务,减少连续高强度学习的压力。 + +3、分解复杂任务 + +把大任务分成小步骤,逐步攻克,尤其适合写论文、搞大项目和方案。当你觉得做一件事情很难时,就必须这么做。 + +4、学会适时放弃 + +拒绝一些不重要的任务,不要让一些小事干扰了你的节奏。 + +5、减少无效信息 + +限制刷手机的时间,工作时设置为免打扰。你是要干大事的人,怎么能沉迷于某音某手某书? + +6、劳逸结合 + +休息是非常有必要的,学习工作一段时间后,去接杯水吧~ + +7、利用碎片时间 + +如果你真的很忙,不妨利用通勤等零碎时间完成小任务,比如回复消息、读文章背单词等等。 + +8、批量处理任务 + +把相似任务集中处理,节省切换时间。我也是这么建议团队的运营和销售同学的,如果每分钟都盯着消息看,就没有连续的时间做其他工作了。 + +9、倒计时法 + +给任务强行添加一个时间限制,鼓励自己快速完成。看过我教程的同学应该知道,经典 "20 分钟" 嘛,就是这个作用。 + + + +## 三、任务管理 + + +### 1、不要依赖人脑记事 + +一定不要依赖 "人脑" 记事,像我有的时候走出自己的办公室,就会有好几个同事找我确认各种事项,可能等我出去接杯水回来就忘掉了一些。所以必然要有自己的事项记录工具。 + +大家都是用什么工具来记录工作事项的呢? + +像我以前用过滴答清单,类似一个高级的备忘录,但后来就不用了,因为要额外打开软件,还是不够方便。 + + + +### 2、利用微信记录 + +现在,我最常用的临时记录工具,正是我们每天都会使用的软件 —— 微信。 + +我的工作微信中,文件传输助手始终是置顶的,我不在电脑前面的时候,只要想到或者收到一些工作事项,都会发给文件传输助手,然后标为未读,以后每次打开微信,都会有一个醒目的红点提醒了。 + +![文件传输助手](https://pic.yupi.icu/1/image-20240804144855349.png) + +如果收到暂时无法处理的工作消息,我在阅读之后也会标为未读并且置顶聊天,提醒自己之后要处理。大家在工作中遇到已读不回的情况,其实是很正常的,有可能对方只是暂时不方便回复、或者没想好怎么回。 + + + +### 3、使用工作记录表 + +除了利用微信来记录临时工作消息外,肯定还需要一个更系统的工具来记录每日的工作事项。 + +我使用的工具是腾讯文档的在线 Excel 表格,一方面是直接就能在企微或浏览器里打开,另外一方面现在的在线 Excel 表格功能已经非常灵活,可以很方便地根据自己的需要记录信息、对信息进行分组等等。 + +比如我是按照每天的日期进行分组,记录了工作事项、备注、相关文档、工作进度等信息。如果某一天的工作做不完,我只需要改下日期到第二天;如果担心有项工作之后会忘掉,只需要提前把它记录到表格里就好。 + +每天过一遍工作记录表,就不容易遗漏掉工作,更容易安排好自己的时间,还可以通过查看记录对自己的过去进行一个复盘。 + +以下是我的工作记录表示例: + +![工作记录表](https://pic.yupi.icu/1/image-20240804143618230.png) + +像我带了团队之后,还有一个习惯,在每个周末提前做好下周整体的个人和团队计划,便于提前做好准备、更好地把控进度,让工作井然有序。 + + + +### 4、睡前过一遍红点 + +由于我平时工作消息非常多,不可能做到什么消息都很快回复,那样我根本无法静下心来做好一件事。 + +但是我每天睡觉前都会过一遍微信 / 企业微信中的 "红点",确认下有没有漏掉的消息,这可能也是导致我睡眠时间不固定的一个主要原因。 + +![过红点](https://pic.yupi.icu/1/image-20240804144027111.png) + + + +## 四、日常记录总结 + +经常有朋友跟我吐槽说自己进公司很久了,但感觉一直都没什么成长,每次汇报的时候也不知道说什么。 + +如果你也有这种想法,那么大概率你是没有日常总结的习惯的。 + +我自己以前存在的一个问题是:看网课做笔记时,有时候会偷懒,我会想着多看几集一起记录。结果现实往往是,随着我看的集数越来越多、未记录笔记的集数越堆越多,我会觉得记录笔记的压力越来越大,到最后索性不记了。 + +有没有同学也是这样? + +工作总结也是一样,最好大家每完成一天的工作、每次做完一个需求、每产出一个阶段性成果,都立刻把他记录下来,养成日常记录的习惯,并且定期整理总结、复盘。才不会说堆到最后都懒得去记了,等到写总结的时候也忘了自己今年做过什么。 + +这个习惯我已经坚持了 3 年,不得不说,对我的帮助很大。也能时刻让我反思自己的工作节奏、状态,激励自己去尝试和突破。 + + + +## 五、效率提升法则 + +1、先完成确定的工作 + +没想好怎么办时,先做清楚的任务。比如我写文章没灵感时,就不会硬想,而是先去做别的,把控整体的工作进度。 + +2、完成比完美更重要 + +不要过分追求完美,完成比完美更重要。敏捷开发、持续迭代就是这个道理。(当然,如果不完美的完成对你来说毫无意义,那就按照你的节奏去做就好了) + +3、有现成的代码,就不要自己写 + +学习除外。 + +4、做项目前,要先想清楚怎么做 + +做好充分的预研和设计。这样不仅便于后续的程序扩展,也能避免无意义的返工。 + +5、将大的目标进行拆解 + +做好计划,标记出关键节点,不要因为觉得目标遥不可及而拖延,也不要盲目乐观而松懈。 + +6、养成好的作息习惯 + +找到自己适合工作的黄金时间。(可惜我的黄金时间在凌晨。。。) + +7、记性不好,就多记录 + +哪怕实在记不住,也可以借助文档、收藏夹软件来当自己的第二大脑。 + +8、积累属于自己的工具库 + +配合搜索软件实现随用随取。 + +9、多和团队成员交流 + +也可以关注一些 UP 主,拓宽知识渠道,从而了解更多的工具和方法。有些东西你只要听说过,等到要用时说不定就能节省几个小时的查找时间。 + +10、找到让自己进入心流的方法 + +比如戴上耳机、嚼口香糖、喝咖啡、深呼吸等。 + +11、经历过的事情,再做一次,通常会更快 + +因此,要多做项目,持续积累经验,熟能生巧。 + + + +## 写在最后 + +也许有朋友会觉得:什么都做计划,把自己的人生困在了 Excel 工作表格中,真累啊! + +我想说:对啊,确实很累。但当我养成了记录和做计划的习惯后,我做事不再迷茫,而是更有目标了,知道接下来该做什么,也不担心自己会耽误事情。而且看着自己的工作记录表充满 100% 的进度,成就感爆棚! + +就这么多,虽说比较抽象,但细细品味,相信你会有一种豁然开朗、醍醐灌顶的感觉。 + +综上,希望这些技巧对大家有帮助,早日升职加薪~ + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/10 程序员成长大法.md b/Vibe Coding 零基础教程/40 编程学习/10 程序员成长大法.md new file mode 100644 index 0000000..823b284 --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/10 程序员成长大法.md @@ -0,0 +1,210 @@ +# 程序员快速成长的六大方法 + +> 工作中如何快速成长,突破职业瓶颈 + + + +你好,我是程序员鱼皮。 + +转眼又是一年,很多小伙伴刚刚步入职场,难免会对未来的成长感到焦虑困惑。 + +今天我想和大家聊一个很现实的问题:如果你去了一个外包公司,或者你的工作本身不能带给你成长,应该如何破局? + +跑,快跑! + +![](https://pic.yupi.icu/1/image-20250815104851768.png) + +开个玩笑,既然工作不能带给你成长,那就自己学习呗,纯把工作当做是金钱和劳动的交易就好。 + +这个问题其实很大,考虑到大家可能不太喜欢听那些空洞的理论,所以我就直接分享我自己的做法,以及我观察到的一些成长很快的大佬都是怎么做的。 + +> 其实这个问题我在直播时聊过,可以看视频版:https://bilibili.com/video/BV1DC4y177sB + + + +## 一、每天读几篇文章 + +嗯,每天就读 2 ~ 3 篇文章,不用多,能养成习惯就好。 + +但是你要有选择地读,不要什么都读。 + +读什么文章呢?首先是 **行业趋势类** 的文章,让你始终跟紧这个行业,能跟同事和面试官聊新的东西。比如说 AI 火了,首先要去了解一下 AI 会不会对自己有影响,如果会,那就去学习一下 AI 相关的工具。 + +其次是 **技术类的文章**,但一定要结合自己工作相关的方向。假设你每天读 2 ~ 3 篇文章,一年是多少?一年那就是将近 1000 篇!你换算成教程,那可能就是几十个教程。这对你的成长绝对是巨大的,而且这是一个非常轻松的工作。 + +我自己也是坚持这么做的。哪怕说我现在开公司了,我反而会读更多的文章,因为我现在不仅要了解行业趋势、了解技术,我还要了解产品、了解项目管理,甚至要了解怎么招人。 + +有同学问看哪里的文章?最推荐的是 **大厂的技术博客**。我关注了一大堆的技术团队,当然这些分享的内容可能会比较硬核。还有科技资讯类、经验分享、编程趋势、技术干货,我自己的号基本上什么都分享。 + +像今年我们还打造了完全免费的 AI 交流圈,大家可以没事儿来刷一刷:https://ai.codefather.cn + +![](https://pic.yupi.icu/1/image-20260109121412266-20260113154640560.png) + + + +## 二、持续学习新技术 + +如果你能做到上面这点,恭喜你,可以进阶提升一下每日学习的时长,因为有些知识是不建议碎片化学习的。 + +你可以尝试每天抽不到一个小时,看 2 ~ 3 集教程,只要坚持一个月,你就能看完一套课。如果在你工作期间,一年内你有 6 个月能做到这点,那么你不会被淘汰。 + +这里有一个重要的点:**裁员不等于淘汰**。你被裁了,不一定是你的问题,因为有可能是这家公司经营不善或者公司不干人事,这是最坏的情况,不要因为一些不可抗力影响了自己的信心。 + + + +## 三、复盘总结 + +这个是我到现在一直都在做的事情,而且这个复盘总结很简单: + +第一步:每天记录自己完成的工作。 + +你今天修了个 bug,记下来,一分钟都不到;你做完了一个需求,记下来,贴个文档,就这么简单。像我当时一般是每天下班前会记录。 + +第二步:每月记录自己这个月重点在做的事,以及完成的工作、学习的情况等。 + +我当时刚开始实习的时候,每天都在记。我不仅记工作内容,还在记感悟、收获。比如跟导师交流之后,有很多的想法,我都会记。 + +第三步:每半年,或者说每完成一个大事,做一个复盘总结。 + +这个复盘总结就相对要完整一点,就是记录自己做这件事情的经历、过程、结果,以及好和不好的地方。你把这个点记录完成之后,你在做下一段事情的时候,重复的坑就不会踩了。而且很多公司本来就要求半年或一年搞一次绩效评估,如果你之前就已经有记录总结,写这玩意的时候那不是直接复制粘贴? + + + +## 四、整理自己的弹药库 + +大家觉得工作 3 年的人和工作 1 年的人相比,最大的差别或者多出来的东西是什么? + +那就是经验啊! + +你不能说工作 3 年的人,你积累的内容和工作 1 年的人是一样的,哪怕剩下 2 年天天 CRUD,也得成为 CRUD 大师了。 + +那为什么有些人工作 3 年还和 1 年一样呢? + +因为他可能的确工作了 3 年,但是到第 3 年的时候,第 1 年自己做过的事情就忘完了。他做过的系统设计方案、他接触过的技术,全都忘了。 + +实际上你别说 3 年,我都不记得自己 1 个月前写了什么代码。 + +![忘记代码](https://pic.yupi.icu/1/image-20250815104740029.png) + +**经验积累是决定你后续的路能走多远、走多稳的一个重要因素**。 + +怎么积累呢? + + + +### 1、整理属于自己的 bug 库 + +也就是你解决过的问题,这很有可能成为你跟面试官交流的素材。 + + + +### 2、整理属于自己的经验库 + +就是你工作中的技巧和踩过的坑,不一定局限于编程方面,也可以是职场经验。比如我当时自己感悟出来的: + +- 你不要把自己全部交给公司 +- 你不要把所有的底牌暴露出来 +- 你不要让你的老板觉得你只有这些东西了 +- 可以和同事交朋友,但是要注意保持边界 + +虽然有的经验不一定对,但这也是自己沉淀的东西。 + + + +### 3、整理自己学过的知识点 + +把你学过的所有知识点,以碎片的形式进行记录整理。 + +什么叫碎片呢? + +我就以编程导航给大家拆解的项目知识碎片为例。所谓的知识碎片,就是那种你可以把它拆解出来,去运用到任何项目上的一个很小很小的知识点。 + +比如说 Ant Design Pro 框架怎么用,就是一个知识碎片;怎么初始化 Java 项目,就是一个很简单的知识碎片。 + +为什么我建议大家整理碎片呢? + +首先,整理碎片很简单,你就写清楚一个很小很小的知识点,哪怕只有 5 分钟,把它写出来。这样你没有那种 "我要写一篇长篇大论" 的负担,有利于你养成习惯。 + +像鱼皮自己有个有趣的习惯,我会 "口遁",有时候想记录了,直接掏出手机叭叭一通乱说,利用语音转文字快速记录。实不相瞒,有些文章都是我口遁出来的,看过我直播的同学应该也知道,给我个话题,我叭叭能给你说一大堆有的没的。 + +![口遁](https://pic.yupi.icu/1/image-20250815104416663.png) + +其次,为什么要拆成碎片?是因为每个碎片它都是可复用的。你之后想做一个自己的项目了,你就打开整理的知识碎片列表看一看。比如说这个项目,能不能给它加一个全局权限管理?能不能加个缓存?如果发现能加,那就点进具体的知识碎片,看看我之前是怎么做的就好了。 + + + +### 4、积累自己的工具库 + +你用什么记录笔记?你用什么去写文档?用什么做思维导图? + +这些都是你可以整理的。 + +比如我自己经常上网学东西,不经意间就发现了一个新的宝藏工具,如果我不积累,可能真到需要使用这个工具时,就想不起来了。 + +最理想的情况下,当你换了一台电脑的时候,你能够很快地把你常用的工具在你的新电脑上完成安装,这就发挥了工具库的意义。 + + + +## 五、分享 + +这个真的是我自己的真实经历,你们都能看得到。 + +**注意,分享不等于做自媒体!** 自媒体可能是分享后面的阶段。当你分享的内容多了之后,再去做自媒体,那叫水到渠成,而不用刻意。 + +要怎么做呢? + +还记得我前面提到的几个建议么,现在是不是已经有一堆自己的干货了?比如: + +1. 分享自己的复盘总结和经历 +2. 分享自己的弹药库 +3. 分享自己学过的知识点 +4. 帮助别人答疑解惑 + +这 4 点你只要做到,并且坚持做之后,你哪怕是没有专门想去做自媒体,你一定会收获一些粉丝,一定会得到一些关注。 + +记得我刚开始做自媒体时,分享的全部是面试题。为什么呢?因为我那段时间就是在找工作,我那段时间自己就天天看这些东西,我顺便把它分享出来,仅此而已。不需要给我增加什么额外的负担,为了帮助自己加深印象,我才去分享。 + +你会发现,我前面提的几个成长之法,全部都是按照顺序来的,是很自然的、在工作中可以做的,并且给你带来成长的事情。先学技术,持续积累,然后复盘总结,复盘总结过程中持续整理,整理之后把它分享出来。 + + + +## 六、学会目标拆解 + +在做以上的事情的过程中,你要持续地践行一个操作,就是 **将目标拆解**。 + +当你意识到想要做一件很大的事情很难的时候,你要学会把这个目标进行拆解。把一件大事拆分成一些更确定的、更简单的,甚至是你利用碎片化时间都能学习的小事。 + +比如说你要过英语四级,可以把它拆解为每天背 10 个单词,每周背 50 个单词并且复习,每月背 200 个单词并且复习。 + +大家有的时候之所以不去做,是不是因为觉得太难了?我会担心自己做不下来、我会觉得自己工作忙,可能今天想做,明天工作一忙,我又把它搁置了。**因为有很多的不确定性,所以导致我们最后什么事情都做不了。** + +所以说大家一定要学会工作的拆解、目标的拆解,把它拆分成一条路线,一个很清晰的文档。哪怕你中间隔了 7 天,只要捡起来,就能按照文档往下一步一步地继续走,那就能够完成。 + +如果你觉得一件事情非常难,那么就从简单的事情开始做起。如果你觉得一个小计划还难,那就再拆。如果你觉得看一节课都难,那就再拆,拆分成每天看 10 分钟,4 天看完一节 40 分钟的课。这样做最起码能保证你有一定的收获,不至于任何事情都开启不了。 + +**种一棵树最好的时间是 10 年前,其次是现在。** + +什么时候开始都不晚,因为还有很多同学比你更晚。就从明天开始坚持 7 天,然后试着坚持 21 天,你绝对能意识到自己的进步。 + + + +--- + + + +以上就是关于程序员工作后怎么提升自己的分享,当然我相信不仅局限于程序员,任何工作都是适用的,希望对大家有帮助! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/11 编程工具大全.md b/Vibe Coding 零基础教程/40 编程学习/11 编程工具大全.md new file mode 100644 index 0000000..e8e9eba --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/11 编程工具大全.md @@ -0,0 +1,198 @@ +# 程序员必备软件工具推荐 + +> 3000+ 程序员效率工具合集,点击即用 + + + +你好,我是程序员鱼皮。 + +在 [编程导航](https://www.codefather.cn) 群里经常看到有同学问,画流程图、架构图用什么工具?刚学编程,建议下载哪个代码编辑器?AI 工具到底哪个好用? + +日常总卡在 “找工具” 这一步,实在心累。 + +于是我们上线了【编程资源工具大全】,这里一站式汇总了程序员全工作流所需的各类神器,即搜即用,大幅提高工作效率! + +👉 [点击获取 3000+ 程序员效率工具 codefather.cn/tool](https://codefather.cn/tool) + +![编程工具大全](https://pic.yupi.icu/1/1768143253671-cf32bba6-5f94-47af-a712-775994f46e7e.png) + + + +## 一、开发工具 + +汇总 600+ 常用编程工具和资源,涵盖主流开发环境 IDEA、VS Code,开发框架资源文档 React、Vue,代码托管平台 GitHub、Gitee 和开源镜像清华源、华为源,大幅提高开发效率。 + +![开发工具](https://pic.yupi.icu/1/1768143193782-ade60722-3e0a-4dcf-a593-6a0b7ff207ff.png) + + + +### 推荐工具 Top 5 + +🏅 Top 1:Git + +分布式版本控制系统,代码版本管理核心工具,团队协作开发基础,因此作为程序员必备工具之首。 + +🥈 Top 2:Visual Studio Code + +轻量级跨平台代码编辑器,强大的插件生态,支持多种编程语言,2025 年依然是程序员最热编辑器。 + +🥉 Top 3:Cursor / Claude Code + +以 AI 为核心的代码编辑器,代表未来编程趋势。 + +Top 4:JetBrains IDE 系列 + +专业的集成开发环境,提供 IntelliJ IDEA、PyCharm、WebStorm 等全家桶软件,具有智能代码分析能力。 + +Top 5:Navicat / DataGrip + +数据库管理工具,能够可视化操作数据库,支持 MySQL、PostgreSQL、MongoDB 等。 + + + +## 二、AI 工具 + +整理 1600+ AI 工具,包含 AI 编辑器 Cursor、Trae、AI 生图工具即梦、可灵 AI 和大模型平台 ChatGPT、Gemini、DeepSeek,让 AI 助力工作。 + +![AI 工具](https://pic.yupi.icu/1/1768143200966-7774d9fb-7192-4c54-ba97-afdd93043624.png) + + + +### 推荐 AI 工具 + +AI 编程工具:Cursor、GitHub Copilot、Codeium、Windsurf + +AI 对话工具:ChatGPT、Claude、通义千问、DeepSeek、Kimi + +AI 绘图工具:Midjourney、Stable Diffusion、即梦、可灵 AI + +AI 写作工具:Notion AI、秘塔写作猫、火山写作 + +AI 视频工具:Runway、Pika、剪映 + + + +## 三、设计工具 + +提供从 0 到 1 的设计工具合集,产品原型设计 Axure、Draw.io,平面创意设计 Canva、稿定设计和配色工具 Coolors、Color Hunt,覆盖产品开发工作流。 + +![设计工具](https://pic.yupi.icu/1/1768143231186-58d8b53c-e381-4299-927e-d67d6b123cfb.png) + + + +### 推荐设计工具 + +原型设计:Axure、墨刀、即时设计 + +绘图工具:Draw.io、ProcessOn、亿图图示 + +平面设计:Canva、稿定设计、创客贴 + +配色工具:Coolors、Color Hunt、中国色 + + + +## 四、测试和项目管理工具 + +精选测试和项目管理工具,包含自动化测试 Selenium、API 调试 Postman、Apifox 和主流项目管理平台禅道、Jira,助力团队高效协作和交付。 + +![测试工具](https://pic.yupi.icu/1/1768143211764-bb836a41-79be-45d1-929c-b1a35bad9e36.png) + + + +### 推荐工具 + +API 测试:Postman、Apifox、JMeter + +自动化测试:Selenium、Cypress、Playwright + +项目管理:禅道、Jira、Trello、飞书项目 + +团队协作:企业微信、飞书、钉钉 + + + +## 五、运维部署 + +整合主流云平台与和运维部署工具,涵盖容器和运维 Docker、Nginx、边缘部署平台 Vercel、Cloudflare 和云服务平台阿里云、腾讯云、华为云。 + +![运维工具](https://pic.yupi.icu/1/1768143207630-9254a72f-cd90-43bd-864f-fa252a6f1361.png) + + +### 推荐工具 + +**容器技术**:Docker Desktop、Kubernetes + +**Web 服务器**:Nginx、Apache、Caddy + +**部署平台**:Vercel、Railway、Sealos、Cloudflare Pages + +**云服务**:阿里云、腾讯云、华为云、AWS + +**终端工具**:Xshell、FinalShell、iTerm2、Windows Terminal + + + +## 六、效率工具 + +除了开发相关的工具,还有一些能提升工作效率的通用工具,基本上鱼皮都用过。 + +- Postman / Apifox / JMeter:API 接口调试、自动化测试、文档生成;JMeter 提供专业压力测试和性能分析 + +- VMware Workstation / VirtualBox:虚拟机软件,多环境开发测试必备 + +- Docker Desktop:容器技术,简化应用打包、分发与运行 + +- Xshell / FinalShell:SSH 终端工具,远程服务器连接管理 + +- Mac iTerm2 / Windows Terminal:终端工具,更好的终端体验 + +- Homebrew(Mac)/ Chocolatey(Windows):包管理工具,快速安装各类软件 + +- WinSCP / FileZilla:文件传输工具,FTP/SFTP 客户端 + +- Fiddler / Charles / Wireshark:抓包调试工具 + 网络协议分析 + +- Notion / 语雀:文档知识管理平台,团队协作文档编写 + +- Typora / PicGo / mdnice:Markdown 编辑器、图床管理工具、公众号排版神器 + +- 企业微信 / 飞书:团队沟通协作平台 + +- uTools / Alfred:效率工具启动器,快速启动应用和工具 + +- Snipaste:截图贴图工具,支持贴图显示和标注 + +- Everything:文件搜索神器,秒速定位所需文件 + +- 剪切助手:跨平台剪贴板管理工具,多设备同步(https://jianqiezhushou.com) + + + + +## 如何获取这些工具? + +所有工具都可以在编程导航的工具板块找到,而且按照使用场景分类,方便查找。 + +👉 [点击获取 3000+ 程序员效率工具 codefather.cn/tool](https://codefather.cn/tool) + +如果你也有推荐的宝藏工具,欢迎主动上传,我们会定期审核,通过后将和所有人分享,一起共建这个工具箱。 + +![上传工具](https://pic.yupi.icu/1/1768143271059-9858718c-b0de-45f3-84c2-1f3d1319d127.png) + +好工具,早发现、早使用。 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/MCP 服务开发.md b/Vibe Coding 零基础教程/40 编程学习/MCP 服务开发.md new file mode 100644 index 0000000..2dfe672 --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/MCP 服务开发.md @@ -0,0 +1,279 @@ +# MCP 服务开发保姆级教程 + +> 从零开始开发 MCP 服务 + + + +你好,我是程序员鱼皮。 + +有个 AI 相关的概念特别火,叫 MCP,全称模型上下文协议(Model Context Protocol)。这是由 Anthropic 推出的一项开放标准,目标是为大型语言模型和 AI 助手提供一个统一、标准化的接口,使 AI 能够轻松操作外部工具并完成更复杂的任务。 + +这篇文章,就带大家速通 MCP,了解其核心概念,并且以我们给自己产品 [面试鸭](https://www.mianshiya.com/) 开发的面试搜题 MCP 服务为例,带大家实战 MCP 服务端和客户端的开发! + +开源指路:https://github.com/yuyuanweb/mcp-mianshiya-server + +![MCP 服务](https://pic.yupi.icu/1/1744008993525-16f07f5b-e3b4-4f1a-97dd-ea886c8d945d.png) + + + +## 一、MCP 为啥如此重要? + +以前,如果想让 AI 处理我们的数据,基本只能靠预训练数据或者上传数据,既麻烦又低效。而且,就算是很强大的 AI 模型,也会有数据隔离的问题,无法直接访问新数据。 + +现在,MCP 解决了这个问题,它突破了模型对静态知识库的依赖,使其具备更强的动态交互能力,能够像人类一样调用搜索引擎、访问本地文件、连接 API 服务,甚至直接操作第三方库。 + +更重要的是,只要大家都遵循 MCP 这套协议,AI 就能无缝连接本地数据、互联网资源、开发工具、生产力软件,甚至整个社区生态,实现真正的 "万物互联",这将极大提升 AI 的协作和工作能力,价值不可估量。 + +![MCP 架构](https://pic.yupi.icu/1/1744006127873-09bedb4a-5c7c-4cd0-9c4d-3620f319eac7.png) + + + +## 二、MCP 总体架构 + +MCP 的核心是 "客户端 - 服务器" 架构,其中 MCP 客户端主机可以连接到多个服务器。客户端主机是指希望通过 MCP 访问数据的程序,比如 Claude Desktop、IDE 或 AI 工具。 + +![MCP 架构图](https://pic.yupi.icu/1/1742979138403-f9f03e19-3537-461e-95d5-6f8a9a413c3a.jpeg) + + + +## 三、MCP 开发 + +MCP 的使用分为两种模式,STDIO 模式(本地运行)和 SSE 模式(远程服务)。 + + + +### MCP 服务端(基于 stdio 标准流) + +基于 stdio 的实现是最常见的 MCP 客户端方案,它通过标准输入输出流与 MCP 服务器进行通信。特别适用于本地部署的 MCP 服务器。 + +**1、引入依赖** + +```xml + + org.springframework.ai + spring-ai-mcp-server-spring-boot-starter + 1.0.0-M6 + +``` + +**2、配置 MCP 服务端** + +```yaml +spring: + application: + name: mcp-server + main: + web-application-type: none # 必须禁用web应用类型 + banner-mode: off # 禁用banner + ai: + mcp: + server: + stdio: true # 启用stdio模式 + name: mcp-server # 服务器名称 + version: 0.0.1 # 服务器版本 +``` + +**3、实现 MCP 工具** + +`@Tool` 是 Spring AI MCP 框架中用于快速暴露业务能力为 AI 工具的核心注解。下面是一段示例代码: + +```java +/** + * 根据搜索词搜索面试鸭面试题目 + */ +@Tool(description = "根据搜索词搜索面试鸭面试题目") +public String callMianshiya(String searchText) { + // 执行从面试鸭数据库中搜索题目的逻辑 + System.out.println("用户要搜索:" + searchText); +} +``` + +**4、注册 MCP 工具** + +```java +@Bean +public ToolCallbackProvider serverTools(MianshiyaService mianshiyaService) { + return MethodToolCallbackProvider.builder() + .toolObjects(mianshiyaService) + .build(); +} +``` + +**5、运行服务端** + +```bash +mvn clean package -DskipTests +``` + + + +### MCP 客户端(基于 stdio 标准流) + +**1、引入依赖** + +```xml + + org.springframework.ai + spring-ai-mcp-client-spring-boot-starter + 1.0.0-M6 + +``` + +**2、配置 MCP 服务器** + +```yaml +spring: + ai: + mcp: + client: + stdio: + servers-configuration: classpath:/mcp-servers-config.json +``` + +其中 `mcp-servers-config.json` 的配置如下: + +```json +{ + "mcpServers": { + "mianshiyaServer": { + "command": "java", + "args": [ + "-Dspring.ai.mcp.server.stdio=true", + "-Dspring.main.web-application-type=none", + "-Dlogging.pattern.console=", + "-jar", + "/yourPath/mcp-server-0.0.1-SNAPSHOT.jar" + ] + } + } +} +``` + +**3、初始化聊天客户端** + +```java +@Bean +public ChatClient initChatClient(ChatClient.Builder chatClientBuilder, + ToolCallbackProvider mcpTools) { + return chatClientBuilder.defaultTools(mcpTools).build(); +} +``` + +**4、接口调用** + +```java +@PostMapping(value = "/ai/answer") +public String generate(@RequestBody AskRequest request) { + return chatClient.prompt() + .user(request.getContent()) + .call() + .content(); +} +``` + + + +### MCP 服务端(基于 SSE) + +除了基于 stdio 的实现外,Spring AI 还提供了基于 Server-Sent Events (SSE) 的 MCP 方案。相较于 stdio 方式,SSE 更适用于远程部署的 MCP 服务器。 + +**1、引入依赖** + +```xml + + org.springframework.ai + spring-ai-mcp-server-webflux-spring-boot-starter + 1.0.0-M6 + +``` + +**2、配置 MCP 服务端** + +```yaml +server: + port: 8090 +spring: + ai: + mcp: + server: + name: mcp-server + version: 0.0.1 +``` + +**3、运行服务端** + +```bash +mvn clean package -DskipTests +java -jar target/mcp-server-0.0.1-SNAPSHOT.jar +``` + + + +## 四、软件使用 MCP + +除了利用程序去调用 MCP 服务外,MCP 服务端还支持任意支持 MCP 协议的智能体助手,比如 Claude、Cursor 以及 Cherry Studio 等,都可以快速接入。 + +以 Cherry Studio 为例: + +1、打开 Cherry Studio 的 "设置",点击 "MCP 服务器" + +![Cherry Studio 设置](https://pic.yupi.icu/1/1743063238632-2156707f-cfa4-4493-bf3e-68279f3972b9.png) + +2、点击 "编辑 JSON",将 MCP 配置添加到配置文件中 + +3、在 "设置 => 模型服务" 里选择一个模型,勾选工具函数调用功能 + +4、进入聊天页面,在输入框下面勾选开启 MCP 服务 + +![开启 MCP](https://pic.yupi.icu/1/1743063248363-b3a09c97-1bb9-4f97-ab0a-2cee5a641c83.png) + +配置完成,尝试搜索下面试题目,效果不戳! + +![搜索效果](https://pic.yupi.icu/1/1743063251268-145a5d00-4495-49e8-91db-f5536efca436.png) + +甚至还进行面经解析,返回多个面试题目与答案的链接! + +![面经解析](https://pic.yupi.icu/1/1743143537320-1fca3955-3128-42a6-bd32-0cace3bab2ab.png) + +当然这个功能我们 [面试鸭官方](https://www.mianshiya.com/) 也实现了,帮助大家面试复盘: + +![面试鸭面经解析](https://pic.yupi.icu/1/1744008304237-fdfb2b99-9038-43de-94ed-ca0760afdf40.png) + + + +## 五、上传 MCP 服务 + +和开发一个 APP 一样,我们也可以把做好的 MCP 服务分享到第三方 MCP 服务平台。比如 MCP.so,可以理解为 MCP 服务的应用市场。 + +![MCP.so](https://pic.yupi.icu/1/1744008425870-c5b7958e-98cc-4a14-a4af-cba3af01fcde.png) + +直接点击头像左侧的提交按钮,然后填写 MCP 服务的项目地址、以及服务器配置实例,点击提交即可。 + +![提交 MCP](https://pic.yupi.icu/1/1744008547763-70effe90-c0aa-4683-bbc8-060639266529.png) + +提交完成后就可以在平台搜索到了: + +![搜索 MCP](https://pic.yupi.icu/1/1744008638998-003207ee-8394-4ded-9ea6-83dbf189477c.png) + + + +--- + + + +OK 就分享到这里,学会的话记得点赞收藏哦。也欢迎大家在评论区交流你对 MCP 的看法和理解~ + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/40 编程学习/团队研发规范.md b/Vibe Coding 零基础教程/40 编程学习/团队研发规范.md new file mode 100644 index 0000000..8fad1e7 --- /dev/null +++ b/Vibe Coding 零基础教程/40 编程学习/团队研发规范.md @@ -0,0 +1,177 @@ +# 团队研发规范 + +> 企业级研发规范实践指南 + + + +你好,我是程序员鱼皮。 + +前几天我分享了自己创业一周年的复盘总结,其中提到了一点:随着团队的扩大,我们会更注重研发规范和技术沉淀。 + +有程序员朋友就问了:啥是研发规范? + +还有朋友表示:鱼皮别拿咱当外人,把你们公司的研发规范发来看看? + +![研发规范](https://pic.yupi.icu/1/image-20240419140208921.png) + +可以,必须安排! + +这篇文章就给大家简单分享下我们公司的研发规范,不过在开始前必须要明确 2 点: + +1. 每个团队都应该根据情况定制自己的研发规范,别人的规范仅供参考,未必最适合你们团队。 +2. 篇幅有限,本文仅分享一些我认为很重要的规范,并且移除了我们自己的敏感信息。 + +⭐️ 本文对应视频版:https://bilibili.com/video/BV1fi421C78M + + + +## 一、项目整体研发流程 + +1)团队共同确认目标和规划 + +开会讨论,产出目标和规划文档 + +2)产品调研和需求分析 + +产出调研报告和需求分析文档 + +3)需求评审 + +开需求评审会,明确要做的需求和工作,评估工作量并明确工作时间节点。 + +4)方案设计 + +产出方案设计文档,比如数据库表设计、页面设计、接口设计等。 + +5)研发 + +包括各自开发、单元测试、前后端联调等 + +6)测试和验收 + +包括研发自测、产品验收、组内验收等 + +7)代码提交 + +提交可上线的代码,需要由负责人审查,通过后可合并 + +8)部署上线 + +将代码发布到服务器上,组内进行上线通知并更新上线文档,上线后需要自行验证 + +9)产品迭代 + +持续收集用户对新功能的反馈、并进行数据分析,从而验证改动效果,便于下一轮的更新迭代。 + + + +## 二、开发规范 + + +### 开发前注意事项 + +1)确保自己充分理解了业务和需求,需要先进行整体的方案设计;尤其是对于重要需求和核心业务,必须先跟组内同学核对方案并通过后,才能下手开发,避免重复工作。 + +2)先熟悉项目再开发,建议阅读项目文档、项目代码、接口文档、前端组件文档等。 + +3)慎重引入新的依赖或类库、或者升级版本,重大依赖变更需要和组内其他成员确认。 + +4)熟悉团队已实现的功能和代码,尽量复用,避免重复开发。 + +5)熟悉团队内部的研发规范,并在 IDE 中进行相应的配置,比如前端配置 ESLint、Prettier 等代码规范插件。 + + + +### 开发中注意事项 + +1)开发新功能时,确保从项目仓库拉取 **最新主分支** 的代码。 + +2)每个功能都要新建自己的分支进行开发,**千万不要直接修改主分支的代码**!注意分支名称要使用英文、足够语义化,不要和其他人的混淆。 + +3)开发时,尽量复用现有的功能、模块、类、方法、对象代码。有现成的代码,就不要再重复编写。 + +4)开发时,遵循团队内部的研发规范,尽量参考现有项目代码的写法,尤其是不要使用和原项目不一致的格式、命名、写法,避免特立独行。 + +5)开发过程中,有任何不明确的地方,不要凭空猜测,及时去联系项目的其他成员或负责人确认。 + +6)开发过程中,每隔一段时间(比如 1 - 3 天)可以使用 `git pull` 同步一下最新的主分支代码,防止合并代码冲突。 + +7)开发过程中,注意整体时间进度的把控,先完成再完美,有风险时及时反馈。 + +8)开发时,需要格外注意对异常情况的捕获和处理。 + +9)每个分支尽量保证纯净,尽量减少每次开发和提交时改动的代码量。建议每次开分支只改一个功能、Bug 或模块,不要把多个不相关的功能写在一起,并且非必要不修改。 + +10)完成部分功能开发后,一定要自测!自测时,可以 Mock 假数据。**注意一定不要在线上测试、一定不要影响线上数据!** + + + +## 三、代码提交规范 + +1)只有通过测试和产品验收的代码,才能够发起合并到主分支的 PR 请求。在这之前可以提交到自己的分支。 + +2)发起合并到主分支的 PR 前,**一定要完整阅读 3 遍自己的代码**,避免不规范的写法和无意义的改动。 + +3)每次合并尽量只专注于一个功能或改动,避免多个功能耦合在一起合并,提高审查效率并降低改动风险。 + +4)每次提交时,需要在 commit 信息中提供代码改动说明,还可以通过关联需求文档、测试用例、方案文档、效果截图等方式进行补充说明。 + +commit 信息可参考[《约定式提交》文档](https://www.conventionalcommits.org/zh-hans/v1.0.0/),但不做强制要求。 + +5)除非特殊情况,否则所有的代码必须经过至少一位项目负责人 Code Review 审核通过后,才能合并;并且只有合并到主分支的代码才允许发布上线。 + + + +## 四、上线规范 + + +### 上线前注意事项 + +1)上线前,除了严格验证功能特性能否正常运行、并符合需求外,还要格外关注程序的: + +- 健壮性。比如给用户友好的错误提示、输入校验。 +- 安全性。防止越权操作、输入校验。 +- 稳定性。尽量保证调用 100% 成功,如果有几率失败,要考虑重试或容错策略。 + +2)除非特殊情况,只有经过产品验证的功能、通过代码审核的主分支代码才允许发布上线。 + +3)除非特殊情况,尽量在工作日上线(建议周二 ~ 周四),保证上线后出了问题时能够及时修复。 + + + +### 上线后注意事项 + +1)上线后,一定要再次进行完整流程的测试,尤其要重点关注权限相关的功能测试。 + +2)上线后,一定要在群内及时同步上线信息,周知相关的成员,如果遇到问题第一时间反馈。 + +3)首次上线后,需要即时配置监控告警。 + +4)上线验证通过、并经过内部群成员确认后,可以在外部用户群发布版本更新公告。 + +5)上线后,即时更新项目的更新记录文档。 + +6)注意,上线不是终点。上线后的一段时间(至少一周内),一定要持续观察自己负责的功能是否正常运行、持续接受用户反馈、通过数据分析来观察新功能的效果,期间有任何问题都需要即时修复处理,并且准备好下一期的改进迭代。 + + + +## 写在最后 + +以上就是我们公司的研发规范,希望对大家有帮助。 + +再次强调,每个团队都应该根据自己的情况定制研发规范,这份规范仅供参考。 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/00 产品变现导读.md b/Vibe Coding 零基础教程/50 产品变现/00 产品变现导读.md new file mode 100644 index 0000000..4e9b627 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/00 产品变现导读.md @@ -0,0 +1,125 @@ +# 产品变现导读 + +> 从想法到收益,让你的产品真正产生价值 + + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +如果你已经学完了前面的内容,并且成功做出了一些项目,那么恭喜,你已经具备了把想法变成产品的能力。 + +但是你现在心里可能会有这样的疑问: + +- 做出来的东西挺好的,但怎么才能让它产生价值呢? +- 我想让更多人用我的产品,但不知道从哪里开始...... +- 看着别人的产品都能赚钱,我也想试试,但感觉无从下手。 + +这些想法都很正常,这个板块就是专门为了解决这些问题而设计的。 + + + +## 一、为什么要学产品变现? + +很多同学做完项目后,就把代码往 GitHub 一扔,然后继续学新技术、做新项目。结果就是:做了很多项目,但没有一个真正产生价值。 + +**变现,是检验产品价值的重要标准。** + +更重要的是,在 Vibe Coding 时代,做产品的门槛已经低到了前所未有的程度。你不需要精通所有商业知识,只需要: + +1. 知道自己的产品能解决什么问题 +2. 了解基本的产品运营方法 +3. 会用合适的方式让产品产生价值 + +这三点,通过这个板块的学习,你都能掌握。 + + + +## 二、这个板块会讲什么? + +这个板块的核心内容包括 **产品开发的完整流程** 和 **产品变现的实战经验**。 + +### 主线内容(建议按顺序学习) + +首先,我会从产品变现的思维开始,帮你理解为什么要做产品、如何思考产品的价值。这是做好产品的基础,强烈建议先学习这部分。 + +然后,我会带你了解产品开发的完整流程,包括需求分析、文档沉淀、技术选型、架构设计、研发流程等。这些都是我在腾讯和创业过程中积累的实战经验。 + +接着是产品变现的核心内容,包括盈利模式设计、付费策略设计等,让你了解如何让产品真正产生收益。 + +最后是产品推广的重要一环,SEO 搜索引擎优化,教你如何让更多人发现你的产品。 + + + +### 支线内容(可选择性学习) + +除了主线内容外,我还准备了一些实战经验分享: + +- 网站数据保护实践:如何防止网站被恶意爬虫攻击 +- 系统监控告警实践:如何及时发现和处理系统问题 +- 网站数据分析实战:如何通过数据分析优化产品 +- 我的自媒体起号经验:如何从 0 开始做自媒体 +- 我的自媒体涨粉运营之路:我从 0 到 200 万粉的真实经历 + +这些内容都是我在实际做产品过程中的真实经验,可以根据需要选择性学习。 + + + +## 三、如何使用这个板块? + +这个板块的文章分为主线和支线两部分,你可以根据自己的情况灵活选择。 + +如果你是完全新手,我建议先按顺序学习主线内容,了解产品开发和变现的基本方法。然后根据自己的需求,选择性学习支线内容。 + +如果你对某个领域特别感兴趣,也可以直接跳到对应的章节。比如你想了解如何防止网站被攻击,可以直接看网站数据保护实践;你想学习自媒体运营,可以直接看自媒体相关的内容。每篇文章都是相对独立的,不看前面的内容也能理解。 + +如果你已经有了自己的产品,想要让它产生价值,可以重点学习盈利模式设计、付费策略设计、SEO 优化等内容。 + +对于想深入学习的同学,建议把主线和支线内容都学完,这样能对产品变现有一个全面的认识。 + + + +## 四、你能收获什么? + +通过这个板块的学习和实践,你将能够: + +1. 建立产品变现的思维模式 +2. 掌握产品开发的完整流程 +3. 了解多种产品盈利模式 +4. 学会设计合理的付费策略 +5. 掌握产品推广的基本方法 +6. 积累实战经验,避免常见的坑 + +学完之后你会发现:**原来让产品产生价值可以这么简单!** + + + +## 写在最后 + +我知道,看到 “产品变现” 这几个字,很多同学会觉得有点功利。但是在 Vibe Coding 的帮助下,做产品变现真的没有你想象的那么难。 + +还记得我在《基础必读》中说过的吗?今天,是人类历史上学习编程最容易的时刻。而做产品变现,也是如此。 + +你不需要成为商业专家,不需要有很多资源,你只需要: + +- 有一个能解决问题的产品 +- 能够清楚地表达产品的价值 +- 愿意花时间去尝试和优化 + +这 3 点,你都已经具备了。 + +下面让我们一起开始这段激动人心的产品变现之旅吧! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/01 为什么要做产品变现?.md b/Vibe Coding 零基础教程/50 产品变现/01 为什么要做产品变现?.md new file mode 100644 index 0000000..eb69027 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/01 为什么要做产品变现?.md @@ -0,0 +1,181 @@ +# 为什么要做产品变现? + +> 想清楚为什么做,才能做得更好 + + + +大家好,我是鱼皮。在做一个产品前,我们首先要问清楚自己:**为什么要做它?** + +然后才是怎么做、怎么做的更好。 + +这篇文章,我会以自己做 AI 产品的经历为例,给大家分享做产品变现前的思考方法。希望能帮助你在开始做产品前,想清楚自己的目标和方向。 + + + +## 利 + +为什么要做自己的 AI 产品,原因很简单,一个字:**利** 。 + +利即收益,但利不等同于金钱,而是可以体现在许多不同的层面,包括物质、精神、情感等等。像我早期做了 2 年的免费编程知识分享,那个时候是完全没有在乎 “物质” 的利的,更多的是因为兴趣、因为帮助到粉丝们的正反馈,也就是精神和情感上的利。 + +大家也经常听到一个词 **利他** 。为什么要利他?本质上也是利己。一方面获得了帮助他人的满足感 —— 精神和情感上的利,另一方面也能给自己带来相应的物质上的利,一举两得。所以这是我个人也比较推崇的做法。 + +那么我就开始思考:我做 AI 产品有哪些不同层面的利? + + + +### 物质收益 + +开公司,做产品,肯定是希望能赚米的。 + +为什么做 AI 产品呢?不用说大家也知道,AI 现在是一个 “台风口”,比移动互联网更大的风口。 + +可惜刚开始我还没意识到这点,那会儿我还在腾讯打工,每天也没多少时间去关注 AI,以为又是一个自媒体带起来的噱头。但等到 2 - 3 月的时候,我就意识到不对劲了,因为不单单是国内外的大厂有动作,我身边 “不学无术” 的同事们,竟然也开始聊起 AI、聊起 GPT 了?!再加上自媒体平台有越来越多 AI 相关的爆款视频、每天都会出现意想不到的新动向,我才意识到:握草,机会来了啊! + +所以实不相瞒,我的离职和 AI 有一定的原因,虽然早就计划好要离职了,但 AI 可以说是一脚把我从悬崖边上踹了下去。 + +总之,我很看好 AI 的发展,而 **走在时代的前面** 的人必然是能得到更大的物质收益的,所以我决定必须要 **入局 AI** ! + + + +### 精神收益 + +除了物质收益外,我个人会更注重精神和情感上的收益。因为我自己一直是崇尚自由的性格,无论是之前做分享、还是后面做知识付费,这些都是我热爱的领域。我不希望为了物质而追求物质,让自己受到束缚。 + +而且就我观察和我同期做编程分享的账号来看,如果你本身并不热爱一件事,因为看到别人赚米而去模仿,可能也会有点儿蛋糕渣,但是做不大的。 + +而入局 AI 这件事、不断接触和学习前沿知识本身,我就觉得 “泰裤辣”!我自己本身非常爱尝试、爱分享,而且说实在的,目前我积累到的传统的前后端编程技术栈和开发经验已经完全足够我做出大多数产品了,我也非常想在一个新的领域争取自己的一席之地。而 AI,对我来说就是一个神秘陌生的全新领域,在学习实践它的过程中,我会感觉非常爽 —— 对我来说,这便是精神收益了。 + +想清楚自己的利,就可以开始进一步的思考了。 + + + +## 一问:为什么要做产品? + +那怎么利用 AI 获得利呢?答案就在上文:**走在时代的前面** 。 + +只要你紧跟时代,走在别人前面,看到了别人看不到的机会、得到了别人得不到的信息,那么就可以有收益。 + +举些经典例子: + +1. 做自媒体,分享 AI 生成的文本和图像,给不了解 AI 的人开开眼界 +2. 做培训,分享 AI 系列教程,带不会玩 AI 的人认识 AI +3. 做产品,接入国内外的 AI 模型,让更多人用上 AI +4. 搞科研,了解国内外最新的技术,写出更优秀的论文 + + + +那么这么多种方式,我为什么选择 **做产品** 呢? + +首先从难度来看,做自媒体和培训是绝大多数人都能做的、花点时间就行,而搞科研咱又不擅长,所以做产品是比较合适的。 + +产品的定义又有很多种,可能是一系列课、可能是一个应用、也可能是某种服务。而我选择把鱼聪明 AI 做成一个网站,主要是由于: + +1. 自己在做网站方面的经验是比较丰富的,开发个网站很容易 +2. 网站是一个使用成本很低的信息载体,面向的受众更广 +3. 网站可以接入多种不同的技术和应用,有无限的潜能 + + + +从利来看,网站面向的用户更多、可以更灵活的开发应用,自然就有了更多机会。而持续打磨一个 “可能性无限” 的作品,也会让我感觉很爽,做网站就像养小孩一样,看着自己的孩子往前奔跑,会有很大的成就感。 + + + +## 二问:真的要做么? + +虽然上面说了很多,但也只是把做 AI 产品纳入了 **可选** 计划列表,即 “可以做”。 + +但是究竟要不要做,还要和自己的其他计划放在一起进行对比分析,通过 **权衡性价比** 来确定。 + +这点时间有限的人来说,尤其重要。理想情况下,肯定是 “我全都要”,能获利的东西,只要我技术 OK,我都去做。但现实往往是,能同时做 2 - 3 件事,就已经很累了。所以必须有所取舍。 + +就像学编程的同学,在学习过程中肯定会遇到很多的 “机会”,进实验室、竞赛、实习、兼职等等,也会有很多的诱惑。但是要想清楚自己的目标,问一问自己:现在这个时候,我做这件事,真的是性价比最高的选择么? + +回归到我自己身上,每天给自己安排 2 - 4 小时在产品探索上、还可以投入 2 名团队同学来协助开发,换算下来完成这款 AI 产品是完全可以接受的;得到的利也是无法估量的(毕竟不尝试一下谁也不知道)。所以不妨就 try 1 try~ + + + +## 三问:同类产品多,还做么? + +在我要做 AI 产品前,很多同学都觉得现在网上已经有非常多同类的 “套壳” 产品了,但为什么我还要做呢? + +1)机会仍然很多。 + +走出自己的圈子,通过调研我发现,真正了解和能用 AI 的还是极少数人,很多同学可能只是在自媒体上听说过 AI 相关的内容,但只是惊鸿一瞥,大多数人还是 “圈外人”。 + + + +2)“套壳” 就没有意义了么? + +所谓的套壳,只是因为有前人给你铺好了路,这些是前人馈赠的资源,我们理应接受。但是并不是说套壳就不好、套壳就不能做,而是我们不能仅满足于套壳,仍然可以在此基础上增加自己的创新点,做一些自己的事情。 + +就跟做项目一样,你可以在完成了网上项目的基础上,考虑增加自己的扩展点,把它变成你自己独特的东西。 + +另外,很多程序员做技术久了,很容易陷进去,做什么东西都想着技术要多牛逼多牛逼,却忽视了技术本身是为了业务服务的、产品本身是给用户来用的。所以哪怕是同一类产品,也有用户体验、交互流程等很多可以优化创新的机会。 + + + +3)资源为王 + +现在这个环境,绝大多数的技术已经不再是难点了、产品创新也不再是难点了。说得现实一点,只要你有资源和一定的商业嗅觉,看到其他人的创新点,立刻就能有样学样地照搬过来,不是么? + +在这种情况下,如果我有一定的前期流量,就能更轻松地度过产品的冷启动阶段,再多用一些,就能脱颖而出。 + + + +综合上面这些考虑,我基本确定了,是要做一款属于自己的 AI 产品了。但是在动手前,还要做一件事 —— 做好最坏的打算。 + + + +## 做好最坏的打算 + +这是我一贯的行事风格,在决定做一件事前,先给自己留条后路。 + +那做 AI 产品这件事,我最坏的情况是什么? + +比如:赚不到米、浪费时间、搞心态、浪费了一些流量。 + +但是,往好处想,即使失败了: + +1. 我总不会破产 +2. 我的这套系统是可以留下来的 +3. 我可以把这段经历和经验作为专栏分享给别人 +4. 积累一段失败经验 + + + +用一段时间来试错,我是完全可以接受的。So,just do it! + + + +--- + + + +## 写在最后 + +以上就是我在做产品前的思考过程。无论你是想用 Vibe Coding 做个人项目,还是想做一款能产生价值的产品,都建议先想清楚这几个问题: + +1. 为什么要做这个产品?(利益分析) +2. 真的要做吗?(权衡性价比) +3. 有没有同类产品?还做吗?(竞争分析) +4. 最坏的情况是什么?(风险评估) + +想清楚这些问题后,你会发现自己的目标更明确,做起来也更有动力。 + +在 Vibe Coding 时代,做产品的门槛已经很低了。只要你有想法、愿意尝试,就一定能做出有价值的东西。 + +加油,期待看到你的产品!💪 + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/02 需求分析和产品规划.md b/Vibe Coding 零基础教程/50 产品变现/02 需求分析和产品规划.md new file mode 100644 index 0000000..14ef6ce --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/02 需求分析和产品规划.md @@ -0,0 +1,175 @@ +# 需求分析和产品规划 + +> 想清楚要做什么,才能做得更好 + + + +大家好,我是鱼皮。在做任何产品前,我们首先必须要做的一件事是 **需求分析**。 + +何为需求分析?简单来说,就是分析和明确用户的需求。 + +那为什么要做需求分析?怎么做好需求分析?有没有什么注意事项呢? + +这篇文章,我会结合自己做产品的经验,带大家了解需求分析的方法和技巧。无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,这些方法都能帮到你。 + + + +## 为什么要做需求分析? + +我给大家举一个自己的亲身经历,有次某个多年未见的好哥们来上海找我玩,因为关系很好嘛,我想着请他吃一顿海鲜自助餐,直接就预定好了。结果呢,等我带他到海鲜店的时候,他跟我说:哥们海鲜过敏啊。。。 + +结果就很尴尬,白白浪费了预定金和时间。这便是没有进行需求分析的结果。 + +在我们开发项目、做产品前也是同样的道理,如果你只凭自己的一时兴起、或者主观推测去做一些事情,而忽略了用户的真实需求,就有可能花了大量的人力物力,结果做出了一款用户完全不需要的产品。 + +像我早期做编程知识分享时,就吃了没有做需求分析的亏,凭着一腔热血更新了很多自以为有用的视频,也没有什么点赞量。后来再看,不过是自嗨而已。 + +所以,需求分析是至关重要的。可以把它想象成一座桥梁,连接我们的产品和用户的桥梁,能够帮我们更好地通往用户的心房,明确我们要做的事情。 + +> 注意,需求分析不是产品经理和老板才要做的!对于程序员来说,需求分析同样至关重要,这决定了你之后的开发工作到底有没有意义,千万不要做个只会听命令敲代码的 “机器人”。 + + + +## 需求分析都要做什么? + +关于需求分析,网上有很多的方法论,我对这些方法进行了归纳总结,从 3 个方面讲给大家。 + + + +### 三个方面 + +第一个方面是 **从自己出发** ,我给它取名为 “free analysis”(自由分析)。做产品本来就应该是一件很有趣的事情,哪来那么多的条条框框,自己有什么想法、想做什么,就先尽可能多地自由记录下来。 + +我在决定做鱼聪明 AI 时,就已经大致想好了要做哪些功能,比如大家都有的 AI 对话、AI 绘画、AI Mask、AI 导航、AI 写书等,这一步不需要真的去做 “分析”,只需要尽情想象、发散思维即可。 + +第二个方面是 **从用户出发** 。你如果只是为了学习、自己做着玩,那么只做第一个方面的自由分析,也是合理的。但如果你想做出一款吸引人的、有更多人用的线上产品,肯定是要回归用户、以用户为核心。 + +一句话:确认 **用户需要什么、有什么痛点** ,以此来筛选或改进我们要做的功能,避免自嗨。 + +有很多的方法,比如常见的问卷调查、和用户交流、开会讨论等等。对我们创业小团队来说,我们本身就是用户,所以我们做需求分析时,首先就是大家一起开会讨论,每个人思考一下 “自己会不会用到这个功能”。如果某个功能我们自己都觉得不会用,那么铁定不去做;而如果某个功能大家都觉得 “握草,这个牛” ,那么这可能是我们的核心亮点功能。 + +第三个方面是 **从竞品出发** ,也就是所谓的竞品分析了。在你还不明确要做什么功能、没有想法的时候,去体验下同类的产品,相信你会多很多想法。 + +很多学编程的同学经常问:怎么扩展项目?答案就是:去看同类项目有什么功能,给你的项目也加上即可。 + +不过有一点要注意,你的竞品也未必在某个功能上做到了极致,在体验竞品时,可以记录下自己真实的使用体验,取其精华去其糟粕,就有超越他们的可能性。 + + + +### 明确需求 + +通过以上 3 个方面的思考和实践,我们基本可以确认要做的核心功能了(类比为你写作文时写好了大纲)。 + +接下来就要把需求进一步拆解和细化,尽量把每个小功能点、以及具体要做什么都明确好(类比为你要根据大纲填充内容)。 + +比如我们鱼聪明 AI 要做的核心功能是 AI 对话,可以拆解为: + +1. 创建 AI 对话 +2. 查看我的 AI 对话列表 +3. 查看对话信息 +4. 发送对话消息 +5. AI 智能回答 +6. 查看对话消息记录 +7. 消息工具栏 + +还可以再把某些功能进一步拆分,比如消息工具栏又分为:复制消息、语音朗读、下载消息等等。 + + + +### 优先级编排 + +当我们细化需求后,可能会惊讶地发现:竟然有那么多要做的事情! + +这个时候呢,有些同学可能就打算放弃了:这么麻烦,不做了不做了! + +别慌,任何系统不可能一步到位,我们要做的是给需求编排好优先级,决定先做哪个、后做哪个,然后一步步去实现。 + +那么怎么划分优先级呢? + +比较常见的方法就是基于需求的重要性、紧急程度、影响范围、实施复杂度等因素,把需求分为 P0 - P3 这 4 个级别。 + +- P0:优先级最高的需求,必须有。没有这个功能网站就不能上线。比如鱼聪明 AI 的对话和内容审核功能。 +- P1:优先要做的需求,最好有。一般是指在初期并不紧急,但后续必须要做的亮眼功能。比如鱼聪明 AI 的分享、以图生图功能。 +- P2:优先级适中的需求,可以有。一般是指可以提高用户体验、带来部分价值的需求,时间资源允许的情况下可以做。比如鱼聪明 AI 的助手高级配置功能。 +- P3:优先级最低的需求,可有可无。要么就是带来的价值较低,要么就是实现复杂度较高,可以等团队有人摸鱼的时候,再去做。比如鱼聪明 AI 的。。。呃我们貌似还没有 P3 的需求,没人能在鱼皮手下摸鱼(🐶 开个玩笑) ! + +这么划分优先级后,大家就优先去做 P0 就好了,P0 做完先上线一版,快速找用户验证下需求是否真的合理、能带来价值,再进行后续的开发和迭代。 + + + +### 需求管理 + +哪怕是在初期需求不多的时候,也是需要记录和管理需求的。而不是把上面所有的信息存到你的脑海中,不然就会出现 “唉,我当时为啥要做这个功能?” 的情况。 + +那么如何进行需求管理呢? + +最简单的方式就是用文档来记录,不用把这件事想的很复杂,就像你记录今天自己要吃什么一样,用一个列表写下来就好了。 + +推荐使用语雀、飞书等在线知识库网站,而不是本地记录,这样能够和团队的同学即时同步消息、协同编辑。 + +相对正规一点,可以使用表格来搞一个需求排期表,记录下每个功能、模块、详情、优先级等信息 + +![](https://pic.yupi.icu/1/image-20230704115312375.png) + +还可以使用 XMind 等思维导图工具,对需求进行一个层级的划分,不仅团队协作时会更清晰,做 PPT 拉融资的时候也会更好看一些。 + +再正规一点的话,可以使用 Jira、Tapd、Teambition 等专业的需求(项目)管理系统,可以帮助管理更复杂、多依赖的需求。 + +注意,需求管理是一件持续要做的事情。而且并不是说所有的需求和功能你都能立刻想到,但是一旦有任何的想法和灵感,千万不要错过,要立即掏出手机记录下来! + + + +## 别让伪需求害了你! + +最后但是最重要的一点,别让伪需求害了你! + +这句话不仅是说给产品经理和老板听的,更是给所有要实际做需求的同学(比如程序员、测试)重点强调的。 + +如果把完整的系统功能比喻成拼图,伪需求就像是一块残缺的不规则图块,看起来好像是有点儿用的,但实际上不能帮助我们完成拼图、浪费我们的时间。 + +那么,我们如何避免伪需求呢? + +除了上面说的需求分析、用户反馈、编排优先级、需求管理外,我们还应该让团队尽可能多的同学参与进来,多交流和验证、反复评估,还可以用数据分析等手段科学验证。 + +我们每位同学作为团队的一员,也都应该主动申请介入需求评审,掌握更多的信息,帮助团队做出更正确的决策。 + +有些时候,我们作为企业大团队的一名小开发,可能无法过多地参与需求的分析和项目的决策。但是如果发现需求是不合理的,也应该尽早提出和反馈,而不是傻傻地费时费力做了个没用的需求(甚至是没用的系统)。 + +我们的鱼聪明 AI,其实也有伪需求,也是因为我的一个决策失误吧,做出了一个几乎没有用的功能。不过后面我们通过某种手段发现了这点并且对系统做了优化,当然,这是后话,在以后的章节中会给大家分享。 + +所以,开发同学们再遇到伪需求时,希望能理直气壮地跟产品说:这个需求不合理!这个需求我不做! + + + +--- + + + +## 写在最后 + +需求分析是做好产品的第一步,也是最重要的一步。无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,都要重视需求分析。 + +记住这几个关键点: + +1. 需求分析要从自己、用户、竞品三个方面出发 +2. 要把需求细化为具体的功能点 +3. 要给需求编排好优先级,先做核心功能 +4. 要持续管理和优化需求 +5. 要警惕伪需求,多交流多验证 + +在 Vibe Coding 时代,实现需求的成本已经很低了。但是,想清楚要做什么,仍然是最重要的。只有方向对了,才能事半功倍。 + +加油,期待看到你做出有价值的产品!💪 + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/03 文档沉淀和知识管理.md b/Vibe Coding 零基础教程/50 产品变现/03 文档沉淀和知识管理.md new file mode 100644 index 0000000..17ec0e1 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/03 文档沉淀和知识管理.md @@ -0,0 +1,356 @@ +# 文档沉淀和知识管理 + +> 记录下来,才能走得更远 + + + +大家好,我是鱼皮。 + +先分享一个我的小故事。我大二的时候跟队做过一个项目,随着个人给项目编写的代码越来越多,开始慢慢主导起这个项目,直到最后整个项目的逻辑我都烂熟于心,团队同学遇到问题都会来问我。 + +但是,由于个人时间原因,后来我退队不干了,把代码给其他同学认真讲了一遍。 + +结果你猜怎么着? + +在我退队后,隔三差五就会有队内的同学来问我关于这个项目的问题。更离谱的是,一个月后,这个项目倒闭了! + +当我后来问其他同学为啥项目会倒闭的时候,人家没好气的说:你这家伙不写文档,项目好多地方都看不懂,没法做下去了。 + +这时我才意识到:自己一直专注于给项目写代码,但是却忘了把自己的经验、项目的信息记录下来,同步给其他同学,导致我负责的部分基本没人能接手。 + +唉,那会儿还是经验太少了。在那之后,我做任何项目的时候,都会写文档。哪怕不为别人,起码保证自己能看懂自己之前写的项目。 + +这也是本文要分享的核心 —— **文档沉淀**。无论是个人还是团队,无论是在学习、工作、还是项目中,无论对程序员、产品经理、还是项目管理者,做好文档沉淀都是至关重要的。 + +下面我会给大家依次分享:为什么要写文档?怎么写出好文档?怎么管理好文档? + + + +## 什么是文档? + +文档是记录、储存和传递信息的载体。 + +我们的项目需求表、系统的设计方案、某某调研报告、某次会议记录、解决过的 Bug,甚至是学某个视频教程时随手记录的笔记,都是文档。 + + + +## 为什么要写文档? + +从文档的定义出发,我们就已经能意识到文档的基本作用了。 + +- 记录信息:收集临时的信息 +- 储存信息:防止信息丢失和遗忘 +- 传递信息:把信息和他人共享 + + + +我们的人脑容量有限,不可能记忆所有信息,而写文档,本质上就是在打造属于我们的第二大脑。 + +像我的脑容量是比较小的,所以我有随手记录、随手写文档的习惯,有的时候走在路上有个好点子都立刻掏出手机记下来。 + + + +### 文档对项目的价值 + +而对于做项目(尤其是企业大项目),文档又有更进一步的价值。 + +在项目初期,文档具有指导整个项目顺利推进的意义。如果将做项目比作盖摩天大楼,那么文档就是大楼的蓝图。没有蓝图,建筑工人只能盲目工作,能不能完成都很难说,更别提保证大楼的质量和安全了。 + +同样,在项目初期不写文档、没有系统的方案和执行计划,团队成员在开发过程中就会迷失方向,会经常出现延期、完不成、返工的情况。 + +> 看过我直播的同学应该知道,每个项目开始,我都会在文档上编写需求分析、方案设计、技术选型等内容。在做具体功能前,也是先在文档上写好设计实现方案,然后才去写代码。虽然写文档的过程会多花一点时间,但是会大幅降低整个项目的工时。 + + + +在项目中期,文档的意义是 **持续** 记录和追踪项目的状态,让信息在团队间公开透明,从而做出正确的选择、即时规避风险。 + +打个比方,把做项目当成跑马拉松,文档就是沿途的路标,会告诉大家跑到哪里了、接下来怎么跑;而如果前方有危险,路标也会给大家警示。如果没有文档,大家很快就跑散了,各自为战;一个人遭遇了风险,可能会拖垮整个团队。 + + + +在项目后期,文档的意义是帮助我们复盘总结、持续维护项目以及知识传承。 + +- 复盘总结:通过阅读文档,我们能够回顾整个项目从诞生到结束的完整过程,从而分析出该项目成功或失败的原因,便于我们从中吸取经验,助力下一个项目的成功。 +- 持续维护项目:如果这是一个需要持续维护和更新的项目,有了文档(比如 Bug 手册、用户手册),项目出现问题时,哪怕换了一位项目维护者,也能很快地从文档中找到解决方案,不会出现 “一人离职、项目倒闭” 的情况。 +- 知识传承:沉淀好的文档,是前人宝贵的经验、教训、思路和方法汇总,非常值得学习,未来能给更多团队的同学带来启发和收获。 + + + +总之,写文档是一件利人利己的事,每写一个字,都是在生产价值。 + + + +--- + + + +在理解了文档的重要性后,我们应该怎么做好文档沉淀呢? + +这里我们把文档沉淀进行拆分,需要做好两件事: + +1. 写出好文档(这是前提) +2. 管理好文档 + + + +下面我们分别讲解。 + + + +## 怎么写出好文档? + +想要写出好的文档,我们要先了解 “什么是好文档”,然后再去学习写文档的工具和方法。 + + + +### 什么是好文档? + +我自己评判文档好坏的几个标准: + +1)人能看懂、易于理解的 + +首先,你的文档是给 **人** 看的,如果是自己记录学习笔记,那么首先要保证自己能看懂;如果是在团队内共享文档,那么要保证别人能理解。如果本来一句话就能说清楚的内容,你在文档上用 20 句话来解释,这样哪怕你写了文档,别人可能还是直接来麻烦你本人。 + + + +2)结构清晰、易于查找的 + +好的文档,应该是别人从上到下扫一遍,就知道你在写什么、你想表达什么、我能从你的文档中得到什么、我在哪能找到我需要的内容。 + +就像这篇文章一样,我用了多级标题来划分文章的结构,你能直接通过目录大纲快速定位感兴趣的内容进行阅读。 + + + +3)内容完整、表述准确的 + +好的文档就像是项目中的一个模块,它应该是完整的、高内聚的,让人仅通过这个文档,就能解决自己的问题。 + +比如《某 Java Bug 的解决方案》文档,应该把 Bug 的起因、分析排查过程、解决方案、经验总结全部写出来。而不是说把这个 Bug 抛出来,怎么解决我不说~ 哎,就是玩~ + +另外,文档中的一些词汇和语句的表述一定要尽量准确,不能有歧义! + +比如我们鱼聪明 AI 在最初评估成本时,写的是 “服务器若干、价格累积万元左右”,“若干” 和 “万元左右” 其实都是比较模糊的词汇,类似的情况多了就可能导致成本计算错误而亏损。后面我们把上述词汇改成了类似 “服务器 4C 8G 1 台,价格 1000 元 / 月”,实现更精细化的成本控制。 + + + +此外,好文档还可能有其他的标准,比如面向用户的产品文档,应该保证文档整体的风格、排版一致,给读者带来最佳的体验。文档写得好,也会提升用户对团队的认可度,从而更愿意使用团队的产品。 + + + +### 写作工具 + +工欲善其事必先利其器,在介绍写好文档的方法前,先分享一些写作工具。 + +多年以前,写文档基本都是用 Word,但 Word 其实是有很多的问题和不足的。比如要自己手动调整格式、同一份 Word 文档由于兼容性问题在另一个电脑上打不开或者排版错乱等等。 + +所以现在我强烈推荐大家学习 Markdown(一种轻量级标记语言),可以让你用同一套语法轻松编写出排版、格式一致的代码。 + +比如用 “## 二级标题” 来表示二级标题,用 “> 引用” 来表示引用文案等。 + +现在很多编辑器软件都支持 Markdown,比如我们平时用的 VS Code、JetBrains 全家桶。但如果要选择一个体验最好的本地 Markdown 编辑器,我推荐大家使用 Typora,这也是自己用了多年的软件。 + +在写文档的过程中,也经常需要一些绘图来辅助理解,比如流程图、架构图等等,可以使用在线工具 Draw.io、经典软件 Visio 等。如果需要绘制思维导图,可以使用 XMind。如果要生成一些配图,可以使用目前很火的 Midjourney(或者我们的鱼聪明 AI)。 + +如果你需要把文档发到其他自媒体平台,可以直接把 Markdown 内容复制粘贴到 mdnice 网站中,它会自动帮你生成精美排版的文章。 + +此外,随着 web 前端技术的发展,线上文档写作网站也越来越强大,如果要团队协作、实时共享文档的话,可以选用语雀知识库、腾讯文档、飞书文档等工具。 + + + +### 方法 + +#### “抄” + +首先,想写好文档,要做的第一件事是 “抄”。 + +哦不,读书人的事,应该叫 “学习借鉴”。 + +如果你不会写文档,比如项目文档、设计文档、用户手册,怎么办? + +很简单,到网上找优秀的 **成品** ,去模仿。 + +不单单是写文档,做自媒体、做产品、写论文、学手艺,你想做好任何事情,第一件事都应该是:看看别人怎么做的,向别人学习。 + +- 你要开发网站,就去网上找现成的网站 +- 你要做视频,就去网上找爆款视频 + +这是最简单的道理,很多东西都有前人做过,所以哪怕别人不分享教程,只要你去模仿,用点心也能完成。 + +再加上现在开源文化盛行,很多项目和文档都在 GitHub 等平台公开可见。当你要写一个文档时,直接先复制一下知名项目的 README.md 文件,然后把原本的目录大纲保留,把内容换成自己的,就得到了一份很标准的文档,就这么简单。 + +等你阅读和编写的文档多了,自然也能形成一套属于自己(团队)的写文档方法。 + + + +#### 写作流程化 + +很多人讨厌写文档,就是因为感觉没有思路、无从下笔、完全不知道写什么。 + +我以前也常常是新建一个空白文档,然后对着它发呆。。。 + +但后来随着写作次数越来越多,我也修得了一套能够快速写出内容的方法,我把它称为 “写作流程化”。 + +什么叫流程?你去食堂买早饭,先排队、再买包子、再打豆浆、再找座位,这就是一个刻在 DNA 里的流程。 + +如果你也能有一套明确的写作流程,那么写作就像你买早饭一样简单。 + +具体怎么做呢? + +1)先想清楚文章的结构,根据主题写出大纲 + +比如我在写这篇文章时,先写了 “什么是文档?为什么写文档?怎么写出好文档?怎么管理好文档?” 这几个小标题,把整篇文章的框架定下来。而不是从上到下漫无目的地去写,想到哪儿写到哪儿。 + +写大纲的过程本身就是在培养你的结构化思维 —— 把复杂的问题进行结构化拆解。如果你发现自己写大纲都很困难,那么不妨尝试把时间线作为大纲,按照由远及近的顺序,依次去写你各个时期的想法。 + + + +2)填空 + +只要确定了大纲,你就可以有 100% 的信息,这篇文章你必然能写完。因为剩下要做的就是往每个章节下填空就好了。 + +类似于有个导师给你规划好了你要做哪些事,你就有了个目标,更容易坚定地执行下去。 + + + +3)优化 + +写完大致的内容后,我们要整体读 2 - 3 遍文档,进行适当地优化。 + +就像我们写代码一样,虽然功能是完成了,但是代码可能写得比较烂,提交代码前得再改改。 + +列举一些常见的优化点: + +1. 修改错别字 +2. 小标题间增加关联语,承上启下,使内容更连贯 +3. 重点前置,把文档的关键信息放到开头,吸引人阅读 +4. 图文并茂、多用比喻,让文档更易于理解 + + + +这一套流程走下来,一篇完善的文档就诞生了。 + + + +#### 持续优化 + +无论是自己写学习笔记、还是项目文档、用户手册,都不是写完一版就结束了的。好的文档是需要持续优化迭代的,如果有人指出了问题或者文档内容有过期,应当即时修复处理。不然错误的文档不仅不能帮助到人,还会产生误导。 + +像我们在开发鱼聪明 AI 的过程中,就很不幸地参考了一篇胡说八道的过期文档,让本就不富裕的团队雪上加霜。 + + + +#### 积累 + +经常有朋友问我:鱼皮你平时又上班又高产胜母猪,怎么做到的? + +其实我有一个习惯,就是会把生活中觉得有趣的事、或者突然想到的灵感记录下来,每隔一段时间去整理一下,后来我惊喜地发现,有些碎片化的内容竟然可以串起来讲,组成一篇文章。 + +就像打游戏一样,你想刷的装备一直出不来,你不在乎的装备碎片反而攒了一大堆。结果有天,你发现碎片都能够合成完整的装备了,竟然还挺好用,这就是无心插柳柳成荫吧。 + +写文档也是,哪怕你无法写一篇全面系统的文档,在你工作中遇到 Bug 的时候,随手开个文档记录下来;再遇到 Bug 的时候,就再打开之前的文档记录下来。次数多了,稍加整理,一篇高质量的文档不就来了? + + + +### 举例 + +以我们的鱼聪明 AI 来举例,刚开始写项目立项文档时,按照上述的 “流程化” 方法,先定了文档大纲: + +1. 为什么做?项目背景 +2. 做什么?需求分析 +3. 怎么做?设计方案 +4. 具体怎么做?工作安排等等 + +然后才是一条一条地去补充完善,之后在每次开会和上线后,再持续更新完善一下这个文档。 + +完善文档的过程中,我也会看到很多之前记录的内容,提醒着自己在做这个项目的过程中不要走偏。 + + + +## 怎么管理好文档? + +随着我们项目的不断迭代,文档数也越来越多、越来越零碎,怎么管理好这些文档,让大家需要阅读时能快速找到,这是个大问题。 + +尤其是对于大项目来说,假如 100 个人一起开发,每人写 10 篇文档就是 1000 篇文档,怎么对这 1000 篇文档进行管理呢? + +要先有一个意识:尽早发现问题,会比后期解决问题的成本要低很多。 + +所以管理好文档这件事,应该主要靠 “前期的策略” 和 “中期的持续优化”,而不是后面再去人工整理大量的文档。 + +> 代码屎山就是这么来的,烂代码堆得越多,越没人敢动。 + +所以首先,我们在开始项目前,就要建立好一套规范的 **文档体系** 。 + +1)文档线上化 + +只要是和项目 / 工作相关的文档,不要让大家在本地去写,而是直接用线上文档去 **实时协同** 。很简单的道理,你本地改了一段话,别人本地也改了相同文档的一句话,那最终以谁的为准? + +像我们鱼聪明 AI 的所有内部文档,都是使用语雀知识库来托管的,所有项目的信息在团队内部公开透明,从而尽最大地可能性消除信息差。 + +而且线上知识库还有一个好处,就是查找搜索方便,整个知识库的内容一键随便搜。 + + + +2)分组 + +随着文档或知识库越来越多,必然就会给大家的查找造成负担。所以我在 **最开始** 就给所有团队内部的知识库都按主题做了分组,如下图: + +![](https://pic.yupi.icu/1/image-20230705134114445.png) + +每个知识库下的文档,也建立了相应的分组: + +![](https://pic.yupi.icu/1/image-20230705134325495.png) + +当然,分组这个操作也是需要持续做的。如果刚开始没有办法预估会有哪些分组,那就等后面需要分组的时候,即时新建就好。 + + + +3)访问控制 + +所谓访问控制,就是让部分成员只能看到部分文档。这么做不仅是为了安全,也可以让大家尽量聚焦在自己的工作上,更能找到自己需要的文档。 + +目前我们鱼聪明 AI 团队的每个知识库都是有严格的访问控制的,只有大家需要看某个知识库时,我才会给他们开对应的权限。当然这也不是说要限制团队成员的学习,如果他对某个知识库感兴趣,可以直接申请查看。 + +主流的线上文档软件基本都支持访问控制和权限管理,实现上没有什么难度。 + + + +4)培养团队文档文化 + +还记得这篇文章开头我给大家讲的自己的故事么?有些人可能是没有写文档的意识、或者就是不爱写文档的!如果这个人又是项目的重要贡献者,那么他个人掌握的、团队不清楚的信息就会越来越多,最终就会出现 “他的代码别人动不了”、“他一走项目就完蛋” 的情况。 + +为了把这种风险扼杀在摇篮里,我反复跟团队的成员强调,一定要多写工作文档、即时同步信息,甚至对于一些重要的工作,我会把文档作为大家工作成果的一部分。慢慢地,大家就养成了写文档、文档分类的习惯。 + + + +--- + + + +## 写在最后 + +文档沉淀是做好产品的重要一环。无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,都要重视文档的编写和管理。 + +记住这几个关键点: + +1. 文档是你的第二大脑,要随时记录 +2. 好文档要易懂、结构清晰、内容完整 +3. 学会使用 Markdown 和在线文档工具 +4. 写文档要流程化:大纲 → 填空 → 优化 +5. 文档要持续优化和积累 + +在 Vibe Coding 时代,AI 可以帮你写代码,但是项目的思路、设计方案、踩过的坑,这些都需要你自己记录下来。只有沉淀好文档,才能让项目走得更远。 + +加油,从今天开始养成写文档的好习惯!💪 + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/04 技术选型实战指南.md b/Vibe Coding 零基础教程/50 产品变现/04 技术选型实战指南.md new file mode 100644 index 0000000..4146397 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/04 技术选型实战指南.md @@ -0,0 +1,350 @@ +# 技术选型实战指南 + +> 选对技术,事半功倍 + + + +大家好,我是鱼皮。本篇要分享的内容是 **技术选型**,是技术方向的朋友们必须要掌握的内容,也是做产品时在前期准备阶段必须要做的核心工作。 + +这篇文章中,我会结合自己做产品的实践经验,依次给大家分享:什么是技术选型?技术选型选什么?为什么要做技术选型?如何做好技术选型? + +无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,掌握技术选型的方法都能让你少走很多弯路。 + + + +## 一、什么是技术选型? + +技术选型这个词听起来很高大上,但其实就是 “技术选择”,即选择使用哪些技术来实现项目。比如使用 HTML 来开发网页、使用 C++ 来开发 Windows 桌面应用。 + +打个比方,如果把做项目想象成带兵打仗,技术选型就相当于打仗前选择武器。你要根据自身的兵种、敌人的种族、敌军的排兵布阵等来综合选择最适合的武器,才能以最小的代价胜利。 + +需要注意的是,技术选型不仅仅是在项目初期的规划和设计阶段进行。每当我们给项目增加一个新功能时,都有可能要选择新的技术来实现;而随着你项目的扩展,可能也需要对原有的技术栈进行升级。 + + + +## 二、技术选型选什么? + +“用哪些技术来实现项目”,这句话听起来很简单。就像上面说的,用 HTML 来开发网页,一个技术名词就带过了。 + +但事实上,这只是最浅显的一层。做技术选型并不是一件轻松的事,又分为很多层次和细节。 + +由浅入深来看,技术选型包括: + +1)选哪类技术? + +比如编程语言、开发框架、数据存储、缓存、队列等。 + +2)具体选什么技术? + +比如编程语言选 Java、Go 还是 C++?开发框架选 Spring 还是 Play?缓存选 Redis 还是 Memcached? + +3)技术具体选哪个版本? + +比如选 Java 8 还是 11?选 Vue 2 还是 Vue 3?选 Redis 5 还是 6?同一个技术的不同版本,往往也会有很大的差异。 + +4)选用技术的哪些具体特性? + +比如 Spring 的 AOP 切面、Redis 的 GEO 高级数据结构等。 + + + +这么看来,技术选型还是有点儿麻烦的。而且一般来说,规模越大的项目,技术选型往往越谨慎,周期也就越长。 + +记得我在腾讯从 0 到 1 建设 BI 可视化项目时,光是技术选型,就做了好几周,从多个角度深入且综合地对比了国内外主流的数据存储技术。 + +既然技术选型可能花费这么多的时间精力,那我们为什么还要做技术选型呢? + + + +## 三、为什么要做技术选型? + +相信很多还未工作过的朋友,是从来没有系统地做过技术选型的。 + +这很正常,因为大家在学习阶段,都是跟着网上的教程做项目,用什么技术、用哪个版本、甚至写什么代码,全部都是讲师给你提前规划好的。 + +![](https://pic.yupi.icu/1/image-20230331134500590-20230706153049690-20230706153117049-20230706163222417.png) + +但其实,并不是没有做技术选型,而是讲师帮你做了而已。讲师选择用什么技术带你做项目时,本质上也是在做技术选型,会结合市场需求、技术流行度等多方面因素。 + +那么为什么要做技术选型呢? + +答案很简单,为了 **更好** 地开发和维护项目。 + +这里的 “更好” 可能是提高效率、节约成本、提升开发体验、提高项目可扩展性等。 + +想象一下,当我们在企业中团队开发项目时,如果领导(或架构师)为了省事儿,选择了一个只有他自己熟悉、其他成员却完全不会用的技术,整个项目的开发进度会快么?如果为了贪图小便宜,选择了一个低成本、做工粗糙的云数据库,整个项目的性能会高么? + +在开发一个 **完整项目** 前,如果我们不假思索,直接确定某个技术就开始写代码,那么有可能等到后面,才突然出现翻车。就好像鱼皮给自己的电动车选了个便宜的轮胎,刚开始也能正常地跑,结果有天半路爆胎了,只能傻傻地原地等待。。。 + +举个我自己大学时期的翻车经历。大学我带团队做过一个校园贴吧网站,记得我是用 React 来开发前端页面的。刚开始很顺利,一口气写了几十个页面;但直到有一天需要开发帖子页面信息状态保存功能的时候,才发现 React 不像 Vue Router 一样有现成的 keep-alive(缓存组件状态)。后来又花了好久才找到一个类似的组件,结果还一堆 Bug! + +而且,越是对项目代码侵入性强的技术(比如开发框架),后期的切换成本就越大。像我上面举的翻车例子,等页面都写了几十个了,再去切换开发框架,就会非常麻烦;而且有的时候,你给项目引入新的组件或类库,可能会和现有的依赖版本冲突,导致后面项目跑不起来。这个时候,你是选择切换老的技术、还是再花更大的精力去找和老技术不冲突的新技术呢?更有甚者,为了兼容项目原本用到的老到不行的技术框架,不敢引入任何的新技术,导致什么都自己开发。。。可谓一步错,步步错! + +这些其实都是未做技术选型、或者技术选型不当带来的问题,也印证了我们做技术选型的必要性。 + +现在看来,确实是当时经验不足。如果我在最开始就能考虑到这点,先全局确认实现项目功能可能会用到的技术,并且选择合适的技术,就能减少后期风险、节省很多时间了。 + + + +## 四、如何做好技术选型? + +在了解技术选型的重要性后,我们来聊聊如何做好技术选型。 + +接下来,我会结合自己团队的技术选型经验,从几个方面带大家掌握技术选型的要点。 + + + +### 4.1、明确上下文 + +首先要明确一点:没有绝对完美的技术,我们做技术选型的目标是在 **有限的条件** 下、选取 **特定场景** 下的技术 **最优解** 。 + +几个关键词: + + + +#### 1)有限条件 + +指团队的人数、人员的技能、时间成本、金钱成本等。 + +比如大家都只会 Java、项目又急着上线,那肯定优先选择 Java 相关技术栈,不要因为听说 Go 语言的性能高,就让大家加班去学 Go。 + +比如公司缺资金、没资源,那么相较于选择付费的服务(比如云数据库),不妨直接在一台服务器上自主搭建。 + +再比如公司资源很多,但是缺人力,那么像数据库等服务就不用自己搭建了,直接买第三方的云服务即可。 + +比较常见的选型方案是先从人力的角度出发,看看团队的同学都会哪些技术。如果需求很紧急的话,那肯定优先选择大家用的比较熟的技术,先完成一期需求快速交付,后面再调研更合适的技术架构,不断地优化。再比如团队内对于某个技术有比较成熟的实践经历和知识沉淀、也有相应的技术大佬,那么可以优先选用该技术。举个最典型的例子,阿里的研发团队优先选用 Java、字节优先选 Go。 + +再从资源的角度考虑,要看团队的资源是否适合运用这个技术。比如创业小团队,没什么资金,那么可以用 MySQL 代替 Elasticsearch 来实现搜索功能,牺牲灵活性来省钱。再比如公司只能提供 4G 内存的服务器,那在选用一些开源技术的时候就要关注它们的内存占用,不能超过这个阈值。 + + + +#### 2)特定场景 + +是指我们的技术选型一定要围绕着 **特定的业务和需求** 来做,贴合实际,而不是为了用技术而用技术。 + +可以思考以下几个问题: + +1. 你要实现哪些功能?比如要做一个网盘系统,就要重点选型文件存储技术;要做一个聊天室系统,就要重点选择实时通信技术。 +2. 你的业务量级有多大?如果用户数量多、数据存储量大,可以选用分布式数据库、或者分库分表;如果同时使用系统的用户数多(并发量大),可以选用 Nginx 或者 LVS 来实现负载均衡。 +3. 系统的核心业务流程及关键数据结构是什么?比如要做一个管理系统,那么数据库选择主流的关系型数据库 MySQL 就好;而如果要做数据分析系统,那么应该选择 OLAP 型数据库,比如 ClickHouse 等。 +4. 系统更注重哪些性能指标?比如日志收集的场景更注重高性能和吞吐量,那么可以选择 Kafka 消息队列来采集;比如注重低延迟以及消息的准确性,那么可以选择 RabbitMQ。 + + + +有限条件 + 特定场景 = 上下文,也可以理解为团队、项目的实际情况。 + + + +#### 3)最优解 + +很多时候,我们做技术选型和设计算法一样,没有绝对的最优解,而是对时间、空间、稳定性、可用性、性能等等的综合权衡。 + +不同的上下文,选取的最优解也不同。这才是技术选型最有意思、同时也是最折磨人的地方! + +> CAP 理论也是如此,它是指在一个分布式系统中,无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个特性,只能根据实际情况在三者间进行权衡。 + + + +### 4.2、充分调研 + +在明确了我们团队和项目的实际情况后,我们要进行充分的调研。可以利用某度、某歌、GitHub 等各搜索引擎,或者文章和视频等等来探寻可能要用到的各类技术的信息。 + +包括: + +- 这个技术是什么?有什么用? +- 这个技术有什么优点和不足? +- 这个技术的使用成本如何? +- 这个技术更适用于什么场景? +- 这个技术的背景和口碑等等 + + + +有很多网站,也可以帮助我们获取技术选型信息,比如: + +- 技术雷达:https://www.thoughtworks.com/zh-cn/radar +- 框架性能对比:[https://www.techempower.com/benchmarks](https://www.techempower.com/benchmarks/#section=data-r21) + + + +不过我很久没用过这些网站了,自从人工智能对话技术流行后,我在做技术选型时,会直接去问 AI(GPT 或鱼聪明),让它帮我获取信息。 + +比如问它:你是一位计算机编程领域的专家,现在我要做一个 XX 系统,大致有 XX 功能,限定条件为 XX。请帮我列举实现这些所需的技术,要求多推荐一些同类技术并列举每个技术的介绍、优缺点和适用场景,便于我评估实现该系统的技术选型最优解。 + + + +注意,在调研阶段,大家应该先尽可能多地搜索相关技术,而不要把视野局限于某个技术。 + +建议把调研到的所有技术信息以表格或清单的形式记录在文档中,持续完善和补充,便于对比和最终选择技术。 + +就像下面这样: + +![](https://pic.yupi.icu/1/image-20230706180955933.png) + +在大公司大项目中,技术选型一定要提供充分的依据和理由,才会得到上级或其他成员的认可。 + + + +### 4.3、对比选择 + +收集到足够多的信息后,我们就可以根据上下文 + 收集到的信息来综合选择最合适的技术。 + +除了上下文之外,建议大家优先选择:知名度高的、有大公司背书的、持续维护的、活跃度高的、开源的、文档齐全的、用户多生态好的技术。 + +比如大名鼎鼎的前端框架 Vue 和 Java 后端框架 Spring Boot,大家对它们的印象就是功能强大、简单好用、学习资源多,所以这两个技术是主流,公司需求量也大。 + +千万不要选择缺失文档的、没几个人用的冷门技术!一旦后面出了问题,网上又找不到解决方案,说不定整个项目都无法继续推进! + + + +### 4.4、最简 Demo 验证 + +在最终确认要选择的技术前,不要忘了验证一下该技术是否能够运用到咱们的项目中,而不是直接拍板! + +推荐的做法是编写一个最简 Demo 来快速验证技术是否可用。比如使用 Vue Router 页面路由技术,那就编写一个点击按钮,快速跳转到 `/about` 页面的 Demo。 + +这个过程,本质上就是实现了理论到实践落地的过渡。 + +也是感谢人工智能技术的发展,现在想编写 Demo 快速验证,都不用自己写代码了,直接问 GPT 即可: + +![](https://pic.yupi.icu/1/image-20230706182008022.png) + + + +如果我们的系统是老项目,需要重点关注新引入的技术和老项目依赖的兼容性。这个时候,编写最简 Demo 验证是非常有必要的,可以提前规避版本冲突。 + + + +### 4.5、日常积累 + +除了上面这些方法外,想做好技术选型,经验值的积累也是很重要的。比如某个电商领域的十年架构师,要做一个新的电商系统,立刻就能想到合适的技术选型、甚至是整个系统的完整实现方案。 + +给大家两个建议: + +1)持续记录 + +把自己看到的 **每个** 和你学习方向或工作相关的技术都先记录到文档中,有时间的时候可以快速了解该技术的大致信息,知道这个技术是做什么的、有什么用。等需要用到的时候能想起来、或者能从文档中搜索到即可。 + +2)拓宽边界 + +不要幻想用一门技术吃遍天,也不要满足于自己的技术领域。尤其是在自学阶段、做一些小项目时,可以偶尔尝试使用一些平时不接触的新技术,横向拓宽自己的技术选型范围。 + +比如虽然我的工作是 Java 后端,但经常会做一些前端项目,而且每次都换着用技术,比如 Vue、React、Svelte 等。 + + + +## 五、技术选型实践 + +介绍完方法论,最后再分享下我们团队关于鱼聪明 AI 的技术选型实践。 + +按照上面分享的几个步骤,首先是明确上下文。 + + + +### 5.1、明确上下文 + +#### 1)有限条件 + +我们团队人力少,大家最熟悉的技术框架是后端 Java Spring Boot + 前端 React,所以前后端的技术框架基本确定。 + +也没有足够的资金去购买很多服务器和第三方服务,所以对大多数非核心服务,使用 Java Tomcat 单机部署,并且使用宝塔 Linux 进行服务器管理。 + + + +#### 2)特定场景 + +4 问 4 答: + +1. 你要实现哪些功能?我们要实现的 P0 级核心功能有:AI 对话、AI 助手、内容审核。AI 对话和内容审核都可以使用第三方 GPT 服务实现。 +2. 你的业务量级有多大?网站初期,用户的并发量不会很大,暂定 qps(每秒请求数)不超过 3,目前还不需要用到负载均衡技术。 +3. 系统的核心业务流程及关键数据结构是什么?核心业务流程是用户发送对话 => AI 自动回复 => 存储消息记录。那么就涉及了对话和消息记录的保存,由于一个对话可以包含多个消息记录,所以很适合选用关系型数据库 MySQL 来实现。 +4. 系统更注重哪些性能指标?由于自己之前网站经常被攻击,所以这次非常注重系统的安全性和可用性。为了控制并发,可以选用 Redis + Redisson 实现分布式限流,控制每个用户发送消息的频率不能过于频繁。 + + + +#### 3)最优解 + +这里就举一个例子吧:是消耗成本使用第三方的云数据库服务,还是自己在服务器上搭建数据库呢? + +还在学校的时候,我肯定会选择后者。因为很多项目就是自己学习练手用的,能跑就行;自己搭建数据库本身也能帮我熟悉 Linux 服务器的命令。当然最关键的还是省米,省下来给自己午餐加个鸡腿它不香么? + +但现在要做面向用户的线上项目了,我就会更倾向于使用现成的云数据库服务,数据库的搭建、运维、管理、调优别人都给你做好了,你拿到数据库账号密码就能直接用,还不用担心数据库宕机。相比于多投入的一些资金,能大幅节省我们 “本就不富裕” 的开发和运维成本。 + +这是我们当下对于数据库技术选型的最优解。 + + + +### 5.2、充分调研 + +上文也提到了,我们系统的 **绝大多数功能** 都使用主流技术 Spring Boot + React 实现,它们都属于我们团队人员的看家本领、也都是生态好的知名技术,不必做更多的调研。 + +相反,我们投入了比较多的时间在 **内容审核** 这个小功能的调研上。 + +为什么? + +因为对 AIGC 类产品,内容审核是至关重要的;而更关键的是,内容审核要成本啊! + +为了兼顾内容审核的质量和成本,我们把目光锁定到了国内的几家大厂提供的云服务上,也就是 BAT。 + +并且通过阅读官方文档和客服询问的方式,整理出了如下的对比表格: + +> 数据仅为示例参考,请以官方为准 + +![](https://pic.yupi.icu/1/image-20230706195734818.png) + + + +### 5.3、对比选择 + +有了上图的对比表格,我们就可以结合实际的业务情况来选择使用哪种内容审核技术了。 + +比如我们的对话功能中,允许用户单次输入的最大字符数为 1000 - 2000 左右,对话功能的使用 QPS 不超过 10,那么选择服务商 A 或 B 都是合理的。 + +> 我们可以将用户的单次输入拆分为多个段落,通过发多次请求来绕过字符数限制。 + + + +### 5.4、最简 demo 验证 + +确定了要使用的技术后,剩下的工作就很简单了。对于第三方提供的内容审核云服务,我们只需打开官方文档,就能找到现成的示例代码,下载到本地执行成功即可。 + +![](https://pic.yupi.icu/1/image-20230706200934291.png) + + + +### 5.5、日常积累 + +最后,关于日常积累,其实在上一篇文章《文档沉淀》时有提到。我们团队每天都在持续关注 AI 相关的技术动向,只要发现有了新的技术,会立刻记录在我们团队的公共知识库中。需要用到这个技术的时候,再进一步研究。 + + + +--- + + + + +技术选型是做好产品的重要一环。选对了技术,可以事半功倍;选错了技术,可能会让项目陷入困境。 + +记住这几个关键点: + +1. 技术选型要结合团队实际情况和项目需求 +2. 要充分调研,多方对比 +3. 优先选择知名度高、生态好的技术 +4. 要编写最简 Demo 验证可行性 +5. 要持续积累技术选型的经验 + +在 Vibe Coding 时代,AI 可以帮你快速了解各种技术,甚至帮你生成 Demo 代码。但是,如何根据实际情况选择最合适的技术,仍然需要你自己的判断和积累。 + +加油,选对技术,让你的产品开发更顺利!💪 + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/05 系统架构设计实践.md b/Vibe Coding 零基础教程/50 产品变现/05 系统架构设计实践.md new file mode 100644 index 0000000..db712c8 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/05 系统架构设计实践.md @@ -0,0 +1,250 @@ +# 系统架构设计实践 + +> 让你的产品支棱起来 + + + +大家好,我是鱼皮。这篇文章我们来聊一个听起来很高大上、实则并不难的知识 —— **架构设计**。这是技术方向的朋友们必须要 **重点掌握** 的内容,也是做产品时在前期准备阶段必须要做的核心工作! + +这篇文章中,我会结合自己做产品的实践经验,依次给大家分享:什么是架构设计?为什么要做架构设计?怎么做好架构设计? + +无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,掌握架构设计的方法都能让你的系统更稳定、更易扩展。 + + + +## 一、什么是架构设计? + +想象一下,如果现在我们要盖一座摩天大楼,需要做哪些事? + +是直接让工人去搬砖、叠砖么?还是让挖掘机来挖呀挖呀挖? + +当然不是! + +在盖楼之前,肯定会有一名建筑师,根据大楼的实际用途、地理位置、入驻需求等信息来绘制一份蓝图,蓝图上会规划大楼的外形、内部布局、结构细节等。 + +绘制好蓝图后,建筑师还要确定每层楼房的框架和支撑结构,确保它们足够稳定,不会说风一吹就塌了。 + +之后,建筑师还要根据大楼的实际用途和需求来规划每个楼层的用途,比如 B1 层卖小吃、1 层卖服装奢侈品等等。这些都是在大楼动工前确认好的,不会说等工人已经搬好砖后,上面临时决定 “这一层我们不盖了!”。 + +做软件(网站)开发也是一样,在我们 “码农” 实际动手写代码前,往往会有一个经验丰富的架构师,先绘制一份 **架构设计图** ,规划好整个系统的全貌、系统规模、系统的结构。 + +架构师还要将系统按照功能和需求划分为各个模块,比如商城系统划分为用户模块、商品模块、订单模块等。并且确定各个模块的作用和交互协作方式,保证整个系统能够正常运作。不会出现一个功能故障,整个系统全部瘫痪的情况。 + +有朋友可能会问了,那架构设计和之前讲过的技术选型有什么区别呢? + +还是拿盖楼来举例,其实很好区分。架构设计是规划如何盖楼、每层楼怎么安排;而技术选型是在完成架构设计之后,选择具体用什么材料、工具或方法来完成盖楼。二者是相辅相成的。 + +用一句话来概括, **架构设计是构建稳固、可靠和可扩展系统的过程** 。 + +而我们熟知的岗位 “架构师”,就是负责完成系统架构设计,确保系统稳固、可靠、可扩展的人。 + +在大家的印象里,可能觉得架构师是很高大上的角色。但我个人认为,只要你能够独立完成一个系统的架构设计,能够把复杂的系统拆分为模块化、可扩展的组件,你就已经是架构师了。 + +> 所以 97 年就成为架构师还是有一定合理性的。 + + + +## 二、为什么要做架构设计? + +其实从上面盖楼的例子中,相信大家已经能大致感受到架构设计的重要性了。 + +如果在盖楼前,不先设计好大楼的结构,那么就难以保证大楼的安全和稳定性,风一吹整层楼就塌了。同理,在开发网站前,如果不先设计好网站的整体架构(比如不添加防火墙),后面可能一遇到网络攻击,整个系统就都无法访问了。这是架构设计的核心目标:保证系统地 **稳定性、可靠性和可用性** 。换句话说,起码要让系统能跑。 + +> 不过没关系,系统和人只要有一个能跑就行。 + +进行架构设计的另一个重要原因,是系统的 **可扩展性** 。打个比方,建好的商场大楼非常受欢迎,我们想在盖好的大楼上再增加几层楼,那么必须在最初就确保大楼的结构可以支撑额外的重量、能够线性地往上叠加。而不是像下图一样: + +![](https://pic.yupi.icu/1/image-20230711174331231.png) + +同理,如果想要网站能够应对日益增长的用户量和新业务功能,也必须有一个良好的架构设计来支持。不要出现网站用户数增多后,网站无法访问的情况。 + +此外,好的架构设计也能够提升系统的性能和用户体验。比如在商场内,合理安排电梯数和电梯的位置,就能帮助用户快速到达想去的店铺;而网站的架构设计如果合理,比如用更少的分层完成同样的功能,那么就能更快地响应用户的操作。 + +总之,想要让网站像摩天大楼一样支棱起来,前期的架构设计是必要的! + + + +## 三、怎么做好架构设计? + +“能完成架构设计” 和 “能做好架构设计” 还是有很大的区别的,下面我会结合自己多年的学习经验、以及鱼聪明 AI 的架构设计,分享一些我认为的做好架构设计的关键。 + + + +### 掌握方法论 + +做好架构设计的前提是具备一定的理论知识。所谓方法论,是指前人通过总结和归纳形成的一套 **特定问题的解决方案** 。就像我们做数学题的时候知道套用公式来解题一样。 + +有很多对架构设计有帮助的方法论。比如初学编程时接触到的面向对象设计,软件开发基本原则、23 种经典设计模式、SOA 面向服务架构、DDD 领域驱动设计等等。掌握这些方法论背后的思想,是做好架构设计的 **前提** 。 + +举个例子,面向对象设计的五个基本原则 SOLID 中,有一点是 **单一职责原则** ,是指:一个类或模块应该有且只有一个单一的责任,每个类或模块应该只关注于一个特定的功能或职责。换句话说,每个模块应该只做好自己的事。 + +我们在进行鱼聪明 AI 网站的架构设计时,首先就遵循了单一职责原则,将系统 **按照功能拆分** 为用户模块、助手模块、对话模块、绘画模块、支付模块等。这样一来,当我们想要扩展对话相关的功能时,就不用改动助手模块的代码。也可以将不同的模块交给团队中不同的同学进行开发。 + +![](https://pic.yupi.icu/1/image-20230711192728792.png) + + + +### 学习经典架构 + +前人栽树,后人乘凉。在我们没有能力自主设计一套架构前,不妨站在巨人的肩膀上,学习一些前人总结和实践过的经典架构。 + +简单举几个例子: + + + +#### 1)分层架构 + +首先是最经典的分层架构,把系统分为多个不同的层,每一层都有特定的功能和职责,且只和自己的直接上层与直接下层 “打交道”。 + +比如开发 Java 企业级后端项目时常用的三层架构,将系统分为表示层、业务逻辑层、数据访问层。 + +表示层负责接受用户请求,把用户输入的参数传递给业务逻辑层进行处理,并返回数据、页面等内容给用户。 + +业务逻辑层负责处理复杂的业务逻辑,比如调用 AI 能力完成智能对话、再进行加工处理、调用数据访问层将结果存到数据库中,也是我们做系统主要开发的部分。 + +数据访问层负责操作底层的数据源,比如对数据库、文件、缓存等进行增删改查。 + +![](https://pic.yupi.icu/1/image-20230711194035810.png) + +分层架构的适用性非常广泛,绝大多数企业级系统都可以把分层架构作为基础的架构设计。 + +计算机网络也是采用了经典的分层架构,OSI 七层参考模型中,把计算机网络自底向上分为了物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每个层只处理特定的功能,比如数据传输、数据的路由;层与层之间通过接口(或者叫协议)进行通信。 + +我们的鱼聪明 AI 后端也是使用了分层架构,只不过在原有的三层架构基础上,在业务逻辑层和数据访问层之间又增加了 Manager 层(通用逻辑层),将业务逻辑层经常调用的 **公共逻辑** 提取出来,便于复用。 + + + +#### 2)微服务架构 + +微服务的 “微” 是相对于 “单体” 项目的概念。微服务架构是指将完整的大型系统拆分为多个微小的、自治的服务,每个服务都能独立部署、独立扩展和维护、互不影响,服务之间通过网络通信进行协作,从而实现原本大型系统的完整功能。 + +我们的鱼聪明 AI 就用到了微服务架构。前面也提到了,我们首先将系统按照功能划分为了多个模块。 + +但如果我们只是按逻辑划分出了这些模块,实际上所有的代码仍然部署在同一个项目中,打包后仍然是一个可执行文件。那么所有模块要么都在运行、要么都在宕机,本质上还是单体项目。一个服务崩了,可能导致整个项目都无法运行! + +![](https://pic.yupi.icu/1/image-20230711200006355.png) + +所以我们将部分重要模块(比如支付模块)的代码从原本项目中抽离,单独作为了一个服务,并且还启动了备份,从而保证了支付业务的稳定性。说什么也不能影响收入对不对~ + +![](https://pic.yupi.icu/1/image-20230711200339275.png) + +能够实现微服务设计的框架也很多,比如 Java 的 Spring Cloud、Apache Dubbo 等。但是学习微服务更重要的是思想,即 **如何合理地拆分服务** 。 + +并不是所有的项目都要把所有功能都拆分成子服务的,像我们的鱼聪明 AI,也没有把用户模块和助手模块进行分离,原因是这两个模块的业务都不复杂、并且存在紧密的依赖,拆分后反而不利于维护了。 + + + +#### 3)事件驱动架构 + +在事件驱动架构中,各模块之间是通过事件(或者消息)的 **发布订阅模型** 进行通信的。 + +举个最简单的例子,有两个模块:支付模块和会员模块,当用户支付成功后,支付模块会给会员模块发送一个 “XX 用户支付成功” 的事件,会员模块收到这个时间后,给对应的用户开通会员即可。 + +![](https://pic.yupi.icu/1/image-20230711202025430.png) + +但实际运用时,事件驱动架构往往会引入一个 **事件总线** ,相当于一个中介,负责集中收集和下发事件。 + +比如鱼聪明 AI 的对话功能和绘画功能就采用了事件驱动架构。当上游返回 AI 回复的消息或生成的图片后,会发送 “成功” 消息到事件总线,然后事件总线再将这些消息分别转发给对应的模块去处理。如下图: + +![](https://pic.yupi.icu/1/image-20230711201650066.png) + +这样一来,各模块之间就实现了解耦(互不影响)。假如后续我想新增多个对话模块,只要将该模块和事件总线建立连接即可,不会影响到其他模块的运行。 + + + +### 关注需求和痛点 + +我们在学习过程中接触到的项目,几乎都可以套用上述几种主流的架构。但具体应该如何做好架构设计,一定是要结合实际的需求和要解决的痛点去分析。 + +以鱼聪明 AI 为例,前面也提到了,我们首先就按照需求(功能)将系统拆分为了多个模块,然后将部分模块单独封装为服务进行独立部署。 + +但架构设计并没有到此结束,接下来分析下我们这个网站的痛点,主要是 “安全性” 和 “访问互通性” 这两个方面。 + + + +#### 安全性 + +根据我之前的翻车经历,网站上线后一定会遭受各种攻击!所以,我们在原有的分层架构基础上进行扩展,在表示层前增加高防服务器和 Nginx 防火墙,在表示层后增加了分布式限流和权限校验处理。 + +> 在表示层前添加集中的分布式限流和权限校验处理也是合理的,以实际需求为主。 + +改进过后的架构如图: + +![](https://pic.yupi.icu/1/image-20230711203808233.png) + +如果用户在短时间内用不法手段频繁向系统发送请求,那么在限流层就会被拦截,不会进行后续的业务逻辑处理。 + + + +#### 访问互通性 + +我们的 AI 绘画模块需要依赖第三方服务来完成部分功能,但是第三方服务并不支持访问跨地区访问,网络无法互通,怎么办呢? + +这时,我们有 2 个方案可选: + +1)把整个系统都放到第三方服务所在的地区去部署。如下图: + +![](https://pic.yupi.icu/1/image-20230711205545871.png) + +2)在 AI 绘画模块和第三方服务之间搭建一个代理,让代理帮忙发送和响应请求。如下图: + +![](https://pic.yupi.icu/1/image-20230711210049633.png) + +如果是你的话,会选择哪个呢? + +方案 1 的好处是方便,但缺点也很明显,整个系统都移到其他地区,也就意味着原本地区的用户访问系统的所有功能,速度都会变慢。 + +方案 2 的好处是只需要改变 AI 绘画模块发送的请求地址信息,而系统的其他功能(比如查询用户信息)性能完全不变;缺点就是要搭建额外的服务、增加了实现成本。 + +最终,我们选择了方案 2 并改进了架构设计,增加一点实现成本来换取更好的用户体验。 + +通过这个例子,我想告诉大家的是:**没有绝对完美的架构设计** 。和技术选型一样,我们做架构设计的目标是寻找实际情况下的最优解。 + + + +### 超前思考 + +我们在做架构设计时,要养成超前思考的习惯,不能只针对现状,而是要提前预见系统未来可能的发展,预留足够的 **可扩展** 空间。 + +比如我们的鱼聪明 AI,虽然在最开始只有 100 个内测用户,但我们会按照 1 万个、甚至 10 万个用户的标准去设计系统,所以使用了分布式存储中间件而不是本地服务器来存储用户登录 Session;虽然早期历史对话消息数只积累了 5 万条,但我们提前设计了消息过期淘汰机制、并且将消息模块解耦,防止消息数达到百万、千万时影响系统的查询性能。 + +当然,超前思考也要有个度。要避免过度设计,不要提前去考虑绝对不可能发生的事情、不要提前去消耗远超增长的成本。 + + + +--- + + + +最后,要注意的是,**架构设计是一个持续的过程**,要根据业务的实际情况不断优化迭代。比如发现业务收益不高时,通过简化架构来降低成本;业务高速发展时,及时扩容服务来应对增长。 + + + +## 写在最后 + +架构设计是做好产品的重要基础。好的架构设计可以让系统更稳定、更易扩展、性能更好。 + +记住这几个关键点: + +1. 架构设计要掌握基本的方法论和设计模式 +2. 要学习经典架构,站在巨人的肩膀上 +3. 要关注实际需求和痛点,而不是为了设计而设计 +4. 要有超前思考的意识,预留扩展空间 +5. 架构设计是持续优化的过程 + +在 Vibe Coding 时代,AI 可以帮你快速生成代码,但是系统的整体架构设计,仍然需要你自己的思考和规划。只要有架构设计的意识和足够的积累,人人都能成为架构师! + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/06 项目研发流程选择.md b/Vibe Coding 零基础教程/50 产品变现/06 项目研发流程选择.md new file mode 100644 index 0000000..b74de03 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/06 项目研发流程选择.md @@ -0,0 +1,306 @@ +# 项目研发流程选择 + +> 跑得快还是跑得稳? + + + +大家好,我是鱼皮。 + +不知道大家是否喜欢吃辣条?反正我是老爱吃了。 + +吃辣条的时候,我会思考:美味的辣条是如何被制作出来的呢? + +为了满足自己的好奇心,我还专门到网上搜了一下,结果大为震惊! + +发现有些辣条的制作过程是很 “先进” 的,不是全部靠工人来制作,而是有一条 **生产流水线** 。准备好原材料后,由机器依次完成混合、搅拌、切割、调味、炸制、冷却、包装等操作,而工人只需要监督就行。 + +![](https://pic.yupi.icu/1/6f6e8ad610e6418e9556fb0fb95afda1.jpeg) + +有了这么一套清晰的工序,整个生产辣条的过程就变得井然有序,工人(或机器)只需要一步一步做好自己的事情即可,整体效率更高;而且如果每个环节都经过充分的验证,辣条的质量和安全性也会更高。 + +这就是 **标准流程** 的重要性。 + +回到我们今天的主题,如果我们想要开发上线一款产品,也需要有一套标准的研发流程。 + +所谓的研发流程是指:为了高效完成产品研发,所定制的 **一系列工作步骤和方法** 。团队成员只需依次按照这些步骤和方法来工作,就能够顺利完成高质量的产品。 + +那么团队在协作开发时,应该定制什么样的研发流程?研发流程的步骤是越多越好,还是越少越好呢? + +本篇文章,会结合我自己在大厂工作以及带小团队的经验,依次分享:大厂的标准研发流程、小团队的敏捷研发、以及我们鱼聪明 AI 团队的研发流程选择。希望能帮大家开拓思路,提高团队的项目开发效率和项目质量。 + + + +## 大厂的标准研发流程 + +这是本文分享的重点。 + +对于大公司,往往会有成百上千人共同参与一个项目。所以为了保证项目稳定推进,大厂的研发流程通常会非常 **完备和复杂** ,包含非常多的步骤,每个步骤的要求也很严格。 + +我将大厂研发流程的步骤划分为几个阶段,用一张思维导图来概括,会更清晰一些: + +![大厂研发流程思维导图](https://pic.yupi.icu/1/3334dda0-2177-4816-bc91-94e7d3b77bde.png) + +如果用生产辣条来比喻研发项目。那么大公司研发项目的流程,就像是我开头提到的用 **标准流水线** 生产辣条的流程。 + +> 注意,以上阶段并不是完全按从上到下的顺序执行,阶段间可能存在交叉,比如技术预研和技术选型其实在设计阶段就应该考虑。 + + + +### 需求阶段 + +需求阶段的目标是:明确我们为什么要做产品?要做一个什么样的产品?产品要有哪些功能? + +现在,假设辣条就是我们要做的产品。 + +由于需求阶段是研发流程中 **最开始** 的环节,我会详细地分为 4 个子阶段来介绍。 + + + +#### 需求产生 + +我们为什么要做辣条呢?可能是进行了市场调研后,发现大家都爱吃辣条、做辣条能发财;可能是无意中发现了一种改进辣条口味的想法;可能是发现我们的资源很适合去生产辣条等等。 + +需求产生阶段,最重要的事就是尽可能多地收集整理需求,不要放过可能的机会。 + +有时,可能一个不经意的想法,就是一个很有意义的需求。 + + + +#### 需求评审 + +收集了很多需求后,我们要对需求进行评审,确定其可行性、成本和收益、需求和风险、以及是否符合我们对产品的定位,而不是什么都做。 + +就像我们打算生产一款新口味的辣条,需要先调研评估新的口味会不会受到欢迎、能不能制作出来。 + + + +#### 需求分析 + +在对需求进行评审后,我们需要进一步分析需求,把需求细化为产品 **具体的** 功能或特性、或者要完成的工作。 + +比如想生产一款新口味的辣条,我们要确定辣条的辣度和具体口味、研制新的配方、确保辣条的安全性、给辣条设计新的包装袋等。 + + + +#### 排期 + +通过需求分析明确需求后,我们要进行需求排期。 + +这个阶段我们要制定生产计划,根据需求的重要程度和所需资源等,来安排完成需求的优先顺序和实现周期。 + +比如生产辣条时,我们要先花 1 个月研制配方、然后花 3 天采购原材料、花 3 天生产辣条、花 1 天验证安全性,同时花 3 天给辣条设计新的包装袋。 + + + +### 设计阶段 + +设计阶段我们的目标是:提前想清楚我们的产品要怎么做?功能如何实现? + +对于生产辣条,设计阶段的目标就是 “确认辣条的配方”。 + +首先, **架构设计** 就像是确定辣条的主要材料和制作工艺,确保后续可以在此基础上做出多种不同新口味的辣条,而不是每种新口味的配方都从 0 全新调制(可扩展性)。 + +**概要设计** 是类似于对辣条的整体构思,比如辣椒的种类、辣椒粉和面粉的比例、辣条的大小等。 + +**详细设计** 是对概要设计的补充完善,深度研究配方中的每种配料的 **细节** 、确定每个步骤的具体要求。比如先放 3 克辣椒粉、再放 100 克面粉、再混合搅拌 3 圈(我瞎编的)。 + +完成上述设计后,我们要分享自己的设计,和其他团队成员共同讨论,确保大家的 **方案对齐** 、想法完全一致。而不是等到上市后,让不同的用户吃到不同配方的辣条。 + +在设计阶段,不止需要产品经理和研发工程师,测试同学也要参与进来,提前进行 **测试用例设计** 。定义对辣条进行质量验证的标准,例如具体的辣度在 xx ~ xx 之间、辣条长度为 10 cm 等。 + + + +### 研发准备 + +研发准备阶段,我们要做的是:准备项目研发所需的基础条件。 + +比如正式生产辣条前,我们要先进行 **技术预研** ,通过查阅资料来提前调研我们实现新口味配方的可行性。然后我们要进行 **技术选型 **,选择使用何种工具或机器来调制配方、切割辣条。 + +完成技术选型后,还要进行 **资源申请** ,确认团队的资金足够让我们使用先进的工具或机器、购买原材料以及配备工人。 + +在大公司,资源的申请往往非常严格,像我在腾讯的时候,想要申请 1 台服务器来部署项目,都要经过领导、运维等好几层的审批。 + +申请到资源后,我们需要进行 **环境准备** ,找一个干净卫生、配备水电的场地来放置辣条生产机器和工人。在研发流程中,环境准备的工作就是搭建开发环境、安装开发必要的软件和工具等。 + +之后,我们就可以进行 **项目初始化** 和 **依赖安装** ,把机器和工人安排到指定的位置、通水通电、启动机器、安装机器程序等等,让一切准备就绪。在研发流程中,我们可能会使用脚手架之类的工具来自动生成一个干净的项目初始代码,并且使用包管理器安装运行项目所需的基本依赖,接下来就可以愉快地写代码啦! + + + +### 研发阶段 + +研发阶段是程序员们大显身手的阶段,这个阶段的目标是写代码完成项目。 + +研发阶段又可以分为:本地开发、远程开发、代码优化、单元测试、开发联调 5 个小阶段。 + +首先,每位开发者可以在自己的电脑上编写代码(本地开发),也可以选择在同一个公共机上协作开发代码(远程开发)。在开发完成基本功能后,要进行代码优化,比如增加异常处理来提高健壮性、使用多线程来优化性能等。之后,要自己编写基本的单元测试,来验证代码能否正常运行并返回预期结果。最后,程序员们需要相互配合,进行开发联调,即调用彼此的代码来验证完整功能的可用性。 + +比喻成生产辣条,这个阶段就是由机器和人工相互配合,完成对辣条的搅拌、切割、调味、检验等操作。由于我没有参与过辣条生产,不知道他们是不是还有人工试吃环节,如果发现味道不好,还得修一修机器(程序员改 Bug)、或者再人工加点儿秘料(代码优化)。 + + + +### 测试验证 + +在完成开发后,我们必须进行测试验证,这个阶段的目标就是:确保产品功能的正常运行,消灭 Bug! + +有同学可能会问:研发阶段中,程序员不是已经自己编写过单元测试了么? + +但是,单元测试只是一个最基本的保证,只能保证自己的代码没有问题;如果多人的代码需要互相调用配合,还需要有更进一步的测试 —— **集成测试** ,来保证大家的代码整合到一起也没有问题。 + +除了单元测试和集成测试外,比较常见的测试类型还有系统测试、验收测试。 + +**系统测试** 是在集成测试后,对整个系统进行全面的功能和性能测试,测试的范围更大。 + +而 **验收测试** 通常是测试的最后一个阶段,确认系统是否满足实际的需求以及用户期望。 + +这里还有一个概念是 **产品体验** ,是指从真实用户的角度来感受产品功能的优缺点。严格来说,产品体验不只是在测试阶段才进行,而是应该贯穿整个开发过程,便于提前发现问题和改进。 + +比喻为生产辣条,在我们生产完辣条后,不仅自己要试吃,还要有专业的品尝师来体验、检查辣条的配方和制作是否有问题。 + + + +### 提交阶段 + +提交阶段的目标是:把已经通过测试的本地代码提交、推送到远程仓库,并且合并到主分支,为上线做好准备。 + +实际开发中,由于项目是由多人维护的,为了减少代码冲突和烂代码,会采用 **代码审查** 机制。想要合并代码到主分支前,必须发起 MR(Merge Request) **合并请求** ,然后由项目的负责人(一般是你的领导或同事)检查你的代码,没问题后才允许合并。 + +这样一来,所有的代码会经过至少 2 名成员的检查,代码质量会更高,也减少了上线出 Bug 的概率。 + +比喻为生产辣条,代码审查就好像是由专业的食品卫生机构来检验辣条生产的安全标准,如果发现配方或生产过程有任何的问题,就打回去重做。 + + + +### 发布阶段 + +经过了 “九九八十一难”,我们的项目终于可以发布了! + +首先,要把我们生产好的辣条进行打包,变成可以售卖的包装袋。然后并不是一开始就做大规模的宣传推广,而是先给一部分顾客试吃,让他们给出一些评价。如果大家对辣条赞不绝口,那么才可以将辣条正式上市,走向大众。 + +在研发过程中,我们也要对开发完成的代码进行 **打包构建** 。然后先进行 **预发布** (或者灰度发布),给一部分用户进行体验;确认没有问题后,再 **正式上线** 。 + + + +### 后续 + +至此,我们的研发流程还没有结束!只能说是完成了一轮上线而已。 + +产品上线后,我们还需要持续收集和接受用户的反馈意见,并且对用户的评价进行统计分析,从而不断地优化迭代我们的产品。 + +此外,文档沉淀也是非常重要的,要把我们这次研发流程中遇到的种种问题、资料、知识全部记录下来,便于团队继续改进。 + + + +--- + + + +怎么样,感觉大厂的研发流程是不是很复杂? + +事实上,完成第一次上线后,每当我们需要给产品增加新功能时,都要完整经历一遍上述流程!甚至有的时候,光需求评审这一个步骤就要经历 1 - 2 个星期的讨论! + +这种研发流程虽然能够保证项目的质量,但未必适合小团队,尤其是对于创业公司来说,时间就是金钱。 + +所以下面再分享一下适合小团队的研发流程 —— 敏捷开发。 + + + +## 小团队的敏捷研发 + +如果说上述大公司的研发流程更注重 **规范和稳定** ,那么敏捷开发更注重 **团队协作和快速迭代** 。 + +在敏捷开发中,上述大厂研发流程的很多步骤都是可以简化、甚至省略的,非常灵活。 + +比如上午我们想做一个产品,中午团队成员一起开会讨论需求、并确认产品上线必做的核心功能,下午就直接开始研发写代码了。先用最快的速度完成核心功能、能用就行,然后再持续地讨论新需求、持续地开发和上线、改进产品。 + +把更多的时间都投入在研发上,主打一个快! + +![敏捷开发流程](https://pic.yupi.icu/1/image-20230712185656368.png) + +如果采用敏捷研发的方式来生产辣条,大概是这样的: + +我们团队发现某个地区的人非常爱吃辣条,那么就直接纯人工用辛勤的双手先做个几包,以最快的速度让这些人试吃;然后再根据这些人的反馈去改良我们的配方、升级我们的包装;等大卖之后,再引进机器、买工厂,批量自动化生产辣条。 + +需要注意的是,敏捷开发是一种软件开发方法论,具体的方法不止一种,比如 Scrum、Kanban、极限编程等。但是大致了解其基本概念和适用场景就足够了。 + + + +## 研发流程选择 + +在了解了上述的 2 种研发流程后,我们做项目时应该如何选择呢? + +首先要明确一点: **没有绝对好的选择** 。无论哪种研发流程,都有各自的优势,要根据实际情况来选择。 + +敏捷开发虽然追求极致的快速和灵活,但也需要团队成员之间的高度配合,并且带来的风险也更大。有可能投入了几周的开发时间后才发现做了个没什么用的项目。相对而言,大厂的研发流程虽然需要消耗更多的前期资源和精力,但可以带来更高的产品质量、以及研发进度的稳定性。 + +那么对于我们鱼聪明 AI 团队来说,是选择跑得快还是跑得稳呢? + +答案是:小孩子才做选择,我全都要! + +![](https://pic.yupi.icu/1/image-20230712184257231.png) + +首先,分析我们自身的实际情况: + +1. 我们是一个小团队,没有大公司的资源和基础建设(比如流水线自动构建平台) +2. 我们要做的是 AI 类产品,需要快速上线抢占市场 +3. 我们团队的同学全在一间 40 平米的小办公室里,大家可以紧密协作 + +从这几点来看,我们会明显更倾向于敏捷开发。但是我们在敏捷开发的基础上,保留了大厂标准研发流程中的设计阶段和提交阶段,并且给网站做了完备的监控统计,用于持续改进产品。 + +完整流程如下: + +![](https://pic.yupi.icu/1/image-20230712190738396.png) + +我们希望网站开发在追求快速的同时,能够兼顾可扩展性和代码质量。因此,一方面我们在设计阶段投入了更多时间,采用更通用化的架构设计来支撑整个系统(比如使用微服务架构,独立拆分支付中心),从而能够应对未来的业务增长。 + +另外一方面,在协作开发中,我们使用 Git 来管理代码,并采用简化版的 Git Flow 模型,让每位研发同学都创建属于自己的独立开发分支。等各自的功能开发完成后,由我来负责代码审查,通过后再将代码合并到主分支,从而保证了主分支的稳定。 + +代码审查界面: + +![代码审查](https://pic.yupi.icu/1/image-20230712193216012.png) + +有同学可能会问了:为什么把测试验证阶段砍掉了?你们做产品都不测试么? + +理想情况下,产品上线前肯定是需要由专门的测试工程师来测试验证的。但现实是,我们团队没有测试工程师! + +所以我们的策略是: + +1. 首先,前端和后端工程师各自开发和自测功能。在上线前,我会与负责该功能的团队成员一起开会,验证功能是否正常。 +2. 其次,问题是无法处理完的,系统也是不断完善的。因此,我们将尽快上线,招募一些内测用户来体验系统并反馈 Bug。 + +这样一来,我们可以把更多的时间投入到研发上,同时不失去对产品质量的关注和持续改进的机会。 + + + +--- + + + + +研发流程的选择没有绝对的对错,关键是要根据团队的实际情况和项目需求来定制。 + +记住这几个关键点: + +1. 大厂研发流程注重规范和稳定,适合大团队 +2. 敏捷开发注重快速迭代,适合小团队 +3. 可以结合两者的优势,定制适合自己的流程 +4. 要保留核心环节(如设计、代码审查),简化非必要环节 +5. 研发流程要持续优化,不断改进 + +在 Vibe Coding 时代,AI 可以帮你快速完成开发工作,但是一个好的研发流程,可以让团队协作更高效、项目质量更有保障。 + +加油,找到适合自己的研发流程,让项目跑得又快又稳~ + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/07 产品盈利模式设计.md b/Vibe Coding 零基础教程/50 产品变现/07 产品盈利模式设计.md new file mode 100644 index 0000000..16ed95a --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/07 产品盈利模式设计.md @@ -0,0 +1,201 @@ +# 产品盈利模式设计 + +> 为爱发电不现实,让产品产生价值 + + + +大家好,我是鱼皮。今天要和大家分享的主题是 **盈利模式**,主要是希望能够给站长、软件开发者、内容创作者、团队领导者一些变现上的启发。 + +下面先给大家介绍一下盈利模式的概念,然后会结合我自己的经历分享一些常见的盈利模式和思考。 + +无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,了解盈利模式都能帮你让产品产生更大的价值。 + + + +## 什么是盈利模式? + +我们可以把 “盈利模式” 这个词拆解为 “盈利” + “模式”。 + +所谓盈利,就是赚 💰 变现;而模式,是指采用一系列的方法或策略。 + +那么两者结合,盈利模式就很好理解了。盈利模式是指:为了实现变现的目标,所采用的一系列方法和策略。简单来说,就是 “怎么变现”。 + +举个直接的例子,我周末出去觅食的时候,看到了一家生意火爆的快餐店。对这家快餐店来说,它的盈利模式可以是它的菜品菜单和销售策略。 + +它可以做一份吸引人的菜单,比如把番茄炒蛋叫做 “金彩绽红”,再通过独特的配方提高用户的满意度。它可以搞一系列的活动,比如买 1 送 1、拼团优惠、限时红包、雇一堆托儿来排队等等,从而刺激人们的消费欲、提高收入。 + + + +## 盈利模式的必要性 + +了解什么是盈利模式之后,我用一些小例子来给大家分享盈利模式的必要性。 + +我从 20 年开始做编程知识分享自媒体,在无收入的情况下免费分享了 1 年的知识,因为没有经验、也没什么人气,根本不考虑变现,纯粹用爱发电。现在回过头来,是因为我自己的自驱力和毅力比较强,才勉强度过了这么一个冷启动期。 + +刚开始有号主朋友让我接广告,我也是拒绝的,那个时候我固执地认为:接广告就是对不起粉丝。 + +但后来我发现涨粉缓慢、也意识到自己的热情在逐渐消退。怎么破局呢?没办法,就试试接一条广告吧。 + +结果呢,接到第一条广告后,由于自己的内疚心理,我会更加想要输出优质的干货内容来 “弥补” 粉丝;并且由于有了广告的收入,我也更乐意投入更多精力来生产内容,就感觉把自媒体当成了自己的事业一样,有了无穷的动力想把它做大做强。 + +现在回过头来,我觉得自己的选择是正确的。我也看到很多和我同期的 UP 主,前期打着为爱发电的名号,后面要么放弃不做了、要么也开始做知识付费了。 + +粉丝需要的是你的内容,需要你给他们带来 **持续的价值** ,这样才能正向发展。就像电视剧插播广告一样,如果没有广告,电视剧都没机会看到,观众会开心么? + +想把自媒体做大,一定要有持续更新的动力;而想把一家企业做大,也一定要有持续积累的资源。 + +像我从 22 年开始做编程知识付费,一方面是为了给自己增加动力去帮助到更多学编程的小伙伴,强行不让自己闲下来;另一方面也是想为自己之后创业积累资源。 + +没有前期资源,怎么去招员工?没有员工,怎么去做产品?没有产品,怎么稳定盈利?没有稳定盈利,企业怎么生存、怎么做得更大? + +就是这么简单的道理。 + +所以,盈利模式对于企业来说是必要的。如果把企业比喻成一辆汽车,那么盈利模式就是汽车的引擎,它为企业的运营提供了动力和支持。就像引擎通过将燃料转化为动力,让车辆行驶;盈利模式通过将企业提供的产品或服务转化为利润,使企业能够持续运转和发展。 + + + +## 如何选择盈利模式? + +盈利模式可以简单地像一杯白水,也可以复杂地像一杯特调。 + +由于本人阅历有限,给大家分享一些基础的、主流的盈利模式,适合绝大多数朋友。 + + + +### 1、直接收费 + +直接向用户收取固定费用来换取产品或服务。 + +比较常见的例子是软件许可证(或者我们小时候买的游戏盘),你想要使用这个软件,就要购买它的使用权。 + +这种模式适用于提供 **价值相对固定** 的产品,在设置定价时要极为谨慎,多参考市场、并根据自身的产品价值来综合定价。 + + + +### 2、广告收入 + +通过直接向流量主、或者向广告商提供广告展示位置来获得收入,是一种成本和风险很低的盈利模式。 + +比如在我们鱼聪明 AI 的导航页面中增加一个 AI 相关产品的推荐位置: + +> 这只是举个例子,事实上我们还没有通过这种方式盈利 + +![](https://pic.yupi.icu/1/image-20230717125736202.png) + +如果我们平台流量本身比较大,有自己的客户,那么就不用走广告商平台,直接跟客户交流具体的广告收费模式利润会更高。比如根据网站的日均访问数 * 天数 * 广告位的价值来收费。 + +但如果平台流量不稳定,本身也没有统计广告的系统,建议接入第三方广告商平台,比如 Google AdSense。不仅不用自己去对接广告客户,还能够很灵活地配置广告位、查看广告的效果收入,很适合个人站长。 + +需要注意的是,对于一个发展中的产品,要平衡好广告数量和用户体验,权衡广告收入和用户流失的比重。 + + + +### 3、订阅制 + +让用户按照一定时间周期来购买产品或服务的使用权。 + +比如绝大多数产品都在用的包月包年会员制,就是最常见的订阅制模式。 + +这种方式适用于频繁更新、能够提供持续价值的产品或服务,比如知识星球、信息订阅等。需要培养用户的使用习惯、提高用户的忠诚度,否则可能效果并不如直接收费模式。 + + + +### 4、 Freemium 模式 + +freemium(免费增值模式),是指产品先提供基本功能或免费服务来吸引用户使用,然后再通过付费的增值功能来实现盈利。 + +这种模式的下游,可能是直接收费或者订阅制模式。核心思想在于:先通过免费服务留住用户,然后建立用户信任、培养用户的使用习惯,再进行收费,会比直接性 “推销” 的转化要好很多。因此这也是最常见的模式之一。 + +我们的鱼聪明 AI 就是这种模式,前期消耗大量成本为用户提供免费服务,相当于投资抢占用户;后期再对用户进行转化变现。 + +不过使用这种方式时,一定要权衡好免费用户与付费用户的占比、转化率和权益,不要像我们一样前期被薅到亏本。 + + + +### 5、手续费 + +平台作为交易或服务的中间人,从每次成交中收取一定比例的费用。 + +最典型的例子就是微信支付,每笔交易都相当于在给微信 “分成”;知识星球也是同样的模式。 + +这种方式的优点是风险低、长期收益大,后期基本上是躺着获利;但缺点就是提供中间服务的系统建设需要成本,要保证服务的质量,而且前期获取客户的信任成本难度较大。 + + + +### 6、授权模式 + +将自己的品牌、技术或知识产权授权给其他企业或个人使用,获得授权费用。 + +SaaS(软件服务)就可以被看作是一种授权模式,为已授权的用户提供部署在云服务器上的软件产品。 + +当然,授权模式的下游也可以是直接收费或者订阅制。比较适合拥有独特技术或知识产权、客单价较高的企业。 + + + +### 7、成果销售 + +通过收集和分析自身产品的成果,并且将成果出售给其他企业来获得收入。 + +这里的成果可以是网站的内容、网站的数据、网站运营分析的结论等。 + +举个例子,某旅游网站肯定有大量的用户旅游兴趣偏好数据,另外一家做旅游产品的公司,说不定就想购买这些数据来改进产品。像一些 AI 绘画类网站,也可以把精美的 AI 绘画打包售卖给研究 AI 绘画模型的公司、或者一些图像展示网站。 + +这种模式适用于拥有大量有价值数据的产品,一般的小产品做不来。不过我们在开发系统时,要始终有这样一个沉淀的意识,保留好网站的所有数据,说不定日后会有意想不到的价值。 + + + +### 8、附加值服务 + +是指在原有产品或服务的基础上提供额外的服务,从而增加收入来源。 + +比较典型的例子是支付宝,产品本身是提供支付服务的,但是现在你打开支付宝就能看到各种充值、外卖等生活服务。 + +像我们的鱼聪明 AI 网站,也完全可以提供 AI 技术咨询服务作为增值服务,只不过我们人力有限,所以没有这么做。 + +需要注意的是,附加值服务要与核心产品相匹配,而不是什么杂七杂八的服务都加到产品里,影响用户体验。 + + + +### 9、合作伙伴模式 + +一种比较高级的模式,通过和他人合作,互相让利,实现互利共赢。 + +有很多可行的合作方式。比如 A 产品是提供求职服务的,B 产品是提供大学生咨询服务的,这两个产品完全可以互相引流推荐,增大各自的用户基数;还可以是 A 公司提供底层技术,B 公司提供上层服务,收益分成。 + +需要注意的是,选择合作伙伴要同时考虑对方给自己的利益、以及自己给对方的利益,建立完善的盈利分成机制。因为一旦利益不对等,未来的合作必然会发生冲突。 + + + +--- + + + + +盈利模式是产品变现的核心。选对了盈利模式,可以让产品持续产生价值;选错了盈利模式,可能会让产品难以为继。 + +记住这几个关键点: + +1. 盈利模式有很多种,要根据产品特点选择 +2. 可以组合多种盈利模式,提供更多选择 +3. 要平衡短期收益和长期发展 +4. 要持续优化盈利模式,根据数据调整策略 +5. 盈利模式要符合用户需求,不能只考虑赚钱 + +在 Vibe Coding 时代,做产品的门槛已经很低了。但是,如何让产品产生价值、持续发展,仍然需要你认真思考盈利模式。 + +加油,找到适合自己的盈利模式,让产品真正产生价值!💪 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/08 产品付费策略设计.md b/Vibe Coding 零基础教程/50 产品变现/08 产品付费策略设计.md new file mode 100644 index 0000000..a1a0949 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/08 产品付费策略设计.md @@ -0,0 +1,404 @@ +# 产品付费策略设计 + +> 让用户愿意为你的产品买单 + + + +大家好,我是鱼皮。先问大家一个问题,如果你花了大量时间做出了一款面向用户的产品,接下来你会选择哪种方式来向用户收取费用呢? + +是直接收费,让用户一次性购买产品的永久使用权? + +还是订阅制,让用户包月包年购买产品的使用权呢? + +以上两种方式,都是在上一篇文章中给大家分享的主流盈利模式。但其实除了这些 "打包付费" 的产品付费机制外,还有一些更灵活的 "按需付费" 机制,比如点数机制、套餐制、单次付费等。 + +在这篇文章中,我会以自己的 AI 产品为例,给大家讲解一种关于付费机制的通用化设计 —— **点数机制**。 + +无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,了解点数机制都能帮你设计出更灵活的付费策略。 + + + +## 什么是点数机制? + +区别于用户直接通过购买或者按时间订阅(比如包月会员)来获取产品或服务,对于点数机制,用户购买的是 **虚拟点数** ,然后可以 **根据需要** 使用这些点数来获取服务。 + +相信大家对这种付费机制并不陌生吧,我们玩手游时充值的钻石、金币、点券,都是典型的点数机制。 + +![](https://pic.yupi.icu/1/image-20230719131457025.png) + +而且毫不夸张地说,现在绝大多数国产手游,都会采用这种机制。 + +为什么呢? + + + +## 为什么选择点数机制? + +这里我会分别从产品和开发两个角度来介绍点数机制的优势。 + + + +### 产品角度 + +可以从我们自己的角度出发来思考点数机制的优势,比如问问自己:我在什么情况下会选择充值点数,而不是购买会员? + + + +#### 1、更灵活 + +首当其冲的理由肯定是更加灵活。我可以用点数有选择地购买游戏中的多个商品,比如一半买装备、一半抽奖等,从而用同样的金额带来对自己来说最大的收益。 + +我们的 AI 产品支持用户直接购买点数,并且提供了多种不同的点数套餐,用户可以灵活地使用这些点数来进行 AI 对话、AI 绘画等不同服务。 + +![](https://pic.yupi.icu/1/image-20230719144924694.png) + + + +#### 2、降低试错成本 + +在我还没有了解清楚一款产品的功能、或者对一款产品 “上瘾” 前,我不会轻易地购买价格更高的会员。但是,有可能会乐意先付一点儿小钱来体验一下付费功能。 + +使用点数机制,就为用户提供了更小的试错成本。比起直接用高价将用户拒之门外,先让用户体验到付费功能的价值,他们可能会更乐意继续付费,从而增加产品的收入。 + +这种做法还有一个额外的好处:侧重于用产品的功能,而不是花里胡哨的营销手段(百年会员)来吸引人,更有利于产品的口碑。 + +我们的 AI 产品也参考了很多手游的套路,最低只需 6 元就可以购买点数。 + + + +#### 3、降低心理成本 + +在我花更高的固定价格去购买产品前,我肯定会考虑很多方面:比如我会用多久?会用到哪些功能?这些功能是否对得起这些价格? + +用户做决策所需的思考越多,购买意愿就越不固定。 + +而使用点数机制,我不用考虑很多,比如就用 1 元充 10 点,购买意愿就会更强。 + +此外,点数机制将价格抽象为虚拟点数,让用户能够更专注于所购买的产品本身,而非金钱上的支出,在消耗点数时也会更自然一些。 + + + +#### 4、提升用户粘性 + +点数机制能够提升用户的粘性和留存率。一旦我购买了点数,就会不自觉地产生 “我要把这些点数花完” 的心理,就会持续使用这款产品,从而进一步增强对这款产品的依赖。 + +在我们的 AI 产品中,为了留存用户、培养使用习惯,支持让用户每日免费领取一定点数,这种做法对产品前期尤为重要。 + +![](https://pic.yupi.icu/1/image-20230719145440147.png) + + + +#### 5、适应多样化的业务 + +如果一个系统有很多功能,对用户来说,肯定不希望自己在某个功能的使用上都存在独立的限制,比如: + +- AI 对话剩余 10 次 +- AI 绘画剩余 5 次 +- AI 写书剩余 0 次 + +如果用户只想用 AI 写书功能,那么比起买打包的套餐,肯定更希望直接买 AI 写书次数,产品就需要支持这个购买选择。 + +而如果用户想同时用 AI 绘画和 AI 写书功能,那么肯定更希望买个针对这两个功能的打包套餐,产品也需要支持这个购买选择。 + +随着功能的增多,需要支持的购买选择将指数级增长,各种购买选择的定价也会越来越难统一。 + +而如果把上述的所有次数都统一为 “点数”,那么对于用户来说就更好理解,不用关心每个功能还剩几次、也不用精打细算怎么买最实惠,可以自由地分配点数。 + +对于公司来说,不仅可以简化定价的过程,还能够通过各功能或各业务的搭配,实现整体销售额的提升。腾讯的 Q 币就是典型的例子,任何一个腾讯下的产品,都有可能吸引你去充值它。 + + + +### 研发角度 + +从研发角度来看,我认为点数机制最大的优势在于 **通用化** 。 + +而通用化设计带来的好处又分为:统一概念、简化开发、提升可扩展性。 + + + +#### 1、统一概念 + +不知道大家是否听说过 KISS 原则(Keep It Simple, Stupid),保持简单、越简单越好。 + +在系统研发的过程中,出现的概念越少,越有利于系统的设计、开发和维护。 + +相比起让产品的各功能分别对应不同的使用次数限制,使用 **点数** 这个统一的通用概念,更便于研发和产品同学的交流和理解。 + +举个极端的例子: + +- AI 对话功能消耗 1 个 “对话币” +- AI 绘画功能消耗 2 个 “绘画币” +- AI 写书功能消耗 3 个 “写书币” +- 用户 A 还剩 2 个 “对话币”、3 个 “绘画币”、 9 个 “写书币” +- 用户 A 还能使用 2 次 AI 对话、1 次 AI 绘画、3 次 AI 写书 + +大家就需要同时关注 3 种功能及其对应的虚拟代币。 + +而如果统一为点数的概念,上述信息就很好理解了: + +- AI 对话、AI 绘画、AI 写书功能分别消耗 1、2、3 点数 +- 用户 A 还剩 14 点数 + + + +#### 2、简化开发 + +最开始的时候,因为系统的功能还比较少,我们打算每个功能分别限制用户的可使用次数。比如用户每天只能使用 10 次 AI 对话、5 次 AI 绘画。 + +那么在编写代码时,就要分别在 AI 对话和 AI 绘画功能中都增加 **特定的** 校验和统计逻辑,比如: + +```java +// AI 对话功能 +void doChat() { + // 获取并校验用户剩余的 AI 对话次数 + chatLeftNum = user.getChatLeftNum() + if (chatLeftNum < 1) { + throw new Exception("AI 对话次数不足") + } + // 操作成功,AI 对话次数 - 1 + chatLeftNum--; + chatLeftNum = chatLeftNum - 1; +} + +// AI 绘画功能 +void doDraw() { + // 获取并校验用户剩余的 AI 绘画次数 + drawLeftNum = user.getDrawLeftNum() + if (drawLeftNum < 1) { + throw new Exception("AI 绘画次数不足") + } + // 操作成功,AI 绘画次数 - 1 + drawLeftNum = drawLeftNum - 1; +} +``` + +此外,数据库中要存储更多的信息,比如: + +| 用户 id | AI 对话次数 | AI 绘画次数 | 其他 | +| ------- | ----------- | ----------- | ---- | +| 1 | 1 | 5 | ... | +| 2 | 2 | 6 | ... | + +可想而知,随着系统功能数的增多,相似但不完全相同的校验逻辑会越来越多,系统会越来越难以维护;而且数据库也要不断增加新的列、占用更多存储空间。 + +如果使用点数机制,可以把各种调用次数变量(chatLeftNum 和 drawLeftNum)统一为点数(points),不同的功能消耗的点数不同。 + +示例代码如下: + +```java +// AI 对话功能 +void doChat() { + // 获取并校验用户剩余的点数 + points = user.getPoints() + if (points < 1) { + throw new Exception("AI 对话次数不足") + } + // 操作成功,点数 -1 + points = points - 1; +} + +// AI 绘画功能 +void doDraw() { + // 获取并校验用户剩余的点数 + points = user.getPoints() + if (points < 2) { + throw new Exception("AI 绘画次数不足") + } + // 操作成功,点数 -2 + points = points - 2; +} +``` + + + +还可以把点数的校验和消耗逻辑统一抽象为通用的公共方法,示例代码如下: + +```java +// 检查剩余点数 +// 参数 type 表示功能 +void checkPoints(type) { + needPoints = 1; + if (type === "draw") { + needPoints = 2; + } + points = user.getPoints(); + if (points < needPoints) { + throw new Exception("剩余点数不足") + } +} + +// 消耗剩余点数 +// 参数 type 表示功能 +void usePoints(type) { + needPoints = 1; + if (type === "draw") { + needPoints = 2; + } + points = user.getPoints(); + // 减少点数 + points = points - needPoints; +} +``` + + + +有了这 2 个公共方法后,原本的代码可以简化为: + +```java +// AI 对话功能 +void doChat() { + checkPoints("chat"); + ... + usePoints("chat") +} + +// AI 绘画功能 +void doDraw() { + checkPoints("draw"); + ... + usePoints("draw"); +} +``` + + + +当然,这还不是最佳实践,因为代码中仍然包含了 “硬逻辑” —— 根据 type 来区分消耗的点数。 + +我们可以编写一个 json 配置文件,专门存放所有功能对应的点数消耗,示例代码如下: + +```json +[ + { + "type": "chat", + "usePoints": 1 + }, + { + "type": "draw", + "usePoints": 2 + }, +] +``` + + + +再编写一个公共方法,根据功能(type)从该配置文件中取出对应的点数消耗,示例代码如下: + +```java +int getUsePoints(type) { + list = readJSON("配置文件") + for (item : list) { + if (item.type == type) { + return item.usePoints; + } + } + return 0; +} +``` + + + +然后公共的点数校验和消耗方法,就可以不用再写 if else 了! + +```java +// 检查剩余点数 +// 参数 type 表示功能 +void checkPoints(type) { + needPoints = getUsePoints(type); + points = user.getPoints(); + if (points < needPoints) { + throw new Exception("剩余点数不足") + } +} + +// 消耗剩余点数 +// 参数 type 表示功能 +void usePoints(type) { + needPoints = getUsePoints(type); + points = user.getPoints(); + // 减少点数 + points = points - needPoints; +} +``` + + + +之后如果我们需要增加新的功能,只需要在 json 配置文件中增加一个元素即可,比如: + +```json +{ + "type": "writeBook", + "usePoints": 2 +} +``` + + + +而且无论后续系统增加多少新功能,数据库中始终只需要存储用户剩余的点数,不用反复增加新的列。极大地简化了开发! + + + +#### 3、提升可扩展性 + +一般来说,越通用的逻辑,可扩展性越强。 + +如果我们不使用点数机制,而是分别给每个功能增加对应的次数限制,如果要在这个功能内部再增加次数消耗的区分,逻辑就会越来越复杂。 + +举个例子,AI 绘画功能还支持额外功能以图生图,如果只使用 AI 绘画,消耗 1 次;如果要额外使用以图生图功能,消耗 2 次;那么如果还有额外的功能,要消耗几次呢?会不会出现需要消耗 1.5 次的情况呢?如果次数不支持小数,怎么办呢? + +很有可能系统随着上述逻辑的增多,慢慢走到一个死胡同,无法继续扩展新功能。 + +如果使用点数机制,我们可以把数字的基数放大,比如说 1 次对应 10 个点数,这样就有利于我们给额外的功能设置额外的点数消耗。比如 AI 绘画消耗 20 点数,额外使用以图生图增加 10 个点数,更有利于系统的扩展。 + + + +## 点数机制的应用 + +因为点数机制的上述优势,我们的 AI 产品选择它作为主要的付费制度。 + +当然,点数机制也是存在缺点的,比如不够直观、价值不固定等。而且对于 “营销 > 价值” 本身的产品来说,给用户一定的试错成本,可能反而不如会员订阅制的销售额多。 + +所以是否要运用点数机制,需要结合实际情况和产品性质来综合考虑。 + +像我们的 AI 产品,是同时结合了点数机制、会员制和套餐制三种制度,为用户提供更全面的选择。比如用户可以成为会员每日领取更多点数、享受更多权益;也可以通过套餐优惠获得更多点数;同时也兼具了点数机制本身带来的通用性和灵活性。 + +此外,点数机制本身就是一种 **通用化设计** ,不仅可以作为付费制度,还可以应用到很多不同的场景,比如: + +- 电商平台中,消费者可以通过购物积分兑换其他商品。 +- 外卖平台中,用户可以通过点餐积分兑换折扣优惠。 +- 教育平台中,学生可以看课程得积分,用于兑换特定奖励。 + + + + + + +## 写在最后 + +点数机制是一种灵活且通用的付费策略设计。它不仅能提升用户体验,还能简化系统开发,提高可扩展性。 + +记住这几个关键点: + +1. 点数机制更灵活,降低用户的试错成本和心理成本 +2. 点数机制能适应多样化的业务需求 +3. 点数机制能统一概念,简化开发 +4. 点数机制要结合实际情况使用,不是万能的 +5. 可以组合点数机制、会员制、套餐制等多种方式 + +在 Vibe Coding 时代,实现点数机制的代码可以让 AI 帮你生成。但是,如何设计出合理的付费策略,让用户愿意为你的产品买单,仍然需要你认真思考。 + +加油,设计出让用户满意的付费策略!💪 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/09 SEO 搜索引擎优化实战.md b/Vibe Coding 零基础教程/50 产品变现/09 SEO 搜索引擎优化实战.md new file mode 100644 index 0000000..d92f659 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/09 SEO 搜索引擎优化实战.md @@ -0,0 +1,227 @@ +# SEO 搜索引擎优化实战 + +> 让更多人发现你的产品 + + + +大家好,我是程序员鱼皮。我们团队做的程序员面试刷题网站 [面试鸭](https://www.mianshiya.com/) 上线不到半个月的时候,就被百度等各大搜索引擎收录和推荐了! + +效果显而易见,用户搜索 “面试鸭” 的时候,第一个看到的就是我们自己的网站,从而给网站增加流量: + +![](https://pic.yupi.icu/1/image-20240815102430905.png) + +关于如何让搜索引擎更快地收录网站,其实是一门很深的学问,还有一个专业术语叫 SEO。对于个人站长来说,搜索引擎的流量是至关重要的,大家应该都希望自己的网站能够被更多人看到吧?暂且不说收益,有个访问量大的网站,写简历和面试的时候也能吹一波牛皮~ 所以我建议程序员朋友们最好对 SEO 有一定了解。 + +今天这篇文章,我就以自己的面试鸭网站为例,给大家分享一些 SEO 实用技巧,让大家的网站都能更快地被搜索引擎收录。同时,我还会介绍 AI 时代的新概念 —— GEO(生成式引擎优化),帮助你的产品在 AI 搜索时代也能被更多人发现。 + +无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,掌握 SEO 和 GEO 的方法都能帮你获得更多流量。 + +⭐️ 也可以观看视频讲解,热乎的:https://www.bilibili.com/video/BV1tz421i7Q1 + + +## 鱼皮 SEO 干货分享 + +### 一、什么是 SEO? + +SEO 全称为 Search Engine Optimization,即搜索引擎优化,使网站更容易被搜索引擎收录和呈现,可以让更多人通过百度、谷歌之类的搜索引擎发现你的网站,从而提升网站的访问量和知名度。 + +在学习如何进行 SEO 优化前,我们先简单了解 SEO 的流程,也就是:搜索引擎是如何发现你的网站并且让用户搜索到的? + + + +### 二、SEO 的流程 + +整个 SEO 过程可以分为四个主要阶段:抓取、收录、索引和排名。下面我就来详细讲解一下这四个步骤。 + +#### 1、抓取 + +抓取是 SEO 流程的第一步,搜索引擎会派出一群爬虫程序(俗称蜘蛛),它们会在互联网上到处爬行,访问各个网站,并抓取网页的内容。这些蜘蛛会按照链接从一个页面跳转到另一个页面,尽可能地遍历整个网站。 + +#### 2、收录 + +抓取完成后,搜索引擎会对网页内容进行分析,并决定是否将该页面收录到它的数据库中。被收录的页面才能在用户搜索时显示出来,因此,确保页面被收录是 SEO 中的关键一步。有的网站虽然有很多链接和内容,但是只要搜索引擎的蜘蛛不喜欢、不收录,那么别人即使专门对着你的网站搜,都搜不出来。 + +#### 3、索引 + +索引是指搜索引擎将已收录的网页内容进行整理和分类,并建立一个巨大的索引库。这个过程类似于给每个网页打上标签,以便在用户搜索时,搜索引擎能够迅速找到与搜索词相关的网页。 + +比如我们的面试鸭网站内容中包括:Java面试题库、前端面试题库、C++面试题库,那么这几个词就有可能被设置为索引。用户搜索内容时如果包含了这些词,就有可能搜索我们的网站。 + +#### 4、排名 + +现在网站那么多,同样的索引也非常多,如何保证用户优先搜到我们的网站呢?这就涉及到 SEO 的最后一步 —— 排名。 + +当用户在搜索引擎中输入关键词时,搜索引擎会根据其算法,从索引库中挑选出最相关的网页,并 **按照相关性、权重、网站质量** 等因素进行排序,决定哪些网页出现在搜索结果的前几页。 + +这就是 SEO 的流程,我下面要分享的 SEO 优化技巧,也都是围绕这些流程展开。 + + + +### 三、如何进行 SEO 优化? + +#### 1、关键词优化 +关键词是指用户在搜索引擎中输入的词汇,可以通过在网站的 HTML 头信息中设置关键词(Keywords)和描述(Description)等信息,来增加网站的索引、并提高网页在相关搜索中的排名。 + +关键词的选择需要精确并且跟网站内容强相关,避免过度堆砌关键词,以免被搜索引擎判定为作弊行为。 + +比如要做一个面试刷题网站,可以设置下列关键词和描述: + +```html + + +``` + + + +#### 2、网站结构优化 +网站结构优化分为 2 点:整站页面结构优化和每个页面的内容结构优化。 + +对于整个网站,页面嵌套的层次应当尽量扁平化、尽量缩短页面层级,以减少爬虫抓取的难度。 + +举个例子,下面两种网站结构,你觉得哪种结构的页面更容易被爬虫全部访问到呢? + +![](https://pic.yupi.icu/1/image-20240815112845394.png) + +答案不言而喻,对于你想更快被搜索引擎发现的重要页面,应该尽可能缩短跳转到该网站的路径,并且适当多增加一些跳转到该页面的入口。 + +对于每个页面,应当有明确的层次结构,可以使用合理的标题标签(如一级标题 `

` )使页面内容更加易于索引。 + + + +#### 3、友情链接 + +我大学刚开始做个人网站的时候,就是通过友情链接的方式来增加网站的权重(虽然效果有限)。操作方法很简单,你的网站上添加别人网站的链接,别人的网站添加你的网站的链接,你们双方的网站互相推荐,就更容易提升在搜索引擎中的排名。 + +友链背后的原理也很简单。很多搜索引擎都会按照权重对网站进行排名,权重是怎么计算的呢?一种很简单的算法(Page Rank),就是每个网站都有自己的票数,每有一个别人的网站添加了跳转到你的网站的友情链接,就相当于给你的网站投一票,得票数高的网站就能获得更高的权重和排名。友链就相当于互相投票,比 1 票都没有的网站要好。 + +![](https://pic.yupi.icu/1/image-20240815113641780.png) + +当然,这种互相推荐的方式需要谨慎使用,避免过度交换链接,可能会导致权重分散。 + + + +#### 4、Sitemap 文件 +Sitemap 网站地图是一个列出了你网站所有页面的文件,通常放在网站的根目录下,或者通过 robots.txt 文件指定其位置。它可以帮助搜索引擎更快速地了解你网站的结构,并抓取你希望优先收录的页面。 + +就相当于你给爬虫发了一份地图,爬虫就不容易迷路,也不容易错过你网站的重要页面。 + +对于结构比较简单的网站,使用静态的、固定不变的 Sitemap 就足够了。如下图: + +![](https://pic.yupi.icu/1/image-20240815114215436.png) + +但对于内容持续更新的网站,还有更高级的操作,就是利用程序自动生成动态的 Sitemap,比如把每天新增的题目生成为一个 Sitemap 文件,便于让爬虫更快发现最新的内容。 + +此外,有些搜索引擎还支持主动上传提交 Sitemap 文件,可以进一步缩短网站被发现和收录的时间。 + + + +#### 5、SSR 服务端渲染 + +注意,这里的 SSR 不是我们玩游戏抽卡说的那个! + +SSR 服务端渲染是 SEO 最为有效的技术之一。是指在服务器端生成 **完整的 HTML 页面** ,并将其直接发送到浏览器。相比传统的前端 AJAX 动态请求数据的渲染方式,SSR 能够让搜索引擎更容易抓取到完整页面内容,从而提升 SEO 效果。 + +举个例子,如果是动态请求数据的前端网站,爬虫看到的网页内容可能是残缺不全的,如下图: + +![](https://pic.yupi.icu/1/image-20240815114606517.png) + +因为浏览器是从服务器拉取到网页后,再加载 JS 脚本,最后才发送请求来获取数据。 + +而如果使用了服务端渲染,服务器会完成对数据的请求,并且将数据拼装到页面里,再返回给前端,爬虫看到的网页内容更完整,如下图: + +![](https://pic.yupi.icu/1/image-20240815114910820.png) + +服务端渲染的效果虽然好,但也会加重服务器的压力,而且开发成本通常会更高。比如我们的面试鸭使用 Next.js 框架开发,开发过程中也踩了不少坑。 + +哦对了,用 PHP 来开发服务端渲染的网站是很方便的,这可能也是为什么以前 PHP 那么流行的原因之一。 + + + +#### 6、SSG 静态站点生成 + +和 SSR 有点类似,SSG 是 SEO 优化的另一大杀器。是指在构建网站时,预先生成所有页面的 **静态 HTML 文件** ,并将其直接部署到服务器上。当用户访问网站时,直接获取到生成好的 HTML 文件即可,相比 SSR 服务端渲染,都不需要服务器再临时去请求数据了。 + +这种方法不仅大大提高了页面加载速度,而且使得搜索引擎能够更快、更完整地索引所有页面。所以很多博客站点生成器(比如 Hugo、VuePress、Hexo)都是将写好的文章打包生成为静态 HTML 后,再部署到服务器上。 + +当然,SSG 也不是银弹,适用于内容较为固定、更新频率较低的网站,如个人博客等。静态网站本质上就是一种缓存,如果网页内容频繁变化,就要频繁更新这个文件,也会有不小的成本。 + +所以我们可以想到一种更高级的策略:SSR + SSG 结合!内容相对固定的网页使用静态生成,内容变化的网页使用服务端渲染,不需要 SEO 的网页纯客户端渲染即可。 + + + +#### 7、砸米 + +注意,以上方式并不保证绝对有效,只是增加搜索引擎收录和排名优化的概率,SEO 策略是需要持续调整和长时间验证的。 + +如果团队内没有懂 SEO 的技术人员,又想快速让自己的网站被搜索引擎推荐,那就只能 “砸米” 了,简单粗暴,就是花钱买广告,让你的网页在搜索结果的前几名出现。很多公司也都是这么做的,但对于没有收益的个人站长来说,还是老老实实用前面推荐的方式吧。 + + + +## AI 时代的 GEO:生成式引擎优化 + +随着 ChatGPT 等 AI 对话工具的普及,越来越多的用户开始使用 AI 来搜索信息,而不是传统的搜索引擎。这就催生了一个新的概念 **GEO(Generative Engine Optimization,生成式引擎优化)**。 + + + +### 什么是 GEO? + +GEO 是指优化你的内容,使其更容易被 AI 搜索引擎(如 ChatGPT、Perplexity、Gemini 等)理解和引用。当用户向 AI 提问时,AI 会从互联网上抓取相关内容,然后生成回答。如果你的网站内容被 AI 引用,就能获得更多曝光。 + + + +### GEO 和 SEO 的区别 + +- SEO:优化网站,让传统搜索引擎(如百度、谷歌)更容易收录和排名 +- GEO:优化内容,让 AI 搜索引擎更容易理解和引用 + + + +### 如何做好 GEO? + +1)内容结构化 + +AI 更喜欢结构清晰的内容。使用标题、列表、表格等方式组织内容,让 AI 更容易提取关键信息。 + +2)提供权威信息 + +AI 更倾向于引用权威、准确的信息。确保你的内容有数据支撑、有来源引用,提高内容的可信度。 + +3)使用自然语言 + +AI 理解自然语言的能力很强。用通俗易懂的语言写作,避免过度专业化的术语,让 AI 更容易理解你的内容。 + +4)回答用户问题 + +AI 搜索通常是以问答的形式进行的。在内容中直接回答用户可能提出的问题,比如 “如何做 XX”、“XX 是什么”,这样更容易被 AI 引用。 + +5)保持内容更新 + +AI 倾向于引用最新的内容。定期更新你的网站内容,保持信息的时效性。 + +6)提供完整的上下文 + +AI 需要理解内容的上下文才能准确引用。确保每篇文章都有完整的背景介绍和详细的说明,不要让读者(和 AI)感到困惑。 + + + +## 写在最后 + + +在 Vibe Coding 时代,用 AI 做产品已经很容易了。但是,如何让更多人发现你的产品,仍然需要你掌握 SEO 和 GEO 的方法。 + +加油,让你的产品被更多人发现吧~ + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/我的自媒体涨粉运营之路.md b/Vibe Coding 零基础教程/50 产品变现/我的自媒体涨粉运营之路.md new file mode 100644 index 0000000..ed142a6 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/我的自媒体涨粉运营之路.md @@ -0,0 +1,345 @@ +# 我的自媒体涨粉运营之路 + +> 从 0 到 200 万粉的真实经历 + + + +大家好,我是鱼皮。98 年的小弟,之前在腾讯全干开发,现在是全网 200 万粉的 AI 编程知识博主 + 创业者。 + +这篇文章,我想跟大家聊聊我这 9 年的经历:从大学自学编程 → 女朋友跟别人跑了 → 进入腾讯 → 离职创业 → 做自媒体从 0 到 200 万粉 → 产品破产 → 公司产品月活过百万。有高光时刻,也有至暗时刻;有成功的经验,也有血泪的教训。 + +如果你: +- 想通过自媒体快速涨粉或靠副业提升收入 +- 想知道如何从 0 开始做起一个事业 +- 对编程学习、求职、AI 技术感兴趣 +- 正在创业或想创业,需要一些真实的经验参考 + +那这篇文章应该能给你一些启发。 + +如果你之前完全没听说过、或者只是半路关注,那正好,让我给你讲一个从普通程序员到自媒体创业者的真实故事。 + + + +## 我的故事 + +### 大学:女友跑了,但我拿到了第一 + +16 年进入大学后,我开始自学 Java、前端、Python、Go 等多种编程技术。 + +那时候的我,真的是个卷王。白天上课,晚上泡在图书馆敲代码,凌晨回宿舍是常态。作为工作室负责人,我带队给学校建设了几十个网站,用赚的钱给自己买了第一台显示器,那种靠自己 “手艺” 赚钱的感觉,真的很爽。 + +![](https://pic.yupi.icu/1/IMG_20171111_142957%E4%B8%AD.jpeg) + +但代价也是惨重的。 + +长期高强度学习 + 熬夜,我的肠胃出了问题,有段时间饭都吃不下去,只能靠汉堡炸鸡外卖度日。更惨的是,女朋友因为我天天不陪她、只顾着敲代码,最后跟别人跑了。 + +那段时间真的很痛苦,我甚至怀疑过自己这么拼到底值不值得。 + +但既然选择了这条路,就没有回头的余地。我继续埋头苦干,最后以专业第一的成绩拿到了国家奖学金、挑战杯竞赛国奖和上海市特等奖、上海市优秀毕业生。大三还跟老师出版了《区块链智能合约技术与应用》教材。 + +现在想想,那种为了一个目标全力以赴的感觉,真的很纯粹。虽然失去了很多,但也收获了更多。 + + + +### 腾讯:211 本科生在清北堆里的逆袭 + +19 年校招时,我拿到了多家大厂 offer,最终选择腾讯。 + +![](https://pic.yupi.icu/1/IMG_20210520_102141%E4%B8%AD.jpeg) + +说实话,当时压力很大。我只是 211 本科,身边的实习生清一色清北复交的大佬,学历、背景都比我强。记得第一次公司内部封闭培训时,当我介绍学历时,大家看我的眼神就像看一条 “臭狗”。 + +但我没有失去信心,既然学历拼不过,那我就拼时间、拼努力。别人下班了,我还在公司学习内部文档;别人周末出去玩,我在研究项目代码。最拼的那几天,因为学得太晚没有地铁了,我甚至买了个行军床,直接住在公司。 + +> 住在公司的体验真心差,保洁阿姨大早上 6 点多就会把你弄醒 + +功夫不负有心人,我最终以组内第一的成绩通过了转正答辩,并斩获 SSP 最高级别的 offer。 + +在职腾讯近 4 年,我主导 BI 项目研发、参与大数据研发,曾获腾讯内部应用开发竞赛冠军、5 星优秀员工、晋升绿色通道。工作两年半就担任了新人导师。 + +![](https://pic.yupi.icu/1/-33f2aa793b0cc6e2.jpg) + +刚工作后,我用赚的钱给家里买了台电视、给爸妈买了按脚仪。那一刻,我觉得所有的付出都值了。 + + + +### 自媒体:从抖音 18 播放量到全网 200 万粉 + +我最开始的自媒体尝试是做短视频。 + +那是疫情期间,我在抖音上开了个账号叫 “面试君主”,专门分享程序员面试题。第一个视频我做了三四个小时,结果播放量只有整整 18! + +虽然打击很大,但我没有放弃,一连坚持了一个多月,每天至少更新一个视频。最高播放量的视频达到了 1800,收获了人生中第一批 100 多个粉丝。 + +后来我换了个思路,注册了新号【程序员鱼皮】,分享自己的真实经历。结果第二天醒来,消息 99+,我超级激动! + +但打开评论区,心情立刻跌入谷底:清一色的怀疑、鄙视、甚至谩骂。“又一个营销号”、“骗人的吧”...... 那些恶评点赞数都快接近我视频点赞数了。 + +当时我的心理素质不够强,就删掉了评论。现在想想,真的要感谢当时骂我的朋友们,因为互动率真的高啊(笑)。 + +20 年国庆期间,我做了另一个决定。 + +那天我刚打完游戏,无所事事。进腾讯一年后,我发现自己似乎已经懒得做工作之外的事情了,每天下班后还耗费精力在游戏世界里浑浑噩噩。 + +我想,有没有一种外力,可以让我重燃大学时奋斗的热情? + +想到这里,我游戏装备都懒得卖了,立刻打开公众号《程序员鱼皮》,写下了第一篇文章。 + +**从那天起,我再也没时间卖游戏装备了。** + +刚开始我傻傻地以为想要涨粉,就要多写文章,于是给自己定下了每天 1 篇的目标。在粉丝没几个的情况下,硬是生怼了十几篇文章,质量不高、阅读不高、粉丝也没涨几个。 + +很快,我意识到这样下去得完犊子,必须要改变方法! + +于是我开始混圈子,向成功的前辈交流、学习、模仿;开拓渠道,把同一篇文章、同一个视频发布到多个平台;甚至人生第一次直播,十几个观众,我不知道该讲啥,就一直重复 “大家好,这是我第一次直播”。 + +**最狠的是,我曾经连续 100 多天,每天下班后直播到凌晨带大家敲代码。** + +说真的,压力很大。听说当程序员容易脱发、自媒体容易脱发,那这两个加起来岂不是发如雨下?我的头发是真真实实地在持续哭泣! + +但我相信:看似一个人的火爆是偶然,对于知识创作者来说,更多的是 **厚积薄发**。有东西的人,就是有东西,只需要打开一个开关,光芒就会绽放。 + +就这样,靠着坚持和死磕,至今累计创作近千篇、千万字,全网积累了 200 万+ 的关注。 + +后来评论区的怀疑和谩骂越来越少,甚至到现在很少再出现差评了。有时候我还挺想念那些骂我的日子,毕竟互动率真的高(开玩笑)。 + +![](https://pic.yupi.icu/1/15c18871868fe83f_edit_64834263570835%2525E5%2525A4%2525A7.jpeg) + + + +### 知识付费:从质疑到认可的 3 年 + +22 年,我开通了知识付费圈子,也就是现在的 [编程导航](https://codefather.cn)。 + +刚开始有很多质疑,我完全能理解。但我坚持了下来,因为我不想做那种收割一波粉丝、赚一桶金就不再维护内容的事,良心会痛。 + +这 3 年来,我带大家做了十几套完整的原创项目教程,包括 AI 应用开发、微服务架构、高并发系统、轮子项目等等。很多项目都是十几万字的文字教程 + 几十小时的视频讲解,期间还出版过项目实战教程书籍,我是真的在用心做这件事。 + +![](https://pic.yupi.icu/1/mmexport1730163221798_edit_1144980604320076.png) + +很多同学通过这些项目学习,成功拿到了大厂 offer。每次看到大家上岸的消息,我真的超开心。 + +![](https://pic.yupi.icu/1/1762859442735-46ca4e62-9331-4c40-b5d7-84a5a192e492.png) + +如今 [编程导航](https://codefather.cn/) 已经成为国内最大的编程学习交流圈之一,累计帮助几十万名程序员朋友提升技术和项目能力。 + +![](https://pic.yupi.icu/1/image-20251217143826194.png) + + + +### 创业:从 5 万用户到破产,只用了一个月 + +23 年,我做了人生中最重要的一个决定:离职创业。 + +原因有 2 个: + +1)AI 风口来了,我想试一试 + +2)在公司成长空间有限,我想做做自己感兴趣的事。 + +当时公司像个笼子一样,框住了我这只小鸟儿。我有很多想法,但工作占用了我每天绝大多数时间,甚至还有同事举报我做自媒体。 + +我不想被束缚,我想做自己热爱的事情。 + +![](https://pic.yupi.icu/1/IMG_20230406_144451%E4%B8%AD.jpeg) + +24 岁那年,我组了个 4 人小队,在毫无经验的情况下,开启了一场艰难的创业之旅。 + +![](https://pic.yupi.icu/1/IMG_20230628_230332%E4%B8%AD.jpeg) + +**老实说,创业这两年多,我经历了之前 20 多年人生都从未有过的打击,甚至比高考的失利还要大。** + +刚开始,我热情高涨、信心满满。带着仅有的一名前端同学从 0 开始做了个 AI 助手平台《鱼聪明 AI》,用了一个月左右上线。 + +![](https://pic.yupi.icu/1/image-20251217144043123.png) + +结果很顺利,上线一周用户数就突破了 5 万!我开始幻想自己能够成为 “李” 尔盖茨了,甚至还带着同事们去北京团建游玩。 + +**但变化来得太突然了。** + +仅仅一个月后,产品就破产了,入不敷出! + +AI 产品遭到封杀、同类产品疯狂内卷、前期白送了大量会员被薅羊毛...... 这给了我沉重的打击,毕竟这是公司的第一个产品、做了这么久的产品、给予了这么大希望的产品,突然就破产了。 + +都说要拥抱变化,我特么的拥抱不住啊!!! + +![](https://pic.yupi.icu/1/Videoframe_20250306_141255_com.huawei.photos%E5%A4%A7.jpeg) + +后来我冷静下来,意识到在没有稳定团队的情况下,追求爆款的代价太大了,不如踏踏实实做点有长期价值的事。 + +于是我们开始做各种工具类产品:[老鱼简历](https://www.laoyujianli.com/)、[代码小抄](https://codecopy.cn/)、[剪切助手](https://jianqiezhushou.com/)、[面试鸭](https://www.mianshiya.com/) 等等。同时持续完善编程导航,带大家做了十几套完整的项目教程。 + +**这期间的压力大家可能无法想象。** + +每月巨额的开销、团队的磨合、产品的迭代、市场的竞争、恶意的诋毁、网暴、举报、造谣、欺诈...... 这些电视剧里才会出现的剧情真实地发生在了我身上。 + +还有身体的崩溃。长期熬夜、直播耗气、饮食不规律、精神压力大,导致我的肠胃经常疼痛,甚至专门住院做了检查。头发也掉得贼拉快,直接上图: + +![](https://pic.yupi.icu/1/mmexport1744270908127%E4%B8%AD.jpeg) + +我记录下当时的日记,用一个词形容就是 “麻了”。各种事情带来的精神压力真的太大了,就像达摩克里斯之剑一直悬在头顶。 + +![](https://pic.yupi.icu/1/mmexport1730442587636.jpg) + +毫不夸张,那段时间我 emo 的天数可能比整个 “前半生” 都要多。 + +但我没有放弃。 + +刚创业时,我很害怕踩坑、害怕失败。但是经历了越来越多的失败后,我发现自己竟然有点儿 “上瘾了”!因为每次失败,都会有相应的成长: + +- 产品破产,让我有了更多对产品和商业的思考 +- 招人不慎,会让我更谨慎地调整招聘标准 +- 合同被违约,会帮我们提升法律意识 + +现在的我,越来越享受踩坑的过程,心态也更稳定了。我经常安慰自己:哥就是来交学费的嘛,哪怕最后公司干黄了,也是一段独特的经历不是么? + +![](https://pic.yupi.icu/1/mmexport1713100066833%E5%A4%A7.jpeg) + + + +### 现在:好像又回到了原点 + +如今,我自己的科技公司鱼鸢网络,团队已经 10 多人。 + +![](https://pic.yupi.icu/1/IMG_20241219_163148_edit_339910632357506%E4%B8%AD.jpeg) + +经过两年半的沉淀,我们做出了编程导航、面试鸭、老鱼简历、面多多、AI 导航、剪切助手、代码小抄、算法导航、框框大学等 10 多个产品。其中 [面试鸭刷题神器](https://mianshiya.com) 现在已经有几十万用户,我们团队各个产品矩阵加起来月活稳定过百万。 + +![](https://pic.yupi.icu/1/%E9%9D%A2%E8%AF%95%E9%B8%AD%E5%88%B7%E9%A2%98%E7%A5%9E%E5%99%A8%E7%83%AD%E9%97%A8%E5%85%AB%E8%82%A1%E6%96%87.png) + +但有趣的是,**我感觉自己好像又回到了原点。** + +我每天还是在对着键盘敲敲敲:写文章做视频、写编程和 AI 教程、学习新知识、调研需求写文档。你完全想象不到这是一个团队管理者在做的事情,我经常有一种魂穿到两年半之前的感觉。 + +![](https://pic.yupi.icu/1/IMG_20240131_104457_edit_1116282194475497%E4%B8%AD.jpeg) + +为什么还要自己做这些? + +首先,我就是喜欢写点儿东西、做点儿东西,哪怕在别人眼里看起来是瞎折腾,我也乐在其中。 + +其次,我不想让自己只是一个管理者,而是希望保持自己的技术水平、以及持续输出的能力。即使有一天公司真的倒闭了,我也有能力回到求职市场跟别人竞争。 + +而且本来我也算是基于个人 IP 成立的公司,个人 IP 一定是我的立身之本。 + +现在我们团队的工作模式是:**我负责对外输出,团队同学做好交付**。一方面作为自己公司项目组的一员,跟团队开发改进产品;与此同时,不断输出优质内容,给自家的产品带来流量。 + +我依然在持续学习 AI 等前沿方向的新技术,打造了自己的 [AI 资源导航产品](https://ai.codefather.cn)。每天至少看 3 ~ 5 篇文章或视频来学习新知识,这是我坚持了很多年的习惯。 + +对了,去年我还开了个剧本杀店,现在已经倒闭了,哈哈哈哈哈哈哈呜呜呜啊...... 这段足以写进科幻小说、拍成短剧的经历等后面再给大家分享吧。 + +![](https://pic.yupi.icu/1/mmexport1737541379400.jpg) + + + +## 给想做自媒体 / 创业的朋友一些真心话 + +既然聊到了自媒体和创业,分享几点血泪经验吧: + +1)关于冷启动:真实最重要 + +万事开头难。我做自媒体时,第一批粉丝完全是靠着用心的内容,获得了一些大号的转载机会。 + +从我自己和全网的观察来看,**越真实、越自然,越容易爆火**。别担心暴露真实的自己会被喷,做自媒体被喷是很正常的,从你做 UP 主开始,就应该做好心理准备。比如我就把自己当做一个沙雕,你骂我就是你对,谁会跟沙雕较劲呢? + +![](https://pic.yupi.icu/1/IMG_20251021_184310%E5%B0%8F.jpeg) + +**总之,做好内容是一切的基础。真实的东西在 AI 时代会更可贵。** + + + +2)关于坚持:降低预期,持续行动 + +我知道很多朋友会因为流量感到焦虑,觉得自己做的东西没人看、没人认可。 + +但我想说:**坚持下去一定会成功。** + +我做自媒体这么多年,从来没有过真正爆火的视频,粉丝都是从 0 开始一期一期积累来的。我刚开始在抖音做视频,第一个视频播放量只有 18;做公众号时,阅读量也是个位数。 + +但我连续 100 多天下班后直播到凌晨,就是这种坚持,让我突破了瓶颈。 + +面对焦虑最好的办法就是:**降低预期并且坚持行动**。把自己当做一个新人,从 0 开始用心创作内容,同时不断改进。 + +![](https://pic.yupi.icu/1/%E9%B1%BC%E7%9A%AE22%E5%B9%B4%E5%B7%A5%E4%BD%9C.png) + + + +3)关于内容:有趣 > 干货 + +摸清观众的心理很重要。编程深度知识或完整教程,真正要看这些内容的人会主动搜索。 + +应该用轻松的方式,让大家在主线学习之余,零碎时间了解新知识。随时记录灵感,而不是硬着头皮写稿子;去除废话、加一些梗;剪辑时加一些搞笑的动图和音乐。 + +我的内容质量把控标准是: +- 好玩、有趣 +- 真实、共鸣 +- 要留下一些东西(知识点、一个作品) +- 精简、突出主旨 + + + +4)关于产品:快速验证,持续迭代 + +不要把产品想得太复杂,**遵循最小可用性原则**,先快速验证、持续迭代。 + +我创业后的第一个产品破产,很大的一个原因是前期发展过于理想,导致白送了大量的会员,被薅了羊毛,没有控制好成本。 + + + +5)关于团队:学会放手 + +刚创业时,我还保留着独立开发者的思维,自己写代码、什么都亲力亲为、很多事情自己扛,结果换来的就是低效、焦虑、迷茫的恶性循环。 + +**学会下放工作、解放自己,这是创业者必须要跨越的坎。** + +我花了很长时间才学会:注重公司的内部沉淀,尤其是工作流和规范文档。两年半的时间,团队沉淀了 4790 个文档!也因此我才能有更多时间投入创作。 + + + +6)关于心态:享受踩坑的过程 + +现在我已经意识到创业成功必须有的特质:源源不断的创造力、平稳的心态和强大的抗压能力。 + +无论大家怎么看待我,我在做自己认为正确的、有意义的、让我快乐的事情,这就足够了。 + +![](https://pic.yupi.icu/1/IMG_20230405_113430%E4%B8%AD.jpeg) + + + +7)身体健康最重要 + +记得之前有人问我:怎么睡个好觉?一位融资千万的大佬笑着跟我说:“换个好枕头”。当时我不理解,现在我已经感同身受了。 + +但说真的,**身体是革命的本钱**。一定要吃早饭、规律饮食、少熬夜。我就是活生生的反面教材,肠胃出了问题,头发掉得飞快。 + + + +## 写在最后 + +感谢你看到这里,这就是我的故事。9 年时间,从自学编程到腾讯程序员,从 0 到全网 200 万粉博主,再到离职创业、产品月活过百万。 + +我是鱼皮,一个还在持续折腾的程序员,一个把 90% 时间都花在学习和工作上的 “卷王”,一个乐于分享、热爱创造的普通人。 + +虽然头毛已经不剩几根,但我依然充满热情。 + +我的格言是:相信自己有能力,那么你就真的会有。 很多时候,限制我们的不是能力,而是不敢去尝试。现在的我,不再害怕失败,因为每一次失败,都是在为成功铺路。 + +接下来,我会继续在这里持续分享有趣的编程知识、实用的 AI 玩法、自媒体涨粉经验、创业血泪史。 + +**未来还很长,现在关注的你就是老粉哦~** + +![](https://pic.yupi.icu/1/IMG_20240921_233215%E5%A4%A7.jpeg) + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/我的自媒体起号经验.md b/Vibe Coding 零基础教程/50 产品变现/我的自媒体起号经验.md new file mode 100644 index 0000000..8002b0b --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/我的自媒体起号经验.md @@ -0,0 +1,241 @@ +# 我的自媒体起号经验 + +> 从 0 到 10 万粉的真实经历 + + + +大家好,我是鱼皮。刚来 X 平台,关注数就突破了几千,说实话有点受宠若惊,感谢大家助力每一个梦想 🌹。 + +很多朋友问我是怎么做到的? + +除了我之前有一些国内平台影响力外,更重要的还是方法,但这个方法并不难,人人都可以做到。而且我当初在各个平台起号时,基本都是这么做的。 + +看着突突涨的关注数,我想起了自己最初从 0 到 10 万粉的那段时光。今天想跟大家聊聊这部分故事,以及分享一些实实在在的起号经验。 + +无论你是想通过自媒体推广自己的产品,还是想建立个人品牌,这些经验都能帮到你。 + + + +## 从 18 播放量开始 + +2020 年特殊期间,我在家里远程 TX 实习。有一天打开抖音,随便翻了几个视频后,我发现好像在抖音,并没有多少做技术分享的程序员。或许是因为抖音偏娱乐向?又或许是因为短视频的限制,很难通过只言片语讲清一个技术? + +我是一个喜欢尝试新事物的人,正好录制短视频的成本也并不会很高,于是我就在工作之余开始了自己的短视频制作生涯。 + +由于我在大学期间独立开发过一个面试刷题产品 —— 面试君主(没错,这是我现在几十万用户产品 - 面试鸭的原型),因此第一个抖音短视频账号就叫 “面试君主”,视频内容专注于程序员高频面试题解析,正好帮助我自己春招获得更多机会。 + +真正做短视频后,我才发现事情并没有自己想象的那么简单。 + +首先是制作成本,做短视频并不只是简简单单用手机拍摄一下、录个屏就完事了,除了选题和最基本的内容外,很多的素材都需要精雕细琢,比如封面、标题、标签、第一眼、开头等。我会先写稿子、打磨和验证内容,然后再录像,结果第一期视频就做了三四个小时。 + +功夫不负有心人啊!猜猜最后的播放量是多少? + +**我记得很清楚,一天下来,播放量是整整 18!** + +我想过新人播放量会比较低,但没想到 TNND 这么低! + +说不难受是不可能的,但毕竟是第一个视频;而且我当时的目的很纯粹,就是通过分享,**在帮助大家的同时巩固自己的知识**。 + +因此,我没有放弃,又一连坚持了大概一个月,每天至少更新一个视频,周末还会更新 3 个视频! + +虽然每个视频的播放量也只有几十,但是一个多月的坚持,也让我收获了**人生中第一批粉丝**,大概有 100 多个,其中几十个还是我的朋友。最高播放量的一个视频达到了 1800。 + +所以我很喜欢 18 这个数字,它对我很有意义。 + + + +## 第一次爆款,被喷惨了 + +后来有一天,我静下心来思考,这样的坚持是否还具有意义? + +于是我去看了很多其他同学的视频,发现往往 **真实的故事最能打动人**。 + +于是,我又注册了一个新的抖音号,也是现在的号【程序员鱼皮】,并且第一次通过短视频平台将我的编程学习和求职经历分享给大家。 + +结果,这次的播放量和点赞量出乎我的意料,第二天醒来,消息已经 99+,当时的心情还是非常激动的。 + +但是,当我打开评论区,心情立刻就跌入低谷。评论区充斥着各种各样的 **怀疑、鄙视、甚至是谩骂**,很多人说 “又一个营销号诞生了”,还有什么 “抖音各个都是人才,把外行人忽悠的团团转”。 + +好吧,我算是知道这个视频为什么能火了,虽然都是差评,但这 **互动率** 是真的高。 + +记得当时有一个骂我的评论点赞数还巨高,都快接近我当时的视频点赞数了。现在想想,真的要感谢当时骂我的朋友们,当然也包括现在的。 + +这条视频过后,我开始思考,如果要分享编程技术,也可以换一种更有趣、更迎合大众、更容易被接受的方式。创作当然可以只顾着自己爽,但是如果能让观众也爽了,岂不是一举两得? + +于是,我开始分享一些优质的、易用的编程资源,以及一些自己积累的编程小知识。并在这个期间不断地学习短视频创作技巧,学会看数据,学会优化各项指标,多看他人的视频来学习好的创意和经验。 + +还记得大学上计算机课时老师讲的一句话:1.01^365 次方等于多少?每天改变一点点,也会有巨大的变化,可怕的是盲目坚持,而不做任何改变。 + + + +## 第一次直播,阿巴阿巴 + +接下来,我尝试了人生中第一次直播,画面是一台电脑,记得当时大概有十几位观众,**我不知道该讲啥,也不知道这十几位观众在看啥**,我就一直在重复 “大家好,这是我第一次直播”,结果还真的有人一直看。 + +后来,我坚持每晚直播一小会儿,通过在直播间和大家交流编程,我感受到了多样人生,和粉丝朋友们保持了良性互动,也帮助我收获了更多的粉丝。 + +而且你敢想象么,我是个 i 人(ISTJ),看过我吐槽公司视频的朋友应该能感受到。 + +通过不懈的努力,我的抖音渐渐有了起色,粉丝数和播放量都稳定增长。虽然说抖音是一个偏娱乐和生活的平台,但是我在这里也拥有了一片属于自己的小天地,认识到了很多的朋友。 + +坚持也让我看到了另一个变化,就是评论区底下对我的怀疑和谩骂变得越来越少。当然即使是现在,依然会有很多人骂我,但这不是很正常的事情么?我又不是 money 人见人爱~ 看到自己一直在坚持的事情帮助到了更多同学、得到了肯定,这就足够了。 + + + +## 多平台扩展 + +有了抖音的基础后,我开始尝试其他平台,比如公众号和 B 站,都叫程序员鱼皮。 + +做 B 站的时候,我正式发布的第一个涨粉视频想必大家也能猜到了。没错,就是我自己从学编程到入职大厂的个人经历。具体涨了多少粉我忘了,但印象中这一个视频基本上就把号带起来了。让我记得最清楚的是,有小伙伴发现我是个歪嘴战神,哈哈哈。 + +但公众号的涨粉没有那么容易,刚开始我傻傻地以为想要涨粉,就要多写文章,于是给自己定下了每天 1 篇的目标。结果质量不高、阅读不高、粉丝也没涨几个。 + +很快,我意识到这样下去得完犊子,必须要改变方法! + +于是我开始疯狂混圈子,向成功的前辈交流、学习、模仿;找大号投稿,争取转载机会;开拓渠道,把同一篇文章、同一个视频发布到多个平台;利用抖音给公众号引流等等。关于我做公众号从 0 到 10 万粉的经历,后面会给大家更详细地分享。 + +就这样,总共大概过了 1 年左右,抖音粉丝 7.8 万、公众号 1.8 万、再加上 B 站,差不多累积 **10 万粉丝** 了,第一个小目标达成。 + + + +--- + + + +所以看到这里,你应该已经知道我开头说的起号方法是什么了吧? + +没错,就是 **分享真实的经历**。 + +从短视频 18 播放量 -> 弃号重开 -> 第一次小火 -> 坚持直播 -> 扩展图文和长视频,我一直在做的,是把自己真实的经历、真实的想法、真实的感受分享给大家。 + +这次来到 X 平台,我看到刚做 X 的朋友 @程序员小灰 哥通过分享真实经历快速涨了很多关注,这更坚定了我对这种方式的信心。 + +我觉得这是每个人都能做到的事,不需要华丽的辞藻、不需要规整的文章结构,只需要把自己的故事真诚分享出来就好。 + +**你的经历绝对是独特的,至于剩下的,就交给算法吧。** + +下面我想结合这段经历,跟大家分享一些实实在在的自媒体起号建议。 + + + +## 一些自媒体起号建议 + +1)真实最重要 + +纵观自己和全网的观察,我发现 **越真实、越自然,越容易爆火**。 + +做好内容,是一切的基础。真实的东西在 AI 时代会更可贵。不要刻意模仿别人,你的经历就是最独特的素材。 + + + +2)降低预期,坚持行动 + +我知道很多朋友会因为流量感到焦虑,觉得自己做的东西没人看、没人认可。 + +但我想说:**坚持下去一定会成功。** + +我刚开始做公众号时,阅读量也是个位数。但之后我连续 100 多天下班后直播到凌晨,就是这种坚持,让我突破了瓶颈。 + +面对焦虑最好的办法就是:降低预期并且坚持行动,我真的很喜欢 Speak Less Do More 这句话。 + + + +3)有趣很重要 + +对于高级编程技术或完整教程,真正要看这些内容的人会主动搜索,不需要你来把文字稿整成视频。尤其是 AI 时代来了,有些追求效率的朋友甚至不会去看长视频,而是直接用 AI 工具总结了。 + +建议把内容做得轻松有趣,让大家在零碎时间了解新知识。像我就尽量让每期视频都能给大家带来一些知识,哪怕是 “我的服务器被攻击了” 这种难绷的经历,相信也能让大家少踩踩坑。 + + + +4)AI 只是工具,核心是你的创意 + +现在通过 AI + 各种工作流可以快速批量创作内容,虽然有机会起量,但一定有对应的瓶颈,因为越简单的东西,复刻成本越低。 + +关键还是要有自己的创意和特色,只不过如今实现创意的成本变得简单了。 + + + +5)立刻行动 + +很多人问我:“我也想做自媒体,但不知道怎么开始。” + +我的回答是:**不要光想、多去尝试!** + +我自己就很讨厌那种理论派,一套一套的,看了就忘。反而是自己练号的过程中,会自然地慢慢学到很多知识,而且印象更深刻。举个例子,被限流一次你就知道下次文案中要注意哪些违禁词了。 + +还有怎么写标题、怎么做封面、怎么选题、怎么看数据、怎么优化内容,这些都是在实践中学会的。 + +练废了大不了重来嘛! + +像我第一个账号 “面试君主” 就是练废的,但那段经历让我学到了太多东西,也是之后新号起量的关键。 + + + +6)找准定位,做自己擅长的 + +不要去跟某一领域更专业的团队竞争。比如我刚开始不会去出几十个小时的完整课程,因为培训机构更专业。 + +像我前期的定位很清楚:分享真实经历 + 有趣的技术知识 + 优质资源推荐。 + +找到自己的定位,做自己擅长的事,这很重要。 + +说到这里其实有个让我很气的事,我 21 年 ~ 22 年期间自己做了很多有趣的项目,结果到后面发现观众根本不在意项目是不是你开发的,有用 / 有趣就够了,很多时候推荐自己费力开发的项目还不如推荐别人的播放量要高。 + + + +7)时间管理 + +还记得之前有个骂我的小伙子,说我背后肯定有团队,1 个人怎么可能做那么多事? + +但当时真的没有,我只是用了一些时间管理技巧罢了。 + +首先我最理想的状态是把工作中的发现、学到的技术进行分享,而不是从 0 开始分享自己完全不知道的东西。 + +有人问我的时间哪来的? + +其实为了做自媒体,我放弃了午休、放弃了游戏、放弃了很多出去玩耍的机会,也熬了不少夜。我估计 90% 的同学没时间的原因都是在玩游戏和回消息(水群)吧,如果不玩游戏,时间肯定还是足够的。 + +而且一旦你像我一样把自媒体当做兴趣和爱好,而不是任务,涨粉会变得容易很多。 + + + +8)接受焦虑,享受过程 + +Q:做号过程中会缺乏动力么? + +A:肯定会的,这时要给自己找点刺激。心态要随缘,刻意会不持久。 + +Q:你会有数据会焦虑么? + +A:肯定会的,我会经常和别人对比,也曾一度怀疑自己被限流(虽然直到现在我依然怀疑哈哈)。但更多时候,我关注的还是内容本身,学习别人作品中优秀的地方,缩小差距。 + + + +--- + + + +最后,如果你也想做自媒体,我的建议是: + +**别想那么多,先发第一条内容,告诉别人你是谁。** + +哪怕只有 18 播放,那也是一个开始,至少你种了一颗种子,不是么? + +这次来到 X,如此快速的关注对我来说不一定是好事,因为在这里我还是新手,还请各位大佬们多多担待。 + +如果你支持我,那么我会很开心,谢谢你;如果你 DISS 我,把我当成一条臭狗,那我也希望能通过之后的分享打破质疑。我会尽力在这里多分享自己特有的内容,希望能给大家一些启发,让我们一起成长!🚀 + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/系统监控告警实践.md b/Vibe Coding 零基础教程/50 产品变现/系统监控告警实践.md new file mode 100644 index 0000000..d76ae71 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/系统监控告警实践.md @@ -0,0 +1,134 @@ +# 系统监控告警实践 + +> 及时发现问题,保障系统稳定 + + + +大家好,我是程序员鱼皮,今天分享一些很实用的系统监控告警工具。 + +无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,掌握系统监控告警的方法都能帮你及时发现和处理问题,保障系统稳定运行。 + + + +## 为什么要用监控告警? + +说到监控告警,没有企业开发经验的同学非常容易忽视它,甚至会有同学觉得没有必要,大不了出了 Bug 再修就是了。 + +![](https://pic.yupi.icu/1/image-20240729172241587.png) + +**这种想法大错特错!** + +我们把系统想象成人的身体。有的时候,一个人表面看起来可能很健康,但可能只是没有机会发现自己体内的异常,结果等到真的出事了,往往要承担的后果更严重。所以才需要定期体检,及时发现和处理问题。系统监控告警的作用也是类似的,能够及时发现系统中潜在的异常和问题、线上出了问题也能第一时间发现,尽早处理,从而预防或减轻故障。 + +此外,监控系统还有一些其他的好处,我们接着往下看。 + + + +## 怎么实现监控告警呢? + +最直接能想到的办法就是自己写代码实现,比如给要重点关注的功能加点儿逻辑,出现某个异常的时候发送一条短信 / 邮件 / 企微消息即可。我们最开始就是这么做的: + +![](https://pic.yupi.icu/1/image-20240729173020018.png) + +但其实业务告警只是监控告警的其中一个层面,就像是人体的表面皮肤检查。如果我们想更全面地、更准确地监控系统的健康,还要里里外外做个全方位的体检,包括服务器监控、网络监控、应用监控、数据库监控、API 接口监控等等。 + +是的,听上去就很复杂,所以监控在现代运维中有了一个更专业的别名,叫 “可观测性”。可观测性是指系统能够通过监控和分析其内部状态来了解和诊断其健康状况和性能的能力。这个概念不仅包含了传统的监控,还扩展到了数据的收集、分析和响应。举个例子,我们通过监控发现系统的内存利用率不高,就可以适当降配节约成本;发现系统的内存利用率过高,就可以考虑是否要升配扩容。 + +想要自己优化系统的可观测性还是很复杂的,数据收集、数据存储、数据分析、告警机制、可用性保障、性能等等都要考虑,大厂都是有规模的基础设施团队来做。 + +对于我们个人开发者或者小公司来说,既然是全方位的 “体检”,我们一般不会自己来做,而是会选择更专业的工具或服务,直接使用和接入就好。下面就推荐几个我们团队在用的。 + + + +## 监控工具推荐 + +### 1、服务器监控 + +1)服务器自带的监控能力 + +只要你使用的是大厂的云服务器,基本都自带了服务器监控,还可以设置告警。比如下图腾讯云轻量应用服务器的监控,能看到 CPU、内存、网络带宽、硬盘等资源的使用情况: + +![](https://pic.yupi.icu/1/image-20240729175223676.png) + + + +2)容器平台的监控能力 + +如果你使用的是容器的方式来部署项目,基本上容器平台也自带了监控告警能力。比如微信云托管的服务监控,除了看到系统资源的占用情况外,还能看到接口调用量、请求错误量、接口 QPS 和响应时间,相当于自带了一部分 API 接口监控能力。 + +![](https://pic.yupi.icu/1/image-20240729175504698.png) + +而且云托管平台支持在微信群内接收告警信息,非常方便。一旦节点被攻击了,立刻就能通知到你。 + +![](https://pic.yupi.icu/1/image-20240729175751550.png) + + + +### 2、数据库监控 + +以前,没有数据库监控,我们很难关注到数据库的运行状态,不知道它工作辛不辛苦、有没有摸鱼或者超负荷加班。但现在,如果你使用的是第三方云服务商的云数据库,可以直接在平台上查看数据库的资源利用情况。比如我们用的腾讯云数据库自带的监控: + +![](https://pic.yupi.icu/1/image-20240729180105756.png) + +以前只能通过用户反馈或者服务器的故障来发现危害系统的慢 SQL,现在使用云数据库自带的智能管家,就能第一时间帮你发现慢 SQL,防患于未然。 + +![](https://pic.yupi.icu/1/image-20240729180157868.png) + +还能一键帮你的数据库做个体检,不是 100 分的话都要及时修改: + +![](https://pic.yupi.icu/1/image-20240729180528480.png) + + + +### 3、应用监控 + +应用监控的范围比较广,我们使用的是阿里云的应用实时监控服务 ARMS,主要的原因是对比下来阿里在 Java 应用服务这一块的专业性确实更高。 + +包括应用服务器(比如 Java 的 Tomcat)的状态、API 接口调用情况、系统内部依赖服务的调用情况、定时任务的调用情况、线程池的状态、虚拟机的内存、GC 的情况等等。 + +![](https://pic.yupi.icu/1/image-20240729181837634.png) + +![](https://pic.yupi.icu/1/image-20240729182031915.png) + +还能查看应用拓扑结构、分析调用链路等等: + +![](https://pic.yupi.icu/1/image-20240729181939087.png) + +除了监控能力外,它的告警能力是真的强!我们把服务接入到了企微,只要有个环节出了问题,立刻就会给我们发送告警。还可以快速查看告警详情、认领告警、屏蔽告警等等。 + +![](https://pic.yupi.icu/1/image-20240729182157448.png) + +实不相瞒,我们刚接入这玩意的那几天,还是挺痛苦的,因为暴露了很多之前没发现的系统问题,大半夜的企微也一直滴滴滴滴滴滴搁那响!我们团队的开发同学苦不堪言。 + +![](https://pic.yupi.icu/1/image-20240729182459731.png) + +不过现在已经习惯了。。。额,准确地说是系统经过优化后,已经变得更健康了~ + +不管怎么样,接入监控告警还是很有必要的,感觉像是开了通透世界,对系统的状态了若指掌了! + +但是监控服务的使用超过一定次数,是需要费用的,大概每月几十 G 的免费额度吧,企业项目的话其实很快就用完了。用于学习或者个人网站可以试试。 + + + +### 4、前端监控 + +除了上面的监控外,有时我们还想了解用户的行为、用户属性和业务指标,比如每天有多少用户访问网站、是用的 PC 还是手机、手机是什么牌子的、有多少新用户注册等等。那么可能还需要前端监控(当然也可以后端埋点统计),之前分享过的,用百度统计,一行代码就能接入到前端网站中,很方便~ + +![](https://pic.yupi.icu/1/image-20240625112621549.png) + + + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/网站数据保护实践.md b/Vibe Coding 零基础教程/50 产品变现/网站数据保护实践.md new file mode 100644 index 0000000..1de4c19 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/网站数据保护实践.md @@ -0,0 +1,121 @@ +# 网站数据保护实践 + +> 保护你的数据,防止被恶意爬取 + + + +大家好,我是程序员鱼皮。前两天模拟面试一位社招两年的老哥,由于他的表现不错,我就临时起意,跟他交流一下我们最近遇到的业务场景问题。问题如下: + +最近我们不是做了个 [程序员刷题网站 - 面试鸭](https://mianshiya.com/) 嘛,有很多坏人盯上了我们网站,想把我们 10,000 多道面试题、300 多个面试题库的数据都用爬虫抓下来。那我们应该如何防止这种爬虫行为?比如怎么识别出这些非法爬取数据的用户并且自动封号? + +整个问题的交流过程大家可以看视频学习:https://www.bilibili.com/video/BV1b142187Tb + +下面我就直接把防止爬虫的方法汇总分享给大家,总共有整整 10 种方法!最后一个方法很独特~ + + + +## 如何防止网站被爬虫? + +#### 1、使用协议条款 +robots.txt 是一个放置在网站根目录下的文件,用于告诉搜索引擎的爬虫哪些部分不希望被抓取。 + +举个例子,可以在 robots.txt 文件中添加如下规则来禁止特定目录或文件被抓取: + +``` +User-agent: * +Disallow: /private/ +Disallow: /important/ +``` + +虽然大多数合规的爬虫会遵守这些规则,但恶意爬虫可能会忽视它,所以,仅凭 robots.txt 不能完全阻止所有爬虫。但它是防护的第一步,起到一个声明和威慑的作用。 + +可以在网站的服务条款或使用协议中明确禁止爬虫抓取数据,并将违反这些条款的行为视为违法,如果网站内容被恶意爬虫抓取并造成了损害,robots.txt 可以作为违反这些条款的证据之一。 + + + +#### 2、限制数据获取条件 +比起直接暴露所有数据,可以要求用户登录或提供 API 密钥才能访问特定数据。还可以为关键内容设置身份验证机制,比如使用 OAuth 2.0 或 JWT(JSON Web Tokens),确保只有授权用户能够访问敏感数据,有效阻止未经授权的爬虫获取数据。 + + + +#### 3、统计访问频率和封禁 + +可以利用缓存工具如 Redis 分布式缓存或 Caffeine 本地缓存来记录每个 IP 或客户端的请求次数,并设置阈值限制单个 IP 地址的访问频率。当检测到异常流量时,系统可以自动封禁该 IP 地址,或者采取其他的策略。 + +需要注意的是,虽然 Map 也能够统计请求频率,但是由于请求是不断累加的,占用的内存也会持续增长,所以不建议使用 Map 这种无法自动释放资源的数据结构。如果一定要使用内存进行请求频率统计,可以使用 Caffeine 这种具有数据淘汰机制的缓存技术。 + + + +#### 4、多级处理策略 + +为了防止 “误伤”,比起直接对非法爬虫的客户端进行封号,可以设定一个更灵活的多级处理策略来应对爬虫。比如,当检测到异常流量时,先发出警告;如果爬虫行为继续存在,则采取更严厉的措施,如暂时封禁 IP 地址;如果解封后继续爬虫,再进行永久封禁等处罚。 + +具体的处理策略可以根据实际情况来定制,也不建议搞的太复杂,别因此加重了系统的负担。 + + + +#### 5、自动告警 + 人工介入 +可以实现自动告警能力,比如在检测到异常流量或爬虫行为时,系统能自动发出企业微信消息通知。然后网站的管理员就可以及时介入,对爬虫的请求进行进一步分析和处理。 + +这点之前也给大家分享过,不止是针对爬虫,企业的线上系统最好接入全方面的告警,比如接口错误、CPU / 内存占用率过高之类的。 + +![](https://pic.yupi.icu/1/image-20240729173020018.png) + + + +#### 6、爬虫行为分析 + +非法爬虫和正常用户的行为一般是有区别的,爬虫往往遵循特定的访问模式。比如正常用户每道题目都要看一会儿、看的时间也不一样,而爬虫一般是按照固定的顺序、固定的频率来获取题目,很明显就能识别出来。 + +比如下面这种情况,有可能就是爬虫: + +![](https://pic.yupi.icu/1/image-20240806112610085.png) + + + +#### 7、请求头检测 +每个发送到服务器的请求都有请求头信息,可以通过检查请求头中的 User-Agent 和 Referer 等标识符,对爬虫请求进行拦截。 + +当然,这招只能防防菜鸟,因为请求头是可以很轻松地伪造的,只要通过浏览器自带的网络控制台获取到响应正常的请求头信息,就可以绕过检测了。 + +![](https://pic.yupi.icu/1/image-20240806112956799.png) + + + +#### 8、自主公开数据 + +记得大学上信息安全课的时候,学到一个知识点:防止网络攻击的一种方法是,让攻击者的成本大于实际的收益。比如密码 10 分钟有效,破解密码要花 15 分钟,就不会有人去破解。 + +用到爬虫场景上,我们的做法是,不做任何限制,直接让所有人不登录也能查看到我们网站的题目数据!而且还提供了题目的各种筛选功能、收藏功能。大多数同学只是为了自己学习,这样一来,就没有必要花时间去爬数据了~ + +![](https://pic.yupi.icu/1/image-20240806113508903.png) + + + +#### 9、溯源技术 +虽然题目都是公开的,但有些我们专门请大厂大佬们来写的优质题解是仅会员可见的。如果有用户使用爬虫抓取了这部分数据,可就要小心了!一般来说,只要你在一个网站登录了,就一定会有访问记录,如果你泄露了网站登录后才可见的内容、尤其是付费内容,网站管理员一定有办法追溯到你是谁。 + +比较常用的溯源技术就是水印、盲水印等。对于我们的面试鸭,本身就是通过微信登录的,而且如果你是会员,肯定还有支付记录。这些技术不仅帮助标记数据源,还可以在数据被滥用时追踪其来源,从而增强数据的保护。 + + + +#### 10、科普法律 + +除了上面这些方法外,还可以通过接入反爬服务、接入验证码、增加动态时间戳等方式进一步限制爬虫。但是要记住,爬虫是没有办法完美防御的!因为你无法限制真实的用户,攻击者完全可以模拟真实用户的访问方式来获取你的网站数据,比如找 10 个用户,每人获取几百题。 + +所以我的最后一个方法是 —— 科普法律。可以在网站上发布明确的法律声明,告知用户未经授权的抓取行为是违法的,可以对爬虫行为起到一定的威慑作用。并且还通过发布视频和文章的方式,让广大程序员朋友们提高法律意识。爬虫是有一定风险的,自己学习倒没问题,但是千万别给人家的网站造成压力了,搞不好就有破坏计算机系统的嫌疑了! + +![](https://pic.yupi.icu/1/image-20240730121945226-20240806114829247.png) + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/50 产品变现/网站数据分析实战.md b/Vibe Coding 零基础教程/50 产品变现/网站数据分析实战.md new file mode 100644 index 0000000..7e4f931 --- /dev/null +++ b/Vibe Coding 零基础教程/50 产品变现/网站数据分析实战.md @@ -0,0 +1,176 @@ +# 网站数据分析实战 + +> 用数据驱动产品优化 + + + +有同学问我:鱼皮 gie gie,你们团队这么多网站产品,都是怎么做数据分析的啊? + +![](https://pic.yupi.icu/1/1764078727145-d24f43f8-805e-48ee-91a7-363c40334731.png) + +其实有很多现成的免费资源,可以让你不费吹灰之力搞定各种数据分析场景。 + +- 网站流量统计 +- 前端错误监控 +- 用户行为分析 +- 自定义业务分析 +- 后端应用监控分析 +- 后端资源监控分析 +- 后端自定义指标分析 + +无论你是用 Vibe Coding 做个人项目,还是想做一款真正的产品,掌握网站数据分析的方法都能帮你了解用户行为,优化产品功能。干货较多,建议收藏~ + +⭐️ 推荐观看视频版:https://bilibili.com/video/BV1CkUDBiEMR + + + +## 网站分析保姆级教程 + +先说说最基础的 **网站流量分析**。你肯定想知道每天有多少人访问你的网站、他们从哪来、在哪个页面待得最久对吧? + +可以使用百度统计、51.LA 网站统计或 Google Analytics,只需要给你的网站文件添加一段代码就能轻松接入。 + +![](https://pic.yupi.icu/1/1764078795765-4edf9121-1d66-41e9-9dc0-857afd0294e5.png) + + + +然后就能看到访客数量和趋势、分析访客的来源、分析页面的访问情况等等: + +![](https://pic.yupi.icu/1/1764078821580-d93ee50c-61fb-4bdc-af75-76123ec6828b.png) + + + +可以帮你了解用户的偏好、获取页面优化的思路。 + +![](https://pic.yupi.icu/1/1764078843181-a16b1ff8-8990-44c3-963c-169f6771a32e.png) + + + +如果你做的是小程序,那就更简单了,比如微信小程序直接用官方自带的数据分析就行。 + +![](https://pic.yupi.icu/1/1764078876073-0a8ec98f-9146-45f8-8695-d07a8bdd6e82.png) + + + +如果你想分析别人的网站流量,怎么办呢? + +可以用 Similarweb 或者 AI TDK 这类工具,输入网址就能看到对方的流量估算、访问来源和热门关键词,做竞品分析和 SEO 搜索引擎优化的时候特别好用。 + +![](https://pic.yupi.icu/1/1764078897590-9c89b4ed-59e0-4eb5-8538-edf02ff46f5d.png) + + + +光知道用户的正常使用情况还不够,万一你的网站按钮点不动了,用户那边疯狂报错,你这儿却一无所知,那就尴尬了,说不定会影响收入!所以 **前端错误监控** 必不可少。 + +Sentry 是业界主流的开源前端监控,它能帮你捕获和统计各种代码报错。 + +![](https://pic.yupi.icu/1/1764078928751-dae2960d-184f-41b8-9cb5-713a42fe95ac.png) + + + +还能记录用户的系统环境和具体报错信息,便于你排查和修复 Bug。 + +![](https://pic.yupi.icu/1/1764078961573-911e5c33-bb51-401d-8aea-1afe511bc117.png) + + + +不过免费版存在限制,或者得自己搭建服务器部署开源代码。所以我们团队用的是国内的灵雀应用监控,也是一段代码就能接入,能够实时捕获前端的各种异常报错,查看具体的错误信息等等。 + +![](https://pic.yupi.icu/1/1764078978982-15683249-ebb8-4165-a773-543f096021e3.png) + + + +有时候光知道哪里出错了还不够,你还想知道用户到底是怎么操作的?为什么会触发这个错误?或者为什么用户不愿意付费?这时候就得上 **用户行为分析** 工具了。 + +我直接掏出微软 100% 免费的 Clarity,能录制用户的真实操作回放。 + +![](https://pic.yupi.icu/1/1764079021607-a939888c-9187-4356-97e4-7ca087d748cf.png) + + + +像我们团队的 [模拟面试产品 - 面多多](https://ai.mianshiya.com/) 就在用它,用户点击了哪里、滚动到哪里、在哪个按钮上犹豫不决,全都一清二楚。 + +![](https://pic.yupi.icu/1/1764079042768-b8bf7b08-3402-4746-80ec-2375a7ec5253.png) + + + +还能通过热度地图快速分析用户的喜好,从而帮助优化产品功能按钮的布局,降低产品的使用难度,发现很多凭空根本想不到的问题。 + +![](https://pic.yupi.icu/1/1764079060438-35285ab2-9a14-41c8-a1f9-62334e94dd63.png) + + + +前面说的这些工具提供的都是通用指标,但每个产品的业务逻辑不一样,有些你特别关心的数据,比如付费转化率、功能使用频次等,光靠现成工具可能拿不到,这时候就得上 **自定义业务分析** 了。 + +刚开始我有点想当然,直接就为一些大家耳熟能详的商业 BI 产品付费了,但后来发现对于小团队来说,其实没必要花那个钱,直接搭建开源的 DataEase 或 Superset 就挺香的,可以对接 MySQL 数据库等各种自己业务的数据源,然后根据需求来配置、拖拖拽拽就能做出各种可视化图表和看板。 + +![](https://pic.yupi.icu/1/1764079103181-400429a4-f0ee-4b9e-9cf8-192cbf43b6b1.png) + + + +实在碰到特别个性化的需求,还可以自己搭建看板。现在有了 AI 加持,配合 ECharts 图表库,写几句提示词就能生成可视化看板,真的轻松多了。 + +![](https://pic.yupi.icu/1/1764079122450-bf5767d8-af95-42b0-b4cb-0007a4b55865.png) + + + +说完前端,咱后端的数据分析也不能落下啊。 + +用户访问你的网站,背后都是一个个接口在提供数据,怎么知道接口是否正常?有没有优化空间呢?这时就需要后端的 **应用监控分析** 了。 + +像我们团队在用 ARMS 应用实时监控服务,能帮你全面监控应用的性能,快速发现出错或者速度较慢的接口。 + +![](https://pic.yupi.icu/1/1764079185559-220bd32c-5ae3-4085-84f2-738084e03ff3.png) + + + +还能进一步查看错误详情,甚至是分析接口的完整调用链,能快速定位问题。 + +![](https://pic.yupi.icu/1/1764079204985-1645a7fd-e9a0-4efb-beda-8d1d6e4aa2e0.png) + + + +除了应用层面,服务器、数据库、缓存这些 **资源的监控分析** 也很重要,如果它们都跑在云上,那就直接用云服务商自带的监控看板就行,各种指标一目了然。 + +![](https://pic.yupi.icu/1/1764079290093-080d053b-6c1e-437d-8378-6100df73521f.png) + + + +要是你想统一监控分析更个性化的指标,那就得请出 Prometheus + Grafana 这对王炸组合了。Prometheus 负责采集各种自定义指标数据,为开发者带来监控的火种。 + +![](https://pic.yupi.icu/1/1764079319434-2fbd89b9-d827-4fb9-9f38-71f10d5629c5.png) + + + +Grafana 则负责把这些数据变成炫酷的可视化大屏。看着一堆实时变化的图表,我仿佛掌控着整个系统的脉搏,恍惚间有种成为科幻电影里男猪脚的感觉~ + +![](https://pic.yupi.icu/1/1764079336501-6effc5ed-a00d-4311-a763-f1d68019bb0f.png) + +--- + + + +OK 就分享到这里,其实还有很多不错的开源项目,比如 SkyWalking、Zipkin 来管理应用性能,ELK 来集中分析日志等等。 + +![](https://pic.yupi.icu/1/1764079353696-b15e7b70-4984-47d5-b036-0b499d17f629.png) + + + +有了这些工具,网站数据分析其实没有那么复杂,关键是要根据需求选择合适的方案,把时间省下来做产品才是正道。 + +如果本文对你有帮助,点个赞吧,感激不尽! + +![求点赞](https://pic.yupi.icu/1/%E6%B1%82%E7%82%B9%E8%B5%9E.webp) + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/60 Vibe Coding 资源大全.md b/Vibe Coding 零基础教程/60 Vibe Coding 资源大全.md new file mode 100644 index 0000000..f4c4c61 --- /dev/null +++ b/Vibe Coding 零基础教程/60 Vibe Coding 资源大全.md @@ -0,0 +1,154 @@ +# Vibe Coding 资源大全 + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +学习 Vibe Coding 的过程中,你可能会遇到这些情况: + +- 想尝试新的 AI 工具,但不知道哪个更适合自己 +- 遇到问题想查资料,但不知道去哪里找靠谱的内容 +- 想了解 AI 编程的最新动态,但信息太碎片化 + +这就是为什么我专门开发了[《鱼皮 AI 导航》网站](https://ai.codefather.cn/) ( [ai.codefather.cn](https://ai.codefather.cn/) )。 + +无论是想找好用的 AI 工具、获取最新 AI 资讯、发现 AI 提示词模板,还是交流 AI 使用心得、学习 AI 知识,你想要的关于 AI 的一切都可以在这里找到! + +![](https://pic.yupi.icu/1/image-20260109121412266.png) + + + + +## 鱼皮 AI 导航有什么? + + +AI 时代的机会比想象中多得多。像我们团队日常工作中的很多方面都有了 AI 的辅助,生活中也越来越习惯有事没事问问 AI 的建议。特别是在很多有认知门槛的陌生领域,AI 能帮我们快速收集、筛选、分析信息。很多以前光是找资料看书就需要花上好几个月功夫的问题,AI 分分钟就能理得明明白白。 + +但面对海量的 AI 工具和资源,如何找到真正适合自己的? + +[鱼皮的 AI 导航网站](https://ai.codefather.cn/) 可以帮你解决这个问题。 + + + + +### AI 工具大全 + +目前 AI 导航里已经收录了上千个国内外好用的 AI 网站和应用,并且按照功能用途进行了分类,再也不用大海捞针一样到处搜了。 + +网站按照功能分类,包括 AI 写作、AI 图像、AI 视频创作、AI 办公、AI 开发平台、AI 智能体、AI 聊天对话、AI 音频音乐、AI 商业设计、AI 大模型、AI 学习平台、AI 搜索引擎等十几个大类。 + +![](https://pic.yupi.icu/1/image-20260109120335668.png) + +写论文、做 PPT、生成图片、写代码、做视频…… 无论你想干啥,来这儿点两下,就能发现优质的工具! + +后续还会持续给大家收录新的工具,时刻走在 AI 潮流的前端。 + + + + +### AI 提示词大全 + +总觉得 AI 听不懂人话?或许是你没找到调教它的方法! + +我们给你准备了几百个抄作业级的提示词模板。写小红书爆文、制作特定风格的图片、设计一套学习路径等等。 + +复制粘贴就能用,秒变 Prompt 高手,给你的 AI 开光~ + +![](https://pic.yupi.icu/1/image-20260109120435424.png) + +提示词按照领域分类,包括学习成长、教育学习、职场工作、技术、写作、研究、商业等近 30 个分类。后续还将上线 “分享你的 prompt” 功能,让大家都能用上你创作的提示词。 + + + + +### AI 学习资源 + +比起最初的版本,AI 知识库已经不局限于某个单一的工具,而是汇总了各种 AI 相关有价值的信息和资源。 + +从零基础入门到硬核技术解析,精华文章、项目教程、应用场景,都能直接学。碎片化时代,我们帮你做系统学习的那个人。 + +这里有各种手把手教你实操 AI 工具的保姆级学习教程,有可以直接写进简历的 [企业级 AI 项目课程](https://www.codefather.cn/course?sortField=priority&tags%5B%5D=AI%E9%A1%B9%E7%9B%AE),还有大量适合入门以及进阶了解的知识百科。 + +![](https://pic.yupi.icu/1/image-20260109120527188.png) + + + + +### AI 热点资讯 + +AI 高速发展,几乎每天都有 “炸裂” 的消息。 + +- 大厂又发布了什么模型? +- 有什么逆天的新应用? +- 蹲一下 AI 圈又出了什么瓜? +- 整了什么新花活? + +这些我们会持续帮你盯着!所有的行业新鲜事都按时间排序好了,还能直接点击日历上的某一天去回顾。 + +![](https://pic.yupi.icu/1/image-20260109120725733.png) + + + +### AI 交流社区 + +AI 的本质还是工具,到底能用它做到什么样的事,还要看你能不能把它玩出花来。 + +于是,我们直接建了一个 AI 社区,在这里可以分享你刚发现的宝藏工具,炫耀你的 AI 大作,向大佬们请教问题。 + +![](https://pic.yupi.icu/1/image-20260109121046762.png) + +工具是冷的,但人是热的,一起来社区碰撞出灵感的火花吧。 + + + + +## 感谢 AI 领域的先行者们 + +在 AI 编程这个领域能有今天的繁荣,离不开众多优秀博主的无私分享。他们持续输出高质量的内容,科普技术知识,分享实战经验,让更多人能够了解和掌握 AI 编程。 + +[苍何](canghecode.com):前大厂高级开发,知名 AI 编程博主,微软最具价值专家 MVP,公众号和推特经常分享对 AI 编程的理解和教程。 + +**Andrej Karpathy**:前 OpenAI 研究员、特斯拉 AI 负责人,也是 Vibe Coding 这个词的创造者之一。他的博客和推特经常分享对 AI 编程的深刻思考,非常值得关注。 + +**Simon Willison**:Django 的联合创始人,他的博客持续分享 AI 工具的使用经验和技术洞察。他对 Vibe Coding 的理解非常深入,而且特别擅长把复杂的技术讲得通俗易懂。 + +**Fireship**:YouTube 上最受欢迎的技术频道之一,用快节奏的方式讲解各种新技术。他关于 AI 编程的视频都很精彩,适合快速了解新工具和新技术。 + +还有很多优秀的博主在各个平台分享知识。正是因为有这些博主的持续输出和对 AI 知识科普的贡献,AI 编程的知识才能快速传播,让更多人受益。 + + + + +## 一起玩转 AI + + +AI 的世界太大了,一个人摸索太孤单,不如一起来玩吧! + +[《鱼皮 AI 导航》](https://ai.codefather.cn/) 是我专门为 AI 学习者和开发者打造的一站式资源平台。网站完全免费、用心整理、持续更新,涵盖了 AI 工具、提示词、学习资源、知识库、资讯、社区等丰富的内容。 + +**如果你需要 Vibe Coding 等 AI 资源,就来鱼皮的 AI 导航网站。** + +我一直相信,知识分享是互利共赢的。《鱼皮 AI 导航》不仅是一个资源平台,更是一个开放的生态。我会持续推荐优秀的内容创作者,帮助他们扩大影响力。如果你也在创作 AI 相关的内容,欢迎通过网站上的 “AI 导航小助手” 联系我。 + +最后,我想再次强调:**资源再多,最重要的还是动手去做**。网站只是工具,真正让你成长的是实践。 + +如果你对 AI 有兴趣,不管是想提升效率、学习技能,还是单纯好奇,都欢迎来体验👇 + +鱼皮的 AI 导航:https://ai.codefather.cn + +有什么建议或者想要的功能、内容,欢迎在社区给我们提建议,万分感谢。 + +记得把网站加入收藏夹,方便随时探索 AI 哦~ + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/70 Vibe Coding 概念大全.md b/Vibe Coding 零基础教程/70 Vibe Coding 概念大全.md new file mode 100644 index 0000000..f2b6759 --- /dev/null +++ b/Vibe Coding 零基础教程/70 Vibe Coding 概念大全.md @@ -0,0 +1,777 @@ +# Vibe Coding 概念大全 + +> 一文搞懂 AI 编程的所有核心术语 + + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +在学习 Vibe Coding 的过程中,你一定会遇到各种陌生的名词和术语。比如什么是 Token?什么是上下文窗口?什么是 RAG?这些概念听起来很高大上,但其实理解起来并不难。 + +这篇文章就是你的 **AI 编程术语词典**,我会用最通俗易懂的语言,把 Vibe Coding 中最常见、最重要的概念讲清楚。你可以把它收藏起来,遇到不懂的词就来查一查。 + + + +## AI 基础概念 + + +### 人工智能(AI) + +人工智能(Artificial Intelligence)是让计算机模拟人类智能的技术。简单来说,就是让机器能像人一样思考、学习和解决问题。 + +在 Vibe Coding 中,AI 就是你的编程助手。你告诉它要做什么,它帮你写代码。就像你有一个 24 小时在线的程序员朋友,随时可以帮你干活。 + + + + +### 大语言模型(LLM) + +大语言模型(Large Language Model)是一种能够理解和生成人类语言的 AI 系统。ChatGPT、Claude、Gemini、DeepSeek 都是大语言模型。 + +为什么叫 “大” 呢?因为这些模型的参数量非常庞大,动辄几十亿甚至上万亿个参数。参数越多,模型通常越聪明,但也越消耗计算资源。 + +你可以把大语言模型理解成一个读过海量书籍和代码的超级学霸,它见过无数的编程案例,所以能帮你写代码、解释代码、修复 bug。 + +![](https://pic.yupi.icu/1/1745384872015-f84a47fc-0925-4797-9dfc-e4dfae01a3fa.png) + + + +### 模型参数 + +参数是模型在训练过程中学到的 “知识点”,用数字的形式存储在模型中。参数越多,模型能记住的知识就越丰富,通常也越聪明。 + +比如: + +- GPT-4 大约有 1.8 万亿参数 +- Claude 3.5 Sonnet 的参数量未公开,但估计在千亿级别 +- DeepSeek-V3 有 6710 亿参数 + +参数量会影响模型的能力和运行成本。一般来说,参数越多的模型越贵,但效果也越好。 + + + + +### 训练和推理 + +训练(Training)是让 AI 模型从大量数据中学习知识的过程。这个过程需要海量的计算资源和时间,通常由 AI 公司完成。你不需要自己训练模型。 + +推理(Inference)是模型学完之后,用学到的知识来回答问题、生成内容的过程。当你用 ChatGPT 对话时,就是在进行推理。 + +打个比方:训练就像学生上学读书,推理就像学生参加考试答题。我们日常使用 AI 工具,都是在用推理能力。 + + + + +### 微调(Fine-tuning) + +微调是在已有模型的基础上,用特定领域的数据继续训练,让模型在某个领域表现更好。 + +比如,你可以用大量的医学资料微调一个模型,让它成为医学专家。或者用你公司的代码库微调,让它更了解你的项目风格。 + +对于普通用户来说,微调成本较高,一般不需要自己做。直接使用现成的模型就够用了。 + + + +## Token 和计费 + + +### Token + +Token 是 AI 模型处理文本的基本单位。你可以简单理解为 “词块”。 + +在英文中,一个 Token 大约是一个单词或单词的一部分。在中文中,一个汉字通常是 1-2 个 Token。 + +为什么 Token 重要?因为 AI 服务通常按 Token 收费。你输入的文字和 AI 输出的文字都会消耗 Token。Token 用得越多,花的钱就越多。 + +举个例子: + +- "Hello World" 大约是 2 个 Token +- “你好世界” 大约是 4-6 个 Token + +![](https://pic.yupi.icu/1/image-20260112112612434.png) + + + +### 输入 Token 和输出 Token + +AI 服务通常分别计算输入和输出的 Token: + +- 输入 Token:你发给 AI 的内容(提示词、代码、文件等) +- 输出 Token:AI 返回给你的内容(回答、生成的代码等) + +一般来说,输出 Token 比输入 Token 更贵,因为生成内容比理解内容更消耗算力。 + +省钱小技巧:写清楚、写简洁的提示词,让 AI 一次就能理解你的需求,减少反复对话。 + + + +### 上下文窗口 + +上下文窗口(Context Window)是指 AI 模型一次能 “记住” 的最大内容量,用 Token 来衡量。 + +不同模型的上下文窗口大小不同: + +- GPT-4o:128K Token(约 10 万中文字) +- Claude 3.5 Sonnet:200K Token(约 15 万中文字) +- Gemini 2.0 Pro:2M Token(约 150 万中文字) + +上下文窗口越大,AI 能处理的代码量就越多,能记住的对话历史就越长。如果你的项目代码很多,选择上下文窗口大的模型会更合适。 + +但要注意,上下文窗口越大,每次请求消耗的 Token 也越多,成本也会更高。 + + + +## 提示词相关 + + +### 提示词(Prompt) + +提示词是你给 AI 的指令或问题。在 Vibe Coding 中,提示词就是你用自然语言描述的需求。 + +提示词的质量直接决定了 AI 输出的质量。一个好的提示词应该: + +- 具体明确,不含糊 +- 包含必要的背景信息 +- 说明期望的输出格式 + +比如,“做一个网站” 是一个模糊的提示词,而 “用 React 做一个记账网站,包含添加支出、查看列表、统计总额三个功能,界面用蓝色调” 就是一个好的提示词。 + +在 AI 对话中,消息通常分为三种角色: + +- 系统提示词(System):设置 AI 的角色和行为规则,对用户不可见 +- 用户提示词(User):你发送给 AI 的消息 +- 助手提示词(Assistant):AI 回复给你的消息 + +理解这 3 种角色有助于你更好地构造对话。比如在调试时,你可以在提示词中模拟之前的对话历史,让 AI 更好地理解上下文。 + + + +### 系统提示词 + +系统提示词(System Prompt)是在对话开始前设置的指令,用来定义 AI 的角色、行为和限制。 + +比如,你可以设置系统提示词:“你是一位资深的 React 开发专家,请用简洁清晰的代码风格回答问题。” + +系统提示词在整个对话过程中都会生效,是定制 AI 行为的重要方式。 + +![](https://pic.yupi.icu/1/1745462990451-6f2b5727-d47b-436c-9da2-50dac64fb790.png) + + + +### 提示词工程 + +提示词工程(Prompt Engineering)是设计和优化提示词的技术,目的是让 AI 更好地理解你的意图,生成更符合预期的结果。 + +这是 Vibe Coding 的核心技能之一。好的提示词工程师能用更少的对话轮次,让 AI 生成更高质量的代码。 + + + +### 零样本提示(Zero-shot) + +零样本提示是指直接给 AI 一个任务,不提供任何示例。 + +比如:“请把这段英文翻译成中文。” + +AI 会根据自己的训练知识来完成任务。对于简单任务,零样本提示通常就够用了。 + + + +### 少样本提示(Few-shot) + +少样本提示是在提示词中提供几个示例,让 AI 学习你想要的格式或风格。 + +比如: + +``` +请按以下格式翻译: +英文:Hello → 中文:你好 +英文:Thank you → 中文:谢谢 +英文:Good morning → 中文: +``` + +通过提供示例,AI 能更准确地理解你的需求,输出更一致的结果。 + + + +### 思维链提示(Chain-of-Thought) + +思维链提示是让 AI 一步一步思考问题,而不是直接给出答案。这对于复杂的推理任务特别有效。 + +你可以在提示词中加上 “请一步一步思考” 或 "Let's think step by step",AI 就会展示它的推理过程,通常能得到更准确的答案。 + +在编程中,思维链提示能帮助 AI 更好地理解复杂需求,生成更合理的代码结构。 + +![](https://pic.yupi.icu/1/chainofthought.png) + + + +### Markdown 语言 + +Markdown 是一种轻量级的文本标记语言,用简单的符号来表示格式。比如用 `#` 表示标题,用 `**文字**` 表示加粗,用 `-` 表示列表。 + +在 Vibe Coding 中,Markdown 非常重要,因为: + +- AI 生成的回答通常是 Markdown 格式 +- 项目文档(如 README)用 Markdown 编写 +- 规则文件也是 Markdown 格式 + +学会 Markdown 能让你更好地与 AI 交流,也能写出更规范的项目文档。 + + + + +## AI 编程模式 + + +### Vibe Coding + +Vibe Coding 是由计算机科学家 Andrej Karpathy 在 2025 年 2 月提出的概念。它描述了一种全新的编程方式:通过自然语言和 AI 对话,让 AI 帮你写代码,你只需要描述需求、测试结果、指导方向。 + +Vibe Coding 的核心理念是:你不需要精通编程语法,只需要能清楚表达你的想法。AI 负责把你的想法变成可运行的代码。 + +这就像点外卖一样:你告诉外卖平台你想吃什么,餐厅帮你做好送到手上。你不需要会做饭,但要知道自己想吃什么。 + + + +### Agentic Coding 智能体编程 + +Agentic Coding 是指让 AI 像一个自主的 “智能体”(Agent)一样工作,能够自己规划任务、执行操作、验证结果,而不只是被动地回答问题。 + +在 Cursor 的 Agent 模式中,AI 可以: + +- 自动读取和分析多个文件 +- 规划实现方案 +- 执行代码修改 +- 运行测试验证 +- 自动修复问题 + +这比传统的问答式 AI 更强大,因为它能自主完成复杂的多步骤任务。 + +![](https://pic.yupi.icu/1/agent-in-cursor.png) + + + +### 多智能体协作 + +多智能体协作(Multi-Agent)是指多个 AI 智能体分工合作,共同完成复杂任务。 + +比如,一个智能体负责设计架构,一个负责写前端代码,一个负责写后端代码,一个负责代码审查。它们像一个团队一样协作。 + +这两年,多智能体系统正在成为 AI 编程的重要趋势,能够处理更复杂的项目。 + +![](https://pic.yupi.icu/1/image-20260112112834637.png) + + + +### 智能体编排 + +编排是指协调和管理多个 AI 智能体或 AI 任务的过程,确保它们按正确的顺序和方式工作。 + +就像乐队指挥一样,编排器决定哪个智能体在什么时候做什么事情,如何传递信息,如何汇总结果。 + +![](https://pic.yupi.icu/1/image-20260112112854174.png) + + + +### Agent Loop 智能体循环 + +Agent Loop 是 AI 智能体的核心工作机制,描述了智能体如何持续运行来完成任务。 + +一个典型的 Agent Loop 包括: + +1. 感知:获取当前环境信息(读取文件、查看错误等) +2. 思考:分析情况,决定下一步行动 +3. 行动:执行具体操作(写代码、运行命令等) +4. 观察:检查行动的结果 +5. 循环:根据结果决定是否继续 + +这个循环会一直进行,直到任务完成或达到终止条件。理解 Agent Loop 能帮你更好地使用 Cursor Agent 等工具。 + + + +### ReAct 推理与行动 + +ReAct(Reasoning and Acting)是一种让 AI 智能体交替进行推理和行动的技术框架。 + +传统的 AI 要么只思考不行动,要么只行动不思考。ReAct 让 AI 能够: + +- 先推理:思考当前情况,制定计划 +- 再行动:执行具体操作 +- 观察结果:看看行动效果如何 +- 继续推理:根据结果调整策略 + +这种 “思考 - 行动 - 观察” 的循环让 AI 能更可靠地完成复杂任务,是现代 AI 编程工具的核心技术之一。 + +![](https://pic.yupi.icu/1/react-agent.png) + + + +### 工具调用 + +工具调用(Tool Use / Function Calling)是让 AI 能够使用外部工具和功能的技术。AI 本身只能生成文字,但通过工具调用,它可以: + +- 读写文件 +- 执行命令行命令 +- 搜索网页 +- 调用 API +- 操作数据库 + +![](https://pic.yupi.icu/1/1746590338968-0240c12b-2956-47f4-b8ff-5b5f831221f6.png) + +在 Vibe Coding 中,工具调用让 AI 从 "只会说" 变成 "能动手"。比如 Cursor 的 Agent 模式就是通过工具调用来修改你的代码文件的。 + + + +### Agent Skills 智能体技能 + +Agent Skills(智能体技能)是 Anthropic 在 2025 年 10 月推出的开放标准,用于给 AI 智能体扩展特定领域的专业能力。 + +简单来说,Skill 就是一个包含 `SKILL.md` 文件的文件夹,里面可以放置指令说明、脚本代码、参考资料等。当 AI 遇到相关任务时,会自动加载对应的 Skill 来增强自己的能力。 + +![](https://pic.yupi.icu/1/agent%2520skills.jpeg) + +你可以把 Skill 理解成给 AI 的 “新员工入职指南”。比如: + +- 一个 PDF 处理 Skill,教会 AI 如何填写 PDF 表单 +- 一个项目部署 Skill,包含你团队特有的部署流程和脚本 +- 一个代码审查 Skill,定义了你项目的代码规范和检查清单 + +Skills 的核心设计是 **渐进式披露**:AI 只在需要时才加载相关内容,不会一次性把所有信息都塞进上下文,既节省 Token 又保持灵活性。 + +![](https://pic.yupi.icu/1/agent%20skills%20bundling.jpeg) + + + +### A2A(Agent-to-Agent) + +A2A(Agent-to-Agent)是指 AI 智能体之间相互通信和协作的协议或方式,是多智能体系统的基础技术。 + +就像人和人之间需要语言来沟通,AI 智能体之间也需要标准化的方式来交换信息、分配任务、汇报结果。 + +A2A 协议让不同的 AI 智能体能够组成团队,分工合作完成复杂任务。 + +![](https://pic.yupi.icu/1/a2a-agent.png) + + + +## 上下文管理 + + +### 上下文(Context) + +上下文是 AI 在回答问题时能够参考的所有信息,包括: + +- 当前对话的历史 +- 你打开的代码文件 +- 项目的结构和配置 +- 你提供的参考资料 + +上下文越丰富、越相关,AI 生成的代码就越符合你的需求。这就像给一个新同事交接工作 —— 你给的背景信息越多,他上手就越快。 + + + +### 上下文工程 + +上下文工程(Context Engineering)是有策略地管理和优化提供给 AI 的上下文信息的技术。 + +核心目标是 **让 AI 拥有恰到好处的信息**。既不能太少(导致 AI 不了解情况),也不能太多(导致信息过载、成本上升)。 + +好的上下文工程包括: + +- 选择最相关的文件 +- 提供必要的背景说明 +- 使用规则文件定义项目规范 +- 适时清理无关的对话历史 + + + +### 规则文件 + +规则文件(Rules File)是放在项目根目录的配置文件,用来告诉 AI 你的项目规范、技术栈、代码风格等信息。 + +在 Cursor 中,这个文件叫 `.cursorrules`;在 Claude Code 中,这个文件叫 `CLAUDE.md`。(注意,随着工具版本的更新,这些文件的名称和标准可能会发生改变) + +有了规则文件,AI 每次生成代码时都会参考这些规则,生成的代码更符合你的项目风格,省去了反复强调的麻烦。 + + + +### RAG 检索增强生成 + +RAG(Retrieval-Augmented Generation)是一种让 AI 能够查阅外部知识库的技术。 + +普通的 AI 只能依赖训练时学到的知识,而 RAG 能让 AI 在回答问题时,先从你的文档、代码库、知识库中检索相关信息,然后基于这些信息生成回答。 + +这对于 Vibe Coding 特别有用,因为 AI 可以参考你项目中的已有代码,生成风格一致的新代码。 + +![](https://pic.yupi.icu/1/1745810809620-15c36bc0-5130-47fc-aaca-7d2a6ce6e3ce.png) + + + + +### 向量数据库 + +向量数据库是专门用来存储和查询 “向量”(一种数字表示形式)的数据库。在 AI 领域,它常用来存储文本的语义表示。 + +当你把代码或文档存入向量数据库后,AI 就能快速找到语义相似的内容,即使搜索词和原文不完全一样。 + +比如,你搜 “用户登录”,它能找到叫 "handleAuth" 的函数,因为它们在语义上是相关的。 + +![](https://pic.yupi.icu/1/1745813546910-9b39355a-85ab-4673-b52b-7f11349a55d7.jpeg) + + + + +### 嵌入 Embedding + +嵌入是把文本、代码等内容转换成数字向量的过程。这些向量能够捕捉内容的语义信息。 + +在向量空间中,语义相似的内容会靠得更近。这就是为什么向量数据库能进行语义搜索的原理。 + +你不需要深入理解嵌入的技术细节,只需要知道它是 RAG 和代码语义搜索的基础技术。 + +![](https://pic.yupi.icu/1/1745812543781-8ef377d0-2dac-4d17-a504-35de13fbaad0.png) + + + + +### MCP 模型上下文协议 + +MCP(Model Context Protocol)是 Anthropic 在 2024 年底推出的开放标准,用于让 AI 模型安全地连接外部数据源和工具。 + +你可以把 MCP 理解成 AI 世界的 “USB 接口”。有了 MCP,AI 就能方便地读取你的文件、访问数据库、调用各种工具,而不需要每个工具都单独开发接口。 + +![](https://pic.yupi.icu/1/1746710765234-c974bda8-666e-45b3-adc4-ace97cbb8c0a.png) + +在 Vibe Coding 中,MCP 让 AI 能够更方便地获取项目上下文,提高代码生成的准确性。 + +![](https://pic.yupi.icu/1/1746677838632-9278e62b-c850-4d3c-a835-297ccbe2061a.png) + + + +## AI 输出相关 + + +### AI 幻觉 + +AI 幻觉(Hallucination)是指 AI 编造了不存在的内容,比如虚构的 API、错误的函数用法、不存在的库。 + +这是大语言模型的固有问题,因为它们是基于概率生成内容的,有时会 “脑补” 不存在的东西。 + +遇到幻觉时的应对方法: + +- 要求 AI 提供文档链接验证 +- 自己查官方文档确认 +- 换个模型试试 +- 开新对话重新描述问题 + + + + +### 温度 + +温度(Temperature)是控制 AI 输出随机性的参数,取值通常在 0-2 之间。 + +- 温度低(如 0.1):输出更确定、更保守,适合写代码 +- 温度高(如 1.0):输出更随机、更有创意,适合头脑风暴 + +在编程场景中,通常使用较低的温度,让 AI 生成更稳定、更可预测的代码。 + + + + +### 流式输出 + +流式输出(Streaming)是指 AI 一边生成内容,一边实时显示给你,而不是等全部生成完再显示。 + +这就像看直播而不是看录播,你能实时看到 AI 的思考过程,如果发现方向不对,可以及时中断。 + +大多数 AI 编程工具都支持流式输出,让交互体验更流畅。 + + + +## 开发工具概念 + + +### IDE 集成开发环境 + +IDE(Integrated Development Environment)是程序员用来写代码的综合软件,通常包含代码编辑器、调试器、终端等工具。 + +VS Code 是目前最流行的 IDE。Cursor 和 Windsurf 都是基于 VS Code 开发的 AI 代码编辑器,继承了 VS Code 的功能,同时增加了 AI 能力。 + +![](https://pic.yupi.icu/1/image-20260112113710320.png) + + + + +### 代码编辑器 + +代码编辑器是用来编写和修改代码的工具。它通常提供语法高亮、代码补全、错误提示等功能,帮助你更高效地写代码。 + +常见的代码编辑器有 Sublime Text 等。区别于 IDE 的区别,它们相对轻量、启动快速,适合快速编辑单个文件;而 IDE 的功能更全面,集成了调试器、终端、版本控制等工具,适合大型项目开发。 + +在 Vibe Coding 时代,代码编辑器集成了 AI 能力,可以根据你的提示词自动生成代码、解释代码、修复错误。比如 Cursor 虽然功能强大像 IDE,但它的核心还是一个 AI 增强的代码编辑器。 + + + + +### 零代码平台 + +零代码平台(No-Code Platform)是不需要写代码就能创建应用的平台。你通过可视化界面拖拽组件、配置参数来构建应用。 + +在 AI 时代,像 Bolt.new、Lovable、v0.dev、百度秒哒这样的平台结合了零代码和 AI,你用自然语言描述需求,平台自动生成完整的应用。 + +零代码平台特别适合完全没有编程经验的新手,或者想快速做原型的场景。 + +![](https://pic.yupi.icu/1/image-20260104141512389.png) + + + + +### 代码补全 + +代码补全(Code Completion)是 AI 预测你接下来要写什么代码,并自动提供建议的功能。 + +当你写代码时,AI 会根据上下文推测你的意图,提供代码片段供你选择。按下 Tab 键就能接受建议,大大提高编码速度。 + +GitHub Copilot 是目前最知名的 AI 代码补全工具。 + + + + +### 代码审查 + +代码审查(Code Review)是检查代码质量、发现问题、提出改进建议的过程。 + +在传统开发中,一般会由同事或上级来做。在 Vibe Coding 中,你可以让 AI 帮你审查代码,它会指出潜在的 bug、安全问题、性能问题,并提供修改建议。 + +![](https://pic.yupi.icu/1/image-20260112114023226.png) + +但要注意,AI 的审查不能完全替代人工审查,特别是对于重要的生产代码。 + + + + +### Linter 代码检查器 + +Linter 是自动检查代码问题的工具,能发现语法错误、风格问题、潜在 bug 等。 + +常见的 Linter 有 ESLint(JavaScript)、Pylint(Python)等,它们像一个严格的语法老师,帮你保持代码规范。 + +在 Vibe Coding 中,Linter 能帮你快速发现 AI 生成代码中的问题。 + + + + +### 调试 + +调试(Debug)是找到并修复代码中错误的过程。当代码运行结果不符合预期时,你需要调试来定位问题。 + +调试的常用方法包括: + +- 设置断点,逐步执行代码 +- 查看变量的值 +- 阅读错误信息和堆栈跟踪 +- 添加日志输出 + +![](https://pic.yupi.icu/1/image-20251027214825243.png) + +在 Vibe Coding 中,你可以把错误信息发给 AI,让它帮你分析原因并提供修复方案。 + + + +## 项目管理概念 + + +### MVP(最小可行产品) + +MVP(Minimum Viable Product)是用最少的功能满足核心需求的产品版本。 + +做 MVP 的好处是: + +- 快速验证想法是否可行 +- 避免在不必要的功能上浪费时间 +- 更快获得用户反馈 + +比如做记账应用,MVP 版本可能只有记录支出、查看列表两个功能,其他高级功能以后再加。 + + + +### 迭代开发 + +迭代开发是把大项目分成多个小周期,每个周期完成一部分功能的开发方法。 + +每个迭代周期包括:计划 => 开发 => 测试 => 发布 => 反馈 => 改进。 + +这种方法特别适合 Vibe Coding,因为你可以让 AI 先实现核心功能,测试没问题后再逐步添加新功能。 + + + +### 重构 + +重构(Refactoring)是在不改变功能的前提下,改进代码结构和质量的过程。 + +重构的目的是让代码更清晰、更易维护、更高效。常见的重构包括: + +- 提取重复代码为函数 +- 改进变量和函数命名 +- 简化复杂的逻辑 +- 拆分过长的文件 + +在 Vibe Coding 中,你可以让 AI 帮你重构代码,但要小步进行,每次重构后都要测试。 + + + +### 技术债 + +技术债(Technical Debt)是为了快速完成功能而采用的临时方案,这些方案在未来需要花时间修复和改进。 + +就像信用卡欠款一样,虽然现在透支方便,但以后要还,还要加利息。 + +在 Vibe Coding 中,AI 生成的代码可能不是最优方案,积累太多技术债会让项目越来越难维护。定期重构是偿还技术债的方式,防止出现屎山代码。 + +![](https://pic.yupi.icu/1/v2-806707f0f72072f1db481c237fc035ea_1440w-20260112114757928.png) + + + +### 版本控制 + +版本控制是记录代码变更历史的系统,让你能追踪每次修改、对比不同版本、回退到之前的状态。 + +Git 是最流行的版本控制工具,GitHub 是最流行的代码托管平台。 + +在 Vibe Coding 中,版本控制特别重要。因为 AI 可能会生成有问题的代码,有了版本控制,你随时可以回退到之前正常的版本。 + +![](https://pic.yupi.icu/1/image-20260112114940228.png) + + + + +### 部署 + +部署(Deployment)是把开发好的应用发布到服务器上,让用户能够访问使用的过程。 + +常用的部署平台: + +- Vercel:适合前端和全栈应用 +- Netlify:适合静态网站和前端应用 +- Railway、Render:适合后端服务 + +很多零代码平台(如 Bolt.new)支持一键部署,点个按钮就能上线。 + + + +## 前后端概念 + + +### 前端 + +前端(Frontend)是用户能直接看到和交互的部分,包括网页界面、按钮、表单、动画等。 + +前端技术栈通常包括: + +- HTML:页面结构 +- CSS:样式和布局 +- JavaScript:交互逻辑 +- React/Vue/Next.js:现代前端框架 + +在 Vibe Coding 中,前端是 AI 最擅长生成的部分,因为效果可以直接看到,方便验证和调整。 + + + + +### 后端 + +后端(Backend)是用户看不到的部分,负责处理业务逻辑、数据存储、用户认证等。 + +后端技术栈通常包括: + +- Node.js/Python/Java:编程语言 +- Express/FastAPI/Spring:Web 框架 +- MySQL/PostgreSQL/MongoDB:数据库 + +后端比前端更复杂,需要考虑安全性、性能、数据一致性等问题。AI 生成的后端代码需要更仔细地审查。 + + + + +### 全栈 + +全栈(Full-stack)是指同时包含前端和后端的完整应用。全栈开发者是能同时处理前端和后端工作的程序员。 + +在 Vibe Coding 中,像 Bolt.new 这样的工具可以一次性生成全栈应用,前后端代码都帮你写好。 + +想进一步了解全栈程序员是什么、怎么成为全栈程序员?可以看鱼皮的这篇文章:[全栈程序员是什么?](https://www.bilibili.com/opus/534338036646820466) + + + + +### API + +API(Application Programming Interface)是不同程序之间通信的接口。 + +你可以把 API 理解成餐厅的菜单。菜单告诉你有什么菜可以点,怎么点,点了之后会得到什么。你不需要知道厨房怎么做菜,只需要按菜单点餐。 + +在 Web 开发中,前端通过 API 和后端通信,获取数据或提交操作。 + +![](https://pic.yupi.icu/1/1766718929375-35cd24d6-077e-4a5e-8cbb-7725edf8098f-20260112120508019.png) + +想进一步了解 API 接口和标准的 API 接口设计规范,可以观看 [鱼皮的 API 动画科普视频](https://www.bilibili.com/video/BV1WFBXBmExs)。 + + + + +### 数据库 + +数据库是存储和管理数据的系统。应用中的用户信息、内容、设置等都存在数据库里。 + +常见的数据库类型: + +- 关系型数据库(MySQL、PostgreSQL):数据以表格形式存储 +- 文档数据库(MongoDB):数据以 JSON 文档形式存储 +- 键值数据库(Redis):适合缓存和快速查找 + +![](https://pic.yupi.icu/1/1764309581505-2ff17977-695f-4d7c-a779-b5d35ad99d6b.png) + +![](https://pic.yupi.icu/1/1764309606178-1af81d82-b320-4bed-9c97-5dfe3847d8d3.png) + +在 Vibe Coding 中,你可以用 Supabase、Firebase 等 BaaS 服务,不用自己搭建和管理数据库。 + +如果你想系统学习数据库知识,可以看鱼皮的数据库入门教程:[数据库入门教程](https://www.bilibili.com/video/BV1iJSLBbEyD/) + + + + +### BaaS(后端即服务) + +BaaS(Backend as a Service)是提供现成后端功能的云服务,包括数据库、用户认证、文件存储等。 + +常用的 BaaS 服务: + +- Supabase:开源的 Firebase 替代品 +- Firebase:Google 的 BaaS 平台 +- PlanetScale:托管的 MySQL 服务 + +使用 BaaS,你不需要自己写后端代码和管理服务器,能大大加快开发速度。特别适合 Vibe Coding 场景。 + + + +## 写在最后 + +这篇文章涵盖了 Vibe Coding 中最常见的概念和术语。当然,AI 和编程领域的新概念还在不断涌现,这份词典也会持续更新。 + +你不需要一次记住所有概念,遇到不懂的词,回来查一查、或者问一问 AI 就好。随着你不断地实践 Vibe Coding,这些概念会自然而然地变得熟悉。 + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/90 Vibe Coding 常见问题和解决.md b/Vibe Coding 零基础教程/90 Vibe Coding 常见问题和解决.md new file mode 100644 index 0000000..ce6185e --- /dev/null +++ b/Vibe Coding 零基础教程/90 Vibe Coding 常见问题和解决.md @@ -0,0 +1,608 @@ +# Vibe Coding 常见问题和解决 + + +你好,我是程序员鱼皮,前腾讯全栈开发,全网 200 万粉的 [AI 编程博主](https://space.bilibili.com/12890453),也是 [AI 导航](https://ai.codefather.cn) 和 [编程导航](https://www.codefather.cn) 等 10+ 自研产品的创造者。 + +之前我系统讲解了 Vibe Coding 的各种技巧和方法,这篇文章我来汇总一下大家在 Vibe Coding 实践中最常遇到的问题和解决方案。 + +你可以把它当作速查手册。遇到问题时,先来这里找找,说不定就能找到答案。如果这里没有,也可以去我的 [编程导航](https://www.codefather.cn/) 提问,或者在 [鱼皮 AI 导航](https://ai.codefather.cn/) 中跟其他 AI 爱好者交流并寻找答案。 + + + + +## Vibe Coding 概念理解 + + +### Vibe Coding 和传统编程有什么区别? + +回答:传统编程是你自己写代码,Vibe Coding 是你用自然语言描述需求,让 AI 帮你写代码。传统编程需要你掌握编程语言的语法和细节,Vibe Coding 更注重需求的表达和 AI 的引导。但本质上,它们都是在解决问题,只是方式不同。你可以把传统编程理解成自己做饭,Vibe Coding 理解成点外卖 —— 最终都能吃上饭,但过程完全不一样。 + + + +### Vibe Coding 适合所有人吗? + +回答:Vibe Coding 降低了编程的门槛,让更多人能参与开发。但它不是万能的,对于非常复杂的系统、对性能要求极高的项目、需要深度优化的场景,传统编程可能更合适。Vibe Coding 最适合快速原型开发、个人项目、中小型应用、工具类软件等场景。如果你是零基础想学编程,或者想快速把想法变成产品,Vibe Coding 就很适合你。 + + + + +### 学了 Vibe Coding 还需要学传统编程吗? + +回答:需要,但不用急。Vibe Coding 能帮你快速实现功能,但要真正理解代码、调试复杂问题、优化性能,还是需要编程基础。建议边用 Vibe Coding 做项目,边学习编程知识。这样学习效率更高,也更有动力。你可以先用 AI 做出几个项目,有了成就感后再系统学习编程,会比一开始就啃书本有意思得多。 + + + + +### AI 生成的代码靠谱吗? + +回答:AI 生成的代码能用,但不一定完美。它可能有 bug、性能问题、安全隐患。所以你需要测试功能、审查代码、持续优化。不要盲目相信 AI,要保持批判性思维。就像你点外卖也要检查一下菜品是否新鲜一样,AI 生成的代码也需要你把关。不过随着 AI 模型的进步,代码质量已经越来越高了。 + + + + +### Vibe Coding 会取代程序员吗? + +回答:不会完全取代,但会改变程序员的工作方式。就像计算器没有取代数学家,搜索引擎没有取代图书馆员一样,AI 编程工具会成为程序员的助手,而不是替代品。未来的程序员需要更强的产品思维、架构能力和问题解决能力,而不只是写代码的能力。会用 AI 的程序员会比不会用的更有竞争力。 + + + + +### 什么是 AI 幻觉? + +回答:AI 幻觉是指 AI 编造了不存在的内容,比如虚构了一个不存在的 API、错误的函数用法、或者根本不存在的库。这是 AI 模型的固有问题,因为它是基于概率生成内容的。遇到幻觉时,不要慌,要求 AI 提供文档链接验证,或者自己查官方文档确认。如果 AI 坚持错误,可以换个模型试试,或者开新对话重新描述问题。 + + + + +### MVP 是什么意思? + +回答:MVP 是 Minimum Viable Product 的缩写,意思是最小可行产品。简单来说就是先做一个最简单但能用的版本,然后再慢慢完善。比如做记账应用,MVP 版本可能只有记录支出、查看列表、计算总额这三个功能,其他的分类、图表、导出等功能以后再加。这样做的好处是能快速验证想法,避免一开始就陷入细节,保持开发动力。 + + + + +### 什么是上下文窗口? + +回答:上下文窗口是指 AI 模型一次能 “记住” 的内容量,通常用 Token 来衡量。比如 Claude Sonnet 4.5 的上下文窗口是 200K Token,大约相当于 15 万个中文字。上下文窗口越大,AI 能处理的代码量就越多,能记住的对话历史就越长。如果你的项目代码很多,选择上下文窗口大的模型会更合适,比如 Gemini 3 Pro 支持 1M Token。 + + + + +## Vibe Coding 工具选择 + + +### Cursor 和 Windsurf 哪个更好? + +回答:两个都很好,各有特点。Cursor 生态更成熟,社区更大,插件更多,文档更完善。Windsurf 有一些创新功能比如 Cascade 模式,界面也更现代。 + +如果你是新手,建议从 Cursor 开始,因为遇到问题更容易找到解决方案。如果你喜欢尝鲜,可以试试 Windsurf。当然最好的办法是 “我全都要”,两个都试试,看哪个更适合你的工作方式。 + + + + +### 免费版够用吗? + +回答:对于学习和小项目,免费版够用。Cursor 免费版每月有一些特定模型的额度。但如果是日常工作或大项目,建议用付费版。付费版的额度更多,模型更强,体验更好,本质是拿金钱换时间。 + +可以先用免费版试试,觉得好用再升级。学生党可以充分利用各种免费资源,完全够学习使用了。 + + + + +### 如何选择 AI 模型? + +回答:根据任务复杂度和预算选择。简单任务用便宜的模型(Gemini Flash、DeepSeek),复杂任务用强大的模型(Claude Opus、GPT-5)。如果做前端 UI,Gemini 3 Pro 表现很好。如果做全栈项目,Claude Sonnet 比较全面。如果预算有限,国产模型(DeepSeek、通义千问、智谱 GLM)性价比很高。 + +如果不确定,可以用 Auto 模式让工具自动选择,或者先用便宜的模型试试,不行再换强模型。 + + + + +### Bolt.new 和 v0.dev 有什么区别? + +回答:Bolt.new 更适合做全栈应用,能生成完整的前后端代码,还能直接在浏览器里运行和调试。v0.dev 更专注于前端 UI 组件,特别擅长生成漂亮的界面。如果你想快速做一个完整的应用,用 Bolt.new。如果你只是想生成一些 UI 组件,用 v0.dev。两个都是零代码平台,不需要安装软件,打开浏览器就能用,特别适合新手。 + + + + +### API Key 在哪里获取? + +回答:去对应服务的官网注册账号,然后在设置或 API 页面生成 Key。比如 OpenAI 的 Key 在 platform.openai.com 获取,Anthropic 的 Claude Key 在 console.anthropic.com 获取,Supabase 的 Key 在项目设置里。 + +生成 API Key 后记得妥善保管,不要泄露,也不要提交到 GitHub 等公开仓库。建议用环境变量或配置文件来管理 API Key,避免硬编码在代码里。 + + + + +### 如何在国内访问 Cursor 和 Claude? + +回答:Cursor 可以直接访问,但 Claude 官网在国内访问可能有困难。可以使用国产模型替代,比如 DeepSeek、通义千问、智谱 GLM 在编程能力上已经很接近国际模型了,而且访问速度更快,价格更便宜。如果一定要用 Claude,可以考虑使用 API 方式,或者通过 OpenRouter 等中转服务。 + + + + +### Cursor 有哪些 AI 模式? + +回答:Cursor 2.0 主要提供了 2 大 AI 交互模式 + +1. Chat 模式:对话模式,适合问问题、解释代码、小范围修改。 +2. Agent 模式:最强大的模式,可以自主规划和执行复杂任务,能同时修改多个文件,支持并行运行多个代理。 + +如果你只是想问问题或改一个函数,用 Chat 就够了。如果要添加新功能、涉及多个文件的修改,用 Agent 更合适。Agent 模式还支持 Plan Mode,会先生成计划让你确认,再执行修改。 + + + + +### 选择零代码平台还是代码编辑器? + +回答:如果你是完全零基础,或者只是想快速做个原型,用零代码平台(Bolt.new、v0.dev)。如果你想做复杂项目,需要更多控制权,或者想学习编程,用代码编辑器(Cursor、Claude Code 等)。 + +零代码平台简单快速,但灵活性有限。代码编辑器功能强大,但学习难度更大。建议先用零代码平台体验一下,有了感觉再学代码编辑器。 + + + + +## Vibe Coding 使用技巧 + + +### AI 生成的代码报错怎么办? + +回答:把完整的错误信息和相关代码复制给 AI,让它分析和修复。注意要包含完整的错误堆栈,不要只复制一句话。如果 AI 修复不了,可以切换到更强的模型试试,或者开新对话重新描述问题。也可以自己查文档或搜索解决方案,在社区或论坛求助。很多时候错误信息本身就包含了解决线索,学会看错误信息很重要。 + + + + +### AI 总是用错误的技术栈怎么办? + +回答:在每次对话开始时,明确说明你的技术栈。比如 “我用的是 React + TypeScript + Tailwind CSS,请用这些技术实现”。 + +或者在项目中配置 `.cursorrules` 规则文件,让 AI 自动知道你的技术栈。 + +如果 AI 还是用错,及时中断并纠正:“我用的是 React,不是 Vue,请用 React 重写!” + +多次强调后 AI 就会记住了。 + + + + +### 如何让 AI 生成的代码更符合项目风格? + +回答:提供参考代码,让 AI 模仿。比如:“请参考这个组件的风格来写新组件”,然后贴上参考代码。 + +或者在上下文文件中详细说明代码风格,包括命名规则、组件结构、注释格式等。 + +还可以提供一个代码规范文档,让 AI 按照规范来写。 + +最重要的是,提示词越具体越好,不要只说 “写得好看一点”,要说清楚什么是好看。 + + + + +### AI 生成的代码性能不好怎么办? + +回答:先用 Chrome DevTools、Lighthouse 等工具找到性能瓶颈,然后让 AI 针对性地优化。比如 “这个列表渲染很慢,请用虚拟滚动优化”,或者 “这个函数在大数据量时很慢,请优化算法”。 + +不要一开始就追求完美性能,先让功能跑起来,发现瓶颈再优化,大部分情况下 AI 生成的代码性能已经够用了。 + + + + +### 如何处理 AI 的幻觉? + +回答:如果 AI 编造了不存在的 API,要求它提供文档链接。如果提供不了,说明是幻觉,让它用正确的 API。 + +如果 AI 陷入死循环,切断上下文,开新对话。 + +如果 AI 坚持错误方案,换个模型试试,或者自己查文档确认。 + +遇到不确定的内容,一定要验证,不要盲目相信。建议养成查文档的习惯,这是程序员的基本功。 + + + + +### 如何调试 AI 生成的代码? + +回答:使用断点调试,而不是只用 console.log。 + +可以在浏览器或编辑器中设置断点,单步执行代码,查看变量值。这样能更清楚地看到代码的执行过程。如果还是找不到问题,把错误信息和代码给 AI,让它帮你分析。也可以让 AI 添加详细的日志,帮助你理解代码的执行流程。 + +调试是程序员的必备技能,值得多花时间学习。 + + + + +### 如何提高提示词的质量? + +回答:提示词要具体、清晰、有结构。不要说 “做一个网站”,要说 “做一个记账网站,包含添加支出、查看列表、统计总额三个功能,界面用蓝色调,简洁现代风格”。 + +可以把提示词分成几个部分:功能需求、界面要求、技术要求。还可以提供参考案例,比如 “界面风格参考 Notion”。 + +记住,提示词写得越详细,AI 生成的结果越符合预期。 + + + + +### AI 生成的代码太冗长怎么办? + +回答:让 AI 重构代码,提取重复部分,简化逻辑。比如 “这段代码太长了,请重构一下,提取公共函数,减少重复”。或者 “请用更简洁的方式实现这个功能”。 + +AI 一般会优先让代码能跑起来,而不是追求简洁,所以需要你主动要求优化。不过也不要过度追求简洁,可读性更重要。 + + + + +### 如何让 AI 解释代码? + +回答:通过让 AI 解释代码,你能更快地理解和学习。可以直接问 AI “这段代码是做什么的?请详细解释”,或者 “这个函数的逻辑是什么?为什么要这样写?”。AI 会用通俗易懂的语言给你解释。 + +如果解释太简单,可以说 “请更详细地解释,包括每一步的作用”。如果解释太复杂,可以说 “请用更简单的语言解释,我是新手”,甚至可以说 “我是傻子”,效果可能会出其不意~ + + + + +### 如何处理 AI 生成的过时代码? + +回答:AI 的训练数据可能有滞后,所以有时会生成旧版本的代码。你需要明确告诉 AI 使用最新版本,比如 “请用 React 19 的最新写法” 或者 “请用 Next.js 15 的 App Router”。并且一定要提供给 AI 最新的官方文档。 + + + + +### 如何在提示词中加入代码示例? + +回答:直接把代码用三个反引号包裹起来,然后贴到提示词里。比如: + +````markdown +请参考这段代码的风格: + +```jsx +代码内容 +``` +```` + +如果代码比较长,可以只贴关键部分。也可以利用 AI 代码编辑器的 `@` 能力,让 AI 读取项目中的文件,比如 “请参考 @src/components/Button.tsx 的风格”。提供代码示例能让 AI 更准确地理解你的需求。 + + + + +### AI 总是生成重复的代码怎么办? + +回答:提醒 AI 提取公共函数或组件。比如 “这些代码有很多重复,请提取成公共函数” 或者 “请创建一个可复用的组件”。也可以在提示词里明确说 “避免重复代码,使用 DRY 原则”。如果 AI 还是生成重复代码,可以自己手动重构,或者换个模型试试。 + + + + +### 如何处理 AI 生成的不安全代码? + +回答:让 AI 审查代码的安全性。比如 “请检查这段代码是否有安全问题” 或者 “请添加输入验证,防止 XSS 攻击”。也可以使用安全扫描工具,比如前端代码可以用 ESLint 的安全插件。对于敏感操作(比如用户认证、支付),一定要格外小心,最好请有经验的开发者、或者多用几个不同的高级 AI 模型来交叉验证。 + + + + +## Vibe Coding 项目开发 + + +### 项目做到一半代码变得很乱怎么办? + +回答:及时重构,不要等到完全乱套了再处理。每完成一个功能,花 10 ~ 15 分钟整理一下代码。提取重复代码,拆分大函数,改进命名,添加注释。 + +如果已经很乱了,可以让 AI 帮你重构,但要小步进行,每一步都要测试。比如 “请帮我重构这个文件,提取公共函数”,而不是 “重构整个项目”。小步快跑,逐步改进。 + +注意,重构前一定要先用 Git 提交当前代码!这样即使重构出问题,也能随时回退到之前的版本。养成频繁提交的习惯,是保护代码的最好方式。 + + + + +### 如何部署 AI 生成的项目? + +回答:很多零代码平台(比如 Bolt.new)支持一键部署,点个按钮就能上线。 + +如果要手动部署,可以用 Vercel、Netlify 等平台。把代码推送到 GitHub,然后在平台上连接仓库,它会自动构建和部署。 + +如果需要后端,可以用 Supabase 等 BaaS 服务。如果需要用自己的服务器,可以利用 Docker 容器化部署。 + +总之,部署其实没那么难,跟着鱼皮的部署教程一步步来就行。 + + + + +### 项目上线后出了 bug 怎么办? + +回答:首先,用监控工具(Sentry、LogRocket)收集错误信息。然后,在本地复现问题,找到原因。 + +修复后,让 AI 多写测试,确保问题不再出现。最后尽快部署修复版本。 + +为了避免这种情况,上线前要充分测试,包括功能测试、边界情况测试、不同设备测试。可以让朋友帮忙测试,往往能发现你一个人没注意到的问题。 + + + + +### 如何从玩具项目变成真正的产品? + +回答:需要考虑到很多方面,比如 + +1. 完善错误处理,考虑各种异常情况 +2. 添加测试,确保功能稳定 +3. 优化性能,让应用跑得更快 +4. 加强安全,保护用户数据 +5. 改进 UI,让应用更好用 +6. 写好文档,方便维护和扩展 +7. 还要考虑 SEO、监控、日志等 + +这是一个持续改进的过程,不要想着一步到位。每次改进一点,慢慢就能变成真正的产品。 + + + + +### 如何评估项目的质量? + +回答:不要只关注功能,质量同样重要。一个功能完整但 bug 一堆的项目,不如一个功能简单但稳定可靠的项目。 + +可以从这几个方面评估: + +- 功能完整性(是否实现了所有需求) +- 代码质量(是否清晰、可维护) +- 性能表现(加载速度、响应速度) +- 安全性(有没有漏洞) +- 用户体验(是否好用) +- 测试覆盖率(是否有足够的测试) + + + + +### 遇到 AI 解决不了的问题怎么办? + +回答:首先,一定不要对着一个 AI 死磕,可以换个 AI 模型试试,不同模型擅长的领域不一样。 + +如果你有编程基础,最好看看官方文档,文档是最权威的资料。 + +或者搜索类似问题的解决方案,比如 GitHub Issues 区,因为很多问题别人已经遇到过了,照搬解决方案就好。 + +还可以在社区或论坛求助,比如在 [编程导航](https://codefather.cn/) 提问;或者请教有经验的开发者,有时候一句话就能点醒你。 + +记住,AI 是工具,不是万能的,人的智慧同样重要。 + + + + +### 如何管理项目的版本和代码? + +回答:用 Git 做版本控制,把代码托管到 GitHub。 + +- 每完成一个功能就提交一次,写清楚提交信息 +- 如果要尝试新功能,创建新分支,测试没问题再合并 +- 定期备份代码,避免数据丢失 +- 如果是团队协作,制定好分支策略和代码规范 + +Git 是程序员的必备技能,绝对值得花时间学习。但是不用死记硬背 Git 的命令,因为 AI 就可以帮你搞定。 + + + + +### 如何处理项目依赖和包管理? + +回答:用 npm 或 pnpm 管理依赖,定期更新包版本。 + +还要注意下面几点: + +1. 注意检查包的安全性,避免使用有漏洞的包。 +2. 如果遇到依赖冲突,可以让 AI 帮你解决 +3. 不要安装太多不必要的包,每个包都会增加项目体积和复杂度 +4. 定期清理不用的依赖,保持项目整洁 + +如果不确定要用哪个包,可以让 AI 推荐,它会给你几个选择和对比。 + + + + +### 如何测试 AI 生成的代码? + +回答:如果是重要项目,可以让 AI 帮你写自动化测试,比如单元测试、集成测试。 + +但是不要完全相信 AI,必须手动测试!把每个功能都点一遍,试试各种边界情况。 + +测试不仅能发现 bug,还能让你更了解代码的行为。不要觉得测试浪费时间,它能帮你省下更多调试的时间。还可以让朋友或邀请用户帮忙测试,他们往往能发现你没想到的问题。 + + + + +### 如何优化 AI 生成的 UI 界面? + +回答:可以让 AI 参考优秀的设计,比如通过文字描述 “界面风格参考 Notion,简洁现代”,或者找一些优秀网站的截图贴给 AI 理解并参考。 + +如果你有一定的编程基础,或者有自己喜欢的 UI 组件库,可以直接推荐给 AI。比如 Ant Design、Material-UI、shadcn/ui,它们提供了现成的漂亮组件。 + +记住,好的 UI 不是花哨,而是清晰、一致、好用。 + + + + +### 如何处理多人协作开发? + +回答:使用 Git 分支管理,每个人在自己的分支上开发,完成后合并到主分支。 + +此外,还有几个重要事项: + +1. 制定代码规范,保持代码风格一致。可以让 AI 帮你生成团队协作文档,包括开发规范、Git 工作流等。 +2. 使用 Pull Request 进行代码审查,互相学习 +3. 定期同步代码,避免冲突 +4. 使用项目管理工具(比如 Notion)分配任务 +5. 保持沟通,遇到问题及时讨论 + + + + +### 如何给项目添加数据库? + +回答:最简单的方法是用 BaaS 服务,比如 Supabase、Firebase。它们提供了数据库、认证、存储等功能,不需要自己搭建服务器。 + +直接告诉 AI “请集成 Supabase 数据库”,它会帮你生成代码。 + +对于小项目,BaaS 服务完全够用,而且省心。 + +如果需要更多控制权,可以用 PostgreSQL、MongoDB 等数据库,但需要自己部署和管理。 + + + + +### 如何处理用户认证和授权? + +回答:不要自己从零实现认证系统,太容易出安全问题。建议使用现成的方案,比如 Supabase Auth、Firebase Auth、Auth0、NextAuth.js。这些方案提供了完整的认证流程,包括邮箱验证、密码重置、第三方登录等。 + +直接告诉 AI “请用 NextAuth.js 实现用户登录注册”,它会帮你集成。 + +如果是学习项目,可以简单实现,但商业项目一定要用成熟方案。 + + + + +## Vibe Coding 学习成长 + + +### 零基础能学 Vibe Coding 吗? + +回答:完全可以。Vibe Coding 降低了编程门槛,零基础也能上手。建议从零代码平台(Bolt.new)开始,先做出几个小项目,建立信心。然后边做边学,了解一些基本的编程概念,比如变量、函数、条件判断、循环等。不用一开始就学很深,能看懂 AI 生成的代码就行。慢慢地,你会发现自己能理解越来越多,甚至能自己修改代码了。 + + + + +### 学习 Vibe Coding 需要多长时间? + +回答:入门很快,不到 10 分钟就能做出第一个项目。但要熟练掌握,需要日复一日的实践。建议每天花 1 ~ 2 小时练习,先做一些小项目积累经验、然后尝试做商业级产品。 + +记住,学习是持续的过程,不要急于求成。重要的不是学多快,而是能不能坚持。每天进步一点点,几个月后回头看,你会惊讶于自己的成长。 + + + + +### 有哪些学习资源推荐? + +回答: + +1. 官方文档是最好的资源,比如 Cursor 的文档、Claude 的文档。 +2. [鱼皮的AI 导航](https://ai.codefather.cn/) 收录了大量 AI 工具和学习资源。 +3. B 站、YouTube 上有很多 Vibe Coding 的视频教程,我在 “程序员鱼皮” 这个账号也经常做这方面的分享。 +4. GitHub 上有 awesome-vibe-coding 这样的资源合集 +5. 还可以加入 [编程导航](https://www.codefather.cn/) 等开发者社区,和其他人交流学习。 + + + + +### 如何提高 Vibe Coding 水平? + +回答:多实践是最重要的。 + +- 做各种类型的项目,从简单到复杂 +- 学习优秀的提示词和对话技巧,看别人是怎么用 AI 的。 +- 理解 AI 生成的代码,不要只是复制粘贴。 +- 总结经验教训,记录遇到的问题和解决方法。 +- 保持学习,关注新工具和新技术。 +- 可以尝试重构之前的项目,用新学的技巧改进它 +- 教别人也是很好的学习方式,能加深你的理解,输出促进输入 + + + + +### 如何平衡 AI 辅助和自主学习? + +回答:不要完全依赖 AI,也不要完全排斥 AI。可以先让 AI 生成代码,然后自己理解和修改。遇到不懂的地方,先自己思考,再问 AI。 + +如果你还处于入门阶段,可以定期做一些不用 AI 的练习,巩固基础。 + +**记住,AI 是工具、是加速器,但不能代替你的思考。** + +就像计算器不能代替数学思维一样,AI 不能代替编程思维。用 AI 提高效率,用思考提升能力。 + + + + +### 如何保持学习动力? + +回答:做自己感兴趣的项目,而不是为了学习而学习。 + +你可以: + +- 设定小目标,每完成一个就奖励自己 +- 和朋友一起学习,互相鼓励 +- 分享你的作品,获得反馈和认可 +- 记录学习过程,看到自己的进步 + +学习是马拉松,不是短跑,慢慢来,享受过程。最重要的是,记住你为什么开始学习,想做什么,想成为什么样的人。不要和别人比,而是和过去的自己比。 + + + + +## Vibe Coding 成本和效率 + + +### 如何控制 AI 使用成本? + +回答:有非常多节省真金白银的技巧 + +- 简单任务用便宜的模型,复杂任务才用贵的模型 +- 充分利用免费资源,比如 DeepSeek、通义千问的免费额度 +- 优化提示词,一次说清楚,减少反复对话 +- 避免让 AI 生成大量不必要的代码 +- 使用缓存功能,减少重复计算 + +如果是学习阶段,免费资源完全够用。如果是商业项目,成本是值得的,因为 AI 能大大提高效率,节省的人力成本远超 AI 成本。 + + + +### 如何提高开发效率? + +回答:有很多提高效率的技巧: + +- 使用快捷键,减少鼠标操作 +- 利用 Agent 模式,让 AI 自动化工作,减少人工投入的时间 +- 准备好提示词模板,常用的需求直接套用 +- 使用代码片段,快速插入常用代码 +- 配置好开发环境,减少重复工作 +- 学习一些基础知识,能更快理解和修改 AI 生成的代码 + +最重要的是,做好规划,想清楚再动手,避免返工。Vibe Coding 完整项目时,真正的效率不是快,而是少走弯路。 + + + +### 如何避免重复劳动? + +回答:程序员的优点就是 “懒”,避免重复劳动的关键就是 **沉淀和复用**。 + +具体的几种做法: + +- 把常用的提示词、配置、代码片段保存起来,需要时直接复制,或者让 AI 复用。 +- 使用模板项目,新项目基于模板创建,而不是从 0 开始生成 +- 把解决过的问题记录下来,下次遇到直接查阅 +- 建立自己的知识库,积累经验 + + + +### 如何选择合适的订阅计划? + +回答:如果是学习阶段,先用免费版,不够用再升级。如果是日常工作或者要做个商业项目,订阅 Cursor Pro 的性价比最高。如果需要大量使用,可以考虑 API 按量付费。如果预算有限,国产模型的订阅更便宜。 + +总之,不要一开始就订阅最贵的,先试用,找到最适合自己的。也不要排斥付费,毕竟工具是为了提高效率,如果能帮你节省时间,成本就是值得的。 + + + +## 写在最后 + +这篇文章汇总了几十个常见问题,涵盖了概念理解、工具选择、使用技巧、项目开发、学习成长、成本效率等各个方面。这些问题都是我本人在实践中遇到的、或者在 [AI 编程社区](https://ai.codefather.cn/) 里经常被学员们问到的。 + +当然,Vibe Coding 还在快速发展,新的问题会不断出现,新的解决方案也会不断涌现。建议你保持学习、多关注社区动态、多和其他开发者交流,无限进步! + + + + + + +## 推荐资源 + +1)鱼皮 AI 导航网站:[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn) + +2)编程导航学习圈:[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn) + +3)程序员面试八股文:[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com) + +4)程序员写简历神器:[专业模板、丰富例句、直通面试](https://www.laoyujianli.com) + +5)1 对 1 模拟面试:[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com) diff --git a/Vibe Coding 零基础教程/README.md b/Vibe Coding 零基础教程/README.md new file mode 100644 index 0000000..a5b9b0e --- /dev/null +++ b/Vibe Coding 零基础教程/README.md @@ -0,0 +1,128 @@ +# 鱼皮 Vibe Coding 零基础入门教程 + +大家好,我是程序员鱼皮。 + +如今 Vibe Coding 已经火遍全网,不仅是程序员,连设计师、产品运营、甚至完全不懂技术的人都开始用 Vibe Coding 实现自己的想法,用 AI 做出了自己的产品并盈利变现。 + +为了帮大家紧跟时代,我一人爆肝,创作了一套 [《Vibe Coding 零基础入门教程》](https://ai.codefather.cn/vibe),完全免费开源! + +上千张图、几十万字,结合了我两年半的 AI 编程经验 + 项目开发经验 + 产品变现经验,我的目标只有一个:**帮助任何人快速掌握 Vibe Coding,哪怕零基础,也能快速开发上线自己的产品并盈利。** + +(todo 补充开源截图) + +臭不要脸一下,我敢说这套免费教程吊打 90% 的付费 Vibe Coding 内容,毕竟我投入了足够多的时间。 + +- 教程文档开源地址:https://github.com/liyupi/ai-guide +- 教程在线阅读地址:https://ai.codefather.cn/vibe + +欢迎大家 Star 收藏、分享给身边的朋友! + +![](https://pic.yupi.icu/1/vibe%252520coding%252520show%2525E5%2525A4%2525A7-20260113165845170.jpeg) + + + +## 什么是 Vibe Coding? + +简单来说,**Vibe Coding 就是用人话和 AI 聊天,让 AI 帮你写代码**。你不需要记住任何语法,只需要把需求讲清楚,比如说 “帮我做一个记账页面”,AI 就能帮你生成。编程变得像聊天一样自然,这就是 Vibe Coding 的魅力。 + + + +## 为什么要学 Vibe Coding? + +以前学编程要花几个月,现在用 Vibe Coding 几天就能上手。今天想到一个点子,今天就能做出来,生产力提升数十倍! + +学了 Vibe Coding 后,你可以快速做出提升办公效率的小工具、可以开发解决生活问题的应用、可以把脑海中的创意变成真实的产品并盈利。 + + + +## 这套教程有什么? + +网上虽然有很多 AI 编程教程,但要么太碎片化、要么只讲工具不讲方法、要么缺少实战案例。 + +这就导致大家只能东拼西凑、搜到一个学一招,很难系统地掌握 Vibe Coding。 + +因此,我出手了! + +这套教程涵盖了 Vibe Coding 的方方面面。从零基础入门 => 10 分钟做出第一个项目 => 学会多种 AI 编程工具 => 实战各类 AI 项目 => 掌握 AI 编程核心技巧 => 跑通产品变现全流程,再搭配 AI 编程学习资源、AI 知识百科、常见问题解决手册,能够帮你玩转 Vibe Coding,应对各种需求。 + +![](https://pic.yupi.icu/1/%E9%B1%BC%E7%9A%AE%E7%9A%84AI%E5%AF%BC%E8%88%AA-AI%E5%B7%A5%E5%85%B7%E7%94%A8%E6%B3%95%E5%A4%A7%E5%85%A8.png) + +我精心梳理了内容结构,让你能够一条龙学习,或者快速找到适合自己阅读的内容。 + +- 基础必读:帮你快速理解 Vibe Coding 并上手实践,10 分钟做出第一个作品 +- 编程工具:帮你选择适合自己的 AI 编程工具,包括 AI 模型选择、AI 零代码平台、AI 智能体平台、AI 代码编辑器、AI 命令行工具、IDE 插件等 +- 项目实战:手把手带你从 0 到 1 做出真实可用的产品,覆盖个人工具、AI 应用、全栈应用、小程序等多种类型 +- 经验技巧:帮你提升 Vibe Coding 效率和质量,包括核心心法、对话工程、上下文管理、幻觉处理、代码质量保障等 +- 产品变现:教你如何让产品产生价值,涵盖需求分析、技术选型、架构设计、盈利模式、SEO 优化、自媒体运营等 +- 编程学习:为想深入学习编程的同学准备的进阶内容,包括学习路线、知识百科、资源大全、MCP 开发、面试刷题等 +- 资源宝库:汇集各种实用资源,包括工具大全、提示词模板、AI 概念大全、Vibe Coding 常见问题等 + +![](https://pic.yupi.icu/1/%E9%B1%BC%E7%9A%AE%E7%9A%84%20AI%20%E5%AF%BC%E8%88%AA-3%E6%AF%944%E5%A4%A7%E7%BA%B2_%E5%89%AF%E6%9C%AC.jpg) + +这套教程不是枯燥的理论堆砌,而是以实战为核心。配有丰富的项目案例和大量截图示例,手把手带你边学边做,真正掌握 Vibe Coding。 + +![鱼皮的AI导航 - 教程图文并茂](https://pic.yupi.icu/1/%E9%B1%BC%E7%9A%AE%E7%9A%84%20AI%20%E5%AF%BC%E8%88%AA-%E6%95%99%E7%A8%8B%E5%9B%BE%E6%96%87%E5%B9%B6%E8%8C%82.png) + + + +## 适合哪些同学? + +**1)适合任何想用 AI 提升效率的人** + +如果你曾经想学编程,但被复杂的语法、难懂的概念劝退过;或者你有不错的创意,想要快速开发上线自己的产品;又或者你只是想用 AI 提升日常办公效率、做个小工具解决工作中的重复劳动。用 Vibe Coding,几天就能上手,像聊天一样编程。 + +**2)适合想提升效率的程序员** + +如果你是一个传统程序员,每天被重复的代码折磨得想摔键盘。用 Vibe Coding,生产力提升数十倍不是梦。教程中的经验技巧和项目实战,能帮你快速进阶成为 Vibe Coding 高手。 + +**3)适合想产品变现的创业者** + +如果你想把想法变成产品并盈利,这套教程不仅教你怎么做产品,还教你怎么让产品产生价值。从需求分析到盈利模式,从 SEO 优化到自媒体运营,我会把自己做过 10+ 自研产品、从 0 到 200 万粉的经验都分享给你。 + +![鱼皮的AI导航-产品经验](https://pic.yupi.icu/1/%E9%B1%BC%E7%9A%AE%E7%9A%84%20AI%20%E5%AF%BC%E8%88%AA-%E6%95%99%E7%A8%8B%E4%BA%A7%E5%93%81%E7%BB%8F%E9%AA%8C.png) + + + +## 从哪开始学习? + +**零基础新手** + +- 第 1 天:读完基础必读,理解 Vibe Coding 并做出第一个作品 +- 第 1 ~ 2 周:学习 AI 编程工具 + 做几个简单项目 +- 之后:按需学习经验技巧和产品变现 + +**有编程基础** + +- 第 1 天:快速过完基础内容,完成快速上手教程 +- 第 1 周:学习主流 AI 编程工具,尝试重构之前的项目 +- 之后:重点学习进阶技巧,提升对话和上下文管理能力 + +实战是最好的老师,无论你是什么背景,都要在学习过程中多 Vibe 一些项目,在实战中遇到问题并解决,这才是最有效的学习方式。 + +![鱼皮的AI导航-AI编程经验技巧](https://pic.yupi.icu/1/%E9%B1%BC%E7%9A%AE%E7%9A%84AI%E5%AF%BC%E8%88%AA-%E6%95%99%E7%A8%8B%E7%BB%8F%E9%AA%8C%E6%8A%80%E5%B7%A7.png) + + + +## 写在最后 + +我一直相信,知识分享是互利共赢的。 + +这套教程完全免费开源,希望能帮更多人打开 Vibe Coding 的大门。 + +但毕竟是一个人编写的,会有不足的地方,我会持续更新和完善内容。 + +**如果这套教程对你有帮助的话,希望能点赞或者 Star ⭐️ 支持一下!** + +别犹豫,现在就打开教程,10 分钟后你就能做出第一个作品,跟着鱼皮一起开启 Vibe Coding 之旅吧!🛫 + + + +📖 教程文档开源地址:https://github.com/liyupi/ai-guide + +🌐 教程在线阅读地址:https://ai.codefather.cn/vibe + +🎬 作者的视频合集:https://space.bilibili.com/12890453 + +💬 交流反馈:欢迎在 [AI 导航社区](https://ai.codefather.cn) 提问 + +