Web 应用的未来:AI 智能体能否即时生成 UI?
原题The Future of Web Apps: Will AI Agents Generate UIs on the Fly?
读前速览
Rachel Lee Nabors 讨论了使用设备端小型语言模型构建本地优先的社交聚合器 Mima、系统化的黄金数据集评估,以及 OS 级智能体和 A2UI 等标准如何重塑超越云端 LLM 的 Web 应用。
本地优先架构与设备端 SLM 实现隐私与成本控制
以本地优先构建应用可为开发者提供离线能力并降低云端成本,同时将 PII 保留在设备上。与云端 LLM 封装相比,SLM 可避免高昂的 API 成本、降低延迟并保护隐私。
通过黄金数据集和评估进行系统化模型选择
Nabors 使用真实对话线程作为黄金数据集,用延迟和准确率指标对小型到中型模型进行基准测试,并使用大型模型作为评判者来挑选最适合摘要和审核的模型,从而实现 CI/CD 集成。
Mima 作为隐私优先的社交聚合器并具备客户端审核
Mima 将多个社交网络聚合为本地图谱,支持跨服务转发,并运行可选的本地模型进行审核和内容聚合,而不将用户数据存储在服务器上。
未来 Web 应用迈向 OS 级智能体和动态 UI 模式
讨论预见 OS 级个人智能体和 A2UI 等标准化 UI 模式将取代传统 Web 应用和原生界面,要求工程师专注于系统设计和 AI 协作。
完整摘要
与前 React 核心团队成员 Rachel Lee Nabors 的播客探讨了本地优先的应用架构以及设备端运行的小型语言模型的实际应用。她介绍了 Mima,这是一款隐私优先的客户端,用于聚合来自 X、LinkedIn、Bluesky 和 Mastodon 的社交和新闻信息流,旨在避免在服务器上存储个人数据,并为个人智能体提供跨网络上下文。Nabors 认为,像 Llama 3.2B 这样的 SLM 在使用黄金数据集评估时,在摘要和审核等任务上可以与大型云模型相媲美,从而降低 API 成本、延迟和 PII 暴露风险。她描述了一种测试驱动的评估工作流,使用真实线程、将大型模型作为评判者、延迟和格式指标,并通过迭代的提示词和预处理调优来为模型选择合适的规模。讨论还展望了 OS 级个人智能体、A2UI 等动态 UI 渲染标准,以及软件工程向系统设计和 AI 协作而非基础代码生成的转变。
目录 · 9 节
React 核心团队前成员 Rachel Lee Nabors 深入探讨本地优先应用背后的架构与理念,探索直接在设备上运行的小型语言模型(SLM)如何提供注重隐私、低延迟且经济高效的替代方案,取代云端托管的 LLM 封装层。Rachel 分享了使用黄金数据集评估模型,以及利用客户端 AI 进行内容审核和社交内容聚合的关键见解。Rachel Lee Nabors, former React core team member, dives into the architecture and philosophy behind local-first applications, exploring how small language models (SLMs) running directly on-device can deliver privacy-focused, low-latency, and cost-effective alternatives to cloud-hosted LLM wrappers. Rachel shares key insights on evaluating models with golden datasets and leveraging client-side AI for moderation and social content aggregation.
讨论还展望了 AI 驱动生态系统中 Web 和应用架构的未来。从操作系统级个人智能体可能兴起,以及 A2UI 等动态 UI 渲染标准的发展,到软件工程师所需技能的不断演变。The discussion also looks ahead to the future of web and application architectures in an AI-driven ecosystem. From the potential rise of OS-level personal agents and dynamic UI rendering standards like A2UI, to the evolving skill set required of software engineers.
核心要点Key Takeaways
- 以本地优先的方式构建应用,能为用户提供快速响应和离线使用能力,同时降低开发者的云基础设施成本。Building apps local-first delivers fast, offline capability for users while keeping cloud infrastructure costs low for developers.
- 在本地使用小型语言模型(SLM)(如 Llama 3.2B),与大型云端大语言模型(LLM)相比,可以避免高昂的 API 费用、降低延迟并保护个人身份信息(PII)。Utilizing SLMs locally (like Llama 3.2B) avoids high API costs, reduces latency, and protects PII compared to large cloud LLMs.
- 使用黄金数据集进行系统化评估,对于为模型选择合适的规模,并为摘要或内容审核等特定任务选出最佳方案至关重要。Systematic evaluation using golden datasets is essential for right-sizing models and picking the best option for specific tasks like summarization or moderation.
- 面向操作系统级个人智能体的应用以及标准化的 UI Schema(如 A2UI),可能会取代传统 Web 应用和原生界面,成为内容消费的主要方式。OS-level personal agents and standardized UI schemas (like A2UI) may replace traditional web apps and native interfaces for consumption.
- 软件工程正在超越基础代码生成,迈向计算机科学基础、系统设计和 AI 协作。Software engineering is moving beyond basic code generation towards computer science fundamentals, system design, and AI collaboration.
订阅平台:Subscribe on:
Apple Podcasts YouTube Soundcloud Spotify Overcast Podcast Feed文字记录Transcript
Olimpiu Pop:大家好。我是 Olimpiu Pop,坐在我面前的是 Rachel Lee Nabors。她是一位很有创造力的人。我想她创作过不少漫画,对吧?她还参与过 React 和 React Native 框架的开发。因为我不知道该怎么更好地介绍她,Rachel Lee,你能请你介绍一下自己吗?Olimpiu Pop: Hello everybody. I'm Olimpiu Pop and I have in front of me Rachel Lee Nabors. They are quite a creative person. They did a bunch of comics, I think, right? And also, they were involved with React and React Native frameworks. And because I don't know how to put it in a better light, Rachel Lee, can you please introduce yourself?
Rachel Lee Nabors:非常感谢这番介绍。是的,你们可能通过我在疫情期间做的两个“宝宝”记得我:react.dev 和 reactnative.dev 门户网站。疫情期间,我在 React 团队工作。多年来,我一直在 FAANG 公司从事浏览器相关工作,也与 W3C 合作制定 Web 标准。不过在那一切之前,我曾为少女创作漫画。我是最早拥有个人网站和邮件列表等设施的网络漫画家之一。直到今天,我的创作灵感仍来自日本漫画和动画。你们仍然可以看到我为自己的幻灯片配插画,也为我参与的各个开源项目设计吉祥物。Rachel Lee Nabors: Thank you so much for the introduction. Yes, you may remember me from my pandemic babies, the react.dev and reactnative.dev portals. I worked on the React team for the pandemic. I've worked for FAANG on browsers for many years and with the W3C on web standards. But before all of that, I used to make comic books for teenage girls. I was one of the first web cartoonists that had their own personal website and mailing list, et cetera. So, I take my inspiration from Japanese comics and anime to this day. You can still find me illustrating my own slides and creating mascots for the different open source projects I work on.
Olimpiu Pop:不错。谢谢你到目前为止提出的想法。所以,我的孩子们大概会读一些漫画。今天我们要聊聊你的另一个项目,那是本地的……我不知道,聚合器。它可能会是我们使用的社交文学平台的最佳界面。Olimpiu Pop: Nice. Thank you for the idea for what you put so far. So, probably my kids will read some of the comics. Today we're going to talk about another endeavor that you have and that's local, I don't know, aggregator. It would be probably the best interface for the social literature that we use.
Rachel Lee Nabors:哦,是的。我以前特别热衷于开发者倡导。搬到伦敦后,我曾在湾区为许多初创公司和 AI 公司担任开发者体验顾问,但我一直想重返工程领域。终于,我找到了一个激励我重新开始构建产品的项目。它叫 Mima,拼作 M-I-M-A。你可以在 mima.social 找到它。它就是我一直想要的客户端,能帮我管理所有社交和新闻联系。我不知道你是不是也这样,但在科技行业做生意,不上 X 和 LinkedIn 可不行;至于 Bluesky 和 Mastodon,可能也得上,具体要看你的朋友都在哪个平台。如果你的朋友和数据都在 Bluesky 上,那你大概也需要用 Bluesky。Rachel Lee Nabors: Oh, yes. I used to be really big on developer advocacy. When I moved to London, I was a developer experience consultant for lots of startups and AI in the Bay Area, but I've always wanted to get back into engineering. And finally, I found a project that inspired me to return to building again. And it's Mima, that's M-I-M-A. You can find it at mima.social. It is the client I've always wanted for managing all of my social and news connections. I don't know about you, but you can't do business in tech without being on X and LinkedIn and probably also Bluesky and Mastodon, depending on where your friends are. If you've got friends and data, you probably need to be on Bluesky.
如果你在开源圈有朋友,那就得上 Mastodon。我没时间每天挨个查看那些不同的应用。它们每一个都像是在说:“天哪,你得把所有时间都花在 X 上。你怎么敢把链接发到其他网站上?”它们对自己的小圈子、小气泡保护得非常严密。问题是,你要是待在某个气泡里,就只能听到那个气泡里的人说话。如果你只听 X 上的声音,就会以为所有人都在用编程智能体,但如今有那么多毕业生进入职场,他们甚至从没用 Claude 写过代码。所以,你会错过整个自己无法接触到的世界。If you got friends in open source, you got to be on Mastodon. I don't have time to check all of those different apps every day. And every one of them is like, "Oh my God, you got to spend all your time here on X. What are you doing posting links to other websites? How dare you?" They are very protective of their little circles, their bubbles. Problem is you stay in one of those bubbles, you only hear from people in that bubble. If you only listen to X, you'd think that everyone's using coding agents, but there are so many grads coming out these days that they've never touched Claude for coding. So, there's a whole world that you don't experience.
我开发这个工具,是为了让我能够存在,并看到来自我想连接的任何社交网络的内容。比如,我可以把 X 上的内容转发到 Bluesky。它会在本地构建一张图谱,记录我所有的社交关系和我说过的所有话,而且底层使用的是原生 Web API。所以,这背后并没有什么特别神奇的东西。它就是我一直想要的浏览器,因为对我来说,人生中那些重大的进步——无论是职业发展、认知提升,还是其他方面——都是通过这些社交网络实现的。但这些年来,社交网络越来越难以从各自的圈子之外访问。I built this to make it possible for me to exist and to see things coming in from any social network I wanted to connect to. So, I can repost something from X to Bluesky. It forms a local graph of all of my social connections, everything I've been saying, and it uses native web APIs under the hood. So, there's nothing particularly magical happening there. It's the browser I always wanted because for me, all of the big leaps I've made forward in my life in terms of career, understanding, et cetera, they all came through these social networks. But over the years, social networks have become harder and harder to access from outside the bubbles.
所以,我开始开发 Mima,是为了解决自己的问题:我只是想在一个地方看到大家都在说什么,并且能在一个地方回复。后来它就变成了一个小小的本地应用。它还搭载了一些小型本地模型,让使用体验更好。它从一开始就把隐私和本地运行放在首位,这既是有意为之,也有点歪打正着。说到底,我只是不想在服务器上存放你的个人信息。我最不希望的就是有各种国家的人找上门来,说:“嘿,我们需要用户 X、Y、Z 的所有私信。”而我只能一脸茫然地说:“什么?哦,不。”所以,我完全没兴趣掌管别人的信息。Mima 就是这样开始的。没错,下周我还会去旧金山,为 Mima 办一场小型快闪软启动活动。真的很让人兴奋。So, I started building Mima to solve my own problem, which was I just wanted to see what everyone was saying in one place and be able to reply from one place. And it's turned into its own little local app. It's got little local models on it to make the experience better. It's all privacy first and local first, which was kind of on purpose, kind of by accident. The truth is I just don't want to have servers with your personal information on it. The last thing I want is to have various countries come in and be in like, "Hey, we need all the DMs from user X, Y, Z." And me being like, "What? Oh, no."
So, I have no interest in owning other people's information. So, that's how it ended up starting. And yes, I'm actually going to be in San Francisco doing a little pop-up soft launch for Mima next week. It's really exciting.
Olimpiu Pop:好的。祝你好运。我们只是对技术细节很好奇,因为你提到自己是 React 团队的一员,也做了不少工作。所以我想了解一下,你在构建它时做出了哪些选择。你还提到了模型,说你用的不是前面带 L 的大语言模型,而是前面带 S 的模型。能不能带我们了解一下你做出的这些技术决策?Olimpiu Pop: Okay. Good luck with that. We are just curious about the technical details because you mentioned that you are part of the React crew and did a bunch of stuff. So, I'm curious about what were the choices you've made while building it, because you did mention also models and rather than having an L in front of the large language model, you have an S. So, guide us through the decisions, the technical decision you've made.
本地优先架构与小型语言模型 [05:36]Local-First Architecture and Small Language Models [05:36]
Rachel Lee Nabors:从 GPT-3 开始,我就一直关注大语言模型的发展。我注意到一件事,尤其是在黑客松圈子里,因为开发者体验咨询是我的主要业务。我会参加很多黑客松,看看大家在做什么,也发现大语言模型一旦可以通过 API 使用,人们最先开始构建的东西有很多都是封装器。它是一款应用,会把用户提供的所有内容都发送到某个别人的服务器上,天知道他们会拿这些信息做什么——很可能是用来训练竞争对手的模型——然后再把响应发回给你。Rachel Lee Nabors: I have been following along with the evolution of LLMs since GPT-3. One of the things I've noticed, especially in hackathon scenes, because developer experience consulting is like my bread and butter. So, I go to a lot of hackathons, I see what people are building, and I noticed a lot of what people started to build as soon as LLMs became API accessible was a wrapper. It's an app that takes everything the user gives it, sends it over to someone else's server somewhere where they do God knows what with that information, probably train your competitors model, and then they send you back a response.
首先,这种做法极其浪费。我曾与 Google 在 web.dev 上合作撰写了一系列文章,探讨如何为模型选择合适的规模,以及推理运行成本方面的大量研究,包括能源成本。对于多模态模型,要完成大部分本可以用它完成的工作,能耗会高出四倍。因此,它非常耗能。这意味着成本会以 API 费用的形式转嫁给你。现在,每次调用它,成本都会线性增加。此外,它还带来了各种令人担忧的隐私问题。那算个人身份信息(PII)吗?有很多次,私人个人信息出现在公开场合,就是因为有人把提示词发给模型,而模型又把它传给了搜索引擎。First, this is incredibly wasteful. I did a series of articles on web.dev with Google about right sizing the model and a lot of research on the cost, the energy cost of running inference. On a multimodal model, it's four times higher than necessary to do most of the work that you could do with it. So, it's energy intensive. That means that cost gets passed to you in terms of the API costs. Now you've got linear costs going up with every time you call that. And also it brings in all these wonderful privacy concerns. Is that PII? We've had so many instances of private personal information showing up in public because somebody sent a prompt to a model and it got passed onto a search engine.
所以,你不想只靠大型推理模型来回处理,是有原因的。幸运的是,技术进步得非常快,而且效果出色,如今小型语言模型几乎能完成当年人们试图交给大型推理模型去做的所有事情。小模型完全可以胜任摘要工作。我们还有 Jev,它很擅长挑选合适的工具,或者给出简单的“是”或“否”。Jev 的表现简直彻底超出了所有人的预期。因此,我们能用小模型完成很多事情,不必为了这些任务再调用 Gemini 或 Claude。So, there are reasons why you don't want to just round trip with a big inference. Luckily for us, the technology has moved forward so fast, so well that small language models now do pretty much all the same things that people were trying to send off to big inference back in the day. Small models are perfectly fine for summarizing things. We've got Jev, which is great for picking the right tool or offering a simple yes or no. Jev just completely blows the lid off of everything. So, there's a lot we can do with a little model that we don't need to round trip to Gemini or to Claude to get done.
我觉得这是我们首先会采用的办法。关键在于,我们能不能证明用一个大模型就能做到?这当然没问题,但你们可能没必要把这种往返流程部署到生产环境中,也没必要承担目前这么高的 API 成本。And I think it's the first thing we reach for. The idea is can we prove that it can be done with a big model? That's fine, but you probably don't need to be shipping to production the round trip or the high API costs that you are.
Olimpiu Pop:Kim,谢谢。那么,Mima 里有多个模型,还是有一个身兼多职的模型?Olimpiu Pop: Kim, thank you. So, you have multiple models in Mima or you have one that has multiple hats?
Rachel Lee Nabors:嗯,这是个很棒的问题。什么样的模型最适合这项工作?Mima 体内确实有好几个不同的小模型。我最初用的是 Llama 3. 2B。刚开始构建她时,我会用 Claude Sonnet 来总结对话串之类的内容,但很快我就开始觉得,把我的私人消息发给 Claude 让我很不安心。所以,我实际上设置了一些评测,并通过后处理,让 Llama 3. 2B 能够在本地总结我参与的对话,效果不逊于 Claude Sonnet。在这里,评测确实是你最好的帮手。它们能让你真正对输入和输出进行评分和评判。Rachel Lee Nabors: Well, that is a great question. What's the right model for the job? Mima does have multiple different little models inside her. The one that I got started with was Llama 3. 2B. I was using Claude Sonnet to summarize, for instance, conversation threads when I first started building her, but very quickly I started feeling uncomfortable with sending my private messages to Claude. So, I actually set up some evals and with post-processing, I was able to get Llama 3. 2B to perform as well as Claude Sonnet at summarizing locally the conversations that I was having. Evals are really your best friend here. They let you actually rate and judge the inputs and outputs.
如果我当时听了朋友的话,就会选择 Gemma 4,因为那会儿 Gemma 4 确实很火。但事实证明,Gemma 4 会显著增加这些摘要任务的延迟,而且生成的摘要也不如 Llama 3.2B。所以我用了 Phoenix,这是一个小型评估库,你可以在那儿配置它,用真实信息进行测试,并让一个大型模型充当评审,选出最适合完成这项任务的模型。结果当然是 Llama 3.2B。它是 Facebook 训练的模型之一,训练数据来自用户数据。因此,它擅长总结人与人之间的对话也就说得通了。If I had just listened to my friends, I would've chosen Gemma four because Gemma four was really hot right then, but it turns out Gemma four would've actually substantially increased the latency on these summarizations and it wouldn't have provided as good summarizations as Llama 3. 2B did. So, I used Phoenix, which is a little evals library that you can set up there to run tests amongst real information and used a large model as a judge to pick the best model that could do the job. It turned out, of course, it was Llama 3. 2B, which is one of Facebook's models that they've trained on user data. So, it makes sense that it would be good at summarizing conversations between humans.
不过,这个模型在识别用户是否有恶意,或者识别图片中是否含有令人担忧的内容等方面,可能并不是最擅长的。我一直坚信,应该让我们的客户端替我们进行审核,而不是依赖平台来做这件事,因为平台所有者,比如 Facebook、LinkedIn 等,从来都不怎么在审核上投入资源。审核对他们来说是个成本中心,所以他们会在这方面省钱。结果就是,这里简直成了《蝇王》里的场景,孩子们在教室里当家作主。所以,最好让你的客户端能做这样的事:“哦,这是一条来自某个此人没有关注的人的私信。我要检查一下它是不是辱骂性内容。”However, that model might not be the best at doing things like identifying when people are being toxic or if images, for instance, contain alarming things in them. I'm a big believer that our clients should be able to moderate for us rather than relying on the platform to do that because platform owners, Facebook, LinkedIn, et cetera, they always don't really invest in moderation. It's a cost center for them, so they cheap out on it. And that means that it's our Lord of the Flies, the kids are running the schoolroom in there. So, it's better if your client can do things like, "Oh, this is an incoming message from somebody this person doesn't follow. I'm going to check to see if it's abusive content."
你某天晚上发了一张照片,醒来时发现下面有 40 条评论。其中有多少是在说“这张照片拍得真棒”,又有多少是在说“哦,你怎么敢拍狗的照片?”你永远也不知道。关键是,你可以使用专门训练来检查不同类型内容的模型,帮你写得更好,或者检查收到的内容是否带有辱骂性或不友善。Mima 目前主要用于内容审核,确保你的触发警告不会被误触发,等等。对于这类用途,摘要功能未必是最佳选择。还有一些更小、更轻量的模型能做得更好,而且它们都需要用户主动选择启用。You post a picture one night, you wake up, there's 40 comments on it. How many of them are, "That's a great picture," versus how many of them are like, "Oh, how dare you take this picture of a dog?" And you never know. But the idea is that you can use models that are specifically trained to check for different kinds of things to help you write better or to check to see if incoming content is abusive or unfriendly. And Mima is mostly geared around moderation right now, making sure your trigger warnings aren't being tripped up, et cetera. And for that, summarization's not necessarily the best option. There are smaller, lighter models that can do a better job of that, and all of them are opt-in.
如果用户启用了某项需要另一个小模型的功能,他们可以选择开启并下载这个额外模型。它绝不会默认安装。我觉得,有些本应更懂行、拥有丰富人类产品构建经验的公司,忽略了这一点。早在 15 年前,我们还在重新发明轮子、学习如何构建应用并逐步提升用户体验时,就已经有了这样一种理念:用户应该能够选择加入,以改善自己的体验。但如果这会带来额外成本、占用额外存储空间等,就需要征得用户同意。If a person turns on a feature that needs another little model, they have the option to turn that on, download an additional model. It's never installed by default. I think this is something that companies who should know better, who have a lot of experience building products for humans have missed from back in the day when 15 years ago we were all reinventing the wheel and learning how to build apps and progressively enhance the user experience. There is this idea that the user should be able to opt in to enhance their experience. But if it's going to cost extra, extra storage space, et cetera, you need to ask their permission.
当然,你也可以向他们提供云端解决方案,但出于我之前提到的那些原因,我目前并没有提供这类服务。这不是在问:“你想让我在自己的服务器上处理你收到的所有推文,还是想下载这个模型?”你确实可以这么做,但对我来说,问题只会是:“你想下载这个模型吗?”And of course you could always offer them a cloud solution as well, but for the reasons I already stated, I'm not really providing one of those at this time. It's not like, "Well, would you like me to process all of your incoming tweets on my servers or would you like to download this model?" You could do that, but for me, it's just going to be, "Would you like to download the model?"
Olimpiu Pop:这听起来更贴近实际。而且,我喜欢信息不会离开你的设备这一点。从我的角度来看,这非常实用,其他人可能也会这么认为。内容审核也非常重要。Olimpiu Pop: That sounds closer to home. And also, I like the fact that the information doesn't leave your machine. So, that's quite useful from my perspective and probably others as well. And the moderation, it's highly important.
Rachel Lee Nabors:确实如此。我认为,在不久的将来,随着 AI 助手和个人智能体的发展,我们会看到这样的情况:到目前为止,我们一直在围绕 HubSpot 集成以及如何与它们开展业务来构建这些工具。但等它们进入消费市场后,就会缺少一样重要的东西:你的个人背景信息。没错,你可以把它们连接到你的电子邮件,但要怎样才能把它们连接到你的 LinkedIn,帮你找到下一份工作?要怎样才能把它们连接到你的 Facebook,让你了解孩子们的近况?又要怎样才能把它们连接到外面这些各自为政的封闭平台上——每个平台都想把你的数据留在自己的数据库里?Rachel Lee Nabors: It is. I think one of the things we're going to see happening with AI assistance and personal agents in the near future is we've been building them thinking about HubSpot integrations and how to do business with them so far. But once they hit the consumer market, they're missing something important, which is your personal context. Yes, you can connect them to your email, but how are you going to connect them to your LinkedIn to help you find your next job? How are you going to connect them to your Facebook to keep up with the kids? How are you going to connect them to all of these walled gardens out there, each one of which wants to keep your data in their databases?
还要记住,只有在这些数据相互交叉融合时,它们的价值才真正得以释放——我知道,这会带来巨大的安全风险。但话说回来,如果我们能够访问这张关系图,看到自己在多个不同网络上的社交关系图谱,以及分散在多个数据库中的个人帖子,我们的个人智能体就能借助这些背景信息变得强大得多。它们不一定要替我们发帖,只要更了解我们,就能更好地帮助我们每个人。And remember that the power of that data is only really unlocked when it's cross-contaminated, which is a huge security risk I know. But there's also so much to be said for if we could just have access to the graph, our own social graph across multiple different networks, our own posts across multiple different databases, our personal agents would become much more powerful for having that context, not even necessarily to post, but they would just know more about us and be better able to help us as individuals.
Olimpiu Pop:嗯,我喜欢你只关注积极的一面,我也完全支持这一点。你提到了评估,以及针对特定用例调整模型,这样你就可以获得与大型语言模型相同的输出。嗯,我觉得说“结果”更合适。关于这一点,能不能给些建议?尤其是你刚才谈到的那种没有确定性形式的情况。你说的是文本摘要,对吧?这有点多态。对你来说的摘要,可能和对我来说的摘要不一样。你是怎么解决这个问题的?如果我也打算做一些类似的用例,你有什么建议可以给我?Olimpiu Pop: Well, I like that you're looking only at the positive part and I'm all in supporting that. You did mention evals and that tweaking your model for that particular use case, it gives you the option of having the same output as a large language model. Well, outcome, I think it's more appropriate. Maybe a couple of hints on that, especially given that you discussed about something that doesn't have a terministic form. You spoke about text summarization, right? That's a bit polymorphic. Probably a summary for you to be different than a summary for me. How did you attack that problem? What would be the tips that you can give me if I intend to do someUse Caseimilar?
模型选择与模型评估策略 [14:36]Model Selection and Model Evaluation Strategies [14:36]
Rachel Lee Nabors:我非常欣赏 Hamel Husain。不知道你熟不熟悉他的作品,但他简直就是评估、评估、评估、评估领域的半神。我有测试驱动开发的背景,但看到评估时,我就想:“哦,这就是面向 AI 的测试驱动开发,懂了。” Hamel 大力主张,不能只是做个评估,然后问:“嘿,Claude,这些输出里哪个更好?”他主张你要逐一检查每一组内容。思路是,从你的任意来源中选几条帖子。在我的例子里,就说来源是 X,也可能还有一些 LinkedIn 帖子。我知道这些帖子写了什么,因为它们是我发的,而且我也有自己的看法。Rachel Lee Nabors: So, I am a big fan of Hamel Husain. I don't know if you're familiar with his work, but he is like the demigod of evals, evals, evals, evals. And I come from a test-driven development background, but when I saw evals, I was like, "Oh, this is test-driven development, but for AI, got it." And Hamel is a big proponent that you don't just put together an eval and say, "Hey, Claude, which one of these outputs is better?" Hamel is a big proponent of you walk through each one of the sets. So, the idea is you take a couple of threads from whatever your source is. In my case, we'll say it's X and maybe some LinkedIn threads. And I know what the threads say because they're mine and I have an opinion.
它们是真的。首先,它们是真实的对话串,里面有真实的人。它们不是假的,也不是 Claude 为了假设性地做摘要而生成的内容。第一步,把它们收集到一起。我知道他们会说什么,也大致知道输出会是什么样。把这些记下来,找个地方写下我认为摘要应该是什么样。然后用非常大的模型处理这些内容。让你的 Astra 来总结,让你的 Claude Opus 5.5 来总结,然后看看:没错,这些看起来挺对的,质量不错。这就是衡量标准,对吧?你还会记录延迟等其他指标,并确保它确实能按照你当时使用的格式输出正确内容。They're real. First off, they're real threads with real people. They're not fake. They're not something that Claude generated to hypothetically summarize. First, you get them together. I know what they're going to say. I have an idea of what the output is. Note that down somewhere. Note down what I think the summary should be. And then you run those through really big models. You get your Astra to summarize them, you get your Claude Opus 5.5 to summarize them, and you see, yes, those look about right. Those are good. That's the bar, right? You're also recording other metrics like latency and making sure that it's actually able to output the right format for whatever it is you're using at the time.
现在,下一步是:既然你已经用大模型做了原型,就要开始尝试你能找到的最小模型,再加上其他几个。在这个例子里,我用的最小模型大概是 Qwen 3.x,或者那种特别小的模型。Qwen 在这件事上表现真的很差。我当时想:“好吧,试试看。回头见。”不过,尽管 Qwen 干得很糟,它的速度也确实很快。所以,把它们排成一列:选上 Qwen、Gemma、Llama 3 2B。你得做点研究,挑出那些看起来最适合你的顶尖模型。然后用它们全部运行你的评测套件,并针对同一批内容多跑几次。Now, the next step is now that you've prototyped big, you want to start with the tiniest model you possibly can and a couple of others. In this case, the tiniest I had was like Qwen three point something or itty bitty. Qwen is really bad at this. And I was like, "All right, we'll see. We'll see y'all." But Qwen was also really fast for being terrible at the job. So, you line them up in a row, you get your Qwen, you get your Gemma, you get your Llama 3. 2B, you're going to have to do a little research to pick the ones that seem like they are top of the line for you. And you run their eval suite with all of them and you run it multiple times over the same thing.
因为它具有非确定性,所以每次运行都会得到不同的摘要。因此,通常用一个模型和一组输入运行三次左右,就会得到几个结果。接下来,你要做的就是逐一检查,自己读一读,然后判断:“对,这个摘要说得差不多。 不,这不对。”你可以自己来评判,也可以直接说:“嘿,Astra”,然后把它丢给你的密钥。“我想让你看看,这是否符合你对摘要的预期。”这样更快,但我觉得 Hamel 会说:“不,你得先自己评判一遍,按这些步骤走一遍。”Because it's non-deterministic, you'll get different summaries each time you run it. So, usually three times with a model and an input coupling will give you a couple of things. What you do then is you actually go through and you can read it yourself and be like, "Yes, that summary is about right. No, that's not right." You get to actually judge them yourself or you could just say, "Hey, Astra," and throw at your keys. "I want you to see if this lines up with what you expected as a summary. That's the faster way, but I think Hamel would be like, "No, you need to judge them for yourself first and go through those steps."
但等你把它设置好之后,就可以根据某项指标进行比较:它在那个讨论串中识别出了多少次不同的话题?它有没有识别出全部三个话题?有没有把其中的三个话题都统计出来?它能不能指出对话中每个话题是在什么地方提出来的?花了多长时间?通常需要在准确性和速度之间权衡。你得决定准确和快速哪个更重要。不过情况就是这样。设置好之后,你就可以开始构建你的黄金数据集。But then once you have it set up, you can actually go and you can compare on a metric, how many times did it pick out the different topics that were brought up in that thread? Did it sense all three topics? Did you count all three topics that were there? Was it able to point to the place in the conversation where each topic was brought up? How long did it take? And it's usually on an accuracy and speed. You're making a trade in one direction or the other, and you will get to make the decision how important it is for things to be accurate or fast. But that's how it is. Once you set that up, you start building your golden data set.
在这种情况下,我会把经过模糊测试的对话添加到这个数据集中,以便开始寻找一些情况。比如,如果我想用 Llama 3. 2B 构建一个毒性检测器,就会有一个黄金数据集,里面收录了人们在 Twitter 上对我和其他人说过的刻薄话。当然,我并没有这样的数据集,也没有真的拿人们在 Twitter 上对我说过的话来测试模型能否捕捉到人们说的刻薄话。不过,你建立起这个黄金数据集后,它就会成为传统 CI/CD 流程的一部分,这就是你推进工作的方式。现在,如果有一个表现特别出色的新模型问世,你就会想:“天哪,Gemma 5 会是那个答案吗?它会不会更快、更好,等等?”In this case, I add fuzzed conversations to this data set to start looking for things like if I wanted to build a toxicity detector using Llama 3. 2B, I'd have a golden data set of mean things people have said to me and others on Twitter. Not that I have that, not that I'm actually using things that people have said to me on Twitter to test models catching mean things people say, but you build this golden data set, it becomes a part of your traditional CI/CD runs, and that is how you move forward. Now, when there's a new model that comes out that's really balling and you're like, "Oh my God, is Gemma 5 it? Is it going to be faster, better, et cetera?"
现在只要把那个家伙放进你的评测中,你就能自己做决定了。它会显示在速度与准确率的权衡图上,你可以据此判断是否该换用新模型,还是继续用旧模型,或者需要调整提示词或输入预处理。Now you just pop that sucker into your evals and you can decide for yourself. It'll show up on that speed versus accuracy binary, and you can decide whether you're ready to swap in a new model or if you want to stick it out with the old one or you need to make some changes to your prompts or input pre-processing.
Olimpiu Pop:总而言之,你的回答是“这要视情况而定”,对吧?就像所有优秀的工程师一样,玩笑归玩笑,关键是你得选择自己愿意承受的代价,看看什么更重要,因为你刚才提到了 local-first。local-first 理念的一个要点是不要出现任何加载转圈动画。如果你追求快速和准确,那么大概可以找到平衡,并为自己选对合适的场景。等你有了一套黄金数据集,就可以在此基础上继续推进。Olimpiu Pop: To summarize, your answer is it depends, right? Like all proper engineers, leaving joking aside, it's you choose your poison and see what's more important because you mentioned the local first. If you push on one of the points of the local first idea is don't have any spinners. If having the fast things and accurate things, then you can probably have a balance and choose the right spots for you. And then once you have a golden set, then you can move on with that.
Rachel Lee Nabors:有意思,真是令人惊讶。你提到本地优先的应用不该显示加载指示器,这就是那些令人意外的事情之一。我没想到,尽管模型是在本地运行的,速度却可能比往返调用远端模型还慢。比如 Gemma,Gemma 4B,在一台性能相当强劲的 Mac 上本地运行——这又是另一回事。设备上可用的 Metal 性能可能意味着运行速度更慢。与搭载 M5 芯片的设备相比,老旧机器运行本地模型的效果不会那么好。所以,要记住这一点。不过我原以为本地优先就意味着延迟肯定很低。Rachel Lee Nabors: Interesting thing, surprising stuff. You mentioned no spinners for local first, and this is one of those surprising things. I didn't realize that even though the model is running locally, it can be slower than a round trip to a model out there. Gemma, for instance, Gemma 4B, running locally on a pretty beefy Mac, that's another thing. The metal that's available on the device might mean it's slower. An older machine isn't going to do as well running a local model as something with an M5 chip. So, keep that in mind. But I thought local first would mean low latency hands down.
这并不是真的。小型模型可能因为性能不足,完成同样的工作所花的时间比外国模型还长。这就像喷气发动机和那边一台小小的二冲程踏板车发动机之间的差别。没错,你可以去加油站给它加油,但这并不意味着它能更快把你送到目的地。It was not true. Smaller models can take longer than foreign ones to do the same amount of work because they're underpowered. It's like the difference between having a jet engine and a little two-stroke scooter engine over there. Yes, you can power one from the gas station. That doesn't mean it's going to take you there faster.
Olimpiu Pop:嗯,另一个可能会带来问题的地方是,在采用本地优先的方式运行时,你不一定总能使用相同的配置。即使是在同一台机器上,情况也可能有些不同。我不知道,比如你用的不是 Mac,而是 Windows 电脑,而且早上忘了重启它,用户体验可能就会变差。即便数据开始收集,我也预计,把数据存储在本地,并处理所有社交网络附带的元数据,会是一件很有挑战性的事。Olimpiu Pop: Well, and probably that is the other thing that just thinking about it can be problematic when running local first is that you don't have always the same setup. If on the same machine, things are happening a bit differently, I don't know, you are not running on a Mac, you're running on a Windows machine and you forgot to restart it in the morning, the user experience would be probably degraded or even if the data started gathering because I would expect that putting data locally, the metadata that comes with all the social networks to be challenging to take care of.
然后可能还会有,我想,你本地会有类似数据库的东西。在此基础上,你有一个小型语言模型和一个正在查询的数据库;如果数据库规模增加,那就要看你需要响应的内容是什么。And then probably also, I suppose you'll have something locally like a database. And on top of this, a small language model, you have a database that you're querying and if that increases, so it depends that you have to respond to.
Rachel Lee Nabors:确实有。我感觉最终 Mima 会成为这样一种产品:你可以购买云端解决方案,获得一台运行操作系统的虚拟机,而且数据库可以无限扩展。我觉得这或许有一天会成为解决方案,但就目前而言,要让它在本地一台性能强劲的 Mac 上运行,我最初设想的用户应该是像我这样的人,拥有一台新款 MacBook Pro 等设备。要测试本地模型能否表现良好,确实需要了解你的受众。Rachel Lee Nabors: There are. I have a feeling eventually Mima's going to be one of those things where you can buy the cloud solution and you get a VM somewhere that's running an operating system and it has infinite space to grow your database. I have a feeling that would one day be the solution, but for now, getting it to run locally on a big beefy Mac, my initial consumer is I assume is a person like me who has a modern MacBook Pro, et cetera. The testing for making sure that local models perform well really requires you to know your audience.
如果你已经有现成的数据,这就是为什么相比从零开始构建项目(就像我认识的一些人那样),基于现有项目要好得多:你拥有所有这些用户数据。大家都在用什么?这样一来,你就可以向那些你知道拥有更强性能设备的用户分发本地模型。比如,最新的操作系统需要特定芯片组才能运行,这就是一个很好的判断依据。你还可以做一些检测,看看他们的设备是否有足够的算力来运行模型。如果不够,就可以改用云服务提供商。If you have existing data, this is why it's much better if you're working with an existing project than if you're building one from scratch like some people I know, is that you have all this user data. What is it that people are using? You could then ship local models to folks that you know are going to have a more capable machine for handling that. The latest operating system that requires certain chip set to run is a pretty good indicator for instance. And you can also do a little bit of detection to see if they've got the right amount of horsepower to run the model. And if they don't, you can fall back to a cloud provider in that instance.
还有一点,仅仅因为你的本地模型——也就是小型模型——无法在本地运行,并不意味着它不能在云端运行。你仍然可以付费使用云端的开源小型语言模型,而且托管成本极低;与不断累积的 ChatGPT 或 Claude API 账单相比,运行它仍然便宜得多。所以请记住,无法在本机运行,并不意味着不能以低成本在云端运行。Another thing, just because your local model, your small model can't be run locally doesn't mean that it can't be run in the cloud. You still can pay incredibly just the hosting costs on an open source small language model in the cloud is still going to be much cheaper to run than running up your ChatGPT or your Claude API bills. So, keep in mind, just because it can't run locally on the machine doesn't mean it can't be run cheaply in the cloud.
奥利米乌·波普:我只是在想,就这个具体情况而言,你们实时实际需要多少归档数据?正如你提到的,你使用的场景是:你通常会做什么,你的朋友做过什么,新闻里发生了什么——浏览这些内容,从中寻找灵感。所以多数情况下,你只需要关注当前日期往前推 X 天内发生的事情,基本上就够了。我也在尝试解决类似的问题,后来我们发现,实际上 30 天的数据就绰绰有余了。与其使用一套庞大的数据库,不如用个小型的。在我们的案例中,它是……Olimpiu Pop: Just thinking about, well, this particular case, how much of your archiving data do you actually need in the real time? Because as you mentioned, the way the scenario that you're using is what do you usually do, what your friends did, what happened in the news, scrolling through it, finding ideas. So, most often than not, you just focus on things that happened in the current day minus X, and pretty much that's it. So, I am trying to solve a similar problem and then that's what we realized that actually 30 days of data is more than enough. Rather than using a beefy database, we can go with something small. In our case, it's.
数据库,用这个,然后之后就把所有内容都卸载到 Parquet 文件中,采用日历分片。是的,在给定的时间点,你确实可以选择云端 S3 存储桶的低成本方案,需要时再处理这一点。令人惊讶的是,听你说话时我突然想到另一个点:系统的性能退化主要来自分布式部分,也就是微服务。比如说,假设 Spotify 的某个功能出了问题,可能是因为云端后面的那个微服务现在宕机了,所以搜索功能无法使用。Db, use that and after that, just offload everything in Parquet files to them calendar sharding. And yes, at the given point of time, you actually can go with cheap solutions for S3 buckets in the cloud and when needed, you'll just go on that point. And surprisingly enough, another idea that just popped while listening to you is the degrading aspect of a system that comes mostly from the distributed parts, so from microservices. If something is done, I don't know, just for the sake of it, Spotify, maybe the search is not working now because that microservice behind the clouds is down now.
嗯,这也是我们能够理解的一点。如果我们重视本地优先的数据,就需要做几个重要的决定。好,我想把数据保存在本地。这意味着,根据设备的情况,有些事情会运行得更慢或更快。我认为这非常、非常重要。几年前,绿色软件兴起时,大家都在讨论适应变化有多重要,等等。那时我提出质疑的是:有时候,作为消费者而非工程师,我们的行为比思考某件事时更混乱。Well, that's something that we can understand also. If we treasure our local first data, there are a couple of important decisions that you have to make. Okay, I want to have it locally. And that means that some things will work slower or faster depending on what they have. And I think it's quite, quite important. I had a debate a couple of years back when the green software came to being and everybody was discussing about how important it is to adapt and so on and so forth. And what I was challenging at that point is the fact that at points as consumers, not as engineers, we behave chaotically than when thinking about something.
比如,我身边很多朋友都会一边在 YouTube 上听音乐,一边写代码,对吧?问题是,音乐虽然在另一个标签页里播放,但实际上仍在持续播放 4K 视频,成本很高。对我的电脑来说,解码它的成本很低,所以我感觉不到影响。但实际上,在幕后,无论烧的是哪种煤——或者说,在大多数情况下都是煤——我很惊讶地听说,弗吉尼亚州的大部分电力都是通过燃煤和化石燃料生产的,这确实是个问题。所以,把这个问题带到我们的机器上来讨论;正如你提到的,目标受众可能是工程师,他们对此更熟悉,也希望他们能够理解。For instance, a lot of the friends around me are listening to music while coding on YouTube, right? And the thing is it's in a different tab, but that's still streaming 4K video that is very expensive. And because on my machine, it's very cheap to decode it doesn't bother me. But actually behind the scenes, whatever that coal is being burned or because that's most of the cases, I was surprised to hear that in Virginia, most of the electricity was produced through coal burning and fossil fuel, it's actually a problem. So, bringing the problem on our machines, and as you mentioned also, the target audience are probably engineers that are more accustomed and hopefully they'll understand it.
Rachel Lee Nabors:目前的目标受众就是我们。我们总是第一批尝试新事物的人,但我真心相信,更高效的端侧 AI 即将惠及所有人。我也很喜欢你说的,它带来了这样的挑战:“哦,我不想用这个,因为它太耗电了。”这反而能帮助人们做出更好的决定,也就是把成本直接落到他们自己的设备上。不过,作为企业主,你也可以说,你把运行推理和算法的成本转嫁到了别人的设备上。那就不再是你的成本了。Rachel Lee Nabors: The target audience is for now. We're always the first ones to adopt new things, but I truly believe more efficient on device AI is coming for everybody. And I love what you said about how it brings the challenges of like, "Oh, I don't want to use this one because it drains my battery." There, that helps humans make better decisions. That is localizing the cost right onto their machine. But you could also say as a business owner, you're externalizing the cost of running the inference and running the algorithms onto someone else's device. That's not your cost anymore.
就我个人而言,我很喜欢边缘计算——确切地说,就是在用户的设备上进行计算,因为这确实能体现出哪些地方需要节省开支。你刚才提到,遇到特别陈旧的信息该怎么办?嗯,Mima 是个新项目,所以我们还没真正碰到这些问题。不过,每隔 30 天,超过 30 天的内容就会被放归自然。就此告别,交给垃圾回收机制处理。And personally, I love edge computing, literally on the user's device because it really shows where economizations need to be made. And you were talking about what do you do with really old information? Well, Mima's a new project, so we haven't necessarily crossed those bridges yet, but every 30 days it's just content older than 30 days is released into the wild. It's goodbye, it's garbage collected.
Olimpiu Pop:是的。绿色牧场。Olimpiu Pop: Yes. Green pastures.
Rachel Lee Nabors:不过,你确实需要对用户有一些持久化记忆。我记得我刚有 Mima 这个想法时,以为自己是在构建一个智能体。我有个朋友在德国,叫 Christoph Henkelmann,拥有博士学位。他当时说:“不,你不需要为此构建智能体。你不需要那个。你只需要这个通用算法和那个通用算法。”我说:“所以,我基本上是在设计一个数据库,并在上面加一个界面。”他说:“没错。”确实如此。这个世界上的大多数东西,归根结底都是一个数据库,加上 API 和 UI 层。而智能体本身通常也可以归结为:一个数据库,加上某个非确定性的 LLM 来访问它,并把其中的内容重新整理成人类易于理解的形式。Rachel Lee Nabors: But you do need some persistent memory about the user. I remember when I first had the idea for Mima, I thought I was building an agent and a friend of mine, Christoph Henkelmann in Germany, who's a PhD, and he was like, "No, you don't need an agent for that. You don't need that. You just need this common algorithm and that common algorithm." I'm like, "So, I'm basically designing a database with an interface on top of it." He's like, "Yes." And it's true. It's true. Most everything in this world is just a database with an API and a UI layer. And agents themselves usually boil down to it's a database with some non-deterministic LLM accessing it to reformat its contents for a human.
一旦你看到了这一点,就很难再视而不见了。所以,持久层其实就是用来记住人的偏好,以及他们与周围人的关系,而这些内容可以很好地提炼出来。你可以把这些信息非常紧凑地存储在文本文件中。所以,这才是确实需要保留的部分。这个人和另一个人是什么关系?他们喜欢反复阅读哪些文章?不过,把这些信息存储在本地并不难。And once you see that, you can't really unsee it. So, the persistent layer is really just there for remembering the human's preferences and their relationships with the people around them, which can be really nicely distilled down. You can keep that information very tightly packed in text files. So, that's the part that actually does need to be retained. What's this person's relationship with this other person? Which articles do they like to read over and over? But it's not too hard to store that locally.
Olimpiu Pop:我喜欢你的说法。所以,这大致上就是能量:我们消化吸收的内容,而剩下的都是垃圾,需要冲进黑洞里,诸如此类。是的,这种说法随着情况发展还挺不错的。不过,在这个语境里,它指的是别的东西,也就是特定用户的元数据。你把它存起来,留着就行了。但话说回来,那是另一个时候要解决的问题。把东西保存在本地的挑战在于,你可能会把它弄丢。所以,你可能会想把它放到云端之类的地方,不过这就属于完全不同的本地优先话题了。Olimpiu Pop: I like how you put it. So, it's more or less energy, so it's like content that we digest and the rest of it is junk and it needs to be flushed down the sinkhole, whatever. Yes, that's quite good in that evolves. Well, this context means something else, the metadata for particular users. You store it, you have it and that's it. But again, that's a problem for a different moment. The challenge of having things locally, it means that you might lose it. So, probably that's something that you'd like to have in the cloud or something like that, but that's a whole different local first conversation.
Rachel Lee Nabors:我觉得这有点像囤旧杂志。有些人会把自己拿到的每本杂志、每份报纸都留着,舍不得扔,但我们大多数人可能每个月都能把它们回收掉。Rachel Lee Nabors: I think it's kind of like keeping old magazines. There's some people who are going to keep every magazine and every newspaper they get. They won't let them go, but most of us could probably recycle them every month.
Olimpiu Pop:是的,同意。但这引出了另一个问题:未来的应用会是什么样子?因为现在有了模型,我们可以不必一开始就考虑 S 还是 L,而是直接为你构建一些东西。现在,我们可以让每个人都有机会构建自己想要的应用。如今,关于“凭感觉构建”(build by vibe)的讨论仍在继续。Olimpiu Pop: Yes, agree. But this opens the door to a different question. How will apps look in the future? Because now we have the ability with models leaving aside the S or the L upfront, have the ability of just building something for you. Now we have the ability to just give everybody the chance of building the app that they wanted. There is an ongoing debate build by vibe these days.
Web 和应用架构的演进:充分发挥 AI 的作用 [29:53]The Evolution of Web and Application Architectures to Fully Use AI [29:53]
Rachel Lee Nabors:凭感觉构建。太喜欢了。Rachel Lee Nabors: Build by vibe. Love it.
Olimpiu Pop:这是我们必须牢记的一点。你提到自己曾参与打造了一些团队,而这些团队可能构建了最重要的一些框架,用于开发 Web 应用,甚至本地应用。你怎么看?未来还会有通常意义上的框架、应用、Web、移动端之类的东西吗?还是说只会有网格?Olimpiu Pop: It's something that we have to bear in mind. So, you did mention that you were part of those teams that put together probably some of the most important frameworks for building web and even local applications. How do you see it? Will the future still have frameworks, applications, web, mobile, whatever you want in the normal sense, or will just have meshes?
Rachel Lee Nabors:这可能是我们在这里要讨论的内容中最重要的部分。对你们中的一些听众来说,这听起来可能很疯狂,他们也许会觉得这绝不可能发生。我自己也常常有这种感觉,但我亲眼看着它发生了。过去一年发布的应用比以往任何时候都多,但应用的使用量却没有增加。事实上,人们通常不会采用新应用。他们常用的核心应用,都是四年前安装的。应用并没有发展壮大。如今网站是用来做什么的?它们被用作下载应用的落地页,也被用作 B2B 公司的仪表盘——这些公司不想开发和管理一大堆应用。Rachel Lee Nabors: This is probably the most important part of the conversation we're going to have here. And it may sound crazy to some of your audience members, they might think that can never happen. I have often felt that way myself and I've watched it happen. Well, we've seen more apps released in the last year than ever before, but app consumption hasn't gone up. In fact, people typically don't adopt new apps. Their core apps that they're using are apps they installed four years ago. Apps are not growing. Websites, what are websites used for nowadays? They are used as landing pages to download apps and they are used for dashboards for B2B companies that don't want to build and manage a bunch of apps.
它们是开展业务时的最低公分母。个人智能体出现后,会如何影响应用?它们一定会出现。个人智能体将成为终结所有消费类软件的应用。无论是消费内容还是购买商品,人们很可能都会通过操作系统级别的智能体来完成。这是因为任何操作系统所有者——无论是谷歌、微软,还是苹果——都希望并且能够从中受益:全面掌控你与外部世界交互的界面。多年来,微软与浏览器之间的较量一直围绕着这一核心展开;如今,这也日益成为谷歌投资 Gemini 和 AI 助手的核心。They're the lowest common denominator for doing business. How will apps be influenced by personal agents when they come around? And they will. Personal agents are the app that kills all software for consumption. When it comes to consuming content, buying things, it will most likely come through an operating system level agent. That's because any operating system owner, your Googles, your Microsofts, even Apple, will want to and benefit by completely owning your interface with the rest of the world. This has been at the core of Microsoft's battle with browsers over the years, and it is continuing to become the core of now Google's investment in Gemini and AI assistance.
每家大型供应商都想掌控你的体验。这就是亚马逊起诉 Comet 的原因。嗯,他们起诉的是 Perplexity,起因是其智能体浏览器 Comet 允许用户下单。他们不想放弃这个触点,因为这里可以投放广告、向用户推销信用卡。这里是他们唯一能触达你的地方。如果他们最终只是被简化成一组由用户界面调用的 API,沦为一个价格点,让人们在“哪里能买到便宜啤酒”这类问题上做选择,那就会损害他们的利润。他们不想这样。所以,这会是一场艰难的斗争,但最终这场斗争注定赢不了。Every big vendor wants to own your experience. This is why Amazon sued Comet. Well, they sued Perplexity for their agentic browser comet that allowed people to place orders. They didn't want to give up that surface area because that surface area is ads, that surface area is upsells to their credit card. That surface area is the one place where they can get you. And have them just being boiled down to a set of APIs that a UI calls where they're just like a price point where someone's making a choice on where is the best place to get cheap beer, that's bad for their bottom line. They don't want that. So, it will be an ugly fight, but it will ultimately be an impossible to win fight.
我们已经看到这种情况了:人们用 Claude 替自己搜索,只看 Google 搜索里的 AI 摘要。他们不在乎,也不想访问你的网站,更不想下载你的应用。他们从来就没想做这些事。他们只需要一个答案,或者某样东西。他们只想弹指之间就把事情办好。我们一直以来打造的一切,都是为了满足这个需求。所以,这就是未来的发展方向。如果你想知道“那么,他们要如何为所有这些信息生成各种界面”,可以看看 A2UI 之类的东西。We already see this, people using Claude to do their searches for them, just looking at the AI summaries on Google search. They don't care. They don't want to visit your website. They don't want to download your app. They never wanted to do those things. They just needed an answer or a thing. They needed to snap their fingers and have it done. That's all we've been building for. So, that's what the future for that looks like. And if you are curious about like, "Well, how are they going to generate all the interfaces for all this information," check out things like A2UI.
这是一项标准,你的 API 可以据此向 AI 助手发送一份 JSON schema,说明你将提供哪些信息。助手可以查看这份 schema,并运用它的设计系统,动态创建一个满足 schema 需求的小部件。它需要图片,需要一个“下一步”按钮,还需要价格。没错,没错。只要用组件把这些拼在一起就行,用 React 已经出色地规范化了的那些组件。之所以能做到这一点,部分原因是人们投入了大量工作,构建了这样一个组件化生态系统,让你可以随时把 UI 快速组合起来。如今,我们在很大程度上可以信任语言模型来完成这件事。注意我刚才说的一点:有些东西已经标准化了。This is a standard by which your API can send the AI assistant a JSON schema of what information you're going to give them and that assistant can look at it and use its design system to make a widget on the fly that meets that schema's needs. It needs an image, needs a next button, it needs price. Yes, yes. Just stitch that together using components, using components that React did such a great job of normalizing. And part of that's possible because so much work was done to create this componentized ecosystem where you can just zip UI together on the fly. And we can trust language models to do that right now to a good extent. Notice I said something there, that something's been standardized.
当事物实现标准化时,智能体才有可能介入并让事情成为可能。股票是标准化的,比如股票代码、股价是涨是跌,这些都是我们共同认可的内容。我们有约定俗成的表示方式,也有一套约定好的、与之交互所需的信息。这就是一种标准化的信息概念。 现在想想软件即服务,比如 QuickBooks、Shopify。这些都是人们使用的仪表盘界面,还有 Salesforce。问题在于,当然,任何人都可以凭感觉编写代码,搭建一个仪表盘,并在底层配上一堆数据结构和数据库。你可以在公司内部创建自己的 Salesforce。When things are standardized, that's when it's possible for an agent to come and make things possible. Stocks are standardized, like the symbol, whether it's going up or down, these are things we've all agreed on. There's an agreed upon way to represent them. There's an agreed upon set of information you need to work with them. That's a standard information concept. Now think about things like your software as a service, your QuickBooks, your Shopifys. These are the dashboard screens that people work with, Salesforce. The problem with these is that sure, anybody can vibe code a dashboard and a bunch of data structures and databases underneath. You can create your own in-house Salesforce.
你不可能雇到一个能马上就会用它的人。你也没法和其他公司的同事或供应商一起使用它。你也没法说:“哦,没错,咱们合作吧,共享各自的用户群。”因为你现在用的是另一套东西,走的是自己的路,制定了自己的标准,构建了自己的数据结构,使用的是一整套完全不同的信息,而且它无法与其他任何东西兼容,因此功能也就没那么强大。QuickBooks 之所以强大,原因之一就是每个会计师都能登录并使用 QuickBooks,帮你处理那些乱七八糟的事情。You're not going to be able to hire anybody who's going to know how to use it immediately. You're not going to be able to use it with any colleagues or vendors at other companies. You're not going to be able to be like, "Oh yes, let's team up together and share our user bases because you're now using, you're off-roading, you've built your own standards, you've built your own data shapes, you're using a whole nother set of information and it is not going to be able to work with anything else, which makes it less powerful. One of the reasons QuickBooks is powerful is because every accountant can sign in and use QuickBooks to help you with your mess.
当然,你也可以说:“嗯,智能体不能做这些吗?”目前还不太行。仍有很多事情需要人来做。人还是得亲自动手处理一些事情。而且,往往最重要、能够亲自动手处理这些事情的人,还不在你的公司里。所以我认为,对开源协议、开源标准的投入,以及人们愿意在这上面投入多少,将决定其中有多少事情可以通过智能体界面来实现或处理。如果你说:“哦,是的,我们公司也采用开放会计协议”,那么只要你的企业智能体和会计师智能体说的是同一种语言,它们就更容易彼此开展业务。And of course you could say, "Well, can't agents do that?" Not quite yet. There's still a lot of stuff that needs humans. Humans still need to lay hands on things. And often the most important human that can lay hands on things isn't in your company yet. And so, that is where I think the investment in open source protocols, open source standards, how much people invest in them will dictate how much of this can be vibed or handled via an agentic interface. If you're like, "Oh yes, our company uses the open accounting protocol too," it'll be much easier for your corporate agent and your accountant agent to do business with each other if they both speak the same language.
所以,我认为这就是它在 B2C 和 B2B 层面上的演变方向。B2C 领域,我们最终都会被简化为 API、API,以及我们拥有的数据库。竞争将体现在这些 API 另一端的履约能力上。B2B 领域,互操作层目前就是护城河。它就是护城河。So, that's how I see this evolving on a B2C level and the B2B level. B2C, we're all going to be reduced to APIs, APIs and the databases that we own. Competition's going to be on fulfillment on the other end of those APIs. B2B, the interoperability layer is the moat right now. It's the moat.
Olimpiu Pop:是的。所以,标准很重要。通常,标准都是在企业之后才制定出来的,然后给它加上一个缩写,就这么完事了。Olimpiu Pop: Yes. So, standards are important. Usually, standards are brought behind companies and that put an acronym on it and then that's it.
Rachel Lee Nabors: Yes.
Olimpiu Pop:嗯,显然,如果某个标准不好,那迟早会有另一个标准取而代之,诸如此类。我们都知道这一点。但问题是,作为消费者,我们应该转变成什么样?因为我们都在仪表板上看到过一些看起来不错的东西,但却没有合适的命名方式。所以,正如你提到的,针对不同视角、不同事物建立一种通用语言,可能会很有用。也许真正的问题是,我们该如何为这样的未来做准备?明天会用得上的工具有哪些?Olimpiu Pop: Well, obviously if a standard is not good, it's just about time for having another standard that replaces so on and so forth. So, we know that. But the question is we as consumers, what should we transform ourself into? Because we all saw something on a dashboard that looked good, but we don't have the proper naming. So, probably, as you mentioned, a Ubiquitous language of different things for different perspective, it would be quite useful. Maybe the right question is, how are we preparing for this kind of future? What are the tools it'll be useful to have tomorrow?
AI 时代的工程技能与开发者体验 [37:24]Engineering Skills and Developer Experience in the Age of AI [37:24]
Rachel Lee Nabors:我认为,训练营的时代理应已经落幕。我觉得,要说“来参加我们的训练营吧,你就能学会如何开发 ChatGPT 应用”之类的话,确实很容易。但很快人们就会明白,成为开发者已经没有前途了——毕竟任何人都能创造东西。你不需要为此上学,只要看 30 分钟的 YouTube 视频就行。问题是,如何大规模地构建东西?如何构建出一投入实际使用就不会立刻变得一团糟的东西?而且,我们现在能够构建的东西,其复杂程度也是无限的。Rachel Lee Nabors: I think the era of the bootcamp is justifiably at an end. I think it'll be very easy to kind of like, "Hey, join our bootcamp and you can learn how to ChatGPT apps." But very quickly people will learn there is no future in becoming a developer, in a person who can just create things because anyone can create things. You don't need to go to school for that. You need to watch 30 minutes of a YouTube video. Question is how do you build things at scale? How do you build things that don't turn to crap as soon as they go out into the road? The complexity of the things that we are able to build now is also infinite.
所以,我加入 React 团队时,团队里已经没人能完全理解 React 是如何构建起来的。它经历过多位核心维护者和多次修订,每个成员都精通其中不同的部分,但也坦率地承认:“哦,我觉得我并不了解整个系统是怎么运作的。”而现在,我们有了不仅能理解整个系统如何运作、还能在周末前构建出复杂程度高出五倍的东西的系统。人类该如何用它来构建呢?这正是我认为计算机科学核心基础知识——比如真正理解数据库——之所以重要的地方。So, no one on the React team fully understood how React was built by the time I got there. It had been through multiple key maintainers and revisions, and each member was an expert in a different part of it, but openly admitted, "Oh, I don't think I know how the entire thing works." We now have systems that can not only understand how the entire thing works, but they can make something five times as complex before the weekend. How is a human supposed to build with that? This is where I think computer science core fundamentals, really understanding databases, for instance.
这是我职业生涯早期花了很多时间钻研的内容。我听很多开发者说过:“你没必要学数据结构。你没必要深入了解数据库。你只是做 UI,对吧?”而我的想法是:“可这很有趣,我还想多了解一些。”你就需要保持这种态度,因为你将要和智能体讨论的,是如何权衡取舍,是系统的复杂性、如何降低复杂性、如何构建长久可用的系统,以及当你乘着引擎本身一路冲下山时,要如何改变轨道。This is something I spent a lot of time on early in my career and I heard from many developers, "You don't need to study data structures. You don't need to understand databases that much. You're just working in UI, right?" And I was like, "But it's interesting and I want to learn more about it." That's the attitude you need to have because the conversations you're going to have with agents are going to be about making trades. They're going to be about the complexity of the system and reducing the complexity and building the longevity and understanding how you're going to change the rails while you're crashing down through the mountain on the engine itself.
这些东西如今并不是说学就能学会的,往往需要多年的经验。关键在于,要在职业生涯早期就学会这些东西,而这可能得靠在系统里经历许多挫折和磨炼。不过我认为,第一步是转变重心:别再只靠手工制作 UI 或待办事项应用,而要从更多繁琐的杂活转向理论性更强的工作。还要学会与智能体协作,而不是只让它生成结果,然后转身就走。如今我们也看到不少年轻人这么做:他们只是在提交些敷衍的 PR,然后在评审中碰壁。真正的关键并不只是不断地提交 PR。Those aren't things that you really can learn without years and years of experience these days. The trick is going to be learning those things early in our careers, which will probably happen because of many hard knocks working in the system. But I think refocusing from just make UI by hand or a to-do app, refocusing from the more grunt work and into the more theoretical work, I think will be the first step. And learning how to work alongside the agent as a collaborator as opposed to just asking it for output and turning around. We do see that happening with young folks these days too. They're just adding vibe slop PRs and failing reviews. The real trick isn't so much as just pumping out PRs.
诀窍在于不断提交 PR,让它们的质量随着时间推移不断提升,并构建能够做到这一点的系统。这需要在充分理解计算机科学的基础上进行思考,同时也要了解机器学习和大语言模型,以及它们在底层究竟是如何运作的。它们不是神奇的黑箱,而是数学。一旦你理解了它们的工作原理,就会想到:“哦,你知道吗?如果我们只从这个 Jeff 模型的顶部锯掉一部分,就能彻底替换掉那边的模型,从而降低延迟。”现在需要展开的就是这种讨论。所以,要回归基本功,回到源头。The trick is pumping out PRs that ratchet up their quality with time and building the systems that can do that. And that requires thinking under having a good understanding of computer science, but also having an understanding of machine learning and LLMs and how they're actually working under the hood. They're not magic black boxes, they're math. Once you understand how they're working, you can go, "Oh, you know what? If we just saw it off the top of this Jeff model, we could completely replace that model over there and that would reduce the latency." That's the kind of conversation that needs to happen now. So, a return to basics, a return to the well.
Olimpiu Pop:这恰恰与当下显而易见的趋势背道而驰。大家都觉得我们不需要知道这些。其实互联网刚出现时,情况也是如此。我们不必什么都知道,因为我们可以访问这些信息;但如果你不知道该找什么、该搜索什么,那就无从谈起。这更多属于社交技能这一类,也就是比较软性的能力。关键能力可能包括批判性思维、好奇心、持续学习,以及与他人互动的社交能力——无论是与另一个人,还是与另一个智能体互动,都能让自己不断向前。Olimpiu Pop: It's exactly against the obvious things happening these days. Everybody considers that we don't need to know. Well, that was true also when the internet appeared. We don't have to know everything because you have access to it, but if you don't know what to look for, what to search for, it's impossible. And this is more on the social skill side, softer side. It's probably critical thinking, curiosity, continuous learning, and then the social ability of interacting, whether with a human, with a fellow human or with a fellow agent to be able to continuously move forward.
Rachel Lee Nabors:没错。最大的挑战之一是,人们以为自己的智能体什么都知道,但其实并非如此。新的标准和技术一直在推出,而你的模型并没有接受过相关训练。你才是那个能走出去、和其他正在打造宏大项目的人交流,再回来告诉大家“好,我有个主意。我们试试这个规范、这种格式、这个东西”的人。这就是你的工作。你就像一只忙碌的蜜蜂,在花园里传粉。我们曾经身处一种工程文化之中:它把那些能躲进房间里,一份接一份地写出完美 PR 的“代码机器”奉为英雄,而我们则会在代码审查中把彼此批得体无完肤。Rachel Lee Nabors: Agreed. And one of the biggest challenges is that people think their agents know everything and they don't. There are new standards and new technologies being released all the time that your model hasn't been trained on. You are the wetware that gets to go out there, talk to other people who are building big things, come back and be like, "All right, I got an idea. Let's try this spec, this format, this thing. That's your job. You're the busy bee pollinating in the garden." We've come from an engineering culture that made heroes of the code machine who could disappear into a room and just pump out perfect PR after perfect PR, and we would tear each other apart in code reviews.
它非常强调做到完美、确保正确,因为你只有一次机会。如果做不到,就会拖团队的后腿。我们正在迈向这样一个阶段:代码触手可及,其中一部分肯定会出错。真正的问题是,你能否对它进行推理?能否不断提升质量?能否构建足够灵活的系统,根据用户的需求及时调整、灵活应变?未来的工作环境会更具协作性,而不是充满对抗。我认为,正如你所说,这些协作能力将成为真正的优势。And it put a lot of emphasis on being perfect and being right because you only get one chance. And if you're not, then you're dragging the team back. We're moving to a place where code's free, part of it's going to be wrong. The real question is, are you able to reason about it? Are you able to ratchet up the quality? Are you able to build systems that are flexible enough to pivot and weave with what the users need? And that is a more collaborative space and less of an antagonistic space moving forward. And I think those collaborative skills, as you said, are going to be real assets.
Olimpiu Pop:我们在事物的机械层面上花了很多时间。比如,我们俩都提到,接下来一段时间要出行。我刚才想到自己坐在车里开车的情景,汽车的舒适性显然很重要;但如果你能像《星际迷航》里那样瞬间传送,那更重要的就会是:我们为什么要去那里?那边有什么?这就是我的感受。作为一个行业,我们不像其他行业那样历史悠久。我们才发展了几十年,但我们确实花了很多时间在我们称之为“工艺”的东西上——可那更像是“垃圾”:我们只是专注于如何从机械层面把东西造出来。Olimpiu Pop: We spend a lot of time into the mechanicals of things. For instance, both of us mentioned that we are traveling in the upcoming period. I was just thinking about being in the car driving, and then obviously the comfort of a car is important, but if you would be able to teleport like in Star Trek, it would be more important why are we going there? What would be the things on the other side? And that's my feeling. We, as an industry, are not as old as other industries. We are just having a couple of decades, but we did spend a lot of time into, we call it craft, but it was more like crap of how we build stuff and we just focused on the mechanics of how to build the things.
现在我们可以看看这一点的社会层面。我们为什么要做这件事?我们如何作为一个群体共同去做,最终会取得什么成果?我认为这很重要。还有一个广为流传的想法,我也和人讨论过几次:简单的技术问题已经解决了。正如你提到的,如何制作按钮等等。现在,制作这些东西已经很容易了。重要的是我们为什么要做,以及哪些重要的事情真正能帮助我们这些生活在这个星球上的「湿件」。Now we can look at the social aspect of that point. Why are we building it? How are we building it as a group and the outcome that we have? And I think that's important. Another idea that was flying and I had a couple of conversation on it, the easy technology problems are done. As you mentioned, how to do the buttons and so on and so forth. It's so easy to make the things. Now it's important why are we doing it and all the important things that actually would help us as wetware on this planet.
Rachel Lee Nabors:说实话,我听到很多人在谈论打造这些软件工厂,而我觉得智能体确实很擅长构建以前已经有人做过的东西。如果你只是想打造一个类似 Netflix、但专为狗狗服务的平台,智能体不用太多人工参与就能做到。如果你想打造的是以前从未有人做过的东西,也许是因为过去根本无法实现,也许只是因为过去不值得花时间去做——比如打造一款浏览器,把你所有的社交网络都整合到一个非常出色的界面中——现在正是考虑这件事的好时机。但你得亲自上手写代码,真正和智能体协作。Rachel Lee Nabors: I got to be honest, I hear a lot about people building these software factories and I feel like agents are really good at building stuff that's been built before. If you just want to build something like Netflix, but for dogs, an agent's going to be able to build that without a lot of human input. If you're trying to build something that hasn't been built before, maybe because it wasn't possible previously, or maybe it's because it just wasn't worth anyone's time previously, maybe you want to build a browser that brings all of your social networks into one really great interface, now's a good time to look at that, but you're going to have to put your hands on the code and you're going to actually be working with an agent.
你会进行对话和交易。你需要熟悉数据库,也需要了解各种不同类型的东西,比如加密格式。所以,真正令人兴奋的事情可能不是再开发一个健身应用,而是那个你从没想过自己有时间去做的疯狂点子——现在值得认真考虑一下。You're going to be having conversations and making trades. You're going to need to know your databases. You're going to need to know these different kinds of, for instance, encryption formats. So, the exciting stuff is probably not building another fitness app. It's probably that one crazy idea you never thought you could have time to work on and it's worth looking at now.
奥林皮乌·波普:你提到的 AI 的另一位“半神”之一,这也符合我尝试过的做法以及我所相信的东西。只要你决定使用 AI,它就能让你的智商额外提升 20%、30% 甚至 40%;你只要说“帮我做这个”就行了,然后对结果满意即可。或者你也可以说:“好,教教我你是怎么做的。”就像有人说的,“上蜡,擦蜡”。这才是重要的。对我来说,这意味着所有敞开的机会——而且对我身边的大多数人来说可能也是如此——我们现在不必再做大量研究了,因为正如你提到的,以前我们有海量的数据库。Olimpiu Pop: One of the other demigods of the AI you did mention, and that was in line with what I tried and what to believe. The AI can provide that extra 20%, 30%, 40% of your IQ if you decide to use it because you can just say, do that for me and that's it and you're happy with what you got or you can just say, "Okay, teach me what you did." Wax on, wax off as somebody would say. And that's the important thing. For me, what it means in all the doors that were open and probably for most of the people around me is we now don't have the need of doing a lot of research because previously, as you mentioned, we have tons of databases.
你会选哪一个?你得先理解它,做些研究,弄明白。然后,如果你钻进兔子洞,就会越陷越深,只顾着争论这件事,忘了原本的目的。但现在你没有理由不拥有它,因为你已经具备了真正需要的所有要点。关键在于你想做什么。正如你提到的,做很多事情很容易。现在关键是拥有它们。Which one would you pick? You have to understand it, do your research, understand. And then if you go down the rabbit hole, you're gone and you're just debating that and you forget about the purpose. But now you don't have any reason not to have it because you have all the points that you actually need. It's just about what you're trying to do. As you mentioned, it's easy to do a lot of stuff. Now it's about having them.
Rachel Lee Nabors: It's true.
Olimpiu Pop:这个话题可能永远都聊不完,但我们也得注意时间。Olimpiu Pop: It's a conversation that probably can go forever, but we have to be also worried about our time.
Rachel Lee Nabors:我们得去收拾行李了。Rachel Lee Nabors: We have to go get packed.
Olimpiu Pop:是的,是的,没错。尽管我们要去两个不同的方向,你往西走,我往东走。Olimpiu Pop: Yes, yes, yes, exactly. Even though we are going two different directions, you're going west and I'm going east.
Rachel Lee Nabors:关于 MCP、WebMCP、MCP 应用,我们可以聊的内容还有很多,不过你们只能等我下次再来聊了。各位,如果想持续关注我关于 Web 未来及这些话题的文章,可以去 nearestnabors.com 找我。Nabors,拼作 N-A-B-O-R-S。我即将在 LinkedIn Learning 上推出一些关于 MCPA 的课程。如果你是 LinkedIn Learning 用户,可以在那里找到我。还有,如果有机会,也欢迎看看 mima.social。回头见。Rachel Lee Nabors: There is a lot that we could talk about with MCP, WebMCP, MCP apps, but you're just going to have to have me come back. Folks, if you want to keep up with my writings about the future of the web and these topics, you can find me at nearestnabors.com. That's Nabors, N-A-B-O-R-S. I've got some courses coming out on LinkedIn Learning around MCPA. If you are a LinkedIn Learning user, you can catch me there and yes, check out mima.social if you've got a chance. Cheers.
奥林皮乌·波普:谢谢你,雷切尔·李。Olimpiu Pop: Thank you, Rachel Lee.
Rachel Lee Nabors:谢谢。很高兴参与其中。Rachel Lee Nabors: Thank you. It's been a pleasure.
提及:Mentioned:
- Rachel Lee Nabors Blog
- React 网站
- React Native 网站
- Phoenix 评估库
- A2UI 首页站点
- Hamel Husain 的评估方法论