==== 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:
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'':**
#!/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'':**
#!/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.