Abbiamo più volte parlato di Ollama nel nostro sito spiegando come sia possibile usarlo per installare in locale gli LLM e come integrarli nelle proprie applicazioni usando diversi framework come Spring AI e LangChain. Adesso esploreremo una nuova alternativa versatile che consente l'integrazione di Ollama con qualsiasi software a prescindere dal linguaggio o dal framework con cui è implementato. Stiamo parlando delle Ollama REST API.
Di fatto le Ollama REST API offrono le stesse identiche funzionalità che possiamo sperimentare da linea di comando ma consentono l’invocazione da remoto trasformando la propria macchina in un vero e proprio web-server.
Quali sono i vantaggi delle Ollama REST API?
L’esposizione delle funzionalità offerte dagli LLM mediante il protocollo REST (Representational State Transfer) offre diversi vantaggi per gli sviluppatori:
- Scalabilità: Essendo le API REST per loro natura stateless, permettono la realizzazione di applicazioni facilmente scalabili. L’elaborazione dei modelli linguistici è un’operazione molto “pesante” dal punto di vista computazionale. Grazie alle REST API è possibile deployare più istanze di server Ollama e distribuire il carico su più nodi.
- Compatibilità: Il protocollo REST definisce degli standard comuni che consentono l’integrazione delle funzionalità mediante semplici invocazioni HTTP. Questo permette di includere le funzionalità offerte dall’AI con qualsiasi strumento o piattaforma inclusi browser web, dispositivi mobili e dispositivi IoT.
Prerequisiti
In questo tutorial useremo il comando curl che solitamente è presente nativamente su qualsiasi dispositivo Linux/Mac e che è installabile anche su Windows. In alternativa è possibile usare un’interfaccia grafica come quella di Postman per fare le prove.
Come modello useremo invece Phi3 che è molto leggero e può essere eseguito in locale sulla maggior parte degli hardware.
Le API principali
Gli endpoint fondamentali delle Ollama REST API sono tre:
Pull
Partiamo dunque dall’API che consente di effettuare la pull di un modello e scaricarlo sulla propria macchina locale. Se non avete già scaricato in precedenze Phi3 potete farlo invocando il seguente endpoint REST:
curl http://localhost:11434/api/pull -d '{
"name": "phi3"
}'
La request è molto semplice ed è costituita da un solo parametro di input che rappresenta il nome del modello. Di default il server Ollama viene esposto sulla porta 11434.
List
Una volta completato il download, possiamo verificare la disponibilità del modello invocando l’API list che restituisce in output l’elenco dei modelli presenti in locale.
curl http://localhost:11434/api/tags
Chat
L’API principale è sicuramente quella che consente di chattare con l’LLM.
curl http://localhost:11434/api/chat -d '{
"model": "phi3",
"messages": [
{
"role": "user",
"content": "what is a REST API?"
}
],
"stream": false
}'
Di default Ollama espone delle API in formato “stream”. Questo significa che la risposta sarà composta da un numero elevato di messaggi, ognuno dei quali rappresenta un token (ovvero una parola). Questa modalità è molto utile se si desidera ricevere la risposta progressivamente senza tempi di attesa lunghi (come se dall’altra parte ci fosse una persona che scrive una parola per volta) ma l’output risulta poco leggibile ad occhio. E’ possibile risolvere il problema inserendo il parametro “stream: false”.
L’output del modello sarà simile al seguente:
{
"model": "phi3",
"created_at": "2024-05-12T13:06:42.049683Z",
"message": {
"role": "assistant",
"content": "A REST API (Representational State Transfer Application Programming Interface) is an architectural style for designing networked applications. It uses standard HTTP methods like GET, POST, PUT, and DELETE to perform operations on resources, which are typically identified by URLs. ..."
},
"done": true,
"total_duration": 21016115542,
"load_duration": 10267708,
"prompt_eval_duration": 862673000,
"eval_count": 406,
"eval_duration": 20134192000
}
In conclusione, usando le Ollama REST API gli sviluppatori possono creare in poco tempo applicazioni intelligenti e conversazionali che arricchiscono l’esperienza degli utenti.