You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DSPy编译报错:Failed to run or to evaluate example Example 求助

问题诊断与解决方法

错误原因分析

  1. 训练集构造错误
    你创建trainset时直接将整个DataFrame的列(Series对象)传入单个dspy.Example,导致每个Example的输入是整列文本和标签,而非每条新闻稿对应一个独立Example。DSPy无法处理这种批量数据的单个Example,直接引发运行和评估失败。

  2. Signature描述歧义
    Signature的规则描述过于绕口,容易让大语言模型误解分类标准——比如混淆“超额收费”“未提供服务收费”“不必要医疗服务”的边界,导致模型生成的输出不符合0/1的要求,触发评估错误。

  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 03:35:40