LangChain в Azure Databricks для разработки LLM

Внимание

Это экспериментальные функции, а определения API могут измениться.

В этой статье описываются интеграции LangChain, которые упрощают разработку и развертывание больших языковых моделей (LLM) в Azure Databricks.

С помощью этих интеграции LangChain вы можете:

  • Просто загружайте данные из кадра данных PySpark с загрузчиком dataFrame PySpark.
  • Интерактивный запрос данных с помощью естественного языка с агентом DataFrame Spark или агентом SQL Databricks.
  • Оставьте модель Azure Databricks в качестве крупной языковой модели (LLM) в LangChain.

Что такое LangChain?

LangChain — это программная платформа, предназначенная для создания приложений, использующих большие языковые модели (LLM). Сила LangChain лежит в широком спектре интеграции и возможностей. Она включает в себя оболочки API, подсистемы веб-очистки, средства анализа кода, средства сводки документов и многое другое. Она также поддерживает большие языковые модели из OpenAI, Anthropic, HuggingFace и т. д. из поля вместе с различными источниками и типами данных.

LangChain доступен в качестве экспериментального вкуса MLflow, который позволяет клиентам LangChain использовать надежные средства и возможности отслеживания экспериментов MLflow непосредственно из среды Azure Databricks. См. документацию по MLflow по вкусу LangChain.

Требования

  • Databricks Runtime 13.3 ML и более поздних версий.
  • Databricks рекомендует установить последнюю версию LangChain, чтобы обеспечить наличие последних обновлений.
    • %pip install --upgrade langchain

Загрузка данных с помощью загрузчика DataFrame PySpark

Загрузчик DataFrame PySpark в LangChain упрощает загрузку данных из кадра данных PySpark с одним методом.

from langchain.document_loaders import PySparkDataFrameLoader

loader = PySparkDataFrameLoader(spark, wikipedia_dataframe, page_content_column="text")
documents = loader.load()

В следующей записной книжке показан пример, в котором загрузчик DataFrame PySpark используется для создания чат-бота на основе извлечения, зарегистрированного с помощью MLflow, что, в свою очередь, позволяет модели интерпретироваться как универсальная функция Python для вывода с mlflow.pyfunc.load_model().

Загрузчик PySpark DataFrame и MLFlow в записной книжке Langchain

Получить записную книжку

Агент DataFrame Spark

Агент DataFrame Spark в LangChain позволяет взаимодействовать с кадром данных Spark, оптимизированным для ответа на вопросы. Документация по агенту DataFrame Spark в LangChain содержит подробный пример создания и использования агента DataFrame Spark с кадром данных.

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

В следующей записной книжке показано, как создать и использовать агент DataFrame Spark для получения аналитических сведений о данных.

Использование LangChain для взаимодействия с записной книжкой Spark DataFrame

Получить записную книжку

Агент SQL Databricks

Агент SQL Databricks является вариантом стандартного агента База данных SQL, который предоставляет LangChain и считается более мощным вариантом агента Spark DataFrame.

С помощью агента SQL Databricks любой пользователь Azure Databricks может взаимодействовать с указанной схемой в каталоге Unity и создавать аналитические сведения о своих данных.

Внимание

Агент SQL Databricks может запрашивать только таблицы и не создавать таблицы.

В следующем примере экземпляр базы данных создается в команде SQLDatabase.from_databricks(catalog="...", schema="...") , а агент и необходимые средства создаются SQLDatabaseToolkit(db=db, llm=llm) соответственно create_sql_agent(llm=llm, toolkit=toolkit, **kwargs).

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

Примечание.

Для моделей OpenAI требуется платная подписка, если бесплатная подписка попадает в ограничение скорости.

В следующей записной книжке показано, как создать и использовать агент SQL Databricks, чтобы лучше понять данные в базе данных.

Использование LangChain для взаимодействия с записной книжкой базы данных SQL

Получить записную книжку

Оболочка Azure Databricks служила моделями в качестве LLM

Если у вас есть LLM, созданный в Azure Databricks, его можно использовать непосредственно в LangChain вместо OpenAI, HuggingFace или любого другого поставщика LLM.

Эта интеграция поддерживает два типа конечных точек:

Оболочка конечной точки обслуживания модели

Конечные точки Azure Databricks можно упаковать как LLM в LangChain. Чтобы упаковать конечную точку обслуживания модели в качестве LLM в LangChain, вам потребуется:

  • Зарегистрированный LLM, развернутый в конечной точке обслуживания модели Azure Databricks.
  • РАЗРЕШЕНИЕ CAN QUERY на конечную точку.

Часто модели требуют или рекомендуют важные параметры, например temperature или max_tokens. В следующем примере показано, как ввести эти параметры с развернутой моделью с именем falcon-7b-instruct. Дополнительные сведения см. в документации по оболочке конечной точки обслуживания 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?")

Оболочка прокси-приложения драйвера кластера

Чтобы упаковать прокси-приложение драйвера кластера в качестве LLM в LangChain, вам потребуется:

  • LLM, загруженный в интерактивный кластер Azure Databricks в режиме "один пользователь" или "без общей изоляции".
  • Локальный HTTP-сервер, работающий на узле драйвера для обслуживания модели по адресу "/" с использованием HTTP POST с входными и выходными данными JSON.
  • Приложение использует номер порта между [3000, 8000] и прослушивает IP-адрес драйвера или просто 0.0.0.0.0, а не localhost только.
  • Разрешение CAN ATTACH TO к кластеру.

Пример см. в документации по LangChain по оболочке прокси-приложения драйвера кластера.