LangChain no Azure Databricks para desenvolvimento LLM

Importante

Esses são recursos experimentais e as definições da API podem mudar.

Este artigo descreve as integrações LangChain que facilitam o desenvolvimento e a implantação de modelos de linguagem grandes (LLMs) no Azure Databricks.

Com estas integrações LangChain você pode:

  • Carregue dados diretamente de um DataFrame PySpark com o carregador PySpark DataFrame.
  • Consulte interativamente seus dados usando linguagem natural com o Spark DataFrame Agent ou o Databricks SQL Agent.
  • Envolva seu modelo servido do Azure Databricks como um modelo de linguagem grande (LLM) em LangChain.

O que é LangChain?

LangChain é uma estrutura de software projetada para ajudar a criar aplicativos que utilizam grandes modelos de linguagem (LLMs). A força da LangChain reside na sua ampla gama de integrações e capacidades. Ele inclui wrappers de API, subsistemas de web scraping, ferramentas de análise de código, ferramentas de resumo de documentos e muito mais. Ele também suporta grandes modelos de linguagem de OpenAI, Anthropic, HuggingFace, etc. fora da caixa, juntamente com várias fontes de dados e tipos.

O LangChain está disponível como um sabor experimental de MLflow que permite que os clientes do LangChain aproveitem as ferramentas robustas e os recursos de rastreamento de experimentos do MLflow diretamente do ambiente do Azure Databricks. Consulte a documentação do LangChain flavor MLflow.

Requisitos

  • Databricks Runtime 13.3 ML e superior.
  • Databricks recomenda pip instalar a versão mais recente do LangChain para garantir que você tenha as atualizações mais recentes.
    • %pip install --upgrade langchain

Carregue dados com o carregador DataFrame PySpark

O carregador PySpark DataFrame em LangChain simplifica o carregamento de dados de um DataFrame PySpark com um único método.

from langchain.document_loaders import PySparkDataFrameLoader

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

O bloco de anotações a seguir mostra um exemplo em que o carregador PySpark DataFrame é usado para criar um chatbot baseado em recuperação que é registrado com MLflow, o que, por sua vez, permite que o modelo seja interpretado como uma função Python genérica para inferência com mlflow.pyfunc.load_model().

Carregador DataFrame PySpark e MLFlow no notebook Langchain

Obter o bloco de notas

Agente Spark DataFrame

O Spark DataFrame Agent em LangChain permite a interação com um Spark DataFrame, otimizado para responder a perguntas. A documentação do Spark DataFrame Agent da LangChain fornece um exemplo detalhado de como criar e usar o Spark DataFrame Agent com um 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)
...

O bloco de anotações a seguir demonstra como criar e usar o Spark DataFrame Agent para ajudá-lo a obter informações sobre seus dados.

Use LangChain para interagir com um bloco de anotações Spark DataFrame

Obter o bloco de notas

Agente SQL Databricks

O Databricks SQL Agent é uma variante do SQL Database Agent padrão que LangChain fornece e é considerado uma variante mais poderosa do Spark DataFrame Agent.

Com o Databricks SQL Agent, qualquer usuário do Azure Databricks pode interagir com um esquema especificado no Unity Catalog e gerar insights sobre seus dados.

Importante

O Databricks SQL Agent só pode consultar tabelas e não cria tabelas.

No exemplo a seguir, a instância do banco de dados é criada dentro do SQLDatabase.from_databricks(catalog="...", schema="...") comando e o agente e as ferramentas necessárias são criados por SQLDatabaseToolkit(db=db, llm=llm) e 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

Os modelos OpenAI exigem uma assinatura paga, se a assinatura gratuita atingir um limite de taxa.

O bloco de anotações a seguir demonstra como criar e usar o Databricks SQL Agent para ajudá-lo a entender melhor os dados em seu banco de dados.

Use LangChain para interagir com um bloco de anotações de banco de dados SQL

Obter o bloco de notas

Wrap Azure Databricks serviu modelos como LLMs

Se você tiver um LLM criado no Azure Databricks, poderá usá-lo diretamente no LangChain no lugar de OpenAI, HuggingFace ou qualquer outro provedor de LLM.

Essa integração suporta dois tipos de endpoint:

  • Modelo servindo endpoints recomendados para produção e desenvolvimento.
  • Aplicativo proxy de driver de cluster, recomendado para desenvolvimento interativo.

Envolver um modelo de ponto de extremidade de serviço

Você pode encapsular pontos de extremidade do Azure Databricks como LLMs em LangChain. Para envolver um modelo que serve ponto final como um LLM em LangChain, você precisa:

  • Um LLM registrado implantado em um modelo de ponto de extremidade do Azure Databricks.
  • CAN QUERY permissão para o ponto de extremidade.

Muitas vezes, os modelos requerem ou recomendam parâmetros importantes, como temperature ou max_tokens. O exemplo a seguir mostra como inserir esses parâmetros com um modelo implantado chamado falcon-7b-instruct. Detalhes adicionais podem ser encontrados na documentação Wrapping a serving endpoint 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?")

Encapsular um aplicativo proxy de driver de cluster

Para encapsular um aplicativo proxy de driver de cluster como um LLM em LangChain, você precisa:

  • Um LLM carregado em um cluster interativo do Azure Databricks no modo "usuário único" ou "sem isolamento compartilhado".
  • Um servidor HTTP local em execução no nó do driver para servir o modelo em "/" usando HTTP POST com entrada/saída JSON.
  • Uma aplicação utiliza um número de porta entre [3000, 8000] e ouve o endereço IP do controlador ou simplesmente 0.0.0.0 em vez de localhost apenas.
  • A permissão CAN ATTACH TO para o cluster.

Consulte a documentação do LangChain para Encapsular um aplicativo proxy de driver de cluster para obter um exemplo.