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 suporta o uso do modelo interativo com um aplicativo proxy de driver clusters , que é recomendado para desenvolvimento interativo.

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.