音乐声起。

好的,这里有一个问题。

嘿。你们如何看待 CI/CD 与代理的关系?嗯……啊,这是个很好的问题。呃,我们有一个叫做 Anthropic CLI 的工具,它基本上是一个封装了我们 API 的命令行界面(CLI),用于发起调用。它允许你执行类似 Terraform 的操作,即通过传入 YAML 文件来管理资源。你可以将长期运行的资源配置在代码库中的 YAML 文件里,然后构建 CI/CD(持续集成/持续部署)流程。每当你对资源进行更改时,使用 Anthropic CLI 和这些 YAML 文件来更新 Anthropic。这样解释清楚了吗?

明白了。呃,我猜你们内部也使用同样的方法吧?

是的。如果需要构建持久化的长期资源,我们只需将它们签入代码库即可。

好的,谢谢。

不客气。呃,我想你提到过可以随时发送消息。那么当模型正在等待自定义工具的结果时,你们仍然可以发送消息吗?

呃,当模型正在等待自定义工具结果时不行。我们基本上会在那一刻暂停执行。但如果模型正在进行其他工作,我们是允许你排队发送消息的。不过当它在等待自定义工具结果时,我们期望你来发送该结果。出于排序目的,我们会阻塞调用。

那么如果你确实发送了消息会发生什么?

你会收到一个 400 错误。

好的,这说得通。呃,有人要求再看一次 QR Code(二维码)幻灯片。

那个……

呃,就是关于积分的那张,对。

还有其他问题吗?如果你害羞的话……

是的,我们会在后面对大家没有提出的问题进行交流。

好的,我正在查看一个仓库。里面有很多有趣的研讨会演讲视频。有没有什么遗漏的内容?比如幻灯片之类的,能帮助我们更好地理解其他……

是的,是的。

……像那样的环节?你们可以发布这些内容吗?还是说通过 README 文件基本上就能自我解释清楚了,就像你之前提到的那个做研讨会的技能一样?

是的,是的。其他的研讨会视频来自我们的“Code with Cloud”大会。其中大部分可以在网上找到,特别是大约一个月前我们在伦敦举办的那一版。

是的,如果你对那里面的其他仓库感兴趣的话,所有这些演讲都在 YouTube 上。但这个应该能给你一个相当好的概览,而且它与我们在其他大会上所做的非常相似。

是的。

好的,所以回到评估(Evals)的话题。能谈谈你们是如何保持质量以及围绕评估框架的最佳实践吗?

呃,是的。我们运行大量的评估,特别是随着新模型和新能力的推出。显然,你们能接触到这些模型之前我们就已经可以访问了。因此,作为托管服务提供方,我们要确保尽早更新我们对评估框架的假设,以便移除不再需要的内容。我们都在基于评估的基础上进行这些操作。

所以我们有内部工具,基本上看起来像是不同的数据集,我们可以运行不同的会话来测试它们。因为这一切都在云端,很容易说“启动 10,000 个会话并行执行”,然后评估这些结果,调整提示词(prompts)和假设。我们会移除一些内容、添加一些新内容,以确保每次模型发布时我们都尽最大努力,并评估各种通用目的的内容,而不仅仅是代码编写。

那么这如何延伸到我们会构建的代理中呢?对于评估有推荐的路径吗,还是说只是“自带方案”(bring your own solution)?

呃,我认为我们能给出的最好建议是获取高质量的数据来进行评估。我认为 Claude Code 在为你构建评估方面做得相当好,但“垃圾进,垃圾出”。我们看到我们最初的一些关于如何评估事物的想法定义得不太清晰,虽然能得到 100% 的分数,但这在性能上意味着什么呢?所以,迭代你的数据并确保正确设置问题是关键。

我知道这不是一个开箱即用的解决方案,但通常这是我们看到的行之有效的建议。你可以查看历史会话和得到的结果,然后尝试打分并看看模型的表现如何。这将是一种构建数据集的好方法,通过查看你的历史会话来实现。

我这边有个问题。

嘿,谢谢分享。我有一个关于如何在整个组织中共享这些代理及其所有资源的问题。我问这个问题的原因是我们非常频繁地使用“代码即代理”(Claude as Code)。我们正在构建共享技能、共享连接器。但对于你今天分享的所有内容,例如代理、记忆存储或 MCP 通道,我们实际上可以共享它们吗?或者可以在组织内的不同部门之间部分共享吗?

所以,边界在哪里?这些资源的权限是什么?这些资源是绑定到我的账户的吗?我该如何控制这一点?所以,该怎么做呢?

它们绑定到你的工作区(Workspace)。因此,你工作区内的任何 API 键都可以访问这些资源。

那么我的队友可以编辑或修改我正在构建的内容吗?还是说完全由我控制,对吧?

呃,我认为你的 Claude 平台管理员——你会有一个组织(Org)代表整个机构。然后由管理员设置工作区并决定谁有权访问哪个工作区。所以我认为……

