Condividi tramite


LangChain in Azure Databricks per lo sviluppo degli 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 LLM in Azure Databricks.

Con queste integrazioni LangChain è possibile:

  • Usare i modelli gestiti da Databricks come LLMs o incorporamenti nell'applicazione LangChain.

  • Integrare Mosaic AI Vector Search per l'archiviazione vettoriale e il recupero.

  • Gestire e tenere traccia dei modelli LangChain e delle prestazioni negli esperimenti MLflow.

  • Tracciare le fasi di sviluppo e produzione dell'applicazione LangChain con MLflow Tracing.

  • 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.

Che cos'è LangChain?

LangChain è un framework software progettato per creare applicazioni che usano modelli di linguaggio di grandi dimensioni (LLM). 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 fonti e tipi di dati.

Sfruttare MLflow per lo sviluppo di LangChain

LangChain è disponibile come versione MLflow, che consente agli utenti di sfruttare gli strumenti affidabili di MLflow per il rilevamento e l'osservabilità degli esperimenti in ambienti di sviluppo e produzione direttamente all'interno di Databricks. Per altre informazioni e indicazioni sull'uso di MLflow con LangChain, vedere la documentazione sulla versione di MLflow LangChain.

MLflow in Databricks offre funzionalità aggiuntive che la distinguono dalla versione open source, migliorando l'esperienza di sviluppo con le funzionalità seguenti:

  • Server di rilevamento MLflow completamente gestito: immediatamente disponibile all'interno dell'area di lavoro di Databricks, consentendo di avviare il rilevamento degli esperimenti senza ritardi di configurazione.

  • Integrazione senza problemi con i notebook di Databricks: gli esperimenti vengono collegati automaticamente ai notebook, semplificando il processo di rilevamento.

  • Tracciamento MLflowsu Databricks: Fornisce monitoraggio a livello di produzione con l'integrazione delle tabelle di inferenza, garantendo l'osservabilità end-to-end dallo sviluppo alla produzione.

  • Gestione del ciclo di vita del modello conUnity Catalog: controllo centralizzato su accesso, verifica, provenienza e scoperta dei modelli nelle tue aree di lavoro.

  • Valutazione integrata dell'agente di intelligenza artificiale Mosaic: valutare la qualità, i costi e la latenza delle applicazioni LangChain.

Sfruttando queste funzionalità, è possibile ottimizzare lo sviluppo, il monitoraggio e la gestione dei progetti basati su LangChain, rendendo Databricks una scelta ideale per le iniziative di intelligenza artificiale basate su MLflow.

Requisiti

  • Databricks Runtime 13.3 ML o versione successiva.
  • Installare il pacchetto di integrazione LangChain Databricks e il connettore SQL di Databricks. Databricks consiglia anche di installare la versione più recente di LangChain per assicurarsi di avere gli aggiornamenti più recenti.
    • %pip install --upgrade databricks-langchain langchain-community langchain databricks-sql-connector

Usare i modelli gestiti da Databricks come LLMs o incorporamenti

Se è stato creato un modello LLM o un incorporamento usando Databricks Model Serving, è possibile usarlo direttamente all'interno di LangChain al posto di OpenAI, HuggingFace o qualsiasi altro provider LLM.

Per usare un modello che serve un endpoint, come un LLM o un incorporamento in LangChain, è necessario:

  • Un LLM registrato o un incorporamento distribuito in un endpoint di gestione del modello di Azure Databricks.
    • In alternativa, è possibile usare i modelli resi disponibili dalle API Foundation Model, un elenco curato di modelli open source distribuiti all'interno dell'area di lavoro e pronti per l'uso immediato.
  • Autorizzazione CAN QUERY per l'endpoint.

Modelli di chat

L'esempio seguente illustra come usare il modello Llama 3.1 70B di Meta come componente LLM in LangChain usando l'API del modello Foundation.


from databricks_langchain import ChatDatabricks

chat_model = ChatDatabricks(
    endpoint="databricks-meta-llama-3-1-70b-instruct"
    temperature=0.1,
    max_tokens=250,
)
chat_model.invoke("How to use Databricks?")

È possibile sostituire l'endpoint con il modello personalizzato distribuito nell'endpoint di gestione. Altri esempi, come lo streaming, la chiamata asincrona e la chiamata di funzione sono disponibili nella documentazione di LangChain.

Incorporamenti

L'esempio seguente illustra come utilizzare il databricks-bge-large-en modello di incorporamento come componente di incorporamento in LangChain usando l'API del modello Foundation.


from databricks_langchain import DatabricksEmbeddings

embeddings = DatabricksEmbeddings(endpoint="databricks-bge-large-en")

Altri dettagli sono disponibili nella documentazione di LangChain

LLM

Avviso

I modelli di completamento sono considerati una funzionalità legacy. La maggior parte dei modelli moderni usa l'interfaccia di completamento della chat e deve essere usata con il componente ChatModel.

L'esempio seguente illustra come usare l'API del modello di completamento come componente LLM in LangChain.

from langchain_community.llms import Databricks

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

Usare la ricerca vettoriale di Mosaic AI come archivio vettoriale

Mosaic AI Vector Search è un motore di ricerca di somiglianza serverless in Databricks, che consente di archiviare rappresentazioni vettoriali dei dati, inclusi i metadati, in un database vettoriale. È possibile creare indici di ricerca vettoriali ad aggiornamento automatico da tabelle Delta gestite dal catalogo unity ed eseguirne query tramite un'API semplice per recuperare i vettori più simili.

Per usare questa funzionalità in LangChain, creare un'istanza DatabricksVectorSearch:

from databricks_langchain import DatabricksVectorSearch

vector_store = DatabricksVectorSearch(index_name="<YOUR_VECTOR_SEARCH_INDEX_NAME>")
retriever = vector_store.as_retriever(search_kwargs={"k": 5})
retriever.invoke("What is Databricks?")

Per altre informazioni, vedere la documentazione di DatabricksVectorSearch.

Usare la funzione Catalogo di Unity come strumento

Nota

L'integrazione della funzione Catalogo Unity si trova nel pacchetto langchain-community. È necessario installarlo usando %pip install langchain-community per accedere alla relativa funzionalità. Questa integrazione eseguirà la migrazione al pacchetto databricks-langchain in una versione futura.

È possibile esporre funzioni SQL o Python nel catalogo unity come strumenti per l'agente LangChain. Per indicazioni complete sulla creazione di funzioni del Catalogo Unity e sul loro utilizzo in LangChain, vedere la documentazione di Databricks UC Toolkit.

Caricare dati con il caricatore del DataFrame PySpark

Il PySpark DataFrame loader 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 su recupero di informazioni registrato con MLflow, il che permette di interpretare il modello come una funzione Python generica per l'inferenza con mlflow.pyfunc.load_model().

PySpark DataFrame loader e MLflow nel notebook Langchain

Prendi 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 Sparkdi 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 seguente notebook illustra come creare e usare l’agente DataFrame Spark per comprendere meglio i dati.

Usare LangChain per interagire con un notebook del DataFrame Spark

Prendi notebook

Databricks SQL Agent

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.

Nel seguente esempio 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
from databricks_langchain import ChatDatabricks

# Note: Databricks SQL connections eventually time out. We set pool_pre_ping: True to
# try to ensure connection health is checked before a SQL query is made
db = SQLDatabase.from_databricks(catalog="samples", schema="nyctaxi", engine_args={"pool_pre_ping": True})
llm = ChatDatabricks(
    endpoint="databricks-meta-llama-3-1-70b-instruct",
    temperature=0.1,
    max_tokens=250,
)

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?")

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

Prendi notebook