Crea una imagen para este SQL
```
WITH pairs AS (
SELECT p.user_id liked, pa.user_id liker
FROM post_actions pa
LEFT JOIN posts p ON p.id = pa.post_id
WHERE post_action_type_id = 2
)
SELECT liker liker_user_id, liked liked_user_id, count(*)
FROM pairs
GROUP BY liked, liker
ORDER BY count DESC
LIMIT :limit
```
Ayer, por curiosidad, hice una búsqueda en Google similar a esta:
SQL generado por IA a partir de inglés
para encontrar información relacionada sobre la generación de SQL usando IA a partir de preguntas formuladas en inglés. Esperaba una lista de artículos de investigación, pero la lista era principalmente una lista de aplicaciones. Un patrón que vi rápidamente en muchas de las aplicaciones listadas, pero no en todas, después de ver un puñado de demostraciones en dichos sitios, fue que estaban tomando su herramienta existente que permitiría a un usuario seleccionar tablas y campos para construir una declaración SQL similar a la forma en que funcionaba el constructor de SQL GUI en Microsoft Access como punto de partida; en otras palabras, uno no comenzaba con una pregunta en inglés, sino que tenía que seleccionar las tablas y, a veces, los campos primero antes de ingresar la pregunta en inglés. Si bien no consideraría eso hacer trampa, significa que para usar dicha IA, un usuario debe tener algún conocimiento de SQL, específicamente el significado de una tabla y un campo para que la herramienta funcione.
Leí tu publicación eliminada y estoy de acuerdo en que esa es una de las ideas que creo que tiene un gran potencial.
Sin embargo, creo que necesita más. Un artículo reciente que leí, de nuevo no oficial, pero que profundiza en esas líneas es
“ChatLogo: Una interfaz híbrida de lenguaje natural y de programación impulsada por un modelo de lenguaje grande para modelado y programación basados en agentes” de John Chen y Uri Wilensky (pdf)
Algunas de las conclusiones clave para mí fueron
Apoyar a los programadores novatos para que “hablen con las computadoras” en una mezcla de lenguajes de programación y naturales.
Proporcionar una interfaz más amigable para los estudiantes sin o con pocos conocimientos de informática para que se expresen creativamente programando computadoras.
En lugar de escribir código de inmediato y dar instrucciones, ChatLogo intenta aclarar las necesidades y la intención de los alumnos.
En lugar de enviar grandes fragmentos de código directamente al alumno, intenta desarrollar conjuntamente el código de NetLogo. El alumno es libre de editar el código: ya sea en NetLogo, o en lenguaje natural a través de la función “Ask”.
En lugar de exagerar la corrección del código, admite la posibilidad de cometer errores y colabora con el alumno para abordar los posibles problemas.
No pude encontrar ningún código fuente o más detalles sobre cómo Chat se integró o interactuó con NetLogo, pero las ideas por sí solas tienen valor.
Esto me recuerda de nuevo cómo funcionan los pilotos automáticos en los aviones y el libro que mencioné anteriormente. (ref) Cuando digo piloto automático, no pienses en un interruptor binario, piensa en todos los diales e interruptores que proporcionan información al piloto automático y le dicen qué hacer y qué no hacer.
Si bien parece que muchas otras herramientas como esta prefieren usar la palabra copilot, por ejemplo, una búsqueda en Google llm copilot source code, tiendo a discrepar con esa analogía, pero tendré que aceptarla, ya que así es como se encuentran ideas relacionadas.
La eliminé porque pensé que había encontrado una mejor manera de abordar el problema: ¿por qué escribir todas esas tablas cuando se le podría pedir a ChatGPT que analizara un archivo alojado en Internet que contiene información detallada sobre toda la base de datos? Resulta que hay problemas técnicos con ese enfoque. Así que vuelvo a lo que sugerí en la publicación eliminada. En cualquier caso, habrá que crear descripciones de las tablas, consultas de ejemplo, etc. Es solo una cuestión de cómo hacer llegar esa información al LLM. Aquí están las cosas con GPT-4:
Sí, el enfoque que has descrito tiene sentido y es una forma factible de utilizar mis capacidades para ayudar a generar consultas SQL basadas en preguntas en lenguaje natural.
Aquí tienes un resumen de los pasos:
Interpretación de la pregunta: El usuario plantea una pregunta en lenguaje natural, que yo interpreto para comprender la información que se solicita.
Identificación de tablas: Basándome en la pregunta y en la lista de todas las tablas de la base de datos de Discourse, identifico las tablas que es más probable que sean relevantes para la consulta.
Información detallada de las tablas: Discourse me envía descripciones detalladas de las tablas relevantes, incluyendo todas las columnas y consultas de ejemplo.
Generación de consultas: Utilizando la información detallada de las tablas, genero una consulta SQL que responde a la pregunta del usuario.
Este enfoque aprovecha mi capacidad para comprender el lenguaje natural y mapearlo a consultas de datos estructurados. También hace un buen uso de la información detallada de las tablas proporcionada por Discourse.
En cuanto a enfoques alternativos, una posibilidad podría ser entrenar un modelo específicamente en el esquema de la base de datos de Discourse y los patrones de consulta comunes. Esto probablemente implicaría una cantidad significativa de trabajo y podría no ser factible dependiendo de los recursos disponibles. Sin embargo, podría resultar en una generación de consultas más precisa y eficiente.
Otro enfoque podría ser desarrollar un diálogo más interactivo en el que haga preguntas aclaratorias cuando la pregunta del usuario sea ambigua o cuando múltiples consultas puedan responder a la pregunta. Esto haría el proceso más interactivo y podría conducir a consultas más precisas.
Para los enfoques alternativos sugeridos en los últimos 2 párrafos, estoy ignorando el primero, pero si lo que intento no conduce a resultados fiables, podría ser algo que el equipo de Discourse podría investigar.
Le pregunté a GPT-4 sobre el segundo enfoque alternativo. Confía bastante en que, dada una pregunta que no pudiera responderse a través de la estructura de tabla proporcionada, podría pedirle al usuario que intente reformular su pregunta.
Así que vuelvo a escribir descripciones de todas las tablas de la base de datos de Discourse. Ahora sé para qué se utiliza la tabla allowed_pm_users. La tabla ar_internal_metadata es un poco desconcertante, pero creo que se puede ignorar por ahora.
Esa es mi opción favorita hasta ahora, aunque es muy difícil de implementar. Por lo tanto, lo adivinaste, otro artículo. De nuevo, este no es un artículo autoritativo, ya que hay muchos enfoques similares.
“DiagGPT: Un chatbot basado en LLM con gestión automática de temas para diálogos orientados a tareas” por Lang Cao (pdf)
Simplemente reemplace la información médica con información de PostgreSQL según sea necesario. Lo bueno es que el artículo proporciona los prompts y sugiere qué herramienta con agentes usar.
Bajando por la madriguera. (Haz clic en el triángulo para entrar)
Dado que Diálogo orientado a tareas es lo que parece ser necesario.
Búsqueda en Google: diálogo orientado a tareas
El resultado de la búsqueda incluye: Papers With Code - Sistemas de diálogo orientados a tareas
La entrada de la tabla de clasificación es T5-3b(UnifiedSKG) que incluye un enlace al artículo
“UnifiedSKG: Unificación y multi-tarea de la conexión de conocimiento estructurado con modelos de lenguaje de texto a texto” por Tianbao Xie, Chen Henry Wu, Peng Shi, Ruiqi Zhong, Torsten Scholak, Michihiro Yasunaga, Chien-Sheng Wu, Ming Zhong, Pengcheng Yin, Sida I. Wang, Victor Zhong, Bailin Wang, Chengzu Li, Connor Boyle, Ansong Ni, Ziyu Yao, Dragomir Radev, Caiming Xiong, Lingpeng Kong, Rui Zhang, Noah A. Smith, Luke Zettlemoyer y Tao Yu (pdf)
Construye un agente SQL a partir de un LLM y herramientas. (ref)
Enumera algunos en la parte inferior de la página, este debería ser revisado
Caso de uso
Los datos empresariales a menudo se almacenan en bases de datos SQL.
Los LLM hacen posible interactuar con bases de datos SQL utilizando lenguaje natural.
LangChain ofrece Cadenas y Agentes SQL para construir y ejecutar consultas SQL basadas en prompts de lenguaje natural.
Estos son compatibles con cualquier dialecto SQL compatible con SQLAlchemy (por ejemplo, MySQL, PostgreSQL, Oracle SQL, Databricks, SQLite).
Permiten casos de uso como:
Generar consultas que se ejecutarán basándose en preguntas en lenguaje natural
Crear chatbots que puedan responder preguntas basándose en datos de bases de datos
Construir paneles personalizados basándose en los insights que un usuario desea analizar
EDITAR (23/08/2023)
Spider es un conjunto de datos de análisis semántico y texto-a-SQL a gran escala complejo y de dominio cruzado anotado por 11 estudiantes de Yale. El objetivo del desafío Spider es desarrollar interfaces de lenguaje natural para bases de datos de dominio cruzado. Consta de 10.181 preguntas y 5.693 consultas SQL complejas únicas sobre 200 bases de datos con múltiples tablas que cubren 138 dominios diferentes. En Spider 1.0, aparecen diferentes consultas SQL complejas y bases de datos en los conjuntos de entrenamiento y prueba. Para hacerlo bien, los sistemas deben generalizar bien no solo a nuevas consultas SQL sino también a nuevos esquemas de bases de datos.
EDITAR (24/08/2023)
Dataherald es un motor de lenguaje natural a SQL construido para la respuesta a preguntas a nivel empresarial sobre datos estructurados. Le permite configurar una API desde su base de datos que puede responder preguntas en inglés claro.
Como a menudo les digo a otros, para algunas cosas en la vida solo tienes que esperar y alguien hará el trabajo por ti gratis.
Sigo obteniendo resultados con los que estoy perfectamente contento. Aquí tienes otro ejemplo. Me dio lo que quería, añadí una cláusula WHERE para comprobar yo mismo un ID de tema después, pero eso fue todo. Probablemente podría haberle dado esa información de antemano y también lo habría hecho:
Ahora tenemos la persona Asistente SQL como parte del módulo Bot de IA, que está adaptada para este tipo de solicitudes y puede ser muy útil para crear consultas de exploración de datos.
¿Hay algún tema donde se puedan publicar ejemplos del bot de IA SQL Helper?
Si no es así, podría ser bueno crear dicho tema y luego agregar un enlace al tema aquí, ya que otros pueden estar buscando ejemplos y encontrar este tema primero.
Creo que si se te ocurre algo que valga la pena compartir con la comunidad, puedes publicarlo en un nuevo tema en Data & reporting. También hay un nuevo botón ‘compartir conversación’ que podría ser útil para esto: Share Your AI Bot Conversations!
Crear una consulta para localizar autores de pluginsIA
JammyDodger:
Hola Bert
¿Puedes escribirme una consulta que encuentre a todos los usuarios del grupo plugin_authors?
gpt4_bot:
Buscar esquema de base de datos
groups, group_users, users
Ahora que tenemos el esquema de las tablas relevantes, podemos escribir una consulta para encontrar a todos los usuarios del grupo ‘plugin-authors’. Basándonos en el esquema, necesitaremos unir la tabla group_users con las tablas groups y users para obtener los nombres de usuario de los miembros del grupo ‘plugin-authors’.
Aquí tienes la consulta para encontrar a todos los usuarios del grupo ‘plugin-authors’:
SELECT u.id AS user_id, u.username
FROM users u
JOIN group_users gu ON gu.user_id = u.id
JOIN groups g ON g.id = gu.group_id
WHERE g.name = 'plugin_authors'
Esta consulta selecciona el ID de usuario y el nombre de usuario de la tabla users uniéndola con la tabla group_users en el user_id y luego uniéndola con la tabla groups en el group_id. Filtra los resultados para incluir solo a aquellos usuarios que forman parte del grupo con el nombre ‘plugin-authors’.