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.
- 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
Databricks SQL Agent
O Databricks SQL Agent é uma variante do agente de Banco de Dados SQL padrão que o LangChain fornece.
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
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:
- Pontos de extremidade do serviço de modelo para produção e desenvolvimento.
- Aplicativo proxy de driver de cluster, recomendado para desenvolvimento interativo.
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.