📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Claude Agent SDK [Full Workshop] — Thariq Shihipar, Anthropic

AI Engineer1:52:25

Transcription

[音乐] 好的。是的,感谢您加入我。我呃,我还在西海岸时间,所以感觉就像我在早上 7 点做这件事。呃,所以是的,但是我很乐意与您谈论 Claude Agent SDK。所以呃,是的,我认为这将是一个粗略的议程,但我们将讨论我们将讨论什么是 Claude Agent SDK?为什么使用它?有这么多其他的代理框架。什么是代理?什么是代理框架?呃,您如何使用代理 SDK 或或一般设计代理?呃,然后我将进行一些现场编码,或者 Claude 将进行一些现场编码来原型化一个代理。呃,我有一些入门代码。但是呃,是的,我的整个目标是了解我们有两个小时。我们将进行超级协作,提问。呃,这也不会是一个超级罐装演示,因为我们将实时思考问题。你知道,我不会马上就有所有答案。呃,我认为这将是构建代理循环的好方法,我认为这非常像一种艺术或直觉。所以,呃,但是是的,在我们开始之前,只是好奇,举手,有多少人听说过 Claude Agent SDK 或好的。很棒。酷。有多少人使用过它或试用过它?好的。太棒了。好的,所以举手的人很多。呃,是的,所以我将开始介绍代理的概述。我认为人们 [清嗓子] 以前见过,但我认为它仍然需要一些时间来真正消化。呃,人工智能功能是如何发展的,你知道吗?所以我认为,当 GPT,你知道,3 出来时,它真的只是关于单个 LLM 功能,对吧?你就像,哦,嘿,你能对这个进行分类吗?像用这些类别之一返回响应?呃,然后我们有了更多像工作流一样的东西,对吧?嘿,你能像处理这封电子邮件并标记它,或者嘿,这是我的代码库,通过 rag 索引。你能给我下一个完成项,或者下一个要编辑的文件,对吧?这就是我们所说的“工作流”,你非常结构化。你就像,嘿,就像给定这段代码,给我代码,对吧?现在我们正在进入代理,对吧?呃,像典型的代理是 Claude Code,对吧?Claude Code 是一个工具,你真的不告诉它。我们并不真正限制它能做什么,对吧?你只是用文本和它交谈,它会采取各种各样的行动,对吧?所以代理构建自己的上下文,决定自己的轨迹,非常非常自主地工作,对吧?所以,呃,是的,我认为随着未来的发展,代理将变得越来越自主。呃,我们,是的,我认为我们正处于一个我们可以开始构建这些代理的转折点。呃,它们并不完美,你知道,但绝对是开始的正确时机。所以,呃,是的,Claude Code,我相信你们很多人都尝试过或使用过。呃,是的,我认为这是第一个真正的代理,对吧?就像我第一次看到人工智能工作了 10、20、30 分钟的时候,对吧?所以,呃,是的,它是一个编码代理,而 Claude Agent SDK 实际上是建立在 Claude Code 之上的,而我们这样做的原因是,基本上我们发现当我们在 Anthropic 构建代理时,我们不断地一遍又一遍地重建相同的部件。所以,为了让你了解一下那是什么样子,当然,首先是模型,对吧?呃,然后在框架中,你有工具,对吧?这就是第一个明显的步骤,就像,让我们给这个框架添加一些工具。稍后,我们将提供一个关于尝试从头开始构建自己的框架的示例,以及它是什么样的以及它可能有多么具有挑战性。但工具不仅仅是你自己的自定义工具。可能是与你的文件系统交互的工具,就像 Claude Code 一样。音量是不是变大了,还是他们没有拿得离嘴巴足够近?[笑声] 好的。总之,呃,你有工具,工具你在循环中运行,然后你有提示,对吧?就像核心代理提示,呃,那些东西的提示。呃,然后最后你有文件系统,或者不是最后,但你有文件系统。文件系统是一种我们将稍后详细讨论的上下文工程方式,对吧?我认为我们通过 Claude Code 得出的一个关键见解是,我们更多地考虑了上下文,而不仅仅是提示,还有工具、文件和脚本,它可以用来。呃,然后有我们最近推出的技能,呃,我们可以更多地谈论技能,呃,呃,如果你们对此感兴趣的话。呃,然后是的,像子代理,网络搜索,你知道,呃,就像研究压缩钩子内存,还有很多其他围绕框架的东西。呃,它最终会变得很多。所以 Claude Agent SDK 就是所有这些东西打包在一起供你使用,对吧?[清嗓子] 嗯,是的,你有你的应用程序。所以我认为,呃,为了让你了解,呃,是的,为了让你了解为什么 Claude Agent SDK 可能是,呃,是的,就像,是的,人们已经在 SDK 上构建了很多代理,很多软件代理,你知道,软件可靠性、安全性、分类、错误查找、站点和仪表板构建器。如果你们正在使用它,你们绝对应该使用 SDK。呃,我猜是办公室代理,如果你做任何办公室工作,那里有很多例子。呃,有一些,你知道,法律、金融、医疗保健的。呃,所以是的,有很多人在上面构建。呃,我想,哦,是的。好的。所以,为什么是 Claude Agent SDK,对吧?就像我们为什么这样做?为什么我们把它建立在 Claude Code 之上?我们基本上意识到,一旦我们发布了 Claude Code,工程师们就开始使用它,然后财务人员开始使用它,数据科学家开始使用它,营销人员也开始使用它,是的,我认为这只是,我们意识到人们正在将 Claude Code 用于非编码任务,而我们觉得,而且在我们构建非编码代理时,我们不断回到它,对吧?所以,呃,这是一个,我们将更深入地探讨为什么它有效,为什么你可以将 Claude Code 用于非编码任务。呃,剧透警告,这是 bash 工具。呃,但是是的,这是我们看到的一个新兴模式,我们想使用它,我们已经在上面构建了我们的代理,对吧?呃,这些是我们从部署 Claude Code 中学到的经验教训,我们已经将其融入其中。所以,工具使用错误或压缩或类似的东西,那些需要大量规模才能找到的东西,你知道,最好的实践是什么,我们已经将其融入了 Claude Agent SDK。因此,我们对构建代理的最佳方式有很多强烈的看法。呃,我认为 Claude Agent SDK 是相当有见地的。我将讨论其中一些见解以及为什么,呃,为什么我们选择了它们,对吧?呃,但是是的,bash 工具是其中一个重要的见解,它是最强大的代理工具。所以,好的,呃,我将如何描述 Anthropic 构建代理的方式,对吧?我不是说你只能通过 API 以这种方式构建代理,对吧?但这就像,如果你使用我们有见地的堆栈在 Agent SDK 上,它是什么?对吧?所以大致是 Unix 原始命令,比如 bash 和文件系统,你知道,我们将要通过 Claude Code 原型化一个代理,我的目标是真正地向你展示它在实时中是什么样的,对吧?为什么 bash 有用,为什么文件系统有用,为什么不只使用工具?呃,是的,代理,我的意思是,你也可以创建工作流,我们稍后会谈到这一点,但代理构建自己的上下文,思考非编码的代码生成,就像我们使用 codegen 来生成文档,查询网络,进行数据分析,采取非结构化行动。所以,有很多,这可能对一些人来说相当违反直觉,而且再次,在原型化会话中,我们将讨论如何为非编码代理使用代码生成。呃,是的,每个代理都有一个容器,或者在本地托管,因为这是 Claude Code,它需要一个文件系统,需要 bash,需要能够在其上运行。所以这是一个非常非常不同的架构。我今天不打算过多谈论架构,但如果人们感兴趣,我们可以在最后谈论,或者抱歉,我说的架构是托管架构,就像你如何托管一个代理以及最好的实践是什么?你会在最后谈论过吗?呃,[清嗓子] 是的,所以,让我停下来,因为我觉得我已经讲了很多了。到目前为止,关于 Agent SDK 代理有什么问题吗?呃,是的,就像你从中得到什么?>> 你能解释一下代码生成用于非编码是什么意思吗?>> 是的,呃,这是,就像基本上当你要求 Claude Code 完成一项任务时,对吧?就像,假设你让它查找旧金山的天气,然后,你知道,告诉我我应该穿什么之类的,对吧?就像,它可能会开始编写一个脚本来获取天气 API,对吧?然后开始,也许它想让它可重用。就像,也许你想经常这样做,对吧?所以它可能会获取天气 API,然后获取,也许甚至根据你的 IP 地址动态获取你的位置,然后它会,你知道,检查天气,然后也许调用一个子代理来给你建议。也许有一个关于你的衣柜或衣橱的 API,对吧?就像,这是一个例子。我认为,就像,对于任何单个示例,我们可以讨论如何使用代码生成。很大程度上是组合 API,这是思考它的高层方式。是的。>> 哦,是的。而且 [清嗓子] >> 是的,呃,工作流与代理,就像重复性任务或你知道,就像一个流程,一个业务流程,总是相同的。你仍然会选择构建一个代理而不是一个完全确定的工作流吗?>> 是的。所以,我们有>> 哦,当然。是的。是的。呃,所以问题是关于工作流与代理,你还会使用 Claude Agent SDK 来处理工作流吗?是这样吗?嗯,是的。而且,所以,我的意思是,我们只是告诉你我们内部怎么做,基本上,我们内部做了很多 GitHub 自动化和 Slack 自动化,这些都是基于 Claude Agent SDK 构建的。所以,你知道,我们有一个机器人,当问题出现时,它会对其进行分类。这是一个相当工作流化的事情,但我们仍然发现,你知道,为了对问题进行分类,我们希望它能够克隆代码库,有时还能启动 Docker 容器并进行测试等等。所以,它仍然是一个非常,有很多中间步骤需要非常自由流动。然后你在最后给出结构化的输出。所以,是的。好的,我们将再问一个问题,然后继续。所以,是的,在蓝色区域。是的。呃,所以你能谈谈安全和监护人吗?就像,如果你知道你正在使用 Claude Agent SDK,并且你知道你倾向于使用 bash 作为,你知道,所有强大的通用工具,那么构建代理构建者来确保你正在防止常见的攻击向量,还是模型本身在做这件事?>> 是的。所以,我认为这有点像瑞士军刀。哦,是的。好的。所以问题是 bash 工具的权限,对吧?或者,就像你如何看待权限和护栏,就像,当你赋予代理对其环境和计算机如此大的权力时,你如何确保它对齐,对吧?所以我们这样看待它,我们称之为瑞士奶酪防御,对吧?所以,就像,在每一层都有一些防御措施,我们希望它们一起阻止一切,对吧?所以,显然,在模型层,我们做了很多对齐工作。我们实际上刚刚发布了一篇关于奖励黑客攻击的优秀论文。强烈建议您查看一下。呃,所以,当然,我认为 Claude 模型,我们试图让它们非常非常对齐,对吧?所以,是的,有模型对齐行为,然后有框架本身,对吧?所以我们有很多权限和提示,呃,而且,就像我们对 bash 工具进行解析器一样,例如,所以我们相当可靠地知道,呃,bash 工具实际上在做什么,而且绝对不是你想自己构建的东西。呃,然后最后一层是沙箱,对吧?所以,就像,假设有人恶意控制了你的代理,它实际上能做什么?我们包含了一个沙箱,并且,就像,你可以在其中沙箱化网络请求,并沙箱化文件系统操作,除了文件系统之外。所以,呃,是的,最终这就是他们所说的致命三联,对吧?就是,呃,就像,执行代码的能力,更改文件系统,泄露代码,对吧?我认为我对致命三联的理解有点错误,但基本思想是,如果他们能将你的信息泄露出去,对吧?呃,他们仍然需要能够提取信息。所以,如果你沙箱化网络,这是一个好方法。呃,如果你在沙箱容器上托管,比如 Cloudflare Modal 或 E2B Daytona,所有这些沙箱提供商,他们也做了一些安全工作,对吧?就像你不是在你的个人电脑上托管,或者在有你的生产秘密的电脑上托管,所以,呃,是的,有很多不同的层次。而且,是的,我们可以更深入地讨论托管。所以,好的,我将稍微谈谈 bash 就够了。我认为这是我喜欢的东西。哦,是的。呃,这是我的坚持,你知道吗?我将继续谈论这个,直到每个人都同意我。或者,就像,我认为这是我们在 Anthropic 发现的东西,我认为一旦我来到这里,我就发现了。呃,bash 是让代码如此出色的原因,对吧?所以,我认为你们可能已经看到过代码模式或程序化工具使用,对吧?就像,组合 MLPS 的不同方式,Cloudflare 发布了一些关于此的博客文章,我们也发布了一些博客文章,我思考代码模式或 bash 的方式是,它是第一个代码模式,对吧?所以 bash 工具允许你,你知道,就像将你的工具调用结果存储到文件中,动态生成脚本并调用它们,组合功能,比如 tail graph,它让你使用现有的软件,比如 fmp 或 libre office,对吧?所以 bash 工具有很多有趣的强大功能。而且,就像,再次思考一下,是什么让 Claude Code 如此出色。如果你要设计一个代理框架,也许你会做的是,你会有一个搜索工具,一个 lint 工具,和一个执行工具,对吧?而且,就像,你有 N 个工具,对吧?就像每次你想到一个新的用例时,你都会想,我现在需要另一个工具,对吧?相反,现在 Claude 只使用 grep,对吧?以及你的包管理器。所以它运行 npm run test.ts 或 index.ts s 或任何东西,对吧?它可以 lint,对吧?而且它可以找出如何 lint,对吧?而且如果没有 linter,它可以运行 npm run lint。它可以说,如果我为你安装 eslint,对吧?所以,就像,正如我所说的,第一个程序化工具调用,第一个代码模式,对吧?你可以非常非常通用地执行很多不同的操作,对吧?所以,为了在非编码代理的背景下谈论这一点,对吧?所以,假设我们有一个电子邮件代理,用户说,好的,我这个星期在共享乘车上花了多少钱?呃,你知道,它有一个工具调用,或者通常它能够搜索你的收件箱,对吧?所以它可以运行一个查询,比如,嘿,搜索 Uber 或 Lyft,对吧?而且没有 bash,它会搜索 Uber 或 Lyft,它会得到,比如,一百封电子邮件,或者类似的东西,现在它只需要思考一下。你知道我的意思吗?而且我认为,就像,一个好的类比就像想象一下有人带着一堆纸来找你,然后说,嘿,我这个星期在共享乘车上花了多少钱?你能,就像,读我的电子邮件吗?你知道我的意思吗?那会非常困难,对吧?你需要非常非常好的精确度和召回率才能做到。或者使用 bash,对吧?就像,假设有一个 Gmail 搜索脚本,对吧?它接受一个查询函数。然后你可以将该查询函数保存到文件或管道传输。你可以用 grep 来查找价格。你知道,你可以,然后将它们加起来。你也可以检查你的工作,对吧?就像,你可以说,好的,让我获取我所有的价格,将它们存储在带有行号的文件中,然后我就可以事后检查,就像,这真的是一个价格吗?就像每个价格对应什么?对吧?所以你可以用 bash 工具做更多动态信息来检查你的工作。所以,这是一个简单的例子,但希望向你展示了 bash 的可组合性的力量,对吧?所以我在这里停下来,关于 bash 就够了,关于 bash 工具,有什么问题吗?有什么我可以更清楚地说明的吗?>> 你有关于有多少人使用 yolo 模式的统计数据吗?>> 关于 yolo 模式的统计数据,我们可能有一些。我的意思是,我们内部没有,但这只是,我认为我们只是有更高的安全姿态。呃,[清嗓子] 是的,我不确定。我可能可以拉出来。关于 bash 的其他问题吗?好的,酷。呃,是的,只是给你一些更多的例子,就像,假设你有一个电子邮件 API,你想,你知道,就像,获取我的,告诉我这个星期谁给我发了邮件,对吧?所以,你有两个 API。你有一个收件箱 API 和一个联系人 API。这是你可以通过 bash 做的一种方式。你也可以通过 codegen 来做。这有点像足够多的 bash,它就是 codegen,对吧?就像,bash 基本上是一个 codegen 工具。呃,然后是的,就像,假设你想,你有一个视频会议代理,对吧?你想说,在这个收益电话中,找出所有演讲者说季度收益的时刻,对吧?你可以使用 ffmpeg 来分割这个视频,对吧?你可以使用 jq 来,呃,之后开始分析信息。所以,呃,是的,有很多强大的方法来使用,使用 bash。所以,我将稍微谈谈工作流和代理。是的,你可以两者都做。你可以使用,在 Agent SDK 上构建工作流和代理。呃,是的,代理就像 Claude Code。如果你,就像,正在构建一些你想用自然语言与之交谈并灵活采取行动的东西,对吧?那么这就是你正在构建代理的原因,对吧?就像,你有一个代理,它与你的业务数据对话,你想获得见解或仪表板或回答问题或编写代码,或者其他什么,那就是代理,对吧?然后工作流就像,你知道,我们做了很多 GitHub Actions,例如,对吧?所以你非常紧密地定义了输入和输出,对吧?所以你就像,“好的,给我一个 PR,给我一个代码审查。”呃,是的,你都可以使用 Agent SDK。在构建工作流时,你可以使用结构化输出。我们刚刚发布了这个。你可以,是的,搜索 Agent SDK 结构化输出。呃,但是是的,所以你可以两者都做。我现在主要会谈论代理。很多你可以从中学到的东西也适用于工作流。所以,呃,是的,我们将讨论这个。呃,等等,举手。有多少人设计过代理循环?好的,酷。好的,很棒。很棒。呃,所以,是的,我的意思是,我认为设计代理循环的头号事情,对我来说,就是一遍又一遍地阅读 the transcripts。就像每次你看到代理运行时,只需阅读它,然后找出,嘿,它在做什么?它为什么这样做?我能以某种方式帮助它吗?对吧?呃,我们稍后会做一些,对吧?所以,我们将构建一个代理循环。但是,这是代理循环的三个部分,对吧?所以,首先是收集上下文,对吧?第二是采取行动,第三是验证工作,对吧?呃,这不是构建代理的唯一方法,但我认为这是一个很好的思考方式。收集上下文就像,你知道,对于 Claude Code,它是 grepping 并找到所需的文件,对吧?你知道,对于电子邮件代理,它是找到相关的电子邮件,对吧?所以,这些都是非常,是的,就像,我认为思考它如何找到这个上下文非常重要,而且我认为很多人都跳过了这一步,或者低估了它。这可能非常非常重要。呃,然后采取行动,它如何完成工作?它有正确的工具来完成吗?比如代码生成,bash,这些是更灵活的行动方式,对吧?然后验证是另一个非常重要的步骤。所以,基本上我现在想说的是,如果你正在考虑构建一个代理,想想你能否验证它的工作,对吧?如果你能验证它的工作,它就是一个很棒的代理候选者。如果你不能验证它的工作,就像,你知道,编码,你可以通过 linting 来验证,对吧?而且你至少可以确保它能编译。所以这很棒。如果你正在做,比如说,深入研究,实际上更难验证你的工作。一种方法是通过引用来源,对吧?所以这是验证中的一步,但显然研究在某些方面比代码更难验证,对吧?因为,就像,代码有一个编译步骤,对吧?你也可以执行它,然后看看它做了什么,对吧?所以,我认为,就像,思考,就像,当我们构建代理时,那些最接近非常通用的代理是那些验证步骤非常强大的代理。所以我认为这里有一个问题。是的。>> 所以,我们什么时候生成工作计划?>> 是的。我的意思是,你可能会>> 问题>> 哦,是的,抱歉,问题是,你什么时候生成计划,在你运行它之前。所以,就像在 Claude Code 中,你并不总是生成计划。但如果你想,你会把它插入到收集上下文和采取行动的步骤之间,对吧?所以,计划有助于代理一步一步地思考,但它们会增加一些延迟,对吧?所以那里有一些权衡。呃,但是是的,Agent SDK 也帮助你做一些规划。所以,是的。>> 是的。你能让代理创建那个待办事项列表,以确保它会创建那个待办事项列表并运行它吗?>> 哦,是的。所以问题是代理会创建待办事项列表吗?是的。如果你使用 Agent SDK,我们有一些待办事项工具,它会维护和勾选待办事项,你可以随时显示它。所以,是的。呃,关于这个还有其他问题吗?好的,酷。好的,所以,我将快速谈谈,就像,就像,你如何做这些事情?你,就像,你的工具是什么?对吧?呃,有三件事你可以做,你有工具、bash 和代码生成,对吧?我认为传统上,我认为很多人只考虑工具,而且,是的,基本上,号召行动之一就是弄清楚,就像,更广泛地思考它,对吧?所以工具非常结构化,而且非常可靠,对吧?如果你想尽可能快地获得输出,错误最少,重试最少,工具很棒。缺点是,它们使用大量上下文。如果有人用 50 或 100 个工具构建了一个代理,对吧?它们会占用大量上下文,模型有点困惑,对吧?工具没有发现性。而且它们不可组合。而且,我说的工具是指,如果你现在使用消息或完成 API,这就是工具的工作方式。当然,你知道,有代码模式和程序化工具调用,所以你可以混合一些。但是 [清嗓子] 有 bash。所以 bash 非常可组合,静态脚本,低上下文使用。它可能需要更多的发现时间,因为,就像,假设你有 Playwright MCP,或者类似的东西,或者抱歉,Playwright CLI,Playwright 的 bash 工具,你可以做 Playwright-help 来找出所有你可以做的事情,但代理每次都需要这样做,对吧?所以它需要发现它能做什么,这有点强大,它有助于减少一些高上下文使用,但会增加一些延迟。它们的调用率可能会略低,你知道,因为,就像,它需要更多的时间来,它需要找到工具以及它能做什么。但这肯定会随着时间的推移而改善。然后最后是 codegen,高度可组合的动态脚本。它们执行时间最长,对吧?它们需要链接,可能需要编译。API 设计在这里变得非常非常有趣,对吧?我将更多地谈论,呃,最佳,如何思考 API 设计。但是,是的,我认为这就是我们拥有的三个工具。所以,是的,使用工具,我认为你仍然想要一些工具,但你想把它们看作是原子动作,你的代理通常需要按顺序执行,而且你需要很多控制,对吧?所以,例如,在 Claude Code 中,我们不使用 bash 来编写文件,我们有一个 write file 工具,因为我们希望用户能够看到输出并批准它,而且我们并没有真正将 write file 与其他东西组合,对吧?它就像一个非常原子的动作。发送电子邮件是另一个例子。任何非破坏性的,或者,你知道,不可逆的改变,工具是一个好地方。然后 [清嗓子] 我们有 bash。所以,例如,有一些可组合的动作,比如搜索文件夹,使用 GitHub linting 代码,检查错误或内存。所以,是的,你可以将文件写入内存,这可以成为你的 bash,bash 可以成为你的内存系统,例如。然后最后是代码生成,如果你想做这种高度动态的、非常灵活的逻辑,组合 API,就像你在做数据分析或深入研究,或者重用模式。所以,是的,我们将稍后更多地谈论代码生成。到目前为止,关于 SDK 循环,循环,或者工具与 bash 与 codegen 有什么问题吗?是的。>> 是的。我本来想问 [清嗓子] 你会有现成的工具来,比如,卸载结果 [鼻息声] >> 卸载工具调用结果,比如到文件系统,或者>> 比如,它去了 bash,然后上下文爆炸了。>> 它会,比如 [清嗓子] 输入一个命令来完成所有事情吗?>> 好的。>> 或者,否则,只是长输出污染你的历史。>> 当然。是的。是的。是的。我猜,总是上传到文件。>> 是的。是的。我认为这是一个很好的常见做法。我认为,我记得最近在 Claude Code 上看到了一些关于处理非常长的输出的 PR,而且我不知道具体是什么,我认为我们正朝着一个方向发展,越来越多的东西只是存储在文件系统中,这是一个很好的例子。是的,就像它随着时间的推移存储长输出。我认为,就像,通常提示代理这样做是一个很好的思考方式。或者,即使你有,我认为我一直这样做的是,每当我有一个工具调用时,我都会将工具调用的结果保存到文件系统中,这样你就可以搜索它,然后让工具调用返回结果的路径。只是因为,就像,这有助于它重新检查它的工作。所以,是的。呃,你发现你需要 [清嗓子] 使用,比如技能结构来帮助 Claude 更好地使用 bash,还是开箱即用?你知道,那不是必需的。>> 是的。所以,问题是关于技能,以及我们是否需要技能来更好地使用 bash?是的,对于上下文技能,也许我可以,好的,技能。好的。是的,技能基本上是一种方式,就像,你知道,允许我们的代理执行更长、更复杂的任务,并,就像,通过上下文加载东西,对吧?所以,例如,我们有一些 DOCX 技能,这些 DOCX 技能告诉它如何进行代码生成来生成这些文件,对吧?所以,是的,我认为总的来说,技能,是的,基本上只是一堆文件。它们也是一种非常文件系统或 bash 工具的例子,对吧?因为它们只是你的代理可以 CD 进入并阅读的文件夹,对吧?所以,是的,它们提供了,我们发现技能真正擅长的是相当可重复的指令,这些指令需要大量的专业知识。就像,例如,我们最近发布了一个前端设计技能,我非常喜欢它,它基本上是一个非常详细且优秀的关于如何进行前端设计的提示。但它来自,你知道,我们最好的,你知道,AI 前端工程师,你知道我的意思吗?他真的投入了很多思考和迭代。所以这是使用技能的一种方式。>> 是的,>> 快速提问。为什么使用那个前端技能?>> 当然。它很棒。感谢发布它。我想了解,有多个 MD 文件,比如 MD 也在那里,它也在用户级别,然后有技能文件,比如,有没有优先级顺序?有些东西应该归于 claw.md,而其他东西应该只归于 skill.md?H 所以问题是关于 skill.md 与 claw.md 以及如何思考这个问题,对吧?而且,我认为,我想说的是,所有这些概念都非常新,你知道我的意思吗?就像,即使是 Claude Code 也是在八九个月前发布的,对吧?就像,技能是两周前发布的。我不会假装知道所有关于一切的最佳实践,对吧?我认为,总的来说,技能是一种渐进式上下文披露模式,这是我们经常谈论的一种模式,对吧?就像,你知道,bash 和,你知道,就像,更喜欢它而不是,你知道,纯粹的,就像正常的工具调用,这是一种方式,就像代理说,好的,我需要做这个,让我找出如何做,然后让我读入这个 skill.md,然后继续,所以你要求它创建一个 docx 文件,然后它 cd 到目录,读取如何做,编写一些脚本,然后继续。所以,是的,我认为,是的,关于如何定义技能以及如何拆分它,仍然有一些直觉需要建立。但是,是的,我认为,是的,还有很多最佳实践需要学习。>> 是的,>> 所以昨天我们 [清嗓子] 谈论了技能的未来。>> 你认为这些最终会成为模型的一部分,而一些技能只是暂时的桥梁吗?>> 是的。是的。所以问题是技能最终会成为模型的一部分吗?它们是弥合差距的方式吗?我错过了 Barry 和 M 昨天在 Barry 的演讲,但是,是的,我认为大致的想法是,模型将越来越擅长执行各种任务,而技能是给予它非分布任务的最佳方式,对吧?呃,[清嗓子] 但我大致会说,这真的很难,尤其是在,你知道,如果你不是在一个实验室里,很难确切地知道模型的发展方向。我的一般经验法则是,我试图每 6 个月重新思考或重写我的代理代码。只是因为,我想,事情可能已经发生了足够大的变化,以至于我在这里做了一些假设。所以,我认为我们的 Agent SDK 构建是为了尽可能地随着能力的发展而发展,对吧?就像,bash 工具会越来越好。我们正在它上面构建 Claude Code。所以随着 Claude Code 的发展,你将立即获得这些好处。但同时,你知道,现在的事情与一年前的 AI 工程相比,是如此不同,对吧?而且我认为,对我来说,一个普遍的最佳实践是,嘿,我们可以写代码的速度快 10 倍,我们也应该以 10 倍的速度丢弃代码。而且我认为,思考,而不是对未来在哪里进行对冲,而是思考我们今天能做什么真正有效,对吧?而且,就像,让我们今天获得市场份额,不要害怕以后丢弃代码。如果你是一家初创公司,这可以说是你相对于竞争对手最大的优势。他们,你知道,更大的 [鼻息声] 公司有六个月的孵化周期。所以他们总是陷入过去的代理能力中,对吧?所以你的优势是,你可以说,嘿,代理能力现在就在这里。让我现在构建一个利用它的东西,对吧?所以,是的。呃,还有其他关于我们正在谈论技能和 bash 的问题吗?好的。看起来有很多关于技能的问题。所以,是的,呃,我认为在后面,有人可能需要大声点。>> 是的。所以,为什么你会使用技能而不是 API?它们看起来非常相似,就像 Python 程序一样,可以是一个包,对吧?>> 是的。问题是为什么使用技能而不是 API?好问题。我认为,就像,当你,这些都是渐进式披露的形式,基本上是为了让代理弄清楚它需要做什么。而且我将介绍,呃,例如,你只有一个 API,对吧?在我们的,在我们的原型化会话中。这完全取决于用例,对吧?就像,我没有,我没有一个,我认为没有一个普遍的规则。我认为这是,就像,阅读 the transcript 并看看你的代理想要什么。如果你的代理总是认为 API 更好,就像 API.ts 文件或类似的文件,或者 API.py 文件,那就这样做。你知道,那很棒。就像,我认为技能是,就像,一种进入思考文件系统作为存储上下文的方式,对吧?而且它们是一个很好的抽象。但是有很多使用系统的方法。而且,我应该说,关于技能的一些事情,你需要 bash 工具,你需要一个虚拟文件系统,诸如此类。所以 Agent SDK 基本上是唯一真正充分利用技能的方式,对吧?所以,呃,是的。是的。后面。>> 我们可以期待一个技能市场吗?>> 是的。问题是我们可以期待一个技能市场吗?所以,是的,Claude Code 有一个插件市场,你也可以与 Agent SDK 一起使用。我们正在不断发展它,你知道,就像,它是一个非常,非常 v0 版本。而且,按市场来说,我不确定人们是否会为此收费,确切地说。我认为它更多的是一个发现系统。但是,是的,它现在存在。你可以在 Claude Code 中做 SL 插件。而且,而且你可以找到一些。所以,是的。是的。>> 你目前对何时会选择 SDK 来解决问题有什么看法?>> 何时?是的。问题是何时使用 SDK 来解决问题?呃,如果我正在构建一个代理,基本上,我认为,就像,我的总体信念是,对于任何代理,bash 工具都为你提供了如此多的力量和灵活性,并且使用文件系统为你提供了如此多的力量和灵活性,以至于你总是可以从中榨取性能提升。所以,呃,是的,在这次谈话的原型化部分,我们将看看一个只有工具的例子和一个没有 bash 和文件系统的例子,并比较这两个。呃,是的,这就是我所说的“bashful to build”的意思,我就是,我就是从 Agent SDK 开始的,你知道,我认为 Anthropic 的很多人也开始这样做了。所以,当然,我确实想说,有很多时候 Agent SDK 有点烦人,因为你有一个网络沙箱容器,然后你说,我讨厌,我不想这样做,你知道吗?我的意思是,就像,我想在我的浏览器本地运行,对吧?我完全理解。而且我认为,这是一个真正的性能权衡。我的思考方式就像 React 与 jQuery,你知道,就像,我,当我成长的时候,我非常喜欢 WebDev,而且,你知道,我使用 jQuery 和 Backbone,然后 React 出来了,它是 Facebook 的,他们说,你必须,这是 JSX,我们刚刚发明了这个,然后有一个 bundler,对吧?我觉得太烦人了。但是,就像,它们通常使模型,或者它使 Web 应用更强大,对吧?而且我认为我们有点像,Agent SDK 对我来说就像代理框架的 React,因为我们自己构建东西。所以,你知道,它是真实的,而且它所有烦人的部分只是我们也很烦恼的事情,但我们说,它就是有效,你必须这样做,你知道吗?所以,是的。呃,是的。好的,更多的技能问题,我想。是的。就在这里。>> 嗯,问题是什么?Bash。>> 哦,当然。Bash 问题。太棒了。我爱 bash。>> 自定义内部,比如 bash 工具。>> 是的。>> 你如何让代理发现它,或者那些必须变成工具的工具?>> 好的。问题是,如果你有自定义代理 bash 工具,你如何让代理发现它?通过自定义 bash 工具,你的意思是 bash 脚本?>> 我们有,我们有 bash 脚本。是的。>> 嗯,是的。所以,我认为,在哪里?你把它放在文件系统中,然后告诉它,嘿,就像,这是一个脚本。你可以调用它,你知道,我通常在 Claude Agent SDK 的上下文中思考,它有文件系统,而 bash 工具是绑在一起的。这有时是一种反模式,我有时会看到人们说,“哦,就像,我们将在这种虚拟化的环境中托管 bash 工具,它不会与代理循环的其他部分交互,你知道,这使得它很困难,因为如果你有一个工具结果正在保存文件,那么你的 bash 工具就无法读取它,你知道我的意思吗?除非它都在一个容器里。所以,这回答了你的问题吗?就像>> 是的,有点。我的意思是,就像,所以你只是说你把它放在系统提示里还是什么?是的,我只是把它放在系统提示里,就像,嘿,你有权访问这个。我通常会设计我所有的 CLI 脚本,让它们有一个 d-help 或类似的东西,这样模型就可以调用它,然后它可以逐步披露脚本中的每个子命令。是的。>> 嗯,是的。>> 是的,所以,就像,我的问题是关于何时选择 Agent SDK。所以你是否设计过,或者说,你会建议有人使用 Agent SDK 来构建一个通用的聊天代理,而不是,哦,你知道,我正在构建一个代理,你有一些输入,代理会做一些事情,最后我关心输出,而不是,比如,你是否正在使用或你是否预见到使用 Agent SDK 来构建,比如 Claude 的应用程序,而不是 Claude Code。>> 是的。所以问题是,何时选择 Agent SDK,它是否,就像,就像,我们会使用 Agent SDK 来构建 cloud.AI,这是一个比 Claude Code 更传统的聊天机器人。我的意思是,我认为 Claude Code 是一个非常,就像,界面不是一个传统的聊天机器人界面,但输入和输出是,对吧?你输入代码,你得到,或者你输入文本,你得到文本,它们在此过程中采取行动。你可能已经看到,当我们为 cloud.AI 推出文档创建时。现在它能够启动文件系统,并,比如,通过生成代码来创建电子表格和 PowerPoint 文件等等。所以,你知道,我们正处于,就像,合并我们的代理循环等等。但是,但是总的来说,就像,是的,cloud.AI 将,就像,变得越来越,你看到它与技能和内存工具等等,越来越多的文件系统。所以,我们确实认为这是一个你可以普遍使用的东西,并且很乐意讨论例子。呃,是的,还有一个问题,然后我们将继续。是的。>> 仍然试图理解何时构建工具或使用工具的经验法则,何时用脚本包装某事,或者只是让代理在 bash 上疯狂,因为我会给你一个例子。比如,我需要访问数据库。

