Definición del esquema de entrada y salida de un agente
Las firmas de modelo de MLflow definen los requisitos de esquema de entrada y salida para el agente de IA. La firma del modelo indica a los componentes internos y externos cómo interactuar con el agente. La firma del modelo es una comprobación de validación para asegurarse de que las entradas cumplen los requisitos de esquema.
Por ejemplo, para usar la aplicación de revisión evaluación del agente, el agente debe cumplir el esquema de entrada de evaluación del agente.
Esquemas de entrada admitidos
Mosaic AI Agent Framework admite los siguientes esquemas de entrada.
Esquema de finalización de chat de OpenAI
Nota:
Databricks recomienda el esquema de finalización del chat de OpenAI porque se usa ampliamente e interoperable con muchos marcos y aplicaciones de agente. Si el esquema de finalización del chat de OpenAI no satisface sus necesidades, puede definir su propio esquema. Consulte Esquemas de agente personalizados.
(Recomendado) Databricks recomienda usar el esquema de finalización del chat de OpenAI. El esquema de finalización del chat de OpenAI debe tener una matriz de objetos como parámetro
messages
. Este formato es el mejor para las aplicaciones RAG.question = { "messages": [ { "role": "user", "content": "What is Retrieval-Augmented Generation?", }, { "role": "assistant", "content": "RAG, or Retrieval Augmented Generation, is a generative AI design pattern that combines a large language model (LLM) with external knowledge retrieval. This approach allows for real-time data connection to generative AI applications, improving their accuracy and quality by providing context from your data to the LLM during inference. Databricks offers integrated tools that support various RAG scenarios, such as unstructured data, structured data, tools & function calling, and agents.", }, { "role": "user", "content": "How to build RAG for unstructured data", }, ] }
SplitChatMessageRequest
SplitChatMessagesRequest
se recomienda para las aplicaciones de chat multiturno, especialmente cuando desea administrar la consulta y el historial actuales por separado.
question = {
"query": "What is MLflow",
"history": [
{
"role": "user",
"content": "What is Retrieval-augmented Generation?"
},
{
"role": "assistant",
"content": "RAG is"
}
]
}
Lenguaje de expresiones langchain
Si el agente usa LangChain, puede escribir la cadena en lenguaje de expresiones LangChain. En el código de definición de cadena, puede usar para itemgetter
obtener los mensajes o query
history
objetos en función del formato de entrada.
Esquemas de salida admitidos
Mosaic AI Agent Framework admite los siguientes esquemas de salida.
ChatCompletionResponse
(Recomendado) Se recomienda ChatCompletionResponse para los clientes con interoperabilidad de formato de respuesta openAI.
LangChain: ChatCompletionsOutputParser
Si el agente usa LangChain, use ChatCompletionsOutputParser()
desde MLflow como paso de cadena final. Esto da formato al mensaje LangChain AI en un formato compatible con el agente.
from mlflow.langchain.output_parsers import ChatCompletionsOutputParser
chain = (
{
"user_query": itemgetter("messages")
| RunnableLambda(extract_user_query_string),
"chat_history": itemgetter("messages") | RunnableLambda(extract_chat_history),
}
| RunnableLambda(DatabricksChat)
| ChatCompletionsOutputParser()
)
PyFunc: anota las clases de entrada y salida
Si usa PyFunc, Databricks recomienda utilizar sugerencias de tipo para anotar la función predict()
con clases de datos de entrada y salida que sean subclases de las clases definidas en mlflow.models.rag_signatures
.
Puede construir un objeto de salida a partir de la clase de datos dentro predict()
de . El objeto que se devuelve debe transformarse en una representación de diccionario para garantizar que se pueda serializar.
from mlflow.models.rag_signatures import ChatCompletionRequest, ChatCompletionResponse, ChainCompletionChoice, Message
class RAGModel(PythonModel):
...
def predict(self, context, model_input: ChatCompletionRequest) -> ChatCompletionResponse:
...
return asdict(ChatCompletionResponse(
choices=[ChainCompletionChoice(message=Message(content=text))]
))
Firmas explícitas e inferidas
MLflow puede deducir el esquema de entrada y salida del agente en tiempo de ejecución y crear automáticamente una firma. Si usa esquemas de entrada y salida admitidos, las firmas deducidas son compatibles con Agent Framework. Para obtener información sobre los esquemas admitidos, consulte Esquemas de entrada admitidos.
Sin embargo, si usa un esquema de agente personalizado, debe definir explícitamente la firma del modelo según las instrucciones de Esquemas de agente personalizados.
Esquemas de agente personalizados
Puede personalizar el esquema de un agente para pasar y devolver campos adicionales hacia y desde el agente mediante la creación de una subclase de un esquema de entrada y salida admitidos. A continuación, agregue las claves custom_inputs
adicionales y custom_outputs
para contener los campos adicionales. Consulte ejemplos de código para Pyfunc y Langchain y un método basado en la interfaz de usuario para usar entradas personalizadas.
Para usar el SDK, las databricks-agents
interfaces de usuario de cliente de Databricks, como AI Playground y la aplicación de revisión, y otras características de Mosaic AI Agent Framework, el esquema del agente debe cumplir los siguientes requisitos:
- El agente debe usar
mlflow
la versión 2.17.1 o superior. - En el cuaderno del agente, marque campos adicionales agregados en la subclase como
Optional
y asigne valores predeterminados. - En el cuaderno del controlador, cree un
ModelSignature
usoinfer_signature
con instancias de las subclases. - En el cuaderno del controlador, cree un ejemplo de entrada llamando a
asdict
en la subclase.
Esquemas personalizados de PyFunc
Además de los requisitos anteriores, los agentes basados en PyFunc también deben cumplir los siguientes requisitos para interactuar con las características del agente de Mosaic AI.
Requisitos de esquema personalizado de PyFunc
En el cuaderno del agente, las funciones de predicción y predicción de flujos deben cumplir los siguientes requisitos:
- Tenga sugerencias de tipo para la subclase de entrada.
- Use la notación de puntos para acceder a los campos dataclass (por ejemplo, use
model_input.custom_input.id
en lugar demodel_input["custom_inputs"]
). - Devolver
dictionary
. Puede llamar aasdict
en una instancia de la subclase para dar formato a la devolución como diccionario.
Los cuadernos siguientes muestran un ejemplo de esquema personalizado mediante PyFunc.
Cuaderno del agente de esquema personalizado de PyFunc
Cuaderno del controlador de esquema personalizado de PyFunc
Esquemas personalizados de Langchain
Los cuadernos siguientes muestran un ejemplo de esquema personalizado mediante LangChain. Puede modificar la función wrap_output en los cuadernos para analizar y extraer información de la secuencia de mensajes.
Cuaderno del agente de esquema personalizado langchain
Cuaderno del controlador de esquema personalizado langchain
Proporcionar custom_inputs
en la aplicación ai Playground y la aplicación de revisión del agente
Si define un esquema de agente personalizado con entradas adicionales mediante el custom_inputs
campo , puede proporcionar manualmente estas entradas tanto en ai Playground como en la aplicación de revisión del agente. Si no se proporciona ninguna entrada personalizada, el agente usa los valores predeterminados especificados en el esquema.
En ai Playground o la aplicación de revisión del agente, seleccione el icono de engranaje .
Habilite custom_inputs.
Proporcione un objeto JSON que coincida con el esquema de entrada definido del agente.
El objeto JSON debe coincidir con el esquema de entrada del agente. Por ejemplo, si tiene una custom_inputs
clase de datos definida como se indica a continuación:
@dataclass
class CustomInputs():
id: int = 0
user: str = "default"
A continuación, la cadena JSON que escriba en el campo custom_inputs debe proporcionar valores para id
y user
, como se muestra en el ejemplo siguiente:
{
"id": 123
"user": "dev_test",
}