Stanford DSPy

DSPy 是一个用于使用语言模型(LM)和检索模型(RM)解决高级任务的框架。它统一了提示和微调LM的技术,以及推理、自我改进以及通过检索和工具进行增强的方法。

  • 提供可组合和声明式的模块,以熟悉的 Python 语法指导 LM。

  • 引入了一个自动编译器,它会教导 LM 如何执行程序中的声明式步骤。

Qdrant 可用作 DSPy 流中的检索机制。

安装

要集成 Qdrant 检索,请包含带有 qdrant 额外项的 dspy-ai

pip install dspy-ai dspy-qdrant fastembed

用法

我们可以这样配置 DSPy 设置以使用 Qdrant 检索器模型

import os
import dspy
from dspy_qdrant import QdrantRM
from qdrant_client import QdrantClient

lm = dspy.LM("gpt-4o-mini", max_tokens=512,api_key=os.environ.get("OPENAI_API_KEY"))
client = QdrantClient(url=os.environ.get("QDRANT_CLOUD_URL"), api_key=os.environ.get("QDRANT_API_KEY"))
collection_name = "collection_name"
rm = QdrantRM(
    qdrant_collection_name=collection_name, 
    qdrant_client=client, 
    vector_name="dense",                 # <-- MATCHES your vector name
    document_field="passage_text",        # <-- MATCHES your payload field
    k=20)

dspy.settings.configure(lm=lm, rm=rm)

使用检索器非常简单。dspy.Retrieve(k) 模块将搜索与给定查询匹配的前 k 个段落。

retrieve = dspy.Retrieve(k=3)
question = "Some question about my data"
topK_passages = retrieve(question).passages

print(f"Top {retrieve.k} passages for question: {question} \n", "\n")

for idx, passage in enumerate(topK_passages):
    print(f"{idx+1}]", passage, "\n")

在将 Qdrant 配置为上下文检索器后,您可以像这样设置 DSPy 模块

class RAG(dspy.Module):
    def __init__(self, num_passages=3):
        super().__init__()

        self.retrieve = dspy.Retrieve(k=num_passages)
        ...

    def forward(self, question):
        context = self.retrieve(question).passages
        ...

有了通用的 RAG 蓝图,您现在可以添加 DSPy 提供的许多交互,其上下文检索由 Qdrant 提供支持。

下一步

此页面有用吗?

感谢您的反馈!🙏

很抱歉听到这个消息。😔 您可以在 GitHub 上编辑此页面,或者创建一个 GitHub issue。