1. Introduzione alle LLM

I Large Language Models (LLM) sono i componenti principali di LangChain. LangChain di per sé non fornisce capacità di modelli di lingua di grandi dimensioni; invece, incapsula vari modelli di lingua di grandi dimensioni comuni, fornendo un'interfaccia standard per operare con modelli di lingua di grandi dimensioni, rendendola conveniente per gli sviluppatori.

Attualmente, LangChain incapsula molti modelli di lingua di grandi dimensioni e supporta anche modelli personalizzati. Gli sviluppatori possono incapsulare le proprie nuove interfacce per i modelli.

  • Nota: Attualmente, ci sono molti modelli di grandi dimensioni disponibili open source e commerciali. Considerando le differenze di costo e capacità del modello, ognuno potrebbe avere scelte diverse. Inoltre, potrebbero esserci frequenti cambiamenti di modello e gli sviluppatori potrebbero non voler modificare troppo il codice di business durante tali cambiamenti. Qui entra in gioco il valore di LangChain.

2. Configurazione

2.1 Installazione

Per utilizzare OpenAI LLM in LangChain, gli utenti devono installare il pacchetto Python di OpenAI eseguendo il seguente comando:

pip install openai

2.2 Configurazione della chiave API

L'accesso all'API di OpenAI richiede una chiave API, che può essere ottenuta creando un account sulla piattaforma OpenAI. Una volta ottenuta la chiave API, può essere impostata come variabile di ambiente utilizzando il seguente comando:

export OPENAI_API_KEY="tua-chiave-api"

In alternativa, se non si desidera impostare una variabile di ambiente, è possibile passare direttamente la chiave API durante l'inizializzazione della classe OpenAI LLM, come mostrato di seguito:

from langchain_openai import OpenAI

llm = OpenAI(openai_api_key="tua-chiave-api")

3. Implementazione di LCEL

In LangChain, le LLM implementano l'interfaccia Runnable per il Linguaggio di Espressione di LangChain (LCEL). Ciò significa che supportano varie chiamate di funzione, come invoke, stream, batch e altro ancora.

Le LLM accettano input di stringhe o oggetti che possono essere forzati in un prompt di stringa, incluso List[BaseMessage] e PromptValue.

4. Esempio di Utilizzo delle LLM

4.1 Invocazione

Per invocare una LLM con un prompt specifico, può essere utilizzata la funzione invoke, come mostrato di seguito:

llm.invoke("Fornire qui un prompt per la LLM")

4.2 Streaming

Il metodo per ottenere e elaborare in tempo reale l'output di testo dalle LLM è chiamato streaming. Di seguito è mostrato un esempio di utilizzo di LLM per l'elaborazione in streaming:

for chunk in llm.stream("Fornire qui un prompt per lo streaming di LLM"):
    print(chunk, end="", flush=True)

4.3 Elaborazione Batch

L'elaborazione batch consente l'elaborazione parallela di input multipli per le LLM. Puoi elaborare un batch di prompt in questo modo:

llm.batch(["prompt 1", "prompt 2", "prompt 3"])

4.4 Operazioni Asincrone

Per una maggiore efficienza, possono essere utilizzate operazioni asincrone in concomitanza con le LLM. Operazioni asincrone come ainvoke, astream, abatch e astream_log consentono l'esecuzione asincrona. Di seguito è mostrato un esempio di utilizzo di LLM per l'elaborazione in streaming asincrona:

async for chunk in llm.astream("Fornire qui un prompt asincrono per lo streaming di LLM"):
    print(chunk, end="", flush=True)

Questi esempi dimostrano i vari modi per sfruttare le LLM per compiti di elaborazione del linguaggio naturale all'interno del framework LangChain.