了解如何将请求发送到部署到模型服务终结点的代理。 Databricks 提供了多个查询方法,以满足不同的用例和集成需求。
若要了解如何部署代理,请参阅 为生成式 AI 应用程序部署代理。
选择最适合用例的查询方法:
| 方法 | 主要优点 |
|---|---|
| Databricks OpenAI 客户端 (建议) | 原生集成、全面功能支持、流媒体处理功能 |
| MLflow 部署客户端 | 现有 MLflow 模式和已建立的机器学习管道 |
| REST API | 与 OpenAI 兼容、与语言无关、适用于现有工具 |
Databricks 建议为新应用程序使用 Databricks OpenAI 客户端 。 与需要 OpenAI 兼容终结点的平台集成时,请选择 REST API 。
Databricks OpenAI 客户端(建议)
Databricks 建议使用 Databricks OpenAI 客户端查询已部署的代理。 根据您已部署代理的 API,您将使用响应客户端或聊天完成功能客户端:
ResponsesAgent 端点
对使用 ResponsesAgent 接口创建的代理使用以下示例,这是生成代理的建议方法。
from databricks.sdk import WorkspaceClient
input_msgs = [{"role": "user", "content": "What does Databricks do?"}]
endpoint = "<agent-endpoint-name>" # TODO: update this with your endpoint name
w = WorkspaceClient()
client = w.serving_endpoints.get_open_ai_client()
## Run for non-streaming responses. Invokes `predict`
response = client.responses.create(model=endpoint, input=input_msgs)
print(response)
## Include stream=True for streaming responses. Invokes `predict_stream`
streaming_response = client.responses.create(model=endpoint, input=input_msgs, stream=True)
for chunk in streaming_response:
print(chunk)
如果想传入 custom_inputs 或 databricks_options,可以通过 extra_body 参数来添加它们:
streaming_response = client.responses.create(
model=endpoint,
input=input_msgs,
stream=True,
extra_body={
"custom_inputs": {"id": 5},
"databricks_options": {"return_trace": True},
},
)
for chunk in streaming_response:
print(chunk)
ChatAgent 或 ChatModel 端点
对使用 旧 ChatAgent 或 ChatModel 接口创建的代理使用以下示例,这些接口仍受支持,但不建议用于新代理。
from databricks.sdk import WorkspaceClient
messages = [{"role": "user", "content": "What does Databricks do?"}]
endpoint = "<agent-endpoint-name>" # TODO: update this with your endpoint name
w = WorkspaceClient()
client = w.serving_endpoints.get_open_ai_client()
## Run for non-streaming responses. Invokes `predict`
response = client.chat.completions.create(model=endpoint, messages=messages)
print(response)
## Include stream=True for streaming responses. Invokes `predict_stream`
streaming_response = client.chat.completions.create(model=endpoint, messages=messages, stream=True)
for chunk in streaming_response:
print(chunk)
如果想传入 custom_inputs 或 databricks_options,可以通过 extra_body 参数来添加它们:
streaming_response = client.chat.completions.create(
model=endpoint,
messages=messages,
stream=True,
extra_body={
"custom_inputs": {"id": 5},
"databricks_options": {"return_trace": True},
},
)
for chunk in streaming_response:
print(chunk)
MLflow 部署客户端
在现有 MLflow 工作流和管道中工作时,请使用 MLflow 部署客户端。 此方法自然与 MLflow 跟踪和试验管理集成。
以下示例演示如何使用 MLflow 部署客户端查询代理。 对于新应用程序,Databricks 建议使用 Databricks OpenAI 客户端,以便利用其增强功能和本机集成。
根据你已部署代理的 API,你将使用 ResponsesAgent 或 ChatAgent 格式。
ResponsesAgent 端点
对使用 ResponsesAgent 接口创建的代理使用以下示例,这是生成代理的建议方法。
from mlflow.deployments import get_deploy_client
client = get_deploy_client()
input_example = {
"input": [{"role": "user", "content": "What does Databricks do?"}],
## Optional: Include any custom inputs
## "custom_inputs": {"id": 5},
"databricks_options": {"return_trace": True},
}
endpoint = "<agent-endpoint-name>" # TODO: update this with your endpoint name
## Call predict for non-streaming responses
response = client.predict(endpoint=endpoint, inputs=input_example)
## Call predict_stream for streaming responses
streaming_response = client.predict_stream(endpoint=endpoint, inputs=input_example)
ChatAgent 或 ChatModel 端点
对于使用 旧 ChatAgent 或 ChatModel 接口创建的代理,这些接口仍受支持,但不建议用于新代理。
from mlflow.deployments import get_deploy_client
client = get_deploy_client()
input_example = {
"messages": [{"role": "user", "content": "What does Databricks do?"}],
## Optional: Include any custom inputs
## "custom_inputs": {"id": 5},
"databricks_options": {"return_trace": True},
}
endpoint = "<agent-endpoint-name>" # TODO: update this with your endpoint name
## Call predict for non-streaming responses
response = client.predict(endpoint=endpoint, inputs=input_example)
## Call predict_stream for streaming responses
streaming_response = client.predict_stream(endpoint=endpoint, inputs=input_example)
client.predict() 和 client.predict_stream() 调用您在撰写代理时定义的代理函数。 请参阅 流式处理响应。
REST API
Databricks REST API 为与 OpenAI 兼容的模型提供终结点。 这样,就可以使用 Databricks 代理为需要 OpenAI 接口的应用程序提供服务。
此方法非常适合:
- 与语言无关的使用 HTTP 请求的应用程序
- 与需要 OpenAI 兼容的 API 的第三方平台集成
- 使用最少的代码更改从 OpenAI 迁移到 Databricks
使用 Databricks OAuth 令牌或个人访问令牌(PAT)通过 REST API 进行身份验证。 以下示例使用 Databricks OAuth 令牌,有关更多选项和信息,请参阅 Databricks 身份验证文档 。
ResponsesAgent 端点
对使用 ResponsesAgent 接口创建的代理使用以下示例,这是生成代理的建议方法。 REST API 调用等效于:
- 使用 Databricks OpenAI 客户端与
responses.create。 - 将 POST 请求发送到特定终结点的 URL(例如:
https://<host.databricks.com>/serving-endpoints/\<model-name\>/invocations)。 在终结点的模型服务页和 模型服务文档中查找更多详细信息。
curl --request POST \
--url https://<host.databricks.com\>/serving-endpoints/responses \
--header 'Authorization: Bearer <OAuth token>' \
--header 'content-type: application/json' \
--data '{
"model": "\<model-name\>",
"input": [{ "role": "user", "content": "hi" }],
"stream": true
}'
如果想传入 custom_inputs 或 databricks_options,可以通过 extra_body 参数来添加它们:
curl --request POST \
--url https://<host.databricks.com\>/serving-endpoints/responses \
--header 'Authorization: Bearer <OAuth token>' \
--header 'content-type: application/json' \
--data '{
"model": "\<model-name\>",
"input": [{ "role": "user", "content": "hi" }],
"stream": true,
"extra_body": {
"custom_inputs": { "id": 5 },
"databricks_options": { "return_trace": true }
}
}'
ChatAgent 或 ChatModel 端点
对于使用 旧 ChatAgent 或 ChatModel 接口创建的代理,这些接口仍受支持,但不建议用于新代理。 这等效于:
- 使用 Databricks OpenAI 客户端与
chat.completions.create。 - 将 POST 请求发送到特定终结点的 URL(例如:
https://<host.databricks.com>/serving-endpoints/\<model-name\>/invocations)。 在终结点的模型服务页和 模型服务文档中查找更多详细信息。
curl --request POST \
--url https://<host.databricks.com\>/serving-endpoints/chat/completions \
--header 'Authorization: Bearer <OAuth token>' \
--header 'content-type: application/json' \
--data '{
"model": "\<model-name\>",
"messages": [{ "role": "user", "content": "hi" }],
"stream": true
}'
如果想传入 custom_inputs 或 databricks_options,可以通过 extra_body 参数来添加它们:
curl --request POST \
--url https://<host.databricks.com\>/serving-endpoints/chat/completions \
--header 'Authorization: Bearer <OAuth token>' \
--header 'content-type: application/json' \
--data '{
"model": "\<model-name\>",
"messages": [{ "role": "user", "content": "hi" }],
"stream": true,
"extra_body": {
"custom_inputs": { "id": 5 },
"databricks_options": { "return_trace": true }
}
}'