Freigeben über


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:

  • Verwenden Sie Databricks-bereitgestellte Modelle als LLMs oder Einbettungen in Ihre LangChain-Anwendung.

  • Integrieren Sie die Mosaik-KI-Vektorsuche für Vektorspeicher und -abruf.

  • Verwalten und verfolgen Sie Ihre LangChain-Modelle und deren Leistung in MLflow-Experimenten.

  • Verfolgen Sie die Entwicklungs- und Produktionsphasen Ihrer LangChain-Anwendung mit MLflow-Ablaufverfolgung.

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

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.

Nutzen von MLflow für die LangChain-Entwicklung

LangChain ist als MLflow-Variante erhältlich, die es den Nutzern ermöglicht, die stabilen Werkzeuge von MLflow zur Verfolgung und Beobachtung von Experimenten sowohl in Entwicklungs- als auch in Produktionsumgebungen direkt in Databricks zu nutzen. Weitere Details und Anleitungen zur Verwendung von MLflow mit LangChain finden Sie in der Dokumentation zur MLflow LangChain-Variante.

MLflow auf Databricks bietet zusätzliche Features, die es von der Open-Source-Version unterscheiden und ihre Entwicklungserfahrung mit den folgenden Funktionen verbessert:

  • Vollständig verwalteter MLflow-Tracking-Server: Sofort in Ihrem Databricks-Arbeitsbereich verfügbar, sodass Sie Experimente ohne Setup-Verzögerungen nachverfolgen können.

  • Nahtlose Integration in Databricks-Notebooks: Experimente werden automatisch mit Notebooks verknüpft und optimieren den Tracking-Prozess.

  • MLflow-Ablaufverfolgung auf Databricks: Bietet Überwachung auf Produktionsebene mit Rückschluss-Tabellenintegration, um die End-to-End-Beobachtung von Entwicklung bis Produktion sicherzustellen.

  • Modell-Lebenszyklusverwaltung mit Unity Catalog: Zentrale Kontrolle über Zugriff, Überwachung, Linien und Modellermittlung in Ihren Arbeitsbereichen.

  • Integrated Mosaik KI Agent Bewertung: Bewerten der Qualität, Kosten und Latenz Ihrer LangChain-Anwendungen.

Durch die Nutzung dieser Features können Sie die Entwicklung, Überwachung und Verwaltung Ihrer LangChain-basierten Projekte optimieren und Databricks zu einer erstklassigen Wahl für MLflow-basierte KI-Initiativen machen.

Anforderungen

  • Mindestens Databricks Runtime 13.3 ML.
  • Installieren Sie das LangChain Databricks-Integrationspaket und den SQL-Connector für Databricks. Databricks empfiehlt außerdem die Pip-Installation der neuesten Version von LangChain, um sicherzustellen, dass Sie über die neuesten Updates verfügen.
    • %pip install --upgrade databricks-langchain langchain-community langchain databricks-sql-connector

Verwenden von Databricks-Modellen als LLMs oder Einbettungen

Wenn Sie ein LLM- oder Einbettungs-Modell haben, das mit Databricks Model Serving bedient wird, können Sie es direkt in LangChain anstelle von OpenAI, HuggingFace oder einem anderen LLM-Anbieter verwenden.

Um einen Model Serving-Endpunkt als LLM- oder Einbettungs-Modell in LangChain zu nutzen, benötigen Sie:

  • Ein registriertes LLM- oder Einbettungs-Modell, das an einen Azure Databricks Model Serving-Endpunkt bereitgestellt wurde.
    • Alternativ können Sie die Modelle verwenden, die von Foundation Model-APIs zur Verfügung gestellt werden, eine zusammengestellte Liste von Open-Source-Modellen, die in Ihrem Arbeitsbereich bereitgestellt werden und sofort verwendet werden können.
  • CAN ABFRAGEN-Berechtigung für den Endpunkt.

Chatmodelle

Das folgende Beispiel zeigt, wie Sie das Llama 3.1 70B-Modell von Meta als LLM-Komponente in LangChain mit der Foundation Models-API verwenden.


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

Sie können den Endpunkt durch Ihr benutzerdefiniertes Modell ersetzen, das auf dem Bereitstellungsendpunkt bereitgestellt wird. Weitere Beispiele wie Streaming, asynchroner Aufruf und Funktionsaufruf finden Sie in der LangChain-Dokumentation.

Einbettungen

Das folgende Beispiel zeigt, wie Sie das databricks-bge-large-en Einbettungsmodell als Einbettungskomponente in LangChain mit der Foundation Models-API verwenden.


from databricks_langchain import DatabricksEmbeddings

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

Weitere Details finden Sie in der LangChain-Dokumentation

LLMs

Warnung

Abschlussmodelle werden als Legacy-Feature betrachtet. Die meisten modernen Modelle nutzen die Chatabschlussschnittstelle und sollten stattdessen mit der ChatModel-Komponente verwendet werden.

Das folgende Beispiel zeigt, wie Sie Ihre Abschlussmodell-API als LLM-Komponente in LangChain verwenden.

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

Verwenden der Mosaik-KI-Vektorsuche als Vektorspeicher

Die Mosaic-KI-Vektorsuche ist eine serverlose Ähnlichkeitssuchmaschine, mit der Sie eine Vektordarstellung Ihrer Daten, einschließlich Metadaten, in einer Vektordatenbank speichern können. Sie können aus den von Unity Catalog verwalteten Delta-Tabellen automatisch aktualisierte Vektorsuchindizes erstellen und diese über eine einfache API abfragen, um die ähnlichsten Vektoren zu finden.

Um dieses Feature in LangChain zu verwenden, erstellen Sie eine DatabricksVectorSearch Instanz:

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

Weitere Details finden Sie in der DatabricksVectorSearch Dokumentation.

Verwenden der Unity-Katalogfunktion als Tools

Hinweis

Die Integration der Unity-Katalogfunktion befindet sich im langchain-community Paket. Sie müssen es mit %pip install langchain-community installieren, um auf seine Funktionalität zuzugreifen. Diese Integration wird in einer bevorstehenden Version zum databricks-langchain Paket migriert.

Sie können SQL- oder Python-Funktionen im Unity Catalog als Tools für Ihren LangChain-Agent verfügbar machen. Vollständige Anleitungen zum Erstellen von Unity-Katalogfunktionen und deren Verwendung in LangChain finden Sie in der Dokumentation zum Databricks UC Toolkit.

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

Mit dem Databricks SQL-Agent können alle Azure Databricks-Benutzer mit einem angegebenen Schema im Unity-Katalog interagieren und Einblicke 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
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?")

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