EPISODE · 2026-05-29
· via interview.network
The Agent Development Lifecycle: Build, Test, Deploy, Monitor | Interrupt 26
N
Narrator
on interview.network
SUMMARY
面试记录讨论了构建和部署智能代理应用所面临的挑战,强调由于处理自然语言输入和输出的独特性,需要新的工具和技能。LangChain联合创始人兼CEO哈里森通过一个类似于软件开发的生命周期来介绍他们的方法,但这个过程需要更多的迭代,其中最近推出的Deep Agents是这一演变过程中的一部分。
ready · neural tts
0:00/0:00
⚠ The Chinese audio is an AI-generated dub (speech synthesis / voice conversion), not a real recording and may contain errors. Based on the original English interview; all rights remain with the original creator.
original lang
EN
dubbed into
中文 (ZH)
pipeline
neural TTS
voice model
neural tts
001
智能。
002
他们称其为智能。
003
但若它不能行动,那它做什么?
004
它等待我们。
005
所以我们推动它。
006
所以它不需要我们。
007
我们赋予它技能、工具和记忆的马具。
008
记忆给予它上下文。
009
上下文变成计划。
010
所以它行动。
011
但行动还不够。
012
它必须学习。
013
所以我们观察它,衡量它,个性化它并改进它。
014
再次改进它。
015
测试评估,部署,修复,更快,更大压力。
016
测试评估,部署,修复。
017
完美。
018
它在工作。
019
而不仅仅是智能。
020
而是一个谎言。
021
请欢迎 Harrison 登台,LangChain 的联合创始人兼 CEO。
022
好的,我们开始吧。
023
我原本不知道会录视频,所以虽然如此,但还是很棒。
024
很棒。
025
我们很兴奋能在这里。
026
这是我们第二次参加,所以我们决定这次举办两天而不是一天。
027
我们为大家准备了丰富的演讲阵容。
028
我认为这会非常精彩。
029
我们有很多内容要分享。
030
所以我们很激动也很荣幸你们决定和我们一起度过这两天。
031
去年,我们在 Interrupt 开幕式上讨论了构建代理程序的困难。
032
原型很容易制作,但要进入生产却很难。
033
你一路上会遇到很多挑战。
034
在过去的一年里,我们看到包括今天发言的许多公司在内的多家公司已经找到了克服这些障碍的方法,并将代理程序带入了生产环境。
035
虽然仍然很难构建代理程序并将其投入生产,但我们已经弄清楚了一些需要实现这一点的东西。
036
构建代理程序不同于构建软件。
037
这就是它成为一个新挑战的原因。
038
这也是为什么你需要新的工具和技能。
039
我认为思考一下为什么这与构建软件不同是很重要的。
040
我们认为有两件事使它与众不同。
041
一个是输入本身。
042
自然语言可以在维度上无限延伸。
043
它可以是任意数量的单词,或者现在可以开始是图像、视频甚至音频文件。
044
因此代理的输入空间非常大。
045
输出空间也非常大。
046
LLMs本身是非确定性的,即使它们是确定性的,对提示的小变化仍然非常敏感。
047
因此当你有一个如此大的输入空间和这样一个不稳健的系统时,最终会得到一个在实际推出之前很难预测其表现的整体代理系统的。
048
那些已经弄清楚如何可靠地构建代理的团队,他们会尽早发布然后快速迭代。
049
我们再次看到了从成功将代理投入生产的公司中看到的这种模式。
050
在进行这种迭代时,通过某种方式,他们已经确定了与人们用来构建和发布的软件开发生命周期并行的新一代代理开发生命周期,但这是不同的,因为代理是不同的。
051
它们需要更多的迭代,并且每个阶段的步骤略有不同。
052
因此,无论人们是否称之为这种生命周期,真正掌握它就是当人们建立组织和工具来帮助发布代理时所做的事情。
053
我们所做的所有事情都可以通过将其描述为符合这个生命周期来进行说明。
054
我们想弄清楚未来的代理会是什么样子,并构建所有必要的工具使它们成为现实。
055
因此我们在思考这种生命周期的样子以及如何帮助它。
056
今天我想谈谈我们如何看待这个生命周期。
057
我还想谈论一些我们将要推出的东西,使团队能够更快地通过这个生命周期进行迭代。
058
首先,我想谈谈构建代理的建设过程。
059
这是我们开始的地方。
060
所以这就是LangChain了。
061
它主要是围绕构建这些LLM和代理应用程序。
062
一个有趣的事实,在ChatGPT推出之前,我们有一个叫Agent的课程。
063
我记得这件事。
064
我当时在圣迭戈过感恩节,正犹豫要怎么给它命名。
065
最后我把它命名为agent-executor而不是agent。
066
所以你知道的,我们在起名方面并不擅长,这可能是第一个例子。
067
但那时我们就有这个代理的概念,并且它在LangChain中。
068
然后大约一年后,我们推出了Langgraph。
069
随着人们构建的应用程序变得越来越复杂,它们可能一开始是链的形式,但后来变成了更复杂的图。
070
这就是LangGraph背后的想法。
071
然后我们推出了LangChain 1.0,并且大约九个月前,我们推出了深度代理。
072
深度代理是这个概念的进一步发展。
073
所以我现在想多谈谈深度代理,因为这是我们认为未来的发展方向。
074
从最初的LangChain中的agent执行器到现在的核心思想来看,其实很简单。
075
它是一个在循环中运行的LLM调用工具。
076
这个循环周围可以发生很多事情。
077
你可以添加许多特定的工具。
078
但当人们谈论代理时,他们基本上就是指这个概念。
079
用户请求进来,你调用LLM,LLM决定调用一个工具,然后你就执行那个工具,直到LLM决定完成为止。
080
这就是代理的核心理念,一直都是这样。
081
那么什么是深度代理?
082
深度代理是一个代理框架,并且它基本上增加了更多的电池,包含了一些东西。
083
它添加了哪些内容?
084
它增加了一个执行环境。
085
所以代理框架需要一个运行的地方。
086
一种非常常见的方法是在沙盒中运行它们。
087
你可以给它文件系统的访问权限,你也可以给它代码的访问权限,它可以读取文件、写入文件、执行代码。
088
这就是它的执行环境。
089
所以当人们谈论代理框架时,他们经常谈到编码代理的一部分就是其执行环境。
090
Sam boxes是一个极端情况。
091
你可以编写和执行代码。
092
而在另一个极端,我们称之为深度代理中的虚拟文件系统。
093
这基本上是一个我们可以暴露给代理的数据库作为文件系统。
094
LLMs在读写文件方面非常出色。
095
所以你可以巧妙地将其引入这种模拟执行环境。
096
但关键是你要给它一个可以互动的环境。
097
深度代理和其他代理框架都附带了大量的内置上下文管理。
098
所以技能和记忆就是这个的例证。
099
总结是当对话过长时的一种短期记忆,比如在对话变得太长的时候你会进行总结。
100
上下文卸载,你如何处理非常长的工具调用?
101
这是内置到代理框架中的逻辑。
102
提示缓存是另一个例子,在这里你需要确保缓存初始请求的部分以便未来可以更快更便宜地使用。
103
所以所有这些上下文管理都内置在框架中,并且会自动为你处理。
104
所以这些代理,这些深度代理,它们是长期目标的代理,但这并不意味着它们完全自主。
105
你仍然需要人在环中。
106
因此深度代理附带了非常好的人在环控制。
107
最后是委派。
108
代理框架可以用来启动其他代理,无论是规划代理还是用于不同任务的其他子代理。
109
所以所有这些委派与这些子代理进行通信并使它们向你反馈的所有内容都在代理框架中进行了规定。
110
因此深度代理包含了所有这些东西。
111
我们花费大量时间进行研究和应用AI工作,以确保我们的总结方式是最优的,我们的子代理方式也是最优的。
112
今天,我们要推出的是DeepAgeant 0.6,这是DeepAgeants的新版本。
113
其中包含三个大的改进,这些改进是基于我们在行业中看到的三种趋势。
114
我们看到行业中的一个趋势是开源模型的兴起。
115
DeepSeq V4上周推出,并且在某些任务上的表现与前沿模型相当。
116
所以开源模型正在变得更好。
117
另一个现象是成本在上升。
118
前沿模型的成本一直在不断上涨,而使用量也在不断增加。
119
所以我们认为越来越多的情况将是更多地使用开源模型。
120
因此,在 DeepAgent 0.6 中,我们希望使其成为使用开源模型的最佳场所。
121
所以我们将原生支持 GLM5、DeepSeek 和 Nemotron 模型。
122
尝试开源模型最简单的方法是通过编码。
123
因此,我们正在推出 deep agents code 作为使用 DeepAgents 构建编码代理的一个开源示例。
124
并且我们将使其非常适用于开源模型。
125
我们看到的另一个现象是执行环境受到了很多关注。
126
我们已经讨论过这个问题。
127
我们讨论了虚拟文件系统,这是一种非常简单的方法,可以让代理与它认为是文件系统的交互方式,但实际上只是一个简单的数据库在后台。
128
而在另一端,则是一个完整的代码沙箱环境,在这里代理可以编写和执行代码、启动一个 web 服务器等等。
129
这是一个连续体。
130
但中间是什么呢?
131
因此在 DeepAgent 0.6 中,我们推出了 CodeInterpreter。
132
CodeInterpreter 是我们使用 QuickJS 实现的,这是一个 JavaScript 运行时。
133
它基本上允许代理在一个类似 repel 的环境中编写和执行代码。
134
这是一部分 JavaScript 语言,你不能做沙箱中可以做的所有事情。
135
所以你不能运行 Docker 或其他类似的东西,但仍然可以编程地编写和调用工具。
136
你可以操作数据文件。
137
你也可以在这里读取和写入文件系统。
138
所以我们认为这是一个非常有趣的中间地带,部署起来特别轻量级。
139
这就是它的优势。
140
你不需要为每个代理启动一个单独的沙盒。
141
你可以直接部署这个东西,以多租户的方式运行起来非常容易,但你仍然可以从中获得很多编码带来的好处。
142
我们看到的第三个趋势是,虽然这仍然很难,但构建令人愉悦的用户界面仍然是非常重要的一件事。
143
用户界面很重要,与代理交互也很重要。
144
而发生的一件事情就是这些代理变得越来越复杂,它们发出的事件也相应地变得更加复杂。
145
它们会发出文本、调用工具、图像、推理、子代理等东西,你怎么做?
146
所以我们希望尽可能让人们对运行代理框架并将其连接到为他们的客户构建的令人愉悦的用户界面变得简单。
147
因此,在 Deep Agents 0.6 的第三次发布中,我们有更好的支持流式传输。
148
所以我们有一个全新的流式协议。
149
我们有四种不同的前端 SDK,适用于不同前端语言。
150
并且我们与 UI 框架合作,如 Co-PilotKit、Assistant UI 和 Vercel,确保它能够紧密集成。
151
用户界面是构建代理的一个重要部分,我们希望让这样做变得尽可能简单。
152
所以如果你还没有试过 Deep Agents,请今天就去尝试一下吧。
153
这是我们认为未来的发展方向。
154
我们认为代理框架会变得越来越强大,越来越适合生产环境。
155
而 Deep Agents 就是我们版本的实现。
156
接下来我想谈谈测试阶段。
157
所以你已经构建了你的代理。
158
你怎么知道它是否真的在起作用?
159
这就是Langsmith评估发挥作用的地方,这是我们过去两年一直在开发的东西。
160
你需要构建数据集,比如参考输入和参考输出,或者可能是一些评分标准来衡量它的表现。
161
你需要定义一些指标。
162
你怎么知道代理是否通过了?
163
这可能是正确性的问题。
164
这可能是幻觉的问题。
165
但你需要定义一些适用于你应用场景的指标。
166
然后你可以让你的代理运行在这些数据集上,根据这些指标进行评分,并创建这些实验,你可以使用这些实验来进行hill爬升某些事情。
167
或者你可以用它们来确保你在做更改时不会退步。
168
评估是Lang Smith的关键部分,我们今天将围绕这个推出一些东西。
169
但我稍后会谈到这一点。
170
所以我要继续部署了。
171
你已经构建了你的代理。
172
它在本地运行。
173
现在你想把它投入生产。
174
当你这样做时,会遇到很多挑战。
175
首先,你得从单个用户开始,就是你自己。
176
现在你在生产环境中为许多人服务。
177
其次,你需要控制谁可以访问它。
178
你不能随便让所有人使用。
179
然后当你本地运行时如果挂掉了,这只是在测试。
180
你可以从那里恢复过来。
181
但你需要在大规模运行时持久地运行它。
182
所以一年前我们推出了Langsmith部署来帮助解决这个问题。
183
这个里面有很多功能被内置了进来。
184
我们大约推出了30个不同的API端点来处理流式传输、人工介入、认证,以及其他类似的事情。
185
它是一个单一的标准部署模式。
186
今天它已经执行了超过1亿次代理运行,并且被Workday、Cisco、Etsy、Podium和ByteDance等公司信任。
187
但我们也意识到Langsmith部署并不是将代理引入生产所需的唯一事物。
188
我们讨论过代理需要一个执行环境,其中一个最好的执行环境是沙箱。
189
无论代理是否是一个编程代理,读写代码都可以对代理产生重大影响。
190
它可以以这种方式操作数据。
191
它可以以这种方式使用命令行界面。
192
所以我们通常认为许多代理将需要在沙箱中编写和执行代码的能力。
193
因此今天,我们很高兴宣布Lang Smith沙箱现在一般可用。
194
嗯。
195
我们认为这将是未来代理的一个重要部分,所以我们让在不到一秒钟内启动沙盒变得非常容易。
196
它支持快照和分支。
197
我们做的一件最酷的事情之一是这个代理的离线代理。
198
所以如果你想给LLM代理使用需要API密钥的东西,实际上你不想让它看到那个API密钥,因为它可能会被提示注入并泄露出去。
199
所以我们有一个离线代理,它位于沙盒之外,并且基本上会拦截流量并在其中插入这些内容。
200
这都是Lang Smith SDK的一部分,它是完全框架无关的。
201
所以你可以用它来使用深度代理,你也可以不用深度代理来使用它,你可以用来测试代理,你可以用来进行强化学习,你也可以用来运行生产中的代理。
202
我们非常期待看到人们如何使用它。
203
我们已经有了一些客户在使用它。
204
例如,星期一(Monday)就用它来为他们的AI助手侧kick提供支持,并且我们对迄今为止收到的反馈感到非常兴奋。
205
将代理引入生产中的另一个重要部分是上下文。
206
仅凭LLM本身,它们什么都不知道,或者它们知道一切。
207
人类也不是什么都懂。
208
当我们需要查找东西时,我们会去图书馆。
209
我们通过阅读书籍来学习东西,而这也是代理所做的事情。
210
它们就是这样做的,利用上下文。
211
这些上下文随着LLM的改进而演变。
212
所以我们在Lang Smith中有一个很长一段时间的提示枢纽,你可以存储反转提示。
213
而提示词就像是引导代理的东西,但过去几个月和几年前我们看到的是,提供给代理的上下文已经从提示词演进到了像agent.md文件这样的东西,即非常详细的指令,以及这些代理所使用的技能。
214
很多都是由编码代理标准塑造的。
215
这两者都是开放的标准,顺便说一句,所以它们是开放基金会的一部分。
216
因此,随着LLMs所需的上下文从提示词演进到这些agent.md和技能,我们的工具也相应地进行了演变。
217
今天,我们非常兴奋地推出了Lang Smith Context Hub。
218
耶!
219
那么这个Context Hub里有什么呢?
220
我们认为这将成为一种越来越常见的模式,所以你可以把所有这些东西都存储在Context Hub中,你将获得版本控制、标签和评论功能,然后你可以使用它们。
221
你可以本地拉取它们,你可以在你的编码CLI中运行它们,在深度代理作为虚拟文件系统的地方我们有一个集成,或者你可以在任何代理框架中使用它们。
222
我们认为Context Hub是一个关于记忆的初步尝试。
223
我们认为记忆在未来对代理来说非常重要。
224
我们认为agents.md和技能可以绝对被视为早期形式的记忆。
225
它们是开放的标准。
226
所以这是一个很好的想法,因为我们认为记忆应该是开放的。
227
我们认为记忆不应该被锁定在LLM、框架或平台上。
228
虽然我们正在构建Context Hub,但我们希望这种上下文的想法是真正开放的。
229
因此,我们正在与Redis、Elastic、Mongo和Pinecone等多家公司合作,将这个关于记忆的第一个尝试变成一个开放标准的记忆,为代理提供开放的标准。
230
所以我们认为一切都应该是开放的。
231
最后,我们有监控功能。
232
所以你已经推出了它。
233
但是你怎么知道代理实际上在做什么?
234
这样你就可以确保可以看到每个代理的每一步,以及输入和输出是什么。
235
仪表板,以便你可以随着时间追踪成本和延迟。
236
在线评估,这样你就可以将LLM作为裁判或代码来运行这些跟踪,获得一些反馈并将其附上或将用户反馈捕获。
237
所有这些都是Ling Smith可观测性的一部分。
238
我们在过去两年和几个月里一直在构建很多东西。
239
我们即将推出几个非常大的项目,但我们稍后再谈。
240
所以这就是代理开发生命周期,以及它如何使你能够将代理引入生产并维护它们。
241
而且当你为一个代理做一次时这是可以的。
242
当你为10个或100个代理这样做时,你就真的需要开始考虑所有这些治理问题了。
243
你如何在大规模下做到这一点?
244
你如何以一种成本效益高且安全的方式来做到这一点?
245
LLMs变得很昂贵。
246
你怎么知道代理花费了多少,特定用户在代理上花费了多少钱,并且如何避免意外账单?
247
那么你怎么控制它们可以和不可以看到的内容呢?
248
今天,我们推出了Langsmith LLM网关进行测试,以帮助解决这些问题。
249
Woo!
250
你们不能挑着喜欢的公告鼓掌。
251
你们必须为所有的内容鼓掌。
252
它们都很棒。
253
那么Link Smith LLM Gateway是什么?
254
所以你有你的代理,它们正在运行。
255
Link Smith LLM Gateway基本上位于它们和LLM调用之间。
256
你可以设置支出限制。
257
你还可以实现完全的支出透明度。
258
它与许多编码代理进行了集成。
259
所以你可以使用它。
260
我们知道编码代理是人们最常用的东西。
261
这也是很多成本发生的地方。
262
所以我们确保与许多编码代理进行了集成。
263
它与LangChain可以帮助你访问的所有LLM提供商都进行了集成,并且所有内容都会自动追溯到LangSmith。
264
所以这就是完整的代理开发生命周期。
265
我们正在构建的一切都符合这个模型。
266
我们也认识到这里有很多东西。
267
将一个代理带到生产并经历这个生命周期涉及许多不同的部分。
268
所以我们希望尽可能简化人们将所有这些组件,包括我们的深层代理底层框架深探剂,带到生产环境的过程。
269
为了实现这一点,今天我们宣布在私有预览中推出管理深层代理。
270
耶!
271
所以管理深层代理是一个单一的API,用于与所有这些不同的组件进行交互。
272
它在后台运行深层代理框架。
273
它使用Lang Smith部署。
274
你可以访问的模型包括任何现有的模型。
275
我们当然与OpenAI和Anthropic集成,但也与开源模型提供商如Fireworks和Base10集成。
276
所有代理指令和记忆都存储在Context Hub中,因此你可以查看、版本化并跟踪它们的更新。
277
部署这些代理时,你基本上希望在这里部署代理,然后给它一个沙盒来运行和编写工具。
278
并且要将它们分开。
279
这就是我们采用的架构。
280
我们在后台使用Langsmith沙箱来帮助提供这些沙箱。
281
MCPs是连接工具的方式。
282
你可以直接提供MCPs,或者可以使用Arcade或其他提供大量MCP服务器访问权限的合作伙伴来完成此操作。
283
所有这些都通过我们宣布的新流式协议进行流式传输。
284
所以你可以无缝地将其与Co-Pilot Kit、Assistant UI和其他框架集成。
285
结合这一切,LangChain开源和LangSmith共同推动了整个代理开发生命周期。
286
我们认为踪迹在这个生命周期的中心位置。
287
所以我们公司花了很多时间思考踪迹,考虑如何构建最佳的围绕它们的体验。
288
每个人都这样想。
289
但公司里没有人比我的联合创始人安库什更专注于踪迹了。
290
因此我们正在推出很多非常酷的东西来围绕这个话题,但在讨论踪迹和他的对踪迹的热爱之前,我想请我的联合创始人安库什·戈拉上台。
291
大家好。
292
我是安库什,LangChain 的联合创始人兼 CTO。
293
正如哈里森提到的,我确实花费了很多时间思考代理踪迹的问题。
294
这是因为我们真的认为代理踪迹是代理开发生命周期的核心。
295
每个代理踪迹都捕捉了你的代理在特定时间点的实际行为记录。
296
然而,代理踪迹或更广泛地说,代理可观测性提出了一个独特数据基础设施问题。
297
首先,代理踪迹非常嵌套,并且可能包含数千甚至数万的中间步骤。
298
与代理踪迹相关的载荷是大型且无界的。
299
这两种代理踪迹的特点直接源于代理运行的时间更长以及大模型上下文窗口大小变得越来越大。
300
我们正在看到越来越多的代理踪迹被记录下来,这些踪迹以图像和语音等模态形式存在。
301
语音在诸如客户服务的应用中尤其流行。
302
最后,为了有效挖掘你的代理踪迹以获得有用见解所需的访问模式或查询模式是独特且复杂的。
303
不仅代理踪迹编码了更多的信息并且变得越来越复杂,随着代理变得越来越普遍,它们的体积也在增长。
304
这里有一个图表突显了一个真实 Langsmith 客户每周踪迹体积随时间的变化情况。
305
如您所见,在测试和开发的早期阶段,每周踪迹体积相对较小。
306
但当代理进入生产阶段,并且新的代理加入后,我们现在每周看到的跟踪数量已经超过1.5亿。
307
如前所述,与代理跟踪相关的载荷很大,并且随着时间的推移变得越来越大。
308
在过去几年里,发送到Langsmith的代理跟踪所关联的P50载荷大小从6千字节增长到了37千字节。
309
并且P99已经从当时的相当大的364千字节增长到了今天的12兆字节。
310
又一个数据点。
311
今年早些时候,我们有一个客户在单一天发送了50太字节的跟踪数据给我们。
312
那可真是大量的数据。
313
这个视频展示了Langsmith中现代代理跟踪的实际样子。
314
如你所见,有很多中间步骤,嵌套得很深。
315
这个跟踪实际上是来自我们内部市场推广代理的一个深度代理构建的实例。
316
值得指出的是,这个跟踪实际上编码了810万个标记。
317
传统数据基础设施并不是为代理可观测性相关的挑战而设计的。
318
如果你使用了不理想的基础设施来处理代理可观测性的工作负载,你将经历缓慢查询和摄入瓶颈的问题。
319
你也将在尝试扩展时遇到不断上升的基础架构成本和复杂度问题。
320
当你在迭代你的代理时,你无法承受与代理跟踪的缓慢且繁琐的交互过程。
321
因此今天,我们非常激动地推出SmithDB。
322
SmithDB是我们专门为代理可观测性工作负载打造的数据库。
323
我们在过去几个月一直在开发SmithDB,并且在生产中看到的结果令人非常兴奋。
324
请继续关注本视频以了解更多详情。
325
介绍SmithDB,这款专为代理可观测性打造的数据库。
326
这是一个追踪,记录了你的代理所做的一切,它的思考、决策和执行过程。
327
现在想象一下成千上万个这样的追踪,每天都在增长数百万个,因为代理无处不在。
328
问题是,这些追踪不像传统的日志和指标那样。
329
那个视频让我相当兴奋,说实话。
330
无论谁在制作我们的视频,他们做得真是太棒了。
331
现在让我们更仔细地看看SmithDB究竟是什么以及它是如何架构的。
332
首先要指出的是,SmithDB是基于对象存储的。
333
这给了我们一些不错的特点。
334
首先,对象存储非常便宜,并且可以几乎无限地扩展。
335
其次,它为我们提供了所谓的计算存储分离。
336
这使我们能够在不进行任何复杂的重新排列或数据切分的情况下弹性扩展Baxmyth DB的服务。
337
第三,这给了我们在自托管环境中相对容易设置的架构,特别是在严格的地域性要求下。
338
现在从高层面来看,Langsmith服务在从我们的集群管理器获取任务后连接到SmithDB。
339
我们的集群管理器帮助确保负载均匀分布在服务器上,它还维持了一种称为粘性路由的东西。
340
粘性路由很重要,因为它有助于利用缓存,还能帮助我们有效批量处理数据以供摄入。
341
所以在摄取过程中,原始跟踪数据会进入我们的摄取服务。
342
它会被批量处理,并持久存储到对象存储中。
343
这些文件在基于Postgres的元存储中注册。
344
在查询时,我们确定哪些文件需要被扫描以进行查询。
345
我们从对象存储下载它们,然后进行扫描。
346
我们还大量利用SSD缓存和内存以最小化与对象存储之间的往返次数。
347
最后,我们有一个压缩服务,帮助我们优化文件以进行更高效的查询。
348
SmithDB 特别设计用于代理可观测性访问模式。
349
我们将在接下来的几页幻灯片中浏览一下这些访问模式。
350
SmithDB使得点击进入单个跟踪和个别中间步骤变得非常迅速高效。
351
代理可观测性不仅仅关于询问数百万条跟踪中发生了什么。
352
这也关于询问在这个特定代理执行中发生了什么。
353
这就是为什么随机访问非常重要,这也是我们在SmithDB中优化的一个方面。
354
代理追踪可以包含兆字节的文本数据。
355
很多时候,你需要使用关键词或短语来搜索你的代理跟踪记录。
356
如你所见,SmithDB 让全文搜索变得非常迅速且互动性很强。
357
为了实现这一点,我们实际上构建了一个专门为对象存储设计的自定义倒排索引布局。
358
并且你经常需要选择一个特定的时间范围,并对元数据、标签、名称、延迟和其他属性应用过滤器。
359
扫描和过滤速度是我们高度优化在SmithDB中的内容。
360
你可以看到,结果几乎是即时的。
361
我们对SmithDB带给Langsmith在这关键代理和可观测性工作负载上的表现感到非常满意。
362
与之前相比,这些Lang Smith工作负载现在比以前快6到15倍。
363
但请看,不要只听我们的说法。
364
我们非常幸运能与Clay和Vanta这样的客户合作,他们是SmithDB的早期采用者。
365
在Langsmith上。
366
正如你所见,来自Clay的Jeff和来自Banta的Andy都表示,SmithDB彻底改变了他们在Langsmith中的跟踪体验。
367
所以SmithDB是专门为代理可观测性设计的,并且我们使用现代技术栈构建了它。
368
整个系统用Rust编写,我们使用了两个很棒的开源项目。
369
一个是叫做PEP的。
370
patchy数据融合,这是一个可扩展、基于Rust的查询引擎。
371
第二个是Vortex,这是一种可扩展的文件格式,它允许我们选择自定义编码和针对不同列的自定义分块策略。
372
在此基础上,我们在索引方面进行了大量定制化工作,特别是全文搜索。
373
我们添加了自定义查询计划和执行计划。
374
我们也为存储在SmithDB中的所有数据投资了自定义的存储布局。
375
这是我们构建SmithDB时必须解决的一些技术挑战。
376
这只是其中的一部分。
377
它们很多,但我尽量选择了一些。
378
所以在代理可观测性的工作负载中,你的跨度是分布式的。
379
它们有不同的部分。
380
这是因为代理运行在长时间范围内。
381
所以在查询时间和压缩时间找到并合并这些分散的事件是一项技术挑战,我们必须解决它。
382
高效地做到这一点是我们投入了很多时间的地方。
383
Lang Smith内的许多查询都是顶级案例风格的查询。
384
所以它们包含一个order by和limit。
385
而更简单的查询计划基本上是找到所有在范围内的文件,将它们分散开来,扫描它们,进行某种类型的合并和Top K操作。
386
实际上这在对象存储上有点昂贵,实际上相当昂贵。
387
所以我们做的是我们采取了基于时间窗口的方法,并将其编码到SmithDB内的自定义执行计划中。
388
最后,在可观测性的工作负载中,你通常需要尽可能快地提供最新摄入的数据。
389
为了做到这一点,我们在数据被持久化到对象存储之后仍然在摄取服务中缓冲数据。
390
我们将其缓存在内存和SSD上。
391
我们将这些数据提供给查询服务以避免下载大量小文件进行领先风格的查询。
392
Langsmith的性能不仅对人类用户体验很重要,而且对代理用户体验也很重要。
393
越来越多地,代理不仅是被Langsmith观察的对象,它们也是Langsmith的用户。
394
使用低效工具让你的代理变慢是一个巨大的打击。
395
我真的很喜欢Jeff Dean的这句话,他说:随着我们得到比人类快得多的基于代理的系统,你的工具可能会成为AMDell的Blah Blah瓶颈。
396
我们非常兴奋地宣布,SmithDB现在正在Langsmith上为所有美国云的核心可观测性工作负载提供服务。
397
所以如果你在使用Langsmith并在smith.langchain.com上,你所有的互动和追踪项目页面现在都由SmithDB提供动力。
398
很快——我们正在迅速工作以将Langsmith的其余UI带回SmithDB。
399
并且我们将很快将其带到自托管,并覆盖全球云流量。
400
所以SmithDB为我们要构建的所有Langsmith功能奠定了非常坚实的技术基础。
showing first 400 segments · view full transcript ↗