你基本上会根据你的访问控制来设计工作区。

正确。你会希望将那些你想要授予资源 X 访问权限的人员分组放在一个工作区中。

所以,你可以共享任何你想要的东西,甚至是部分的?你知道的,你构建了一个能执行某项任务的代理,但我只想共享其中的一部分。例如,我把记忆部分分享给某人,把 MCP 通道分享给其他人。这可能吗?还是说我需要共享我构建的整个技术栈?

我们没有像“分享这个而不分享那个”这样的细粒度控制功能。但是,作为构建者和集成者,你能够以相当细粒度的方式对此进行控制,以便你的最终用户可以实现部分共享。

酷。太好了。非常感谢。

谢谢。

是的。

好的,所以基本上我们可以用许多代理生成大量代码,然后我们遇到了瓶颈:审查这些代码并确保可以实际合并它们。你们是如何看待这一点的?我看到你们每 30 天部署一次,这可能对“部署”有不同的定义。但这是否意味着你们在测试以确保其正常运行方面有所部署?或者,你们如何审查来自所有代理的这么多行代码?

呃,我们最初想要进行的研讨会……

实际上是在回答这个问题:如何构建用于代码审查的代理?我们发现,可以将其与 Claude Managed Agents (CMA) 集成。当出现拉取请求(PR)时,它会启动一个、两个或许多个会话,由多个子代理评估变更内容并查找漏洞。内部团队利用这类代理为我们承担了大量工作,我们发现这能减少每个 PR 所需的处理时间,降低错误数量并保持高质量。但这部分仍是一个开放性问题:既然我们打破了编码的界限,使得每天、每小时甚至每秒能创建的 PR 数量激增,我们要如何跟上节奏?我们仍在探索中。

CMA 是答案的一部分之一。是的,你可以在循环中进行迭代,比如审查、添加评论,直到完成。但在某个阶段,你仍然需要运行程序以确保其在本地工作良好。因此部署环节可以介入,你可以自动部署某些内容供自定义部署代理测试,正如你所说。这取决于具体情况,比如是否为每个分支设置不同的环境?你也可以在沙箱中运行应用程序,让 Claude 自行验证其做出的更改。

它是否像那些你可以进入 UI 实际操作的长时间运行会话?目前我们还没有隧道功能。所以你会让 Claude 进去,在浏览器中玩耍并验证它?没错。然后也许甚至给你返回一段视频?是的,完全正确。谢谢。还有其他问题吗?你好。嗨。

对于一家企业公司,如果我们希望保持真正的租户隔离支持,我听说你们可能还不支持企业用例?我们不支持本地部署(On-prem)。是的。但如果我想拥有,比如说,我有 100 个客户作为企业公司,我可以为每个我们要支持的公司拥有单独的 Claude Managed Agent 实例吗?这是一个可行的选项吗你们是否支持?我们只提供一个实例,还是可以为每个支持的客户提供一个实例?

这取决于你如何定义。你可以为每个客户定义一个代理,这样数据就会隔离;或者如果你想要真正的隔离,可以为每个客户使用一个工作区甚至组织。这取决于你想如何设置你的代理,你可能需要维护哪个客户映射到哪个代理的对应关系。好的,我想我有一个跟进问题。

鉴于我们有两位客户并想构建一次代理但由这两位客户共享的场景,该如何实现?有很多方法可以做到。你可以通过自动化来实现:让代理定义存在于代码中(如 YAML),然后构建工具来更新你的两个工作区并基本同步它们;或者你可以在单个组织中建模,以这种方式进行模型设计。

你可以为所有客户创建一个单一代理,然后管理哪个客户使用哪个会话的映射关系?是的。那么我在哪个工作区可以访问这个代理呢?如果你按工作区分,我们会提供工具将代码中的单个定义同步到多个位置。这样每当你在通过 CI 更新代码时,就可以一次性更新所有定义。

所以你可以复制你的代理(本质上是系统提示、模型名称和工具的模板),并在每个工作区中制作副本。比如采用一个客户对应一个工作区的模式;或者你可以将所有客户放在单个工作区中,然后维护映射关系:要么复制代理副本,要么使用单一代理并映射哪个会话对应哪个客户。我们在会话中有一个元数据字段,你可以放入比如客户 ID,以便知道哪个会话映射到哪个客户。

好的,你知道的,将所有客户数据放在一个工作区中,我们如何满足数据隔离的要求?是的。如果你关心数据隔离,那么你需要将它们放在单独的工作区中,资源是按工作区分配的。但基本上有工具支持你执行这些操作。当你说数据隔离时,这是法律要求吗?还是只是你想要的?

是的,某种法律层面。比如客户不想与其他客户共享数据,他们希望专用……是的,你会按工作区进行设置。好的,谢谢。我看到这里有个问题。你得大声点说……有没有办法修改计算环境?也就是说在某些情况下,我可能需要更高的内存供代理工作,或者我需要 GPU 让代理实际执行任务。这支持吗?

