Vai al contenuto

Creare agenti AI di intelligenza artificiale/Analisi vendite

Wikibooks, manuali e libri di testo liberi.
Indice del libro

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!