Erstellen eines KI-Agents

Wichtig

Dieses Feature befindet sich in der Public Preview.

In diesem Artikel erfahren Sie, wie Sie einen toolanrufenden KI-Agent mit dem Mosaik AI Agent Framework erstellen.

Erfahren Sie, wie Sie einem Agent Tools geben und damit beginnen, mit ihnen zu chatten, um den Agent zu testen und zu prototypisieren. Nachdem Sie mit der Prototyperstellung des Agents fertig sind, exportieren Sie den Python-Code, der den Agent definiert, um Ihren KI-Agent zu durchlaufen und bereitzustellen.

Anforderungen

Erstellen von KI-Agententools

Der erste Schritt besteht darin, ein Tool zu erstellen, das Ihrem Agenten übergeben werden soll. Agents verwenden Tools zum Ausführen von Aktionen neben der Sprachgenerierung, z. B. zum Abrufen strukturierter oder unstrukturierter Daten, zum Ausführen von Code oder zum Kommunizieren mit Remotediensten (z. B. Senden einer E-Mail oder Slack-Nachricht).

Weitere Informationen zum Erstellen von Agenttools finden Sie unter Erstellen von KI-Agent-Tools.

Erstellen Sie für dieses Handbuch eine Unity-Katalogfunktion , die Python-Code ausführt. Ein Agent kann dieses Tool verwenden, um Python auszuführen, das ihm von einem Benutzer gegeben wurde oder vom Agent selbst geschrieben wurde.

Führen Sie den folgenden Code in einer Notebook-Zelle aus. Es verwendet die %sql Notebook-Magie, um eine Unity Catalog-Funktion namens python_exec zu erstellen.

%sql
CREATE OR REPLACE FUNCTION
main.default.python_exec (
code STRING COMMENT 'Python code to execute. Remember to print the final result to stdout.'
)
RETURNS STRING
LANGUAGE PYTHON
DETERMINISTIC
COMMENT 'Executes Python code in the sandboxed environment and returns its stdout. The runtime is stateless and you can not read output of the previous tool executions. i.e. No such variables "rows", "observation" defined. Calling another tool inside a Python code is NOT allowed. Use standard python libraries only.'
AS $$
import sys
from io import StringIO
sys_stdout = sys.stdout
redirected_output = StringIO()
sys.stdout = redirected_output
exec(code)
sys.stdout = sys_stdout
return redirected_output.getvalue()
$$

Prototyp von Tool-Anruf-Agenten im KI-Playground

Verwenden Sie nach dem Erstellen der Unity-Katalogfunktion den KI-Playground , um dem Tool eine LLM zu geben und den Agent zu testen. Der KI-Playground bietet einen Sandkasten zum Erproben der Prototypen von Tool-Anruf-Agents.

Wenn Sie mit dem KI-Agenten zufrieden sind, können Sie ihn exportieren, um ihn in Python weiterzuentwickeln, oder ihn unverändert als Model Serving-Endpunkt bereitstellen.

Hinweis

Unity Catalog und serverloses Computing, Mosaic AI Agent Framework und entweder Pay-per-Token-Foundation-Modelle oder externe Modelle müssen im aktuellen Arbeitsbereich verfügbar sein, um Agenten in KI-Playground zu prototypisieren.

So erstellen Sie einen Prototyp eines Endpunkts für Toolaufrufe.

  1. Wählen Sie im Playground ein Modell mit aktivierter Bezeichnung "Extras " aus.

    Auswählen eines LLM für Toolaufrufe

  2. Wählen Sie Tools aus, und geben Sie im Dropdownmenü Ihre Unity-Katalog-Funktionsnamen an:

    Auswählen eines Tools

  3. Chatten Sie, um die aktuelle Kombination aus LLM, Tools und Systemsansagen zu testen und Variationen auszuprobieren.

    Prototyp des LLM

Exportieren und Bereitstellen von KI-Playground-Agenten

Nachdem Sie Tools hinzugefügt und den Agenten getestet haben, exportieren Sie den Playground-Agenten in Python-Notizbücher:

  1. Klicken Sie auf " Exportieren ", um Python-Notizbücher zu generieren, die Ihnen beim Entwickeln und Bereitstellen des KI-Agents helfen.

    Nach dem Exportieren des Agentcodes werden drei Dateien in Ihrem Arbeitsbereich gespeichert:

    • agent Notebook: Enthält Python-Code, der Ihren Agent mithilfe von LangChain definiert.
    • driver Notebook: Enthält Python-Code zum Protokollieren, Ablaufverfolgen, Registrieren und Bereitstellen des KI-Agents mithilfe von Mosaik AI Agent Framework.
    • config.yml: Enthält Konfigurationsinformationen zu Ihrem Agenten, einschließlich Tooldefinitionen.
  2. Öffnen Sie das agent Notebook, um den LangChain-Code anzuzeigen, der Ihren Agent definiert, verwenden Sie dieses Notizbuch, um den Agent programmgesteuert zu testen und zu durchlaufen, z. B. das Definieren weiterer Tools oder das Anpassen der Parameter des Agenten.

    Hinweis

    Der exportierte Code hat möglicherweise ein anderes Verhalten als Ihre KI-Playgroundsitzung. Databricks empfiehlt, die exportierten Notebooks zum Durchlaufen und Debuggen weiter auszuführen, die Agentenqualität auszuwerten und dann den Agenten für die Freigabe für andere bereitzustellen.

  3. Wenn Sie mit den Ergebnissen des Agenten zufrieden sind, können Sie das driver Notebook ausführen, um den Agenten zu protokollieren und auf einem Model Serving-Endpunkt bereitzustellen.

