Partager via


LangChain sur Azure Databricks pour le développement LLM

Important

Il s’agit de fonctionnalités expérimentales et les définitions de l’API peuvent changer.

Cet article décrit les intégrations LangChain qui facilitent le développement et le déploiement de grands modèles de langage (LLM) sur Azure Databricks.

Avec ces intégrations LangChain, vous pouvez :

  • Utilisez des modèles databricks servis en tant que LLM ou incorporations dans votre application LangChain.

  • Intégrez Mosaic AI de recherche vectorielle pour le stockage et la récupération de vecteurs.

  • Gérez et suivez vos modèles LangChain et d’analyse des performances dans les expériences MLflow.

  • Tracez les phases de développement et de production de votre application LangChain à l’aide de MLflow MLflow Tracing.

  • Chargez en toute transparence des données à partir d’un PySpark DataFrame avec le chargeur PySpark DataFrame.

  • Interrogez vos données de manière interactive en utilisant le langage naturel avec l’agent Spark DataFrame ou SQL Agent Databricks.

Qu’est-ce que LangChain ?

LangChain est un framework logiciel conçu pour aider à créer des applications qui utilisent de grands modèles de langage (LLM). La force de LangChain réside dans son large éventail d’intégrations et de capacités. Il comprend des wrappers d’API, des sous-systèmes de web scraping, des outils d’analyse de code, des outils de synthèse de documents, etc. Il prend également en charge de grands modèles de langage d’OpenAI, Anthropic, HuggingFace, etc., ainsi que diverses sources et types de données.

Tirer profit de MLflow pour le développement LangChain

LangChain est disponible en tant que saveur MLflow, qui permet aux utilisateurs d’exploiter les outils robustes de MLflow pour le suivi des expériences et l’observabilité dans les environnements de production et de développement directement dans Databricks. Pour plus détails et d’aide sur l’utilisation de MLflow avec LangChain, consultez la documentation sur la saveur de MLflow LangChain.

MLflow sur Databricks offre des caractéristiques supplémentaires qui la distinguent de la version open source, améliorant votre expérience de développement avec les capacités suivantes :

  • Serveur de suivi MLflow complètement managé : disponible instantanément dans votre espace de travail Databricks, ce qui vous permet de débuter le suivi des expériences sans retard d’installation.

  • Intégration transparente avec databricks Notebooks : les expériences sont automatiquement liées aux notebooks, ce qui simplifie le processus de suivi.

  • MLflow Tracing sur Databricks:  fournit une surveillance au niveau de la production avec l’intégration de la table d’inférence, garantissant ainsi l’observabilité de bout en bout du développement à la production.

  • Gestion de cycle de vie des modèles avec le catalogue Unity : contrôle centralisé sur l’accès, l’audit, la traçabilité et la découverte de modèles sur vos espaces de travail.

  • Évaluation de l’agent Mosaic AI intégrée : évaluez la qualité, le coût et la latence de vos applications LangChain.

En tirant profit de ces caractéristiques, vous pouvez optimiser le développement, la supervision et la gestion de vos projets LangChain, ce qui fait de Databricks un premier choix pour les initiatives IA basées sur MLflow.

Spécifications

  • Databricks Runtime 13.3 ML ou version ultérieure.
  • Installez le package d’intégration LangChain Databricks et le connecteur SQL Databricks. Databricks recommande également à pip d’installer la dernière version de LangChain pour garantir que vous disposez des mises à jour les plus récentes.
    • %pip install --upgrade databricks-langchain langchain-community langchain databricks-sql-connector

Utiliser des modèles Databricks servis en tant que LLM ou incorporations

Si vous avez un modèle LLM ou d’incorporation servi par Databricks Model Serving, vous pouvez l’utiliser directement dans LangChain à la place d’OpenAI, HuggingFace ou de tout autre fournisseur LLM.

Pour utiliser un point de terminaison de service de modèle en tant que LLM ou un modèle d’incorporation dans LangChain, vous avez besoin :

  • Un LLM enregistré déployé ou d’un modèle d’incorporation sur un point de terminaison de service de modèle Azure Databricks.
    • Vous pouvez également utiliser les modèles mis à disposition par les API Foundation Model, une liste organisée de modèles open source déployée dans votre espace de travail et prête à être utilisée immédiatement.
  • Autorisation PEUT DEMANDER sur le point de terminaison.

Modèles de conversation

