Discourse AI + Data Explorer?

Ampliando un poco esta idea, permitir a los usuarios interactuar con aplicaciones utilizando lenguaje natural es prácticamente mi sueño en lo que respecta a la IA. Con Discourse y el plugin Data Explorer, podría ser posible obtener resultados de indicaciones como “devuelve una lista de usuarios que han expresado interés en la moderación”. O aún mejor, “envía una invitación al grupo community_moderation a todos los usuarios que hayan expresado interés en la moderación”.

Volviendo a lo que es posible ahora:

Probando con ChatGPT 3.0 y 3.5, he obtenido buenos resultados al pedirle que devuelva una consulta PostgreSQL y copiando la estructura de las tablas que me interesan en la indicación. Por ejemplo:

Resumen

Yo: Devuelve una consulta postgresql que liste todos los nombres de usuario de los usuarios que están en el grupo “community_moderators” para la siguiente estructura de base de datos:

# == Schema Information
#
# Table name: groups
#
#  id                                 :integer          not null, primary key
#  name                               :string           not null

# == Schema Information
#
# Table name: group_users
#
#  id                 :integer          not null, primary key
#  group_id           :integer          not null

# == Schema Information
#
# Table name: users
#
#  id                        :integer          not null, primary key
#  username                  :string(60)       not null

ChatGPT 3.5: Claro, aquí tienes una consulta PostgreSQL que lista todos los nombres de usuario de los usuarios que están en el grupo “community_moderators” basándose en la estructura de la base de datos proporcionada:

SELECT u.username
FROM users u
JOIN group_users gu ON u.id = gu.user_id
JOIN groups g ON gu.group_id = g.id
WHERE g.name = 'community_moderators';

Esta consulta recupera los nombres de usuario de la tabla users uniéndola con la tabla group_users por el ID de usuario y luego uniéndola con la tabla groups por el ID de grupo. Filtra los resultados para incluir solo los nombres de usuario de los usuarios que están en el grupo “community_moderators”.

Yo: Aquí está la estructura de las tablas de temas y publicaciones de la aplicación:

# == Schema Information
#
# Table name: topics
#
#  id                        :integer          not null, primary key
#  title                     :string           not null

# == Schema Information
#
# Table name: posts
#
#  id                      :integer          not null, primary key
#  user_id                 :integer
#  topic_id                :integer          not null
#  post_number             :integer          not null
#  raw                     :text             not null

Devuelve una consulta que liste todos los IDs de tema, IDs de publicación y nombres de usuario de todas las publicaciones creadas por miembros del grupo “community_moderators” que indiquen de alguna manera que el autor está interesado en cómo moderar discusiones polarizantes.

ChatGPT 3.5: Para lograr esto, necesitarías unir las tablas posts, topics, users y group_users basándote en el esquema proporcionado. Aquí tienes una consulta PostgreSQL que recupera la información solicitada:

SELECT t.id AS topic_id, p.id AS post_id, u.username
FROM posts p
JOIN topics t ON p.topic_id = t.id
JOIN users u ON p.user_id = u.id
JOIN group_users gu ON u.id = gu.user_id
JOIN groups g ON gu.group_id = g.id
WHERE g.name = 'community_moderators'
  AND (p.raw ILIKE '%moderate%' OR p.raw ILIKE '%polarizing%' OR p.raw ILIKE '%discussion%');

Esta consulta recupera el topic_id, post_id y username de todas las publicaciones creadas por miembros del grupo “community_moderators” que contienen ciertas palabras clave que indican un interés en moderar discusiones polarizantes. El operador ILIKE se utiliza para la coincidencia de patrones sin distinción entre mayúsculas y minúsculas en la columna raw de la tabla posts.

Ten en cuenta que esta consulta asume que las palabras clave que proporcionaste son indicativas de las publicaciones deseadas. Es posible que necesites ajustar o ampliar las palabras clave según tus criterios específicos.

Yo: Escribe una consulta que devuelva un recuento de publicaciones creadas en cada período semanal desde septiembre de 2022, creadas por miembros del grupo community_moderators que indiquen algún interés en cómo moderar discusiones polarizantes.

ChatGPT 3.5: Para lograr esto, puedes usar la siguiente consulta PostgreSQL para devolver un recuento de publicaciones creadas en cada período semanal desde septiembre de 2022, creadas por miembros del grupo “community_moderators” que indiquen un interés en cómo moderar discusiones polarizantes:

SELECT
    DATE_TRUNC('week', p.created_at) AS week_start,
    COUNT(p.id) AS post_count
FROM
    posts p
JOIN
    users u ON p.user_id = u.id
JOIN
    group_users gu ON u.id = gu.user_id
JOIN
    groups g ON gu.group_id = g.id
WHERE
    g.name = 'community_moderators'
    AND (p.raw ILIKE '%moderate%'
         OR p.raw ILIKE '%polarizing%'
         OR p.raw ILIKE '%political%'
         OR p.raw ILIKE '%contentious%'
         OR p.raw ILIKE '%debate%'
         OR p.raw ILIKE '%controversial%'
         OR p.raw ILIKE '%discussion%')
    AND p.created_at >= '2022-09-01' -- Fecha de inicio: Septiembre de 2022
GROUP BY
    week_start
ORDER BY
    week_start;

Esta consulta calcula el recuento de publicaciones creadas por miembros del grupo “community_moderators” que contienen las palabras clave especificadas en cada período semanal desde septiembre de 2022. Agrupa los resultados por semana y los ordena cronológicamente. Asegúrate de ajustar los nombres de las columnas y las relaciones de las tablas según el esquema real de tu base de datos.


Los resultados me parecen buenos y representan los tipos de consultas que me llevaban bastante tiempo escribir en el pasado. Supongo que sería posible entrenar un modelo con la estructura de la base de datos de Discourse para que los detalles sobre la estructura pudieran omitirse de las indicaciones.

4 Me gusta