Skip to main content
Databricks Lakehouse 平台将数据、分析和人工智能统一在一个平台上。
本指南提供了快速入门 Databricks LLM 模型的概述。如需所有功能和配置的详细文档,请前往 API 参考

概述

Databricks LLM 类封装了一个补全端点,该端点托管为以下两种端点类型之一:
  • Databricks Model Serving,推荐用于生产和开发,
  • 集群驱动代理应用(Cluster driver proxy app),推荐用于交互式开发。
此示例笔记本展示了如何封装您的 LLM 端点,并在 LangChain 应用中将其作为 LLM 使用。

限制

Databricks LLM 类是遗留实现,在功能兼容性方面存在若干限制。
  • 仅支持同步调用。不支持流式传输或异步 API。
  • 不支持 batch API。
要使用这些功能,请使用新的 ChatDatabricks 类。ChatDatabricks 支持 ChatModel 的所有 API,包括流式传输、异步、批处理等。

设置

要访问 Databricks 模型,您需要创建一个 Databricks 账户,设置凭据(仅在 Databricks 工作区外部时需要),并安装所需的软件包。

凭据(仅在 Databricks 外部时)

如果您在 Databricks 内部运行 LangChain 应用,可以跳过此步骤。 否则,您需要手动将 Databricks 工作区主机名和个人访问令牌分别设置为 DATABRICKS_HOSTDATABRICKS_TOKEN 环境变量。有关如何获取访问令牌的说明,请参阅 身份验证文档
import getpass
import os

os.environ["DATABRICKS_HOST"] = "https://your-workspace.cloud.databricks.com"
if "DATABRICKS_TOKEN" not in os.environ:
    os.environ["DATABRICKS_TOKEN"] = getpass.getpass(
        "Enter your Databricks access token: "
    )
或者,您可以在初始化 Databricks 类时传递这些参数。
from langchain_community.llms import Databricks

databricks = Databricks(
    host="https://your-workspace.cloud.databricks.com",
    # 我们强烈建议不要在代码中硬编码您的访问令牌,而是使用密钥管理工具
    # 或环境变量来安全地存储您的访问令牌。以下示例使用 Databricks Secrets
    # 来获取 Databricks 笔记本中可用的访问令牌。
    token=dbutils.secrets.get(scope="YOUR_SECRET_SCOPE", key="databricks-token"),
)

安装

LangChain Databricks 集成位于 langchain-community 软件包中。此外,运行此笔记本中的代码需要 mlflow >= 2.9
pip install -qU langchain-community mlflow>=2.9.0

封装模型服务端点

前提条件

  • 已注册并将 LLM 部署到 Databricks 服务端点
  • 您拥有该端点的“可查询”(Can Query)权限。
预期的 MLflow 模型签名如下:
  • 输入:[{"name": "prompt", "type": "string"}, {"name": "stop", "type": "list[string]"}]
  • 输出:[{"type": "string"}]

调用

from langchain_community.llms import Databricks

llm = Databricks(endpoint_name="YOUR_ENDPOINT_NAME")
llm.invoke("How are you?")
'I am happy to hear that you are in good health and as always, you are appreciated.'
llm.invoke("How are you?", stop=["."])
'Good'

转换输入和输出

有时您可能希望封装具有不兼容模型签名的服务端点,或者希望插入额外的配置。您可以使用 transform_input_fntransform_output_fn 参数来定义额外的预处理/后处理逻辑。
# 如果服务端点
# 期望不同的输入模式且不返回 JSON 字符串,
# 或者您想在此基础上应用提示词模板,请使用 `transform_input_fn` 和 `transform_output_fn`。


def transform_input(**request):
    full_prompt = f"""{request["prompt"]}
    Be Concise.
    """
    request["prompt"] = full_prompt
    return request


def transform_output(response):
    return response.upper()


llm = Databricks(
    endpoint_name="YOUR_ENDPOINT_NAME",
    transform_input_fn=transform_input,
    transform_output_fn=transform_output,
)

llm.invoke("How are you?")
'I AM DOING GREAT THANK YOU.'