用途:DSPy 被称为“提示词的 PyTorch”,本技能介绍如何以声明式方式编写 DSPy 3.2.x 程序——声明类型化输入输出契约(Signature),组合成 Module,由优化器而非人工调整指令与少样本示例,不手写原始提示词。
主要能力:用 dspy.configure(lm=...) 全局配置单个语言模型;定义 dspy.Signature 子类,用 dspy.InputField()/dspy.OutputField() 标注字段(docstring 即指令);用预测器包装:dspy.Predict(直接结构化 I/O)、dspy.ChainOfThought(增加 reasoning 字段)、dspy.ReAct(工具型智能体,含 Thought/Action/Observation 循环)、dspy.ProgramOfThought(生成并运行 Python,需 Deno)、dspy.RLM(长上下文)。通过继承 dspy.Module 组合多步程序。内置提供商使用 dspy.LM("provider/model"),自定义后端可继承 dspy.BaseLM。字段可直接使用 Pydantic 类型,dspy.TypedPredictor 已被取代。
使用方式:典型流程为配置 LM、定义 Signature、包装预测器、继承 Module 实现 forward、调用程序获取 Prediction。保存与加载有两种模式:program.save("program.json", save_program=False) 仅保存状态(可移植 JSON,加载时需重建架构);program.save("./program_dir/", save_program=True) 保存完整程序(cloudpickle 到目录,可整体恢复)。配置示例:dspy.configure(lm=dspy.LM("openai/gpt-4o", temperature=0.0, max_tokens=2000), track_usage=True, async_max_workers=4)。常见提供商前缀包括 openai/、anthropic/、azure/、vertex_ai/、bedrock/、ollama/;本地 Ollama 可用 dspy.LM("ollama_chat/llama3.1:8b", api_base="http://localhost:11434")。
适用场景:需要结构化输出、推理任务、工具调用智能体、数学/数据任务、长上下文探索,以及后续用 GEPA 做自动优化的 LLM 程序。
限制与注意:3.2.x 默认在传入多余输入字段或类型不匹配时发出警告,应优先视为调用点缺陷;确需传入预序列化值时可 dspy.configure(warn_on_type_mismatch=False) 关闭。应避免硬编码提示词、使用 dspy.TypedPredictor、dspy.OpenAI/dspy.settings.configure、手改 signature.instructions、用 pickle.dump 保存等反模式。ProgramOfThought 需要 Deno。更多评估、优化、长上下文与完整 API 参考见相关技能与 reference.md。