Chroma DB
Chroma DB guarda documentos en una base de datos vectorial Chroma y busca en ella por significado. Sin configurar nada más, la base se guarda en el almacenamiento de tu cuenta de NappAI; también puede conectarse a tu propio servidor de Chroma.
Una base de datos vectorial guarda textos de forma que se pueden buscar por su significado, no solo por palabras exactas. Así, un agente puede encontrar el párrafo de un manual que responde a una pregunta aunque esté escrito con otras palabras.
Cuándo usarlo
- Dar a un agente el conocimiento de tus manuales, contratos o preguntas frecuentes sin contratar ningún servicio externo.
- Montar un buscador interno de documentos por significado.
- Buscar solo entre documentos de un departamento o una ciudad usando filtros.
Configuración
El campo Operation decide qué hace el componente, y según lo que elijas cambian los campos y las salidas:
Add(por defecto): guarda en la base los documentos que recibe en Ingest Data.Search: busca los documentos más parecidos al texto de Search Query.Retriever: ofrece la base como buscador para que la use otro componente, por ejemplo un agente o una cadena de preguntas y respuestas.
| Campo | Qué hace |
|---|---|
| Operation | Qué hace el componente: Add, Search o Retriever. |
| Ingest Data (obligatorio) | Con Add. Los documentos que se guardan, normalmente los que salen de un divisor de textos o de un cargador de archivos. |
| Search Query | Con Search. El texto que se busca. Si lo dejas vacío no se devuelve nada. |
| Embedding (obligatorio) | El conector donde enchufas el componente que convierte los textos en números para compararlos por significado, como OpenAI Embeddings. Usa siempre el mismo para guardar y para buscar. |
| Collection Name (obligatorio) | Nombre de la colección dentro de la base. Usa el mismo nombre para guardar y para buscar. |
| Persist Directory | Nombre de la carpeta del almacenamiento donde se guarda la base. Vacío, se usa default. |
Opciones avanzadas
| Campo | Qué hace |
|---|---|
| Number of Results | Cuántos documentos devuelve cada búsqueda. Por defecto, 4. |
| Server Host | Solo si usas tu propio servidor de Chroma: su dirección. Junto a Server HTTP Port, Server GRPC Port, Server SSL Enabled y Server CORS Allow Origins, que te indicará quien lo administra. Vacío, se usa el almacenamiento de NappAI. Los documentos se guardan y se buscan entonces en ese servidor. |
| Allow Duplicates | Desactivado (por defecto), no se vuelven a guardar documentos que ya están en la base. |
| Limit | Con Add, cuántos documentos guardados se muestran en el resumen del nodo. |
| Search Type | Cómo se busca: Similarity, Similarity with score threshold. Similarity devuelve los más parecidos; con umbral, solo los que superan Search Score Threshold. |
| Search Score Threshold | Puntuación mínima de parecido, solo con la búsqueda por umbral. Por defecto, 0.1. |
| Filter by Metadata | Busca solo entre los documentos cuyos datos cumplen unas condiciones, por ejemplo marca igual a Vellani. Funciona con Search, Retriever y en modo herramienta. Ver Filtrar por metadatos. |
Los datos se guardan en el almacenamiento de tu cuenta, donde puedes verlos y descargarlos.
Filtrar por metadatos
Cada documento guarda, además de su texto, unos datos (sus metadatos): la marca, el tipo de documento, el mes… El filtro hace que la búsqueda mire solo los documentos cuyos datos cumplen unas condiciones. Se aplica igual a Results, a Retriever y cuando un agente usa el componente como herramienta.
Activa Filter by Metadata (en las opciones avanzadas) y elige Filter Mode:
-
Manual: escribes las condiciones en el nodo. En Number of Conditions eliges cuántas filas quieres, y cada fila tiene:- Field: el dato que se mira, por ejemplo
marca. - Operator:
Equal(igual),NotEqual(distinto),GreaterThan,GreaterThanEqual,LessThan,LessThanEqual(mayor, mayor o igual, menor, menor o igual),In(uno de una lista separada por comas, comoQ90, S80),NotIn(ninguno de la lista) yContains(el texto o la lista contiene el valor). - Type:
Text,Int(número entero),Number(con decimales) oBoolean(trueofalse). - Value: el valor con el que se compara. Si se deja vacío, esa fila no filtra.
Combine Conditions decide si se tienen que cumplir todas (
AND) o basta con una (OR). - Field: el dato que se mira, por ejemplo
-
Dynamic: las condiciones llegan como JSON en Metadata Filter (JSON), desde otro componente o escritas por un agente:{"marca": "Vellani"}: valor exacto.{"modelo": ["Q90", "S80"]}: cualquiera de la lista.{"año": {">=": 2024}, "estado": {"!=": "archivado"}}: con operadores=,!=,>,>=,<,<=,in,not inycontains.
Si pones varios campos, se tienen que cumplir todos. Vacío, no filtra. Un JSON mal escrito da un error en lugar de buscar sin filtro.
Que lo rellene el agente. Con el componente en modo herramienta, activa el modo herramienta de Value (con Field y Operator fijos, por ejemplo modelo y Equal) o el de Metadata Filter (JSON). El agente escribe el valor cuando la pregunta lo pide («solo la máquina Q90») y lo deja vacío cuando no. Cuéntale en la descripción de la herramienta qué campos y valores hay.
Listas. Si un dato es una lista, como las etiquetas que escribe Metadata Tagger, Equal e In aciertan cuando alguno de sus elementos coincide, y Contains busca dentro de ellos.
En Chroma DB no hay Contains, y los mayores y menores solo comparan números. Chroma no guarda listas: una lista se guarda como texto separado por comas («Q90, S80»), así que Equal no encuentra un elemento suelto. Si filtras por listas, usa FAISS, Qdrant, PGVector o Elasticsearch.
Ejemplo: solo los manuales de una marca
- Al guardar, cada fragmento lleva sus datos, por ejemplo
tipo: manualymarca: Vellani(los pone el cargador de archivos o Metadata Tagger). - En el nodo con Operation en
Search, activa Filter by Metadata, deja Filter Mode enManualy rellena la fila: Fieldmarca, OperatorEqual, TypeText, ValueVellani. - Busca «qué significa el error E07»: solo salen fragmentos de documentos de Vellani.
El mismo filtro en modo Dynamic es {"marca": "Vellani"}. Los nodos guardados antes conservan sus filtros; los nombres nuevos de los campos aparecen al actualizar el nodo.
Resultado
Las salidas dependen de Operation:
- Results: con
AddySearch. ConSearch, la lista de documentos encontrados, que puedes pasar a un prompt o a un agente. - Vector Store: con
Add. La base de datos, para conectarla a componentes que trabajan con una base vectorial. - Retriever: con
Retriever. El buscador, para conectarlo a componentes que piden un buscador.
En modo herramienta, un agente puede usar el componente para buscar por sí mismo. Consulta Tool Mode.
Ejemplo
Una gestoría quiere que su asistente responda con su guía de trámites.
- Carga la guía con un componente de archivos, pásala por un divisor de textos y conéctalo a Ingest Data de un Chroma DB con Operation en
Addy Collection Nametramites. - Conecta un componente de embeddings a Embedding y ejecuta el flujo una vez.
- En el flujo del asistente, añade otro Chroma DB con la misma colección, Operation en
Searchy en modo herramienta, y conéctalo al agente.
Buenas prácticas
- Guarda y busca siempre con el mismo componente de embeddings: si cambias de modelo, vuelve a guardar los documentos.
- Puedes descargar la base completa desde el almacenamiento y subirla en otro entorno.
Componentes relacionados
- FAISS: otra base vectorial que se guarda en tu almacenamiento.
- Recursive Character Text Splitter: corta los documentos en trozos antes de guardarlos.
- OpenAI Embeddings: convierte los textos para buscarlos por significado.
- FastEmbed Embeddings (Local): convierte los textos dentro de NappAI, sin clave ni coste por uso.
Ver también
- Bases vectoriales: en qué se diferencian FAISS, Chroma, Qdrant, PGVector y Neo4j, y cuál elegir.