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:

  • Use modelos fornecidos pelo Databricks como LLMs ou incorporações em seu aplicativo LangChain.

  • Integre o Mosaic AI Vector Search para armazenamento e recuperação de vetores.

  • Gerencie e acompanhe seus modelos e desempenho do LangChain em experimentos do MLflow.

  • Rastreie as fases de desenvolvimento e produção do seu aplicativo LangChain com o MLflow Tracing.

  • 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.

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.

Use o MLflow para o desenvolvimento do LangChain

O LangChain está disponível como um tipo de MLflow, que permite que os usuários usem as ferramentas robustas do MLflow para acompanhamento de experimentos e observabilidade em ambientes de desenvolvimento e produção diretamente no Databricks. Para obter mais detalhes e diretrizes sobre como usar o MLflow com o LangChain, confira a documentação do MLflow de variante LangChain.

O MLflow no Databricks oferece recursos adicionais que o diferenciam da versão de software livre e aprimoram sua experiência de desenvolvimento com as seguintes capacidades:

  • Servidor de Acompanhamento do MLflow totalmente gerenciado: disponível instantaneamente em seu workspace do Databricks, para você começar a acompanhar experimentos sem atrasos na configuração.

  • Integração perfeita com o notebooks do Databricks: os experimentos são vinculados automaticamente aos notebooks, simplificando o processo de acompanhamento.

  • Rastreamento de MLflow no Databricks: fornece monitoramento no nível de produção com integração de tabela de inferência, garantindo observabilidade de ponta a ponta do desenvolvimento à produção.

  • Gerenciamento do ciclo de vida do modelo com Unity Catalog: controle centralizado sobre acesso, auditoria, linhagem e descoberta de modelos em seus workspaces.

  • Avaliação integrada do Mosaic AI Agent: avalie a qualidade, o custo e a latência de seus aplicativos LangChain.

Com esses recursos, você otimiza o desenvolvimento, o monitoramento e o gerenciamento dos projetos baseados em LangChain, tornando a Databricks a melhor opção para iniciativas de IA baseadas em MLflow.

Requisitos

  • Databricks Runtime 13.3 ML ou superior.
  • Instale o pacote de integração do LangChain Databricks e o conector SQL do Databricks. O Databricks recomenda a instalação da versão mais recente do LangChain para que você tenha as últimas atualizações.
    • %pip install --upgrade databricks-langchain langchain-community langchain databricks-sql-connector

Usar modelos veiculados pelo Databricks como LLMs ou inserções

Se você tem um LLM ou modelo de inserções fornecido pelo Atendimento de Modelo do Databricks, use-o diretamente no LangChain, no lugar do OpenAI, do HuggingFace ou de qualquer outro provedor de LLM.

Para usar um ponto de extremidade de serviço de modelo como um LLM ou modelo de incorporações no LangChain, você precisa de:

  • Um LLM registrado ou modelo de incorporações implantado em um modelo do Azure Databricks que atende ao ponto de extremidade.
    • Como alternativa, você pode usar os modelos disponibilizados pelas APIs do Foundation Model, uma lista selecionada de modelos de software livre implantados em seu workspace e prontos para uso.
  • Permissão CAN QUERY para o ponto de extremidade.

Modelos de chat

O exemplo a seguir mostra como usar o modelo Llama 3.1 70B Instruct do Meta como um componente LLM no LangChain usando a API Foundation Models.


from databricks_langchain import ChatDatabricks

chat_model = ChatDatabricks(
    endpoint="databricks-meta-llama-3-1-70b-instruct"
    temperature=0.1,
    max_tokens=250,
)
chat_model.invoke("How to use Databricks?")

É possível substituir o endpoint pelo modelo personalizado implantado no ponto de extremidade de serviço. Veja outros exemplos, como streaming, invocação assíncrona e chamada de função, na documentação do LangChain.

Incorporações

O exemplo a seguir mostra como usar o modelo de inserção databricks-bge-large-en como um componente de inserção no LangChain usando a API de Modelos de Base.


from databricks_langchain import DatabricksEmbeddings

embeddings = DatabricksEmbeddings(endpoint="databricks-bge-large-en")

Encontre mais detalhes na documentação do LangChain

LLMs

Aviso

Os modelos de conclusão são considerados um recurso herdado. A maioria dos modelos modernos utiliza a interface de conclusão de conversa e deve ser usada com o componente ChatModel.

O exemplo a seguir mostra como usar a API do modelo de conclusão como um componente LLM no LangChain.

from langchain_community.llms import Databricks

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

Usar o Mosaic AI Vector Search como armazenamento de vetores

O Mosaic AI Vector Search é um mecanismo de pesquisa de similaridade sem servidor no Databricks que permite armazenar uma representação de vetor de seus dados, incluindo metadados, em um banco de dados de vetor. Você pode criar índices de busca em vetores de atualização automática de tabelas Delta gerenciadas pelo Catálogo do Unity e consultá-los com uma API simples para retornar os vetores mais semelhantes.

Para usar esse recurso no LangChain, crie uma instância DatabricksVectorSearch:

from databricks_langchain import DatabricksVectorSearch

vector_store = DatabricksVectorSearch(index_name="<YOUR_VECTOR_SEARCH_INDEX_NAME>")
retriever = vector_store.as_retriever(search_kwargs={"k": 5})
retriever.invoke("What is Databricks?")

Confira a documentação do DatabricksVectorSearch para obter mais detalhes.

Use a função do Catálogo do Unity como ferramentas

Observação

A integração da função de Catálogo do Unity está no pacote langchain-community. Você deve instalá-lo usando %pip install langchain-community para acessar sua funcionalidade. Essa integração migrará para o pacote databricks-langchain em uma versão futura.

Você pode expor funções SQL ou Python no Catálogo do Unity como ferramentas para o agente LangChain. Para obter diretrizes completas sobre como criar funções do Catálogo do Unity e usá-las no LangChain, confira a documentação do Databricks UC Toolkit.

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

Com o SQL Agent do Databricks, qualquer usuário do Azure Databricks pode 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
from databricks_langchain import ChatDatabricks

# Note: Databricks SQL connections eventually time out. We set pool_pre_ping: True to
# try to ensure connection health is checked before a SQL query is made
db = SQLDatabase.from_databricks(catalog="samples", schema="nyctaxi", engine_args={"pool_pre_ping": True})
llm = ChatDatabricks(
    endpoint="databricks-meta-llama-3-1-70b-instruct",
    temperature=0.1,
    max_tokens=250,
)

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?")

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