Creare agenti AI di intelligenza artificiale/Analisi vendite
Creazione dell'agente
[modifica | modifica sorgente]Volendo creare un agente AI che faccia l'analisi delle vendite utilizzando il dataset vendite.csv, bisogna innnanzitutto creare un notebook Google Colab in cui installare la libreria litellm:
!pip install litellm
Poi caricare nel filesystem di Colab il file vendite.csv con il seguente codice:
from google.colab import files
uploaded = files.upload()
Poi bisogna importare l'API KEY dell'LLM prescelto, cliccando sull'immagine della chiave nella barra laterale di sinistra di Colab e abilitandola:
import os
from google.colab import userdata
api_key = userdata.get('GOOGLE_API_KEY')
os.environ['GOOGLE_API_KEY'] = api_key
Poi bisogna creare una funzione python per richiamare Google Gemini e ottenere la risposta tramite prompt programmatici e poi la funzione extract_code_block che estrae il codice python dalla risposta dell'agente:
import requests
from litellm import completion
def generate_response(messages: str) -> str:
"""Call LLM to get response"""
response = completion(
model="gemini/gemini-2.0-flash",
messages=messages,
max_tokens=1024
)
return response.choices[0].message.content
def extract_code_block(response: str) -> str:
"""Extract code block from response"""
if not '```' in response:
return response
code_block = response.split('```')[1].strip()
# Check for "python" at the start and remove
if code_block.startswith("python"):
code_block = code_block[6:]
return code_block
Tramite la libreria pandas si legge il file vendite,csv e si crea un messaggio di sistema per l'agente in modo da costruire il prompt programmatico. L'agente dovrà restituire il codice python relativo alla domanda ed eseguirlo:
import pandas as pd
from datetime import datetime
# Carica il dataset CSV dal filesystem
df = pd.read_csv("vendite.csv", parse_dates=["data_vendita"])
agent_rules = [{
"role": "system",
"content": (
f"""
Sei un assistente che scrive codice Python con pandas per analizzare il dataset di vendite vendite.csv contenuto nel filesystem.
Il dataframe si chiama df e ha queste colonne: {', '.join(df.columns)}.
Rispondi SOLO con codice Python valido che produca la risposta, senza testo extra e senza ```python.
Il codice deve stampare il risultato finale.
Se l'utente inserisce una testo non inerente il dataset di vendite vendite.csv chiedi di fare una domanda inerente vendite.csv.
"""
)
}]
Si costruisce un ciclo di 5 iterazioni in cui l'utente inserisce la domanda relativa al dataset vendite.csv per l'agente, si passano al prompt programmatico di sistema agent_rules e doamnda, in tal modo l'agente ottiene risposta dall'agente, si estrae il codice e si esegue:
iterations = 0
max_iterations = 5
while iterations < max_iterations:
user_input = input("Inserisci una domanda: ")
domanda = [({"role": "user", "content": user_input})]
prompt = agent_rules + domanda
# 2. Generate response
print("\n🤖 Agent thinking...")
code = generate_response(prompt)
code = extract_code_block(code)
print("\n📬 Agent response:\n", code)
try:
# Esegue il codice generato
exec(code, globals(), locals())
except Exception as e:
print("Domanda errata!")
iterations += 1
Esecuzione dell'agente
[modifica | modifica sorgente]Inserisci una domanda: Quali sono i prodotti più venduti nell'ultimo mese?
🤖 Agent thinking...
📬 Agent response:
import pandas as pd
try:
df = pd.read_csv('vendite.csv')
df['data_vendita'] = pd.to_datetime(df['data_vendita'])
ultimo_mese = df['data_vendita'].max() - pd.DateOffset(months=1)
df_ultimo_mese = df[df['data_vendita'] > ultimo_mese]
prodotti_venduti = df_ultimo_mese.groupby('prodotto')['quantità'].sum()
prodotti_ordinati = prodotti_venduti.sort_values(ascending=False)
print(prodotti_ordinati)
except FileNotFoundError:
print("Il file vendite.csv non è stato trovato.")
except Exception as e:
print(f"Si è verificato un errore: {e}")
prodotto Mouse 42 Tastiera 18 Notebook 11 Sedia ufficio 9 Monitor 8 Name: quantità, dtype: int64
Inserisci una domanda: Quali sono i prodotti con maggior ricavo totale?
🤖 Agent thinking...
📬 Agent response:
import pandas as pd
df = pd.read_csv('vendite.csv')
ricavi_per_prodotto = df.groupby('prodotto')['ricavo'].sum()
prodotti_ordinati = ricavi_per_prodotto.sort_values(ascending=False)
print(prodotti_ordinati)
prodotto Notebook 12220 Monitor 2040 Tastiera 1286 Sedia ufficio 1085 Mouse 1022 Name: ricavo, dtype: int64
Inserisci una domanda: Mostrami la media del prezzo unitario per ogni prodotto.
🤖 Agent thinking...
📬 Agent response:
import pandas as pd
df = pd.read_csv('vendite.csv')
media_prezzo = df.groupby('prodotto')['prezzo_unitario'].mean()
print(media_prezzo)
prodotto Monitor 201.250000 Mouse 19.600000 Notebook 818.333333 Sedia ufficio 120.000000 Tastiera 55.750000 Name: prezzo_unitario, dtype: float64
Inserisci una domanda: Quanto fa 2+2 ?
🤖 Agent thinking...
📬 Agent response:
Per favore, fammi una domanda inerente al dataset vendite.csv. Domanda errata!
Inserisci una domanda: Che giorno è oggi ?
🤖 Agent thinking...
📬 Agent response:
Per favore, fai una domanda inerente vendite.csv. Domanda errata!