POLÍTICA, DATOS Y PROGRAMACIÓN

@Botonauta

🤖 Un bot sobre política desarrollado con Python & ChatGPT

María de los Ángeles Lasa
Published in
4 min readJan 24, 2024

--

Mi interés por los bots nació en 2021. Estaba trabajando en un proyecto sobre la polarización de la opinión pública colombiana y, modelando enormes cantidades de datos de TwitterX, le puse cara a una granja de bots. Se veía como una pequeña isla naranja, aislada de la conversación, pero era exitosa en su cometido: a fuerza de retweets, incrementaba artificialmente la visibilidad de un mensaje no representativo del consenso general.

Sobre el margen lateral derecho de la imagen, una granja de bots en una conversación sobre corrupción

Desde entonces me propuse entender cómo funcionaban las granjas de bots y —eventualmente— aprender a programar uno.

Intenté por primera vez en 2022 pero fracasé miserablemente. Mis habilidades en Python eran aún (muy) precarias y el proyecto no prosperó. Volví a intentar una segunda vez pero no lograba descifrar el proceso de automatización desde una alternativa serverless. Y volví a intentar una tercera vez, y…

Desarrollo

Botonauta —por bot y nauta, “viajero”— es un bot programado con Python que, para la elaboración de contenido, emplea un prompt de ChatGPT. De este modo, todos los días, botcito viaja en el tiempo y te recuerda qué evento político tuvo lugar un día como hoy pero en un año aleatorio del pasado.

Botonauta se hospeda en un server casero: opera desde una Raspberry Pi 4 a la que le instalé Python junto al paquete OpenAI en un entorno virtual. Y, después de conseguir accesos gratuitos a las API de TwitterX y OpenAI, empecé a trabajar en el código que comparto a continuación.

import openai
import tweepy
import datetime

# Cargar las key y tokens de OpenAI & TwitterX

openai.api_key = ''
twitterx_consumer_key = ''
twitterx_consumer_secret = ''
twitterx_access_token = ''
twitterx_access_token_secret = ''

# Autenticación de la API de TwitterX

client = tweepy.Client(
consumer_key = twitterx_consumer_key,
consumer_secret = twitterx_consumer_secret,
access_token = twitterx_access_token,
access_token_secret = twitterx_access_token_secret
)

# Verificación de las credenciales de TwitterX

try:
client.verify_credentials()
print("Verificación correcta")
except:
print("Error en la verificación")

# Función para generar contenido usando ChatGPT

def prompt(message):
try:
response = openai.ChatCompletion.create(
model = 'gpt-3.5-turbo',
temperature = 0,
messages = [
{"role": "user", "content": message}
]
)
return response.choices[0]["message"]["content"]
except Exception as e:
print(f"Error en generación de respuesta: {e}")
return None

# Función para postear en TwitterX

def tweet(mensaje):
try:
client.create_tweet(text = mensaje)
print("Tweet publicado")
except Exception as e:
print(f"Error en publicación de tweet: {e}")

# Obtener ubicación y fecha actual

fecha_actual = datetime.datetime.now()
dia = str(int(fecha_actual.strftime("%d")))
mes = str(int(fecha_actual.strftime("%m")))
mes_letras = fecha_actual.strftime("%B")

# Generar el prompt y publicar la respuesta en TwitterX

mensaje = (
f"Buscá un hecho político significativo que haya ocurrido un {dia}
de {mes}, pero en un año en el pasado. Asegurate de que el hecho esté
documentado y las fechas sean correctas. Empezá tu respuesta con:
'Un {dia} de {mes_letras}, pero de...' y limitá tu respuesta a menos
de 220 caracteres."
)

contenido = prompt(mensaje)
if contenido:
tweet(contenido)

Con el código listo y testeado, el último paso fue programar la tarea en el Cron de Linux para que el código se ejecute todos los días a las 10.30 de la mañana.

30 10 * * * /bin/bash -c 'source /home/user/env/bin/activate && /home/user/env/bin/python3 /home/user/Botonauta.py >> /home/user/cronbotonauta.log 2>&1'

Insights

🍇 ChatGPT manda fruta

Un gran desafío fue integrar ChatGPT al bot. Usualmente los bots automatizan tareas desde una base de datos estática, pero yo quería que el contenido diario se produjera con AI generativa.

Hacer esta integración no fue tarea sencilla, en parte porque descubrí que la API de ChatGPT está en proceso de desarrollo y tiene falencias importantes. (O, dicho en criollo, manda fruta a cuatro manos.)

Me costó mucho dar con el prompt correcto para que no “fabricara” información, falseara hechos históricos o twitteara fake news.

📣 Manufactura de consensos

El proceso de desarrollo del bot me ayudó a dimensionar lo fácil que es construir una granja de bots.

Con un poco de paciencia para crear cuentas de e-mail y TwitterX, y una Raspberry Pi 4 prendida todo el día, podría crear sin problemas una modesta granja de bots y ampliar mi cartera de “servicios profesionales”.

¿Se imaginan el poder de cincuenta o cien cuentas automatizadas para retwittear a políticos o amplificar mensajes falsos?

Bonus track

Para que todo tenga que ver con todo, desarrollé la imagen de Botonauta con Logo Maker, un GPT personalizado desarrollado por Andrew Gao que opera con ChatGPT 4.0.

El prompt fue:

Quiero que me desarrolles la imagen de un robot simpático que tenga la forma de un logo circular. El robot tiene que tener vibes de candidato político. Y, por favor, escribime “Botonauta” en el pie del círculo.

¿Creen que cumplió con su objetivo? Yo creo que sí.

--

--

Condolasa Arroz
Condolasa Arroz

Published in Condolasa Arroz

Política & datos %>% filter(random == ¡muy random!)

María de los Ángeles Lasa
María de los Ángeles Lasa

Written by María de los Ángeles Lasa

Politóloga. Docente Universitaria. TEDxSpeaker. Experta en Corea del Norte. Mis ideas y proyectos en marialasa.ar

No responses yet