This is an old revision of the document!
Table of Contents
Instalación de Dependencias:
Instalar 'pip' para traer las dependencias
sudo apt install python3-pip
Instalar la librería OpenAI
pip install openai
Configuración de Variables de Entorno:
Crear las variables de entorno durante la sesión
export OPENAI_API_KEY=sk-tuClaveSecretaAqui
Configuración Permanente de Variables de Entorno:
Editar el archivo de entorno
sudo nano /etc/environment
Reiniciar el sistema para aplicar los cambios
sudo reboot
Comprobar las variables de entorno
env
El programa en sí
El código genera un comentario corto en base a las últimas 14 líneas de un archivo .csv con la cotización del dolar paralelo, que encuentra en internet (es de otro servicio que corre en otra VM y queda accesible desde internet).
Lo piola es que uno podría por ejemplo pasarle otros resultados y decirle “redactame un párrafo en base a estos resultados” y enviarlo por mail. Lo interesante acá es poder hacer datos –> openai –> app
Este es el código:
- = main.py
import requests from openai import OpenAI client = OpenAI() # Obtener los últimos 14 valores del archivo CSV desde la URL url = "https://repo.facundoitest.space/usdPagano/historial.csv" response = requests.get(url) lines = response.text.splitlines()[-14:] # Formatear las líneas y truncar los números a un entero formatted_lines = [] for line in lines: date, value = line.split(',') # Truncar los números a enteros value = int(float(value)) formatted_line = f"{date},{value}" formatted_lines.append(formatted_line) # Unir las líneas formateadas con punto y coma y espacio last_14_lines = "; ".join(formatted_lines) # Crear el prompt con el contenido del archivo CSV prompt = f"crea un breve comentario (menos de 140 caracteres) sobre el comportamiento de la devaluada moneda local (peso argentino) frente al dólar. En lo posible abusa de emojis y hashtags. Necesito que el sentimiento surja del valor más reciente, el de hoy, y que lo mencione en el mensaje, tipo 'wow, dolar a 1000, quien lo hubiera pensado'. Si la cotizacion baja, debería expresar cierto alivio y esperanza. Si la cotización sube, al contrario. Estos son los valores de la última semana {last_14_lines}" # Llamada a la API de OpenAI apiresponse = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a somewhat angry but hopeful Twitter user."}, {"role": "user", "content": prompt} ], max_tokens=200, # Ajusta este valor según tus necesidades ) # Guardar la respuesta en un archivo de texto with open("output.txt", "w", encoding="utf-8") as file: file.write(apiresponse.choices[0].message.content + '\n')
“role”: “system” le da contexto al LLM de openai
Ejecutar el script Python
python3 main.py
La respuesta se parece a esto:
facundo@openai:~/weeklyPost$ cat output.txt
¡El peso argentino sigue luchando contra el dólar! 😡 Hoy, la cotización sigue bajita, ¡un alivio y una esperanza para todos! 💪🇦🇷 #PesoArgentinoDevaluado #DólarEnDescenso 😌✨
Configuración de Crontab:
Setear la hora para que crontab corra a la hora justa
sudo timedatectl set-timezone America/Argentina/Buenos_Aires
Crear el script de actualización
nano update.sh
Contenido de update.sh:
- = update.sh
#!/bin/bash cd /home/facundo/weeklyPost python3 main.py
Configurar la tarea recurrente en crontab (Ejemplo: 22:30 todos los días)
crontab -e
30 22 * * * /home/facundo/weeklyPost/update.sh
Integración con Telegram:
Crear el script para enviar mensajes a Telegram
nano sendmsg.sh
Contenido de sendmsg.sh:
- = sendmsg.sh
#!/bin/bash TOKEN="160*********90:AAGGHbwa******************-iRUn2bOUsHympz6rI" ID="-47*******" current_time=$(date +%H%M) current_date=$(date +%m%d) MSG="Buenas! El resultado de hoy y en glorioso jpg. Ahora como buen argentino también opina https://repo.facundoitest.space/usdPagano/latest.jpg?v=${current_date}-${current_time} $(cat /home/facundo/weeklyPost/output.txt)" URL="https://api.telegram.org/bot$TOKEN/sendMessage" curl -s -X POST $URL -d chat_id=$ID -d text="$MSG"
$(cat /home/facundo/weeklyPost/output.txt) le pasa el contenido del archivo de texto a la variable.
El parámetro ?v=${current_date}-${current_time} es para que Telegram no traiga el thumbnail desde el caché y de esta forma lo fuerza a generarlo de nuevo. Podría tener un valor random. Es más práctico esto que generar el archivo con un nombre distinto cada vez. Puedo linkearlo como latest.jpg desde cualquier lado.
