Руководство по созданию модульных и самокорректирующихся систем ответов на вопросы с помощью DSPy

В этом руководстве мы рассмотрим, как создать интеллектуальную и самокорректирующуюся систему ответов на вопросы с помощью фреймворка DSPy, интегрированного с моделью Google Gemini 1.5 Flash.

Шаг 1: Установка библиотек

Для начала установим необходимые библиотеки: DSPy для декларативных AI-конвейеров и google-generativeai для доступа к моделям Google Gemini.

“`python
!pip install dspy-ai google-generativeai
“`

“`python
import dspy
import google.generativeai as genai
import random
from typing import List, Optional
“`

Шаг 2: Настройка Gemini

После импорта необходимых модулей настроим Gemini с помощью нашего API-ключа.

“`python
GOOGLEAPIKEY = “Use Your Own API Key”
genai.configure(apikey=GOOGLEAPI_KEY)

dspy.configure(lm=dspy.LM(model=”gemini/gemini-1.5-flash”, apikey=GOOGLEAPI_KEY))
“`

Шаг 3: Определение сигнатур

Определим две сигнатуры DSPy для структурирования входов и выходов нашей системы.

“`python
class QuestionAnswering(dspy.Signature):
“””Answer questions based on given context with reasoning.”””
context: str = dspy.InputField(desc=”Relevant context information”)
question: str = dspy.InputField(desc=”Question to answer”)
reasoning: str = dspy.OutputField(desc=”Step-by-step reasoning”)
answer: str = dspy.OutputField(desc=”Final answer”)
“`

“`python
class FactualityCheck(dspy.Signature):
“””Verify if an answer is factually correct given context.”””
context: str = dspy.InputField()
question: str = dspy.InputField()
answer: str = dspy.InputField()
is_correct: bool = dspy.OutputField(desc=”True if answer is factually correct”)
“`

Шаг 4: Создание модуля AdvancedQA

Создадим модуль AdvancedQA для добавления возможности самокоррекции в нашу систему ответов на вопросы.

“`python
class AdvancedQA(dspy.Module):
def init(self, max_retries: int = 2):
super().init()
self.maxretries = maxretries
self.qa_predictor = dspy.ChainOfThought(QuestionAnswering)
self.fact_checker = dspy.Predict(FactualityCheck)

def forward(self, context: str, question: str) -> dspy.Prediction:
prediction = self.qa_predictor(context=context, question=question)

for attempt in range(self.max_retries):
factcheck = self.factchecker(
context=context,
question=question,
answer=prediction.answer
)

if factcheck.iscorrect:
break

refined_context = f”{context}nnPrevious incorrect answer: {prediction.answer}nPlease provide a more accurate answer.”
prediction = self.qapredictor(context=refinedcontext, question=question)

return prediction
“`

Шаг 5: Создание модуля SimpleRAG

Создадим модуль SimpleRAG для симуляции Retrieval-Augmented Generation с помощью DSPy.

“`python
class SimpleRAG(dspy.Module):
def init(self, knowledge_base: List[str]):
super().init()
self.knowledgebase = knowledgebase
self.qa_system = AdvancedQA()

def retrieve(self, question: str, top_k: int = 2) -> str:
# Simple keyword-based retrieval (in practice, use vector embeddings)
scored_docs = []
question_words = set(question.lower().split())

for doc in self.knowledge_base:
doc_words = set(doc.lower().split())
score = len(questionwords.intersection(docwords))
scored_docs.append((score, doc))

# Return top-k most relevant documents
scored_docs.sort(reverse=True)
return “nn”.join([doc for , doc in scoreddocs[:top_k]])

def forward(self, question: str) -> dspy.Prediction:
context = self.retrieve(question)
return self.qa_system(context=context, question=question)
“`

Шаг 6: Оптимизация с помощью BootstrapFewShot

Используем DSPy’s BootstrapFewShot оптимизатор для улучшения системы ответов на вопросы.

