Freigeben über


Definieren des Eingabe- und Ausgabeschemas eines Agents

MLflow-Modellsignaturen definieren die Eingabe- und Ausgabeschemaanforderungen für Ihren KI-Agent. Die Modellsignatur teilt internen und externen Komponenten mit, wie sie mit Ihrem Agent interagieren. Die Modellsignatur ist eine Überprüfungsprüfung, um sicherzustellen, dass Eingaben den Schemaanforderungen entsprechen.

Um beispielsweise die Agent Evaluation Review-App zu verwenden, muss Ihr Agent das Eingabeschema für die Agentauswertung einhalten.

Unterstützte Eingabeschemas

Mosaik AI Agent Framework unterstützt die folgenden Eingabeschemas.

OpenAI-Chatabschlussschema

Hinweis

Databricks empfiehlt das OpenAI-Chatabschlussschema, da es mit vielen Agent-Frameworks und -Anwendungen weit verbreitet und interoperabel ist. Wenn das OpenAI-Chatabschlussschema Ihre Anforderungen nicht erfüllt, können Sie Ihr eigenes Schema definieren. Siehe benutzerdefinierte Agentschemas.

  • (Empfohlen) Databricks empfiehlt die Verwendung des OpenAI-Chatabschlussschemas. Das OpenAI-Chatabschlussschema sollte ein Array von Objekten als messages Parameter aufweisen. Dieses Format eignet sich am besten für RAG-Anwendungen.

    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 wird für Multi-Turn-Chatanwendungen empfohlen, insbesondere, wenn Sie die aktuelle Abfrage und den aktuellen Verlauf separat verwalten möchten.

  question = {
      "query": "What is MLflow",
      "history": [
          {
              "role": "user",
              "content": "What is Retrieval-augmented Generation?"
          },
          {
              "role": "assistant",
              "content": "RAG is"
          }
      ]
  }

Langbundausdruckssprache

Wenn Ihr Agent LangChain verwendet, können Sie Ihre Kette in der LangChain-Ausdruckssprache schreiben. In Ihrem Kettendefinitionscode können Sie je nach Eingabeformat die itemgetter Nachrichten oder query history Objekte abrufen.

Unterstützte Ausgabeschemas

Mosaik AI Agent Framework unterstützt die folgenden Ausgabeschemas.

ChatCompletionResponse

(Empfohlen) ChatCompletionResponse wird für Kunden mit OpenAI-Antwortformatinteroperabilität empfohlen.

LangChain - ChatCompletionsOutputParser

Wenn Ihr Agent LangChain verwendet, verwenden Sie ChatCompletionsOutputParser() MLflow als letzten Kettenschritt. Dadurch wird die LangChain AI-Nachricht in ein agentkompatibles Format formatiert.


  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 – Kommentieren von Eingabe- und Ausgabeklassen

Wenn Sie PyFunc verwenden, empfiehlt Databricks die Verwendung von Typhinweisen, um die predict() Funktion mit Eingabe- und Ausgabedatenklassen zu kommentieren, die Unterklassen von Klassen sind, die in mlflow.models.rag_signatures definiert sind.

Sie können ein Ausgabeobjekt aus der Datenklasse innerhalb predict()erstellen. Das zurückgegebene Objekt muss in eine Wörterbuchdarstellung umgewandelt werden, um sicherzustellen, dass es serialisiert werden kann.


  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))]
        ))

Explizite und abgeleitete Signaturen

MLflow kann das Eingabe- und Ausgabeschema Ihres Agents zur Laufzeit ableiten und automatisch eine Signatur erstellen. Wenn Sie unterstützte Eingabe- und Ausgabeschemas verwenden, sind die abgeleiteten Signaturen mit dem Agent Framework kompatibel. Informationen zu unterstützten Schemas finden Sie unter "Unterstützte Eingabeschemas".

Wenn Sie jedoch ein benutzerdefiniertes Agentschema verwenden, müssen Sie Ihre Modellsignatur explizit gemäß den Anweisungen in benutzerdefinierten Agent-Schemas definieren.

Benutzerdefinierte Agentschemas

