Embeddings
Embeddings
Sección titulada «Embeddings»El modulo wippy/embeddings proporciona almacenamiento de embeddings vectoriales y busqueda por similitud tanto para PostgreSQL (pgvector) como para SQLite (sqlite-vec). Envuelve wippy/llm para generar embeddings y los persiste en una base de datos de la aplicacion.
Configuracion
Sección titulada «Configuracion»Agrega el modulo a tu proyecto:
wippy add wippy/embeddingswippy installDeclara la dependencia y apunta el requisito target_db a tu base de datos de aplicacion:
version: "1.0"namespace: app
entries: - name: app_db kind: db.sql.sqlite path: ./data/app.db
- name: dep.embeddings kind: ns.dependency component: wippy/embeddings version: "*"
- name: target_db kind: registry.entry meta: wippy.embeddings.target_db: app:app_dbAl iniciar, wippy/migration toma la migracion 01_create_embeddings_table y crea la tabla embeddings con el indice vectorial apropiado para tu driver de base de datos.
Constantes de Configuracion
Sección titulada «Constantes de Configuracion»La configuracion por defecto esta incrustada en el modulo:
| Constante | Valor por defecto | Descripcion |
|---|---|---|
EMBEDDING_MODEL | text-embedding-3-small | Modelo LLM usado para generar vectores |
EMBEDDING_DIMENSIONS | 512 | Tamano del vector pasado al modelo |
MAX_TOKENS_PER_REQUEST | 8000 | Presupuesto de tokens por llamada; los lotes grandes se dividen |
DEFAULT_SEARCH_LIMIT | 10 | Numero por defecto de resultados retornados por search |
Los tokens se estiman como #text / 4. Los lotes que exceden el presupuesto se dividen automaticamente.
Importacion
Sección titulada «Importacion»entries: - name: my_app kind: library.lua source: file://my_app.lua imports: embeddings: wippy.embeddings:embeddingslocal embeddings = require("embeddings")API de Alto Nivel (wippy.embeddings:embeddings)
Sección titulada «API de Alto Nivel (wippy.embeddings:embeddings)»local result, err = embeddings.add(content, content_type, origin_id, context_id, meta)Genera un embedding para content y lo persiste.
| Parametro | Tipo | Requerido | Descripcion |
|---|---|---|---|
content | string | si | Texto a incrustar |
content_type | string | si | Etiqueta libre, por ejemplo "document_chunk", "question" |
origin_id | string | si | Identificador del documento o registro de origen |
context_id | string | no | Clave de ambito adicional (seccion, chat, tenant) |
meta | table | no | Metadatos arbitrarios serializables a JSON |
Retorna { id, content, content_type, origin_id, context_id, meta } o nil, err.
add_batch
Sección titulada «add_batch»local result, err = embeddings.add_batch({ { content = "...", content_type = "chunk", origin_id = "doc-1" }, { content = "...", content_type = "chunk", origin_id = "doc-1", context_id = "s1" },})Incrusta y almacena muchos elementos en una sola llamada. Si el recuento total estimado de tokens excede MAX_TOKENS_PER_REQUEST, el lote se divide y se procesa en fragmentos. Retorna { count, items = { ... } }.
local hits, err = embeddings.search("how do migrations work?", { content_type = "document_chunk", origin_id = "doc-1", context_id = "section-2", limit = 10,})Incrusta la cadena de consulta y realiza una busqueda por similitud contra los vectores almacenados. Todos los filtros son opcionales; los registros coincidentes se ordenan por similitud.
find_by_type
Sección titulada «find_by_type»local hits, err = embeddings.find_by_type(query, content_type, { limit = 10 })Envoltorio de conveniencia para search limitado a un solo content_type.
find_by_origin
Sección titulada «find_by_origin»local hits, err = embeddings.find_by_origin(query, origin_id, { content_type = "document_chunk", context_id = "section-2", limit = 5,})Envoltorio de conveniencia limitado a un solo origin_id, opcionalmente acotado aun mas.
API del Repositorio (wippy.embeddings:embedding_repo)
Sección titulada «API del Repositorio (wippy.embeddings:embedding_repo)»Usa el repositorio directamente cuando ya tengas un vector y quieras omitir la generacion del embedding:
| Funcion | Descripcion |
|---|---|
embedding_repo.add(content, content_type, origin_id, context_id, meta, embedding) | Insertar un vector precomputado |
embedding_repo.add_batch(batch) | Insertar muchos vectores precomputados en una sola sentencia |
embedding_repo.get_by_origin(origin_id) | Listar todos los registros para un origen dado |
embedding_repo.delete_by_origin(origin_id) | Eliminar todos los registros para un origen dado |
embedding_repo.delete_by_entry(entry_id) | Eliminar un solo registro por su id de fila |
embedding_repo.search_by_embedding(vector, options) | Busqueda por similitud contra un vector crudo |
search_by_embedding acepta { content_type, origin_id, context_id, limit }.
Soporte de Bases de Datos
Sección titulada «Soporte de Bases de Datos»La migracion crea el esquema apropiado para el driver de base de datos en target_db:
- PostgreSQL - Tabla
embeddingscon una columnavector(512)y un indice IVFFlat. Requiere la extensionpgvector. - SQLite - Tabla
embeddingscon el vector almacenado como texto mas una tabla virtualsqlite-veccompanera para busqueda KNN.
Los vectores siempre se transportan como un array JSON plano en la capa de API.
Ver Tambien
Sección titulada «Ver Tambien»- LLM -
llm.embed(...)para generacion de embeddings cruda - Migraciones - Runner de migraciones que provisiona la tabla
- Vision General del Framework - Uso de modulos del framework