“`python
knowledge_base = [
“Use Your Context and Knowledge Base Here”
]

training_examples = [
dspy.Example(
question=”What is the height of the Eiffel Tower?”,
context=”The Eiffel Tower is located in Paris, France. It was constructed from 1887 to 1889 and stands 330 meters tall including antennas.”,
answer=”330 meters”
).with_inputs(“question”, “context”),

dspy.Example(
question=”Who created Python programming language?”,
context=”Python is a high-level programming language created by Guido van Rossum. It was first released in 1991 and emphasizes code readability.”,
answer=”Guido van Rossum”
).with_inputs(“question”, “context”),

dspy.Example(
question=”What is machine learning?”,
context=”ML focuses on algorithms that can learn from data without being explicitly programmed.”,
answer=”Machine learning focuses on algorithms that learn from data without explicit programming.”
).with_inputs(“question”, “context”)
]

def accuracy_metric(example, prediction, trace=None):
“””Simple accuracy metric for evaluation”””
return example.answer.lower() in prediction.answer.lower()

print(” Initializing DSPy QA System with Gemini…”)
print(” Note: Using Google’s Gemini 1.5 Flash (free tier)”)
ragsystem = SimpleRAG(knowledgebase)

basic_qa = dspy.ChainOfThought(QuestionAnswering)

print(“n Before Optimization:”)
test_question = “What is the height of the Eiffel Tower?”
testcontext = knowledgebase[0]
initialprediction = basicqa(context=testcontext, question=testquestion)
print(f”Q: {test_question}”)
print(f”A: {initial_prediction.answer}”)
print(f”Reasoning: {initial_prediction.reasoning}”)

print(“n Optimizing with BootstrapFewShot…”)
optimizer = dspy.BootstrapFewShot(metric=accuracymetric, maxbootstrapped_demos=2)
optimizedqa = optimizer.compile(basicqa, trainset=training_examples)

print(“n After Optimization:”)
optimizedprediction = optimizedqa(context=testcontext, question=testquestion)
print(f”Q: {test_question}”)
print(f”A: {optimized_prediction.answer}”)
print(f”Reasoning: {optimized_prediction.reasoning}”)
“`

Заключение

Мы успешно продемонстрировали полный потенциал DSPy для создания продвинутых систем ответов на вопросы. DSPy упрощает разработку интеллектуальных модулей с чёткими интерфейсами, поддерживает циклы самокоррекции, интегрирует базовую выборку и позволяет оптимизировать несколько примеров с минимальными усилиями.

1. Какие библиотеки и инструменты используются для создания системы ответов на вопросы с помощью DSPy?

В статье используются библиотеки DSPy для декларативных AI-конвейеров и google-generativeai для доступа к моделям Google Gemini.

2. Как в системе ответов на вопросы с помощью DSPy реализована возможность самокоррекции?

Для реализации самокоррекции в системе ответов на вопросы с помощью DSPy создаётся модуль AdvancedQA. Он включает в себя модуль QuestionAnswering для генерации ответов и FactualityCheck для проверки их фактической корректности. Если ответ оказывается некорректным, система добавляет уточняющий контекст и повторяет попытку.

3. Какие шаги необходимо выполнить для создания системы ответов на вопросы с помощью DSPy?

Для создания системы ответов на вопросы с помощью DSPy необходимо выполнить следующие шаги:
* установить необходимые библиотеки;
* настроить Gemini с помощью API-ключа;
* определить сигнатуры для структурирования входов и выходов системы;
* создать модуль AdvancedQA для добавления возможности самокоррекции;
* создать модуль SimpleRAG для симуляции Retrieval-Augmented Generation;
* оптимизировать систему с помощью BootstrapFewShot.

4. Какие преимущества даёт использование DSPy для создания систем ответов на вопросы?

Использование DSPy для создания систем ответов на вопросы упрощает разработку интеллектуальных модулей с чёткими интерфейсами, поддерживает циклы самокоррекции, интегрирует базовую выборку и позволяет оптимизировать несколько примеров с минимальными усилиями.

5. Какие сигнатуры используются для структурирования входов и выходов системы ответов на вопросы с помощью DSPy?

Для структурирования входов и выходов системы ответов на вопросы с помощью DSPy используются две сигнатуры: QuestionAnswering для ответов на вопросы на основе контекста с объяснением и FactualityCheck для проверки фактической корректности ответа.

Источник

Оставьте комментарий