微信扫码
与创始人交个朋友
我要投稿
斯坦福大学NLP小组开源了一个名为DSPy的star数高达18.4k的LLM开发框架,它提出了一种全新的方式来构建基于大语言模型的应用 - 不是通过手工编写和优化提示词(Prompt),而是通过编程的方式来声明和组合模块。本文带你一探这个创新框架的特点和优势。
在当前的LLM应用开发中,我们主要依赖于手工编写和优化提示词模板。这种方式存在以下问题:
1. 提示词往往冗长且脆弱,需要反复调试
2. 针对特定场景优化的提示词难以迁移到其他场景
3. 整个过程较为艺术化,缺乏系统性
4. 难以构建和维护复杂的LLM应用流程
DSPy框架正是为了解决这些问题而生。它让开发者可以用更加结构化、模块化的方式来开发LLM应用。
DSPy的核心理念是将LLM应用开发转变为编程式的范式,主要包含三个关键抽象:
1. Signatures(签名): 声明式地定义输入输出行为
2. Modules(模块): 封装常用的提示词模式,支持组合构建pipeline
3. Teleprompters(优化器): 自动优化生成的提示词
让我们逐一来看这些概念。
在DSPy中,我们使用Signature来声明任务的输入输出行为。看看下面这行代码:
sig = dspy.Signature("question -> answer")
没错,就这么简单!这行代码优雅地完成了原本需要手写几百字提示词的工作。如此简洁的声明式语法,不得不让人感叹DSPy设计的精妙!
当然,我们还可以用类定义的方式来实现更细粒度的控制:
class BasicQA(dspy.Signature):
"""回答问题的简单问答模块"""
question = dspy.InputField()
answer = dspy.OutputField(desc="brief answer")
这两种方式都比手写长篇的提示词要简洁得多,而且更容易维护和修改。
DSPy提供了多个内置模块,覆盖了常见的提示词技术:
• ChainOfThought: 思维链推理
• ProgramOfThought: 编程式思维
• Retriever: 检索增强生成
• ReAct: 推理和行动交互
我们可以组合这些模块构建复杂的应用。例如一个简单的RAG系统:
class RAG(dspy.Module):
def __init__(self, num_passages=3):
super().__init__()
self.retrieve = dspy.Retrieve(k=num_passages)
self.generate = dspy.ChainOfThought(RAGSignature)
def forward(self, question):
context = self.retrieve(question).passages
return self.generate(context=context, question=question)
DSPy的一大亮点是提供了优化器来自动优化生成的提示词。我们只需要:
1. 提供一些训练样例
2. 定义评估指标
3. 使用优化器编译模块
例如:
# 定义评估指标
def evaluate(example, pred):
return pred in ["positive", "negative", "neutral"]
# 创建优化器
optimizer = dspy.BootstrapFewShot(
metric=evaluate,
trainset=examples
)
# 编译优化
compiled_model = optimizer.compile(MyModule())
相比传统的提示词工程,DSPy具有以下优势:
1. 更高的可维护性: 代码更加结构化,易于理解和修改
2. 更好的复用性: 模块可以方便地在不同项目间复用
3. 自动优化: 优化器可以自动改进提示词效果
4. 更强的扩展性: 易于构建复杂的应用流程
1. 从简单的Signature开始,逐步熟悉DSPy的编程模式
2. 充分利用内置模块,避免重复造轮子
3. 善用优化器提升效果
4. 注意保持代码的模块化和可维护性
DSPy代表了LLM应用开发的一个新思路 - 从手工调优提示词转向声明式编程。虽然目前社区规模还不及LangChain等框架,但其理念和设计都很有前景。如果你对提示词工程的繁琐感到困扰,不妨尝试一下这个创新框架。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-22
如何写出高质量的 prompt
2024-11-22
微软发现不同prompt模版会导致最大40%性能差距!
2024-11-22
原理解析:17岁高中生「神级 Prompt,把 Claude 强化成满血 o1」
2024-11-22
10000块的提示词被破解了
2024-11-22
叙事Prompt也能提升LLM推理能力?用叙事框架SoT解决复杂问题 |波恩大学最新
2024-11-21
致继刚,感谢你继承乔哈里视窗和提示词心法
2024-11-20
郭美青 | 从Demo到商用—构建企业级提示词工程,加速AI应用商用落地
2024-11-20
云中江树 | 重塑自然语言编程,Agent 训练的核心探索
2024-06-29
2023-06-08
2024-08-20
2024-06-27
2024-06-14
2024-07-09
2024-07-12
2024-09-17
2024-06-26
2024-06-29