[ { "i": 0, "speaker": "Speaker 1", "text": "如何停止对智能体的过度照顾。" }, { "i": 1, "speaker": "Speaker 1", "text": "随着模型变得越来越智能,我注意到我们越来越多地花费时间在" }, { "i": 2, "speaker": "Speaker 1", "text": "我们花更多的时间盯着屏幕,等待Claude完成他的工作" }, { "i": 3, "speaker": "Speaker 1", "text": "或者只是作为Claude的一个高级QA测试员。" }, { "i": 4, "speaker": "Speaker 1", "text": "这可能会让人感到非常不满,而且也是对你时间的低效利用。" }, { "i": 5, "speaker": "Speaker 1", "text": "而我此次演讲的目标是给你们一些策略,帮助你们重新夺回一些时间,从而" }, { "i": 6, "speaker": "Speaker 1", "text": "你可以更好地管理你的智能体。" }, { "i": 7, "speaker": "Speaker 1", "text": "你也可以将其视为更高级的Claude Code演讲。" }, { "i": 8, "speaker": "Speaker 1", "text": "所以这是一门 Claude Code 301 类型的大学课程。" }, { "i": 9, "speaker": "Speaker 1", "text": "正因为如此,我们有一些前提条件和一些基本要求,这里每个人都应该" }, { "i": 10, "speaker": "Speaker 1", "text": "至少听说过,即使没有实施。" }, { "i": 11, "speaker": "Speaker 1", "text": "所以,以下是一些可以提升你 Claude Code 体验的方法,从...开始" }, { "i": 12, "speaker": "Speaker 1", "text": "附带一份非常高质量的ClaudeMD文件。" }, { "i": 13, "speaker": "Speaker 1", "text": "这是你能为改进 Claude Code 做的杠杆率最高的事情" }, { "i": 14, "speaker": "Speaker 1", "text": "经验。" }, { "i": 15, "speaker": "Speaker 1", "text": "所以如果你还没有尝试过,我强烈建议你去试一试。" }, { "i": 16, "speaker": "Speaker 1", "text": "第二点是将你的工具连接到Claude Code。" }, { "i": 17, "speaker": "Speaker 1", "text": "一个很好的经验法则是,如果一个工具在你的日常生活中对你有用,那么它" }, { "i": 18, "speaker": "Speaker 1", "text": "对Claude也会有用。" }, { "i": 19, "speaker": "Speaker 1", "text": "所以像你知道的,Slack 这样的东西。" }, { "i": 20, "speaker": "Speaker 1", "text": "Asana。" }, { "i": 21, "speaker": "Speaker 1", "text": "线性。" }, { "i": 22, "speaker": "Speaker 1", "text": "Datadog。" }, { "i": 23, "speaker": "Speaker 1", "text": "BigQuery。" }, { "i": 24, "speaker": "Speaker 1", "text": "所有这些都有助于Claude为自己拼接出更丰富的上下文。" }, { "i": 25, "speaker": "Speaker 1", "text": "如果你能给予它访问这些工具的权限,它的表现将大幅提升。" }, { "i": 26, "speaker": "Speaker 1", "text": "最后,在Claude Code web上设置你的远程环境。" }, { "i": 27, "speaker": "Speaker 1", "text": "这使得运行Claude Code的计算资源被分离或解耦" }, { "i": 28, "speaker": "Speaker 1", "text": "与你的笔记本电脑分开。" }, { "i": 29, "speaker": "Speaker 1", "text": "因此你可以关闭笔记本电脑。" }, { "i": 30, "speaker": "Speaker 1", "text": "你的笔记本电脑可能会死机。" }, { "i": 31, "speaker": "Speaker 1", "text": "你可能在笔记本电脑上洒了一些水。" }, { "i": 32, "speaker": "Speaker 1", "text": "但你的Claude Code会话仍将继续,因为它们在云端运行。" }, { "i": 33, "speaker": "Speaker 1", "text": "我很想看到大家举手。" }, { "i": 34, "speaker": "Speaker 1", "text": "有多少人每天使用Claude Code?" }, { "i": 35, "speaker": "Speaker 1", "text": "这几乎是所有人。" }, { "i": 36, "speaker": "Speaker 1", "text": "有多少人已经完成了这里前两件事?" }, { "i": 37, "speaker": "Speaker 1", "text": "即使用了高质量的ClaudeMD并连接了你的工具?" }, { "i": 38, "speaker": "Speaker 1", "text": "大约50%,我认为。" }, { "i": 39, "speaker": "Speaker 1", "text": "那么有多少人已经完成了全部三件事?" }, { "i": 40, "speaker": "Speaker 1", "text": "所以如果你根本没有举手,也不要担心,你仍然可以获得一些价值" }, { "i": 41, "speaker": "Speaker 1", "text": "这次演讲的内容。" }, { "i": 42, "speaker": "Speaker 1", "text": "但我会鼓励你先从这三件事开始。" }, { "i": 43, "speaker": "Speaker 1", "text": "那么,为什么你的工具需要改变?" }, { "i": 44, "speaker": "Speaker 1", "text": "到目前为止,大多数软件工具都是以人类为中心构建的。" }, { "i": 45, "speaker": "Speaker 1", "text": "无论是代码检查工具、IDE、格式化工具、类型检查器,甚至是编译器,它们大多是" }, { "i": 46, "speaker": "Speaker 1", "text": "以使它们能够运作为目标进行编写。" }, { "i": 47, "speaker": "Speaker 1", "text": "让人类和人类团队变得更高效。" }, { "i": 48, "speaker": "Speaker 1", "text": "但现在的問題是,人類已經不再編寫我們大部分的代碼了。" }, { "i": 49, "speaker": "Speaker 1", "text": "这是智能体。" }, { "i": 50, "speaker": "Speaker 1", "text": "因此,我们必须后退一步,放大视野,重新考虑我们的工具。" }, { "i": 51, "speaker": "Speaker 1", "text": "当你这样做时,有一些好消息,也有一些坏消息。" }, { "i": 52, "speaker": "Speaker 1", "text": "好消息是,我们为自己开发的许多工具都可以直接迁移过来" }, { "i": 53, "speaker": "Speaker 1", "text": "对于智能体来说也相当不错。" }, { "i": 54, "speaker": "Speaker 1", "text": "所以像 prettier 这样的东西。" }, { "i": 55, "speaker": "Speaker 1", "text": "以及代码检查工具和符号服务器。" }, { "i": 56, "speaker": "Speaker 1", "text": "云和智能体可以非常有效地使用这些技术。" }, { "i": 57, "speaker": "Speaker 1", "text": "而且它们表现得相当不错。" }, { "i": 58, "speaker": "Speaker 1", "text": "但坏消息是,我们也存在盲点。" }, { "i": 59, "speaker": "Speaker 1", "text": "作为人类,我们对工具和工具的使用有一些假设" }, { "i": 60, "speaker": "Speaker 1", "text": "云没有的链。" }, { "i": 61, "speaker": "Speaker 1", "text": "因此,重要的是要问一个问题:智能体需要什么?" }, { "i": 62, "speaker": "Speaker 1", "text": "人类理所当然认为的你的代码库?" }, { "i": 63, "speaker": "Speaker 1", "text": "并且我希望你们在我们继续下去的时候,一直记住这个问题。" }, { "i": 64, "speaker": "Speaker 1", "text": "谈。" }, { "i": 65, "speaker": "Speaker 1", "text": "因为它在某种程度上将目标从不过多照顾智能体的角度重新定义了。" }, { "i": 66, "speaker": "Speaker 1", "text": "更清晰的方式。" }, { "i": 67, "speaker": "Speaker 1", "text": "所以这就是我们今天的路线图。" }, { "i": 68, "speaker": "Speaker 1", "text": "我们将讨论三个不同的事物,它们彼此之间是层层递进的。" }, { "i": 69, "speaker": "Speaker 1", "text": "当你把这三者结合起来时,它们会变得非常强大。" }, { "i": 70, "speaker": "Speaker 1", "text": "并为您提供一套工具,帮助您在此基础上进行构建。" }, { "i": 71, "speaker": "Speaker 1", "text": "当你把这三者结合起来时,它们会变得非常强大。" }, { "i": 72, "speaker": "Speaker 1", "text": "并为您提供一套工具,帮助您在此基础上进行构建。" }, { "i": 73, "speaker": "Speaker 1", "text": "实际上,以一种我们作为人类以前从未使用过的方式运作。" }, { "i": 74, "speaker": "Speaker 1", "text": "因此,我们将讨论验证,也就是如何教会云来检查它自己的工作。" }, { "i": 75, "speaker": "Speaker 1", "text": "一旦云能够检查自己的工作并更加可靠,我们现在就可以运行多个云。" }, { "i": 76, "speaker": "Speaker 1", "text": "同时要坚信他们会做正确的事。" }, { "i": 77, "speaker": "Speaker 1", "text": "因此,我们将讨论多云或并行处理工作的策略。" }, { "i": 78, "speaker": "Speaker 1", "text": "然后,最后,我们将以背景结束。" }, { "i": 79, "speaker": "Speaker 1", "text": "背景循环。" }, { "i": 80, "speaker": "Speaker 1", "text": "循环是一种让你完全将键盘移出热点路径的方法,这样你的键盘就" }, { "i": 81, "speaker": "Speaker 1", "text": "不再是瓶颈,云服务只是在后台持续循环运行,执行有用的任务" }, { "i": 82, "speaker": "Speaker 1", "text": "为你工作,所以我想先花一分钟左右的时间进行头脑风暴,开始验证部分" }, { "i": 83, "speaker": "Speaker 1", "text": "我希望在座的每个人都能思考一下你们最近参与开发的软件项目或功能" }, { "i": 84, "speaker": "Speaker 1", "text": "而在你开发这个功能时,你是如何检查自己的工作成果的,我所说的不仅仅是" }, { "i": 85, "speaker": "Speaker 1", "text": "你是如何检查你工作的最终输出结果的?我的意思是,你是如何对你的工作进行迭代的?" }, { "i": 86, "speaker": "Speaker 1", "text": "以一种让你确信最终会到达你预期的地方的方式" }, { "i": 87, "speaker": "Speaker 1", "text": "那么,假设你现在手边有纸和笔,我们花30秒的时间" }, { "i": 88, "speaker": "Speaker 1", "text": "如果你有笔记本电脑,可以随意记下来,如果你想把它写在笔记里的话" }, { "i": 89, "speaker": "Speaker 1", "text": "让我们花30秒一起想一想,嗯,想出一个" }, { "i": 90, "speaker": "Speaker 1", "text": "你上一个项目以及你在那里是如何验证你的工作的,好的,我看到有些打字变慢了" }, { "i": 91, "speaker": "Speaker 1", "text": "下降了,嗯,希望你已经有机会考虑一下,如果没有也没关系" }, { "i": 92, "speaker": "Speaker 1", "text": "完全正确,但我发现大多数软件工程任务都可以分解为" }, { "i": 93, "speaker": "Speaker 1", "text": "屏幕上显示的一系列步骤,其中一些是这些步骤的某种组合、顺序或子集" }, { "i": 94, "speaker": "Speaker 1", "text": "这些事情 能够使你" }, { "i": 95, "speaker": "Speaker 1", "text": "检查自己的工作并构建软件,因此你大致会从设计和编写代码开始" }, { "i": 96, "speaker": "Speaker 1", "text": "然后你通常会编写代码运行编译器类型检查器等" }, { "i": 97, "speaker": "Speaker 1", "text": "如果它们失败,你得回去再次修改代码并运行它" }, { "i": 98, "speaker": "Speaker 1", "text": "然后以循环的方式执行,这样你可能会运行你的可执行文件,不管它是docker容器还是" }, { "i": 99, "speaker": "Speaker 1", "text": "一个命令行应用程序或一个网络服务器,然后你可能会检查副作用,所以如果你在运行" }, { "i": 100, "speaker": "Speaker 1", "text": "你可能会启动浏览器,然后查看UI元素是否正确显示" }, { "i": 101, "speaker": "Speaker 1", "text": "放置呃,你甚至可以查找日志,看看是否有你正在寻找的特定日志存在" }, { "i": 102, "speaker": "Speaker 1", "text": "在你的日志中或者你可以检查数据库以查看状态是什么,以及状态是否" }, { "i": 103, "speaker": "Speaker 1", "text": "被正确地操控了,然后希望你能运行单元测试以确保你" }, { "i": 104, "speaker": "Speaker 1", "text": "没有出现任何回归,而且你的功能也没有破坏其他功能,而且而且" }, { "i": 105, "speaker": "Speaker 1", "text": "希望你同时也为正在做的所有事情添加了新的单元测试" }, { "i": 106, "speaker": "Speaker 1", "text": "正在处理。最后,你部署到预发布环境。或者,如果你真的很勇敢,你可以直接" }, { "i": 107, "speaker": "Speaker 1", "text": "直接部署到生产环境。这通常是人类验证工作和构建软件的方式。" }, { "i": 108, "speaker": "Speaker 1", "text": "有趣的是, Claude 也可以非常有效地使用同样的策略" }, { "i": 109, "speaker": "Speaker 1", "text": "也要验证自己的工作并构建软件。因此,在我们继续本次演示的其余部分时," }, { "i": 110, "speaker": "Speaker 1", "text": "思考如何以类似你的方式教 Claude 去做事情是有帮助的" }, { "i": 111, "speaker": "Speaker 1", "text": "会去执行。唯一需要的是给 Claude 提供合适的工具和指令" }, { "i": 112, "speaker": "Speaker 1", "text": "设置以使这成为可能。好的,那么我们已经讨论过验证。人类是如何进行" }, { "i": 113, "speaker": "Speaker 1", "text": "验证以及理论上Claude应该如何进行验证。但循环才是真正的问题" }, { "i": 114, "speaker": "Speaker 1", "text": "使整个流程运转起来。这可以说是本演示中最重要的一页。" }, { "i": 115, "speaker": "Speaker 1", "text": "演示。" }, { "i": 116, "speaker": "Speaker 1", "text": "所以,如果你有任何问题,请随时在聊天框中提问。我们将会" }, { "i": 117, "speaker": "Speaker 1", "text": "开始。" }, { "i": 118, "speaker": "Speaker 1", "text": "如果你还没有关注的话,现在是个不错的开始时机。一个循环" }, { "i": 119, "speaker": "Speaker 1", "text": "本质上是一个你可以为Claude完成的自主电路。并且它允许" }, { "i": 120, "speaker": "Speaker 1", "text": "Claude 在给定任务或给定的成功标准上进行 hill climb。所以,你可以这样想" }, { "i": 121, "speaker": "Speaker 1", "text": "将其视为赋予Claude访问工具以验证其自身工作并编写代码的能力。" }, { "i": 122, "speaker": "Speaker 1", "text": "而 Claude 会做的事情是它将编写一些代码。" }, { "i": 123, "speaker": "Speaker 1", "text": "它将检查是否存在故障。如果存在故障,它将调试该故障并" }, { "i": 124, "speaker": "Speaker 1", "text": "再写一些代码。然后它会不断重复这个过程,一次又一次,直到" }, { "i": 125, "speaker": "Speaker 1", "text": "它达到一个成功状态。当它最终达到成功状态时,你可以确信" }, { "i": 126, "speaker": "Speaker 1", "text": "这意味着它发送给你的公关内容质量更高,而且实际上会起作用。所以,在这个" }, { "i": 127, "speaker": "Speaker 1", "text": "屏幕上显示的图片,我最近在个人网站上遇到了一个问题," }, { "i": 128, "speaker": "Speaker 1", "text": "注册按钮停止工作了。它不起作用。" }, { "i": 129, "speaker": "Speaker 1", "text": "不行。不行。不行。不行。不行。" }, { "i": 130, "speaker": "Speaker 1", "text": "它不起作用。我告诉 Claude 的是让注册按钮正常工作。而这正是" }, { "i": 131, "speaker": "Speaker 1", "text": "大概是它做了什么。这里还有更多的步骤。但为了简洁起见,它基本上" }, { "i": 132, "speaker": "Speaker 1", "text": "开始写了一些代码。它构建了我的应用。它点击了我的注册按钮。打开了一个浏览器" }, { "i": 133, "speaker": "Speaker 1", "text": "并且发现点击注册按钮实际上并没有任何作用。它没有" }, { "i": 134, "speaker": "Speaker 1", "text": "带你去任何地方。于是,它决定读取一些日志。它发现了" }, { "i": 135, "speaker": "Speaker 1", "text": "问题是。它修复了代码。重新加载了应用。并一直这样做直到它得到" }, { "i": 136, "speaker": "Speaker 1", "text": "达到一个成功状态。最后,它提出了一份确实有效的公关方案。" }, { "i": 137, "speaker": "Speaker 1", "text": "所以,从这张幻灯片中最重要的信息是,只要有可能," }, { "i": 138, "speaker": "Speaker 1", "text": "我们现在的目标是通过给予Claude工具和指令,让它进入一个循环中" }, { "i": 139, "speaker": "Speaker 1", "text": "是让它有效运行所必需的。因此,验证有多种形式。我们已经讨论过" }, { "i": 140, "speaker": "Speaker 1", "text": "关于用户体验验证。但你可以进行后端验证。你可能想要验证你的" }, { "i": 141, "speaker": "Speaker 1", "text": "整个应用程序端到端,包括基础设施。" }, { "i": 142, "speaker": "Speaker 1", "text": "而这里的核心概念保持不变。你想要给 Claude 提供工具和指令" }, { "i": 143, "speaker": "Speaker 1", "text": "让它进入一个循环。一旦你弄清楚了这一点,这三个方面" }, { "i": 144, "speaker": "Speaker 1", "text": "各种风味会融合成一种。你不需要对指令非常具体" }, { "i": 145, "speaker": "Speaker 1", "text": "你给 Claude。只要它拥有所有正确的工具和指令,它就能够" }, { "i": 146, "speaker": "Speaker 1", "text": "验证所有这些事情。" }, { "i": 147, "speaker": "Speaker 1", "text": "所以,我们已经讨论了很多理论。我们也讨论了很多假设和术语。" }, { "i": 148, "speaker": "Speaker 1", "text": "但我想……" }, { "i": 149, "speaker": "Speaker 1", "text": "再具体一点。那么,给Claude下达指令到底意味着什么呢" }, { "i": 150, "speaker": "Speaker 1", "text": "以及让其进入循环的工具?通常来说,这归结为四件事。" }, { "i": 151, "speaker": "Speaker 1", "text": "我将从这张幻灯片中讲解前端或用户体验部分。第一件事是运行" }, { "i": 152, "speaker": "Speaker 1", "text": "你的应用程序。因此,对于前端应用程序或前端验证循环来说,这可能会" }, { "i": 153, "speaker": "Speaker 1", "text": "对应于运行你的开发服务器。所以,运行 NPM run start 或者你开发环境的其他启动命令" }, { "i": 154, "speaker": "Speaker 1", "text": "可能是服务器。" }, { "i": 155, "speaker": "Speaker 1", "text": "它只是启动了一个开发服务器。一旦开发服务器启动,你希望 Claude 实际上" }, { "i": 156, "speaker": "Speaker 1", "text": "使用网络服务器。它实现这一点的方式是通过打开一个浏览器。" }, { "i": 157, "speaker": "Speaker 1", "text": "我在这方面的个人MCP工具首选是Chrome浏览器中的Claude MCP工具。你可以访问" }, { "i": 158, "speaker": "Speaker 1", "text": "这在使用 Claude 代码时使用 slash Chrome。你也可以使用 Playwright 或者" }, { "i": 159, "speaker": "Speaker 1", "text": "还有许多其他类似浏览器控制MCP的工具,可以用来实现这一点。一旦Claude能够" }, { "i": 160, "speaker": "Speaker 1", "text": "驱动你的浏览器..." }, { "i": 161, "speaker": "Speaker 1", "text": "下一步是证明某件事有效。因此,如果它是一个修复方案,它正在发挥作用," }, { "i": 162, "speaker": "Speaker 1", "text": "你想在修复之前和修复之后都截屏,并确保它是" }, { "i": 163, "speaker": "Speaker 1", "text": "正确的状态。对吧?最后是解除阻碍。所以,如果你曾经尝试过" }, { "i": 164, "speaker": "Speaker 1", "text": "在生产应用中创建一个验证循环,你会发现很快就会出现" }, { "i": 165, "speaker": "Speaker 1", "text": "一些你遇到的阻碍。" }, { "i": 166, "speaker": "Speaker 1", "text": "而一些常见的障碍,例如认证和状态。对吧?所以,认证" }, { "i": 167, "speaker": "Speaker 1", "text": "基本上就是说,你知道,你想给 Claude 一个它可以登录的身份" }, { "i": 168, "speaker": "Speaker 1", "text": "一个网络应用程序,这样它就可以开始使用你的应用。然后state表示你" }, { "i": 169, "speaker": "Speaker 1", "text": "可能需要预先配置一些状态。例如,如果你有一个电子商务商店,你" }, { "i": 170, "speaker": "Speaker 1", "text": "可能需要为该商店填充库存,以便Claude能够使用" }, { "i": 171, "speaker": "Speaker 1", "text": "你的应用有实质意义。这其实并不新颖。事实上,在传统的软件工程中," }, { "i": 172, "speaker": "Speaker 1", "text": "当你编写端到端测试时," }, { "i": 173, "speaker": "Speaker 1", "text": "编写这些状态设置脚本是很常见的。" }, { "i": 174, "speaker": "Speaker 1", "text": "这里唯一的不同是" }, { "i": 175, "speaker": "Speaker 1", "text": "你想让 Claude 访问这些脚本" }, { "i": 176, "speaker": "Speaker 1", "text": "并且你想让它们变得动态。" }, { "i": 177, "speaker": "Speaker 1", "text": "你不想太具指导性" }, { "i": 178, "speaker": "Speaker 1", "text": "关于这些脚本在做什么。" }, { "i": 179, "speaker": "Speaker 1", "text": "这使得Claude能够完成更多种类的事情" }, { "i": 180, "speaker": "Speaker 1", "text": "比使用静态脚本所能做到的更多。" }, { "i": 181, "speaker": "Speaker 1", "text": "好的,现在我们知道验证循环是什么了。" }, { "i": 182, "speaker": "Speaker 1", "text": "我们知道如何编写一个验证循环。" }, { "i": 183, "speaker": "Speaker 1", "text": "那如何打包它呢?" }, { "i": 184, "speaker": "Speaker 1", "text": "如何将这个脚本分发给你的同事," }, { "i": 185, "speaker": "Speaker 1", "text": "分发给你的同事,甚至是将来的你自己?" }, { "i": 186, "speaker": "Speaker 1", "text": "而其中一种最好的方式就是使用技能。" }, { "i": 187, "speaker": "Speaker 1", "text": "你可以将技能看作是一种方式" }, { "i": 188, "speaker": "Speaker 1", "text": "来存储关于特定主题的任意上下文信息。" }, { "i": 189, "speaker": "Speaker 1", "text": "在这种情况下," }, { "i": 190, "speaker": "Speaker 1", "text": "这个主题恰好是一个验证循环。" }, { "i": 191, "speaker": "Speaker 1", "text": "技能的有趣之处还在于" }, { "i": 192, "speaker": "Speaker 1", "text": "你可以让它们自我改进。" }, { "i": 193, "speaker": "Speaker 1", "text": "因此,如果你在技能中加入指令" }, { "i": 194, "speaker": "Speaker 1", "text": "关于每次 Claude 遇到障碍时改进技能的指令," }, { "i": 195, "speaker": "Speaker 1", "text": "你最终将创建出这种自我记录、" }, { "i": 196, "speaker": "Speaker 1", "text": "自我改进的技能,你的团队中的每个人" }, { "i": 197, "speaker": "Speaker 1", "text": "都可以参与改进,而不仅仅是你一个人。" }, { "i": 198, "speaker": "Speaker 1", "text": "这使得它变得非常强大。" }, { "i": 199, "speaker": "Speaker 1", "text": "实际上,这就是我们进行验证的方式。" }, { "i": 200, "speaker": "Speaker 1", "text": "也在Claude Code团队工作。" }, { "i": 201, "speaker": "Speaker 1", "text": "我们只有一个验证技能," }, { "i": 202, "speaker": "Speaker 1", "text": "并且这个技能会明确地被告知要持续记录自身。" }, { "i": 203, "speaker": "Speaker 1", "text": "所以每次有人遇到阻碍时," }, { "i": 204, "speaker": "Speaker 1", "text": "这项技能会重新进入并自行编辑" }, { "i": 205, "speaker": "Speaker 1", "text": "这样下次当你或你的同事遇到同样的问题时," }, { "i": 206, "speaker": "Speaker 1", "text": "它会返回去并自行修改。因此,下次你或你的同事遇到同样的问题时," }, { "i": 207, "speaker": "Speaker 1", "text": "这不是个问题。" }, { "i": 208, "speaker": "Speaker 1", "text": "好的,接下来我们要进入一个演示。" }, { "i": 209, "speaker": "Speaker 1", "text": "但演示之前,我想先谈谈" }, { "i": 210, "speaker": "Speaker 1", "text": "我将要使用的应用程序。" }, { "i": 211, "speaker": "Speaker 1", "text": "有一种打字测试应用叫做 MonkeyType。" }, { "i": 212, "speaker": "Speaker 1", "text": "在座有多少人听说过MonkeyType?" }, { "i": 213, "speaker": "Speaker 1", "text": "好的,我这么认为。这是一个小众社区。" }, { "i": 214, "speaker": "Speaker 1", "text": "但基本上它是一个类型测试器" }, { "i": 215, "speaker": "Speaker 1", "text": "那里显示了一堆词,如你所见," }, { "i": 216, "speaker": "Speaker 1", "text": "并且你必须准确地输入这些词语" }, { "i": 217, "speaker": "Speaker 1", "text": "并且要尽可能快。" }, { "i": 218, "speaker": "Speaker 1", "text": "而且这个应用会自动为你追踪你的统计数据。" }, { "i": 219, "speaker": "Speaker 1", "text": "我喜欢这个作为演示应用,因为它具有代表性" }, { "i": 220, "speaker": "Speaker 1", "text": "一个真实世界中的全栈应用程序。" }, { "i": 221, "speaker": "Speaker 1", "text": "它是用 TypeScript 编写的,后端使用 Express" }, { "i": 222, "speaker": "Speaker 1", "text": "并使用 MongoDB 和 Redis 作为持久化层。" }, { "i": 223, "speaker": "Speaker 1", "text": "它是开源的,所以你们现在可以去 monkeytype.com。" }, { "i": 224, "speaker": "Speaker 1", "text": "你们甚至可以查看源代码。" }, { "i": 225, "speaker": "Speaker 1", "text": "但在这个演示中,我们将实时创建一个验证循环。" }, { "i": 226, "speaker": "Speaker 1", "text": "所以,我们会让 Claude 启动一个新的开发服务器。" }, { "i": 227, "speaker": "Speaker 1", "text": "我们会让它使用 Chrome MCP" }, { "i": 228, "speaker": "Speaker 1", "text": "来检查它的一些工作。" }, { "i": 229, "speaker": "Speaker 1", "text": "一旦我们创建了验证技能," }, { "i": 230, "speaker": "Speaker 1", "text": "我们还将创建一个新功能,并让 Claude" }, { "i": 231, "speaker": "Speaker 1", "text": "使用验证技能来验证自身。" }, { "i": 232, "speaker": "Speaker 1", "text": "那么,我们开始演示吧。" }, { "i": 233, "speaker": "Speaker 1", "text": "所以我们可以切换到我的笔记本电脑屏幕。" }, { "i": 234, "speaker": "Speaker 1", "text": "好的,这是一个全新的 Claude Coyle 应用程序。" }, { "i": 235, "speaker": "Speaker 1", "text": "这是 Cloud Cloud 应用程序的新版本。" }, { "i": 236, "speaker": "Speaker 1", "text": "这是 Cloud Cloud 应用程序的新版本。" }, { "i": 237, "speaker": "Speaker 1", "text": "这是 Cloud Cloud 应用程序的新版本。" }, { "i": 238, "speaker": "Speaker 1", "text": "这是 Cloud Cloud 会话的新版本。" }, { "i": 239, "speaker": "Speaker 1", "text": "我已经完成了在本地设置 monkeytype 的工作。" }, { "i": 240, "speaker": "Speaker 1", "text": "我还安装了一些依赖项,并整理了一个CloudMD" }, { "i": 241, "speaker": "Speaker 1", "text": "因为我不想在你们面前做这些事情" }, { "i": 242, "speaker": "Speaker 1", "text": "以免浪费你们的时间。" }, { "i": 243, "speaker": "Speaker 1", "text": "所以让我们告诉Claude启动开发服务器。" }, { "i": 244, "speaker": "Speaker 1", "text": "好的,它显示开发服务器已经在运行了。" }, { "i": 245, "speaker": "Speaker 1", "text": "这是正确的,因为我在我们谈话之前刚刚启动了它。" }, { "i": 246, "speaker": "Speaker 1", "text": "现在让我们去看看前端有什么内容。" }, { "i": 247, "speaker": "Speaker 1", "text": "如果我们去这里,monkeytype," }, { "i": 248, "speaker": "Speaker 1", "text": "它就会打开,我可以开始打字," }, { "i": 249, "speaker": "Speaker 1", "text": "然后会出现一个小计时器。" }, { "i": 250, "speaker": "Speaker 1", "text": "我的打字能力不是很好," }, { "i": 251, "speaker": "Speaker 1", "text": "所以这里有很多拼写错误," }, { "i": 252, "speaker": "Speaker 1", "text": "但基本上这就是我所预期的。" }, { "i": 253, "speaker": "Speaker 1", "text": "我们再来看看后端链接。" }, { "i": 254, "speaker": "Speaker 1", "text": "这仅仅返回一个JSON," }, { "i": 255, "speaker": "Speaker 1", "text": "它基本上意味着后端" }, { "i": 256, "speaker": "Speaker 1", "text": "正在运行,这是好的。" }, { "i": 257, "speaker": "Speaker 1", "text": "接下来我要做的事情是确保" }, { "i": 258, "speaker": "Speaker 1", "text": "我的Chrome MCP是" }, { "i": 259, "speaker": "Speaker 1", "text": "已启用的。" }, { "i": 260, "speaker": "Speaker 1", "text": "实现方法就是使用斜杠命令打开Chrome。" }, { "i": 261, "speaker": "Speaker 1", "text": "如你所见,这里显示状态已启用," }, { "i": 262, "speaker": "Speaker 1", "text": "扩展程序已安装,这正是我们想要看到的。" }, { "i": 263, "speaker": "Speaker 1", "text": "如果你尚未安装," }, { "i": 264, "speaker": "Speaker 1", "text": "它会引导你进入另一个设置指南" }, { "i": 265, "speaker": "Speaker 1", "text": "你可以自行安装。" }, { "i": 266, "speaker": "Speaker 1", "text": "现在我要说,使用Chrome MCP" }, { "i": 267, "speaker": "Speaker 1", "text": "来确保前端正常运行。" }, { "i": 268, "speaker": "Speaker 1", "text": "请尽快完成。" }, { "i": 269, "speaker": "Speaker 1", "text": "现在我们应该看到的是," }, { "i": 270, "speaker": "Speaker 1", "text": "这是Cloud正在使用的标签页," }, { "i": 271, "speaker": "Speaker 1", "text": "它应该调用Chrome MCP工具。" }, { "i": 272, "speaker": "Speaker 1", "text": "所以如果你回到这里," }, { "i": 273, "speaker": "Speaker 1", "text": "我们可以看到两次Chrome MCP工具调用。" }, { "i": 274, "speaker": "Speaker 1", "text": "我可以打开O并查看它具体做了什么。" }, { "i": 275, "speaker": "Speaker 1", "text": "所以它导航到了localhost 3000," }, { "i": 276, "speaker": "Speaker 1", "text": "然后它查看标签页的内容," }, { "i": 277, "speaker": "Speaker 1", "text": "这很棒。" }, { "i": 278, "speaker": "Speaker 1", "text": "但我们想做些更令人兴奋的事情。" }, { "i": 279, "speaker": "Speaker 1", "text": "仅仅观察初创公司,我们想做些更令人兴奋的事情。仅仅观察初创公司,我们想做些更令人兴奋的事情。仅仅观察初创公司," }, { "i": 280, "speaker": "Speaker 1", "text": "静态网页不是很实用。" }, { "i": 281, "speaker": "Speaker 1", "text": "那么,假设你能" }, { "i": 282, "speaker": "Speaker 1", "text": "不过,在我这么做之前" }, { "i": 283, "speaker": "Speaker 1", "text": "我要调整一下这些" }, { "i": 284, "speaker": "Speaker 1", "text": "这样你们就能看到后台发生了什么。" }, { "i": 285, "speaker": "Speaker 1", "text": "你能试着输入文字并确保一切正常吗?" }, { "i": 286, "speaker": "Speaker 1", "text": "所以,Cloud显然在打字方面也不太擅长," }, { "i": 287, "speaker": "Speaker 1", "text": "但它输入了一些内容,并显示打字功能是正常的。" }, { "i": 288, "speaker": "Speaker 1", "text": "这很好。" }, { "i": 289, "speaker": "Speaker 1", "text": "我们再做一件事。" }, { "i": 290, "speaker": "Speaker 1", "text": "比如说,你能使用设置并更改一些东西吗?" }, { "i": 291, "speaker": "Speaker 1", "text": "好的,它导航到了设置页面," }, { "i": 292, "speaker": "Speaker 1", "text": "并把难度改成了专家级别。" }, { "i": 293, "speaker": "Speaker 1", "text": "根据它的表现,这并不是个好主意。" }, { "i": 294, "speaker": "Speaker 1", "text": "好的,它声称设置已经保存下来了," }, { "i": 295, "speaker": "Speaker 1", "text": "并且能够验证这一点。" }, { "i": 296, "speaker": "Speaker 1", "text": "这很好。" }, { "i": 297, "speaker": "Speaker 1", "text": "到目前为止,我们所做的只是牵着Claude的手" }, { "i": 298, "speaker": "Speaker 1", "text": "并告诉它要做什么。" }, { "i": 299, "speaker": "Speaker 1", "text": "所以我们就像,启动开发服务器," }, { "i": 300, "speaker": "Speaker 1", "text": "去完成我们关心的这两三件事。" }, { "i": 301, "speaker": "Speaker 1", "text": "而这基本上就是验证,对吧?" }, { "i": 302, "speaker": "Speaker 1", "text": "接下来我可以告诉 Claude" }, { "i": 303, "speaker": "Speaker 1", "text": "将本节的所有学习成果加以运用" }, { "i": 304, "speaker": "Speaker 1", "text": "并将其放入技能文件中。" }, { "i": 305, "speaker": "Speaker 1", "text": "所以,我可以这样说,把我们学到的一切都带走" }, { "i": 306, "speaker": "Speaker 1", "text": "并将其放入 Claude 顶部的技能文件中" }, { "i": 307, "speaker": "Speaker 1", "text": "演示验证。" }, { "i": 308, "speaker": "Speaker 1", "text": "我不需要给出完整的路径,但我还是这么做了。" }, { "i": 309, "speaker": "Speaker 1", "text": "好的,我们来看看。" }, { "i": 310, "speaker": "Speaker 1", "text": "它想要创建一个新目录。" }, { "i": 311, "speaker": "Speaker 1", "text": "好的,现在它正在编写一个相当大的skill.md文件" }, { "i": 312, "speaker": "Speaker 1", "text": "文件。" }, { "i": 313, "speaker": "Speaker 1", "text": "而且如果你看一下这个文件里面的内容," }, { "i": 314, "speaker": "Speaker 1", "text": "我们只是快速浏览一下。" }, { "i": 315, "speaker": "Speaker 1", "text": "它说,第一,搭建堆栈,也就是" }, { "i": 316, "speaker": "Speaker 1", "text": "基本上就是我们所做的。" }, { "i": 317, "speaker": "Speaker 1", "text": "它有一些命令可以做到这一点。" }, { "i": 318, "speaker": "Speaker 1", "text": "所以它有 Docker Compose, blah,blah。" }, { "i": 319, "speaker": "Speaker 1", "text": "然后它会加载 Chrome MCP 工具," }, { "i": 320, "speaker": "Speaker 1", "text": "因为这就是我们告诉它下一步要做的事情。" }, { "i": 321, "speaker": "Speaker 1", "text": "最后还有一个烟雾测试" }, { "i": 322, "speaker": "Speaker 1", "text": "它正在使用浏览器工具" }, { "i": 323, "speaker": "Speaker 1", "text": "实际上检查它自己的工作。" }, { "i": 324, "speaker": "Speaker 1", "text": "那么我将直接说,是的。" }, { "i": 325, "speaker": "Speaker 1", "text": "很好。" }, { "i": 326, "speaker": "Speaker 1", "text": "所以这看起来一定相当简单,而且确实如此。" }, { "i": 327, "speaker": "Speaker 1", "text": "创建一个验证循环很简单。" }, { "i": 328, "speaker": "Speaker 1", "text": "在过程中出现了一些阻碍" }, { "i": 329, "speaker": "Speaker 1", "text": "当我设置这个演示的时候。" }, { "i": 330, "speaker": "Speaker 1", "text": "我们现在不需要谈论这些," }, { "i": 331, "speaker": "Speaker 1", "text": "但如果你自己来做的话,我确信你会做到的," }, { "i": 332, "speaker": "Speaker 1", "text": "你可能可以在五到十天内让这个运行起来" }, { "i": 333, "speaker": "Speaker 1", "text": "分钟。" }, { "i": 334, "speaker": "Speaker 1", "text": "接下来我要做的事情是,因为Claude和我都是" }, { "i": 335, "speaker": "Speaker 1", "text": "打字不好,我要告诉 Claude" }, { "i": 336, "speaker": "Speaker 1", "text": "每次我打错字时,都制作一个彩纸动画," }, { "i": 337, "speaker": "Speaker 1", "text": "然后使用我们刚刚创建的验证技能" }, { "i": 338, "speaker": "Speaker 1", "text": "来验证它自己的工作。" }, { "i": 339, "speaker": "Speaker 1", "text": "那么假设每次我打错字的时候,请你提醒我。" }, { "i": 340, "speaker": "Speaker 1", "text": "让我展示一个彩带动画," }, { "i": 341, "speaker": "Speaker 1", "text": "并使用我们刚刚创建的技能来验证我们的工作。" }, { "i": 342, "speaker": "Speaker 1", "text": "所以它将开始工作,找出" }, { "i": 343, "speaker": "Speaker 1", "text": "在哪里编写这段代码,然后希望今晚演示之神" }, { "i": 344, "speaker": "Speaker 1", "text": "会与我们同在。" }, { "i": 345, "speaker": "Speaker 1", "text": "所以它想要编写一些文件。" }, { "i": 346, "speaker": "Speaker 1", "text": "我将开启自动模式,这样它就不需要" }, { "i": 347, "speaker": "Speaker 1", "text": "为每个文件编辑都问我。" }, { "i": 348, "speaker": "Speaker 1", "text": "好的。" }, { "i": 349, "speaker": "Speaker 1", "text": "这很有趣。" }, { "i": 350, "speaker": "Speaker 1", "text": "所以它创建了这个功能,然后它" }, { "i": 351, "speaker": "Speaker 1", "text": "意识到有一些代码规范错误。" }, { "i": 352, "speaker": "Speaker 1", "text": "所以你看,这里也有一些OX代码规范错误。" }, { "i": 353, "speaker": "Speaker 1", "text": "然后它继续修复这些错误," }, { "i": 354, "speaker": "Speaker 1", "text": "接着它再次进行验证。" }, { "i": 355, "speaker": "Speaker 1", "text": "所以你现在可以看到验证循环在起作用," }, { "i": 356, "speaker": "Speaker 1", "text": "它编写了一些代码。" }, { "i": 357, "speaker": "Speaker 1", "text": "它遇到了一些问题。" }, { "i": 358, "speaker": "Speaker 1", "text": "它通过编写更多代码来修复这些问题," }, { "i": 359, "speaker": "Speaker 1", "text": "然后它就这样反复循环进行下去" }, { "i": 360, "speaker": "Speaker 1", "text": "直到它进入一个良好的状态。" }, { "i": 361, "speaker": "Speaker 1", "text": "所以我们也亲自测试一下。" }, { "i": 362, "speaker": "Speaker 1", "text": "好的,它还在做些什么。" }, { "i": 363, "speaker": "Speaker 1", "text": "让我们让它停下来。" }, { "i": 364, "speaker": "Speaker 1", "text": "好的,我们确实看到了彩带出现。" }, { "i": 365, "speaker": "Speaker 1", "text": "它把我们带到了专家模式,也就是" }, { "i": 366, "speaker": "Speaker 1", "text": "为什么它一直在我这里消失。" }, { "i": 367, "speaker": "Speaker 1", "text": "但总的来说,Claude 能够完成任务。" }, { "i": 368, "speaker": "Speaker 1", "text": "并修复了它自己的代码格式错误。" }, { "i": 369, "speaker": "Speaker 1", "text": "我们时间快不够了,所以我不会让它完成。" }, { "i": 370, "speaker": "Speaker 1", "text": "但希望这能给你一个味道" }, { "i": 371, "speaker": "Speaker 1", "text": "验证循环可以有多强大" }, { "i": 372, "speaker": "Speaker 1", "text": "以及 Claude 如何在任务上持续改进" }, { "i": 373, "speaker": "Speaker 1", "text": "只要你给它正确的指令和工具。" }, { "i": 374, "speaker": "Speaker 1", "text": "现在我们切换回幻灯片。" }, { "i": 375, "speaker": "Speaker 1", "text": "这里的关键要点是,你应该尽量牵着 Claude 的手" }, { "i": 376, "speaker": "Speaker 1", "text": "并展示它。" }, { "i": 377, "speaker": "Speaker 1", "text": "教它如何进行验证。" }, { "i": 378, "speaker": "Speaker 1", "text": "一旦你教会了它如何进行验证," }, { "i": 379, "speaker": "Speaker 1", "text": "它就能很容易地总结这些学习成果。" }, { "i": 380, "speaker": "Speaker 1", "text": "转换为一个技能文件,然后你可以" }, { "i": 381, "speaker": "Speaker 1", "text": "打包并分发给未来的你" }, { "i": 382, "speaker": "Speaker 1", "text": "以及你的队友。" }, { "i": 383, "speaker": "Speaker 1", "text": "好的,那么现在我们已经掌握了验证方法," }, { "i": 384, "speaker": "Speaker 1", "text": "我们可以升级到多云或并行处理" }, { "i": 385, "speaker": "Speaker 1", "text": "更有效地开展我们的工作。" }, { "i": 386, "speaker": "Speaker 1", "text": "但出现的问题是" }, { "i": 387, "speaker": "Speaker 1", "text": "你同时运行太多的Claude实例" }, { "i": 388, "speaker": "Speaker 1", "text": "这是因为它们都会消耗你的注意力。" }, { "i": 389, "speaker": "Speaker 1", "text": "而且你的注意力是一种稀缺资源。" }, { "i": 390, "speaker": "Speaker 1", "text": "我个人觉得超过四到五场会议" }, { "i": 391, "speaker": "Speaker 1", "text": "同时开启会给我的大脑带来很大的负担。" }, { "i": 392, "speaker": "Speaker 1", "text": "而且我无法在此基础上进一步运作。" }, { "i": 393, "speaker": "Speaker 1", "text": "那么,我们有哪些方法可以扩大规模?" }, { "i": 394, "speaker": "Speaker 1", "text": "那么,我们有哪些策略可以使用呢" }, { "i": 395, "speaker": "Speaker 1", "text": "更有效地迁移到多云环境?" }, { "i": 396, "speaker": "Speaker 1", "text": "那么,我们今天将讨论四个话题。" }, { "i": 397, "speaker": "Speaker 1", "text": "有 Claude Code 桌面应用,它为你提供一个图形用户界面" }, { "i": 398, "speaker": "Speaker 1", "text": "并使管理多个会话变得更加容易。" }, { "i": 399, "speaker": "Speaker 1", "text": "存在智能体视角。" }, { "i": 400, "speaker": "Speaker 1", "text": "所以如果你喜欢终端,就像我一样," }, { "i": 401, "speaker": "Speaker 1", "text": "并且你想要留在终端中," }, { "i": 402, "speaker": "Speaker 1", "text": "然后我们有 Claude 智能体为您提供" }, { "i": 403, "speaker": "Speaker 1", "text": "与桌面应用的一些相同优势" }, { "i": 404, "speaker": "Speaker 1", "text": "在终端内。" }, { "i": 405, "speaker": "Speaker 1", "text": "你也可以运行 Claude。" }, { "i": 406, "speaker": "Speaker 1", "text": "云上的 Claude。" }, { "i": 407, "speaker": "Speaker 1", "text": "所以如果你在我们的网站上运行它,Claude" }, { "i": 408, "speaker": "Speaker 1", "text": "现在是在我们的云中运行,而不是在你的笔记本电脑上。" }, { "i": 409, "speaker": "Speaker 1", "text": "最后还有遥控功能," }, { "i": 410, "speaker": "Speaker 1", "text": "这是我最喜欢的功能。" }, { "i": 411, "speaker": "Speaker 1", "text": "我们到时候再详细讨论这个。" }, { "i": 412, "speaker": "Speaker 1", "text": "所以这是桌面应用的截图。" }, { "i": 413, "speaker": "Speaker 1", "text": "在左边,你有一个侧边栏。" }, { "i": 414, "speaker": "Speaker 1", "text": "并且侧边栏会显示您在所有界面上的所有会话。" }, { "i": 415, "speaker": "Speaker 1", "text": "所以它有在本地运行的会话" }, { "i": 416, "speaker": "Speaker 1", "text": "在终端中。" }, { "i": 417, "speaker": "Speaker 1", "text": "它在云端运行着你的会话。" }, { "i": 418, "speaker": "Speaker 1", "text": "它会在所有 Git 仓库中运行你的会话。" }, { "i": 419, "speaker": "Speaker 1", "text": "因此,它就变成了中央控制" }, { "i": 420, "speaker": "Speaker 1", "text": "用于与Claude进行协作和管理会话的界面。" }, { "i": 421, "speaker": "Speaker 1", "text": "您还可以将会话固定。" }, { "i": 422, "speaker": "Speaker 1", "text": "您可以重命名会话。" }, { "i": 423, "speaker": "Speaker 1", "text": "您可以为会话设置不同的颜色。" }, { "i": 424, "speaker": "Speaker 1", "text": "所有这些功能实际上" }, { "i": 425, "speaker": "Speaker 1", "text": "都是在解决吸引您注意力的问题。" }, { "i": 426, "speaker": "Speaker 1", "text": "如果您将一个会话重命名为一个" }, { "i": 427, "speaker": "Speaker 1", "text": "对您来说容易记住的名称,当您再次查看它时," }, { "i": 428, "speaker": "Speaker 1", "text": "您就会知道这个会话当时在做什么。" }, { "i": 429, "speaker": "Speaker 1", "text": "因此,这些都是帮助您" }, { "i": 430, "speaker": "Speaker 1", "text": "更好地集中注意力、保护注意力的方法。" }, { "i": 431, "speaker": "Speaker 1", "text": "如果您喜欢终端,这曾经" }, { "i": 432, "speaker": "Speaker 1", "text": "就是您进行多会话操作的方式。" }, { "i": 433, "speaker": "Speaker 1", "text": "这是我过去进行多会话操作的设置方式。" }, { "i": 434, "speaker": "Speaker 1", "text": "我过去使用Tmux窗口管理器,有四个面板。" }, { "i": 435, "speaker": "Speaker 1", "text": "每个面板都会处理不同的工作树。" }, { "i": 436, "speaker": "Speaker 1", "text": "这确实有效,但管理起来确实有点复杂。" }, { "i": 437, "speaker": "Speaker 1", "text": "在座有多少人知道Tmux是什么?" }, { "i": 438, "speaker": "Speaker 1", "text": "好的,很棒。" }, { "i": 439, "speaker": "Speaker 1", "text": "看来有很多人知道。" }, { "i": 440, "speaker": "Speaker 1", "text": "那么在座的谁知道什么是工作树?" }, { "i": 441, "speaker": "Speaker 1", "text": "很好,大约50%。" }, { "i": 442, "speaker": "Speaker 1", "text": "所以你必须自己在 Tmux 中管理工作树。" }, { "i": 443, "speaker": "Speaker 1", "text": "这有效,我想我现在已经习惯了。" }, { "i": 444, "speaker": "Speaker 1", "text": "但这也并不是最方便的事情。" }, { "i": 445, "speaker": "Speaker 1", "text": "我们可以做得更好。" }, { "i": 446, "speaker": "Speaker 1", "text": "而我们最终得出的是Claude智能体。" }, { "i": 447, "speaker": "Speaker 1", "text": "这是我们在大约一周前发布的一个功能," }, { "i": 448, "speaker": "Speaker 1", "text": "可能有一点" }, { "i": 449, "speaker": "Speaker 1", "text": "超过一周。" }, { "i": 450, "speaker": "Speaker 1", "text": "而你访问它的方法就是,比如说," }, { "i": 451, "speaker": "Speaker 1", "text": "使用 Claude 智能体而不是 Claude。" }, { "i": 452, "speaker": "Speaker 1", "text": "并且它打开了这个视角,即" }, { "i": 453, "speaker": "Speaker 1", "text": "与我们之前看到的桌面侧边栏非常相似。" }, { "i": 454, "speaker": "Speaker 1", "text": "并且这个视图会列出你所有的会话" }, { "i": 455, "speaker": "Speaker 1", "text": "这些是在你的本地计算机上运行的。" }, { "i": 456, "speaker": "Speaker 1", "text": "它还会根据注意力的程度对它们进行排序" }, { "i": 457, "speaker": "Speaker 1", "text": "它们需要的。" }, { "i": 458, "speaker": "Speaker 1", "text": "所以如果一个会话需要你立即关注," }, { "i": 459, "speaker": "Speaker 1", "text": "如果它被阻塞在权限提示上" }, { "i": 460, "speaker": "Speaker 1", "text": "或者是一个问题,或者需要你提供的一些输入," }, { "i": 461, "speaker": "Speaker 1", "text": "它会直接显示在最上方。" }, { "i": 462, "speaker": "Speaker 1", "text": "如果一个会话正在运行,或者一个会话已经完成了" }, { "i": 463, "speaker": "Speaker 1", "text": "其期望的成功状态,它会显示得更靠下。" }, { "i": 464, "speaker": "Speaker 1", "text": "你也可以自定义它。" }, { "i": 465, "speaker": "Speaker 1", "text": "所以你可以再次,将会话固定。" }, { "i": 466, "speaker": "Speaker 1", "text": "你可以重命名会话。" }, { "i": 467, "speaker": "Speaker 1", "text": "你可以重新排序它们。" }, { "i": 468, "speaker": "Speaker 1", "text": "同样,这是一种管理你工作量" }, { "i": 469, "speaker": "Speaker 1", "text": "并更好地管理你注意力的方法。" }, { "i": 470, "speaker": "Speaker 1", "text": "Web 上的 Cloud Code。" }, { "i": 471, "speaker": "Speaker 1", "text": "我们之前稍微提到了这一点,但这里的主旨是" }, { "i": 472, "speaker": "Speaker 1", "text": "如何将你的笔记本电脑与 Cloud Code" }, { "i": 473, "speaker": "Speaker 1", "text": "会话解耦?" }, { "i": 474, "speaker": "Speaker 1", "text": "我发现当我在" }, { "i": 475, "speaker": "Speaker 1", "text": "会议之间来回走动时," }, { "i": 476, "speaker": "Speaker 1", "text": "我必须打开笔记本电脑,四处走动" }, { "i": 477, "speaker": "Speaker 1", "text": "就像这样,这让我很烦。" }, { "i": 478, "speaker": "Speaker 1", "text": "当我开车回家时,我也" }, { "i": 479, "speaker": "Speaker 1", "text": "感到烦恼,因为没有网络," }, { "i": 480, "speaker": "Speaker 1", "text": "而且我不能把笔记本电脑留在车里开着。" }, { "i": 481, "speaker": "Speaker 1", "text": "所以让您的会话在云端运行" }, { "i": 482, "speaker": "Speaker 1", "text": "真的很棒。" }, { "i": 483, "speaker": "Speaker 1", "text": "你不用担心计算能力" }, { "i": 484, "speaker": "Speaker 1", "text": "它实际上是在其上运行的。" }, { "i": 485, "speaker": "Speaker 1", "text": "而且如果你还没有尝试过 Web 上的 Cloud Code," }, { "i": 486, "speaker": "Speaker 1", "text": "直接去 Cloud AI 斜杠 code,然后就是" }, { "i": 487, "speaker": "Speaker 1", "text": "入门相当容易。" }, { "i": 488, "speaker": "Speaker 1", "text": "最后,遥控。" }, { "i": 489, "speaker": "Speaker 1", "text": "正如我之前所说,这是我的最爱功能。" }, { "i": 490, "speaker": "Speaker 1", "text": "而且远程控制基本上给你" }, { "i": 491, "speaker": "Speaker 1", "text": "控制任何正在运行的会话的选项" }, { "i": 492, "speaker": "Speaker 1", "text": "用手机在任何表面上。" }, { "i": 493, "speaker": "Speaker 1", "text": "开始使用远程控制的方法是,你只需要" }, { "i": 494, "speaker": "Speaker 1", "text": "去运行你Cloud Code会话的任何地方" }, { "i": 495, "speaker": "Speaker 1", "text": "然后说斜杠远程控制。" }, { "i": 496, "speaker": "Speaker 1", "text": "一旦你完成这一步,它就会出现在你的手机应用上。" }, { "i": 497, "speaker": "Speaker 1", "text": "它还会向你发送通知。" }, { "i": 498, "speaker": "Speaker 1", "text": "所以如果Cloud需要你的帮助或需要你的意见," }, { "i": 499, "speaker": "Speaker 1", "text": "你的手机会震动,而你可能正在开车," }, { "i": 500, "speaker": "Speaker 1", "text": "你可以做任何你想做的事情," }, { "i": 501, "speaker": "Speaker 1", "text": "你可以直接给云提供它所需的输入。" }, { "i": 502, "speaker": "Speaker 1", "text": "我时间快不够了,所以我是" }, { "i": 503, "speaker": "Speaker 1", "text": "不幸的是,将跳过这个演示。" }, { "i": 504, "speaker": "Speaker 1", "text": "但我想给你展示一下云智能体" }, { "i": 505, "speaker": "Speaker 1", "text": "作为这个演示的一部分。" }, { "i": 506, "speaker": "Speaker 1", "text": "所以,如果你还没有尝试过Cloud Agents的话," }, { "i": 507, "speaker": "Speaker 1", "text": "试试看。" }, { "i": 508, "speaker": "Speaker 1", "text": "好的。" }, { "i": 509, "speaker": "Speaker 1", "text": "所以我们已经讨论过如何让云服务更加可靠" }, { "i": 510, "speaker": "Speaker 1", "text": "通过赋予它验证自己工作的技能来实现。" }, { "i": 511, "speaker": "Speaker 1", "text": "我们还讨论过如何更好地实现多云" }, { "i": 512, "speaker": "Speaker 1", "text": "有效地。" }, { "i": 513, "speaker": "Speaker 1", "text": "但即使这样也并不完全令人满意。" }, { "i": 514, "speaker": "Speaker 1", "text": "你仍然需要实际启动一个新会话。" }, { "i": 515, "speaker": "Speaker 1", "text": "你必须有一个明确的目标。" }, { "i": 516, "speaker": "Speaker 1", "text": "无论是在桌面应用程序、终端还是网页上," }, { "i": 517, "speaker": "Speaker 1", "text": "你必须去启动一个新的会话。" }, { "i": 518, "speaker": "Speaker 1", "text": "你如何将自己移除?" }, { "i": 519, "speaker": "Speaker 1", "text": "你如何让自己更进一步地脱离这个循环?" }, { "i": 520, "speaker": "Speaker 1", "text": "而这正是下一环节要讨论的内容。" }, { "i": 521, "speaker": "Speaker 1", "text": "所以作为软件工程师,我们有很多不同的任务。" }, { "i": 522, "speaker": "Speaker 1", "text": "并不是所有这些任务都是编写代码" }, { "i": 523, "speaker": "Speaker 1", "text": "针对你正在开发的某个新功能或某个错误。" }, { "i": 524, "speaker": "Speaker 1", "text": "在某种程度上,很多事情只是记账而已。" }, { "i": 525, "speaker": "Speaker 1", "text": "所以,我个人正在花费大量时间" }, { "i": 526, "speaker": "Speaker 1", "text": "现在在照看我的PR。" }, { "i": 527, "speaker": "Speaker 1", "text": "我认为我们现在能够生成内容,因此我们所有人都有了更多的公关内容" }, { "i": 528, "speaker": "Speaker 1", "text": "云计算和人工智能。" }, { "i": 529, "speaker": "Speaker 1", "text": "而且这些PR需要合并。" }, { "i": 530, "speaker": "Speaker 1", "text": "但合并之前,你需要先通过审查评论。" }, { "i": 531, "speaker": "Speaker 1", "text": "你需要解决合并冲突。" }, { "i": 532, "speaker": "Speaker 1", "text": "你需要解决CI失败的问题。" }, { "i": 533, "speaker": "Speaker 1", "text": "有很多事情在发生。" }, { "i": 534, "speaker": "Speaker 1", "text": "如果你有20个或30个这样的PR" }, { "i": 535, "speaker": "Speaker 1", "text": "你试图在一天内合并,你" }, { "i": 536, "speaker": "Speaker 1", "text": "很容易就会花上好几个小时来照顾这些。" }, { "i": 537, "speaker": "Speaker 1", "text": "更新文档是另一个不错的选择。" }, { "i": 538, "speaker": "Speaker 1", "text": "我认为,随着我们加快功能发布的速度" }, { "i": 539, "speaker": "Speaker 1", "text": "并且部署修复程序,我们也需要跟上文档的更新。" }, { "i": 540, "speaker": "Speaker 1", "text": "同样,进行分类处理、监控反馈," }, { "i": 541, "speaker": "Speaker 1", "text": "总的来说,保持CI绿色。" }, { "i": 542, "speaker": "Speaker 1", "text": "这些都是你每天需要做的事情。" }, { "i": 543, "speaker": "Speaker 1", "text": "但它们不一定需要你参与其中。" }, { "i": 544, "speaker": "Speaker 1", "text": "它们只需要以某种循环方式运行。" }, { "i": 545, "speaker": "Speaker 1", "text": "而这就是斜杠循环命令发挥作用的地方。" }, { "i": 546, "speaker": "Speaker 1", "text": "所以 slash loop 是运行提示的一种方式" }, { "i": 547, "speaker": "Speaker 1", "text": "在 Cloud Code 的特定时间间隔内。" }, { "i": 548, "speaker": "Speaker 1", "text": "所以你可以这样说," }, { "i": 549, "speaker": "Speaker 1", "text": "花10分钟处理一下,然后照看一下我未完成的PR。" }, { "i": 550, "speaker": "Speaker 1", "text": "而这就将导致会议" }, { "i": 551, "speaker": "Speaker 1", "text": "正在运行这个斜杠命令" }, { "i": 552, "speaker": "Speaker 1", "text": "每10分钟就会唤醒一次。" }, { "i": 553, "speaker": "Speaker 1", "text": "它将运行这个提示。" }, { "i": 554, "speaker": "Speaker 1", "text": "而且如果你已经定义并设置了你的Cloud MDs和工具" }, { "i": 555, "speaker": "Speaker 1", "text": "设置正确的话,它将能够弄清楚" }, { "i": 556, "speaker": "Speaker 1", "text": "自行处理。" }, { "i": 557, "speaker": "Speaker 1", "text": "所以你其实不需要一直盯着和监控" }, { "i": 558, "speaker": "Speaker 1", "text": "你手动处理PR。" }, { "i": 559, "speaker": "Speaker 1", "text": "惯例。" }, { "i": 560, "speaker": "Speaker 1", "text": "例程基本上是 slash loop,但它是远程运行的。" }, { "i": 561, "speaker": "Speaker 1", "text": "所以我们之前在网页上讨论过Cloud Code" }, { "i": 562, "speaker": "Speaker 1", "text": "以及它如何使用远程容器来运行您的会话。" }, { "i": 563, "speaker": "Speaker 1", "text": "例程在相同的容器中运行和工作。" }, { "i": 564, "speaker": "Speaker 1", "text": "设置例程的方法是通过访问网页应用" }, { "i": 565, "speaker": "Speaker 1", "text": "或者桌面应用。" }, { "i": 566, "speaker": "Speaker 1", "text": "你会看到一个名为“小例程”的标签。" }, { "i": 567, "speaker": "Speaker 1", "text": "而且你可以非常轻松地设置一个新的例行程序。" }, { "i": 568, "speaker": "Speaker 1", "text": "你可以设置基于时间的触发器" }, { "i": 569, "speaker": "Speaker 1", "text": "或者你可以有一个基于事件的触发器。" }, { "i": 570, "speaker": "Speaker 1", "text": "而且这两种触发因素都可能导致,你知道的," }, { "i": 571, "speaker": "Speaker 1", "text": "你可以非常轻松地设置一个新的例行程序。" }, { "i": 572, "speaker": "Speaker 1", "text": "你可以使用基于时间的触发器,也可以使用基于事件的触发器。" }, { "i": 573, "speaker": "Speaker 1", "text": "而这两个触发器都可能导致一个新的Cloud Code会话" }, { "i": 574, "speaker": "Speaker 1", "text": "以指定的提示语开始。" }, { "i": 575, "speaker": "Speaker 1", "text": "例如,我们有一个例行程序用于更新我们的文档" }, { "i": 576, "speaker": "Speaker 1", "text": "Cloud Code 团队每天都在进行。" }, { "i": 577, "speaker": "Speaker 1", "text": "我们还有一个例行程序会查看我们的问题和反馈" }, { "i": 578, "speaker": "Speaker 1", "text": "这些内容会进入我们的 Slack 频道并发布" }, { "i": 579, "speaker": "Speaker 1", "text": "每六个小时。" }, { "i": 580, "speaker": "Speaker 1", "text": "因此,这可以非常有用,用于处理一些例行任务" }, { "i": 581, "speaker": "Speaker 1", "text": "这些任务并不一定需要你亲自参与。" }, { "i": 582, "speaker": "Speaker 1", "text": "很酷。" }, { "i": 583, "speaker": "Speaker 1", "text": "一旦你将这三项技能全部整合在一起," }, { "i": 584, "speaker": "Speaker 1", "text": "你就会得到这样一个系统," }, { "i": 585, "speaker": "Speaker 1", "text": "这个系统能够完成很多工作" }, { "i": 586, "speaker": "Speaker 1", "text": "即使你不需要手动在键盘上操作。" }, { "i": 587, "speaker": "Speaker 1", "text": "而这正是最终的目标," }, { "i": 588, "speaker": "Speaker 1", "text": "即你可以将你的注意力和时间" }, { "i": 589, "speaker": "Speaker 1", "text": "投入到你真正关心的任务上" }, { "i": 590, "speaker": "Speaker 1", "text": "而其他所有事情都可以委托给云平台" }, { "i": 591, "speaker": "Speaker 1", "text": "并且具有很高的可靠性和高度的信心。" }, { "i": 592, "speaker": "Speaker 1", "text": "很酷。这就是我今天要讲的全部内容。" }, { "i": 593, "speaker": "Speaker 1", "text": "这就是我今天要给你们讲的全部内容。非常感谢,希望你们喜欢这次演讲。" } ]