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 :

  • 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.
  • Enveloppez votre modèle servi par Azure Databricks en tant que modèle de langage étendu (LLM) dans LangChain.

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.

LangChain est disponible en tant que version expérimentale de MLflow qui permet aux clients de LangChain de tirer parti des outils robustes et des capacités de suivi des expériences de MLflow directement à partir de l'environnement Azure Databricks. Voir la documentation MLflow de la version LangChain.

Spécifications

  • Databricks Runtime 13,3 ML et supérieur.
  • Databricks recommande à pip d'installer la dernière version de LangChain pour garantir que vous disposez des mises à jour les plus récentes.
    • %pip install --upgrade langchain

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

Le langage SQL Agent Databricks est une variante de l'agent de Microsoft Azure SQL Database standard fourni par LangChain et est considéré comme une variante plus puissante de l'agent Spark DataFrame.

Avec SQL Agent Databricks, tous les utilisateurs Azure Databricks peuvent interagir avec un schéma spécifié dans Unity Catalog et générer des informations 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

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

Remarque

Les modèles OpenAI nécessitent un abonnement payant, si l’abonnement gratuit atteint une limite de taux.

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

Envelopper les modèles servis par Azure Databricks en tant que LLM

Si vous avez créé un LLM sur Azure Databricks, vous pouvez l'utiliser directement dans LangChain à la place d'OpenAI, HuggingFace ou de tout autre fournisseur LLM.

Cette intégration prend en charge deux types de points de terminaison :

Inclure un point de terminaison de service de modèle dans un wrapper

Vous pouvez encapsuler les points de terminaison Azure Databricks en tant que LLM dans LangChain. Pour envelopper un point de terminaison de service de modèle en tant que LLM dans LangChain, vous avez besoin :

  • Un LLM enregistré déployé sur un point de terminaison de service de modèle Azure Databricks.
  • Autorisation PEUT DEMANDER sur le point de terminaison.

Souvent, les modèles nécessitent ou recommandent des paramètres importants, comme temperature ou max_tokens. L'exemple suivant montre comment saisir ces paramètres avec un modèle déployé nommé falcon-7b-instruct. Des détails supplémentaires peuvent être trouvés dans la documentation Encapsuler un point de terminaison de service 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?")

Encapsuler une application proxy de pilote de cluster

Pour envelopper une application proxy de pilote de cluster en tant que LLM dans LangChain, vous avez besoin de :

  • Un LLM chargé sur un cluster interactif Azure Databricks en mode « utilisateur unique » ou « pas d'isolation partagée ».
  • Un serveur HTTP local exécuté sur le nœud du pilote pour servir le modèle à l'emplacement « / » en utilisant HTTP POST avec entrée/sortie JSON.
  • Une application utilise un numéro de port compris entre [3000, 8000] et écoute l'adresse IP du pilote ou simplement 0.0.0.0 au lieu de localhost seulement.
  • L’autorisation PEUT ATTACHER À sur le cluster.

Consultez la documentation LangChain pour Encapsuler une application proxy de pilote de cluster pour un exemple.