用于 LLM 开发的 Azure Databricks 上的 LangChain

重要

这些是实验性功能,API 定义可能会更改。

本文介绍 LangChain 集成,该集成可使 Azure Databricks 上大型语言模型 (LLM) 的开发和部署更便捷。

借助这些 LangChain 集成,可以:

  • 使用 PySpark 数据帧加载程序从 PySpark 数据帧流畅加载数据。
  • 利用 Spark DataFrame 代理或 Databricks SQL 代理,使用自然语言以交互方式查询数据。
  • 将 Azure Databricks 服务模型包装为 LangChain 中的大型语言模型 (LLM)。

什么是 LangChain?

LangChain 是一种软件框架,旨在帮助创建利用大型语言模型 (LLM) 的应用程序。 LangChain 的优势在于其广泛的集成和功能。 它包括 API 包装器、Web 抓取子系统、代码分析工具、文档摘要工具等。 它还支持 OpenAI、Anthropic、HuggingFace 等现成的大型语言模型以及各种数据源和类型。

LangChain 以实验性 MLflow 风格提供,允许 LangChain 客户直接从 Azure Databricks 环境利用 MLflow 的强大工具和试验跟踪功能。 请参阅LangChain 风格 MLflow 文档

要求

  • Databricks Runtime 13.3 ML 和更高版本。
  • Databricks 建议 pip 安装最新版本的 LangChain,从而确保拥有最新的更新。
    • %pip install --upgrade langchain

使用 PySpark 数据帧加载程序加载数据

LangChain 中的 PySpark 数据帧加载程序可利用单一方法简化从 PySpark 数据帧加载数据的过程。

from langchain.document_loaders import PySparkDataFrameLoader

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

以下笔记本展示了示例,其中 PySpark 数据帧加载程序用于创建使用 MLflow 记录的基于检索的聊天机器人,从而允许将模型解释为通用 Python 函数,以便使用mlflow.pyfunc.load_model()进行推理。

Langchain 笔记本中的 PySpark 数据帧加载器和 MLFlow

获取笔记本

Spark 数据帧代理

LangChain 中的 Spark 数据帧代理允许与 Spark 数据帧交互,并针对问题解答进行了优化。 LangChain 的 Spark 数据帧代理文档提供了有关如何使用数据帧创建和使用 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)
...

以下笔记本演示了如何创建和使用 Spark 数据帧代理,以帮助你深入了解你的数据。

使用 LangChain 与 Spark 数据帧笔记本交互

获取笔记本

Databricks SQL 代理

Databricks SQL 代理是 LangChain 提供的标准 SQL 数据库代理的变体,被认为是 Spark 数据帧代理的更强大的变体。

借助 Databricks SQL 代理,任何 Azure Databricks 用户都可以与 Unity Catalog 中的指定架构交互,并生成有关其数据的见解。

重要

Databricks SQL 代理只能查询表,不能创建表。

在以下示例中,数据库实例在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 模型需要一个付费订阅。

以下笔记本演示如何创建和使用 Databricks SQL 代理来帮助更好地了解数据库中的数据。

使用 LangChain 与 SQL 数据库笔记本交互

获取笔记本

将 Azure Databricks 提供的模型包装为 LLM

如果有在 Azure Databricks 上创建的 LLM,可以直接在 LangChain 中使用它代替 OpenAI、HuggingFace 或任何其他 LLM 提供程序。

此集成支持以下终结点类型:

  • 建议用于交互式开发的群集驱动程序代理应用。

包装模型服务终结点

可以在 LangChain 中将 Azure Databricks 终结点包装为 LLM。 要在 LangChain 中将服务终结点的模型包装为 LLM,需要:

  • 部署到服务终结点的 Azure Databricks 模型的已注册 LLM。
  • 针对终结点的“可以查询”权限。

通常,模型需要或推荐重要参数,例如 temperaturemax_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?")

包装群集驱动程序代理应用程序

要在 LangChain 中将群集驱动程序代理应用程序包装为 LLM,需要:

  • 以“单用户”或“无隔离共享”模式加载到 Azure Databricks 交互式群集上的 LLM。
  • 在驱动程序节点上运行的本地 HTTP 服务器,用于将 HTTP POST 与 JSON 输入/输出结合使用,在“/”处为模型提供服务。
  • 应用使用介于 [3000, 8000] 之间的端口号,并侦听驱动程序 IP 地址或仅侦听 0.0.0.0,而不是仅侦听 localhost
  • 针对群集的“可附加到”权限。

有关示例,请参阅包装群集驱动程序代理应用的 LangChain 文档。