TrueLaw chose DSPy due to its modular nature, ease of customization, and better object hierarchy, which allowed for more efficient and transparent query rewriting and iterative improvements.
Fine-tuning is necessary for domain-specific tasks in legal AI because off-the-shelf models often lack the precision and quality required by lawyers, who are not skilled prompt engineers. Fine-tuning helps contextualize queries and align the output with the firm's specific expectations.
Embedding model fine-tuning is cost-effective because the models are relatively small and the main cost is generating contrastive data, which is cheaper compared to training large models from scratch.
TrueLaw decided to use SaaS providers for infrastructure to leverage existing services, reduce costs, and focus on their core IP, which is data generation and fine-tuning. This approach is more efficient and scalable, especially for a startup with resource constraints.
TrueLaw chose Temporal for managing long-running workflows because it provided a robust and flexible workflow engine that handled retries, interruptions, and notifications, which would have taken significant time and effort to build in-house.
Shiva believes his broad experience has been beneficial because it allows him to draw parallels between seemingly unrelated areas, apply fundamental principles across different domains, and understand the core concepts that are universally applicable in solving performance and system-level issues.
我是Truelaw的首席技术官。我们为律师事务所构建定制的AI解决方案。就我而言,我的咖啡是清咖啡,不加糖,不加奶,我觉得这就像我的感觉一样。我的确感觉,你知道,我来自加尔各答。我们从小就喝茶。
而且我们不喝加牛奶和糖以及所有这些添加剂的茶。我认为茶的真正风味来自浓郁的、清凉的茶。我认为咖啡也是一样的,就像牛奶和所有这些一样。我的意思是,现在的美国咖啡就像糖尿病的食谱一样。我觉得与清咖啡相比。
不加糖的咖啡。这就是我的意思。地球上善良的人们,发生了什么事?这是另一个Ed Miloff社区播客。我们正在与Shiv交谈。这个人真是个领导者。他在工程领域做了很多事情。我很荣幸能有机会和他交谈。在我们开始谈话之前,我想为你播放一首小曲。让你的推荐引擎变得更出色一点。
也许你可以考虑一下破坏你的算法。也许你可以考虑升级它。这完全取决于你。我对我们即将播放的这首歌(名为Varely的Glimpse)唯一的问题是它太短了。我把这首歌放在一个播放列表里
我称之为天使翅膀的声音,因为从字面上看,这就是我感觉到的。我听着这个。像往常一样,如果你喜欢这一集,只需与一位朋友分享,这样我们就可以让MLOps社区保持在播客排行榜的顶端。如果我错了,请纠正我,但你们正在使用DSPy,对吗?是的。
所以你,我想我发布了一些东西,我说,如果有人在生产中使用DSPy,请与我联系,因为我很想和你谈谈。你联系了我,就像,“嘿,发生了什么事?让我们谈谈。”现在为我分解一下。到底发生了什么,你发现了什么?
所以,你知道,我们像往常一样尝试提示。我认为,你知道,除了零样本提示之外,事情还在进行中。当时我们玩过langchain。而且……
总是有这样的想法,我的意思是,我认为我与Omar的想法非常契合,你知道,这些提示很脆弱。如果你在这里和那里改变它们,这种事情就会崩溃。在LLM是的时候,你知道,GPT的修订速度要快得多,或者我们想尝试其他LLM。
为了得到这个,我们肯定需要对提示进行很多更改。现在随着时间的推移,情况肯定有所改善,我相信。现在OpenAI正在进行结构化输出。但在当时,这并不容易。我们必须不断地对提示进行很多更改。
这让我感触颇深。我的意思是,我之前在Databricks工作过,所以我LinkedIn上的信息流里有Matei。我认为从那里,我开始了解DSPY或DSPy。我认为这就是我们现在所称的。我一直称它为。我以前称它为Dibby,所以对无论你想怎么称呼它都没有什么不好的意思。
然后,我的意思是,我认为我浏览了Omar发布的一些视频,我认为这些视频非常有共鸣,尤其是在我们正在做的事情的背景下,它是模块化的。其思想是,你就像优化器一样,在如何迭代改进产品方面非常有意义
你仍然必须经历,我的意思是,我们稍后可以讨论这个问题,但你仍然必须经历优化器仍然需要大量示例才能进行优化的限制。但在你这样做的情况下,以及你可以展示一些有限的示例来模仿你想要的东西的情况下,我认为这是一个更好的方法。
这很有道理。我也非常喜欢DSPy的Pi方面,因为它非常像PyTorch。它本质上非常模块化。所以从编程的角度来看,我认为它非常模块化,
我们可以稍微介绍一下我们在检索方面所做的堆栈。它易于使用不同的重新排序器。它易于使用这些东西。所以我认为这就是我们坚持使用SPY的原因。我的意思是,我们也使用它来生成数据,在某些情况下生成合成数据,但很好。但是是的。
是的,我们稍后可以讨论合成数据。但我有一个迫切的问题,你难道不担心DSPy是……
基本上是一个研究项目,它不一定是你想投入那么多信心的东西。是的,我的意思是,你知道,事情是这样的,我们显然已经做出了改变。所以它的工作方式是这样的,你知道,你克隆并自己重建,并且你一直在进行更改,因为你显然……
当我们的上游更改即将被推送时,我的意思是,实际上社区一直很好,我的意思是,我们已经推送了一两个更改,这些更改很快就被接受了,但是是的,我的意思是,归根结底,我的意思是,你知道,这是你正在查看的python代码,并且有点像看到看到这个东西,这对于世界上的lang链也是如此,但是嗯
有一些,我的意思是,这也是我在DSPy中感受到的好处之一,因为它具有模块化特性及其工作方式。你也可以编写你自己的模块,并且可以查看它的工作方式,而不是,再次,也许我在langchain中进行此类更改时犯了错误。我觉得,
你的链必须经过很多层才能进行相同的更改,而在DSPy中,我们使用的是我们自己的重新排序器。它很容易用作不同的模块,然后将其插入框架中,从而
你仍然称之为DSPY检索器。我的意思是,对象层次结构和调用在我看来只是更好和更模块化。总的来说,就像,我的意思是,你知道,总是有这样的事情,即你正在做什么。首先,事情是这样的,好消息是,你知道,这只是在你服务器上运行的代码。
但是像我们的用例一样,它实际上是受延迟限制的,而不是其他任何东西。你可以启用跟踪,并基本上查看你正在进行的调用。实际上,我们所做的事情之一,这非常有帮助,那就是因为
因为链式调用和发生的跳转以及发生的查询重写,我们已经将中间步骤暴露给了最终用户。所以,你知道,他们对正在发生的事情以及查询如何随着他们正在搜索的内容变得更有上下文相关性有了很好的了解,从他们开始的地方。所以我认为在某些情况下,这种,这种,
可见性实际上也帮助了产品,就我们所做的事情而言。是的,这对我来说很有趣,因为DSPy是一个工具
开源工具,我认为,那里没有一个资金雄厚的风投公司支持它,而且有一家公司刚刚从风投公司那里获得了所有资金,我认为。所以你会看到有一个令人难以置信的社区,并且有很多人和很多精力围绕着它。
但我知道有些人有点害怕,因为没有一家公司以某种方式给予它认可,并说:“是的,我们将成为这个开源工具的守护者。”是的,我的意思是。
我的意思是,这是一个非常有趣的一点。是的,我的意思是,我认为你是对的。就像,你知道,为什么,为什么LanqChain有资金,而且,你知道,它启动了,而不是DSPy。我认为这是一个非常好的,我的意思是,肯定有,你知道,这些东西的首发优势,以及,你知道,有多少活跃的开发等等。我认为与,呃,
其思想是通过,而我的强烈直觉是,因为围绕改进和迭代推理的细微之处,它就像在后台发生的提示一样发生。
这可能不像langchain那样明显。我的意思是,在langchain中,你仍然有点像明确地指出,你知道,特定的思维链或类似的东西非常明确。而且同样,即使是这些东西,你知道,它们随着时间的推移也变得更加模块化和抽象。所以,已经有一段时间我没有使用langchain了,但是是的,
但是DSPY,当我们第一次看到它时,学习曲线有点,我会说,比Langchain陡峭。我不知道这是否会导致采用问题,或者,你知道,就像那样。但最终,你知道,这是一个非常有趣的事情,你知道,这些是等效的系统。他们仍然有点像遭受同样的痛苦,
就像,你知道,这最终是正在发生的提示工程。所以,你知道,围绕这一点有一些限制。但这是一个很好的观点。我认为主要的事情,在我看来,通常我看到将事物产品化的一种方法是,你必须提供一项服务。你知道,就像你基本上,如果你像这样使用这个东西并且
你需要像服务器或一些你需要自己管理的状态管理一样。这就是当这种情况发生时,你知道,有一家公司出来说,你知道,我们将承担你这样做所有操作上的麻烦。这成为一项合法服务。这就是你看到Lang Smith及其类似情况的原因,无论你是在做拖放还是这些的可观察性,这些都成为其中的一部分。我相信,
如果有人当时投资,他们可以对DSPY领域的相同类型的套件提出论证。但是是的,我的意思是,如果你只是把它看作一个框架和一个SDK,以及,你知道,就像你正在使用的库一样,那么大多数人都会说,好吧,我有点像在运行它。所有这些代码和服务器都在我的控制下运行。
环境有什么意义,但是是的,所以我认为你必须有点像总是将一项服务与之关联起来,这可能或可能不会,你知道,你必须考虑一下那会是什么,这可能会证明,你知道,建立一家公司
好的,回到你正在做的事情,你有一个RAG用例,对吗?你提到有时DSPy是一个有趣的方法。然后其他时候你微调。而且我想象其他时候你什么都不做,它就像他们所说的朴素RAG一样。你能分解这些不同的场景以及你发现什么方法在什么时候最有效吗?
所以一件事,你知道,我们专注于法律领域。所以我们为律师和律师事务所构建了定制的解决方案。
在这里,你知道,精确性和质量很重要,比延迟更重要。所以他们仍然希望搜索结果很快,但它不必像你的谷歌搜索体验那样即时,对吧?是的,我同意。所以我们总是必须关注质量。
此外,这类用户并不是最好的提示工程师。我的意思是,他们并没有考虑如何最好地编写提示。我认为我们发现的是,典型律师提出的问题的方式
为了能够进行更好的检索,对该问题进行情境化非常重要。这就是查询重写非常有帮助的地方。这就是我们使用DSPIO的原因。然后它非常易于参数化,这意味着你可以确定你想要执行的跳转次数以及……
你想要达到的检索深度以及你想要在你的前K个结果中看到多少文档,所有这些事情。这些对于律师来说同样很重要。他们在召回率和精确率之间进行权衡,就你想要获得的数据量而言。所以
而且因为我们可以控制延迟,所以我们不必。我们没有,再次,我认为他们理解,人们进行的跳转次数越多,你将使用这种方法获得更好的质量,但代价是,你知道,结果需要更长的时间。这在非常具体的领域特定问题解答中尤其如此。对于微调工作,
我们也做了一些关于嵌入模型的工作,因为这是另一个关于时间指标。所以当你进行搜索和检索时,典型的方法
如果嵌入模型只是在你正在搜索的数据语料库和你正在执行的查询上进行训练。这只是一个更好的典型匹配。再说一次,我谈论的是具体的事情。这往往会更好一些。但是关于生成部分也存在问题,即
你知道,某些公司有特定的答案查看方式,或者,你知道,他们期望某种方式,因为通常这将由初级律师来完成,你实际上会告诉其他人进行此搜索并返回,然后,他们有特定的数据呈现方式。所以我认为生成的对齐是我们也使用微调来微调内容的地方。
而且,你知道,典型的RAG,我的意思是,再次,我认为当我们开始这个项目时,我们发现了很多现成的RAG方法。而且再次,对于特定领域的事情和律师来说,他们通常不会。我的意思是,在我们的实验中,他们的表现并不理想。我们总是必须做一些不同的事情,要么先提取元数据,要么
基本上使检索过程以不同的方式更具上下文相关性,然后我们才聚合数据。如果你只是使用你的典型方法,就像,只使用嵌入和你的常规嵌入,然后进行检索,质量就不会那么好。所以有一些事情我想特别了解嵌入模型的微调。我认为现在你可以相对便宜地做到这一点,对吧?
是的,我认为,你知道,这里的主要事情是因为嵌入模型本身不必很大,你实际上可以只拥有这些模型的编码器部分,而且它们通常是,你知道,维度不必非常非常大。对。
而嵌入模型中的主要事情是弄清楚训练数据。那就是,你知道,
你基本上是在给它一些对比数据,并且基于百分比,这种对比数据的生成是困难的部分。这有点像花钱少,但在资源上很昂贵。弄清楚如何生成这种对比数据很昂贵。我认为这是比较困难的部分,但是是的,我认为总的来说,即使是训练和所有这些事情,这些都变得非常商品化,呃,嗯,
所以我们实际上并不专注于训练基础设施本身。我们有一个协调器层,它与可以在哪里进行训练无关。但总的来说,我认为从我们开始到现在,价格下降幅度很大。我认为这只会继续增长。我的意思是,甚至……
Winchie PT4.0 Mini是一个非常强大的模型,训练非常便宜。是的。所以你知道我想分解的是,你曾在许多不同的堆栈领域工作过,我们可以这么说。我认为它甚至更……
而且在横向上也是如此,我想。我不知道你是否同意这一点,但考虑到你的背景,你已经深入到了非常底层。你从数据端或前端、后端、DevOps,到现在的大型语言模型、MLOps,都经历过。你现在如何看待这些事情?有没有什么东西让你可以看看,然后说,好吧,
因为我知道这一点,我可以将它与堆栈或大型语言模型方面的某些部分进行类比。我知道你前面提到过数据流。现在只是大型语言模型和AI数据流。所有这些元数据都是重要的东西。你来自Confluence,所以你对此很了解。
数据流在你血液里。我知道你还在许多不同的优秀地方工作过,其中一个就是苹果。所以你看到了整个过程。你有没有注意到一些看似不相关的事情,但由于你广泛的经验,你能够将它们联系起来?为什么会有这种广泛的经验?
是的,我的意思是,你知道,我非常幸运。我认为在某些情况下,事情以意想不到的方式发生了关联。例如,我清楚地记得我在Riverbed工作时,我们正在做文件系统。至少当时的Riverbed正在构建一个文件系统,一个去重文件系统,以便对你的主文件系统进行压缩。
其中一种方法是,因为这些东西最终决定了你的性能,最终决定了你的数据读写速度以及它们是如何被阻塞的。而且,你知道,你如何尽可能地并行化?所以,比如如何……
你知道,你的管道是如何进入这些数据区域的。在Riverbed,我们记得我们使用这种基于宏的C语言来获得这种异步IO的版本,如果你这么想的话,但在更深层次上。但他们使用了这个概念,你知道,使用了,我忘了它叫什么,它是
R线程,如果我记得没错的话。是Riverbed线程。这就是那里的想法。但是,你知道,这完全是宏观层面的方法。你必须习惯这个框架。它不像C++。它是用C语言编写的,但是,你知道,要理解事情何时会展开等等。是的。
令人惊讶的是,当我去了苹果,并且我开始解释我在这个领域的工作,也就是在Riverbed方面的工作时,我认为他们就在那里。我的意思是,当时我甚至不知道他们正在研究Grand Central Dispatch,这是他们对多线程库的一种方法。
突然他们说,哦,这说得通。你一定对这方面有很多了解。我们开始研究它。所以,你知道,当时我是GCD的两个维护者之一。
但是这种关联,你知道,这种相关性转变,这些都是意想不到的事情。我也觉得这让你对你在不同公司工作的堆栈有了很好的了解,但你知道,它们可能与其他看似完全不相关的东西有关,但你知道,在核心上它们也相互关联。我记得在
我记得在Arista,我想是Adam Sweeney,或者我想,你知道,当时的高级主管或副总裁。他问我关于循环缓冲区、时间线和其他方面的问题。然后我想他提到所有计算机科学都可以归结为
七个或八个算法问题。如果你擅长这些,你对大多数这些系统级的东西就有了相当好的掌握。我认为这是正确的。如果你知道缓冲以及如何处理内存溢出、外部排序算法等等,它们有很多……我的意思是,你会发现它们在许多不同的地方都有应用。我认为这绝对有帮助。但是,是的,我认为
回到你最初的问题,广度是否有助于理解?我认为肯定有帮助。仍然有一些领域,比如GPU学习以及GPU的工作原理,我没有很深入的了解,我从未真正从事过这类工作。但原则上,当我阅读一些论文时,它有点像,我的意思是,再次,它,你知道,是短路,你知道,某些事情,缓存,
某些结果以便快速访问。我的意思是,它们都是解决性能相关问题的某种一致的方法,这在某种程度上是普遍存在的。我想我应该补充一点,即使在我还在Databricks的时候,我认为一直重复的一件事是
Spark总体上是所有这些不同概念的融合。让我们正确地进行缓存。让我们分别处理数据。让我们做华法林不变性等等。我认为这被重复了很多次。我们在做一些非常具有革命性的事情吗?我
在任何一个特定方面都不是,但是如果你将所有这些特性都整合起来,Spark作为一个系统在实现所有这些最佳实践方面似乎非常完整。我认为这是让我印象深刻的一点。我认为这是真的。如果你查看它的任何特定功能,它有点像,好吧,它基本上是从其他系统的哪些问题中获得经验,然后基本上解决了所有这些原则。我认为这是它流行的部分原因。当然,DataFrame API非常易于使用,它具有声明式思想。但是,是的。很多很棒的教诲。太棒了,伙计。我们就在这里结束吧。