Sie können das Schema eines Agents anpassen, um zusätzliche Felder an den Agent zu übergeben und vom Agent zurückzugeben, indem Sie eine Unterklasse eines unterstützten Eingabe-/Ausgabeschemas erstellen. Fügen Sie dann die zusätzlichen Schlüssel custom_inputs hinzu, und custom_outputs fügen Sie die zusätzlichen Felder hinzu. Codebeispiele für Pyfunc und Langchain und eine UI-basierte Methode für die Verwendung von benutzerdefinierten Eingaben.

Um das databricks-agents SDK, Databricks-Client-UIs wie den AI Playground und die Review-App und andere Mosaik AI Agent Framework-Features zu verwenden, muss das Schema Ihres Agents die folgenden Anforderungen erfüllen:

  • Der Agent muss Version 2.17.1 oder höher verwenden mlflow .
  • Markieren Sie im Agent-Notizbuch zusätzliche Felder, die in Ihrer Unterklasse hinzugefügt wurden, und Optional weisen Sie Standardwerte zu.
  • Erstellen Sie im Treibernotizbuch eine ModelSignature Verwendung infer_signature mit Instanzen Ihrer Unterklassen.
  • Erstellen Sie im Treibernotizbuch ein Eingabebeispiel, indem Sie Ihre Unterklasse aufrufen asdict .

Benutzerdefinierte PyFunc-Schemas

Zusätzlich zu den oben genannten Anforderungen müssen PyFunc-basierte Agents auch die folgenden Anforderungen erfüllen, um mit Mosaik AI-Agent-Features zu interagieren.

Benutzerdefinierte Schemaanforderungen für PyFunc

Im Agent-Notizbuch müssen die Funktionen für die Vorhersage und Vorhersage des Datenstroms die folgenden Anforderungen erfüllen:

  • Geben Sie Eingabehinweise für Ihre Eingabeunterklasse ein.
  • Verwenden Sie die Punktnotation, um auf Datenklassenfelder zuzugreifen (z. B. anstelle model_input.custom_input.id von model_input["custom_inputs"]).
  • Eine dictionary zurückgeben. Sie können eine Instanz Ihrer Unterklasse aufrufen asdict , um die Rückgabe als Wörterbuch zu formatieren.

Die folgenden Notizbücher zeigen ein benutzerdefiniertes Schemabeispiel mit PyFunc.

Benutzerdefiniertes PyFunc-Schema-Agent-Notizbuch

Notebook abrufen

Benutzerdefiniertes PyFunc-Schematreibernotizbuch

Notebook abrufen

Benutzerdefinierte Langchain-Schemas

Die folgenden Notizbücher zeigen ein benutzerdefiniertes Schemabeispiel mit LangChain. Sie können die funktion wrap_output in den Notizbüchern ändern, um Informationen aus dem Nachrichtendatenstrom zu analysieren und zu extrahieren.

Benutzerdefiniertes Schema-Agent-Notizbuch für die Langchain

Notebook abrufen

Benutzerdefiniertes Schematreibernotizbuch der Langchain

Notebook abrufen

Bereitstellen custom_inputs in der AI Playground- und Agent-Überprüfungs-App

Wenn Sie ein benutzerdefiniertes Agent-Schema mit zusätzlichen Eingaben mithilfe des custom_inputs Felds definieren, können Sie diese Eingaben sowohl im AI-Playground als auch in der Agent-Überprüfungs-App manuell bereitstellen. Wenn keine benutzerdefinierten Eingaben bereitgestellt werden, verwendet der Agent die in Ihrem Schema angegebenen Standardwerte.

  1. Wählen Sie im KI-Playground oder in der Agent Review-App das Zahnradsymbol aus Zahnradsymbol.

  2. Aktivieren Sie custom_inputs.

  3. Stellen Sie ein JSON-Objekt bereit, das dem definierten Eingabeschema Ihres Agents entspricht.

    Stellen Sie custom_inputs im KI-Spielplatz bereit.

Das JSON-Objekt muss mit dem Eingabeschema des Agents übereinstimmen. Wenn Sie beispielsweise eine custom_inputs Datenklasse wie folgt definiert haben:

@dataclass
class CustomInputs():
  id: int = 0
  user: str = "default"

Anschließend muss die JSON-Zeichenfolge, die Sie in das Feld custom_inputs eingeben, Werte für id und user, wie im folgenden Beispiel gezeigt, bereitstellen:

{
  "id": 123
  "user": "dev_test",
}