2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

DSPy:软件2.0范式的开源框架,旨在简化AI程序开发

发布日期:2024-07-10 12:10:32 浏览次数: 5853
作者:Bear实验室

微信搜一搜,关注“Bear实验室”

随着LLM的兴起,另一个概念也开始被大家所了解,软件2.0。这是一种新兴的软件开发范式,由前特斯拉和OpenAI的AI专家Andrej Karpathy在2017年提出。它利用机器学习模型,尤其是深度神经网络,来自动化和优化软件的编程过程。与传统的软件开发(软件1.0)相比,软件2.0的核心在于通过学习大量数据集和优化算法,能够自动生成和改进代码,而不再依赖于人类程序员手动编写的详细指令。
在软件2.0中,源代码通常由两部分组成:
1)定义了目标行为的数据集;
2)给定代码大致结构,但需要填充细节的神经网络结构。
训练神经网络的过程就是将数据集编译成二进制文件的过程,从而得到最终的神经网络。
本文我们介绍Github上一个使用软件2.0范式的开源项目DSPy,应该可以激发大家一些有意思的创意。
项目地址 https://github.com/stanfordnlp/dspy

构建LLM复杂系统的挑战
考虑一下,如果你想搭建个LLM复杂系统,那么传统的步骤需要:
  1. 将问题分解为多个步骤。
  2. 对每个步骤进行良好的提示,使其单独运行良好。
  3. 调整各个步骤以实现良好协作。
  4. 生成合成示例来微调每个步骤。
  5. 使用这些示例对较小的 LLM 进行微调以降低成本。
  1. 而且每次需要优化流程、LLM或者数据,可能就得重新设置Prompt或微调步骤。

DSPy是什么
DSPy(Declarative Language Model Programming)是一个由斯坦福大学的研究人员开发的开源项目,旨在通过声明式编程来优化大型语言模型(LLM)的应用开发,处于融合大型语言模型 (LLM)和检索模型 (RM)以解决复杂任务的前沿。通过强调以编程为中心的方法超越了传统的Prompt技术,从而将基于 LLM 的流程开发转向更结构化、更高效的编程范式。

DSPy把程序的流程和每个步骤的参数分开处理,这样你就不用每次都从头开始;其次,DSPy引入了一些新的优化器,这些优化器也是基于LLM的,可以根据你想要提升的指标,自动调整LLM的Prompt或权重。

DSPy的工作流程
使用 DSPy 构建基于 LLM 的应用程序的工作流程如下所示。有点像训练神经网络的工作流程:
  1. 收集数据集:组合一系列输入输出示例(例如问答对)以完善您的管道。
  2. 开发 DSPy 程序:使用签名和模块制定程序逻辑,详细说明信息流以解决您的特定任务。
  3. 建立验证逻辑:根据验证指标和优化器(提词器)创建增强程序的标准。
  4. 使用 DSPy 进行编译:利用 DSPy 编译器,结合您的训练数据集、程序、优化器和验证指标来增强您的程序(例如,通过快速优化或微调)。
  5. 不断迭代完善:参与完善数据集、程序或验证逻辑的迭代循环,以达到管道所需的性能水平。
当我们构建神经网络时,我们不会对手动调整的浮点数列表编写手动for 循环。相反,您可以使用PyTorch之类的框架来组合层(例如或),然后使用优化器(例如 SGD 或 Adam)来学习网络的参数。
DSPy提供了正确的通用模块(例如ChainOfThought、ReAct),它们取代了基于字符串的提示技巧。为了取代Prompt技巧和一次性合成数据生成器,提供了通用优化器(BootstrapFewShotWithRandomSearch、MIPRO),它们是更新程序中参数的算法。每当您修改代码、数据、断言或指标时,您都可以再次编译程序,DSPy将创建更改后适合的新Prompt。

DSPy 编程模型
DSPy 的核心是引入一种结构化的、以编程为中心的方法,旨在提高语言模型应用程序的效率和有效性。下面详细介绍 DSPy 编程模型的三个基本组件以及它们如何彻底改变开发过程:
  • Signatures(签名):概述预期的行为,告诉LLM输入和输出是什么。
  • Modules(模块):构建利用大型语言模型 (LLM) 的程序的基础组件。
  • Optimizer(优化器):旨在调整 DSPy 程序的设置,包括Prompt和语言模型 (LM) 权重

