Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Na tej stronie pokazano, jak utworzyć agenta sztucznej inteligencji w języku Python przy użyciu programu Mosaic AI Agent Framework i popularnych bibliotek tworzenia agentów, takich jak LangGraph i OpenAI.
Wymagania
Wskazówka
Usługa Databricks zaleca zainstalowanie najnowszej wersji klienta języka Python MLflow podczas opracowywania agentów.
Aby utworzyć i wdrożyć agentów przy użyciu podejścia na tej stronie, zainstaluj następujące elementy:
-
databricks-agents1.2.0 lub nowszy -
mlflow3.1.3 lub nowsze - Środowisko Python w wersji 3.10 lub nowszej.
- Użyj bezserwerowych obliczeń lub środowiska Databricks Runtime 13.3 LTS lub nowszego, aby spełnić to wymaganie.
%pip install -U -qqqq databricks-agents mlflow
Usługa Databricks zaleca również instalowanie pakietów integracji mostka AI usługi Databricks w celu tworzenia agentów. Te pakiety integracji udostępniają udostępnioną warstwę interfejsów API, które współdziałają z funkcjami sztucznej inteligencji usługi Databricks, takimi jak databricks AI/BI Genie i wyszukiwanie wektorów, między strukturami tworzenia agentów i zestawami SDK.
OpenAI
%pip install -U -qqqq databricks-openai
LangChain/LangGraph
%pip install -U -qqqq databricks-langchain
DSPy
%pip install -U -qqqq databricks-dspy
Agenci czystego Pythona
%pip install -U -qqqq databricks-ai-bridge
Użyj ResponsesAgent do tworzenia agentów
Usługa Databricks zaleca interfejs ResponsesAgent MLflow do tworzenia agentów klasy produkcyjnej.
ResponsesAgent Umożliwia tworzenie agentów z dowolną strukturą innej firmy, a następnie integrowanie jej z funkcjami sztucznej inteligencji usługi Databricks w celu uzyskania niezawodnych funkcji rejestrowania, śledzenia, oceny, wdrażania i monitorowania.
ResponsesAgent Schemat jest zgodny ze schematem OpenAIResponses. Aby dowiedzieć się więcej na temat interfejsu Responses: odpowiedzi a chatCompletion).
Notatka
Starszy ChatAgent interfejs jest nadal obsługiwany w usłudze Databricks. Jednak w przypadku nowych agentów usługa Databricks zaleca korzystanie z najnowszej wersji biblioteki MLflow i interfejsu ResponsesAgent .
Zobacz Starszy schemat agenta danych wejściowych i wyjściowych.
ResponsesAgent zapewnia następujące korzyści:
Zaawansowane możliwości agenta
- Obsługa wielu agentów
- Dane wyjściowe przesyłania strumieniowego: przesyłaj strumieniowo dane wyjściowe w mniejszych fragmentach.
- Kompleksowa historia komunikatów wywołujących narzędzia: Zwracanie wielu wiadomości, w tym pośrednich komunikatów wywołujących narzędzia, dla lepszej jakości obsługi i zarządzania przebiegiem rozmów.
- obsługa potwierdzenia wywołania narzędzi
- Obsługa długotrwałych narzędzi
Usprawnione programowanie, wdrażanie i monitorowanie
-
Tworzenie agentów przy użyciu dowolnej platformy: Opakuj dowolnego istniejącego agenta przy użyciu interfejsu
ResponsesAgent, aby uzyskać wbudowaną zgodność z narzędziami AI Playground, Agent Evaluation i Agent Monitoring. - Interfejsy programowania z typowanymi danymi: Pisanie kodu agenta przy użyciu typowanych klas języka Python, korzystając z funkcji autouzupełniania w IDE i notatniku.
-
Automatyczne wnioskowanie podpisów: narzędzie MLflow automatycznie wywnioskuje
ResponsesAgentpodpisy podczas rejestrowania agenta, upraszczając rejestrację i wdrażanie. Zobacz Podpis modelu podczas procesu logowania. -
Automatyczne śledzenie: narzędzie MLflow automatycznie śledzi dane
predictipredict_streamfunkcje, agregując przesyłane strumieniowo odpowiedzi w celu łatwiejszej oceny i wyświetlania. - Tabele wnioskowań wzmocnione przez AI Gateway: Tabele wnioskowań AI Gateway są automatycznie uruchamiane dla wdrożonych agentów, co zapewnia dostęp do szczegółowych metadanych logów żądań.
-
Tworzenie agentów przy użyciu dowolnej platformy: Opakuj dowolnego istniejącego agenta przy użyciu interfejsu
Aby dowiedzieć się, jak utworzyć obiekt ResponsesAgent, zapoznaj się z przykładami w poniższej sekcji i dokumentacją platformy MLflow — ResponsesAgent for Model Serving (OdpowiedziAgent dla obsługi modeli).
ResponsesAgent Przykłady
W poniższych notesach przedstawiono sposób tworzenia przesyłania strumieniowego i przesyłania strumieniowego bez przesyłania strumieniowego ResponsesAgent przy użyciu popularnych bibliotek. Aby dowiedzieć się, jak rozszerzyć możliwości tych agentów, zobacz Narzędzia agenta sztucznej inteligencji.
OpenAI
Prost agent czatu OpenAI używający modeli hostowanych na Databricks
Agent wywołujący narzędzia OpenAI przy użyciu modeli hostowanych w usłudze Databricks
Agent wywołujący narzędzia OpenAI przy użyciu modeli hostowanych za pomocą interfejsu OpenAI
LangGraph
Agent wywoływania narzędzi LangGraph
DSPy
Agent jednokrotnego wywoływania narzędzi DSPy
Przykład wielu agentów
Aby dowiedzieć się, jak utworzyć system z wieloma agentami, zobacz Używanie usługi Genie w systemach z wieloma agentami.
Przykład agenta stanowego
Aby dowiedzieć się, jak tworzyć agentów stanowych z krótkoterminową i długoterminową pamięcią przy użyciu usługi Lakebase jako magazynu pamięci, zobacz Pamięć agenta sztucznej inteligencji.
Przykład agenta nieinteraktywnego
W przeciwieństwie do agentów konwersacyjnych, które zarządzają dialogami wieloetapowymi, agenci niekonwersacyjni koncentrują się na wydajnym realizowaniu dobrze zdefiniowanych zadań. Ta usprawniona architektura zapewnia większą przepływność dla żądań niezależnych.
Aby dowiedzieć się, jak utworzyć agenta niekonwersacyjnego, zobacz Niekonwersacyjne agenci sztucznej inteligencji przy użyciu platformy MLflow.
Co zrobić, jeśli mam już agenta?
Jeśli masz już agenta skompilowany za pomocą oprogramowania LangChain, LangGraph lub podobnej struktury, nie musisz ponownie pisać agenta, aby używać go w usłudze Databricks. Zamiast tego po prostu owiń swojego obecnego agenta interfejsem MLflow ResponsesAgent.
Napisz klasę opakowującą w Pythonie, która dziedziczy z
mlflow.pyfunc.ResponsesAgentklasy.Wewnątrz klasy otoki odwołaj się do istniejącego agenta jako atrybutu
self.agent = your_existing_agent.Klasa
ResponsesAgentwymaga zaimplementowaniapredictmetody, która zwracaResponsesAgentResponseobiekt w celu obsługi żądań nieprzesyłania strumieniowego. Poniżej przedstawiono przykład schematuResponsesAgentResponses:import uuid # input as a dict {"input": [{"role": "user", "content": "What did the data scientist say when their Spark job finally completed?"}]} # output example ResponsesAgentResponse( output=[ { "type": "message", "id": str(uuid.uuid4()), "content": [{"type": "output_text", "text": "Well, that really sparked joy!"}], "role": "assistant", }, ] )predictW funkcji przekonwertuj komunikaty przychodzące zResponsesAgentRequestna format oczekiwany przez agenta. Po wygenerowaniu odpowiedzi przez agenta przekonwertujResponsesAgentResponsejego dane wyjściowe na obiekt.
Zobacz następujące przykłady kodu, aby zobaczyć, jak przekonwertować istniejących agentów na ResponsesAgent:
Konwersja podstawowa
W przypadku agentów spoza przesyłania strumieniowego przekonwertuj predict dane wejściowe i wyjściowe w funkcji .
from uuid import uuid4
from mlflow.pyfunc import ResponsesAgent
from mlflow.types.responses import (
ResponsesAgentRequest,
ResponsesAgentResponse,
)
class MyWrappedAgent(ResponsesAgent):
def __init__(self, agent):
# Reference your existing agent
self.agent = agent
def predict(self, request: ResponsesAgentRequest) -> ResponsesAgentResponse:
# Convert incoming messages to your agent's format
# prep_msgs_for_llm is a function you write to convert the incoming messages
messages = self.prep_msgs_for_llm([i.model_dump() for i in request.input])
# Call your existing agent (non-streaming)
agent_response = self.agent.invoke(messages)
# Convert your agent's output to ResponsesAgent format, assuming agent_response is a str
output_item = (self.create_text_output_item(text=agent_response, id=str(uuid4())),)
# Return the response
return ResponsesAgentResponse(output=[output_item])
Przesyłanie strumieniowe za pomocą ponownego użycia kodu
W przypadku agentów przesyłania strumieniowego możesz być sprytną i ponownie używać logiki, aby uniknąć duplikowania kodu, który konwertuje komunikaty:
from typing import Generator
from uuid import uuid4
from mlflow.pyfunc import ResponsesAgent
from mlflow.types.responses import (
ResponsesAgentRequest,
ResponsesAgentResponse,
ResponsesAgentStreamEvent,
)
class MyWrappedStreamingAgent(ResponsesAgent):
def __init__(self, agent):
# Reference your existing agent
self.agent = agent
def predict(self, request: ResponsesAgentRequest) -> ResponsesAgentResponse:
"""Non-streaming predict: collects all streaming chunks into a single response."""
# Reuse the streaming logic and collect all output items
output_items = []
for stream_event in self.predict_stream(request):
if stream_event.type == "response.output_item.done":
output_items.append(stream_event.item)
# Return all collected items as a single response
return ResponsesAgentResponse(output=output_items)
def predict_stream(
self, request: ResponsesAgentRequest
) -> Generator[ResponsesAgentStreamEvent, None, None]:
"""Streaming predict: the core logic that both methods use."""
# Convert incoming messages to your agent's format
# prep_msgs_for_llm is a function you write to convert the incoming messages, included in full examples linked below
messages = self.prep_msgs_for_llm([i.model_dump() for i in request.input])
# Stream from your existing agent
item_id = str(uuid4())
aggregated_stream = ""
for chunk in self.agent.stream(messages):
# Convert each chunk to ResponsesAgent format
yield self.create_text_delta(delta=chunk, item_id=item_id)
aggregated_stream += chunk
# Emit an aggregated output_item for all the text deltas with id=item_id
yield ResponsesAgentStreamEvent(
type="response.output_item.done",
item=self.create_text_output_item(text=aggregated_stream, id=item_id),
)
Migrowanie z aplikacji ChatCompletions
Jeśli istniejący agent używa interfejsu API OpenAI ChatCompletions, możesz przeprowadzić migrację do ResponsesAgent niego bez ponownego zapisywania podstawowej logiki. Dodaj otokę, która:
- Konwertuje komunikaty przychodzące
ResponsesAgentRequestnaChatCompletionsformat oczekiwany przez agenta. -
ChatCompletionsPrzekształca dane wyjściowe wResponsesAgentResponseschemat. - Opcjonalnie obsługuje przesyłanie strumieniowe przez mapowanie przyrostowych różnic z
ChatCompletionsdoResponsesAgentStreamEventobiektów.
from typing import Generator
from uuid import uuid4
from databricks.sdk import WorkspaceClient
from mlflow.pyfunc import ResponsesAgent
from mlflow.types.responses import (
ResponsesAgentRequest,
ResponsesAgentResponse,
ResponsesAgentStreamEvent,
)
# Legacy agent that outputs ChatCompletions objects
class LegacyAgent:
def __init__(self):
self.w = WorkspaceClient()
self.OpenAI = self.w.serving_endpoints.get_open_ai_client()
def stream(self, messages):
for chunk in self.OpenAI.chat.completions.create(
model="databricks-claude-sonnet-4-5",
messages=messages,
stream=True,
):
yield chunk.to_dict()
# Wrapper that converts the legacy agent to a ResponsesAgent
class MyWrappedStreamingAgent(ResponsesAgent):
def __init__(self, agent):
# `agent` is your existing ChatCompletions agent
self.agent = agent
def prep_msgs_for_llm(self, messages):
# dummy example of prep_msgs_for_llm
# real example of prep_msgs_for_llm included in full examples linked below
return [{"role": "user", "content": "Hello, how are you?"}]
def predict(self, request: ResponsesAgentRequest) -> ResponsesAgentResponse:
"""Non-streaming predict: collects all streaming chunks into a single response."""
# Reuse the streaming logic and collect all output items
output_items = []
for stream_event in self.predict_stream(request):
if stream_event.type == "response.output_item.done":
output_items.append(stream_event.item)
# Return all collected items as a single response
return ResponsesAgentResponse(output=output_items)
def predict_stream(
self, request: ResponsesAgentRequest
) -> Generator[ResponsesAgentStreamEvent, None, None]:
"""Streaming predict: the core logic that both methods use."""
# Convert incoming messages to your agent's format
messages = self.prep_msgs_for_llm([i.model_dump() for i in request.input])
# process the ChatCompletion output stream
agent_content = ""
tool_calls = []
msg_id = None
for chunk in self.agent.stream(messages): # call the underlying agent's stream method
delta = chunk["choices"][0]["delta"]
msg_id = chunk.get("id", None)
content = delta.get("content", None)
if tc := delta.get("tool_calls"):
if not tool_calls: # only accommodate for single tool call right now
tool_calls = tc
else:
tool_calls[0]["function"]["arguments"] += tc[0]["function"]["arguments"]
elif content is not None:
agent_content += content
yield ResponsesAgentStreamEvent(**self.create_text_delta(content, item_id=msg_id))
# aggregate the streamed text content
yield ResponsesAgentStreamEvent(
type="response.output_item.done",
item=self.create_text_output_item(agent_content, msg_id),
)
for tool_call in tool_calls:
yield ResponsesAgentStreamEvent(
type="response.output_item.done",
item=self.create_function_call_item(
str(uuid4()),
tool_call["id"],
tool_call["function"]["name"],
tool_call["function"]["arguments"],
),
)
agent = MyWrappedStreamingAgent(LegacyAgent())
for chunk in agent.predict_stream(
ResponsesAgentRequest(input=[{"role": "user", "content": "Hello, how are you?"}])
):
print(chunk)
Aby zapoznać się z kompletnymi przykładami, zobacz ResponsesAgent przykłady.
Odpowiedzi przesyłania strumieniowego
Przesyłanie strumieniowe umożliwia agentom wysyłanie odpowiedzi we fragmentach w czasie rzeczywistym zamiast czekać na pełną odpowiedź. Aby zaimplementować przesyłanie strumieniowe za pomocą ResponsesAgentprogramu , emituj serię zdarzeń różnicowych, po których następuje końcowe zdarzenie ukończenia:
-
Emituj zdarzenia różnicowe: wysyłaj wiele
output_text.deltazdarzeń o tym samymitem_idrozmiarze, aby przesyłać strumieniowo fragmenty tekstu w czasie rzeczywistym. -
Zakończ z gotowym zdarzeniem: wyślij ostateczne
response.output_item.donezdarzenie z takim samymitem_id, jak zdarzenia różnicowe zawierające pełny końcowy tekst wyjściowy.
Każde zdarzenie różnicowe przesyła strumieniowo fragment tekstu do klienta. Ostateczne gotowe zdarzenie zawiera pełny tekst odpowiedzi i sygnały usługi Databricks w celu wykonania następujących czynności:
- Śledzenie danych wyjściowych agenta za pomocą śledzenia MLflow
- Agregowanie odpowiedzi przesyłanych strumieniowo w tabelach wnioskowania bramy sztucznej inteligencji
- Wyświetlanie pełnych danych wyjściowych w interfejsie użytkownika platformy AI Playground
Propagacja błędów przesyłania strumieniowego
Mozaika AI propaguje wszelkie błędy napotkane podczas przesyłania strumieniowego przy użyciu ostatniego tokenu w obszarze databricks_output.error. Klient wywołujący musi prawidłowo obsłużyć i wyświetlić ten błąd.
{
"delta": …,
"databricks_output": {
"trace": {...},
"error": {
"error_code": BAD_REQUEST,
"message": "TimeoutException: Tool XYZ failed to execute."
}
}
}
Zaawansowane funkcje
dostosowane dane wejściowe i wyjściowe
W niektórych scenariuszach mogą być wymagane dodatkowe dane wejściowe agenta, takie jak i , client_typelub dane wyjściowe, takie jak session_id linki źródłowe pobierania, które nie powinny być uwzględniane w historii czatów na potrzeby przyszłych interakcji.
W przypadku tych scenariuszy platforma MLflow ResponsesAgent natywnie obsługuje pola custom_inputs i custom_outputs. Dostęp do niestandardowych danych wejściowych można uzyskać za pośrednictwem request.custom_inputs we wszystkich przykładach połączonych powyżej w sekcji ResponsesAgent Examples (Przykłady odpowiedzi).
Ostrzeżenie
Aplikacja oceny agenta nie obsługuje renderowania śladów dla agentów z dodatkowymi polami wejściowymi.
Zapoznaj się z poniższymi notesami, aby dowiedzieć się, jak ustawić niestandardowe dane wejściowe i wyjściowe.
Podaj custom_inputs w środowisku zabaw dla sztucznej inteligencji i przejrzyj aplikację
Jeśli agent akceptuje dodatkowe dane wejściowe przy użyciu custom_inputs pola, możesz ręcznie podać te dane wejściowe zarówno w środowisku zabaw dla sztucznej inteligencji, jak i w aplikacji do przeglądu.
W aplikacji Plac Zabaw AI lub Aplikacja Przegląd Agenta wybierz ikonę koła zębatego
Włącz custom_inputs.
Podaj obiekt JSON zgodny ze zdefiniowanym schematem wejściowym agenta.
Określanie niestandardowych schematów modułu pobierania
Agenci sztucznej inteligencji często używają modułów pobierania do znajdowania i wykonywania zapytań dotyczących danych bez struktury z indeksów wyszukiwania wektorowego. Na przykład narzędzia do pobierania i śledzenia można znaleźć w temacie Tworzenie i śledzenie narzędzi do pobierania danych nieustrukturyzowanych.
Śledź te detektory w swoim agencie za pomocą obszarów MLflow RETRIEVER, aby włączyć funkcje produktów Databricks, w tym:
- Automatyczne wyświetlanie linków do pobranych dokumentów źródłowych w interfejsie użytkownika środowiska zabaw sztucznej inteligencji
- Automatyczne uruchamianie oceny ugruntowania i istotności kryteriów w procesie ewaluacji agenta
Notatka
Databricks zaleca używanie narzędzi pobierania dostarczanych przez pakiety Databricks AI Bridge, takie jak databricks_langchain.VectorSearchRetrieverTool i databricks_openai.VectorSearchRetrieverTool, ponieważ są one już zgodne ze schematem pobierania MLflow. Sprawdź Lokalnie opracuj narzędzia do wyszukiwania wektorowego przy użyciu mostka AI.
Jeśli agent zawiera zakresy pobierania z niestandardowym schematem, wywołaj mlflow.models.set_retriever_schema metodę podczas definiowania agenta w kodzie. Mapuje to kolumny wyjściowe retrievera na oczekiwane pola MLflow (primary_key, text_column, doc_uri).
import mlflow
# Define the retriever's schema by providing your column names
# For example, the following call specifies the schema of a retriever that returns a list of objects like
# [
# {
# 'document_id': '9a8292da3a9d4005a988bf0bfdd0024c',
# 'chunk_text': 'MLflow is an open-source platform, purpose-built to assist machine learning practitioners...',
# 'doc_uri': 'https://mlflow.org/docs/latest/index.html',
# 'title': 'MLflow: A Tool for Managing the Machine Learning Lifecycle'
# },
# {
# 'document_id': '7537fe93c97f4fdb9867412e9c1f9e5b',
# 'chunk_text': 'A great way to get started with MLflow is to use the autologging feature. Autologging automatically logs your model...',
# 'doc_uri': 'https://mlflow.org/docs/latest/getting-started/',
# 'title': 'Getting Started with MLflow'
# },
# ...
# ]
mlflow.models.set_retriever_schema(
# Specify the name of your retriever span
name="mlflow_docs_vector_search",
# Specify the output column name to treat as the primary key (ID) of each retrieved document
primary_key="document_id",
# Specify the output column name to treat as the text content (page content) of each retrieved document
text_column="chunk_text",
# Specify the output column name to treat as the document URI of each retrieved document
doc_uri="doc_uri",
# Specify any other columns returned by the retriever
other_columns=["title"],
)
Notatka
Kolumna doc_uri jest szczególnie ważna podczas oceniania wydajności programu retriever.
doc_uri jest głównym identyfikatorem dokumentów zwracanych przez narzędzie wyszukujące, co umożliwia porównywanie ich z zestawami oceny danych rzeczywistych. Zobacz Zestawy ewaluacyjne (MLflow 2).
Uwagi dotyczące wdrażania
Przygotowywanie do obsługi modeli usługi Databricks
Usługa Databricks wdraża ResponsesAgentpliki w środowisku rozproszonym w usłudze Databricks Model Serving. Oznacza to, że podczas konwersacji wieloeściowej ta sama replika obsługująca może nie obsługiwać wszystkich żądań. Zwróć uwagę na następujące implikacje dotyczące zarządzania stanem agenta:
Unikaj buforowania lokalnego
ResponsesAgent: podczas wdrażania elementu nie zakładaj, że ta sama replika obsługuje wszystkie żądania w konwersacji wieloeściowej. Zrekonstruuj stan wewnętrzny, używając schematu słownikowegoResponsesAgentRequestdla każdej iteracji.stan bezpieczny wątkowo: projektuj stan agenta, aby stan był bezpieczny wątkowo, zapobiegając konfliktom w środowiskach wielowątkowych.
Zainicjuj stan w funkcji
predict: za każdym razem, kiedy wywoływana jest funkcjapredict, a nie podczas inicjowaniaResponsesAgent. Przechowywanie stanu na poziomieResponsesAgentmoże spowodować przeciek informacji między konwersacjami i powodować konflikty, ponieważ pojedyncza replikaResponsesAgentmoże obsługiwać żądania z wielu konwersacji.
Parametryzowanie kodu na potrzeby wdrażania w środowiskach
Parametryzowanie kodu agenta w celu ponownego użycia tego samego kodu agenta w różnych środowiskach.
Parametry to pary klucz-wartość definiowane w słowniku języka Python lub pliku .yaml.
Aby skonfigurować kod, utwórz ModelConfig element przy użyciu słownika języka Python lub .yaml pliku.
ModelConfig to zestaw parametrów typu klucz-wartość, który umożliwia elastyczne zarządzanie konfiguracją. Na przykład można użyć słownika podczas tworzenia oprogramowania, a następnie przekonwertować go na plik .yaml na potrzeby wdrożenia produkcyjnego i CI/CD.
Poniżej przedstawiono przykład ModelConfig:
llm_parameters:
max_tokens: 500
temperature: 0.01
model_serving_endpoint: databricks-meta-llama-3-3-70b-instruct
vector_search_index: ml.docs.databricks_docs_index
prompt_template: 'You are a hello world bot. Respond with a reply to the user''s
question that indicates your prompt template came from a YAML file. Your response
must use the word "YAML" somewhere. User''s question: {question}'
prompt_template_input_vars:
- question
W kodzie agenta możesz odwołać się do konfiguracji domyślnej (programowania) z pliku .yaml lub słownika:
import mlflow
# Example for loading from a .yml file
config_file = "configs/hello_world_config.yml"
model_config = mlflow.models.ModelConfig(development_config=config_file)
# Example of using a dictionary
config_dict = {
"prompt_template": "You are a hello world bot. Respond with a reply to the user's question that is fun and interesting to the user. User's question: {question}",
"prompt_template_input_vars": ["question"],
"model_serving_endpoint": "databricks-meta-llama-3-3-70b-instruct",
"llm_parameters": {"temperature": 0.01, "max_tokens": 500},
}
model_config = mlflow.models.ModelConfig(development_config=config_dict)
# Use model_config.get() to retrieve a parameter value
# You can also use model_config.to_dict() to convert the loaded config object
# into a dictionary
value = model_config.get('sample_param')
Następnie, podczas rejestrowania agenta, określ parametr model_config jako log_model, aby określić niestandardowy zestaw parametrów do użycia podczas ładowania zalogowanego agenta. Zobacz dokumentację MLflow — ModelConfig.
Używanie synchronicznego kodu lub wzorców wywołań zwrotnych
Aby zapewnić stabilność i zgodność, użyj synchronicznego kodu lub wzorców opartych na wywołaniu zwrotnym w implementacji agenta.
Usługa Azure Databricks automatycznie zarządza komunikacją asynchroniczną w celu zapewnienia optymalnej współbieżności i wydajności podczas wdrażania agenta. Wprowadzenie niestandardowych pętli zdarzeń lub struktur asynchronicznych może prowadzić do błędów, takich jak RuntimeError: This event loop is already running and caused unpredictable behavior.
Usługa Azure Databricks zaleca unikanie programowania asynchronicznego, takich jak używanie asyncio lub tworzenie niestandardowych pętli zdarzeń podczas opracowywania agentów.