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
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
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
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.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per