Databricks
Databricks 湖库平台在一个平台上统一了数据、分析和AI。
本笔记本提供了有关如何开始使用 Databricks 大语言模型(LLM) 的快速概览。如需了解所有功能和配置的详细文档,请访问 API 参考文档。
概览
Databricks LLM 类封装了一个作为以下两种端点类型之一托管的补全端点:
- Databricks 模型服务,推荐用于生产和开发环境,
- 集群驱动代理应用,建议用于交互式开发。
此示例笔记本展示了如何包装您的LLM端点,并在LangChain应用程序中将其用作LLM。
局限性
The Databricks LLM 类是已弃用的实现,且在功能兼容性方面存在多个限制。
- 仅支持同步调用。不支持流式或异步API。
batchAPI 不受支持。
要使用这些功能,请改用新的 ChatDatabricks 类。ChatDatabricks 支持 ChatModel 的所有 API,包括流式传输、异步、批量等。
设置
要访问Databricks模型,您需要创建一个Databricks账户、设置凭据(如果您在Databricks工作区之外,请仅在此步骤操作)并安装所需的包。
Credentials(仅如果您在Databricks之外)
如果您在Databricks中运行LangChain应用,请跳过此步骤。
否则,您需要手动设置 Databricks 工作空间主机名和个人访问令牌环境变量分别为 DATABRICKS_HOST 和 DATABRICKS_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",
# We strongly recommend NOT to hardcode your access token in your code, instead use secret management tools
# or environment variables to store your access token securely. The following example uses Databricks Secrets
# to retrieve the access token that is available within the Databricks notebook.
token=dbutils.secrets.get(scope="YOUR_SECRET_SCOPE", key="databricks-token"), # noqa: F821
)
安装
LangChain 与 Databricks 的集成位于 langchain-community 包中。此外,运行本笔记本中的代码还需要 mlflow >= 2.9 。
%pip install -qU langchain-community mlflow>=2.9.0
包装模型服务端点
先决条件:
- 一个LLM已被注册并部署到Databricks服务端点。
- 您对端点具有"可查询权限"。
预期的 MLflow 模型签名是:
- 输入:
[{"name": "prompt", "type": "string"}, {"name": "stop", "type": "list[string]"}] - 输出:
[{"type": "string"}]
Invocation
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_fn 和 transform_output_fn 参数来定义额外的预处理/后处理。
# Use `transform_input_fn` and `transform_output_fn` if the serving endpoint
# expects a different input schema and does not return a JSON string,
# respectively, or you want to apply a prompt template on top.
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.'