这是官方文档
官方文档给示例数据的量划分了10/50/300等档位,对应BootstrapFewShot/BootstrapFewShotWithRandomSearch/MIPRO.
我们以10条示例数据example为例,即选用BootstrapFewShot
DSPy认为用原始数据直接做few-shot效果不好的原因是:output的answer不是LLM习惯的文本方式,所以尝试用一个teacher LLM(就是你提供的LLM,只不过现在当成teacher用),它满载max_labeled_example数量的few-shot example,这个few-shot example不会被改动。然后遍历所有你给的trainset的数据作为example,生成一个LLM answer。你还要给一个eval函数以评价LLM answer与ground truth answer是否一样。若一样,则把当前input和生成的answer存起来,此时虽然input还是trainset里的,但是answer已经是当前LLM习惯的方式了。我们认为这个数据替代原本的数据更好。
对于有多个中间生成内容的Chain,DSPy也有处理,因此不用担心,你只需要考虑eval metric如何设计就好,此时你需要处理的参数有example, prediction, trace,分别对应input,最终的output,中间过程trace。
student LLM会从上述备选few-shot example里先抽取max_bootstrap_example个例子,然后再从trainset里抽取max_labeled_example-max_bootstrap_example个例子。后者是不得已而为之,如果前者只能拿出2个,few-shot又要凑齐4个,那只能从原trainset里拿了,即使它在我们看来不是LLM生成的合适的answer。