LangChain em 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 implantação de grandes modelos de linguagem (LLMs) em Databricks.

Com essas integrações LangChain você pode:

  • Carregue dados perfeitamente de um PySpark DataFrame com o carregador PySpark DataFrame.

  • query interativamente sua linguagem natural de uso de dados com o Spark DataFrame Agent ou o Databricks SQL Agent.

  • Envolva seu modelo servido pelo Databricks como um modelo de linguagem grande (LLM) no LangChain.

O que é LangChain?

LangChain é uma estrutura de software projetada para ajudar a criar aplicativos que utilizam modelos de linguagem grandes (LLMs). A força da LangChain reside em sua ampla gama de integrações e capacidades. Inclui wrappers de API, subsistemas de raspagem da Web, 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. prontos para uso junto com várias fontes de dados e tipos.

O LangChain está disponível como um tipo experimental de MLflow que permite aos clientes do LangChain aproveitar as ferramentas robustas e os recursos de acompanhamento de experimentos do MLflow diretamente do ambiente Databricks. Consulte a documentação do MLflow do tipo LangChain.

Requisitos

  • Databricks Runtime 13.3 MLe acima.

  • Databricks recomenda pip instalando a versão mais recente do LangChain para garantir que você tenha as atualizações mais recentes.

    • %pip install --upgrade langchain

Carregar dados com o carregador PySpark DataFrame

O carregador PySpark DataFrame em LangChain simplifica o carregamento de dados de um PySpark DataFrame 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 PySpark DataFrame é usado para criar um chatbot baseado em recuperação que registra logs 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 PySpark DataFrame e MLFlow no NotebookLangchain

Abra o bloco de anotações em outra guia

Agente Spark DataFrame

O Spark DataFrame Agent no 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 Notebook a seguir demonstra como criar e usar o agente Spark DataFrame para ajudá-lo a entender seus dados.

Use LangChain para interagir com um NotebookSpark DataFrame

Abra o bloco de anotações em outra guia

Databricks SQL Agent

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

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

Importante

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

No exemplo a seguir, a instância do banco de dados é criada no comando SQLDatabase.from_databricks(catalog="...", schema="...") e o agente e as ferramentas necessárias são criadas 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 OpenAI exigem uma inscrição paga, se a inscrição gratuita atingir 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.

Use LangChain para interagir com um Notebookde banco de dados SQL

Abra o bloco de anotações em outra guia

Wrap Databricks serviu modelos como LLMs

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

Esta integração oferece suporte a dois tipos de endpoint:

  • endpointde serviço de modelo recomendado para produção e desenvolvimento.

  • aplicativo de proxy de driver clusters , recomendado para desenvolvimento interativo.

Envolver um endpoint de veiculação de modelo

Você pode agrupar endpoint do Databricks como LLMs no LangChain. Para envolver um endpoint de modelo funcional como um LLM no LangChain, você precisa:

  • Um LLM registrado implantado em um modelo Databricks servindo endpoint.

  • A permissão CAN QUERY para o site endpoint.

Muitas vezes, 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 denominado falcon-7b-instruct. Detalhes adicionais podem ser encontrados na documentação do LangChain empacotando um endpoint de serviço .

from langchain.llms import Databricks

llm = Databricks(endpoint_name="falcon-7b-instruct", model_kwargs={"temperature": 0.1, "max_tokens": 100})
llm("How are you?")

Envolver um aplicativo de proxy de driver clusters

Para agrupar um aplicativo de proxy de driver clusters como um LLM em LangChain, você precisa:

  • Um LLM carregado em clusters interativos do 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.

  • Um aplicativo usa um número de porta entre [3000, 8000] e escuta o endereço IP do driver ou simplesmente 0.0.0.0 em vez de apenas localhost .

  • A permissão CAN ATTACH TO para os clusters.

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