Definir o schema de entrada e saída de um agente
Os agentes de IA devem aderir a requisitos específicos de entrada e saída schema para serem compatíveis com outros recursos no Azure Databricks. Este artigo explica como garantir que o seu agente de IA cumpra esses requisitos e como personalizar os dados de entrada e saída do agente schema, garantindo a compatibilidade.
O Mosaic AI usa de assinaturas de modelo MLflow para definir os requisitos de schema de entrada e saída de um agente. A assinatura do modelo informa aos componentes internos e externos como interagir com seu agente e valida que eles aderem ao schema.
conclusão do chat OpenAI schema (recomendado)
A Databricks recomenda usar o
Consulte a documentação do OpenAI para obter mais informações sobre a conclusão do bate-papo schema de entrada e saída schema.
Nota
O modelo de conclusão de chat schema da OpenAI é simplesmente um padrão para estruturar entradas e saídas de agentes. A implementação deste schema não envolve o uso de recursos ou modelos da OpenAI.
O MLflow fornece APIs convenientes para agentes do tipo LangChain e PyFunc, ajudando-o a criar agentes compatíveis com a conclusão do bate-papo schema.
Implemente a conclusão do bate-papo com LangChain
Se o seu agente usa LangChain, utilize o ChatCompletionOutputParser()
do MLflow para formatar a saída final do seu agente para garantir compatibilidade com a finalização da conversa schema. Se você usa o LangGraph, consulte esquemas personalizados do LangGraph.
from mlflow.langchain.output_parsers import ChatCompletionOutputParser
chain = (
{
"user_query": itemgetter("messages")
| RunnableLambda(extract_user_query_string),
"chat_history": itemgetter("messages") | RunnableLambda(extract_chat_history),
}
| RunnableLambda(DatabricksChat)
| ChatCompletionOutputParser()
)
Implemente a conclusão do bate-papo com o PyFunc
Se você usa o PyFunc, o Databricks recomenda escrever seu agente como uma subclasse de mlflow.pyfunc.ChatModel
. Este método oferece os seguintes benefícios:
Permite escrever código de agente compatível com o schema para conclusão de conversas usando classes Python tipadas.
Ao registrar o agente, o MLflow inferirá automaticamente uma assinatura compatível com a conclusão do chat, mesmo sem um
input_example
. Isso simplifica o processo de registro e implantação do agente. Consulte Ver assinatura do modelo durante o registo de logs.from dataclasses import dataclass 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 last_user_question_text.split(" "): 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, model_input=model_input) print(response)
Entradas e saídas personalizadas
A Databricks recomenda aderir às conclusões de bate-papo do OpenAI schema para a maioria dos casos de utilização de agentes.
No entanto, alguns cenários podem exigir entradas adicionais, como client_type
e session_id
, ou saídas, como links de origem de recuperação que não devem ser incluídos no histórico de bate-papo para interações futuras.
Para esses cenários, o Mosaic AI Agent Framework suporta ampliar os pedidos de conclusão de chat e as respostas do OpenAI com entradas e saídas personalizadas.
Veja os exemplos a seguir para saber como criar entradas e saídas personalizadas para agentes PyFunc e LangGraph.
Advertência
O aplicativo de revisão Avaliação do Agente atualmente não oferece suporte a rastreamentos de renderização para agentes com campos de entrada adicionais.
Esquemas personalizados do PyFunc
Os blocos de anotações a seguir mostram um exemplo de schema personalizado usando o PyFunc.
Caderno personalizado do agente PyFunc schema
Notebook do driver PyFunc personalizado schema
esquemas personalizados LangGraph
Os cadernos a seguir mostram um exemplo personalizado de schema usando o LangGraph. Você pode modificar a função wrap_output
nos blocos de anotações para analisar e extrair informações do fluxo de mensagens.
Notebook de agente personalizado schema do LangGraph
LangGraph notebook driver de schema personalizado
Forneça custom_inputs
no AI Playground e no aplicativo de revisão de agentes
Se o agente aceitar entradas adicionais usando o campo custom_inputs
, você poderá inserir manualmente estas entradas no AI Playground e no aplicativo de revisão do agente .
Tanto no AI Playground como na aplicação Agent Review, select o ícone de engrenagem .
Habilite custom_inputs.
Forneça um objeto JSON que corresponda ao schemade entrada definido pelo seu agente.
Esquemas de entrada e saída herdados
Os parâmetros de entrada SplitChatMessageRequest schema e de saída StringResponse schema atingiram o fim de vida útil. Se você estiver usando qualquer um desses esquemas herdados, o Databricks recomenda que você migre para o schemade conclusão de bate-papo recomendado.
SplitChatMessageRequest de entrada schema (obsoleto)
SplitChatMessagesRequest
permite-te passar a consulta atual e o histórico separadamente como entrada para o agente.
question = {
"query": "What is MLflow",
"history": [
{
"role": "user",
"content": "What is Retrieval-augmented Generation?"
},
{
"role": "assistant",
"content": "RAG is"
}
]
}
Saída de StringResponse schema (preterido)
StringResponse
permite-lhe devolver a resposta do agente como um objeto com um único campo de cadeia de caracteres content
.
{"content": "This is an example string response"}