在现代生成式人工智能(GenAI)领域,提示工程长期以来都是与大语言模型(LLM)交互的核心方式。开发者需要撰写冗长、详尽的分步指南来指导 ChatGPT 或 Claude 等模型,以获得期望结果。尽管精心设计提示需耗费大量时间精力,但因更好的提示通常带来更优结果,人们仍愿意投入。
然而,打造理想提示并非易事。这是不断试错的过程,对于特定任务或模型,很难确定最优提示策略。要得到满意结果往往需多次迭代,尤其当提示长达数千字时,过程会更繁琐。

为应对这些挑战,DataBricks 推出 DSPy 框架。DSPy 即声明式自改进 Python(Declarative Self-improving Python),能帮助开发者构建模块化人工智能应用。其核心理念是将大语言模型任务视为编程问题,而非手动提示过程。借助标准构建模块,开发者可创建从简单分类器到检索增强生成(RAG)系统,甚至智能代理等各类人工智能应用。
这种方法前景广阔,若能像构建传统软件一样搭建人工智能应用,将带来极大便利。接下来,我们将深入探索 DSPy 框架及其构建大语言模型管道的能力,从简单组合数学任务入手掌握基础知识,再应用于 NPS 贬损者评论分类的实际业务问题,并测试其自动指令优化特性。
DSPy 基础入门
探索 DSPy 框架首先需安装该包,使用命令:
pip install -U dspy
DSPy 以结构化和模块化方式定义大语言模型应用,每个应用由三个主要组件构建:
-
语言模型:用于回答问题的大语言模型。
-
签名(signature):程序输入和输出的声明,明确要解决的任务。
-
模块(module):提示技术,即解决任务的方式。
我们通过简单示例实践。首先从语言模型开始,它是大语言模型驱动应用的核心。这里使用 Meta 的 Llama 本地模型,通过 Ollama 访问。若未安装 Ollama,可按官方文档操作。
在 DSPy 应用中创建语言模型,需初始化 dspy.LM 对象并设为默认模型。DSPy 不仅支持本地模型,还支持 OpenAI 和 Anthropic 等流行 API。
import dspy
llm = dspy.LM('ollama_chat/llama3.2',
api_base='http://localhost:11434',
api_key='', temperature = 0.3)
dspy.configure(lm=llm)
语言模型设置完成后,通过创建模块和签名定义任务。
签名定义模型的输入和输出,告知模型提供了什么及期望得到什么结果,但不指定解决方法,仅为声明。
DSPy 定义签名有内联和类两种方式。首个示例用简单内联方式,稍后介绍基于类的定义。
模块是 DSPy 应用的构建块,抽象了思维链(Chain-of-Thought)或 ReAct 等不同提示策略,且设计为可与任何签名配合使用,无需担心兼容性。
常用 DSPy 模块(完整列表见文档):
-
dspy.Predict:基本预测器。
-
dspy.ChainOfThought:引导大语言模型分步思考后返回答案。
-
dspy.ReAct:可调用工具的基本代理。
我们从最简单的 dspy.Predict 开始,构建回答组合数学问题的基本模型。因期望答案为整数,在签名中指定。
simple_model = dspy.Predict("question -> answer: int")
模型构建完成,可开始提问:
simple_model(
question="""I have 5 different balls and I randomly select 4.
How many possible combinations of the balls I can get?"""
# Prediction(answer=210)
得到的答案错误,但可通过 dspy.inspect_history 命令查看内部工作机制和完整日志:
dspy.inspect_history(n = 1)
# System message:
#
# Your input fields are:
# 1. `question` (str):
# Your output fields are:
# 1. `answer` (int):
# All interactions will be structured in the following way, with
# the appropriate values filled in.
#
# In

最低0.47元/天 解锁文章
515

被折叠的 条评论
为什么被折叠?



