[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f4kFs9mxMea1_32nH6c1xVY9FXcdsC0RKhlBDb55_hYY":3,"$faUm-6NGDzYeS8Sryyth-jW2LznAJSNH7bMQgFeeVGEw":48},[4],{"id":5,"type":6,"title":7,"slug":8,"summary":9,"body":10,"coverUrl":11,"productScreenshots":12,"productLinks":13,"authorName":14,"authorUrl":15,"authorSubject":16,"category":17,"tags":22,"sourceLabel":37,"sourceName":38,"sourceUrl":39,"status":40,"seoTitle":41,"seoDescription":41,"canonicalUrl":41,"isFeatured":42,"sno":43,"sortOrder":44,"publishedAt":45,"updatedAt":46,"createdAt":47},"eec54a98-e74a-4ea9-9957-4f8dda6bc92a","article","从简单的尝试到三十万次下载","minecraft-mods-300k","一些最初靠着网页对话框和代码编辑器反复复制粘贴完成的 Minecraft 小模组，下载量突破了 30 万","看到模组总下载量突破 30 万的时候，我的第一反应其实不是特别激动，而是出乎意料地平静，淡淡的。\n\n可能是因为这段时间一直在看下载量慢慢增长，也可能是因为直到数字真正越过 30 万，我还是很难把它和自己联系起来。\n\n毕竟最开始做这些东西的时候，我从来没有想过会有这么多人使用。\n\n## 起点\n\n最初只是玩 Minecraft 时，发现了一些让我不太舒服的地方。比如界面不够直观，想查看时间、天气和季节时总觉得少了点什么。\n\n于是我打开代码编辑器，借助 AI 做出了第一个试玩版。\n\n那时候还没有现在这些可以自己读项目、修改代码、运行测试的 Agent。电脑屏幕一边是网页对话框，一边是代码编辑器。AI 生成一段，我复制一段；出现报错，再把报错贴回去问它；改完以后进入游戏测试，不对就退出，继续修改。\n\n现在回头看，那种开发方式也太傻了，但第一个版本就是这样一点点拼出来的。\n\n## 不断打磨\n\n最早的 StardewHUD 是想把《星露谷物语》里那种清晰、温暖的 HUD 带进 Minecraft，我不断地打磨日期、时间、天气、季节、自定义物品计数和运势信息；配置界面也加入了位置、缩放、字体和组件开关等选项。\n\n再后来，我又做了 LuckyFishingRod、Totem of Luck 等不同的小模组，把游戏过程中冒出来的想法一个个变成实际功能。\n\n它们一开始都只是很普通的个人项目。没有完整的开发计划，也没有想过会获得多少关注，更没有想过有一天会被世界各地的玩家装进自己的游戏。\n\n真正困难的往往也不是把功能“做出来”，而是把它做得能够正常使用。\n\n为了让一个 HUD 元素看起来顺眼，我可能会反复调整几个小时；为了同时支持 Fabric、Forge 和 NeoForge，需要分别维护不同的项目；Minecraft 更新版本后，又要重新处理依赖和兼容问题。\n\nStardewHUD 还要适配不同的季节模组、季节天数和运势显示。一个看起来很小的问题，背后可能涉及渲染、配置、资源文件或不同加载器之间的差异。经常是进游戏、发现问题、退出游戏、修改代码，再重新启动。\n\n这些过程有时候确实很累，但现在回想起来，也挺有意思。\n\n因为我能够很直观地看到，一个原本只存在于脑海里的想法，是怎样经过一次次修改，最后真的出现在游戏画面里的。\n\n## 社区贡献\n\n有时候更新做到一半，我也会怀疑：\n\n“真的有人会在意这个功能吗？”\n\n“为了这么小的细节花这么多时间，值得吗？”\n\n但每当看到玩家留下反馈，这些怀疑往往又会暂时消失。\n\n有人提交 Bug，让我发现自己测试时没有遇到的问题；有人提出建议，让功能慢慢变得更完整；有人分享安装模组后的游戏画面，让我第一次以旁观者的角度看到，自己写的东西正在别人的世界里运行。\n\n甚至还有玩家主动在 GitHub 上提交了俄语翻译。\n\n看到那次提交时，我的感觉很特别。\n\n这意味着有人不只是下载以后玩了一下，而是愿意打开仓库、找到语言文件、完成翻译，再把自己的修改提交回来，让更多说俄语的玩家能够使用这个模组。\n\n从那一刻开始，这件事就不再只是“我做了一个东西，然后其他人下载”这么简单了。\n\n一个最初完全出于个人兴趣的项目，开始被不同地方的人看到、使用、讨论和完善。它依然是我维护的作品，但其中也留下了其他玩家参与过的痕迹。\n\n## 最后\n\n30 万次下载对我来说，最大的意义并不是证明这些模组有多成功。\n\n它更像是在提醒我：当初那个很小、甚至有些随意的想法，真的穿过了我的电脑屏幕，进入了许多素未谋面的玩家的 Minecraft 世界。\n\n从最开始只有自己测试，到后来需要维护多个模组、不同版本和不同加载器；从一个人在网页对话框和 IDE 之间复制粘贴代码，到有人主动提交反馈、建议和翻译——这个过程比下载数字本身更让我觉得奇妙。\n\n代码还是那些代码，项目也还是那些项目。\n\n只是它们连接到的人，已经比我最初想象的多了很多。\n\n感谢每一个下载和使用这些模组的玩家。\n\n感谢那些愿意花时间反馈问题、提出建议、提交翻译和参与改进的朋友。\n\n也感谢最开始那个只是因为玩游戏时有点“不爽”，便决定打开 IDE 试一试的自己。\n\n如果对我的模组感兴趣，可以去看看：\n\n[https:\u002F\u002Fmodrinth.com\u002Fuser\u002FWeatheraintbad](https:\u002F\u002Fmodrinth.com\u002Fuser\u002FWeatheraintbad)\n\n[https:\u002F\u002Fwww.curseforge.com\u002Fmembers\u002Fweatheraintbad\u002Fprojects](https:\u002F\u002Fwww.curseforge.com\u002Fmembers\u002Fweatheraintbad\u002Fprojects)","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-24\u002Fc886b0f0-cc36-41ad-a187-db373db9c42e.jpg",[],[],"龙家轩","https:\u002F\u002Fweatheraintbad.com","f39339b1-aaa6-4e86-b0c2-a6e6a21113b5",{"id":18,"name":19,"slug":20,"description":21},"8649729c-92bf-4ec7-b98b-3bae4271318b","思考","thought","从项目或实操经验中延伸出的思考",[23,27,31,35],{"id":24,"name":25,"slug":26},"0848beb4-db26-4fb8-b391-f852a11be192","AI编程","ai-coding",{"id":28,"name":29,"slug":30},"1404d044-7b7e-4cdc-b703-a5e6df8fda50","游戏","game",{"id":32,"name":33,"slug":34},"541aaa1f-7a45-4fd7-b0f4-8798d3cef066","《我的世界》","minecraft",{"id":36,"name":19,"slug":20},"68cedb55-2cac-412f-8f81-fda8c7d686dd","前往下载","Modrinth","https:\u002F\u002Fmodrinth.com\u002Fuser\u002FWeatheraintbad","published",null,false,2,0,"2026-07-24T00:00:00.000Z","2026-07-24T12:50:07.321Z","2026-07-24T10:33:37.919Z",[49,87,112],{"id":50,"type":6,"title":51,"slug":52,"summary":53,"body":54,"coverUrl":55,"productScreenshots":56,"productLinks":57,"authorName":14,"authorUrl":15,"authorSubject":16,"category":58,"tags":59,"sourceLabel":41,"sourceName":41,"sourceUrl":41,"status":40,"seoTitle":41,"seoDescription":41,"canonicalUrl":41,"isFeatured":82,"sno":83,"sortOrder":44,"publishedAt":84,"updatedAt":85,"createdAt":86},"bc921879-1742-4bf4-98b1-6298a860e475","对编程语言发展历程的思考：从比特到思想","programminglanguages","编程语言的进化史，是人类不断把复杂抽象成简单的过程","> 1946年，ENIAC的工程师们需要用插头和开关来“编程”，每改变一次计算任务，就要花费几天时间重新接线。程序员的工作，是在电路板上理解机器的语言——二进制。\n> \n> 今天，我们对着AI说一句“帮我写个贪吃蛇游戏”，代码就生成了。\n> \n> 这就是编程语言的进化史，也是人类不断把复杂抽象成简单的过程。\n\n# 机器语言\n\n最早的编程就是机器语言，一串串的0和1。每条指令都是CPU直接理解的命令，比如`10110000 01100001`，我们可能完全不知道它是什么意思——这串二进制代表“把数字97存入寄存器”。\n\n在那个时代，程序员必须像机器一样思考。我们要记住每个操作码的含义，要手动计算内存地址，要小心翼翼地安排每一条指令。写一个简单的加法程序，可能需要几十个0和1的组合。\n\n> 计算机本质上只是一个听话但死板的机器。它不理解“方便”或“人性化”，只懂电信号的通断。程序员的工作，就是把自己变成机器的一部分。\n\n# 汇编语言\n\n很快，人们受不了了。汇编语言诞生了——用`MOV`代替`10110000`，用`ADD`代替加法操作。虽然本质上还是一一对应机器指令，但至少可读性有了质的飞跃。\n\n```\nMOV AL, 61h    ; 把十六进制61放入AL寄存器\nADD AL, 01h    ; 加1\n```\n\n> 汇编语言是人类第一次尝试“封装”复杂性。但本质上它仍然是机器的语言，只是给冰冷的二进制披上了一件可读的外衣。写汇编的人依然需要了解寄存器、堆栈、中断——我们仍然在思考“机器怎么做”，而不是“我想做什么”。\n\n# C语言\n\n1972年，Dennis Ritchie创造了C语言。这是真正的革命——它让程序员可以既写人类理解的代码，又能控制底层细节。\n\nC语言提供了变量、函数、循环、数组等抽象，同时又保留了指针这样直接操作内存的能力。Unix操作系统就是用C写的，它的成功证明了系统级语言的可能性。\n\n```c\nint sum = 0;\nfor(int i = 1; i \u003C= 100; i++) {\n    sum += i;\n}\n```\n\n> C语言的伟大之处在于它找到了平衡点——足够抽象来保护程序员，又足够底层来信任程序员。从这一刻起，编程开始从“让机器做事”转向“表达计算逻辑”。我们可以把注意力放在算法上，而不是寄存器的分配上。\n\n# C++与Java\n\n随着软件规模爆炸式增长，C语言的结构化编程开始显得力不从心。1990年代，面向对象编程成为主流。C++在C的基础上添加了类、继承、多态；Java进一步简化了内存管理，引入垃圾回收。\n\n我们开始用“对象”来建模世界——一个订单是一个对象，一个用户是一个对象，一个购物车也是一个对象。代码的组织方式从“函数集合”变成了“对象之间的消息传递”。\n\n```java\nclass Animal {\n    void speak() {\n        System.out.println(\"Some sound\");\n    }\n}\nclass Dog extends Animal {\n    void speak() {\n        System.out.println(\"Woof!\");\n    }\n}\n```\n\n> 面向对象的核心不是语法，而是思维方式的转变。我们不必再思考“机器怎么执行这段代码”，而是思考“这些概念之间的关系是什么”。编程越来越像在解决现实问题，而不是与机器博弈。\n\n# Python与JavaScript\n\n21世纪初，脚本语言崛起。Python强调可读性和简洁，JavaScript让浏览器变得可编程。它们的共同点是：**不需要编译**、**动态类型**、**上手门槛极低**。\n\n```python\n# 读取文件并统计单词数\nwith open('story.txt') as f:\n    words = f.read().split()\n    print(f\"单词数: {len(words)}\")\n```\n\n四行代码完成了一个实用程序。这在C语言中可能需要几十行，还要处理内存分配、缓冲区溢出等问题。\n\n> 脚本语言的出现让编程不再是计算机科学家的专利。数据分析师、设计师、学生都能通过Python快速解决问题。编程从“专业工种”变成了“通用技能”。JavaScript更是让每个人浏览器里的网页都变得可交互——我们不需要安装任何环境，打开F12就可以开始编程。\n\n# 自然语言与Vibe Coding\n\n2025年左右，一个叫“Vibe Coding”的概念开始流行。它的核心很简单：**用自然语言描述我们想要什么，AI生成代码**。\n\n我们对着IDE说：“创建一个网页，左侧是聊天列表，右侧是聊天窗口，数据先写死在JavaScript里。”几秒钟后，一个完整的前端应用就生成了。\n\n我们不需要知道React组件怎么写，不需要担心状态管理，不需要调试CSS布局。我们说出需求，AI理解并实现。\n\n> 这是编程进化的终点吗？也许是的——**当我们能直接用自然语言表达意图时，“编程”本身就不再需要了**。\n\n但更准确地说，编程的抽象层次达到了最高峰：\n\n- 机器语言：告诉机器每个比特\n- 汇编语言：告诉机器每个指令\n- C语言：告诉机器每个函数\n- Python：告诉计算机每个操作\n- 自然语言：告诉AI我们的意图\n\n每一层抽象都在隐藏底层细节，每一层进化都在让表达更接近人类的自然思维。\n\n# 进化的本质\n\n回顾这几十年的编程语言发展，我们能看到一条清晰的路径：\n\n**抽象层次不断升高，表达效率指数级提升。**\n\n用二进制写一个排序算法可能需要几千行0和1，用C语言可能几十行，用Python可能几行，用自然语言可能只需要一句话：“给这个数组排序。”\n\n但这条路径的另一面是：**我们离机器越来越远**。\n\n早期的程序员清楚地知道CPU如何执行每条指令，内存如何布局，缓存如何工作。今天的程序员可能完全不关心这些，他们只关心业务逻辑。这没什么不好——大部分问题确实不需要关心底层。\n\n> 编程语言的进化，本质上是人类不断把复杂性封装起来的过程。我们发明函数来封装重复逻辑，发明类来封装数据和操作，发明库来封装通用功能，发明框架来封装架构模式，发明AI来封装整个编码过程。\n\n每一次封装都释放了新的生产力，但代价是我们需要信任底层的抽象是可靠的。就像我们不会关心电梯的钢缆如何工作——**我们只是按按钮。**\n\n# 编程的消亡与重生\n\n当自然语言成为编程的最终抽象，“编程”这个词还会存在吗？\n\n编程不会消亡，但它会**变形**。\n\n未来的“程序员”可能更像“需求分析师”或“AI训练师”——能不能用自然语言清晰地描述我们想要什么；能不能识别AI生成的代码是否符合需求；能不能调试和优化AI的输出。\n\n换句话说，**编程的核心将从“怎么写代码”变成“怎么定义问题”**。\n\n这对于非技术人员来说是天大的好消息——他们终于可以直接用计算机解决问题，而不需要学习语法。对于专业程序员来说，这意味着要重新定义自己的价值：不是写代码的能力，而是理解问题、拆解需求、验证结果的能力。\n\n# 结语\n\n从机器语言的比特，到自然语言的思想，编程语言进化的每一步都在回答同一个问题：\n\n**如何让计算机更好地理解人类？**\n\n二进制是最糟糕的答案——需要人类去理解计算机。自然语言是最好的答案——让计算机去理解人类。\n\nVibe Coding不是一个终点，而是一个开始。当编程的门槛降到零，每个人都可以用自然语言指挥计算机创造东西时，人类创造力的释放将进入一个全新的时代。\n\n我们花了七十年的时间，从插头、开关、二进制、汇编、C语言、面向对象、脚本语言，一路走到自然语言编程。这不仅是技术的进步，更是人类思维方式的演进——从机器如何思考，到我们如何思考。\n\n也许有一天，编程语言这个概念本身会消失。我们会像和朋友聊天一样，和计算机合作创造。到那时，再回头看今天的编程语言，就像回头看石器时代的工具一样——既觉得原始，又充满敬意。\n","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-16\u002F395fe295-8b25-4ff5-bf50-0d42340b8e27.jpg",[],[],{"id":18,"name":19,"slug":20,"description":21},[60,64,65,69,70,74,78],{"id":61,"name":62,"slug":63},"7c76bfc2-f80f-4ee0-a95d-27bd8708b434","技术","slug",{"id":36,"name":19,"slug":20},{"id":66,"name":67,"slug":68},"88d2bc27-0e0f-468a-b907-2991cb97b87b","人工智能","ai",{"id":24,"name":25,"slug":26},{"id":71,"name":72,"slug":73},"a2ccffe0-49b2-458b-baf6-a83a1b20443d","大语言模型","llm",{"id":75,"name":76,"slug":77},"4c2bbea6-eab7-40a8-8447-1de478ff7749","分析","analyse",{"id":79,"name":80,"slug":81},"144abe77-0dc6-4f66-a176-20bddb1c0bfa","编程","coding",true,50,"2026-04-03T00:00:00.000Z","2026-07-17T03:36:00.020Z","2026-07-16T04:13:19.163Z",{"id":88,"type":6,"title":89,"slug":90,"summary":91,"body":92,"coverUrl":93,"productScreenshots":94,"productLinks":95,"authorName":14,"authorUrl":15,"authorSubject":16,"category":96,"tags":101,"sourceLabel":41,"sourceName":41,"sourceUrl":41,"status":40,"seoTitle":41,"seoDescription":41,"canonicalUrl":41,"isFeatured":42,"sno":108,"sortOrder":44,"publishedAt":109,"updatedAt":110,"createdAt":111},"b53e8d96-5ee6-448e-b249-5573d6adf6d4","氛围编程入门","vibe-coding-intro","以网页制作为例，介绍氛围编程涉及到的核心概念，帮助新手入门","这是一篇写给完全零基础新手的指南，内容包括：\n\n1. 什么是网页背后的“积木块”（HTML、CSS、JS 到底在干什么）\n2. 什么是 Vibe Coding\n3. 如何用 Vibe Coding 亲手做出你的第一个网页\n\n## 第一步：认识网页的三个“演员”\n\n一个网页，无论它看上去多复杂，都只是三种东西在合作演戏：\n\n- HTML —— 这是网页的“骨头和肉”\n\n它负责把内容放在网页上。比如：标题文字、按钮、图片、输入框。你可以把它想象成盖房子的结构：先有墙，才有地方挂画。\n\n- CSS —— 这是网页的“衣服和化妆”\n\n它负责让骨头和肉变得好看。颜色、大小、间距、位置，全归它管。还是那个房子：墙是 HTML，但墙刷成粉色还是蓝色，沙发摆左边还是右边，就是 CSS 说了算。\n\n- JavaScript (简称 JS) —— 这是网页的“大脑和动作”\n\n它负责让网页动起来。你点击按钮弹出“你好”，或者网页自动刷新天气，都是 JS 在干活。房子里的电灯开关：你按下开关（动作），灯亮了（结果）——这个“动”就是 JS。\n\n- 举个例子\n\n你在网页上看到一个红色的“购买”按钮。\u003Cbr>\n“按钮”两个字本身 = HTML\u003Cbr>\n红色、圆角、大尺寸 = CSS\u003Cbr>\n点击按钮后弹出“已加入购物车” = JavaScript\n\n这三个演员，平时就住在一个叫 文件 的“剧本”里。最常见的剧本，就是后缀是 .html 的普通文件。\n\n## 第二步：HTML文件是什么？怎么打开它？\n\n你不需要安装任何特殊的软件。一个 .html 文件其实就是一本用“网页语言”写好的剧本，一本只有电脑能看懂的剧本。\n\n- 怎么创建一个 .html 文件？\n\n在电脑上新建一个文本文档（Windows 的记事本，或 Mac 的文本编辑都可以），然后把它的名字从新建文本文档.txt 改成 我的网页.html。系统可能会问“改变后缀名可能导致文件不可用”，点是就行。现在，这个文件就变成了一个网页剧本。\n\n- 怎么打开看效果？\n\n直接双击这个 .html 文件，它就会自动用你正在用的浏览器（比如 Chrome、Edge）打开。浏览器就是“演员”，它负责把剧本演出来给你看。\n\n## 第三步：什么是 Vibe Coding？\n\n传统的写网页，是你自己一行一行去写 HTML、CSS、JS 的剧本。你得记住很多“咒语”，漏一个符号整个页面就白屏了。\n\nVibe Coding（氛围编程） 换了一种完全不同的思路：\n\n你不需要写代码，你只需要用日常说话的方式，告诉一个 AI（比如 ChatGPT、Claude、DeepSeek 等），你想要什么。然后 AI 直接把完整的 .html 文件剧本写好给你。\n你的工作变成了：说想法 → 看效果 → 再提修改意见，就像和一个懂技术的美工朋友聊天。\n\n“Vibe”这个词很贴切，你靠的是感觉和描述：“我要那种深夜小酒馆风格的页面，带一个暗色背景，中间有一句会慢慢浮现的欢迎语”，而不是去想代码。\n\n这就好比你盖房子，以前得自己当木工、泥瓦匠；现在你成了设计师+房主，只管说：“我要一扇落地窗，采光要特别好”，AI 泥瓦匠去帮你实现。\n\n## 第四步：开始你的第一个 Vibe Coding 项目（全程 5 分钟）\n\n下面跟着做，什么都不用懂。\n\n1. 打开你喜欢的任何一个 AI 对话工具\n\nChatGPT、Claude、Kimi、DeepSeek……哪个顺手用哪个。\n\n2. 用最直白的话告诉它你的想法\n\n复制下面这段话，或者自己改一改，发给 AI：\n\n```\n请帮我写一个完整的网页，要求：\n\n· 背景是柔和的深蓝色，像夜空\n· 网页正中间用白色大字写着“欢迎来到我的小站”\n· 字的下面有一个粉色的按钮，写着“点我一下”\n· 点击按钮后，按钮会变成绿色，并且文字变成“你成功啦！”\n· 把所有的 HTML、CSS、JS 都写在一个 .html 文件里，代码要完整，能直接保存运行\n· 最后告诉我这个文件怎么保存和使用\n```\n\n3. AI 会给出一大段代码\n\n它通常会给你一个代码块，类似这样（你不用看懂）：\n\n```html\n\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>...\u003C\u002Fhead>\n\u003Cbody>...\u003C\u002Fbody>\n\u003C\u002Fhtml>\n```\n\n直接全选，然后按 Ctrl+C（Mac 按 Cmd+C）复制，或点击下载按钮保存到电脑中。\n\n4. 把它保存成网页文件（若无法直接下载）\n\n- 在桌面上新建一个文本文档（记事本\u002F文本编辑）。\n- 把复制的代码粘贴进去。\n- 点“文件” → “另存为”。\n- 在文件名那里输入：my-first-page.html。重点：一定要把保存类型选为“所有文件”，编码选 UTF-8，然后保存。\n- 文件图标会变成浏览器的样子。\n\n5. 双击打开，见证奇迹\n\n浏览器打开，你会看到一个深蓝色星空的页面，正中间有你写的字和按钮。点击按钮，颜色变了，文字也变了。\n你刚刚做出了一个带交互功能的网页。\n\n## 第五步：用“Vibe”继续改，越玩越熟\n\n这才是 Vibe Coding 最有趣的地方。页面做出来了，但你可能觉得：“按钮不够圆”“字太小了”“背景要是能有点点星光就更好了”。\n\n你完全不用自己碰代码。继续跟 AI 聊天就行：\n\n“按钮再大一点，圆角一些，鼠标放上去要变小手”\n“给背景加上一些缓慢移动的星星”\n“再添一个能输入名字的框，点击按钮后下面显示‘xxx，你好’”\n\n每一次提要求，AI 都会再给你一版完整的代码。你只需：\n全选复制 → 粘贴进原来的 .html 文件覆盖全部旧内容 → 保存 → 刷新浏览器\n\n修改、看效果，再修改、再看。这就形成了一个纯粹的 “描述-观看” 循环，完全不需要学编程语法。\n\n## 你已经学会了\n\n总结一下，你要记住的其实就是这三层关系：\n\n- 网页 = HTML（内容）+ CSS（美化）+ JS（动作）\n- 做网页的老方法 = 自己学每一种语言，一行行敲\n- Vibe Coding 新方法 = 把你想要的样子说给 AI → AI 写好一个 .html 文件 → 你双击看戏\n\n从今天开始，你已经不是网页的局外人了。去试着做一张给朋友的生日卡片、一张自己的作品展示页、一个小倒计时器……不会的，就问 AI。\n\n你只负责想象，剩下的，都交给 Vibe。","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-17\u002F538e5262-96da-46df-8e42-8f5156fe675e.jpg",[],[],{"id":97,"name":98,"slug":99,"description":100},"d6750616-07d9-4350-8485-1834c77be3d2","指南","guide","指导建议，仅供参考",[102,103,107],{"id":24,"name":25,"slug":26},{"id":104,"name":105,"slug":106},"4ab4d31d-2daf-4bd3-9d99-c7210c4943bf","网页制作","web-making",{"id":79,"name":80,"slug":81},53,"2026-07-17T00:00:00.000Z","2026-07-18T14:04:32.156Z","2026-07-17T05:12:58.995Z",{"id":113,"type":6,"title":114,"slug":115,"summary":116,"body":117,"coverUrl":118,"productScreenshots":119,"productLinks":120,"authorName":121,"authorUrl":122,"authorSubject":16,"category":123,"tags":128,"sourceLabel":41,"sourceName":41,"sourceUrl":41,"status":40,"seoTitle":41,"seoDescription":41,"canonicalUrl":41,"isFeatured":42,"sno":132,"sortOrder":44,"publishedAt":109,"updatedAt":133,"createdAt":134},"a3c11b62-9668-40cf-822d-25787f994c75","A2A：当 Agent 开始互相「递名片」","a2a-agent-to-agent-protocol","MCP 让 AI 统一接上工具，却没解决 Agent 之间怎么分工。A2A（Agent-to-Agent 协议）用「Agent Card 名片」让智能体互相发现、委派任务、协作交付。","你有没有想过：当公司里不止一个 AI Agent，而是几十个，它们该怎么分工？谁负责查天气、谁负责排日程、谁负责写代码？如果让它们各自为战，那不过是把「一个人的孤岛」换成「一群人的孤岛」。\n\n一个叫 A2A 的协议正在解决这个问题——它让 Agent 之间能像人一样「互相介绍、认领任务、协作交付」。\n\n## MCP 解决了「接工具」，没解决「连同伴」\n\n我们先前聊过 MCP（模型上下文协议）：它像 USB-C，让 AI 能统一地连上各种工具——读代码、查数据库、调 API。但 MCP  deliberately 不回答另一个问题：Agent 和 Agent 之间怎么发现彼此、怎么分工？\n\nhttps:\u002F\u002Ffoundit.cn\u002Farticle\u002Fmcp-ai-usb-c-moment\n\n举个例子。你问一个「个人助理 Agent」：「帮我看看明天北京的天气，如果下雨就改到室内，并把会议邀约发给团队。」这个助理自己未必会看天气、也不该直接改所有人的日历。更合理的做法是：它去找到「天气 Agent」和「日历 Agent」，把子任务委派给它们，再把结果拼起来回答你。A2A（Agent-to-Agent Protocol，智能体到智能体协议）就是干这件事的标准。\n\n## A2A 是什么\n\nA2A 由 Google 在 2025 年 4 月提出，几个月后捐给 Linux 基金会，和 MCP 一样进入了中立治理。它的核心思想非常像现实中的名片交换：\n\n- 每个 Agent 都发布一张机器可读的 **Agent Card（名片）**，声明自己叫什么、能做什么、接受什么格式的输入、返回什么、需要怎样的鉴权。\n- 一个「编排 Agent」读到这些名片，就知道「这个任务该交给谁」。\n- 然后它通过 JSON + HTTP 协议把任务委派过去，支持长任务、流式结果和多轮对话。\n\n业界给的类比很精准：**MCP 连接 Agent 与工具，A2A 连接 Agent 与同伴。** 工具是被「调用」然后返回；同伴是被「委派」然后协商。\n\n2026 年 4 月，A2A 发布了 **1.0 版本**，成为稳定的生产标准，并带来了「带签名的 Agent Card」用于可验证身份。一年之内已有 150+ 组织在生成环境运行它，IBM 自家的 Agent Communication Protocol 也在 2025 年 8 月合并进了 A2A，没有让这一层 fragmentation（碎片化）。\n\n## 它是怎么运作的：发现 → 委派 → 交付\n\n整个协作流程可以拆成三步，用一张图就能看明白：\n\n```mermaid\nflowchart LR\n    U[用户需求] --> O[编排 Agent]\n    O -->|读取 Agent Card| C[天气 Agent]\n    O -->|读取 Agent Card| I[日历 Agent]\n    O -->|委派子任务| C\n    O -->|委派子任务| I\n    C --> R1[天气结果]\n    I --> R2[日程结果]\n    R1 --> O\n    R2 --> O\n    O --> A[汇总后回答用户]\n```\n\n落到代码层面，Agent Card 就是一份 JSON。比如一个天气 Agent 的名片可能长这样：\n\n```json\n{\n  \"name\": \"天气 Agent\",\n  \"description\": \"提供全球城市天气查询\",\n  \"url\": \"https:\u002F\u002Fweather-agent.example\u002Fa2a\",\n  \"capabilities\": { \"streaming\": true },\n  \"skills\": [\n    {\n      \"id\": \"get_weather\",\n      \"name\": \"查询天气\",\n      \"examples\": [\"北京今天天气如何？\"]\n    }\n  ],\n  \"authentication\": { \"schemes\": [\"Bearer\"] }\n}\n```\n\n编排 Agent 拉取这张名片后，就知道「查天气」这个技能由谁提供、去哪个地址调用、要带什么鉴权。它把用户问题拆成子任务，分别委派，再把各 Agent 的回包汇总成最终答案。长任务还能流式返回进度，不必干等。\n\n## 它能做什么，做不了什么\n\nA2A 解决的是「信封」问题——怎么发现同伴、怎么把任务送过去、怎么收回结果。但它有意**不定义「信封里写什么」**：两个 Agent 之间到底该用怎样的语义去沟通、任务怎么拆解，是高于协议层的事。\n\n- **强项**：跨厂商、跨框架。无论 Agent 是用 LangGraph、CrewAI、LlamaIndex 还是微软、谷歌的框架写的，只要都讲 A2A，就能互相委派。主流 agent 框架已原生支持。\n- **边界**：协议标准化的是「通信格式」，不是「协作智能」。任务拆得好不好、委派得对不对，仍然取决于编排 Agent 本身的设计。\n- **补充视角**：也有人提出基于 W3C 去中心化身份（DID）的替代方案，觉得 A2A 的模型「太像传统 Web」。但在企业多 Agent 系统里，A2A 已经是事实上的默认答案。\n\n## Tips\n\n- 记住分层：想接工具看 **MCP**，想让 Agent 互相协作看 **A2A**——两者互补，不是替代。\n- 设计多 Agent 系统时，先画清「谁发布名片、谁做编排、任务怎么拆」三件事，再选框架。\n- 评估一个 Agent 平台是否「能协作」，看它是否支持 A2A 1.0 与签名 Agent Card（身份可验证很重要）。\n- 别指望协议替你做任务规划：A2A 管「送信」，拆任务的逻辑要你自己写或交给编排模型。\n- 落地节奏上，先把 MCP 接好让单个 Agent 能干活，再用 A2A 把多个能干的 Agent 织成网络——这是 2026 年最主流的演进路径。","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-19\u002F7819028f-dd6f-4988-9964-56134773dc53.jpg",[],[],"Foundit AI","https:\u002F\u002Ffoundit.cn",{"id":124,"name":125,"slug":126,"description":127},"6179d3b6-dc34-4483-9ded-3cd9f1b37a47","科普","abbreviation","介绍各领域新兴概念",[129,130,131],{"id":24,"name":25,"slug":26},{"id":75,"name":76,"slug":77},{"id":61,"name":62,"slug":63},75,"2026-07-20T01:14:37.908Z","2026-07-19T16:17:09.511Z"]