Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Creare applicazioni LLM based

LLM: testiamo applicazioni basati su modelli di AI differenti e analizziamo le diverse risposte che vengono fornite
LLM: testiamo applicazioni basati su modelli di AI differenti e analizziamo le diverse risposte che vengono fornite
Link copiato negli appunti

A questo punto, abbiamo la necessaria confidenza con elementi e concetti principali per poter svolgere la nostra prima applicazione che potremmo definire LLM based. In realtà, si tratta ancora di un embrione, del motore per così dire: infatti automatizzeremo solo il passaggio di richieste (messaggi, ormai possiamo chiamarli) all'LLM e recupereremo le risposte. Con un po' di fantasia, possiamo però immaginare tutto ciò immerso in un'applicazione dotata di una qualche interfaccia di comunicazione (visuale, API, funzionalità remote, etc.) che permetta di integrarla in un flusso di lavoro uomo-macchina o macchina-macchina.

Quali componenti utilizziamo per un'app LLM based?

A livello di "lista della spesa", poniamo come ingredienti fondamentali:

  • un ChatModel che metterà a disposizione un sistema di comunicazione con un LLM basando lo scambio su messaggi sia in ingresso sia in uscita;
  • un OutputParser elemento su cui ci concentreremo più avanti e che, per il momento, consideriamo una semplicemente componente che si occupa di emettere il nostro output.

Manca ancora il Prompt, altra componente strategica anche per modelli estremamente semplici, che inseriremo nelle prossime lezioni. Al momento, farne a meno contribuirà non solo a valorizzare modello e messaggi ma ci aiuterà ad apprezzarne maggiormente l'importanza.

I messaggi

Come abbiamo avuto modo di vedere nelle scorse lezioni, i ChatModel si basano per lo più sullo scambio di messaggi. Già abbiamo avuto modo di apprezzare che il tipo di messaggio in uscita dal modello è di tipo AIMessage, un po' come dire "il messaggio proveniente dall'Intelligenza Artificiale". Adesso vedremo altri due tipi di messaggi: SystemMessage e HumanMessage.

Un SystemMessage serve a specificare al sistema che tipo di "ruolo" deve svolgere. I modelli di Intelligenza Artificiale sono così multiformi che potrebbero essere in grado di "impersonare" atteggiamenti e ruoli differenti e questo potrebbe cambiare il tipo ed il tono della risposta.

Lo HumanMessage è invece la vera e propria richiesta che proviene dall'essere umano e che, per il momento, inoltreremo "manualmente" come stringa.

A livello di modelli, tratteremo due approcci diversi: un modello remoto (noi facciamo uso in questo caso di OpenAI) ed uno in locale sfruttando, come abbiamo imparato, Ollama. L'esempio sarà svolto in notebook Colab pertanto ogni estratto di codice potrà essere eseguito come una cella.

Esempio di applicazione LLM based

In questo esempio indurremo ogni LLM coinvolto ad impersonare una volta un esperto di programmazione informatica ed una volta un esperto di animali esotici. In entrambi i casi, chiederemo a cosa gli fa pensare il termine "pitone" e confronteremo le risposte. Queste sono le impostazioni in comune ai due esempi:

from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
messages_for_developer = [
    SystemMessage(content="Sei un esperto di programmazione informatica"),
    HumanMessage(content="a cosa ti fa pensare il termine pitone?"),
]
messages_for_animalexpert = [
    SystemMessage(content="Sei un esperto di animali esotici"),
    HumanMessage(content="a cosa ti fa pensare il termine pitone?"),
]
parser = StrOutputParser()

In particolare, questo snippet racchiude la definizione dei messaggi che utilizzano per ogni LLM le medesime classi.

Esempio: versione Ollama

Importiamo in locale il modello phi4 di Microsoft (possiamo scegliere e provare qualsiasi altro, ovviamente, da LLama a Deepseek, da Gemma a Mistral e via dicendo):

!sudo apt-get install -y pciutils
!curl -fsSL https://ollama.com/install.sh | sh
from IPython.display import clear_output
%env OLLAMA_HOST=0.0.0.0:11434
%env OLLAMA_ORIGINS=*
import subprocess
subprocess.Popen(["ollama", "serve"])
!ollama pull phi4
clear_output()
!ollama list

e, al termine delle operazioni, ci dovrebbe essere proiettata questa situazione:

NAME           ID              SIZE      MODIFIED
phi4:latest    ac896e5b8b34    9.1 GB    9 seconds ago

Predisponiamo il modello, mediante un oggetto ChatOllama, impostando alcuni parametri come la temperature (potremmo dire la "fantasia" che il modello applicherà), il numero massimo di token ed un timeout di attesa in secondi:

!pip install langchain-ollama
clear_output()
from datetime import time
from langchain_ollama import ChatOllama
ollama_model = ChatOllama(
    model="phi4",
    temperature=0,
    max_tokens=256,
    timeout=15
)
chain = ollama_model | parser

E' il momento di invocare "l'esperto di programmazione"

chain.invoke(messages_for_developer)

A cui il termine pitone ricorda:

Il termine "Pitone" può riferirsi principalmente a due cose:

1. Python: È un linguaggio di programmazione molto popolare noto per la sua sintassi semplice e leggibile, che lo rende ideale sia per i principianti che per gli sviluppatori esperti. Python è utilizzato in una vasta gamma di applicazioni, tra cui web development, data analysis, machine learning, automazione e molto altro.

2. Pitone (serpente): è anche il nome comune dato a diversi serpenti della famiglia Boidae, noti per la loro capacità di inghiottire prede piuttosto grandi rispetto alle dimensioni del loro corpo.

Se dovessi scegliere il principale in un contesto tecnologico o informatico, sarebbe "Python", il linguaggio di programmazione.

Mentre l'esperto di animali esotici:

chain.invoke(messages_for_animalexpert)

risponde:

Il termine "pitone" può far pensare a diversi aspetti, principalmente legati al mondo degli animali:

1. Rettili: I pitoni sono un tipo di serpente appartenente alla famiglia Boidae. Sono noti per la loro grande dimensione e per essere non velenosi.
2. Dimensioni: Alcune specie di pitone, come il pitone reticolato (Python reticulatus), possono raggiungere lunghezze impressionanti, spesso superando i 6 metri.
3. Ambiente Naturale: I pitoni sono ....

Per leggibilità accorciamo la risposta ma in essa non viene mai citato il riferimento al linguaggio di programmazione Python.

Esempio: versione OpenAI

Per impostare l'uso di un LLM OpenAI, usiamo le seguenti istruzioni ricordandoci di applicare una nostra chiave API:

!pip install langchain-openai
from datetime import time
from langchain_openai import ChatOpenAI
# come api_key impostare la propria chiave OpenAI
openai_model = ChatOpenAI(
    model="gpt-4o",
    temperature=0,
    max_tokens=256,
    timeout=15,
    api_key="...."
)
chain = openai_model | parser

Anche in questo caso procediamo con le richieste, passando i messaggi che abbiamo visto all'inizio della lezione e ricevendo in output degli AIMessage:

openai_model.invoke(messages_for_developer)
openai_model.invoke(messages_for_animalexpert)

Per semplicità, evitiamo di riportare l'output che è molto simile a quello ottenuto con Ollama ed anche in questo caso, solo il "programmatore" ha legato il termine "pitone" al linguaggio di programmazione Python, mentre l'"esperto di animali" è rimasto concentrato sugli aspetti naturalistici.

Questa nostra struttura è pronta per evolvere ulteriormente con altri elementi come vedremo nelle prossime lezioni.

Ti consigliamo anche