Servidor Couchbase

Habla con tus datos: una UDF que habla tu idioma

Lectura de 10 minutos

La consulta anterior proporciona información valiosa de sus datos almacenados en Couchbase sobre sus cinco principales usuarios que generaron la mayor cantidad de pedidos completados en los últimos 30 días. Pero, ¿qué pasa si usted no es un desarrollador avanzado de SQL++ y necesita las respuestas antes de las 11 p. m. para un informe? Entonces tendrá que esperar a que un desarrollador escriba una consulta SQL++ y le proporcione las respuestas.

Alternativamente, considere un caso en el que necesite realizar alguna depuración ad hoc para abordar preguntas como:

  • ¿Hay algún documento en el que falte la fecha en que se entregó el pedido?
  • ¿Significa eso que se canceló el pedido? ¿O extraviamos el pedido y este nunca se entregó? ¿O estuvo todo bien, pero simplemente omitimos agregar el valor order_delivered en el campo?

En este caso, no solo necesitas buscar en el campo order_delivered, sino también revisar order_cancelled o investigar los comentarios para averiguar si se extravió, etc. Por lo tanto, la consulta que se debe escribir no es simple ni directa. 

En tales casos, sería de ayuda contar con un asistente confiable disponible las 24 horas, los 7 días de la semana para obtener todas estas respuestas. La UDF descrita en este blog es un asistente de ese tipo. Acepta tus preguntas de la manera más natural y devuelve los resultados en formato JSON. Tras bambalinas, se conecta a un modelo de tu elección, junto con tu clave de API, para convertir tus pensamientos en SQL++ y luego los ejecuta. Y todo lo que necesitas para invocar a este asistente es usar la UDF.

Cómo funciona

1. Configurar la biblioteca.
Primero creas una biblioteca de JavaScript utilizada por la UDF.

Biblioteca

2. Subir la biblioteca.
Ejecute el comando curl después de copiar el código de la biblioteca proporcionado en un archivo, es decir, usingailib.js.

3. Crea la UDF.
Usa la siguiente declaración de función create para crear la UDF una vez que hayas creado la librería:

NL2SQL() ahora actúa como su traductor multilingüe entre el lenguaje humano y el motor de consultas de Couchbase. Simplemente le proporciona algo de contexto y una solicitud en lenguaje natural, y devuelve una respuesta.

Cómo piensa la UDF

Bajo el capó, utiliza tu modelo preferido al invocar la UDF para comprender tu intención y generar una consulta que Couchbase pueda ejecutar.

La ventaja de usar la API de chat completions significa que simplemente puedes conectar un modelo de otros proveedores que sea compatible con la misma especificación de API. Puedes usar tu propio LLM privado o los conocidos de OpenAI, Gemini, Claude, etc.

La UDF invocada requiere la siguiente información de usted:

  1. espacios de claves – Una matriz de cadenas, cada una representando un espacio de claves de Couchbase (bucket.scope.collection). Use acentos graves donde sea necesario para escapar nombres especiales (como travel-sample.inventory.route). Esto le indica a la UDF dónde buscar sus datos.
  2. indicación – Su solicitud en inglés sencillo (o cualquier otro idioma).
    Muéstrame todos los usuarios que hicieron una compra en las últimas 24 horas.“
  3. clave de API – Your API key used for authenticating with the model endpoint.
  4. model endpoint – e.g., Open AI compliant chat completions URL.
  5. modelo – The name of the model you want to use from the provider.
    e.g., “gpt-4o-2024-05-13”

There are also several available functions in the library:

inferencer()

Before generating a query, the UDF first tries to understand your data. The inferencer() helper function calls Couchbase’s INFER statement to retrieve a collection’s schema:

This schema is used to help the AI understand what kind of data lives inside each collection.

The main function: nl2sql()

  • Collects all schemas for the given keyspaces using the inferencer(). Constructs a prompt that includes: the inferred schema, your natural language query, and a Couchbase prompt to nudge the LLM.
  • Sends it to the LLM.
  • Extracts the generated SQL++ from the model’s response.
  • Executes it directly if it’s a SELECT statement and returns both the generated SQL++ statement and the query results.

The reason for not executing non-select statements is that you don’t want this UDF to insert, update, or delete documents in a collection without you verifying it. So the SQL++ statement lets you execute it after it’s been verified.

Example use case:

Experimenting with models from other providers

The next example uses Gemini’s Open AI-compatible API. You simply change the model provider’s URL from the previous Open AI API to Gemini’s API. Also, be sure to change the model parameter to a model it recognizes. Of course, you need to also update the api-key from Open AI’s key to Gemini’s key.

The following illustrates the result:

0

Conclusión

This blog provides a glimpse into how you can leverage AI to interact with your data in Couchbase. With this UDF, natural language querying becomes a reality – no SQL++ expertise required. It is model-agnostic and safe for production queries.

And this is just the beginning. In the future, we hope to extend it to:

  • Image → SQL++
  • Voice → SQL++
  • Agent-like pipelines

… all running inside Couchbase workflows.

Referencias
Capella IQ: https://docs.couchbase.com/cloud/get-started/capella-iq/get-started-with-iq.html
Chat completions APIs:
https://platform.openai.com/docs/api-reference/chat
https://ai.google.dev/gemini-api/docs/openai#rest

Compartir este artículo

Autor

Gaurav Jayaraj is an intern in the Query team at Couchbase R&D. Gaurav is pursuing his Bachelors in Computer Science from PES University, Bangalore.

Deja un comentario

¿Listo para comenzar con Couchbase Capella?

Comenzar a construir

Visita nuestro portal para desarrolladores para explorar NoSQL, consultar recursos y comenzar con los tutoriales.

Usa Capella gratis

Empieza a usar Couchbase en tan solo unos clics. Capella DBaaS es la forma más fácil y rápida de comenzar.

Ponte en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítenos ayudarte.