LangChain in Azure Databricks für die LLM-Entwicklung

Wichtig

Dies sind experimentelle Features, und die API-Definitionen können sich ändern.

In diesem Artikel werden die LangChain-Integrationen beschrieben, die die Entwicklung und Bereitstellung großer Sprachmodelle (LLMs) in Azure Databricks erleichtern.

Mit diesen LangChain-Integrationen können Sie Folgendes tun:

  • Laden Sie Daten nahtlos aus einem PySpark-DataFrame mit dem Ladeprogramm für PySpark-DataFrames.
  • Fragen Sie Ihre Daten interaktiv in natürlicher Sprache mit dem Spark-DataFrame-Agent oder dem Databricks-SQL-Agent ab.
  • Umschließen Sie Ihr Azure Databricks-Dienstmodell als großes Sprachmodell (LLM) in LangChain.

Was ist LangChain?

LangChain ist ein Softwareframework, das entwickelt wurde, um Anwendungen zu erstellen, die große Sprachmodelle (LLMs) verwenden. Die Stärke von LangChain liegt in seinem breiten Spektrum an Integrationen und Funktionen. Das Framework umfasst API-Wrapper, Web Scraping-Subsysteme, Codeanalysetools, Dokumentzusammenfassungstools und vieles mehr. Es unterstützt auch große Sprachmodelle von OpenAI, Anthropic, HuggingFace usw. zusammen mit verschiedenen Datenquellen und Typen.

LangChain ist als experimentelle MLflow-Variante verfügbar, mit der LangChain-Kunden die robusten Tools und Experimentverfolgungsfunktionen von MLflow direkt aus der Azure Databricks-Umgebung nutzen können. Weitere Informationen finden Sie in der MLflow-Dokumentation zur LangChain-Variante.

Anforderungen

  • Databricks Runtime 13.3 ML und höher
  • Databricks empfiehlt die Pip-Installation der neuesten Version von LangChain, um sicherzustellen, dass Sie über die neuesten Updates verfügen.
    • %pip install --upgrade langchain

Laden von Daten mit dem Ladeprogramm für PySpark-DataFrames

Der Ladeprogramm für PySpark-DataFrames in LangChain vereinfacht das Laden von Daten aus einem PySpark-DataFrame mit einer einzelnen Methode.

from langchain.document_loaders import PySparkDataFrameLoader

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

Das folgende Notebook zeigt ein Beispiel, in dem das Ladeprogramm für PySpark-DataFrames verwendet wird, um einen abrufbasierten Chatbot zu erstellen, der mit MLflow protokolliert wird, wodurch das Modell wiederum als generische Python-Funktion für Rückschlüsse mit mlflow.pyfunc.load_model()interpretiert werden kann.

Ladeprogramm für PySpark-DataFrames und MLFlow in einem LangChain-Notebook

Notebook abrufen

Spark-DataFrame-Agent

Der Spark-DataFrame-Agent in LangChain ermöglicht die Interaktion mit einem Spark-DataFrame, der für die Beantwortung von Fragen optimiert ist. Die Dokumentation zum Spark-DataFrame-Agent von LangChain enthält ein detailliertes Beispiel zum Erstellen und Verwenden des Spark-DataFrame-Agents mit einem 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)
...

Im folgenden Notebook wird veranschaulicht, wie Sie den Spark-DataFrame-Agent erstellen und verwenden, um Einblicke in Ihre Daten zu erhalten.

Verwenden von LangChain für die Interaktion mit einem Spark-DataFrame-Notebook

Notebook abrufen

Databricks SQL-Agent

Der Databricks SQL-Agent ist eine Variante des Standard-SQL-Datenbank-Agents, den LangChain bereitstellt, und gilt als eine leistungsfähigere Variante des Spark-DataFrame-Agents.

Mit dem Databricks SQL-Agent können alle Azure Databricks-Benutzer*innen mit einem angegebenen Schema in Unity Catalog interagieren und Erkenntnisse zu ihren Daten generieren.

Wichtig

Der Databricks SQL-Agent kann nur Tabellen abfragen und erstellt keine Tabellen.

Im folgenden Beispiel wird die Datenbankinstanz innerhalb des SQLDatabase.from_databricks(catalog="...", schema="...")-Befehls erstellt, und der Agent und die erforderlichen Tools werden von SQLDatabaseToolkit(db=db, llm=llm) bzw. create_sql_agent(llm=llm, toolkit=toolkit, **kwargs) erstellt.

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

Hinweis

OpenAI-Modelle erfordern ein kostenpflichtiges Abonnement, wenn das kostenlose Abonnement ein Ratenlimit erreicht.

Das folgende Notebook veranschaulicht, wie Sie den Databricks SQL-Agent erstellen und verwenden, damit Sie die Daten in Ihrer Datenbank besser verstehen können.

Verwenden von LangChain für die Interaktion mit einem SQL-Datenbank-Notebook

Notebook abrufen

Umschließen von Azure Databricks-Modellen als LLMs

Wenn Sie also über eine LLM verfügen, die Sie in Azure Databricks erstellt haben, können Sie sie direkt in LangChain anstelle von OpenAI, HuggingFace oder einem anderen LLM-Anbieter verwenden.

Diese Integration unterstützt zwei Endpunkttypen:

Umschließen eines Modellbereitstellungsendpunkts

Sie können Azure Databricks-Endpunkte als LLMs in LangChain umschließen. Sie benötigen Folgendes, um einen Modellbereitstellungsendpunkt als ein LLM in LangChain zu umschließen:

  • Eine registriertes LLM, das an einem Azure Databricks-Modellbereitstellungsendpunkt bereitgestellt wird
  • CAN ABFRAGEN-Berechtigung für den Endpunkt.

Häufig benötigen oder empfehlen Modelle wichtige Parameter wie temperature oder max_tokens. Das folgende Beispiel zeigt, wie Sie diese Parameter mit einem bereitgestellten Modell mit dem Namen falcon-7b-instruct eingeben. Weitere Informationen finden Sie in der LangChain-Dokumentation unter Umschließen eines Bereitstellungsendpunkts.

from langchain.llms import Databricks

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

Umschließen einer Proxyanwendung für Clustertreiber

Sie benötigen Folgendes, um eine Proxyanwendung für Clustertreiber als ein LLM zu umschließen:

  • Eine LLM, die in einem interaktiven Azure Databricks-Cluster im Modus „Einzelbenutzer“ oder „Keine freigegebene Isolation“ geladen wurde
  • Ein lokaler HTTP-Server, der auf dem Treiberknoten ausgeführt wird, um das Modell unter „/“ mithilfe von HTTP POST mit JSON-Eingabe bzw. -Ausgabe bereitzustellen
  • Die App verwendet eine Portnummer zwischen [3000, 8000] und lauscht auf die Treiber-IP-Adresse oder einfach nur auf 0.0.0.0 anstelle von localhost.
  • Die KANN ANFÜGEN-Berechtigung für das Cluster.

Ein Beispiel finden Sie in der LangChain-Dokumentation zum Umschließen einer Proxy-App für Clustertreiber.