L’exemple suivant présente comment utiliser le modèle Llama 3.1 70B Instruct de Meta en tant que composant LLM dans LangChain à l’aide de Foundation Models API.


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

Il est possible de remplacer le point de terminaison par votre modèle personnalisé déployé sur le point de terminaison de service. Vous trouverez d’autres exemples tels que la diffusion en continu, l’invocation asynchrone et l’appel de fonction dans la documentation LangChain.

Incorporations

L’exemple suivant montre comment utiliser le modèle d’incorporation databricks-bge-large-en en tant que composant d’incorporation dans LangChain à l’aide de Foundation Models API.


from databricks_langchain import DatabricksEmbeddings

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

Vous trouverez plus de détails dans la documentation LangChain

Les LLM

Avertissement

Les modèles d’achèvement sont considérés comme une caractéristique héritée. La plupart des modèles modernes utilisent l’interface terminé de conversation et doivent être utilisés avec le composant ChatModel à la place.

L’exemple suivant montre comment utiliser votre API de modèle terminé en tant que composant LLM dans 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?")

Utilisez la recherche vectorielle de Mosaic AI comme store de vecteurs

La recherche vectorielle Mosaic AI est un moteur de recherche de similarité serverless sur Databricks, vous permettant de stocker des représentations vectorielles de vos données, y compris les métadonnées, dans une base de données vectorielle. Vous pouvez créer des index de recherche vectorielle à mise à jour automatique à partir de tables Delta managées par Unity Catalog, et les interroger via une API simple pour récupérer les vecteurs les plus similaires.

Pour utiliser cette caractéristique dans LangChain, créez une instance 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?")

Reportez-vous à la section Documentation sur DatabricksVectorSearch pour plus de détails.

Utiliser la fonction catalogue Unity en tant qu’outils

Remarque

L’intégration de la fonction de catalogue Unity se trouve dans le package langchain-community. Vous devez l’installer en utilisant %pip install langchain-community pour accéder à ses fonctionnalités. Cette intégration migrera vers le package databricks-langchain dans une prochaine version.

Il est possible d’exposer des fonctions SQL ou Python dans le catalogue Unity en tant qu’outils pour votre agent LangChain. Pour obtenir une l’aide complète sur la création de fonctions de catalogue Unity et leur utilisation dans LangChain, consultez la documentation sur le kit de ressources databricks UC.

Charger des données avec le chargeur PySpark DataFrame

Le chargeur PySpark DataFrame dans LangChain simplifie le chargement des données à partir d’un PySpark DataFrame avec une seule méthode.

from langchain.document_loaders import PySparkDataFrameLoader

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

Le notebook suivant présente un exemple dans lequel le chargeur PySpark DataFrame est utilisé pour créer un chatbot basé sur la récupération qui est enregistré avec MLflow, ce qui permet à son tour d’interpréter le modèle comme une fonction Python générique pour l’inférence avec mlflow.pyfunc.load_model().

Chargeur PySpark DataFrame et MLflow dans le notebook Langchain

Obtenir le notebook

Agent Spark DataFrame

L’agent Spark DataFrame dans LangChain permet une interaction avec un Spark DataFrame, optimisé pour la réponse aux questions. La documentation de l’agent Spark DataFrame de LangChain fournit un exemple détaillé de la façon de créer et d’utiliser l’agent Spark DataFrame avec 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)
...

Le notebook suivant montre comment créer et utiliser l’agent Spark DataFrame pour vous aider à obtenir des informations sur vos données.

Utilisez LangChain pour interagir avec un notebook Spark DataFrame

Obtenir le notebook

SQL Agent Databricks

Avec Databricks SQL Agent , tous les utilisateurs Azure Databricks peuvent interagir avec un schéma spécifié dans le catalogue Unity et générer des insights sur leurs données.

Important

SQL Agent Databricks peut uniquement interroger des tables et ne crée pas de tables.

Dans l'exemple suivant, l'instance de base de données est créée dans la commande SQLDatabase.from_databricks(catalog="...", schema="...") et l'agent et les outils requis sont créés respectivement par SQLDatabaseToolkit(db=db, llm=llm) et 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?")

Le notebook suivant montre comment créer et utiliser SQL Agent Databricks pour vous aider à mieux comprendre les données de votre base de données.

Utilisez LangChain pour interagir avec un bloc-notes de base de données SQL

Obtenir le notebook