Stanford DSPy#
DSPy - фреймворк для решения сложных задач с использованием языковых моделей (LM) и моделей поиска информации (RM). Он объединяет методы подсказок и тонкой настройки LM, а также подходы к рассуждениям, самоулучшению и расширению возможностей за счет поиска информации и инструментов.
Предоставляет модульные и декларативные компоненты для управления LM с помощью знакомого синтаксиса Python.
Представляет автоматический компилятор, который обучает LM выполнению декларативных шагов программы.
Vector DB может использоваться в качестве механизма поиска информации в потоке DSPy.
Установка#
Для интеграции поиска информации с Vector DB включите dspy-ai с дополнительным параметром qdrant.
pip install dspy-ai dspy-qdrant fastembed
Использование#
Можно настроить параметры DSPy, чтобы использовать модель поиска информации Vector DB следующим образом:
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")
С настроенным Vector DB в качестве поискового модуля контекстной информации можно создать модуль 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
...
Теперь, когда общая схема извлечения данных из контекста установлена, можно добавить множество взаимодействий, предлагаемых DSPy, используя поисковую систему Vector DB для получения контекстной информации.
Дополнительная документация#
Найдите документацию и примеры использования DSPy здесь.