HyDE: embeddingi hipotetycznych dokumentów
Wygeneruj za pomocą LLM fikcyjną „idealną” odpowiedź, utwórz jej embedding i wyszukuj na tej podstawie — to skuteczniejsze niż embeddingi krótkich zapytań.
HyDE: embeddingi hipotetycznych dokumentów to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Problem z embeddingami zapytań
Zapytania użytkowników są zwykle krótkie i zupełnie nie przypominają dokumentów, które chcemy pobrać.
- Zapytanie: „napraw moją klawiaturę”
- Dokument: „Jeśli klawisze klawiatury mechanicznej się zacinają, można wyczyścić przełączniki alkoholem izopropylowym...”
Wektory są odległe semantycznie, więc pobieranie pomija dokument.
Pomysł HyDE
HyDE = Hypothetical Document Embeddings (Gao et al. 2022).
- Poprosić LLM o napisanie zmyślonej „idealnej odpowiedzi” na zapytanie
- Osadzić zmyśloną odpowiedź, a nie zapytanie
- Użyć tego wektora do przeszukania rzeczywistego korpusu
Dlaczego to działa
Odpowiedź hipotetyczna wygląda jak prawdziwy dokument (podobne słownictwo, podobna struktura). Jej embedding znajduje się blisko embeddingów prawdziwych dokumentów — dlatego pobieranie znajduje je bardziej niezawodnie.
Implementation
def hyde_search(query, k=5):
# Step 1: hallucinate an answer
hypo_answer = llm.invoke(f'Please write a passage to answer the question: {query}').content
# Step 2: embed it
vec = embed(hypo_answer)
# Step 3: retrieve
return vector_db.query(vec, k=k)To, że odpowiedź jest błędna, nie stanowi problemu
Hipotetyczna odpowiedź HyDE może być błędna merytorycznie — i to nie szkodzi. Do pobierania używamy wyłącznie jej embeddingu. Następnie pobrane PRAWDZIWE dokumenty służą do wygenerowania ostatecznej odpowiedzi.
Code Example with LangChain
from langchain.chains import HypotheticalDocumentEmbedder
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
embeddings = HypotheticalDocumentEmbedder.from_llm(
ChatOpenAI(),
OpenAIEmbeddings(),
'web_search' # built-in prompt template
)
vector = embeddings.embed_query('How do I fix a sticky keyboard?')Kompromis kosztowy
HyDE wymaga 1 dodatkowego wywołania LLM na zapytanie. Warto go użyć, gdy:
- Sformułowanie zapytania bardzo różni się od sformułowań w dokumentach
- Wąskim gardłem jest pełność pobierania
- Korpus zawiera teksty techniczne, które użytkownik parafrazuje
HyDE z wieloma próbkami
Należy wygenerować N odpowiedzi hipotetycznych, osadzić każdą z nich, pobrać top-K wyników dla każdej i połączyć rezultaty. Jest to droższe, ale zapewnia większą pełność pobierania w przypadku trudnych zapytań.
hypos = [llm.invoke(...).content for _ in range(3)]
vecs = [embed(h) for h in hypos]
results = set()
for v in vecs:
results.update(vector_db.query(v, k=5))Łączenie HyDE z rerankingiem
HyDE zapewnia pełność, a cross-encoder precyzję:
- HyDE pobiera 50 najlepszych wyników
- Cross-encoder wykonuje reranking do 5 najlepszych
- LLM udziela odpowiedzi na podstawie 5 najlepszych
Kiedy NIE używać HyDE
- Zapytania są już zgodne z językiem dokumentów (FAQ)
- Ścieżki o krytycznym znaczeniu opóźnienia
- Bardzo małe korpusy, w których sprawdza się naiwne pobieranie
HyDE dla kodu
W przypadku wyszukiwania kodu należy wygenerować funkcję, której użytkownik szuka, osadzić ją i pobrać rzeczywiste funkcje.
code_hypo = llm.invoke(f'Write the Python function that does: {user_request}').content
results = code_index.search(embed(code_hypo))Warianty: promptowanie typu Step-Back
Pokrewna technika: najpierw poprosić model o wyprowadzenie bardziej ogólnego pytania („Jak czyścić klawiatury?” -> „Jaka ogólna metoda czyszczenia ma zastosowanie do klawiatur mechanicznych?”), osadzić je, a następnie wykonać pobieranie.
Dlaczego HyDE działa
Dlaczego HyDE pobiera wyniki lepiej niż osadzanie surowego zapytania?
Podsumowanie
HyDE: wygenerować zmyśloną odpowiedź, osadzić ją i wyszukiwać. Wymaga jednego dodatkowego wywołania LLM, ale poprawia pobieranie w przypadku trudnych, sparafrazowanych lub technicznych zapytań.
Często zadawane pytania
Czy lekcja „HyDE: embeddingi hipotetycznych dokumentów” jest bezpłatna?
Tak — pełny tekst „HyDE: embeddingi hipotetycznych dokumentów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „HyDE: embeddingi hipotetycznych dokumentów”?
Wygeneruj za pomocą LLM fikcyjną „idealną” odpowiedź, utwórz jej embedding i wyszukuj na tej podstawie — to skuteczniejsze niż embeddingi krótkich zapytań. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Agents?
Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „HyDE: embeddingi hipotetycznych dokumentów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?
Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Ponowne szeregowanie za pomocą cross-encoderów
- HyDE: embeddingi hipotetycznych dokumentów
- Wyszukiwanie wielowektorowe (ColBERT)
- Ocena RAG (RAGAS, Recall@K)