В этом руководстве мы рассмотрим, как создать интеллектуальную и самокорректирующуюся систему ответов на вопросы с помощью фреймворка 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 для проверки фактической корректности ответа.