Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
Databricks heeft de AI-agent schema's ChatModel
, SplitChatMessageRequest
, en StringResponse
afgeschaft. Databricks raadt aan om te migreren naar het aanbevolen ChatAgent
schema om agents te ontwerpen. Zie AI-agenten in code maken.
AI-agents moeten voldoen aan specifieke vereisten voor invoer- en uitvoerschema's om compatibel te zijn met andere functies in Azure Databricks.
Dit artikel legt uit hoe u gebruik kunt maken van de verouderde hulpmiddelen voor het creëren van agent-handtekeningen en interfaces: de ChatModel
interface, het SplitChatMessageRequest
invoerschema en het StringResponse
uitvoerschema.
Een verouderde ChatModel-agent maken
Belangrijk
Databricks raadt de ChatAgent
interface aan voor het maken van agents of generatie AI-apps. Als u wilt migreren van ChatModel naar ChatAgent, raadpleegt u de MLflow-documentatie : migreren van ChatModel naar ChatAgent.
ChatModel
is een verouderde interface voor het ontwerpen van agents in MLflow waarmee het ChatCompletion-schema van OpenAI wordt uitgebreid, zodat u compatibiliteit kunt onderhouden met platforms die de ChatCompletion-standaard ondersteunen bij het toevoegen van aangepaste functionaliteit. Zie MLflow: Aan de slag met ChatModel voor meer informatie.
Het ontwerpen van uw agent als subklasse van mlflow.pyfunc.ChatModel biedt de volgende voordelen:
- Hiermee schakelt u uitvoer van de streamingagent in wanneer u een serviceagent aanroept (omzeilt
{stream: true}
in de aanvraagbody). - Hiermee worden inferentietabellen van de AI-gateway automatisch ingeschakeld wanneer uw agent actief is, zodat u toegang krijgt tot verbeterde metadata van het aanvraaglogboek, zoals de naam van de aanvrager.
- Hiermee kunt u agentcode schrijven die compatibel is met het ChatCompletion-schema met behulp van getypte Python-klassen.
- MLflow bepaalt automatisch een signatuur die compatibel is met chat-completies bij het registreren van de agent, zelfs zonder een
input_example
. Dit vereenvoudigt het proces van het registreren en implementeren van de agent. Zie Modelhandtekening vaststellen tijdens het loggen.
De volgende code wordt het beste uitgevoerd in een Databricks-notebook. Notebooks bieden een handige omgeving voor het ontwikkelen, testen en itereren van uw agent.
De MyAgent
klasse breidt mlflow.pyfunc.ChatModel
uit en implementeert de vereiste predict
methode. Dit zorgt voor compatibiliteit met Mosaic AI Agent Framework.
De klasse bevat ook de optionele methoden _create_chat_completion_chunk
en predict_stream
voor het verwerken van streaming-uitvoer.
# Install the latest version of mlflow
%pip install -U mlflow
dbutils.library.restartPython()
import re
from typing import Optional, Dict, List, Generator
from mlflow.pyfunc import ChatModel
from mlflow.types.llm import (
# Non-streaming helper classes
ChatCompletionRequest,
ChatCompletionResponse,
ChatCompletionChunk,
ChatMessage,
ChatChoice,
ChatParams,
# Helper classes for streaming agent output
ChatChoiceDelta,
ChatChunkChoice,
)
class MyAgent(ChatModel):
"""
Defines a custom agent that processes ChatCompletionRequests
and returns ChatCompletionResponses.
"""
def predict(self, context, messages: list[ChatMessage], params: ChatParams) -> ChatCompletionResponse:
last_user_question_text = messages[-1].content
response_message = ChatMessage(
role="assistant",
content=(
f"I will always echo back your last question. Your last question was: {last_user_question_text}. "
)
)
return ChatCompletionResponse(
choices=[ChatChoice(message=response_message)]
)
def _create_chat_completion_chunk(self, content) -> ChatCompletionChunk:
"""Helper for constructing a ChatCompletionChunk instance for wrapping streaming agent output"""
return ChatCompletionChunk(
choices=[ChatChunkChoice(
delta=ChatChoiceDelta(
role="assistant",
content=content
)
)]
)
def predict_stream(
self, context, messages: List[ChatMessage], params: ChatParams
) -> Generator[ChatCompletionChunk, None, None]:
last_user_question_text = messages[-1].content
yield self._create_chat_completion_chunk(f"Echoing back your last question, word by word.")
for word in re.findall(r"\S+\s*", last_user_question_text):
yield self._create_chat_completion_chunk(word)
agent = MyAgent()
model_input = ChatCompletionRequest(
messages=[ChatMessage(role="user", content="What is Databricks?")]
)
response = agent.predict(context=None, messages=model_input.messages, params=None)
print(response)
Terwijl de agentklasse MyAgent
is gedefinieerd in één notebook, moet u een afzonderlijk stuurprogrammanotitieblok maken. Het stuurprogrammanotitieblok registreert de agent in modelregister en implementeert de agent met behulp van Model Serving.
Deze scheiding volgt de workflow die door Databricks wordt aanbevolen voor het loggen van modellen met behulp van de 'Models from Code'-methodologie van MLflow.
SplitChatMessageRequest-invoerschema (afgeschaft)
Met SplitChatMessagesRequest
kunt u de huidige query en geschiedenis afzonderlijk doorgeven als agentinvoer.
question = {
"query": "What is MLflow",
"history": [
{
"role": "user",
"content": "What is Retrieval-augmented Generation?"
},
{
"role": "assistant",
"content": "RAG is"
}
]
}
StringResponse-uitvoerschema (afgeschaft)
StringResponse
hiermee kunt u het antwoord van de agent retourneren als een object met één tekenreeksveld content
:
{"content": "This is an example string response"}