Definieren eines Agents im Code

Zusätzlich zum Generieren von Agent-Code aus AI Playground können Sie auch einen Agent selbst definieren, indem Sie Frameworks wie LangChain oder Python-Code verwenden. Um einen Agenten mit Agent Framework einzusetzen, muss seine Eingabe einem der unterstützten Eingabe- und Ausgabeformate entsprechen.

Verwenden von Parametern zum Konfigurieren des Agenten

Im Agent Framework können Sie Parameter verwenden, um zu steuern, wie Agents ausgeführt werden. Auf diese Weise können Sie schnell durch unterschiedliche Merkmale Ihres Agents iterieren, ohne den Code zu ändern. Parameter sind Schlüsselwertpaare, die Sie in einem Python-Wörterbuch oder einer .yaml Datei definieren.

Um den Code zu konfigurieren, erstellen Sie ein ModelConfig, einen Satz von Schlüsselwertparametern. ModelConfig ist entweder ein Python-Wörterbuch oder eine .yaml Datei. Sie können z. B. während der Entwicklung ein Wörterbuch verwenden und dann in eine .yaml Datei für die Produktionsbereitstellung und CI/CD konvertieren. Ausführliche Informationen zu ModelConfig finden Sie in der MLflow-Dokumentation.

Unten ist ein Beispiel ModelConfig angegeben.

llm_parameters:
  max_tokens: 500
  temperature: 0.01
model_serving_endpoint: databricks-dbrx-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

Verwenden Sie eine der folgenden Optionen, um die Konfiguration aus Ihrem Code aufzurufen:

# 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-dbrx-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
value = model_config.get('sample_param')

Festlegen des Retriever-Schemas

KI-Agents verwenden häufig Retriever, einen Agent-Tooltyp, der relevante Dokumente mithilfe eines Vector Search-Index findet und zurückgibt. Weitere Informationen zu Retrievern finden Sie unter Erstellen eines Vektorsuch-Retriever-Tools.

Um sicherzustellen, dass Retriever ordnungsgemäß nachverfolgt werden, rufen Sie mlflow.models.set_retriever_schema auf, wenn Sie Ihren Agent im Code definieren. Dient set_retriever_schema zum Zuordnen der Spaltennamen in der zurückgegebenen Tabelle zu den erwarteten Feldern von MLflow, z primary_key. B. , text_columnund doc_uri.

# Define the retriever's schema by providing your column names
# These strings should be read from a config dictionary
mlflow.models.set_retriever_schema(
    name="vector_search",
    primary_key="chunk_id",
    text_column="text_column",
    doc_uri="doc_uri"
    # other_columns=["column1", "column2"],
)

Hinweis

Die doc_uri Spalte ist besonders wichtig beim Auswerten der Leistung des Retrievers. doc_uri ist der Hauptbezeichner für dokumente, die vom Retriever zurückgegeben werden, sodass Sie sie mit den Bewertungssätzen für die Bodenwahrung vergleichen können. Siehe Auswertungssätze

Sie können auch zusätzliche Spalten im Schema des Retrievers angeben, indem Sie eine Liste der Spaltennamen mit dem other_columns Feld angeben.

Wenn Sie über mehrere Retriever verfügen, können Sie mehrere Schemas definieren, indem Sie eindeutige Namen für jedes Retriever-Schema verwenden.

Unterstützte Eingabe- und Ausgabeformate

Agent Framework verwendet MLflow-Modellsignaturen zum Definieren von Eingabe- und Ausgabeschemas für Agents. Mosaik AI Agent Framework-Features erfordern einen minimalen Satz von Eingabe-/Ausgabefeldern, um mit Features wie der Review-App und dem AI-Playground zu interagieren. Weitere Informationen finden Sie unter Definieren des Eingabe- und Ausgabeschemas eines Agents.

Beispielnotebooks

Diese Notizbücher erstellen eine einfache "Hello, world"-Kette, um zu veranschaulichen, wie eine Kettenanwendung in Databricks erstellt wird. Im ersten Beispiel wird eine einfache Kette erstellt. Das zweite Beispielnotizbuch veranschaulicht, wie Sie Parameter verwenden, um Codeänderungen während der Entwicklung zu minimieren.

Einfaches Kettennotizbuch

Notebook abrufen

Einfaches Kettentreibernotizbuch

Notebook abrufen

Parametrisiertes Kettennotizbuch

Notebook abrufen

Parametrisiertes Kettentreibernotizbuch

Notebook abrufen

Nächste Schritte