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:
Use modelos servidos por Databricks como LLM o inserciones en la aplicación LangChain.
Integre Mosaic AI Vector Search para el almacenamiento y recuperación de vectores.
Administre y realice un seguimiento de los modelos y el rendimiento de LangChain en experimentos de MLflow.
Realice un seguimiento de las fases de desarrollo y producción de la aplicación LangChain con el seguimiento de MLflow.
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.
¿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.
Aprovechamiento de MLflow para el desarrollo de LangChain
LangChain está disponible como un tipo de MLflow, que permite a los usuarios aprovechar las herramientas sólidas de MLflow para el seguimiento de experimentos y la observabilidad en entornos de desarrollo y producción directamente dentro de Databricks. Para obtener más información e instrucciones sobre el uso de MLflow con LangChain, consulte la documentación sobre el tipo de MLflow LangChain.
MLflow en Databricks ofrece características adicionales que lo distinguen de la versión de código abierto, lo que mejora la experiencia de desarrollo con las siguientes funcionalidades:
Servidor de seguimiento de MLflow totalmente administrado: disponible al instante en el área de trabajo de Databricks, lo que le permite iniciar el seguimiento de experimentos sin retrasos en la instalación.
Integración perfecta con cuadernos de Databricks: los experimentos se vinculan automáticamente a cuadernos, lo que simplifica el proceso de seguimiento.
Seguimiento de MLflow en Databricks: proporciona supervisión de nivel de producción con integración de tablas de inferencia, lo que garantiza la observabilidad de un extremo a otro desde el desarrollo hasta la producción.
Administración del ciclo de vida del modelo con el catálogo de Unity: control centralizado sobre el acceso, la auditoría, el linaje y la detección de modelos en las áreas de trabajo.
Evaluación integrada del agente de IA de Mosaic: evalúe la calidad, el coste y la latencia de las aplicaciones LangChain.
Al aprovechar estas características, puede optimizar el desarrollo, la supervisión y la administración de los proyectos basados en LangChain, lo que convierte a Databricks en una elección premier para las iniciativas de inteligencia artificial con tecnología de MLflow.
Requisitos
- Databricks Runtime 13.3 ML o superior.
- Instale el paquete de integración LangChain Databricks y el conector sql de Databricks. Databricks también 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-databricks langchain-community langchain databricks-sql-connector
Uso de modelos servidos de Databricks como LLM o inserciones
Si tiene un LLM o un modelo de inserciones servido mediante el Servicio de modelos de Databricks, puede usarlo directamente en LangChain en lugar de OpenAI, HuggingFace o cualquier otro proveedor de LLM.
Para usar un punto de conexión de servicio de modelo como modelo de inserción o LLM en LangChain, necesita:
- Un modelo de inserción o LLM registrado implementado en un modelo de Azure Databricks que atienda al punto de conexión.
- Como alternativa, puede usar los modelos disponibles por las API de Foundation Model, una lista seleccionada de modelos de código abierto implementados en el área de trabajo y listos para su uso inmediato.
- Permiso CAN QUERY para el punto de conexión.
Modelos de chat
En el ejemplo siguiente se muestra cómo usar el modelo Llama 3.1 70B Instruct de Meta como un componente LLM en LangChain mediante la API de Foundation Models.
from langchain_databricks 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?")
Puede reemplazar el punto de conexión al modelo personalizado implementado en el punto de conexión de servicio. Puede encontrar ejemplos adicionales, como streaming, invocación asincrónica y llamada a funciones en la documentación de LangChain.
Inserciones
En el ejemplo siguiente se muestra cómo usar el modelo de inserción databricks-bge-large-en
como componente de inserción en LangChain mediante la API de Foundation Models.
from langchain_databricks import DatabricksEmbeddings
embeddings = DatabricksEmbeddings(endpoint="databricks-bge-large-en")
Puede encontrar más detalles en la documentación de LangChain
LLM
Advertencia
Los modelos de finalización se consideran una característica heredada. La mayoría de los modelos modernos usan la interfaz de finalización de chat y deben usarse con el componente ChatModel en su lugar.
En el ejemplo siguiente se muestra cómo usar la API del modelo de finalización como un componente LLM en 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?")
Uso del Vector de búsqueda de Mosaic AI como almacén de vectores
El Vector de búsqueda de Mosaic AI es un motor de búsqueda de similitud sin servidor en Databricks que permite almacenar representaciones vectoriales de los datos, incluidos los metadatos, en una base de datos vectorial. Puede crear índices de vectores de búsqueda de actualización automática a partir de tablas delta administradas por Unity Catalog y consultarlas con una API sencilla para recuperar los vectores más similares.
Para usar esta característica en LangChain, cree una instancia DatabricksVectorSearch
:
from langchain_databricks 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?")
Consulte la documentación de DatabricksVectorSearch para obtener información adicional.
Uso de la función catálogo de Unity como herramientas
Nota:
La integración de la función de catálogo de Unity está en el paquete langchain-community
. Debe instalarlo mediante %pip install langchain-community
para acceder a su funcionalidad. Esta integración se migrará al paquete langchain-databricks
en una próxima versión.
Puede exponer funciones de SQL o Python en el catálogo de Unity como herramientas para el agente de LangChain. Para obtener instrucciones completas sobre cómo crear funciones de Catálogo de Unity y usarlas en LangChain, consulte la documentación de Databricks UC Toolkit.
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
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
Agente SQL de Databricks
Con el Agente SQL de Databricks, los usuarios de Azure Databricks pueden interactuar con un esquema especificado en el Catálogo de Unity 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
from langchain_databricks 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?")
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.