RAG : prefixes de tache nomic-embed (search_document / search_query)
nomic-embed-text est entraine avec des prefixes de tache distincts pour le corpus et la question ; sans eux la pertinence du retrieval est degradee. Applique uniquement aux modeles nomic (les autres restent neutres). NB : les sources indexees avant ce changement doivent etre re-uploadees. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,13 @@ class EmbeddingError(Exception):
|
||||
|
||||
|
||||
class EmbeddingProvider(Protocol):
|
||||
"""Calcule les vecteurs d'une liste de textes (ordre préservé)."""
|
||||
"""Calcule les vecteurs d'une liste de textes (ordre préservé).
|
||||
|
||||
async def embed(self, texts: list[str]) -> list[list[float]]:
|
||||
`kind` distingue les DOCUMENTS indexés ("document") de la QUESTION posée
|
||||
("query") : certains modèles (nomic-embed-text) sont entraînés avec des
|
||||
préfixes de tâche distincts et perdent en pertinence sans eux. Les adapters
|
||||
qui n'en ont pas besoin (mistral-embed) ignorent simplement le paramètre.
|
||||
"""
|
||||
|
||||
async def embed(self, texts: list[str], kind: str = "document") -> list[list[float]]:
|
||||
...
|
||||
|
||||
@@ -86,7 +86,7 @@ class NotebookRagUseCase:
|
||||
ids = [s for s in source_ids if vector_store.exists(s)]
|
||||
if not ids or not query.strip():
|
||||
return []
|
||||
query_vectors = await self._embedder.embed([query])
|
||||
query_vectors = await self._embedder.embed([query], kind="query")
|
||||
if not query_vectors:
|
||||
return []
|
||||
return vector_store.search(
|
||||
|
||||
Reference in New Issue
Block a user