Compartilhar via


LangChain no Azure Databricks para desenvolvimento de LLM

Importante

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

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

Com essas integrações do LangChain, você pode:

  • Carregar dados diretamente de um DataFrame do PySpark com o carregador de DataFrame do PySpark.
  • Consulte interativamente seus dados usando uma linguagem natural com o Spark DataFrame Agent ou o Databricks SQL Agent.
  • Encapsular o modelo do Azure Databricks como um modelo de linguagem grande (LLM) no LangChain.

O que é o LangChain?

O LangChain é uma estrutura de software projetada para ajudar a criar aplicativos que utilizam modelos de linguagem grande (LLMs). A força de LangChain está em sua ampla gama de integrações e funcionalidades. Ele inclui wrappers de API, subsistemas de extração da Web, ferramentas de análise de código, ferramentas de resumo de documentos e muito mais. Ele também dá suporte a modelos de linguagem grandes do OpenAI, Anthropic, HuggingFace e etc. prontos para uso, juntamente com várias fontes de dados e tipos.

O LangChain está disponível como uma variante experimental do MLflow que permite que os clientes do LangChain aproveitem as ferramentas robustas e os recursos de acompanhamento de experimentos do MLflow diretamente do ambiente do Azure Databricks. Confira a documentação do MLflow de variante LangChain.

Requisitos

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

Carregar dados com o carregador de DataFrame do PySpark

O carregador PySpark DataFrame no LangChain simplifica o carregamento de dados de um DataFrame do 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 notebook a seguir mostra um exemplo em que o carregador de DataFrame do PySpark é usado para criar um chatbot baseado em recuperação que é registrado com o MLflow, que, por sua vez, permite que o modelo seja interpretado como uma função genérica do Python para inferência com mlflow.pyfunc.load_model().

Carregador de DataFrame do PySpark e MLflow no notebook Langchain

Obter notebook

Spark DataFrame Agent

O Spark DataFrame Agent no LangChain permite a interação com um DataFrame do Spark, otimizado para respostas a perguntas. A documentação do Spark DataFrame Agent do LangChain fornece um exemplo detalhado de como criar e usar o Agente de DataFrame do Spark 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 notebook a seguir demonstra como criar e usar o Spark DataFrame Agent para ajudá-lo a obter insights sobre seus dados.

Usar o LangChain para interagir com um notebook DataFrame do Spark

Obter notebook

Databricks SQL Agent

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

Com o Databricks SQL Agent, todos os usuários do Azure Databricks podem interagir com um esquema especificado no Catálogo do Unity 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 comando SQLDatabase.from_databricks(catalog="...", schema="...") 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?")

Observação

Os modelos de OpenAI exigem uma assinatura paga caso a assinatura gratuita atinja um limite de taxa.

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

Usar o LangChain para interagir com um notebook do banco de dados SQL

Obter notebook

Encapsular modelos fornecidos pelo Azure Databricks como LLMs

Se você tiver um LLM criado no Azure Databricks, use-o diretamente no LangChain, no lugar do OpenAI, do HuggingFace ou de qualquer outro provedor de LLM.

Essa integração dá suporte a dois tipos de pontos de extremidade:

Encapsular um ponto de extremidade de serviço de modelo

Você pode encapsular os pontos de extremidade do Azure Databricks como LLMs no LangChain. Para encapsular um ponto de extremidade de serviço de modelo como um LLM no LangChain, você precisa de:

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

Em geral, os modelos exigem 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 Encapsular um ponto de extremidade de serviço do 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 no LangChain, você precisa de:

  • 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 atender ao modelo em "/" usando HTTP POST com entrada/saída JSON.
  • Um aplicativo usa um número de porta entre [3000 e 8000] e escuta o endereço IP do driver ou apenas 0.0.0.0 em vez de somente localhost.
  • A permissão CAN ATTACH para o cluster.

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