Signatures(签名)
DSPy 中将任务分配给 LLM 时,将所需的行为指定为签名,是 DSPy 模块输入/输出行为的声明性规范。签名允许您告诉 LLM它需要做什么,而不是指定应该如何要求 LLM 执行此操作。与函数签名的工作方式类似,DSPy 签名通过详细描述输入和输出参数及其类型来工作,它采用并行概念进行操作,但有几个显著的区别:
  • 与主要描述参数的传统函数签名不同,DSPy 签名可以主动塑造和控制模块的行为。
  • DSPy Signatures 中使用的术语至关重要;它清楚地传达了语义角色,区分了“question”和“answer”或“sql_query”和“python_code”等元素。
为什么使用签名?DSPy 编写签名的方法提供了一种更结构化、更灵活、更可重复的方法。DSPy 编译器的任务是根据手头的数据和设定的管道,专门为概述的签名制作优化的Prompt或微调 LLM。这个过程通常不是通过创造力,而是通过广泛的实验和直接的度量优化,来超越人类在Prompt创建方面的能力。
签名可以定义为一个短字符串,其中的参数名称定义输入/输出的语义角色。
  1. 问答:"question -> answer"
  2. 情绪分类:"sentence -> sentiment"
  3. 摘要:"document -> summary"
签名还可以有多个输入/输出字段。
  1. 检索增强问答:"context, question -> answer"
  2. 带推理的多项选择题回答:"question, choices -> reasoning, selection"
    对于字段,任何有效的变量名都可以!字段名应该具有语义意义,但要从简单开始,不要过早优化关键字!将这种黑客行为留给 DSPy 编译器。例如,"document -> summary"、"text -> gist"、"long_context -> tldr"。


Modules(模块)
DSPy 模块是构建利用大型语言模型 (LLM) 的程序的基础组件。
  • 每个内置模块都抽象出一种提示技术(如思路链或 ReAct)。至关重要的是,它们被泛化以处理任何DSPy 签名。
  • DSPy 模块具有可学习的参数(即,组成提示和 LM 权重的小片段),可以被调用(调用)来处理输入和返回输出。
  • 多个模块可以组合成更大的模块(程序)。DSPy 模块直接受到 PyTorch 中的 NN 模块的启发,但应用于 LLM 程序。
你可能已经知道各种提示模型的技术,包括以“你的任务是...... ”或“你是...... ”等短语作为提示,采用思路链式方法,提示“让我们一步一步思考不要编造任何东西”或“仅使用提供的上下文。“,或者用诸如“不要编造任何东西”或“仅使用提供的上下文”之类的指令来结束提示。
DSPy 模块设计有模板和参数来封装这些提示策略。本质上,它们通过应用提示、微调、增强和推理方法来为特定任务定制 DSPy 签名。
使用 ChainOfThought 模块初步实现“context, question -> answer” 的签名

DSPy有很一些内置的模块可以使用,详细教程可以参考官网
  • dspy.Predict基本预测器。不修改签名。处理学习的关键形式(即存储指令和演示并更新到 LM)。
  • dspy.ChainOfThought:教导 LLM 在做出签名回应之前逐步思考。
  • dspy.ProgramOfThought:教导 LLM 输出代码,其执行结果将决定响应。
  • dspy.ReAct:可以使用工具来实现给定签名的代理。
  • dspy.MultiChainComparison:可以比较多个输出以ChainOfThought产生最终预测。
    我们还有一些函数式模块:
  • dspy.majority:可以进行基本投票,从一组预测中返回最受欢迎的回应。
DSPy 只是 Python 代码,它使用您喜欢的任何控制流中的模块。有时内部会有一些魔法compile来跟踪您的 LLM 调用。这意味着,你可以自由调用模块,无需为链式调用做任何奇怪的抽象。这基本上是 PyTorch 针对运行定义/动态计算图的设计方法。

