LangChain en Azure Databricks para el desarrollo de LLM

Importante

Estas son características experimentales y las definiciones de API pueden cambiar.

En este artículo se describen las integraciones de LangChain que facilitan el desarrollo e implementación de modelos de lenguaje grande (LLM) en Azure Databricks.

Con estas integraciones de LangChain puede hacer lo siguiente:

  • Cargue sin problemas los datos de un DataFrame de PySpark con el cargador de DataFrame de PySpark.
  • Consulte de forma interactiva los datos mediante lenguaje natural con el Agente de DataFrame de Spark o el Agente SQL de Databricks.
  • Ajuste el modelo servido de Azure Databricks como un modelo de lenguaje grande (LLM) en LangChain.

¿Qué es LangChain?

LangChain es un marco de software diseñado para ayudar a crear aplicaciones que utilicen modelos le lenguaje grandes (LLM). La fuerza de LangChain se encuentra en su amplia gama de integraciones y funcionalidades. Incluye contenedores de API, subsistemas de extracción web, herramientas de análisis de código, herramientas de resumen de documentos, etc. También admite modelos de lenguaje de gran tamaño de OpenAI, Anthropic, HuggingFace, etc. listos para usar junto con diversos orígenes de datos y tipos.

LangChain está disponible como un sabor experimental de MLflow que permite a los clientes de LangChain aprovechar las sólidas herramientas y funcionalidades de seguimiento de experimentos de MLflow directamente desde el entorno de Azure Databricks. Consulte la documentación de MLflow de tipo LangChain.

Requisitos

  • Databricks Runtime 13.3 ML y versiones posteriores.
  • Databricks recomienda instalar la versión más reciente de LangChain mediante pip para asegurarse de que tiene las actualizaciones más recientes.
    • %pip install --upgrade langchain

Carga de datos con el cargador de DataFrame de PySpark

El cargador de DataFrame de PySpark en LangChain simplifica la carga de datos desde un DataFrame de PySpark con un único método.

from langchain.document_loaders import PySparkDataFrameLoader

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

En el cuaderno siguiente se muestra un ejemplo en el que se usa el cargador de DataFrame de PySpark para crear un bot de chat basado en recuperación registrado con MLflow, que a su vez permite que el modelo se interprete como una función genérica de Python para la inferencia con mlflow.pyfunc.load_model().

Cargador de DataFrame de PySpark y MLFlow en el cuaderno de Langchain

Obtener el cuaderno

Agente de DataFrame de Spark

El agente de DataFrame de Spark en LangChain permite la interacción con un DataFrame de Spark, optimizado para la respuesta a preguntas. La documentación del agente DataFrame de Spark de LangChain proporciona un ejemplo detallado de cómo crear y usar el agente de DataFrame de 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)
...

En el cuaderno siguiente se muestra cómo crear y usar el agente de DataFrame de Spark para ayudarle a obtener información sobre los datos.

Uso de LangChain para interactuar con un cuaderno de DataFrame de Spark

Obtener el cuaderno

Agente SQL de Databricks

El Agente SQL de Databricks es una variante del agente de SQL Database estándar que proporciona LangChain y se considera una variante más eficaz del agente de DataFrame de Spark.

Con el Agente SQL de Databricks, los usuarios de Azure Databricks pueden interactuar con un esquema especificado en Unity Catalog y generar información sobre sus datos.

Importante

El Agente SQL de Databricks solo puede consultar tablas, no crearlas.

En el ejemplo siguiente, la instancia de base de datos se crea dentro del comando SQLDatabase.from_databricks(catalog="...", schema="...") y el agente y las herramientas necesarias se crean mediante SQLDatabaseToolkit(db=db, llm=llm) y create_sql_agent(llm=llm, toolkit=toolkit, **kwargs), respectivamente.

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:

Los modelos OpenAI requieren una suscripción de pago, si la suscripción gratuita alcanza un límite de velocidad.

En el cuaderno siguiente se muestra cómo crear y usar el Agente SQL de Databricks para ayudarle a comprender mejor los datos de la base de datos.

Uso de LangChain para interactuar con un cuaderno de base de datos SQL

Obtener el cuaderno

Ajuste de los modelos servidos de Azure Databricks como LLM

Si tiene un LLM que creó en Azure Databricks, puede usarlo directamente en LangChain en lugar de OpenAI, HuggingFace o cualquier otro proveedor de LLM.

Esta integración admite dos tipos de punto de conexión:

Encapsular un punto de conexión de servicio de modelos

Puede encapsular los puntos de conexión de Azure Databricks como LLM en LangChain. Para encapsular un punto de conexión de servicio de modelo como LLM en LangChain, necesita:

  • Un LLM registrado implementado en un modelo de Azure Databricks que atienda al punto de conexión.
  • Permiso CAN QUERY para el punto de conexión.

A menudo, los modelos requieren o recomiendan parámetros importantes, como temperature o max_tokens. En el siguiente ejemplo se muestra cómo introducir esos parámetros con un modelo implementado denominado falcon-7b-instruct. Puede encontrar más detalles en la documentación sobre el Encapsulado de un punto de conexión de servicio de 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?")

Encapsulado de una aplicación de proxy de controlador de clúster

Para encapsular una aplicación proxy de controlador de clúster como LLM en LangChain, necesita:

  • Un LLM cargado en un clúster interactivo de Azure Databricks en modo "usuario único" o "sin aislamiento compartido".
  • Un servidor HTTP local que se ejecuta en el nodo del controlador para atender el modelo en "/" mediante HTTP POST con entrada/salida JSON.
  • Una aplicación usa un número de puerto entre [3000, 8000] y escucha la dirección IP del controlador o simplemente 0.0.0.0 en lugar de solo localhost.
  • Permiso CAN ATTACH TO para un clúster.

Consulte la documentación de LangChain para Encapsular una aplicación de proxy de controlador de clúster para obtener un ejemplo.