不时。我可以使用 MCP。我可以将其包装在脚本中,然后让代理直接从 bash 调用 B 的端点,对吧?>> 是的,好问题。好问题。所以,它仍然在尝试弄清楚何时使用工具与 bash 与 codegen,您举了一个例子,比如好的,我有一个数据库。嗯,我想让代理以某种方式访问它。我该怎么办?我应该创建一个以某种方式查询数据库的工具吗?嗯,我应该使用 bash 吗?我应该使用 codegen 吗?对吧?这些都是三种方法。嗯,我认为它们就像你可以使用任何一种,而且我认为,不幸的是,没有像单一的最佳实践,对吧?这就像一个系统设计问题。但让我们说你想通过工具访问你的 bash 数据库。如果你的数据库结构非常非常严谨,而且你必须非常小心,比如我不知道你在访问用户敏感信息之类的,而且你觉得“嘿,我只能接受这个输入,我需要输出这个,我必须将数据库的其他所有内容都对代理进行屏蔽,对吧?显然,这会限制代理可以做什么,对吧?比如它无法编写非常动态的查询,对吧?嗯,如果你正在编写一个完整的 SQL 查询,我肯定会使用 bash 或 cogen,因为当模型编写 SQL 查询时,它可能会出错,而它修复错误的方式是像进行代码检查或运行文件,查看输出,查看是否有错误,然后进行迭代,对吧?嗯,所以一般来说,如果我今天正在构建一个代理,我会尽可能多地让它访问我的数据库,然后我会设置护栏,对吧?比如我可能会在不同方面限制它的写入访问。但我想我可能会做的是,我会给予它写入访问权限并设置特定的规则,然后如果它试图做它不能做的事情,就给它反馈。你明白我的意思吗?我知道这有点难,但我认为这是我们要解决的问题,对吧?比如我们构建了一个 bash 工具解析器。嗯,这是一个非常令人头疼的问题。但我们需要解决这个问题,才能让代理更普遍地工作,对吧?同样的事情也发生在数据库上,比如是的,理解查询的作用相当困难,但如果你能解决这个问题,你就可以让你的代理随着时间的推移更普遍地工作。所以,嗯,是的,我认为尽可能灵活地思考它,并保持工具非常非常像原子动作,对吧?你需要很多保证。嗯>> 同样的事情,对吧?嗯,你如何确保基于角色的访问控制得到处理?>> 你如何?嗯,所以问题是如何确保基于角色的访问控制得到处理?通常这取决于你如何配置你的 API 密钥或你的后端服务或类似的东西,对吧?嗯,我认为我可能会做的是,我有时会创建临时 API 密钥,人们会在中间创建代理来插入 API 密钥,如果你担心数据泄露。嗯,但是的,我会为你的代理创建 API 密钥,这些密钥以某种方式进行了范围界定,然后在后端你可以检查它,你知道它在做什么,而且,比如,如果你是一个代理,你可以给它不同的反馈。所以,是的。>> 好的。我还有一个问题。>> 嗯,你有什么可以告诉我们更多关于内存工具,内部内存工具的信息吗?嗯,我我不是想保密。我不知道确切的,我没有读过代码,但我认为它通常在文件系统上工作。所以,嗯,>> 你把它暴露给 SDK 还是已经可用了?>> 嗯,我想说的是,我们已经问过这个问题很多次了。我只会使用云代理 SDK 中的文件系统。我只会创建一个像内存文件夹这样的东西,并告诉它把内存写在那里。嗯,就像我不知道内存工具的确切实现,但它确实以这种方式使用文件系统。所以,是的,嗯,好的,是的,最后一个问题。是的>> 是的,你如何管理 B 和代码?你如何管理可重用性?假设同一个代理被部署给成百上千的用户,而且每次生成的代码都一样,每次执行的代码也一样。那么我们如何利用可重用性呢?是的,这是一个非常好的问题。所以,嗯,是的,假设你有两个代理与两个人互动。问题是,你如何看待代理之间的可重用性,或者代理如何通信,对吧?嗯,我认为这是一个有待发现的事情。我认为,但我认为有很多最佳实践和系统设计要做,因为传统上,对于 Web 应用程序,你为数百万用户提供一个应用程序,而对于代理,比如使用云代码,我们提供,你知道,一对一的容器,当你使用 Web 上的云代码时,就像你的容器一样,所以容器之间没有多少通信,这是一个非常非常不同的范例。我不会说我确切地知道最佳的系统设计来做到这一点,对吧?而且我认为有很多关于“好的,这些代理正在重用工作”的最佳实践。我们如何给它们提供像组合它们所做的工作的通用脚本?我们如何让它们共享?我通常会认为这是一个有点跑题,但关于代理通信框架,我会说我们可能不需要一个完整的,我们不需要,我认为这是我个人的观点,我认为我们可能不需要重新发明一个新的通信系统。代理擅长使用我们拥有的东西,比如 HTTP 请求和哈希工具和 API 密钥以及命名管道以及所有这些东西。所以,可能代理只是来回发送 HTTP 请求,你知道,使用 HTTP 服务器。嗯,那里有很多有趣的工作。我见过人们为他们的代理创建虚拟论坛进行交流,他们发布主题并回复等等。嗯,有点酷。我认为有很多东西可以探索和发现。是的。好的。嗯,继续一点。我们还有多少时间?好的。嗯,酷。所以,设计代理的一个例子。这是一个,是的,让我们,这不是原型设计环节,但我认为这将是一个很好的切入点。假设我们正在制作一个电子表格代理。嗯,搜索电子表格的最佳方法是什么?执行代码的最佳方法是什么?或者在电子表格中采取行动的最佳方法是什么?链接电子表格的最佳方法是什么?对吧?这些都是非常有趣的事情。嗯,我将做一个 Figma,我们可以回顾一下。嗯,如果有人能拿瓶水,那就太好了。我真的需要水。我,是的。是的。好的。嗯,谢谢。嗯,好的。所以,我们将,嗯,是的,让我们来谈谈。嗯,或者为什么你们不花几分钟自己思考这个问题?你有一个电子表格代理。你想让它能够搜索。你想能够收集上下文,采取行动,验证它的工作。你会怎么想?对吧?所以,花点时间思考一下。做一些笔记什么的。好的。每个人都有点时间思考这个问题了吗?有人需要更多时间,还是想直接开始?好的。嗯,代理搜索电子表格的最佳方法是什么?意识到我现在只能用一只手打字。嗯,我应该弄清楚这一点,因为我稍后要打字。好的。嗯,好的,搜索电子表格。嗯,有什么想法吗?你如何搜索电子表格?比如你会怎么做?>> CSV。>> 好的。你有一个 CSV。好的。现在你的代理想搜索 CSV。它做什么?>> GP。好的。GP 看起来怎么样?>> 需要查看所有标题。>> 查看标题。好的。>> 所有工作表的标题。>> 好的。太棒了。是的。是的。假设我正在寻找 2024 年的收入之类的。嗯,现在我有了标题,比如,嗯,我只是拉出一个电子表格,对吧?嗯,假设收入在那里,有一个收入列,然后有一个,所以,是的,让我们看看,好的,所以,是的,假设是这样的,对吧?嗯,我如何获得 2026 年的收入?对吧?所以,这有点像一个表格问题,对吧?比如这里有收入,这里也有 2026 年,对吧?所以,这就像一个多维步骤,对吧?我们可以查看标题,然后它会给我们,比如,如果你只拉出这个,你会得到 100、200、300,对吧?所以,我们需要更多一点。嗯,还有其他想法吗?>> 是的,>> 有一个 bash 工具。嗯,AWK,我想。>> O。好的。是的。是的。是的。它会做什么?>> 这取决于你在寻找什么。>> 是的。是的。是的。这是个问题,对吧?用户在寻找什么,对吧?他们可能在寻找这样的东西,比如 2026 年的收入,对吧?嗯,>> 也许使用 API 来使用 Google 工具将所有数字加起来,或者 VLOOKUP 之类的东西,对吧?>> 是的。所以想法是使用 API,使用 Google API 来查找它。嗯,这很棒。嗯,但是的,假设我们在本地工作。我们需要设计这些 API。是的。>> SQLite 或 CSV 直接工作。>> 哦,有意思。好的。是的,我不知道。这很棒。所以,是的,你使用 SQLite 来查询 CSV。嗯,这是一个很好的思考 API 接口的方式,对吧?比如,如果你能将它转换成代理非常熟悉的接口,那就太棒了。所以,如果你有一个数据源,如果你能把它转换成 SQL 查询,那么你的代理就真的知道如何搜索 SQL。所以,思考这个转换步骤非常非常有趣,这是设计代理搜索接口的一个很好的方式。>> 嗯,是的,那边。>> 抱歉,顺便说一句,当我们谈论工具时,因为你也可以使用 TSV 来处理一些东西。>> 嗯,在里面有很好的排名吗?Is Cloud 是否足够智能,可以开始为正确的工作排名正确的工具?因为这正是我们在这里谈论的,就是为正确的工作选择正确的工具。>> 是的。Is Cloud 是否足够智能,可以为正确的工作排名正确的工具?是的,如果你提示它,你知道,或者,我想这是我不知道的事情之一,让我们找出答案,让我们阅读文字记录。如果不是,你如何帮助它?>> 是的,只是,我认为所有这些事情都是一种直觉,你知道吗?就像骑马一样,不是说我骑过马,但我知道就像我所想象的那样,就像跑步一样。[笑声]>> 是的。就像你,你知道,你正在向马发出这些信号。你让它平静下来。你试图理解它如何加速它,你知道我的意思吗?所以,这是一种非常有机的事情,对吧?嗯,我们喜欢说模型是培养出来的,而不是设计的,对吧?所以我们正在了解它们的能力。是的。嗯,是的,什么以及在哪里。是的>> 快速提问。所以,有没有办法为电子表格添加元数据?你可以在不同的文档中提供描述吗?>> 是的,例如,KPI 用于构建智能来提问。>> 是的。所以这是另一个很棒的模式,就是,好的,你能为电子表格添加元数据吗?所以,这些是你可能想在考虑搜索时思考的问题,对吧?比如,你可以做什么预处理来改进搜索?所以,一个例子是将其转换为 SQL 格式或其他什么,你使用可以查询它的东西,对吧?这是一个转换步骤。另一个步骤是,也许你有一个工具,或者,嗯,一个预处理步骤,另一个代理注释电子表格并添加信息,以便代理可以更好地搜索这些信息。对吧?所以,嗯,是的,还有一个。嗯,我只是好奇,我意思是所有这些工具听起来都很棒,但是,是的,为什么代理不能,>> 你知道,做建议的事情,读取标题,然后获取日期?我觉得这应该很容易,或者重新测试。>> 是的,我可能应该用代码准备好。但我确实构建了很多电子表格代理。基本上,>> 不是,这有点难。是的。是的。所以,嗯,基本上我会这样想,所以我们有,好的,Sean,你有什么关于它如何同时说话和编码的建议吗?请继续。>> 哦,我明白了。是的。>> 你在 Whisper Flow 工作还是什么?>> 把麦克风放在你的衬衫里?>> 衬衫上有一个麦克风按钮。[笑声]>> 衬衫后面有一个麦克风按钮。哦,我,我只是不相信那些东西,伙计。好的。嗯,[笑声]也许我不应该在人工智能实验室工作。嗯,好的。所以,嗯,让我想想。>> 等等。等等。嗯,搜索。所以,>> 一种方法是,你看电子表格,对吧?比如,你可以说在这里,你可以设计公式,比如 B3 2,所以这是一个代理非常熟悉的语法,比如 B3 到 B5,对吧?所以,你可以设计一个代理搜索界面,就像这样,比如 B3 B5 或者什么,对吧?所以,你的代理搜索界面可以接受一个范围,它可以接受一个范围字符串,对吧?这些是代理非常熟悉的,对吧?比如,你可以,做 SQL 查询,对吧?代理非常熟悉 SQL 查询,对吧?嗯,而且,比如,你也可以做 XML,对吧?抱歉,字体太小了。嗯,好的。嗯,是的,你也可以做 XML。我不确定你们是否知道,但 XLX 文件在后端是 XML,对吧?XML 是非常有结构的,你可以做一个 XML 搜索查询,有不同的库可以做到这一点。所以,这是一个例子,对吧?就是如何搜索和收集上下文,我希望这能说明你,收集上下文真的很有创造力,对吧?而且,有很多迭代,如果你只尝试了一种迭代,那可能还不够,对吧?比如,像你能尝试的所有不同的方式,对吧?比如尝试 SQL,尝试 CER,尝试 GP 和 O,以及所有这些东西,并且有一些测试,你可以在不同的东西上进行测试,看看代理喜欢什么,不喜欢什么。嗯,对于每个案例都会有所不同。>> 抱歉。当你说的代理时,你指的是模型,还是因为我们正在构建一个代理?>> 是的。而且你依赖于已经存在的关于如何处理 XML 的知识,谁在做这件事?模型。>> 是的,因为问题是,知识从哪里来?是模型吗?是,我说的代理是什么意思?是的,一般来说,我认为你正在寻找的是,你有一个问题,你想让它尽可能地分布化,对吧?所以,代理知道很多事情。它知道很多关于金融的事情,对吧?所以,如果你让它做一个 DCF 模型,它知道 DCF 是什么,对吧?而且如果你想给它更多信息,你可以做一个技能,对吧?但它知道 DCF 是什么。它知道 SQL 是什么。它能把它们结合起来吗?对吧?所以,理想情况下,你想让你的问题在某种程度上是分布外的,对吧?比如,有一些信息不在互联网上,或者你有的信息,或者一些对你来说是独特的东西,你想尝试并把它变成尽可能分布内的。嗯,是的,这非常有创造力,我认为,比如,你知道,它不像,它不是一门科学,[笑声] 非常像一门艺术。所以,嗯,是的。好的。所以,我们已经尝试了收集上下文,然后采取行动。嗯,我们可以在这里做很多和以前一样的事情,对吧?比如,我们可以插入二维数组,对吧?嗯,如果我们有一个 SQL 接口,对吧?我们可以,我们可以做一个 SQL 查询,我们可以编辑 XML。嗯,这些通常非常相似,对吧?比如,采取行动和收集上下文,你可能想要一个类似的 API 来回交互。然后最后一件事是验证工作,对吧?比如,你如何看待,你如何看待它?嗯,检查空指针,对吧?是其中一种方法。嗯,关于验证还有其他想法吗?是的>> 抱歉,我有点困惑,如果你说>> 比如,当你使用其他 SDK 来构建代理时,我不需要告诉它如何收集上下文。>> 当然。>> 我只是给它上下文并解释这是什么,基本上我用简单的英语解释>> 它的意思。>> 是的。>> 我通常的做法是,我实际上会创建一个单独的代理来进行 QA。>> 哦,有意思。>> 来验证,因为我不信任代理自己验证。但我只是,我只是有点困惑,我需要提供给代理的细节程度。>> 是的。好的。所以问题是关于向代理提供上下文与让它自己收集上下文。你提到你有时会使用 QA 代理。你能问一下,比如你在构建代理的领域是什么?>> 在网络安全领域。>> 好的。当然。是的。是的。嗯,我认为我需要更深入地研究细节,但云代理 SDK 非常适合网络安全,而且,我通常会鼓励人们尽可能多地让代理收集上下文,你知道吗?比如,让它尽可能多地找到自己的工作。嗯,你正在给它找到自己工作的工具。我的想法是,就像有人把你锁在一个房间里,他们会给你任务,你知道吗?就像你的工作一样,就像 Mr. Beast 那样的场景,对吧?比如,如果你待在这个房间里 6 个月,你会得到 50 万美元。嗯,然后,比如,有人给你发消息,你想做什么工具,对吧?比如,你只想看一堆论文,还是你想用计算器,还是电脑?对吧?我可能会想要一台电脑,对吧?我想要谷歌。我想要所有这些东西,对吧?所以,我不想让那个人给我一堆论文,说,“嘿,这可能就是你所需的所有信息。”我宁愿说,“嘿,给我一台电脑。给我问题。让我搜索并找出答案。”对吧?所以,我也这样看待代理。比如,它们需要,你知道,它们被困在一个房间里。>> 所以我需要给它们工具。所以,如果你能回到幻灯片,你有的图表>> 回到图表,比如这个,或者>> 是的,所以基本上收集上下文就是我提供的工具。>> 是的。正是如此。是的。我给了它一个代码生成 API,也许我给了它一个 SQL 工具。也许我给了它一个 bash。这些都是例子,对吧?所以,是的,你还有一个问题。>> 问题。所以,对于你拥有的所有代理,它们共享相同的上下文窗口吗?>> 有意思。是的。所以,代理共享上下文窗口吗?我认为这是一个总体上关于如何管理上下文的有趣问题。嗯,我认为,我还没有太多地谈论过,但子代理是管理上下文的一种非常非常重要的方式。嗯,我认为我们正在云代码中使用越来越多的子代理,我会非常普遍地考虑使用子代理。所以,比如,我们可能会为电子表格代理做的是,也许我们有一个搜索子代理,对吧?所以,子代理非常适合当你需要做很多工作并向主代理返回答案时。所以,对于搜索,假设问题是,我如何找到 2026 年的收入?也许你需要做很多结果。也许你需要搜索互联网,也许你需要搜索电子表格,诸如此类的事情。而且有很多事情不需要进入主代理的上下文。主代理只需要看到最终结果,对吧?所以,这是一个很好的子代理任务。嗯,我这里没有专门的子代理幻灯片,但是的,它们非常有用,我认为这是一个很好的思考方式。嗯,是的>> 而且只是为了扩展这个问题,实际上>> 比如验证,你可以想象通过一个技能或一个子代理来完成。你甚至可能想要一个对抗性的,比如安全例子是一个很好的例子。想要让它全力以赴,并且不真正对已经完成的工作有任何同情关系。这是一个非常,我明白了,这是一个范围,但你是在说,是的,你会在这里使用一个子代理,你会使用一个技能吗?你会怎么想?>> 是的,绝对。所以问题是,你是否使用子代理,或者>> 我相信它会起作用的,只是为了确保。>> 哦,当然。是的。是的。谢谢。很感激。嗯,好的。是的。嗯,你能用子代理进行验证吗?是的。我认为这是一个模式。我认为,理想情况下,最好的验证形式是基于规则的,对吧?比如,有没有空指针之类的?那很容易验证。它不像代码检查或编译那样,比如,你尝试插入的规则越多越好,而且再次要有创造力,对吧?比如,在云代码中,如果代理试图写入一个我们知道它还没有读取的文件,比如我们还没有看到它进入读取缓存,我们就抛出一个错误,告诉它,“嘿,你还没有读取这个文件,先尝试读取它。”这是我们插入验证步骤中的一种确定性工具的例子。所以,尽可能多地,任何时候你想到验证,第一步是,你能做什么确定性的事情?比如,你知道,你能做什么输出?而且,再次,当你选择哪种类型的代理时,具有更多确定性规则的代理更好,你知道吗?它们只是,就像,这很有道理,对吧?所以,当然,随着模型在推理方面越来越好,你就可以拥有这些子代理来检查主代理的工作。主要的事情是避免上下文污染。所以,你可能不想,比如,分叉上下文。你可能想开始一个新的上下文会话,然后说,“嘿,是的,对抗性地检查,比如,这个输出是由麦肯锡的一名初级分析师制作的,或者别的什么。他们毕业于,不是小学,他们的 GPA,你知道吗?比如,只是给它很多东西,然后让它批评,对吧?比如,这是子代理的工具之一,对吧?所以,是的,你越多地,比如,是的,随着模型越来越好,这种验证也会越来越好。嗯,但确定性地做到这一点是一个很好的开始。>> 是的。>> 只是一个关于验证工作的问题。>> 是的。>> 嗯,所以,比如,我们发现没有指针。也许很容易说,“好的,修复它。”但是,你知道,比如,我们将其部署到生产环境中,并且客户正在使用它,而不是我们,他们不知何故陷入了一个整个电子表格被删除的境地。所以,比如,我们需要在什么层面上嵌入能够撤销工具的能力?因为,比如,假设 QA 代理返回说他们的电子表格是空的。>> 是的。>> 不一定能够撤销,所以,你的建议是什么?>> 是的。所以问题是,你如何看待状态以及撤销和重做,能够,嗯,基本上修复错误,对吧?我认为这是一个非常好的问题,老实说,另一个,比如,当你想到代理擅长什么时,对吧?比如,或者代理擅长哪些问题领域?工作的可逆性是一个很好的直觉,对吧?所以,代码是相当可逆的。你可以回去,你可以撤销 git 历史。我们从,你知道,这些原子操作开始,对吧?比如,我一直在使用云代码中的 git,我不再输入 g 命令了,对吧?所以,这是一个很好的例子。一个非常糟糕的例子是计算机使用,[清嗓子]你知道,因为计算机使用没有状态的可逆性,对吧?比如,假设你去 door-ash.com,然后你添加,用户希望你订购一杯可乐,然后你添加订购一杯百事可乐,现在你不能只是回去点击可乐。你必须去购物车,你必须删除百事可乐,对吧?所以,你的错误已经复合了,你知道,这个状态和状态机变得更加复杂,对吧?所以,每当你处理非常非常复杂的状态机,你无法撤销或重做时,它确实会变得更难,对吧?而且我认为工程师的问题之一是,你能把它变成一个可逆的状态机,就像你说的,你能存储检查点之间的状态,这样用户就可以说,“哦,我的电子表格现在一团糟了,只是回到上一个检查点,对吧?甚至模型可以回到以前的检查点吗?嗯,我认为有人有一个时间旅行工具,他们给了其中一个编码代理,这有点酷,你就像,你可以回到这个发生之前的某个点。你知道我的意思吗?嗯,这很有趣。我认为所有这些工具,有些现在还不太好用,但你知道,我们会到达那里的。嗯,是的,思考状态和验证非常有用,对吧?所以,嗯,是的,后面的快速提问。>> 是的。嗯,>> 我有点好奇规模。嗯,所以,如果电子表格有数百万行,数百万列,或者任何类型的数据库,在这种情况下,你将如何搜索?显然有一个上下文,你必须考虑。>> 是的,这很棒。嗯,我可能应该把电子表格例子作为我的编码例子,我的编码代理是一个宝可梦代理。嗯,电子表格可能就够了。嗯,问题是,如果电子表格非常大怎么办?如果你有数百万行,嗯,10 万列,或者 100 列,或者随便什么,你怎么看待它?对吧?你的数据库也很大,你怎么做?嗯,我认为对于所有这些事情,当然,随着数据越来越大,问题就越来越难,你知道,它确实是,你的准确性会下降,对吧?比如,云代码在更大的代码库中比在更小的代码库中更差,对吧?随着模型越来越好,它们会在所有这些方面做得更好。嗯,对于所有这些,我会考虑,如果我有一个数百万列和数百万行的电子表格,我会怎么做?我我意思是,我需要开始搜索它,对吧?我会像,比如,如果我搜索收入,我会像搜索 Ctrl+F 收入,然后我会检查每一个结果,我会像,这是对的吗?然后,我会看到,比如,这里有一个数字吗?然后我可能会保留一个便签本,一个新的工作表,我会在上面写,“嘿,比如,等于收入等于这个”,你知道吗?并且存储这个引用并继续。所以,我认为这是一个很好的思考方式,就是模型应该,你不应该,比如,将整个电子表格读入上下文,因为它会,它会占用太多,对吧?嗯,你想给它,比如,起始的上下文量,这也是你的工作方式,对吧?比如,假设你打开了电子表格,你看到的是行,这是对的吗?你看到的是前 10 行和前,你知道,30 列左右,对吧?这就是你看到的,你不会立即将所有内容加载到上下文中,你可能会有一种直觉,比如,“嘿,我应该加载更多内容,”对吧?而且,比如,“哦,我应该导航到这个其他工作表,”对吧?而这个其他工作表有更多数据,对吧?嗯,但你需要,比如,你收集上下文,对吧?所以,代理也可以以同样的方式运行。它可以导航到这些工作表,读取它们,比如,尝试并保留一个便签本,做一些笔记并继续。所以,这就是我会考虑的方式。嗯,是的,后面。>> 是的。所以我的问题是关于管理上下文污染,实际上,我认为这与前一个问题有关。你有没有一个经验法则,你知道,在上下文窗口中使用多少比例的上下文,然后你会开始遇到收益递减,或者它变得不那么有效?>> 是的,问题是,是的,上下文管理。你有没有一个经验法则,比如,在使用多少上下文窗口之前,它会变得不那么有效?这实际上是我认为目前一个相当有趣的问题。嗯,我认为很多时候,当我与使用云代码的人交谈时,他们会说,“我正在进行第五次压缩。”我说,“什么?”比如,我几乎从未做过压缩。你知道我的意思吗?比如,我必须自己测试用户体验,通过,比如,强迫自己进行压缩。嗯,只是因为,比如,我倾向于,当我自己在云代码中时,我经常清除上下文窗口,因为,比如,至少在代码中,状态在代码库的文件中,对吧?所以,假设我做了一些更改,云代码可以查看我的 git diff 并说,[哼哧]哦,嘿,这些是你做的更改。它不需要知道,比如,我与它的整个聊天记录,你知道,才能继续一项新任务,对吧?所以,在云代码中,我经常清除上下文,而且我经常说,“嘿,看看我未完成的 git 更改。我正在处理这个。你能帮我以这种方式扩展它吗?”对吧?这是思考方式之一。而且,当你构建自己的代理时,比如,假设我们正在构建一个电子表格代理,它会变得更复杂,因为你的用户技术水平较低,对吧?而且他们不知道什么是上下文窗口,对吧?嗯,我认为这是一个难题。我认为那里有一些用户体验设计,比如,你能重置对话状态吗?比如,你能每次用户提出新问题时都进行自己的压缩,或者别的什么,然后你能,比如,总结上下文吗?嗯,它,比如,在电子表格中,很多状态都在电子表格本身中,所以它可能不需要,你知道,知道整个上下文。嗯,你能存储用户偏好吗?比如,当它进行时,这样你就记住了这些东西,你知道吗?比如,有很多,再次,这是一个艺术,有很多不同的角度和方式可以做到这一点,对吧?嗯,但是的,你正在试图,比如,最小化上下文使用。你可能不需要数百万的上下文,你知道我的意思吗?比如,你只需要良好的上下文管理,用户体验设计。是的。嗯,是的>> 嗯,只是,我只是想问,子代理是为了保护核心代理的上下文而创建的,对吧?>> 没错。是的。子代理是为了>> 电子表格。我们能否使用多个子代理,并尝试创建一个过程,将电子表格分块,以防它非常大?这样代理就可以并行运行,彼此之间。>> 是的。是的。我的意思是,嗯,是的。所以,我喜欢云代码的一件事是,我们是使用子代理的最佳体验,尤其是在使用 bash 的子代理方面。它非常好。我并没有完全意识到所有的痛苦。嗯,我认为如果有人要去 QCON,我相信 Adam Wolf 将在 QCON 上发表一个关于我们如何制作 bash 工具的演讲。Adam 是个传奇人物,bash 工具做得非常好。嗯,当你同时运行并行子代理时,bash 会变得非常复杂,而且有很多,比如,竞态条件之类的。所以,我们已经解决了许多问题,对吧?所以,这是我喜欢云代码的一件事,你可以说,“嘿,比如,启动三个子代理来完成这项任务”,它就会做到,而且在代理 SDK 中,你也可以让它这样做。所以,第一,子代理是代理 SDK 中的一个很好的原语,而且我还没有见过有人做得这么好。所以,这是使用它的一个重要原因。嗯,是的,一般来说,你想要它,你想要这些子代理来保留上下文。比如,假设你有一个电子表格,你可能同时有多个读取子代理在进行。对吧?所以,也许主代理说,“嘿,这个代理能读取并总结工作表一吗?这个代理能读取并总结工作表二吗?这个代理能总结工作表三吗?”然后它们返回结果,然后代理可能会再次启动更多子代理。对吧?所以,这是你拥有的另一个旋钮。嗯,而且我认为我想说的是,我们已经谈了很多关于你可以做到的所有不同的创造性方式。这是你应该思考你的问题的层面。你不应该真的,在我看来,思考“比如,我如何启动一个进程来创建一个子代理,或者,你知道,比如,压缩是什么背后的系统工程?”对吧?所以,我们为你处理了所有这些,在框架中,所以你可以思考,“嘿,我需要启动哪些子代理?”对吧?以及“我如何创建一个代理搜索界面?”以及“我如何验证它的工作?”这些是你必须解决的核心和困难问题。[笑声]而且你花费的任何时间不是解决这些问题,而是解决更低级的问题,你可能没有为你的用户提供价值。你知道吗?所以,嗯,是的,我认为子代理,非常喜欢代理 SDK,以防万一,是的,嗯,是的>> 所以,嗯,比如,我们有这个文本和验证任务,那么我们应该在哪里将验证放在这个例子中?比如,在生成 SQL 查询之后,我可以验证它是否是正确的查询,或者没有生成正确的查询,这是一个路径。第二条路径是,直接生成查询,执行它,一旦我得到输出,然后我进行验证。所以,嗯,代理如何动态选择,哪条路径是正确的?>> 是的。所以问题是,你在哪里进行验证?嗯,是在最后吗?你在中间进行,诸如此类的事情。我会说,比如,无论你在哪里,都可以不断地验证,对吧?比如,我说了,我们在云代码的读取步骤中进行了一些验证,所以这是一个很好的例子。嗯,你可以在最后进行,你绝对应该在最后进行,但在任何其他时候,如果你有规则或启发式方法,尤其是,比如,如果你说,“嘿,我的一个规则是,你不应该搜索的总列数应该少于 10,000 或少于 1000 或类似的东西”,这是一个很好的方法,对吧?比如,同样,在这里,也许你不应该插入一个巨大的,比如,值的行,给模型反馈,说,“嘿,把它分块,”你抛出一个错误并给出反馈,而模型的好处是,它会听取反馈,它会读取错误输出,然后它会继续。所以,是的,验证肯定是我知道我在这个,比如,作为一个循环,但它肯定更像是验证可以在任何地方发生,并且应该发生在任何地方,比如,把它放在尽可能多的地方。所以,嗯,好的,我确实需要开始做一些原型设计,但我会再问一个问题。所以,就在这里。是的。>> 我们如何说,我们如何形成步骤?我的意思是,比如,我们如何告诉代理先去搜索,然后是这个步骤,然后是那个步骤?>> 循环实际上是如何从起点到终点的?我们如何>> 你直接告诉它。所以,比如,>> 比如,它是在系统提示中,还是>> 是的,在系统提示中。是的。所以,比如,使用云代码,我们只是给它 bash 工具,然后我们说,“嘿,比如,收集上下文,读取你的文件,做事情,运行你的代码检查,你知道我的意思。”嗯,所以,再次,对于代理,你不需要强制执行这一点,对吧?你不需要告诉它,嘿,你需要做这个,因为,比如,有时可能没有必要,对吧?比如,假设有人在问一个只读问题,关于你的电子表格。你不需要,比如,验证,比如,没有编译错误,对吧?因为你没有做任何写入错误,对吧?写入操作,对吧?嗯,所以,嗯,让代理变得智能,并且,比如,以同样的方式,就像你一样,比如,同样的自由,当你做你的工作时,对吧?你被困在这个盒子里,或者别的什么,同样的,对吧?嗯,好的,酷。我,我确实想尝试看看我是否现在可以做一些原型设计,因为我们也有这个,嗯,嗯,持有者。嗯,好的,是的,执行 lint。我们已经做了很多 QA。好的。原型设计。好的。假设你有一个代理,对吧?比如,你想构建一个代理。你从这次谈话中出来,你说,太棒了,我有很多想法。我该怎么做?嗯,我认为我总体上说的就是,构建一个代理应该很简单。你的代理最终应该很简单,但简单并不意味着容易,对吧?所以,它应该非常容易上手,而且它就是去云代码,给云代码一些脚本和库以及自定义云身份,并让它去做,对吧?这就是我们要做的,对吧?嗯,它应该很容易说,“嘿,这是我的 API。这将是一个 API 密钥。你能,比如,去搜索,你知道,我不知道,我的客户支持票据,或者别的什么,并按优先级组织起来,或者别的什么,然后看看云代码做了什么,然后迭代它,对吧?而且,这是一个很好的方式,比如,直接跳到你拥有的困难的领域特定问题,对吧?所以,你有很多领域问题,比如,如何组织你的数据,你的代理搜索,如何,比如,在你的数据库上创建护栏,这些都是你可以立即用云代码解决的问题,对吧?所以,尝试并构建一些感觉相当不错的东西,使用云代码。而且,我认为一般来说,我所看到的,你可以在使用云代码本地时立即做到这一点并获得非常好的结果,对吧?而且,你应该有很高的信心,对吧?所以,嗯,是的,我认为,[笑声]我忘了更多信息。观看我的 AI 工程师讲座。嗯,这是一个内部的演示文稿,我们正在使用。嗯,好的。所以,嗯,是的,我将插入这个。所以,是的,你得到的是我们向客户展示的东西,对吧?所以,嗯,好的。嗯,是的。所以,是的,使用云代码。嗯,再次,简单,但简单并不容易,对吧?所以,比如,你的代理中的代码量不应该,比如,非常大。它不需要很大,不需要极其复杂,但它需要优雅。它需要是模型想要的。你想有一个有趣的见解。让我们把模型变成一个 SQL 查询。哦,让我们把这个电子表格变成一个 SQL 查询,然后从那里开始,对吧?所以,嗯,这样想。而云代码是做到这一点的好方法。所以,好的,嗯,让我们做一个宝可梦代理,对吧?这就是我们要做的。嗯,宝可梦是一个有很多信息的游戏。有数千种宝可梦,每种都有大量的招式。嗯,嗯,我们想非常通用。所以,实际上有一个 Pokey API。嗯,我选择宝可梦的原因只是因为,我知道你们也有自己的 API,对吧?而且它们都非常独特,对吧?嗯,所以我选择了一个具有复杂 API 的东西,我以前没有尝试过。嗯,所以,Poke API 有,你知道,你可以搜索宝可梦,比如 Ditto。你可以搜索物品之类的。嗯,所以它有这个,是的,这个自定义 API。你拥有游戏中的所有东西,对吧?所以,嗯,是的,比如,代理可能想要做的其中一件事是,你的用户可能想做的是组建一个宝可梦队伍,对吧?我爱宝可梦。我几乎不知道如何组建一个有趣的宝可梦队伍。