Optimizer(优化器)
DSPy 优化器旨在调整 DSPy 程序的设置,包括提示和语言模型 (LM) 权重,旨在增强特定指标,例如准确性。
DSPy 具有多种内置优化器,每种优化器都采用不同的方法。本质上,DSPy 优化器需要三个关键组件:
  1. DSPy 程序:这可以是简单的单一模块(如dspy.Predict ),也可以是涉及多个模块协同工作的更复杂的设置。
  2. 指标:通过分配分数来评估程序输出的函数,分数越高表示性能越好。
  3. 一组训练输入:即使数量不多(约 5 到 10 个示例),可能不完整(仅包含程序的输入而没有相应的输出),也可能足够了。
DSPy 能够处理有限的数据,这意味着您可以从一个小数据集开始,并仍然取得令人印象深刻的成果。但是,如果您可以访问更大的数据集,DSPy 能够利用它来产生更好的结果。

给定损失函数和一些训练数据,传统的深度神经网络(DNN)可以通过梯度下降进行优化。
DSPy 程序由多个 LLM 调用组成,这些调用堆叠在一起作为 DSPy 模块。每个 DSPy 模块都有三类内部参数:(1) LLM 权重、(2) 指令和 (3) 输入/输出行为的样本。
给定一个指标,DSPy 可以使用多阶段优化算法优化这三个指标。这些算法可以结合梯度下降(用于 LLM 权重)和离散 LLM 驱动的优化,即用于制作/更新指令和创建/验证演示。DSPy 演示就像少数样本示例,但功能强大得多。它们可以根据您的程序从头开始创建,并且可以通过多种有效方式优化它们的创建和选择。
在许多情况下,我们发现编译产生的提示比人工编写的提示更好。这并不是因为 DSPy 优化器比人类更有创造力,而只是因为他们可以更系统地尝试更多的东西,并直接调整指标。

DSPy 与 LangChain、LlamaIndex等框架
LangChainLlamaIndex等创新等创新技术在许多使用大型语言模型 (LLM) 的人员的工具包中,它们找到了自己的位置,解决了独特的挑战并增强了模型功能。然而,处理涉及复杂逻辑的任务或根据特定需求定制模型仍然会带来挑战。
DSPy 的出现,旨在简化我们与 LLM 的互动方式。DSPy 秉承编程至上的理念,力求简化传统上需要复杂快速制作或密集模型调整的任务。DSPy 和 LangChain 可视为制作由语言模型驱动的应用程序的得力助手。
LangChain 擅长将复杂问题分解为易于管理的部分,生成结构化的输出以改进 DSPy 的功能——想象一下将注意力集中在诸如更精确地发现谎言之类的棘手任务上。
LlamaIndex 通过增强从海量数据集中筛选和检索精确信息的能力而成为人们关注的焦点,使其成为那些希望充分利用语言模型进行详细和准确数据探索的人不可或缺的盟友。
另一方面,DSPy 的优势在于减少了手动提示制作的需求。它的工具包允许对任何语言模型进行微调以追求特定目标,从而使模型更加通用并能适应新的挑战或数据集。DSPy适用于需要轻量级但自动优化的编程模型的情况,而不是预定义提示和集成的库。如果您熟悉神经网络:这就像 PyTorch(即代表DSPy)和 HuggingFace Transformers(即代表更高级的库)之间的区别。

DSPy编译可能昂贵且慢
为了反映编译指标,官方介绍了一个实验以供参考,该实验SimplifiedBaleen使用dspy.BootstrapFewShotWithRandomSearch优化器对gpt-3.5-turbo-11067 个候选程序和 10 个线程的模型进行编译。报告称,编译此程序大约需要 6 分钟,需要 3200 次 API 调用、270 万个输入令牌和 156,000 个输出令牌,总成本为 3 美元(按 OpenAI 模型的当前定价)。
编译 DSPy optimizers会产生额外的 LLM 调用,但通过最小化执行来弥补这一开销,以最大限度地提高性能。这为提高较小模型的性能提供了途径,方法是使用较大的模型编译 DSPy 程序,以在编译时学习增强的行为,并在推理时将此类行为传播到经过测试的较小模型。


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