Q&A через Search API и HyDE re-ranking
Строим RAG поверх внешнего Search API (NewsAPI): генерация вариантов запроса моделью, получение статей, re-ranking через HyDE (Hypothetical Document Embeddings), ответ с источниками.
Реализуйте Q&A пайплайн поверх любого публичного Search API (например, Wikipedia API или DuckDuckGo). Запустите 3 вопроса. Сравните качество ответов с HyDE и без (прямой поиск по тексту вопроса).
Проверка задания
Скопируйте и адаптируйте под свой контекст. Текст в треугольных скобках — то, что нужно заменить.
from openai import OpenAI
from numpy import dot
import json, requests
client = OpenAI()
def json_gpt(prompt):
r = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role":"user","content":prompt}],
response_format={"type":"json_object"},
)
return json.loads(r.choices[0].message.content)
def get_embedding(text):
return client.embeddings.create(
model="text-embedding-ada-002", input=[text]
).data[0].embedding
def hyde_rerank(question, articles):
hyp = json_gpt(f'Hypothetical answer to: {question}. Format: {{"hypotheticalAnswer":"..."}}')["hypotheticalAnswer"]
h_emb = get_embedding(hyp)
scored = [(a, dot(h_emb, get_embedding(a["title"]))) for a in articles]
return sorted(scored, key=lambda x: x[1], reverse=True)[:5]