Hay casos de uso que se resuelven mejor con distintos tipos de acceso a datos, incluidos SQL, investigación veterinaria, consultas geoespaciales y acceso a valor de cava. Una estrategia consiste en combinar/adaptar varios sistemas de datos para cada método de acceso. Por lo tanto, el enfoque de Couchbase hace posible combinar estos diferentes tipos de consultas para resolver problemas del mundo real.
Este artículo aborda aspectos de la aplicación de demostración "O que é essa coisa?". "¿Qué es esta cosa?" (también conocido como "WITT"). Para más contexto e información histórica, consulte:
Esta entrada del blog forma parte del C# Advent de 2024. No obstante, no hace falta que entiendas el C# para leer este post: los conceptos son aplicables a cualquiera de los Existen muchos SDK para Couchbase.
Pesquisa de vetores: o básico
La búsqueda de vectores es útil para aplicaciones que necesitan encontrar elementos similares. Por ejemplo, las incrustaciones creadas por modelos de IA pueden indexarse y buscarse. Cada elemento de WITT se modela de este modo:
1 2 3 4 5 6 7 8 |
{ "nombre": "Estrías reticuladas", "desc": "Ranuras especializadas utilizadas en maquinaria avanzada para una alineación precisa"., "precio": 19.99, "imagen": "data:image/png;base64,...", "rating": 5, "imagenVector": [ -4.5390625, 0.32543945, ... ] } |
Nota: La imagen del artículo se almacena como una cadena codificada en base64. En un proyecto de producción, se recomienda utilizar el almacenamiento de archivos, S3, etc., en lugar de almacenarlo en el banco de datos.
imageVector se recupera cargando la imagen en un modelo de imagen de IA, como el Azure Computer Vision.
Observación: uno de los recursos de la Servicios de IA de Capella recém-anunciados é a hospedagem de modelos, o que reduzirá a latência dessa etapa e também aumentará a privacidade e a flexibilidade, além de potencialmente reduzir custos.
Incorporación de imágenes y búsqueda de vídeos más próximos
Con un índice de investigación veterinaria en el campo imageVectorCouchbase puede realizar búsquedas de texto más cercanas. En este caso, esta búsqueda encuentra ítems que son visualmente similares (de acuerdo con el modelo de IA). Por lo tanto, si un usuario tiene una imagen y quiere encontrar un elemento en Couchbase que se parezca más a esa imagen, un índice de búsqueda veterinaria puede hacerlo:
Aquí está el código WITT que, para una determinada imagen, solicita una incrustación vectorial do Azure Computer Vision:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// Nivel gratuito: 20 llamadas por minuto, 5.000 llamadas al mes // Nivel estándar: 10 llamadas por segundo, a partir de $1,00 USD/1000 llamadas (estimado) público async Tarea<float[]> GetImageEmbedding(cadena base64Imagen) { var punto final = Configuración.Valor.Punto final; var subscriptionKey = Configuración.Valor.Clave de suscripción; utilizando (HttpClient cliente = nuevo HttpClient()) { // Establecer la clave de suscripción y el punto final cliente.DefaultRequestHeaders.Añadir("Ocp-Apim-Clave de suscripción", subscriptionKey); // URL del punto final cadena url = $"{endpoint}/retrieval:vectorizeImage?overload=stream&api-version=2023-04-01-preview"; byte[] imageBytes = Base64PngToByteArray(base64Imagen); utilizando (ByteArrayContent contenido = nuevo ByteArrayContent(imageBytes)) { contenido.Cabeceras.Tipo de contenido = nuevo MediaTypeHeaderValue("application/octet-stream"); HttpResponseMessage respuesta = await cliente.PostAsync(url, contenido); cadena jsonResponse = await respuesta.Contenido.ReadAsStringAsync(); si (respuesta.IsSuccessStatusCode) { // Parsear la respuesta JSON para extraer las incrustaciones vectoriales JObjeto json = JObjeto.Analice(jsonResponse); JToken vectorEmbeddings = json["vector"]; devolver vectorEmbeddings.ToObject<float[]>(); } tirar nuevo Excepción("Imposible recuperar incrustaciones vectoriales para la imagen".); } } } |
Probablemente también hay frameworks que pueden hacer frente a esta llamada, pero para esta demostración simple, que requiere sólo una única llamada REST, esto es suficiente. Si quieres usar algo diferente a Azure con esta demostración, necesitas implementar IEmbeddingService.
Consultas multiuso con SQL
Muchos bancos de datos con investigación veterinaria pueden ejecutar una operación muy similar. Lo que Couchbase te permite hacer es ejecutar varios tipos de operaciones de datos con una única plataforma, un único conjunto de datos. Por ejemplo, dada una localización geoespacial (que puede recuperarse mediante un navegador web), no sólo puedes consultar para encontrar un artículo similar por imagen, sino también combinarlo con una búsqueda geoespacial, todo mediante una única consulta SQL++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
CON tiendasmáscercanas AS ( /* CTE para obtener las tiendas más cercanas en función de la ubicación del usuario */ SELECCIONE x.nombre, META(x).id AS id DESDE qué es esto.Por defecto.Tiendas x DONDE BUSCAR(x, { "campos": ["*"], "consulta" : { "localización" : { "lat" : 39.8787, "lon" : -83.0805 }, "distancia" : "15mi", "campo" : "geo" } . . . }) LÍMITE 3 ) /* SELECCIONAR artículos con existencias cercanas */ SELECCIONE allItems.nombre, allItems.`desc`, allItems.imagen, allItems.precio, allItems.valoración, BUSCAR_SCORE(allItems) AS puntuación, /* subconsulta para obtener existencias de lugares cercanos */ (SELECCIONE . . . ) AS stock DESDE qué es esto.Por defecto.Artículos AS allItems /* búsqueda vectorial mediante incrustación de imágenes */ DONDE BUSCAR(allItems, { "campos": ["*"], "consulta": { "match_none": {} }, "knn": [ { "k": 4, "campo": "imagenVector", "vector": [ -0.9135742,1.1552734, ... ] } ] } ) PEDIR POR puntuación DESC |
Nota: esta consulta se ha editado con fines informativos. Confirme DataLayer.cs para una visión más completa de las consultas.
El resultado de esta consulta es una "correspondencia más provechosa" para una determinada imagen. Por ejemplo, aquí está el resultado principal al cargar una imagen de una canasta:
La calidad de la correspondencia dependerá de:
-
- Calidad del modelo de AI
- Calidad/cantidad de las imágenes de un artículo determinado
En mis pruebas limitadas, he descubierto que el modelo Azure Computer Vision es muy bueno para combinar imágenes relevantes.
El resultado también incluirá las tiendas cercanas en las que el artículo está disponible para su compra.
Además de la investigación veterinaria y geoespacial
Esta consulta muestra la capacidad de Couchbase para combinar investigación veterinaria y geoespacial en una única operación. También incluye un CTE, JOINs y una subconsulta.
En una sola consulta, también puede ejecutar:
-
- Búsqueda de texto completoincluyendo puntuación, facetas, refuerzo, etc.
- Series temporales operaciones
- Funciones definidas por el usuario (UDF) para añadir código personalizado (JavaScript o SQL)
- Funciones SQL completasFunciones de enlace, CTE, JOIN, agregación y mucho más
- Leer datos analíticos en tiempo real a través de write-back
- Consultar datos sincronizados automáticamente de dispositivos móviles/de vanguardia
- Automático almacenamiento en caché (incorporado)
Algunos bancos de datos pueden ser capaces de ejecutar sólo un subconjunto de sus operaciones y exigir que usted traiga otras herramientas cuando necesite funcionalidad adicional. Esto aumenta sus costes, latencia y complejidad. Con Couchbase, puedes mantener tu aplicación más sencilla, rápida y económica.
Destaques técnicos
La aplicación de demostración WITT a la que se hace referencia está construida con:
-
- Interfaz de usuario React UI
- ASP.NET Core backend
- Azure Computer Vision
- SDK .NET de Couchbase
También puede conferir ¿Qué es esta cosa? como demostración pública. (Lembre-se de que tudo é construído com hospedagem de nível gratuito (Azure e Capella Nivel gratuito) y que aún se está desarrollando de forma activa. Si notas alguna lentitud o tiempo de inactividad, puede ser por causa de mucho trabajo, ¡descúbrelo!)