El módulo de Vector Store tiene como propósito proveer una abstracción y una implementación concreta para almacenar y recuperar representaciones vectoriales (embeddings) de fragmentos de documento dentro del pipeline RAG.
- Definir una interfaz limpia para operaciones vectoriales:
add,get_existing_ids,similarity_search,delete. - Proveer una implementación concreta que use ChromaDB como backend y permita persistencia en disco.
EMBEDDINGS → VECTOR STORE (Chroma)
↓
RETRIEVER (Retriever) → PROMPT → LLM
IndexingService escribe datos en el VectorRepository, y Retriever consulta el repositorio para obtener contexto.
-
src/vectorstore/base.py—VectorRepository:- Interfaz abstracta que define:
add(documents: List[Document]) -> Noneget_existing_ids() -> Set[str]similarity_search(query: str, k: int) -> List[tuple[Document, float]]delete(ids: List[str]) -> None
- Interfaz abstracta que define:
-
src/vectorstore/chroma_repository.py—ChromaRepository:- Implementa
VectorRepositoryusandolangchain_chroma.Chroma. - Constructor:
ChromaRepository(persist_dir: str, embedder: Embedder)— crea y configura la instancia de Chroma con la función de embedding proporcionada. add: extraemetadata['id']de cadaDocumenty llama aself._db.add_documents.get_existing_ids: consultaself._db.get(include=[])y devuelve el conjunto deidsexistentes.similarity_search: delega enself._db.similarity_search_with_score(query, k=k).delete: delega enself._db.delete(ids=ids).
- Implementa
persist_dirdebe apuntar a un directorio que la aplicación pueda leer/escribir. En este repositorio se usadata/indexes/chromapor defecto.- Recomendado:
- Mantener copias periódicas del directorio
persist_dir(backup). - Monitorizar el tamaño de la base y el número de vectores.
- Si se cambia el modelo de embeddings o se actualiza
ChunkIdStrategy.version, considerar recrear el índice desde cero.
- Mantener copias periódicas del directorio
ChromaRepositorydelega mucho comportamiento a la libreríalangchain_chroma; cambios en su API requieren actualizar esta capa.- No existe versionado del índice dentro del
persist_dir— la versión se gestiona indirectamente medianteChunkIdStrategy.version.