今天如果你想为沙箱进行自定义资源分配,你会使用自托管的沙箱。你可以使用像 Modal 这样提供 GPU 服务的工具。我们有食谱和第一方集成,以便你将 Modal 实例连接起来在 Modal 内部运行代理循环,而不是使用我们提供的沙箱(目前都是一样的)。所以如果你关心不同的规模扩展,你会为那个目的使用不同的提供商。

你们有列出这些代理可访问环境的规格清单吗?是的,你可以在我们的文档中找到它。你也可以在我们的文档中找到与第三方提供商集成的食谱。是的,我们有很多关于如何与 Modal、EB2、Daytona 或任何你想要的沙箱提供商合作的食谱。是的,嗨。

再次感谢。出于好奇,如何在不同的聊天频道中使用 CMA 构建 Cloud Tag 的模拟版本?特别是针对多人模式。这绝对是你今天可以做的事情:在每条线程级别将其映射到会话,然后每当用户向该会话发送消息时,你注入该内容作为 user.message,让代理知道这是来自 Gabe 还是 Priyanka。每个人都可以独立地向该代理发送消息。

你可以让它跨会话共享记忆,以便互相学习。你可以给它工具……

回复时可以使用类似 Slack 发布工具的功能,以便代理自行决定何时发布。你并不一定需要完全镜像代理的回复内容,而是要让它表现得明确一些。不过,你可以肯定地使用 CMA 来模拟这种行为。如果你希望它像 Cloud Tag 那样运作,你可能需要为每个 Slack 频道设置一个代理,这样每个代理都有独立的记忆体,并且只能访问该 Slack 频道内的消息。是的。

大家好,感谢这次演示,非常有用。我有一个快速的问题,关于在 Cloud Console 中进行循环和长时间运行的任务,你们是如何看待这方面的?这是不是意味着你们已经内置了某些特定的模块,只是我还没找到?还是说你们计划在未来开发这方面的功能?谢谢。

你是指我们如何为超长的会话提供可观测性吗?不,不是这个意思。我更多是想关注如何使用这个平台来构建那些长时间运行的代理,比如持续运行数小时的情况。例如上次演示了六个小时的任务。这是已经嵌入在你们构建的代理中的功能吗?我更好奇的是,你们是否正在专门为此开发新功能,或者你们如何看待这一趋势。

我在演示中展示的结果系统是实现超长会话的最佳方式,因为你定义了退出标准,Claude 就会一直运行直到满足该标准。这可能是一个非常长的任务,比如重建空白文档,它会无情地迭代,直到符合评分标准为止。为了让会话运行超过六小时,你不需要做任何特殊处理,它应该会继续运行下去。

有一个快速跟进的问题:如果我让代理运行数小时,我想了解检查点状态,最好的方法是通过会话标签页吗?是的。应该是会话事件流。在会话下有一个 Events API。好的,你可以创建一个名为“更新人类状态”之类的自定义工具,Claude 会在它认为取得进展时定期调用该工具并给你提供状态更新。非常感谢。

还有其他最后的问题吗?有。跟进之前关于使用此功能进行 Claude Tag 或类似功能的讨论。我一直分析了很多代理框架。所以,如果我在等待自定义工具结果(例如人工介入循环)时收到消息,你说它会返回 400。你们有什么建议来处理这种情况吗?

你可以在子代理上使用自定义工具吗?我忘了。是的,你可以在子代理上使用自定义工具。因为你可以基本上拥有一个处理你自定义工具的子代理,这样你的主要协调者代理就可以始终空闲以接收消息。在 API 中,你能否直接为子代理的工具返回自定义工具结果?

嗯……子代理会发出自定义工具使用请求,然后你会将其填充回去。你可以定义一个主要协调者代理,然后说代理 A 可以与代理 B 和 C 对话。假设代理 B 负责处理你的自定义工具,那么在你的代理 B 定义中就会定义该自定义工具。然后你会监听那个会话线程以获取……

那是不同的会话线程还是同一个?不,它是同一核心会话的一部分。从技术上讲是不同的线程,但你只与主线程交互,我们会正确地进行委托,因为根据 ID 我们知道它需要去哪里。好的。然后主代理会将其传递给子代理。

所以即使……如果子代理正在工作,它就不是空闲的。但是就像主协调者代理是空闲的时候,子代理仍然可以……仍在工作中。是的,你可以在这里看到这一点。好的,这相当令人印象深刻。

这里的差距显示主会话是空闲的。当子代理工作时,主线程是空闲的。它们可能在等待工具结果。没错。所以如果你试图做某事,希望主代理始终保持活跃交流的状态,那么我认为协调者模式对此非常有效。太棒了。

是的。我想我们时间到了,但如果你想和我们交谈的话,我们会在门外等候。感谢邀请我们来这里。好的,非常感谢大家。(掌声)