Condividi tramite


LangChain in Azure Databricks per lo sviluppo LLM

Importante

Si tratta di funzionalità sperimentali e le definizioni api potrebbero cambiare.

Questo articolo descrive le integrazioni di LangChain che facilitano lo sviluppo e la distribuzione di modelli di linguaggio di grandi dimensioni in Azure Databricks.

Con queste integrazioni LangChain è possibile:

  • Caricare facilmente i dati da un dataframe PySpark con il caricatore del dataframe PySpark.
  • Eseguire query interattive sui dati usando il linguaggio naturale con l'agente dataframe Spark o Databricks SQL Agent.
  • Eseguire il wrapping del modello fornito da Azure Databricks come modello di linguaggio di grandi dimensioni (LLM) in LangChain.

Che cos'è LangChain?

LangChain è un framework software progettato per creare applicazioni che usano modelli di linguaggio di grandi dimensioni. La forza di LangChain risiede nell'ampia gamma di integrazioni e funzionalità. Include wrapper API, sottosistemi web di scraping, strumenti di analisi del codice, strumenti di riepilogo dei documenti e altro ancora. Supporta anche modelli linguistici di grandi dimensioni di OpenAI, Anthropic, HuggingFace e così via, insieme a varie origini dati e tipi.

LangChain è disponibile come versione sperimentale di MLflow che consente ai clienti di LangChain di sfruttare gli strumenti affidabili e le funzionalità di rilevamento degli esperimenti di MLflow direttamente dall'ambiente Azure Databricks. Vedere la documentazione di LangChain flavor MLflow.

Requisiti

  • Databricks Runtime 13.3 ML e versioni successive.
  • Databricks consiglia di installare la versione più recente di LangChain per assicurarsi di avere gli aggiornamenti più recenti.
    • %pip install --upgrade langchain

Caricare dati con il caricatore del dataframe PySpark

Il caricatore del dataframe PySpark in LangChain semplifica il caricamento dei dati da un dataframe PySpark con un singolo metodo.

from langchain.document_loaders import PySparkDataFrameLoader

loader = PySparkDataFrameLoader(spark, wikipedia_dataframe, page_content_column="text")
documents = loader.load()

Il notebook seguente illustra un esempio in cui viene usato il caricatore del dataframe PySpark per creare un chatbot basato sul recupero registrato con MLflow, che a sua volta consente di interpretare il modello come funzione Python generica per l'inferenza con mlflow.pyfunc.load_model().

Caricatore del dataframe PySpark e MLflow nel notebook Langchain

Ottenere il notebook

Agente dataframe Spark

L'agente del dataframe Spark in LangChain consente l'interazione con un dataframe Spark, ottimizzato per la risposta alle domande. La documentazione dell'agente dataframe Spark di LangChain fornisce un esempio dettagliato di come creare e usare l'agente dataframe Spark con un dataframe.

from langchain.agents import create_spark_dataframe_agent

df = spark.read.csv("/databricks-datasets/COVID/coronavirusdataset/Region.csv", header=True, inferSchema=True)
display(df)

agent = create_spark_dataframe_agent(llm=OpenAI(temperature=0), df=df, verbose=True)
...

Il notebook seguente illustra come creare e usare l'agente di dataframe Spark per ottenere informazioni dettagliate sui dati.

Usare LangChain per interagire con un notebook del dataframe Spark

Ottenere il notebook

Databricks SQL Agent

Databricks SQL Agent è una variante dello standard database SQL Agent fornito da LangChain ed è considerata una variante più potente dell'agente dataframe Spark.

Con Databricks SQL Agent qualsiasi utente di Azure Databricks può interagire con uno schema specificato in Unity Catalog e generare informazioni dettagliate sui dati.

Importante

Databricks SQL Agent può eseguire query solo su tabelle e non crea tabelle.

Nell'esempio seguente l'istanza del database viene creata all'interno del SQLDatabase.from_databricks(catalog="...", schema="...") comando e gli strumenti necessari vengono creati rispettivamente da SQLDatabaseToolkit(db=db, llm=llm) e create_sql_agent(llm=llm, toolkit=toolkit, **kwargs).

from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.sql_database import SQLDatabase
from langchain import OpenAI

db = SQLDatabase.from_databricks(catalog="samples", schema="nyctaxi")
llm = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=.7)
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
agent = create_sql_agent(llm=llm, toolkit=toolkit, verbose=True)

agent.run("What is the longest trip distance and how long did it take?")

Nota

I modelli OpenAI richiedono una sottoscrizione a pagamento, se la sottoscrizione gratuita raggiunge un limite di frequenza.

Il notebook seguente illustra come creare e usare Databricks SQL Agent per comprendere meglio i dati nel database.

Usare LangChain per interagire con un notebook del database SQL

Ottenere il notebook

Eseguire il wrapping dei modelli gestiti da Azure Databricks come VM

Se è stato creato un LLM in Azure Databricks, è possibile usarlo direttamente all'interno di LangChain al posto di OpenAI, HuggingFace o qualsiasi altro provider LLM.

Questa integrazione supporta due tipi di endpoint:

  • Modello che gestisce gli endpoint consigliati per la produzione e lo sviluppo.
  • App proxy driver cluster, consigliata per lo sviluppo interattivo.

Eseguire il wrapping di un endpoint di gestione di un modello

È possibile eseguire il wrapping degli endpoint di Azure Databricks come LLMs in LangChain. Per eseguire il wrapping di un modello che serve un endpoint come LLM in LangChain, è necessario:

  • Un LLM registrato distribuito in un endpoint di gestione del modello di Azure Databricks.
  • Autorizzazione CAN QUERY per l'endpoint.

Spesso i modelli richiedono o consigliano parametri importanti, ad esempio temperature o max_tokens. Nell'esempio seguente viene illustrato come immettere tali parametri con un modello distribuito denominato falcon-7b-instruct. Altri dettagli sono disponibili nella documentazione relativa al wrapping di un endpoint di gestione LangChain.

from langchain.llms import Databricks

llm = Databricks(endpoint_name="falcon-7b-instruct", model_kwargs={"temperature": 0.1, "max_tokens": 100})
llm("How are you?")

Eseguire il wrapping di un'applicazione proxy del driver del cluster

Per eseguire il wrapping di un'applicazione proxy driver cluster come LLM in LangChain, è necessario:

  • Un LLM caricato in un cluster interattivo di Azure Databricks in modalità "utente singolo" o "nessun isolamento condiviso".
  • Un server HTTP locale in esecuzione nel nodo driver per gestire il modello in "/" usando HTTP POST con input/output JSON.
  • Un'app usa un numero di porta compreso tra [3000, 8000] e ascolta l'indirizzo IP del driver o semplicemente 0.0.0.0 anziché localhost solo.
  • Autorizzazione CAN ATTACH TO per il cluster.

Per un esempio, vedere la documentazione di LangChain relativa al wrapping di un'app proxy driver del cluster.