Consulte um agente implantado no Databricks
Saiba como enviar solicitações a agentes implantados nos Databricks Apps ou no endpoint de Model Serving. O Databricks fornece vários métodos de consulta para atender a diferentes casos de uso e necessidades de integração.
Selecione a abordagem de consulta que melhor se adapta ao seu caso de uso:
Método | Principais benefícios |
|---|---|
Integração nativa, suporte completo a recursos, funcionalidades de transmissão | |
Compatível com OpenAI, independente de linguagem, funciona com ferramentas existentes | |
Compatível com OpenAI, consulte apenas agentes legados hospedados em endpoint de Model Serving |
A Databricks recomenda o **Cliente OpenAI da Databricks** para novas aplicações. Escolha a **API REST** ao integrar com plataformas que esperam endpoints compatíveis com OpenAI.
Cliente OpenAI Databricks (Recomendado)
Databricks recomenda que você use o Databricks OpenAI Client para consultar um agente implantado. Dependendo da API do seu agente implantado, você usará as respostas ou o cliente de conclusões de chat:
- Agents deployed to Apps
- Agents on Model Serving
Use o exemplo a seguir para agentes hospedados no Databricks Apps seguindo a interface ResponsesAgent, que é a abordagem recomendada para construir agentes. Você deve usar um token OAuth do Databricks para consultar agentes hospedados no Databricks Apps.
from databricks.sdk import WorkspaceClient
from databricks_openai import DatabricksOpenAI
input_msgs = [{"role": "user", "content": "What does Databricks do?"}]
app_name = "<agent-app-name>" # TODO: update this with your app name
# The WorkspaceClient must be configured with OAuth authentication
# See: https://docs.databricks.com/aws/en/dev-tools/auth/oauth-u2m.html
w = WorkspaceClient()
client = DatabricksOpenAI(workspace_client=w)
# Run for non-streaming responses. Calls the "invoke" method
# Include the "apps/" prefix in the model name
response = client.responses.create(model=f"apps/{app_name}", input=input_msgs)
print(response)
# Include stream=True for streaming responses. Calls the "stream" method
# Include the "apps/" prefix in the model name
streaming_response = client.responses.create(
model=f"apps/{app_name}", input=input_msgs, stream=True
)
for chunk in streaming_response:
print(chunk)
Se deseja inserir custom_inputs, pode adicioná-los com o parâmetro extra_body:
streaming_response = client.responses.create(
model=f"apps/{app_name}",
input=input_msgs,
stream=True,
extra_body={
"custom_inputs": {"id": 5},
},
)
for chunk in streaming_response:
print(chunk)
Para recuperar um ID de rastreamento da resposta, inclua o cabeçalho x-mlflow-return-trace-id usando extra_headers. Em seguida, use o MLflow get_trace para recuperar o rastreamento completo.
response = client.responses.create(
model=f"apps/{app_name}",
input=input_msgs,
extra_headers={"x-mlflow-return-trace-id": "true"},
)
trace_id = response.metadata["trace_id"]
trace = client.get_trace(trace_id)
Use o exemplo a seguir para agentes legados hospedados no Model Serving seguindo a interface ResponsesAgent. Você pode usar um token OAuth do Databricks ou um Token de Acesso Pessoal (PAT) para consultar agentes hospedados no Model Serving.
from databricks_openai import DatabricksOpenAI
input_msgs = [{"role": "user", "content": "What does Databricks do?"}]
endpoint = "<agent-endpoint-name>" # TODO: update this with your endpoint name
client = DatabricksOpenAI()
# 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)
Se você quiser passar custom_inputs ou databricks_options, pode adicioná-los com o parâmetro 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)
Use o exemplo a seguir para agentes legados em servindo modelo, seguindo as interfaces ChatAgent ou 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
ws_client = WorkspaceClient()
client = ws_client.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)
Se você quiser passar custom_inputs ou databricks_options, pode adicioná-los com o parâmetro 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)
API REST
A API REST do Databricks fornece endpoints para modelos que são compatíveis com OpenAI. Isso permite que você use agentes do Databricks para disponibilizar aplicativos que exigem interfaces OpenAI.
Esta abordagem é ideal para:
- Aplicativos agnósticos de linguagem que usam solicitações HTTP
- Integração com plataformas de terceiros que esperam APIs compatíveis com OpenAI
- Migrando do OpenAI para o Databricks com alterações mínimas no código
Autentique-se com a API REST usando um tokens OAuth do Databricks. Consulte a documentação de autenticação da Databricks para obter mais opções e informações.
- Agents deployed to Apps
- Agents on Model Serving
Use o exemplo a seguir para agentes hospedados no Databricks Apps seguindo a interface ResponsesAgent, que é a abordagem recomendada para construir agentes. Você deve usar um token OAuth do Databricks para consultar agentes hospedados no Databricks Apps.
curl --request POST \
--url <app-url>.databricksapps.com/responses \
--header 'Authorization: Bearer <OAuth token>' \
--header 'content-type: application/json' \
--data '{
"input": [{ "role": "user", "content": "hi" }],
"stream": true
}'
Para passar custom_inputs, é possível adicioná-los ao corpo da solicitação:
curl --request POST \
--url <app-url>.databricksapps.com/responses \
--header 'Authorization: Bearer <OAuth token>' \
--header 'content-type: application/json' \
--data '{
"input": [{ "role": "user", "content": "hi" }],
"stream": true,
"custom_inputs": { "id": 5 }
}'
Para recuperar um ID de rastreamento da resposta, inclua o cabeçalho x-mlflow-return-trace-id em sua solicitação. O corpo da resposta inclui um campo metadata.trace_id contendo o ID de rastreamento. Para solicitações de transmissão, o ID de rastreamento é enviado como um evento SSE separado (data: {"trace_id": "tr-..."}) próximo ao final da transmissão. Então, use o MLflow get_trace para recuperar o rastreamento completo usando o ID de rastreamento.
curl --request POST \
--url <app-url>.databricksapps.com/responses \
--header 'Authorization: Bearer <OAuth token>' \
--header 'content-type: application/json' \
--header 'x-mlflow-return-trace-id: true' \
--data '{
"input": [{ "role": "user", "content": "hi" }]
}'
Use o exemplo a seguir para agentes legados hospedados no Model Serving seguindo a interface ResponsesAgent. Você pode usar um token OAuth do Databricks ou um Personal Access Token (PAT) para consultar agentes hospedados no Model Serving. A chamada da API REST equivale a:
- Usando o cliente Databricks OpenAI com
responses.create. - Envio de uma solicitação POST para a URL do endpoint específico (ex.:
https://<host.databricks.com>/serving-endpoints/\<model-name\>/invocations). Para mais informações, consulte a página de Model Serving do seu endpoint e a Documentação do Model Serving.
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
}'
Se você deseja passar custom_inputs ou databricks_options, pode adicioná-los ao corpo da solicitação:
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": { "id": 5 },
"databricks_options": { "return_trace": true }
}'
Use o seguinte para agentes criados com interfaces legadas do ChatAgent ou ChatModel. Isso é equivalente a:
- Usando o cliente Databricks OpenAI com
chat.completions.create. - Envio de uma solicitação POST para a URL do endpoint específico (ex.:
https://<host.databricks.com>/serving-endpoints/\<model-name\>/invocations). Para mais informações, consulte a página de Model Serving do seu endpoint e a Documentação do Model Serving.
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
}'
Se você deseja passar custom_inputs ou databricks_options, pode adicioná-los ao corpo da solicitação:
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": { "id": 5 },
"databricks_options": { "return_trace": true }
}'
AI Functions: ai_query
É possível utilizar ai_query para consultar um agente implantado hospedado em servindo modelo utilizando SQL. Consulte ai_query function para a sintaxe SQL e definições de parâmetros.
SELECT ai_query(
"<model name>", question
) FROM (VALUES ('what is MLflow?'), ('how does MLflow work?')) AS t(question);