|
通过示例和源码解析的方式对Optimizer类进行了详细解读,本文将从示例和可视化方式,观测DSPy是如何对Prompt进行优化的。DSPy是开源社区比较有影响力的大模型提示词、参数调优仓库,使得用户以一种编程的方式,调整和优化大模型模板和参数。DSPy的设计思想借鉴了Torch,使得Torch的使用者可以很快的理解DSPy的使用方式。使用Torch时,研究人员往往会使用Tensorboard等可视化工具来直观的查看模型的训练情况,那么是否有适配DSPy优化过程的可视化工具呢?答案是Yes,本文将首先介绍带有DSPy优化器的优化示例,然后使用 langwatch 仓库提供的DSPy Visualizer 查看具体的优化过程,包括显示每个优化步骤的Predictior、Example、大模型调用内容等。 1. 安装 在使用DSPy Visualizer之前,需要确保已经安装了langwatch 以及 dspy 的python包。 pipinstalldspy-ai==2.4.12pipinstalllangwatch 2. 编写DSPy程序 本示例将编写简单的优化器使用示例,如图-1所示,DSPy的优化流程需要准备数据集、程序主体、优化器以及衡量指标,然后在固定数据集合衡量指标的情况下,调整程序主体和算法以达到优化的目的,具体步骤如下: 1)获取数据集,本示例中通过导入方式获取训练集和测试集。 importdspyfromget_datasetimportcustom_trainsetastrain_setfromget_datasetimportcustom_testsetastest_set 2)导入衡量指标以及优化器,本示例中使用基本的 BootstrapFewShot优化器。fromdspy.datasets.gsm8kimportgsm8k_metricfromdspy.telepromptimportBootstrapFewShot 3)定义大模型配置,本示例中使用了 ollama 启动的本地llama3模型服务。#定义并设置大模型model_name='llama3'lm=dspy.OllamaLocal(model=model_name)dspy.settings.configure(lm=lm) 4)定义程序主体(Module),程序主体包含初始化(__init__)以及推理(forward)两部分逻辑,使用了dspy.ChainOfThought思维模式实现推理过程。classCoT(dspy.Module):def__init__(self):super().__init__()self.prog=dspy.ChainOfThought("question->answer")
defforward(self,question):returnself.prog(question=question)
cot=CoT() 5)配置优化器参数,通过调整优化器参数,可以调整最终的提示词效果。config=dict(max_bootstrapped_demos=4,max_labeled_demos=4,max_rounds=2)
#Optimize!Usethe`gsm8k_metric`here.Ingeneral,themetricisgoingtotelltheoptimizerhowwellit'sdoing.teleprompter=BootstrapFewShot(metric=gsm8k_metric,**config)
3. 优化与可视化
为了实现可视化DSPy的优化过程,本实例引入langwatc包,langwatc需要在优化开始前初始化,如下面代码所示。DSPy Visualizer的可视化服务可以通过在线的方式访问,也可以通过本地部署安装Docker镜像的方式使用。importlangwatchlangwatch.login()langwatch.dspy.init(experiment="test",optimizer=teleprompter)optimized_cot=teleprompter.compile(cot,trainset=train_set) 至此,本示例代码已完成,接下来需要做好可视化准备工作,可视化准备主要包含启动可视化程序和获取langwatch的API-Key。由于langwatch已经提供了可视化的在线服务,因此在线方式无需启动可视化程序,之间获取API-Key即可,如下步骤所示: 1)登录 langwatch在线dashboard ,获取API-Key。2)本地运行程序,根据提示输入API-Key,并在 dashboard查看结果。 如上界面展示的为训练两步得到的可视化数据,可以看出在第一步时优化器得到了3个demo,第二步时,优化器得到了4个demo。 也可以点击具体的 Predictors、Examples、LLM Calls(图中LLM Call无信息,因为使用了LLama3本地访问,如果是OpenAI接口则有数据显示)查看详细信息。 如下图所示,显示了变量名为 prog 的Predictor类的信息,包括输入输出、得到的示例等。下图显示了在优化过程中所测试的示例,以及得到的分数,可以看出前两个示例预测结果格式不符合要求,判定为错误,后三个示例预测结果正确。3.2.本地访问
本地启动可视化程序需要安装Docker,然后做如下3步动作: 1)下载github langwatch 仓库并 复制 langwatch/.env.example 中的文件内容到langwatch/.env 2)运行 docker compose up --build 3)打开 LangWatch 通过网址http://localhost:3000 |