竞争性游戏。嗯,我的代理能帮我处理这件事吗?那会很酷,对吧?所以,嗯,我的目标是创建一个可以聊宝可梦的代理,然后我们会,你知道,看看我们能做什么,对吧?以及我们能走多远。所以,嗯,我已经做了一些这方面的工作了,我会打开并展示给你们看。所以,嗯,第一步,这里的提示是,第一步是,我将主要为此进行代码生成,对吧?所以,嗯,让我问一下,它会在 GitHub 的某个地方吗?>> 嗯,实际上是的。嗯,是的,它在我个人的 GitHub 上。>> 哦,是的。我打算把所有这些都提交上去。>> 是的。>> 嗯,是的。是的。所以,嗯,我认为我的个人 GitHub 是,让我想想。好的。>> 是安全的 GitHub 还是有恶意软件在里面 [笑声]?>> 你们是人工智能工程师。是的。就像,如果你被攻破了,那就是你的错。嗯,是的。所以,嗯,是的,如果你愿意,你可以克隆它。嗯,我需要推送最后的更改。所以,好的。所以,嗯,是的。你们能看到这个吗?我应该把它切换成暗模式吗,还是这样就可以了?嗯,>> 暗模式。>> 暗模式。好的。 [笑声] >> 好的。好的,这样更好。>> 不。>> 你想要另一种暗模式?>> 暗黑。好的。我不认为这会变得更好,伙计们。嗯,好的。我这是怎么运作的?你们还能听到我说话吗?>> 好的。嗯,好的。所以这里有一个例子,我给了它一个提示,我说,嘿,我去 Pokey API 搜索它的 API,并创建一个 TypeScript 库,对吧?所以,这都是我编写的代码。所以,你可以看到这里它为宝可梦创建了这个接口,对吧?所以,它创建了这个宝可梦 API,我可以按名称获取,我可以列出宝可梦,我可以获取所有宝可梦,我可以获取物种和能力,等等。所以,这只是我给它的一个提示,对吧?它生成了这个 TypeScript API。它也为招式做了。嗯,然后它创建了这个,就像,嗯,它创建了这个 API,我可以使用它,从 Poke API SDK 导入 Poke API。嗯,是的,你可以看到它是如何设置的。嗯,现在对比一下,对吧?所以,这是 cloud.mb,对吧?这是 Pokey API 的 TypeScript SDK。嗯,这是 Pokey API 中的模块。这里有一些关键功能。嗯,嗯,我要求它在 examples 目录中编写脚本,然后它将执行这些脚本来帮助我进行查询,对吧?嗯,我给它一些示例脚本。它不总是需要所有这些信息,对吧?嗯,但是的,获取宝可梦,列出资源,获取数据,诸如此类的事情。所以,这就是我的代理,真的。它是一个我给它的提示,用于生成 TypeScript 库,然后是这个 cloud.md。我可以和它在 cloud code 中聊天。我还会向你们展示一个只有工具的版本。所以,这里我正在使用 messages completion API,对吧?我给了它很多来自 API 的工具。比如获取宝可梦,获取宝可梦物种,获取宝可梦能力,获取宝可梦类型,获取招式。你们定义了所有这些工具,你可以看到,你知道,我也只是给它一个提示,让它制作这些工具。它不想制作 100 个工具,对吧?有很多烟雾,或者抱歉,宝可梦 API 数据。嗯,但它,你知道,它只能处理这么多参数。所以,它有这个工具调用,现在,嗯,我制作了一个小的聊天界面。对吧?所以,让我现在去这里说,嗯,这是我的工具调用。>> 我做得很棒。所以,是的,这里我们有这个 chat.ts,对吧?嗯,我原型制作东西时使用 bun,只是因为我不想从 TypeScript 编译到 JavaScript。嗯,而且,再次,bun 内置了 linting 功能。它是一种简化代理的方式,这样代理就不需要记住编译,但 TypeScript 更适合生成,因为它有类型,对吧?我将开始这个有趣的聊天,然后我将尝试,比如,第二代水系宝可梦有哪些?嗯,你会看到它正在开始搜索,我在这里记录了所有的工具调用。这非常非常重要,对吧?因为,它需要进行工具调用。所以,你可以看到它正在搜索很多宝可梦。嗯,然后它告诉我,好的,这是第二代的水系宝可梦,对吧?它有 Totodile、Croconaw、Feraligatr。你可以看到它是如何思考的,在每一步之间,它都在思考之前的步骤。现在,比如,假设我想用 claw code。我认为我可能需要>> 嗯,我需要删除这个例子。>> 嗯,哦,是的。>> 小问题。你如何记录工具调用?它只是一个参数,你可以>> 哦,是的,这是,嗯,这是在普通 API 中,对吧?所以,我只是,嗯,在模型中,每次它记录时,我只是调用这个,这是在,嗯,普通的 Anthropic API 中,在 SDK 中。我稍后会回到 SDK。嗯,它只是,你只是记录每个系统消息。所以,嗯,只是在控制台日志中。这有意义吗?还是,是的。好的。是的。>> 所以,所以你刚才展示的那个聊天界面,它只是在使用常规 API 吗?>> 是的,它在使用常规 API。>> 所以,不是代理 SDK,>> 不是代理 SDK。是的。是的。所以,我在这里要做的是,嗯,我在这里要删除这个脚本,因为我不想让它作弊。嗯,但是,好的。所以,这里你知道,嗯,我只是打开 cloud code。我创建了很多文件。我将说,你能告诉我所有第二代的水系宝可梦吗?嗯,然后我们会看看它能做什么,对吧?所以,嗯,[清嗓子] 我不确定我是否需要提示它写一个脚本还是什么。我认为它会没事的。我们会看看会发生什么。>> 你介意去核心 SDK 文件并展示你谈到的获取上下文,然后是操作,然后是验证吗?你能展示一下代码以及我们如何配置工具描述吗?>> 是的。所以,嗯,我们还没有做 SDK 部分。所以,到目前为止,我只是在 cloud code 中放了一些 API。是的。是的。>> 对不起,我以为我错过了。那是>> 是的。是的。是的。当然。好的。嗯,但是,是的。所以,好的。你可以在这里看到,嗯,它给了我更多,对吧?嗯,>> 是的,它给了我更多。所以,它,它,它说有 20 只水系宝可梦,对吧?我认为这大致是正确的。我,嗯,嗯,它做了什么?我认为它只是知道。好的。这很有趣。现场直播。嗯,嗯,无论如何,嗯,是的,宝可梦有点分布不均,这,这,我猜是好的 [笑声]。嗯,但是,是的,所以,它会做什么,它会尝试,嗯,编写脚本,因为你不想让它思考太多,对吧?所以,这里是,好的,我要做的是,嗯,让我想想,第二代水系宝可梦在哪里?好的。所以,是的,你可以在这里看到,它知道,好的,世代的开始。它通过 API 获取这些。嗯,我猜它决定不使用我预先构建的 API。嗯,然后,是的,然后运行它,对吧?所以,嗯,我认为我需要改进 cloud.md。但是,无论如何,你可以看到,它能够检查 200 多只宝可梦,然后检查它们的类型,然后,你知道,获取它们的信息,对吧?所以,这是一个关于如何进行代码生成以及如何使用 cloud code 来完成它的快速示例,对吧?所以,嗯,我们将运行这个脚本,然后,嗯,嗯,就像,继续,对吧?所以,嗯,它会给我输出,嗯,是的,基本上我想展示的,让我想想,我们还有大约 15 分钟。嗯,>> 玩宝可梦。>> 时间玩宝可梦。是的。是的。实际上,这是我一直在考虑演示的其中一个。嗯,Cloud Code 玩宝可梦。所以,比如,假设你想做一个代理版本的 Cloud Plays Pokemon。你会怎么做?嗯,我认为你会做的是,你会给它访问 ROM 的内部内存,对吧?所以,假设它想找到它的队伍,它可以搜索内存,而 Pokémon Red 是一个非常好的分布,反向工程的游戏,对吧?所以,它可以搜索内存,说,嘿,这些是宝可梦。嗯,这是我如何找到地图,这是我如何导航它,对吧?所以,这可能是一个给读者的练习,如果你想尝试一下。嗯,有一个,嗯,Node.js GBA 模拟器。嗯,我认为我必须合法地说,你必须去购买 Pokémon Red 并尝试一下。嗯,但是的,我认为,嗯,是的,一个很好的例子。无论如何,这里,它已经获取了所有这些,并列出了它们的所有类型,嗯,是的,你可以看到它是如何使用代码生成来做到这一点的,对吧?所以,嗯,一个使用 cloud code 来原型化这个的快速示例。嗯,现在可以有更有趣的数据。所以,嗯,我确实想留出时间进行演示。所以,我认为我只会,嗯,为了提问。所以我只会,嗯,通过一个例子。比如,假设你在制作竞技宝可梦。竞技宝可梦有很多不同的变量和数据。所以,这是一个来自这个在线库的文本文件,基本上存储了所有宝可梦以及它们的招式,以及它们与谁配合得好,与谁配合不好,以及,你知道,它们被谁克制,以及所有这些事情,对吧?所以,这里有很多数据,对吧?而且它都在一个文本文件中。嗯,这实际上对 cloud code 来说相当不错,对吧?因为我可以这样说,好的,嗯,我会给它更多的数据。通常,我把它放在,嗯,检查数据文件夹。告诉我,我,我想围绕妙蛙花组建一个队伍。你能根据 Smogon 数据给我一些建议吗?嗯,Smogon 是一个在线 API。所以,我不太确定它在这里会做什么,我还没有做过这个查询。嗯,但我们会看看。我认为这会很有趣。嗯,我在哪里?哦,我明白了。嗯,是的。但是我想做的是,嗯,通过这个数据进行梳理,对吧?然后,嗯,从第一原理,没有见过这些数据,如何回答我的查询,对吧?所以,嗯,当它这样做的时候,我会回答任何问题。是的。>> 嗯,首先,工作很棒。嗯,所以这真的是在 cloud code 之上。>> 所以,我的问题是,如果我们部署这个客户,基本上>> 我们是否应该让 cloud code 运行在一个,嗯,一个集群中,或者我们是否能以某种方式将 cloud code 部分取出,只留下 bot 和代理 SDK?>> 是的。所以,让我非常快速地向你们展示一下使用代理 SDK 的样子。嗯,所以,我已经完成了文件系统,对吧?而且,我再次想让你把文件系统看作是一种进行上下文工程的方式,对吧?就像,这是代理的许多输入。所以,我的实际代理文件只有 50 行,对吧?嗯,而且它主要是,嗯,随机的,嗯,样板代码,对吧?就像,我猜,是的,它决定阻止它在自定义脚本目录之外编写脚本。再次,完全向后编码。所以,嗯,是的,你可以看到,它只是运行这个查询,获取工作目录,嗯,然后,嗯,嗯,在循环中运行它,对吧?所以,我可能想把它变成,嗯,一些允许的工具,等等,但它非常简单。而且,嗯,如果我要将其产品化,我做的第一步是,好的,我已经在 cloud code 上进行了测试。它似乎做得相当好。我编写了这个文件。然后我把它放在,有两种方法可以做到。所以,一种是,我认为本地应用程序可能会随着 AI 回归,因为我认为运行它的开销太大了。就像,例如,cloud code 是一个前端应用程序,对吧?就像,它在你的电脑上运行。所以,也许我把它作为一个宝可梦应用程序来转移的方式是,嘿,我有一个应用程序,你安装它,它在你的电脑上本地运行,然后编写脚本。我认为这是一种方法,对吧?嗯,另一种方法是,是的,你有一个,[清嗓子] 在沙箱中托管它。嗯,而且,再次,有很多不同的沙箱提供商,它们使它变得非常容易,比如 Cloudflare 有一个很好的例子,关于使用代理 SDK,它只是像 sandbox.st start,你知道,然后,嗯,bun agent.ts ts,就这样了,对吧?就像,他们抽象了很多东西。嗯,所以你运行,嗯,沙箱,然后你与它通信,嗯,是的,我认为有一些非常有趣的东西,我不确定我是否有时间去接触,但是,嗯,我认为一些有趣的问题是,嗯,是的,就像,你如何做到这种,嗯,服务,现在你只是为每个用户启动一个子,嗯,一个沙箱?有很多,嗯,我认为有很多最佳实践需要解决。我想提请你们注意的一件事是,如果你正在创建一个带有 UI 的代理,比如,假设你有一个,嗯,是的,我的宝可梦代理,我想有一个适应用户的 UI,对吧?比如,有些用户在组建队伍,有些用户在帮助它玩游戏,有些用户只是想要宝可梦的图片。我如何让一个代理实时适应我的用户,对吧?嗯,我的做法是,在我的沙箱中,我会有一个开发服务器,对吧?开发服务器会暴露一个端口。它会在 bun 或 node 或其他东西上运行。它会暴露一个端口。代理可以编辑代码,它会实时刷新,你的用户将与那个网站进行交互。这就是很多网站构建器,比如 lovable 等,它们是如何工作的,对吧?它们使用沙箱,并基本上托管一个开发服务器。所以,为你的用户考虑这一点,如果你想要一个定制的界面,这是一个很好的方法。嗯,好的,让我想想。让我想想。它做了什么。嗯,好的,很酷。好的。所以,嗯,它编写了这个,嗯,脚本,生成了,显示一些基础统计数据,并建议了一个,嗯,嗯,一套招式和一些队友,你可以看到,嗯,看看它做了什么?嗯,控制 E。嗯,是的。好的。好的。所以,你可以在这里看到,它开始搜索妙蛙花,对吧?它开始找到那些类型,那些宝可梦,当它这样做的时候,它也会找到提到妙蛙花的其他宝可梦。所以,它找到了它的队友和它的克星等等,对吧?而且,它在这个过程中找到了有趣的宝可梦,对吧?它可能会与之合作。所以,它做了很多这些搜索,然后它获得了这些资料。它找到了最常见的队友,并编写了一个脚本来分析它,对吧?所以,这一切都基于一个文本文件。当然,我可以稍微预处理一下文本文件。嗯,但是,是的,它为你做了这种有趣的分析,对吧?而且,我将把更多的代码推送到 GitHub 仓库。嗯,我也会在 Twitter 上发布这个。我在 Twitter 上,我是 TRQ212。嗯,我发很多推文。所以,嗯,绝对,嗯,主要是关于代理 SDK 的东西。嗯,但是,是的,我们还有大约 8 分钟,所以我想把剩下的时间用来回答关于任何事情的问题,你知道,我很抱歉我们没有做更多的原型制作。嗯,但是,嗯,在那边。>> 是的,我本来想说这是一个缺陷,你能把它和那个结合起来,只是为了看看代理是否会更具选择性地选择它试图捕捉的队伍吗?>> 是的,把它放到 Cloud Play's Pokemon 中。是的。是的。我确实想玩 CL Code Plays Pokemon。我认为那会很有趣。是的。是的。我认为 Cloud Plays Pokemon,我认为我们尽量保持它尽可能纯粹的推理任务。是的。嗯,其他问题?是的。>> 我很好奇人们是如何盈利的,你知道,就像,你有点,嗯,失去了获得所有利润的机会。>> 是的。我很好奇,自己发布 SDK,这样他们就可以利用使用量。>> 是的。我认为总体而言,尤其是现在,代理有点贵,你知道我的意思吗?因为,嗯,模型刚刚开始变得有代理能力。我们非常专注于拥有最智能的模型,你知道,而且,嗯,通常这只是一个整体的,嗯,SaaS 业务软件的东西。你宁愿向少数真正有困难问题的人收取更高的费用,你知道吗?所以,我认为这仍然很好。就像,你可能应该找到,嗯,你知道,这些困难的用例,但我想说,第一,确保你正在解决人们愿意付费的问题,这是第一步,然后,第二,嗯,是的,我认为你可以按订阅或按代币收费。我认为这最终取决于,嗯,你期望人们使用你的产品多少,你知道吗?与,嗯,你期望他们,嗯,偶尔使用它。就像,cloud code 显然人们使用很多,而且为了,嗯,我们做了一个混合,嗯,如果我们给你一些速率限制,如果你超过了,我们就会进行,嗯,基于使用量的定价。嗯,我认为,嗯,是的,这非常,嗯,取决于你自己的用户群以及,嗯,他们会做什么,但我会说,盈利能力是你应该从一开始就考虑的事情,并围绕它设计你的,嗯,代理,因为很难撤回这些承诺。嗯,是的,在那边。>> 我还没听到你谈论过 hooks,我很想听听你对如何>> 嗯,是的,有很多东西要谈。嗯,hooks 很棒。我们确实提供了 hooks。嗯,hooks 是进行确定性验证的一种方式,特别是,或者插入上下文。所以,嗯,你知道,我们触发这些 hooks 作为事件,你可以在代理 SDK 中注册它们。有一个关于如何做的指南。嗯,你可能会使用 hooks 的例子是,比如,嗯,是的,你可以运行它来验证,嗯,每次的电子表格。你也可以,比如,假设我正在和一个代理一起工作,嗯,代理正在进行一些电子表格操作,而用户也更改了电子表格。这是一个有趣的,嗯,使用 hook 的地方,因为你可以说,嘿,在每次工具调用之后,插入用户所做的更改,嗯,并且,嗯,你正在给它一种有趣的实时上下文变化。所以,嗯,是的,我认为,嗯,嗯,是的,文档中有更多关于 hooks 的信息,也很乐意,嗯,之后再讨论。是的,更多问题。是的。就像我做的>> 我意识到它在工作。>> 我想把我们已经进行的同一个对话>> 转换成一个新的>> 好的>> 也就是说,我遵循了几个步骤,现在它实际上在工作,但我不希望重写所有代码来编写 [清嗓子] 它,因为它有效。>> 是的,当然。是的。所以,比如,假设你已经完成了这个原型制作,你发现了一些有效的东西。我会做的就是,嗯,我在某个地方,cloud.md,显然,嗯,当我尝试做这个一次的时候,它,嗯,没有直接使用我的 API,而是编写了 JavaScript。我应该在我的 cloud.md 中更具体地说,告诉它,嘿,你应该使用这个。嗯,[鼻息] 我,是的,我认为这是其中一件事。嗯,第二件事是,是的,总结一下,你有你需要的辅助脚本,然后,嗯,写一些像 agent.ts 这样的脚本来再次运行测试。是的,更多问题,在灰色区域。嗯,是的,我只是把它放进去了一个宝可梦,我认为它在撒谎,说它使用了脚本来回答。它尝试了几次,我的 SDK 不太好,它尝试了两次,然后它说,哦,这是你的比较表,但它只是因为它是分布式的。你对这种问题有什么建议吗?>> 是的,这是一个好问题,而且,你知道,嗯,我认为有一些混乱,对吧?嗯,我认为,嗯,如果一个代理知道答案,而你想,嗯,有点,嗯,对抗它,就像,好吧,比如,不,现在是第九代,而且,妙蛙花的统计数据已经改变了,而且有这个新的,嗯,角色,嗯,这很难。我实际上认为,一种方法是使用 hooks。所以,你可以说,比如,嘿,嗯,如果它返回了一个没有编写脚本的响应,你知道,你可以检查它,你可以说,给它反馈,比如,请确保你编写了一个脚本,请确保你阅读了这些数据,对吧?而且,你可以使用 hooks 来,嗯,提供这种反馈,就像在 cloud code 中一样,我们有这些,嗯,规则,比如,确保你在写入之前读取一个文件,对吧?所以,添加一些确定性。它绝对可以是,就像我说的,这是一门艺术,你知道,有时,你知道,是的,也许,比如,比如,编写课程,我猜,大概,[笑声] 是的,在灰色区域>> 你们是如何处理大型代码库的,我正在处理一个,嗯,超过 5000 万的代码库,所以>> bre 工具不起作用,真的>> 嗯,所以,我不得不构建,嗯,我自己的,嗯,语义索引类型的东西来帮助解决这个问题,对吧?>> 有没有像 Adtropic 这样的东西,可能在考虑如何让它更原生于产品,比如,你知道,几个月后,我正在写的东西就会消失,或者,嗯,你们是如何考虑的?好的,你的最后一个问题,几个月后,你认为它会消失吗?一般来说,是的。是的。 [笑声] 任何时候你问关于 AI 的问题,是的。嗯,我认为,嗯,语义搜索,这是一个 cloud code 问题,而不是一个安全问题,但我很乐意回答。就像,我们,嗯,你知道,语义搜索有权衡。它更脆弱。嗯,我认为你必须,嗯,索引和,嗯,搜索,而且,嗯,它不一定,模型没有经过语义搜索的训练,所以我认为这就是,嗯,问题,你知道,图,它是在图上训练的,因为,嗯,它很容易做到,但是,嗯,语义搜索,你正在实现你的定制查询,嗯,对于非常大的代码库,你知道,我们有很多客户在大型代码库中工作。我认为我所看到的是,嗯,他们只是做了,嗯,好的 cloud.md。你开始,你知道,尝试确保你在你想要的目录中开始,有好的,嗯,验证步骤和 hooks 和链接等等。所以,嗯,你知道,这就是我们所做的。我们没有,你知道,一个定制的,我们自己使用 cloud code,对吧?所以,嗯,是的。>> 好的。是的。最后一个问题。>> 我们不幸必须关闭了。实际上。给大家鼓掌,Tariq! [掌声] [音乐] >> [音乐] >> 热。