LangChain no Azure 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 a implantação de modelos de linguagem grandes (LLMs) no Azure Databricks.
Com estas integrações LangChain você pode:
Use modelos servidos por Databricks como LLMs ou incorporações em seu aplicativo LangChain.
Integre o Mosaic AI Vetor Search para armazenamento e recuperação de vetores.
Gerencie e acompanhe seus modelos LangChain e desempenho em experimentos MLflow.
Rastreie as fases de desenvolvimento e produção de seu aplicativo LangChain com MLflow Tracing.
Carregue dados diretamente de um DataFrame PySpark com o carregador PySpark DataFrame.
Consulte interativamente seus dados usando linguagem natural com o Spark DataFrame Agent ou o Databricks SQL Agent.
O que é LangChain?
LangChain é uma estrutura de software projetada para ajudar a criar aplicativos que utilizam grandes modelos de linguagem (LLMs). A força da LangChain reside na sua ampla gama de integrações e capacidades. Ele inclui wrappers de API, subsistemas de web scraping, 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. fora da caixa, juntamente com várias fontes de dados e tipos.
Aproveite o MLflow para o desenvolvimento de LangChain
LangChain está disponível como um sabor MLflow, que permite aos usuários aproveitar as ferramentas robustas do MLflow para rastreamento de experimentos e observabilidade em ambientes de desenvolvimento e produção diretamente no Databricks. Para obter mais detalhes e orientações sobre como usar o MLflow com LangChain, consulte a documentação do sabor MLflow LangChain.
O MLflow no Databricks oferece recursos adicionais que o distinguem da versão de código aberto, aprimorando sua experiência de desenvolvimento com os seguintes recursos:
Servidor de rastreamento MLflow totalmente gerenciado: disponível instantaneamente em seu espaço de trabalho Databricks, permitindo que você comece a rastrear experimentos sem atrasos na configuração.
Integração perfeita com os Notebooks Databricks: os experimentos são automaticamente vinculados aos notebooks, simplificando o processo de rastreamento.
MLflow Tracing on Databricks: Fornece monitoramento no nível de produção com integração de tabelas de inferência, garantindo observabilidade de ponta a ponta desde o desenvolvimento até a produção.
Gerenciamento do ciclo de vida do modelo com o Unity Catalog: controle centralizado sobre acesso, auditoria, linhagem e descoberta de modelos em seus espaços de trabalho.
Avaliação integrada do Mosaic AI Agent: avalie a qualidade, o custo e a latência de seus aplicativos LangChain.
Ao aproveitar esses recursos, você pode otimizar o desenvolvimento, o monitoramento e o gerenciamento de seus projetos baseados em LangChain, tornando o Databricks uma escolha privilegiada para iniciativas de IA alimentadas por MLflow.
Requisitos
- Databricks Runtime 13.3 ML ou superior.
- Instale o pacote de integração LangChain Databricks e o conector Databricks SQL. Databricks também recomenda pip instalar a versão mais recente do LangChain para garantir que você tenha as atualizações mais recentes.
%pip install --upgrade langchain-databricks langchain-community langchain databricks-sql-connector
Use modelos servidos Databricks como LLMs ou incorporações
Se você tiver um modelo LLM ou incorporações servido usando Databricks Model Serving, você pode usá-lo diretamente no LangChain no lugar de OpenAI, HuggingFace ou qualquer outro provedor de LLM.
Para usar um modelo que serve ponto de extremidade como um LLM ou modelo de incorporação em LangChain, você precisa:
- Um LLM registrado ou modelo de incorporação implantado em um modelo de ponto de extremidade do Azure Databricks.
- Como alternativa, você pode usar os modelos disponibilizados pelas APIs do Foundation Model, uma lista selecionada de modelos de código aberto implantados em seu espaço de trabalho e prontos para uso imediato.
- CAN QUERY permissão para o ponto de extremidade.
Modelos de chat
O exemplo a seguir mostra como usar o modelo Llama 3.1 70B Instruct da Meta como um componente LLM em LangChain usando a API Foundation Models.
from langchain_databricks 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?")
Você pode substituir o ponto de extremidade para seu modelo personalizado implantado no ponto de extremidade de serviço. Exemplos adicionais, como streaming, invocação assíncrona e chamada de função podem ser encontrados na documentação do LangChain.
Incorporações
O exemplo a seguir mostra como usar o databricks-bge-large-en
modelo de incorporação como um componente de incorporação em LangChain usando a API Foundation Models.
from langchain_databricks import DatabricksEmbeddings
embeddings = DatabricksEmbeddings(endpoint="databricks-bge-large-en")
Detalhes adicionais podem ser encontrados na documentação do LangChain
LLMs
Aviso
Os modelos de conclusão são considerados um recurso legado. A maioria dos modelos modernos utiliza a interface de conclusão de chat e deve ser usada com o componente ChatModel.
O exemplo a seguir mostra como usar sua API de modelo de conclusão como um componente LLM em 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?")
Use o Mosaic AI Vetor Search como armazenamento vetorial
O Mosaic AI Vetor Search é um mecanismo de pesquisa de semelhança sem servidor no Databricks, permitindo que você armazene representações vetoriais de seus dados, incluindo metadados, em um banco de dados vetorial. Você pode criar índices de pesquisa vetorial de atualização automática a partir de tabelas Delta gerenciadas pelo Unity Catalog e consultá-los por meio de uma API simples para recuperar os vetores mais semelhantes.
Para usar esse recurso no LangChain, crie uma DatabricksVectorSearch
instância:
from langchain_databricks 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?")
Consulte a documentação do DatabricksVectorSearch para obter mais detalhes.
Use a função Unity Catalog como ferramentas
Nota
A integração da langchain-community
função Unity Catalog está no pacote. Você deve instalá-lo usando %pip install langchain-community
para acessar sua funcionalidade. Essa integração migrará para o langchain-databricks
pacote em uma próxima versão.
Você pode expor funções SQL ou Python no Unity Catalog como ferramentas para seu agente LangChain. Para obter orientação completa sobre como criar funções do Unity Catalog e usá-las no LangChain, consulte a documentação do Databricks UC Toolkit.
Carregue dados com o carregador DataFrame PySpark
O carregador PySpark DataFrame em LangChain simplifica o carregamento de dados de um DataFrame 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 bloco de anotações a seguir mostra um exemplo em que o carregador PySpark DataFrame é usado para criar um chatbot baseado em recuperação que é registrado 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 notebook Langchain
Agente Spark DataFrame
O Spark DataFrame Agent em 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 bloco de anotações a seguir demonstra como criar e usar o Spark DataFrame Agent para ajudá-lo a obter informações sobre seus dados.
Use LangChain para interagir com um bloco de anotações Spark DataFrame
Agente SQL Databricks
Com o Databricks SQL Agent , qualquer usuário do Azure Databricks pode interagir com um esquema especificado no Unity Catalog 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 SQLDatabase.from_databricks(catalog="...", schema="...")
comando 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 langchain_databricks 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 bloco de anotações a seguir demonstra como criar e usar o Databricks SQL Agent para ajudá-lo a entender melhor os dados em seu banco de dados.