用于 LLM 开发的 Azure Databricks 上的 LangChain

重要

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

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

借助这些 LangChain 集成,可以:

  • 在 LangChain 应用程序中使用 Databricks 服务模型作为 LLM 或嵌入。

  • 集成 Mosaic AI 矢量搜索以进行矢量存储和检索。

  • 管理和跟踪 MLflow 试验中的 LangChain 模型和性能。

  • 使用 MLflow Tracing 跟踪 LangChain 应用程序的开发和生产阶段。

  • 使用 PySpark 数据帧加载程序从 PySpark 数据帧流畅加载数据。

  • 利用 Spark DataFrame 代理或 Databricks SQL 代理,使用自然语言以交互方式查询数据。

什么是 LangChain?

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

利用 MLflow 进行 LangChain 开发

LangChain 作为一种 MLflow 风格提供,使用户能够利用 MLflow 的强大工具直接在 Databricks 中的开发和生产环境中进行试验跟踪和可观测性。 有关将 MLflow 与 LangChain 配合使用的更多详细信息和指导,请参阅 MLflow LangChain 风格文档

Databricks 上的 MLflow 提供了有别于开放源代码版本的附加功能,通过以下功能增强开发体验:

  • 完全托管的 MLflow 跟踪服务器:可在 Databricks 工作区中立即使用,让你能够开始跟踪试验,没有设置延迟。

  • 与 Databricks 笔记本无缝集成:试验自动链接到笔记本,简化跟踪过程。

  • Databricks 上的 MLflow 跟踪:通过推理表集成提供生产级监视,确保从开发到生产实现端到端可观测性。

  • 使用 Unity 目录进行模型生命周期管理:集中控制工作区中的访问、审核、世系和模型发现。

  • 集成 Mosaic AI 代理评估:评估 LangChain 应用程序的质量、成本和延迟。

利用这些功能,可以优化基于 LangChain 的项目的开发、监视和管理,使 Databricks 成为 MLflow 支持的 AI 计划的首选。

要求

  • Databricks Runtime 13.3 ML 或更高版本。
  • 安装 LangChain Databricks 集成包和 Databricks SQL 连接器。 Databricks 也建议 pip 安装最新版本的 LangChain,从而确保拥有最新的更新。
    • %pip install --upgrade langchain-databricks langchain-community langchain databricks-sql-connector

使用 Databricks 服务模型作为 LLM 或嵌入

果有使用 Databricks 模型服务提供服务的 LLM 或嵌入模型,则可以在 LangChain 中直接使用它来代替 OpenAI、HuggingFace 或任何其他 LLM 提供商。

若要在 LangChain 中将模型服务终结点用作 LLM 或嵌入模型,需要:

  • 部署到 Azure Databricks 模型服务终结点的已注册 LLM 或嵌入模型。
    • 或者,可以使用基础模型 API 提供的模型,这是在工作区中部署并可立即使用的开放源代码模型的精选列表。
  • 针对终结点的“可以查询”权限。

聊天模型

以下示例演示了如何使用基础模型 API 将 Meta 的 Llama 3.1 70B Instruct 模型用作 LangChain 中的 LLM 组件。


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

可以将终结点替换为服务终结点上部署的自定义模型。 可以在 LangChain 文档中找到其他示例,例如流式处理、异步调用和函数调用。

嵌入

以下示例演示了如何使用基础模型 API 将 databricks-bge-large-en 嵌入模型用作 LangChain 中的嵌入组件。


from langchain_databricks import DatabricksEmbeddings

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

可以在 LangChain 文档中找到其他详细信息

LLM

警告

完成模型被视为旧功能。 大多数新式模型都利用聊天完成界面,应该与 ChatModel 组件一起使用。

以下示例演示了如何在 LangChain 中使用完成模型 API 作为 LLM 组件。

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

使用 Mosaic AI 矢量搜索作为矢量存储

Mosaic AI 矢量搜索是 Databricks 上的一个无服务器相似性搜索引擎,使你能够将数据的矢量表示(包括元数据)存储在矢量数据库中。 可以从 Unity Catalog 托管的增量表创建自动更新矢量搜索索引,并通过简单 API 对其进行查询以返回最相似的矢量。

若要在 LangChain 中使用此功能,请创建 DatabricksVectorSearch 实例:

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

有关更多详细信息,请参阅 DatabricksVectorSearch 文档

使用 Unity 目录函数作为工具

注意

Unity Catalog 函数集成位于 langchain-community 包中。 必须使用 %pip install langchain-community 安装它才能访问其功能。 此集成将在即将发布的版本中迁移至 langchain-databricks 包。

可以将 Unity Catalog 中的 SQL 或 Python 函数公开为 LangChain 代理的工具。 有关创建 Unity Catalog 函数并在 LangChain 中使用它们的完整指导,请参阅 Databricks UC 工具包文档

使用 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 代理,任何 Azure Databricks 用户都可以与 Unity 目录中的指定架构进行交互,并对其数据生成见解。

重要

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

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

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

获取笔记本