跳到主要内容

dspy.Predict

构造函数

构造函数初始化 Predict 类并设置其属性,接受 signature 和额外的配置选项。如果 signature 是一个字符串,它会处理输入和输出字段,生成指令,并为指定的 signature 类型创建模板。

class Predict(Parameter):
def __init__(self, signature, **config):
self.stage = random.randbytes(8).hex()
self.signature = signature
self.config = config
self.reset()

if isinstance(signature, str):
inputs, outputs = signature.split("->")
inputs, outputs = inputs.split(","), outputs.split(",")
inputs, outputs = [field.strip() for field in inputs], [field.strip() for field in outputs]

assert all(len(field.split()) == 1 for field in (inputs + outputs))

inputs_ = ', '.join([f"`{field}`" for field in inputs])
outputs_ = ', '.join([f"`{field}`" for field in outputs])

instructions = f"""给定字段 {inputs_},生成字段 {outputs_}。"""

inputs = {k: InputField() for k in inputs}
outputs = {k: OutputField() for k in outputs}

for k, v in inputs.items():
v.finalize(k, infer_prefix(k))

for k, v in outputs.items():
v.finalize(k, infer_prefix(k))

self.signature = dsp.Template(instructions, **inputs, **outputs)

参数:

  • signature (Any): 预测模型的签名。
  • **config (dict): 模型的额外配置参数。

方法

__call__(self, **kwargs)

这个方法作为 forward 方法的包装器。它允许通过提供关键字参数来使用 Predict 类进行预测。

参数:

  • **kwargs: 预测所需的关键字参数。

返回:

  • forward 方法的结果。

示例

# 为基本问答定义一个简单的签名
class BasicQA(dspy.Signature):
"""用简短的事实性答案回答问题。"""
question = dspy.InputField()
answer = dspy.OutputField(desc="通常为1到5个单词之间")

# 将签名传递给 Predict 模块
generate_answer = dspy.Predict(BasicQA)

# 对特定输入调用预测器。
question='天空的颜色是什么?'
pred = generate_answer(question=question)

print(f"问题: {question}")
print(f"预测的答案: {pred.answer}")