SQL QnA
Aprende cómo consultar datos estructurados
A diferencia de ejemplos anteriores como QnA con Web Scraping y QnA con Múltiples Documentos, consultar datos estructurados no requiere una base de datos vectorial. A alto nivel, esto se puede lograr con los siguientes pasos:
Proporcionar al LLM:
visión general del esquema de la base de datos SQL
datos de ejemplo de filas
Devolver una consulta SQL con few shot prompting
Validar la consulta SQL usando un nodo If Else
Crear una función personalizada para ejecutar la consulta SQL y obtener la respuesta
Devolver una respuesta natural de la respuesta SQL ejecutada

En este ejemplo, vamos a crear un chatbot QnA que pueda interactuar con una base de datos SQL almacenada en SingleStore

TL;DR
Puedes encontrar la plantilla del chatflow:
1. Esquema de Base de Datos SQL + Filas de Ejemplo
Usa un nodo Custom JS Function para conectarte a SingleStore, recuperar el esquema de la base de datos y las 3 primeras filas.
Según el paper de investigación, se recomienda generar un prompt con el siguiente formato de ejemplo:

Puedes encontrar más información sobre cómo obtener el HOST, USER, PASSWORD en esta guía. Una vez terminado, haz clic en Execute:

Ahora podemos ver que se ha generado el formato correcto. El siguiente paso es llevarlo al Prompt Template.
2. Devolver una consulta SQL con few shot prompting
Crea un nuevo Chat Model + Prompt Template + LLMChain

Especifica el siguiente prompt en el Prompt Template:
Como estamos usando 2 variables: {schema} y {question}, especifica sus valores en Format Prompt Values:

3. Validar la consulta SQL usando el nodo If Else
A veces la consulta SQL es inválida, y no queremos desperdiciar recursos ejecutando una consulta SQL inválida. Por ejemplo, si un usuario está haciendo una pregunta general que es irrelevante para la base de datos SQL. Podemos usar un nodo If Else para enrutar a diferentes caminos.
Por ejemplo, podemos realizar una verificación básica para ver si SELECT y WHERE están incluidos en la consulta SQL dada por el LLM.

En la Else Function, enrutaremos a un Prompt Template + LLMChain que básicamente le dice al LLM que no puede responder la consulta del usuario:

4. Función personalizada para ejecutar la consulta SQL y obtener la respuesta
Si es una consulta SQL válida, necesitamos ejecutarla. Conecta la salida True del nodo If Else a un nodo Custom JS Function:

5. Devolver una respuesta natural de la respuesta SQL ejecutada
Crea un nuevo Chat Model + Prompt Template + LLMChain

Write the following prompt in the Prompt Template:
Specify the variables in Format Prompt Values:

Voila! Your SQL chatbot is now ready for testing!
Query
First, let's ask something related to the database.

Looking at the logs, we can see the first LLMChain is able to give us a SQL query:
Input:
Output
After executing the SQL query, the result is passed to the 2nd LLMChain:
Input
Output
Now, we if ask something that is irrelevant to the SQL database, the Else route is taken.

For first LLMChain, a SQL query is generated as below:
However, it fails the If Else check because it doesn't contains both SELECT and WHERE, hence entering the Else route that has a prompt that says:
And the final output is:
Conclusion
In this example, we have successfully created a SQL chatbot that can interact with your database, and is also able to handle questions that are irrelevant to database. Further improvement includes adding memory to provide conversation history.
You can find the chatflow below:
Last updated