用 Vercel 构建代理 AI:Saltbox One

VVercel
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00[无声]
00:00:30
00:00:53>> 嗨,欢迎大家来到新一期的 Vercel 社区分享会。
00:00:57我是今天的主持人 Jacob Paris。
00:01:00我们举办这些活动,是为了展示来自社区、
00:01:03客户以及所有在 Vercel 上构建酷炫项目的开发者们的精彩成果。
00:01:08我们正在 LinkedIn 上进行同步直播,
00:01:10但如果你想参与聊天互动,请访问 [community.com/live](https://community.com/live),
00:01:15你就能在页面顶部看到本次分享会。
00:01:18在最后,我们会留出一些时间进行问答,
00:01:21所以请随时在直播聊天室中提出你的问题。
00:01:25现在我想介绍一下我们的嘉宾。
00:01:27我们邀请到了来自 Saltbox Management 的 Shane Smith。
00:01:30>> 嗨。
00:01:32>> 嘿,Shane,今天过得怎么样?
00:01:35>> 挺好的,你呢?
00:01:37>> 我也挺不错的。
00:01:38是的,那么今天你给我们准备了演示吗?
00:01:42>> 是的,我准备了一些内容要过一下,
00:01:46先介绍一点背景,最后再进行现场演示。
00:01:48>> 太棒了,如果你准备好开始的话,我可以帮你分享屏幕。
00:01:53>> 没问题,正合适。
00:01:57好的,在屏幕加载的过程中,我先简单介绍一下背景。
00:02:04正如 Jacob 所说,我叫 Shane Smith,是 Saltbox Management 的 CTO。
00:02:09Saltbox 是一家服务型公司。
00:02:12实际上,我们大部分时间都在为客户
00:02:16落地和实施 Salesforce 技术。
00:02:18而在过去几年里,我们一直在为自己打造一款产品。
00:02:24随着开发的深入,我们已经到了开始向客户
00:02:28以及更大范围的市场去推广它的阶段。
00:02:31所以今天,我将分享我们是如何做到这一点的,特别是如何利用 Vercel
00:02:37以及 Vercel 为我们提供的一些不同的技术。
00:02:41正如大家在屏幕上看到的,
00:02:42我们也会探讨 AI Gateway。
00:02:44现在让我们来聊聊我们想解决的痛点,
00:02:49我们有一批正在使用 Salesforce 的客户。
00:02:54特别是在这个 Agent(智能体)时代,这些用户希望
00:02:58能用更自然的语言与 Salesforce 进行交互。
00:03:02因此,在第一个使用场景中,我们要解决的痛点
00:03:06是针对业务用户的。
00:03:07他们希望能够用通俗易懂的日常语言,与他们的 Salesforce 产品生态进行对话,
00:03:10从而更快地解答他们遇到的问题。
00:03:16而在第二个场景中,我们是在为建设者们解决问题,也就是那些
00:03:20在 Salesforce 内部实际进行配置和定制开发的人,
00:03:23这在很大程度上也就是我们自己。
00:03:25这是我们开启这段旅程的起点——我们希望
00:03:28通过 Agent 让 Salesforce 的开发工作变得更轻松。
00:03:31以上就是我们试图为自己
00:03:34和我们的用户解决的两个核心痛点。
00:03:35而这一切的背景在于,做这件事其实相当有挑战性。
00:03:41这也是为什么大家会雇佣像我们这样的专业服务公司的原因。
00:03:45因为理解 Salesforce 的上下文、理解客户公司
00:03:49以及他们具体项目的背景,并尝试将其转化为
00:03:54符合最佳实践、可投入生产的高可靠、可扩展的代码,真的非常困难。
00:03:58所以你不能随便找个大语言模型
00:04:01提一个关于 Salesforce 的问题,这可能也能给你一些解答,
00:04:05但绝不会是直接可用于生产环境的代码。
00:04:07这就是我们想要达到的目标。
00:04:12在朝着这个方向前进的过程中,我们只有一个相对较小的产品团队,
00:04:16却要打造这样一个野心勃勃的产品。
00:04:19因此,我们希望把精力集中在产品本身,而不是底层的架构上。
00:04:24我们希望底层架构能“开箱即用”,并提供我们所需的各种能力。
00:04:28这就是我们的挑战,也是我们押下的赌注:我们相信
00:04:33我们可以在 Vercel 的基础设施上构建起这个可扩展的平台,并以此赋能我们实现目标。
00:04:40接下来我将谈谈我们具体是如何做到的。
00:04:44我们的高层架构基本上可以分为三个层级。
00:04:48在最顶层,我们有一个 Next.js 应用程序,它作为
00:04:53面向用户的 UI 展现层。
00:04:56它具备了当今时代
00:05:02一个 AI Agent 所应有的全部常见流式 UI 交互能力。
00:05:04然后是第二层,也就是我们的边缘(Edge)和服务器端能力。
00:05:09我们使用 AI SDK(特别是最新的版本 6)来控制 Agent,
00:05:16并驱动 Agent 运行环(Agentic Loop)以及其中内置的所有工具链。
00:05:21如果你还不熟悉这个 SDK 并且正准备涉足 Agent 领域,
00:05:25我强烈推荐你去试用一下。
00:05:28它让你能够接入并调用市面上的任何大语言模型。
00:05:34它以一种模型无关的方式,提供了
00:05:37构建 Agent 运行环所需的框架和脚手架,
00:05:40并在整个过程中为 Agent 赋予非常强大的工具调用能力。
00:05:43而第三层则是真正的 AI 层,也就是接入我们想要使用的任何模型。
00:05:51这也是我们最初在走这条路时需要做出的抉择,
00:05:56我们想要搞清楚究竟什么才是最适合特定场景的模型。
00:06:00而我们得出的结论是,并没有一个单一的模型
00:06:04能完美适用于所有的场景。
00:06:06因此,我们希望以一种模型无关的方式来构建它,以便我们可以随时插拔
00:06:10并在新模型发布时,针对不同的场景即插即用最合适的模型。
00:06:14这样无需对底层的脚手架做出巨大的改动就能直接接入新模型。
00:06:20为此我们选择了 AI Gateway,
00:06:23稍后我会对此展开更详细的介绍。
00:06:25接着,正如大家在底部看到的,我们还有一些后台服务
00:06:30来支撑整个基础设施的运转。
00:06:35现在让我们更深入地了解一下 AI Gateway。
00:06:38你可以在左侧看到一段伪代码脚本,展示了这看起来大概是什么样的,
00:06:43但基本上你只需要一行代码说:
00:06:46“我要接入这个网关。”
00:06:49一旦你完成了这一步,你就可以通过这个网关
00:06:51随心所欲地使用任何你想要的模型了。
00:06:55在很多情况下,我们会使用 Claude Opus,但在另外一些情况下,我们也会在不同的场景中使用 Sonnet、GPT 或是 Groq。
00:07:00[无声]
00:07:04这就是 AI Gateway 的强大之处之一:你可以使用任何你想要的模型,不会被锁定,从而获得极大的灵活性。
00:07:08你就可以使用任何你想用的模型,不会被锁定,
00:07:10从而能够拥有这种灵活性。
00:07:12而这让我们可以实现一些非常直观的、
00:07:18基于问题复杂度和类型的路由机制。
00:07:22因此我们在这里加入了一个分类器,以便判断
00:07:27用户提出的问题有多复杂?
00:07:29他们只是在对一句“你好”寻求简单的回复,
00:07:32还是在提出更复杂的要求,比如试图为用户
00:07:37构建一个完整的流程?
00:07:38根据这些,我们可能会将其路由到不同的模型。
00:07:40这使我们能够实现快速响应,
00:07:44根据我们提供的模型来匹配相应的复杂度,
00:07:49并给用户提供恰当的回复。
00:07:50在如今这个时代,关于 Agent 的体验,
00:07:59现在大多数用户通常会有两种不同的期待。
00:08:04一种是向用户进行流式实时响应,
00:08:07这样你就能实时看到正在发生的事情。
00:08:09但同时,如果遇到了一个非常复杂的请求,
00:08:14可能需要几分钟、甚至几十分钟或几小时,那又该怎么办?
00:08:20所以,从产品的角度来看,我们是从流式传输这一侧开始的。
00:08:23这正是 AI SDK 的闪光点,它最初是在流式传输端发力的。
00:08:28在左侧,你可以看到一个示例问卷:
00:08:31“根据会议生成用户故事”。
00:08:33这是我们在构建这个工具时的首批用例之一,
00:08:37即获取所有上下文并为开发人员提供用户故事。
00:08:41但当我们开始接触更复杂的业务需求时,比如在 Salesforce 中
00:08:45搭建起一个完整的 B2B 店面,或者设计一个带有自定义页面的 Experience Cloud 站点,
00:08:51这些任务花费的时间,可比流式传输到浏览器所需的几分钟要长得多。
00:08:56因此,随着我们在 Vercel 平台上的技术走向成熟,
00:08:59我们开始让用户在 UI 中拥有单一的体验,
00:09:05但同时能够根据复杂度,
00:09:09既进行流式传输,又启动后台进程。
00:09:11而这些在 Vercel 基础设施内部都是支持的,
00:09:14这不仅依赖于平台本身,也使用了一些
00:09:19关于沙箱以及其他我稍后会谈到的功能。
00:09:24所以从工具的角度来看,我认为使用 AI SDK
00:09:28这类工具的超能力之一,在于你拥有了一个可以随时接入的框架。
00:09:34我们一开始只有几个工具,然后随着时间的推移,
00:09:39在这些类别中构建了越来越多的工具,这让我们真正拥有了
00:09:44与用户以及 Salesforce 环境进行交互的抓手。
00:09:48如你所见,我们拥有文档生成、搜索、
00:09:52故事生成、集成,以及最核心的这个 Salesforce 功能,
00:09:57它允许我们去理解环境、验证环境、查询环境,
00:10:01并在这些环境中进行部署。
00:10:05这真正赋予了这个 Agent 生命,而不仅仅是直接对接一个 LLM。
00:10:10那么,让 Agent “拥有双手”
00:10:16具体又是如何运作的呢?
00:10:18其实,在 Vercel 生态系统中,
00:10:22他们最近一直在推出的一项较新的功能就是这个沙箱。
00:10:27如果你熟悉 Salesforce,
00:10:30并思考过如何与 Salesforce 交互,那么在很多时候,开发人员
00:10:34以及技术团队,都会使用 Salesforce 的 CLI。
00:10:39这使他们能够在终端级别与 Salesforce 交互,
00:10:43启动沙箱、启动 B2B 商业店面以及进行部署。
00:10:49这使得与 Salesforce 的交互变得非常容易。
00:10:51但这在转瞬即逝的浏览器中是很难实现的,对吧?
00:10:55你登录了任何站点,每次都必须重新登录,
00:10:59这让与 Salesforce 的交互变得非常困难。
00:11:01因此,我们开始利用 Vercel 沙箱的这项功能,
00:11:06我们允许用户对他们的环境进行身份验证。
00:11:10启动一个沙箱,使我们能够实际与文件系统进行交互,
00:11:16并允许我们把正在编写的代码,或者想要处理的文件,
00:11:20实际部署到该沙箱中,然后使用 Salesforce CLI
00:11:26在这个沙箱中将这些文件推送到 Salesforce 里。
00:11:30这可能是一个特定于 Salesforce 生态系统的用例,
00:11:35因为他们有 Scratch Org(暂存组织)和沙箱的概念,
00:11:40但我认为,随着我们越来越多地深入到 Agent 生态系统的编码端,
00:11:43沙箱这一概念是绝对至关重要的,
00:11:49因为它需要,或者说它为我们提供了
00:11:55传统上构建 Agent 和 LLM 所依赖的文件结构。
00:11:58所以我认为,在涉及你能实际做些什么的时候,
00:12:01它赋予了你很大的灵活性。
00:12:06最后,总结一下我们一直在构建的几大支柱,
00:12:10v0 对我们的团队来说一直是一项巨大的助力,对吧?
00:12:17我们实际上在两个不同的层面上使用它。
00:12:18我们从产品的角度使用它,来构建我们的产品 Saltbox One。
00:12:23我们还在服务侧使用它,用来构建 Salesforce。
00:12:27所以,我们实际做的是将这两者结合起来。
00:12:31当你在 S1 中,并且拥有你正在尝试做的事情的上下文,
00:12:35拥有所有的 Salesforce 信息,拥有实际去收集
00:12:41所有关于你 Salesforce 组织信息的能力时,我们与 v0 进行了紧密的集成,
00:12:45你可以把这些信息作为上下文传递给 v0。
00:12:51这让 v0 能够切实地帮助你生成代码。
00:12:54所以它不仅仅适用于 React,在给定正确的上下文和
00:12:58相关信息的情况下,它也可以做像 Apex、LWC 和 Flow 这样的事情。
00:13:01我们将它们紧密结合在一起,
00:13:05并创造出了一种非常棒的无缝集成体验。
00:13:09如果我们需要停顿一下并思考,我们会给其他团队什么建议?
00:13:14以下是我的四点心得。
00:13:17第一是使用网关,别再为使用哪些模型争论了,
00:13:21开始在合适的场合、为合适的工具选择合适的模型。
00:13:25这会带给你极大的灵活性和能力。
00:13:28第二是流式传输只是个开始。
00:13:31这是很多应用开始的地方,那些在 Agent 世界中
00:13:35更偏向初创阶段的应用。
00:13:38但实际上,你同样需要这种持久的后台运行能力。
00:13:42这就是你前进方向的上限所在。
00:13:45第三就是我刚才谈到的沙箱。
00:13:48让它落地,赋予你的 Agent 命令行界面(CLI)访问权限,
00:13:52这真的能给你带来很多超能力。
00:13:55最后一个是:找到合适的平台。
00:13:57所以对我们来说,那就是在 Vercel 上进行构建,
00:14:01这让我们无需专注于基础设施。
00:14:04而是让我们可以专注于我们试图在 Saltbox One
00:14:07大规模推出的功能和能力。
00:14:12那么,接下来我将直接进入演示部分,
00:14:19体验一下对话式的 Salesforce 使用流程。
00:14:24稍微聊一下用户故事的生成,
00:14:26并看看智能体运行时的实际效果。
00:14:29所以,在我切换屏幕时,请稍等片刻。
00:14:34好的,太棒了。
00:14:38现在进入 Saltbox One,这是我们的一个演示组织。
00:14:44你可以看到,左侧呈现的是
00:14:48我们所谓的“项目”,这些项目为我们提供了不同的上下文。
00:14:51而在中间,则是我们全新的对话面板。
00:14:56所以我们可以把焦点放在这里。
00:14:58向下滚动时,我们可以看到所有不同的项目。
00:15:01这使我们能够将正确的上下文加载到对话中。
00:15:05我们在底部整齐排列着工具,
00:15:08这也是我们所有集成传入的地方。
00:15:12然后在更下方,我们实际上有能力添加上下文。
00:15:16我们可以在这里直接拖入会议记录、用户故事、工件、
00:15:20Salesforce 组织,或者是该 Salesforce 组织中的特定内容。
00:15:23这让我们可以进行非常丰富的对话。
00:15:27所以,我打算先从一个比较复杂的例子开始。
00:15:33然后在其运行期间,我们会切换到一些
00:15:37我提前运行好的内容,以便我们可以进行讲解。
00:15:40在这个例子中,我们想在 Salesforce 中创建一个屏幕流,
00:15:45允许我们输入案例评论,并希望它能提供一个确认屏幕。
00:15:51虽然这不是一个超级复杂的需求,但确实需要你了解工作流,
00:15:56知道如何配置,知道如何实现,
00:15:58并且知道如何去调试它。
00:16:00所以,在去讨论其他对话的同时,我们要让智能体开始处理这个任务。
00:16:03在跳转之前,你可以看到它正在检索一些上下文文件。
00:16:06这就是 Saltbox One 的一些独门秘诀,因为我们拥有
00:16:09大量关于 Salesforce 的信息、操作方法,
00:16:13以及使其真正正确运行的剧本。
00:16:16你甚至能看到它非常快速地反馈说:
00:16:19“嗨,好消息,我检查了您的实例。”
00:16:23“目前在案例评论上没有任何自动化,因此我们可以继续。”
00:16:25接着它会问我几个跟进的问题。
00:16:29我会说:“是的,你可以使用默认组织。”
00:16:32然后让它继续,它就会开始制定一个计划。
00:16:37不过在它处理的时候,我其实想跳转到
00:16:41另一个不同的对话里。
00:16:44这其实是我们的项目中最常被客户使用的
00:16:47功能之一,那就是引入会议记录的能力。
00:16:52在这个例子中,我有一个名为 Halston 的演示品牌。
00:16:56我录制了一次会议,期间我们讨论了一些关于
00:17:00构建 Salesforce 能力的新需求。
00:17:03我正向它询问一些关于我们组织的情况,我希望它基于现有的内容,
00:17:07并基于 Salesforce 开箱即用的
00:17:11功能来做分析。
00:17:16表面上看这是一个挺直接的需求,
00:17:18但如果你仔细想想,它其实相当复杂,因为它要求
00:17:21了解你环境的细节,并且你必须知道什么是开箱即用的,
00:17:26什么又是定制的,才能做出正确的决定。
00:17:30因此,在这个例子中,我们提出了这个问题,你可以看到它反馈道:
00:17:33“以下是该讨论中整理出的会议需求。”
00:17:37“这是您目前拥有的内容。”
00:17:41“这是您的数据模型”,并提供了一个漂亮的 Mermaid 图表供我们查看并
00:17:43确认这就是当前的现状。
00:17:46然后,它实际上开始给出建议。
00:17:48比如“S1 会如何处理”,会将其拆分为这些阶段。
00:17:52它会从第一阶段的数据模型开始,存储可见性订阅,
00:17:57然后给你一些建议和一些关键问题。
00:18:02而且我能够与它进行来回沟通。
00:18:06所以,我给出了诸如“这些问题的答案在这里”的回复。
00:18:07最终,它为我提供了一份非常漂亮的文档,将
00:18:12需求拆分到了这些阶段中,细节非常丰富。
00:18:16我可以把这个直接转化为代码。
00:18:19也可以把它转化为用户故事或任何其他需求。
00:18:22所以,这正是 Saltbox One 的超级大招之一,因为我们是
00:18:27从服务提供商的角度来构建这个系统的。
00:18:31因此我们知道如何实施 Salesforce。
00:18:33我们知道最佳实践。
00:18:35我们知道如何去推进。
00:18:37而所有这些都已经融入到了我们赋予
00:18:38Saltbox One 的智能体上下文中。
00:18:43现在,当我们跳回到最初的对话时,
00:18:44我们可以看到,我们对默认组织说了“是”。
00:18:49它已经梳理了刚才提到的所有上下文,
00:18:52找出了最合适的方法。
00:18:55我们可以看到它已经创建了一张精美的小卡片供我们审查。
00:18:57现在,这张卡片就是我们控制智能体行为的方式。
00:19:02也就是,你想让智能体去制定这个计划,
00:19:07但不希望它自己去运行。
00:19:11我们仍然需要把“人”保留在反馈环路中。
00:19:13因此,我们制作了这个组件,你可以清楚地看到
00:19:15它将要部署什么,以及如何进行部署。
00:19:19而你所需要做的,就是直接点击“批准并执行”。
00:19:22当然,因为我是在做演示,所以它可能无法正常部署。
00:19:25但实际上你可以直接进行部署。
00:19:29在与智能体进行来回沟通并
00:19:33解决问题之后,你可以点击“重试”。
00:19:37如果它已经部署了,如果你不喜欢这个版本,
00:19:38你实际上还可以回滚到之前的版本。
00:19:43在进行最后一个实时演示之前,
00:19:44我还要在屏幕上展示最后一个用例,
00:19:50就是快速审查你组织的架构。
00:19:55这是我们经常被问到的一个非常普遍的问题,即:
00:20:00“帮我们理解一下架构,或者帮我们理解一下其中的技术债。”
00:20:03“我们该如何准备在 Salesforce 环境中
00:20:04走上这种智能体的道路?”
00:20:09这些看似都是很简单的问题,但实际上也是非常有深度的问题。
00:20:10所以,你可以提出这样的问题,
00:20:15让它梳理你的许可环境、关键发现,
00:20:18并绘制出跨机会的对象模型。
00:20:22而且,我们在回复中始终会做的一件事,
00:20:27就是开始标记出你可能需要审查的内容。
00:20:30在这个例子中,我们有类似
00:20:34跨所有对象的未记录字段等文档。
00:20:38看起来我们有很多自定义字段,也有关于如何处理的建议,
00:20:40以及我们实际可以深入的下一步行动。
00:20:45既然如此,我可以继续说:“我想执行那个操作。”
00:20:48它就会开始把焦点具体缩小在
00:20:53B2B 商业流程上,以及所有事物之间是如何开始交互的。
00:20:57它会对这些环境进行查询,
00:21:02看看周围的所有生态系统,
00:21:05然后整理出一种综合的响应,
00:21:07你可以继续进行对话。
00:21:10现在,在这个智能体运行的时候,
00:21:12我会展示最后一个例子,再来一个用例。
00:21:16如果跳回到一个新的对话,我可以直接
00:21:21拖入一个 Confluence 页面,它其实是
00:21:27我们之前某次对话的产出。
00:21:32这上面有关于该解决方案具体细节的完整长文。
00:21:35我可以快速地下达指令,比如“我想为
00:21:39这份文档中的第一阶段创建用户故事”。
00:21:43再次强调,这里的特别之处在于,它不仅整合了
00:21:46这份文档的上下文,还整合了你的项目、你的 Salesforce 环境、
00:21:50我们的最佳实践、Salesforce 生态系统,
00:21:55并决定将这个第一阶段拆分为
00:21:59易于管理的用户故事的最佳方式是什么,写下初始声明,
00:22:03例如“作为用户,我希望能够...”,
00:22:08并列出几点具体的验收标准。
00:22:14这为你编写这些用户故事提供了一个非常好的起点。
00:22:18一旦这些用户故事生成,你就可以进入
00:22:22更深层次的细节,如果需要,可以
00:22:24与智能体进行往复沟通来进一步完善。
00:22:28现在那个任务正在运行,
00:22:32我跳回到之前刚刚完成审计的对话中。
00:22:36我们进行了一些查询,整理出了 B2B 审计流程。
00:22:40你可以看到,我们整理出了一个相当不错的评估,
00:22:45以及关于技术债是什么、
00:22:48或者我们应该优先处理什么的建议。
00:22:51所以,你可以开始看到所有这些是如何串联在一起的。
00:22:55当我跳回到我的示例时,
00:23:00似乎我的屏幕冻结了,请稍等一下。
00:23:11来了。
00:23:14在最后一个例子中,我们整理出了这些用户故事。
00:23:18你可以看到这些用户故事显示在左侧,
00:23:22而详细信息显示在右侧。
00:23:24这使我们能够将其集成到 Asana 或 Jira 中,
00:23:27并支持整个开发生命周期的流畅运作。
00:23:32以上就是 Saltbox One、我们如何使用 Vercel 生态系统、
00:23:39如何使用沙箱功能、网关功能
00:23:44以及 v0 来构建这样一个应用,
00:23:49并真正专注于为客户提供特性和功能的简要概述。
00:23:53而不需要过多关注背后的基础设施。
00:23:56那么,Jacob,有什么问题需要我们探讨吗?
00:24:02>> 是的,是的,感谢你带来这么酷的演示。
00:24:06我这里有几个问题。
00:24:08首先,我很好奇智能体的权限是如何运作的。
00:24:12S1 是有自己的权限(比如当你设置应用时,
00:24:16它会获得对 Salesforce、Confluence 等的一定访问权限)?
00:24:20还是基于提问的人的权限?
00:24:23因为一旦你接入了所有这些企业级
00:24:26SSO 集成,这确实是一件挺棘手的事情。
00:24:29所以我很好奇你们在这个问题上做出了什么决定。
00:24:32>> 是的,在思考同一个问题时,我们实际上来回讨论了很久,
00:24:36最终我们决定采用基于用户的权限。
00:24:40所以当用户进来时,他们有能力以自己的用户身份进行认证。
00:24:45因此,他们在 Salesforce 或任何其他应用中执行的任何操作
00:24:50都代表他们特定的用户,使用他们的 OAuth
00:24:53或 API 密钥,这取决于我们所支持的平台。
00:24:57这让我们能够控制“是您的用户执行了该操作”。
00:25:03但在某些平台上,比如 Salesforce,
00:25:06我们实际上还有另外一层保护,
00:25:09那就是每次连接 Salesforce 实例时,
00:25:12它最初都是只读连接。
00:25:15然后,你可以将其切换为写入权限。
00:25:19一旦切换,对于在 Salesforce 环境中
00:25:23进行的任何更改,您都将始终看到那个批准屏幕。
00:25:26>> 好的,所以在 Salesforce 端,为了可审计性,
00:25:31用户执行的任何操作都需要他们点击。
00:25:37也就是说,当你有一个写入操作时,它会弹出批准提示。
00:25:39用户必须明确点击“接受并继续”才能让智能体执行。
00:25:44>> 没错。
00:25:44>> 在 Salesforce 上,这会显示为是由该用户完成的。
00:25:49>> 没错。
00:25:50>> 好的,太完美了,太完美了。
00:25:51我还很好奇,智能体本身是如何使用沙箱的?
00:25:57比如,你们是否有某些工具调用,
00:26:02在内部隐式地调用沙箱作为其实现的细节?
00:26:06还是说智能体拥有沙箱工具,并且它知道
00:26:11有些事情必须在沙箱中完成,那也是它运行 CLI 或 API 的地方等等。
00:26:16我很想知道你们是如何设置的。
00:26:19>> 是的,我们实际上有两个主要工具使用了官方的
00:26:25Vercel 沙箱,稍后我也会谈到一个独立的沙箱。
00:26:28第一个官方工具是,当你启动 scratch 组织时,
00:26:33我们总是会启动一个 Vercel 沙箱,并使用 SF CLI 来创建该 scratch 组织。
00:26:37第二个用例是,当你与 Salesforce 进行交互,
00:26:43以便在环境中进行验证或部署新内容时。
00:26:48这总是通过带有 Salesforce CLI 的 Vercel 沙箱来完成。
00:26:51在我们看来,这是最简单的方法来做部署
00:26:54和进行其他活动,也就是使用 CLI,而 Vercel 沙箱让我们可以非常轻松地
00:26:58安装它并继续使用现有的沙箱。
00:27:04所以我们有这两个使用官方 Vercel 沙箱的工具,然后我们实际上
00:27:08还有一个更小的内存中沙箱,每次对话都有,
00:27:14随着他们在智能体上的每一次轮次,我们用它来把所有文件整合在一起,
00:27:20并让智能体能够去理解那个内存沙箱中有什么。
00:27:25所以算是两种不同的版本。
00:27:26>> 好的,你们有对沙箱进行任何形式的
00:27:32网络限制,以限制它可以访问的内容吗?
00:27:36那上面的安全配置文件看起来是什么样的?
00:27:40>> 在 Vercel 沙箱那一边吗?
00:27:42>> 是的,是的。
00:27:43>> 是的,Vercel 沙箱,我是说,它们启动时非常干净。
00:27:47所以我们会加载我们需要的文件,并允许它只访问这些内容。
00:27:52所以它绝不像我们的代码库,它就像是 S1 会去
00:27:56实际提取任何它已经整理好的、基本上是计划好的内容。
00:28:02就拿我展示的流(flow)为例,它会提取这些文件。
00:28:05它会创建 Salesforce 在进行部署时
00:28:10所预期的目录,并将这些文件放入该目录中。
00:28:13然后它会从那里开始部署。
00:28:14所以实际上,它拥有的东西非常有限,只有我们在合适的时间给它的东西。
00:28:20>> 我们的 YouTube 上收到一个问题,定价模式是怎么设置的?
00:28:25你们如何处理定价?
00:28:28是基于使用量、基于席位,还是像 Soapbox 那样?
00:28:32>> 是的,这是一个很好的问题。
00:28:33我们目前仍在敲定这个方案,因为我们正在向客户
00:28:38推广这个产品,并试图找出正确的方法。
00:28:41我们目前是采用基于用户或基于用户席位的定价
00:28:48并在该层级内对你可以进行的对话数量、
00:28:53多少数据、以及多少次交互进行限制。
00:28:55这就是我们目前的起点。
00:28:59但正如大家在这个生态系统中所经历的那样,
00:29:02在涉及基于 Token 的工具时,事情变化得非常频繁且迅速。
00:29:07所以这就是我们的起点,也就是基于用户席位的门槛。
00:29:11>> 是的,是的,我认为很难找到一个完美的模式,既能随着
00:29:16你的使用量和客户一起扩展,又能兼顾你自己的成本支出。
00:29:20所以确实有些难度。
00:29:23让我们看看,这里还有另一个问题。
00:29:24你们如何决定将哪些问题路由到各个模型?
00:29:29所以有些特定的任务你们会路由到 Opus。
00:29:31也有些特定的任务你们会路由到 Sonnet。
00:29:33你们如何决定这些路由?
00:29:35你们是使用像评估(eval)系统这样的数据来支持,还是通过手动测试
00:29:41并发现,嘿,Sonnet 已经足够应付这些类型了?
00:29:45你们的方法是什么?
00:29:46>> 是的,这个问题的答案一直在演变。
00:29:52我们目前的情况是,在初始问题上有一个确定性的分类器
00:29:57它能帮助我们根据用户的提问,来理解这个问题有多复杂。
00:30:03他们会说像 "计划" 这样的词吗?
00:30:04他们会说像 "调查" 这样的词吗?
00:30:07所以使用这种方法,因为它们快速而且免费,对吧?
00:30:12你能够非常快速地捕捉到这些。
00:30:15所以我们是从基于正则表达式或确定性的方法开始的。
00:30:20如果我们没有在那里找到匹配项,那么我们就会转向大模型分类器,我们会说,
00:30:27好的,根据这里面的内容,如果字数超过了某个阈值等等,
00:30:32我们就把它传给大模型来实际分类它有多复杂。
00:30:38那个模型非常快,大约需要 300 毫秒来进行这种分类。
00:30:42然后它会帮助我们把它路由到正确的模型,无论是 Opus、Sonnet 还是其他的。
00:30:47然后我们也有一个后备方案。
00:30:49如果事情变得太复杂,而用户,你知道的,再次提出了相同的问题,
00:30:54或者我们还有其他规则,那么它就会退回到我们最强大的模型
00:30:59并设定一个分钟级的阈值,以便用户在提问时能得到正确的回复。
00:31:06>> 好的。那你们目前在路由模型中,是用 Haiku 来做那个分类器吗?
00:31:11>> 是的,对于最开始的那个,是的。
00:31:13>> 酷,酷。
00:31:15好的。那么,你也是 v0 大使计划的成员。
00:31:20这给你带来了什么帮助?你会推荐它吗?
00:31:23在构建这个产品的过程中,到目前为止你有没有从这个计划中获得价值?
00:31:28>> 是的,绝对有。
00:31:30如果有任何听众有兴趣更贴近社区,我高度推荐它。
00:31:36我已经为不同地区的人们举办了几次活动了。
00:31:41我大约在几个月前,或者可能是一个月前去墨西哥做了一次现场活动,
00:31:48在现场和那里的一大群人一起体验了 v0。
00:31:51就我个人而言,我从 v0 大使计划中获益良多,
00:31:56因为我可以直接接触到产品团队的成员,
00:31:59同时也能接触到其他在这一领域和我一样专注的人。
00:32:03所以像这样互相碰撞想法,真的非常有价值。
00:32:08>> 酷。既然你可以直接接触到产品人员,
00:32:13我相信你发了很多反馈过去。
00:32:16有什么反馈是你想在这里公开向他们提问的吗,
00:32:22好让他们当场感受一下压力?
00:32:25>> 我还是客气一点吧。我认为最大的一个问题,我们之前也讨论过,
00:32:30就是给 v0 引入更多的功能,
00:32:34特别是那些开发者在本地 IDE 环境中已经习惯的功能。
00:32:41在过去的几个月里,我们已经在 v0 内部获得了沙箱功能,
00:32:45并且有能力去启动它并拥有一个真实的运行环境,
00:32:49这是迈向正确方向的巨大一步。
00:32:51我认为随着我们继续沿着这条路走下去,它会继续变得更好。
00:32:55所以,我的建议就是继续沿着这条路走下去。
00:33:00>> 棒极了。是的,这是一个长期持续的过程。
00:33:02它以前是一个非常、非常简陋的浏览器集成开发环境(IDE),
00:33:06而现在它已经像是一个完整的 VS Code 和 Monaco 的集成了。
00:33:10它每个月都在变得越来越好。
00:33:14>> 没错。
00:33:15>> 好的。我想我们这里的问题就这些了。
00:33:18所以,我想非常感谢你过来做这么精彩的演示。
00:33:24如果人们想要跟进或了解更多关于 stopbox 的信息,可以在哪里找到你?
00:33:32>> 我在 LinkedIn 上最活跃。
00:33:34所以,如果你想和我建立联系,可以在那里发条消息。
00:33:37告诉我你看了这次分享。
00:33:39我就会知道你是谁,也很高兴能与你联系并回答任何问题。
00:33:44>> 棒极了。是的,我们会在聊天栏里留下你的 LinkedIn 链接。
00:33:48所以,总之,非常感谢你的到来。
00:33:52>> 好的,非常感谢。
00:33:55>> 好的。也谢谢其他所有人的参与。
00:33:59我们很快就会在... 举办另一场社区活动。
00:34:05让我查看一下日历。
00:34:10我本来应该提前看好这个的。
00:34:15噢,它将在周四举行,但实际上还没有添加到我们的日历中。
00:34:20所以,是的,过两天再来看看吧。
00:34:22我们还有另一场活动要举行。
00:34:24在那之前,我们在社区里再见。
00:34:27祝大家今天过得愉快。

Key Takeaway

Saltbox One 通过 Vercel 基础设施、AI SDK v6、AI Gateway 以及 Vercel 沙箱技术,构建了一个模型无关、人机协同的 Salesforce 自动化开发与配置智能体平台。

Highlights

  • Saltbox One 平台采用三层高层架构,包含顶层 Next.js 用户界面、使用 AI SDK v6 进行智能体循环控制的边缘与服务器端,以及通过 AI Gateway 接入的多模型 AI 层。

  • AI Gateway 支持通过单行代码接入并灵活切换 Claude Opus、Sonnet、GPT 和 Groq 等大语言模型,从而实现基于问题复杂度的动态路由机制。

  • 利用 Vercel 沙箱(Sandboxes)技术,该系统允许用户进行环境身份验证并调用 Salesforce CLI,实现将代码与文件直接部署至 Salesforce 暂存组织。

  • 为保障企业级数据安全与可审计性,所有写入操作均采用基于用户的 OAuth 授权,且必须在前端组件中通过人工点击“批准并执行”后方可触发。

  • 系统在接收到初始用户提问时,先通过基于正则表达式的确定性分类器进行过滤,未命中时则调用 Claude Haiku 大模型分类器,在约 300 毫秒内完成问题复杂度分类与模型路由。

Timeline

Salesforce 定制化开发面临的痛点与产品定位

  • 业务用户需要使用自然的日常语言与复杂的 Salesforce 生态系统进行交互以快速获取解答。
  • Salesforce 的配置、定制开发以及生产级代码的编写需要深入理解特定项目的上下文与最佳实践。
  • 小型产品团队需要将精力集中在核心业务功能的开发上,而非底层基础设施的构建与维护。

传统的 Salesforce 开发与配置由于需要理解复杂的业务上下文、客户项目背景以及最佳实践,门槛极高,因此非常依赖专业服务公司。通用的大语言模型无法直接生成符合生产环境高可靠、可扩展要求的代码。Saltbox One 旨在为业务用户提供自然语言交互,同时为建设者提供辅助开发工具,通过在 Vercel 基础设施上构建平台来降低技术实施的难度。

基于 AI SDK 和 AI Gateway 的三层技术架构

  • 系统架构由 Next.js 展现层、AI SDK 驱动的智能体控制层以及模型无关的 AI 层组成。
  • AI SDK v6 提供了模型无关的智能体运行环框架、脚手架以及强大的工具调用能力。
  • AI Gateway 允许开发团队通过一行代码自由插拔和切换不同的底层模型,避免了厂商锁定。

Saltbox One 的最顶层是 Next.js 应用程序,负责向用户提供流式 UI 交互。第二层利用 AI SDK 控制智能体运行环和工具链,支持接入市面上的各种大模型。第三层通过 AI Gateway 整合了 Claude Opus、Sonnet、GPT 和 Groq。由于没有单一模型能完美适配所有业务场景,这种模型无关的插拔式设计使得平台能随时接入新发布的模型,而无需重构底层基础设施。

基于问题复杂度的动态模型路由与执行机制

  • 平台采用分类器机制来评估用户问题的复杂度,从而决定模型路由路径。
  • 系统将用户体验分为流式实时响应和耗时更长的后台异步进程两种模式。

为了在响应速度与模型成本之间取得平衡,平台在接收到输入后会通过分类器判断问题复杂度。简单的日常问候和复杂的系统流程设计会被路由到不同的模型。对于耗时较长、超出常规流式传输时间的复杂 B2B 流程设计等任务,系统会在 Vercel 基础设施内部启动后台异步进程,同时在前端 UI 中为用户保持单一、无缝的交互体验。

智能体工具链与 Vercel 沙箱的深度集成

  • 智能体拥有包含文档生成、搜索、故事生成、集成及 Salesforce 环境验证等功能的工具链。
  • Vercel 沙箱技术为智能体提供了操作 Salesforce CLI 所需的文件系统和终端访问权限。

随着时间的推移,平台构建了越来越丰富的工具分类。其核心能力在于将 Vercel 沙箱功能与 Salesforce CLI 结合。传统的浏览器环境难以保持持久的认证状态和复杂的文件系统交互。通过在 Vercel 沙箱中运行命令行工具,智能体能够对环境进行验证、启动暂存组织(Scratch Org),并将自动编写的代码或配置文件直接推送部署至 Salesforce 实例中。

S1 与 v0 协同生成 Salesforce 专属代码

  • v0 被同时应用于 Saltbox One 自身的产品开发以及 Salesforce 客户端的代码生成。
  • 系统将收集到的 Salesforce 组织信息作为上下文传递给 v0,从而实现非 React 代码的生成。

Saltbox 团队将 v0 深度集成到了自身的开发工作流和产品服务中。通过在 Saltbox One 中收集特定 Salesforce 组织的架构、元数据等丰富上下文,并将其输入给 v0,系统打破了 v0 仅适用于 React 开发的局限。在获得充足背景信息的前提下,v0 能够高效、精准地生成 Apex 语言代码、LWC(Lightning Web Components)以及 Salesforce Flow 流程配置,实现了高度顺畅的集成体验。

关键技术总结与建议

  • 使用网关能赋予团队在多模型方案中选择最佳工具的高度灵活性。
  • 流式传输只是智能体应用的起点,持久的后台运行能力决定了智能体的能力上限。
  • 引入沙箱并赋予智能体命令行界面(CLI)访问权限是解锁高阶编码能力的关键。

在构建智能体应用的探索中,有四点核心心得值得其他团队参考。首先是引入 Gateway 从而无需纠结模型选择。其次是必须支持持久的后台进程以处理高复杂度任务。第三是利用沙箱提供传统文件结构,赋予智能体命令行控制力。最后是选择合适的底层平台(如 Vercel)以摆脱繁重的运维工作,专注于业务特性的高频迭代。

对话式 Salesforce 工作流与审计用例演示

  • 用户可通过拖入会议记录和解决方案长文,自动生成符合最佳实践的拆分阶段文档与用户故事。
  • 系统可以深入审计 Salesforce 实例的架构、许可环境及未记录字段等技术债。
  • 所有计划执行的写入与部署更改,均需要通过人工审查卡片进行授权确认。

现场演示展示了 Saltbox One 的核心交互面板。用户将会议录音或 Confluence 长文拖入对话框后,系统能自动解析并推荐分阶段的实施方案,绘制 Mermaid 架构图,并拆解出包含验收标准的 Asana 或 Jira 格式用户故事。在进行 Salesforce 屏幕流部署等写入操作时,智能体会生成一张包含详细变更的确认卡片。这种“人机协同(Human-in-the-loop)”的设计确保了部署的安全可控,并且允许用户在不满意时执行一键回滚。

权限控制、沙箱安全、定价模式与分类器细节问答

  • 权限控制完全基于用户的 OAuth 授权或 API 密钥,且与 Salesforce 的只读/写入权限联动。
  • 系统并行使用 Vercel 官方沙箱处理 CLI 部署,并使用轻量级内存沙箱保存每轮对话的文件上下文。
  • 问题路由第一步使用基于正则的确定性分类器,第二步使用 Claude Haiku 在 300 毫秒内完成深度分类。

在最后的问答环节中,Shane Smith 澄清了关于企业级集成的核心细节。为了满足可审计性,系统不采用全局应用授权,而是完全基于当前登录用户的 OAuth 身份执行操作,任何写入操作都需要用户手动在前端点击确认。沙箱环境保持极简,仅按需加载部署所需的目录和文件以确保安全。在定价方面,目前采用基于用户席位并限制对话额度的阶梯模式。在模型分类路由上,系统首先利用快速且免费的正则进行筛选,若未命中则通过 Claude Haiku 进行毫秒级的语义复杂度分类,最后决定投递给 Opus 或 Sonnet。

Community Posts

View all posts