DSPy编译报错:Failed to run or to evaluate example Example 求助
问题诊断与解决方法
错误原因分析
训练集构造错误
你创建trainset时直接将整个DataFrame的列(Series对象)传入单个dspy.Example,导致每个Example的输入是整列文本和标签,而非每条新闻稿对应一个独立Example。DSPy无法处理这种批量数据的单个Example,直接引发运行和评估失败。Signature描述歧义
Signature的规则描述过于绕口,容易让大语言模型误解分类标准——比如混淆“超额收费”“未提供服务收费”“不必要医疗服务”的边界,导致模型生成的输出不符合0/1的要求,触发评估错误。Bootstrap参数与训练集不匹配
你设置的max_bootstrapped_demos=4和max_labeled_demos=4需要足够的有效训练示例支撑,但错误的训练集构造导致实际可用的有效Example数量为0,自然无法生成bootstrapped traces。
解决方法
1. 修正训练集构造
将每条数据行转换为独立的dspy.Example,同时把标签转为字符串避免类型不匹配:
trainset = [dspy.Example(text=row["pr"], answer=str(row["upc"])) for _, row in train_df.iterrows()]
2. 简化并明确Signature规则
重写Signature的文档字符串,让分类标准清晰无歧义:
class upc(dspy.Signature): """ 分类美国司法部新闻稿中的医疗服务商欺诈行为:仅当服务商**为未提供的服务收费**时输出1,其他情况(包括超额收费、提供了不必要的医疗服务)输出0。 """ text = dspy.InputField(desc="美国司法部新闻稿文本") answer = dspy.OutputField(desc="仅输出数字1或0,1表示存在目标欺诈,0表示不存在")
3. 调整Bootstrap参数并验证训练集
先确认训练集格式正确,再根据数据规模调整参数:
# 验证训练集格式 print("有效训练示例数量:", len(trainset)) print("第一条示例内容:", trainset[0]) # 先减小参数值,确保能生成traces teleprompter = BootstrapFewShot( max_bootstrapped_demos=2, max_labeled_demos=2 ) # 先测试单个示例的模型输出是否符合要求 test_example = trainset[0] prediction = class6(text=test_example.text) print("单例测试预测结果:", prediction.answer) # 确认输出正常后再执行编译 optimized_module = teleprompter.compile(class6, trainset=trainset)
4. 检查模型后端配置
确保已正确配置DSPy的大语言模型后端(如OpenAI API密钥),基础模型调用失败也会引发此类错误:
import dspy # 以OpenAI为例配置模型 turbo = dspy.OpenAI(model='gpt-3.5-turbo', api_key='你的API密钥') dspy.settings.configure(lm=turbo)
内容的提问来源于stack exchange,提问作者mosh
相关产品推荐
相关产品推荐

