Hinweis:

AI-Agent mit Multi-Agent Communication Protocol-Server zur Rechnungsauflösung erstellen

Einführung

Unternehmen, die sich mit einer großen Anzahl von Produkten befassen - wie z. B. Händler, Branchen und Einzelhandelsketten - stehen oft vor der Herausforderung, Produkte auf der Grundlage ungenauer, unvollständiger oder unterschiedlicher Textbeschreibungen zu identifizieren. In Umgebungen, in denen Daten manuell eingegeben werden, können Tippfehler, Abkürzungen und verschiedene Handelsnamen es schwierig machen, Artikel in Systemen wie Enterprise Resource Planning (ERP), Customer Relationship Management (CRM) und E-Commerce-Plattformen korrekt zu identifizieren.

In diesem Szenario besteht ein allgemeiner Bedarf an Tools, die Folgendes können:

In diesem Tutorial erfahren Sie, wie Sie einen KI-Agent erstellen, der auf die Lösung von Inkonsistenzen bei Kundenretourenrechnungen spezialisiert ist. Der Agent kann mit einem MCP-Server interagieren, der Tools für Vektorsuche und Rechnungsabruf bereitstellt, sodass der Agent automatisch die ursprüngliche Debitorenrechnung des Unternehmens basierend auf den vom Kunden bereitgestellten Informationen finden kann.

Ein MCP Server (Model Context Protocol) ist eine Softwarekomponente, die für die Vermittlung der Kommunikation zwischen intelligenten Agents und externen Services über ein standardisiertes Protokoll aus Nachrichten und Tools verantwortlich ist. Es fungiert als Brücke zwischen Sprachmodellen (LLMs) und vorhandenen APIs, sodass KI-Agenten auf bestimmte Funktionen von Legacy-Systemen zugreifen können, ohne sie umschreiben oder direkt anpassen zu müssen.

Wie funktioniert es?

Der MCP-Server:

Nutzung mit Legacy-Anwendungen

Legacy-Anwendungen bieten häufig bereits Funktionalität über Datenbanken, Dateien oder interne APIs. Mit einem MCP-Server können Sie:

Vorteile

Dieser Agent basiert auf einem generativen KI-Sprachmodell von Oracle Cloud Infrastructure (OCI) und lässt sich in dynamisch deklarierte Tools integrieren, die von einem MCP-Server verwaltet werden.

Bei der Integration dieser beiden Komponenten ermöglicht das System einen Agent, der auf Oracle LLM basiert:

Dieser modulare Aufbau ermöglicht die Wiederverwendbarkeit und eine einfache Weiterentwicklung des Systems zu anderen Domains als Rechnungen.

Ziele

Voraussetzungen

Installieren Sie die requirements.txt mit:

pip install -r requirements.txt

Aufgabe 1: Oracle Database 23ai erstellen (Immer kostenlos)

In dieser Aufgabe lernen wir, wie Sie eine Oracle Database 23ai im Modus Immer kostenlos bereitstellen. Diese Version bietet eine vollständig verwaltete Umgebung, ideal für Entwicklung, Tests und Lernen, ohne zusätzliche Kosten.

  1. Melden Sie sich bei der OCI-Konsole an, navigieren Sie zu Oracle Database, Autonomous Database, und klicken Sie auf Autonomous Database-Instanz erstellen.

  2. Geben Sie folgende Informationen ein.

    • Datenbankname: Geben Sie einen identifizierenden Namen für die Instanz ein.
    • Workload-Typ: Wählen Sie je nach Bedarf Data Warehouse oder Transaktionsverarbeitung aus.
    • Compartment: Wählen Sie ein entsprechendes Compartment aus, um Ihre Ressourcen zu organisieren.
  3. Wählen Sie Immer kostenlos aus, um sicherzustellen, dass die Instanz kostenlos bereitgestellt wird.

  4. Erstellen Sie ein sicheres Kennwort für den Benutzer ADMIN, das für den Zugriff auf die Datenbank verwendet wird.

  5. Prüfen Sie die Einstellungen, und klicken Sie auf Autonomous Database erstellen. Warten Sie einige Minuten, bis die Instanz bereitgestellt und zur Verwendung verfügbar ist.

Aufgabe 2: Skript zum Erstellen der Autonomous Database-Tabelle ausführen

Bereiten Sie die Datenbank für unseren Anwendungsfall vor. Laden Sie das SQL-Skript hier herunter, und führen Sie es aus: script.sql, das drei wesentliche Tabellen (PRODUCTS, INVOICE und ITEM_INVOICE) für das Szenario der Rechnungsabstimmung mit KI-Agents erstellt.

  1. Navigieren Sie zur OCI-Konsole, navigieren Sie zu Oracle Database, Autonomous Database, und klicken Sie auf den Namen der neu erstellten Instanz.

  2. Klicken Sie auf Database Actions und SQL, um die SQL-Konsole im Browser zu öffnen.

  3. Laden Sie die Datei script.sql herunter, öffnen Sie sie, und fügen Sie den gesamten Inhalt in den SQL-Konsoleneditor ein.

  4. Klicken Sie auf Ausführen, oder drücken Sie Strg+Eingabetaste. Warten Sie auf die Bestätigung, dass die Befehle erfolgreich ausgeführt wurden.

  5. Führen Sie die folgenden Befehle aus, um zu prüfen, ob die Tabellen erstellt wurden.

    SELECT table_name FROM user_tables;
    

Aufgabe 3: Beispieldaten in Tabellen einfügen

Fügen Sie Dummy-Daten ein, die ein echtes Szenario für die Anwendung von KI-Agents simulieren. Es werden zwei SQL-Skripts verwendet:

Diese Daten werden von KI-Agenten verwendet, um Inkonsistenzen in Retourenrechnungen zu beheben.

  1. Navigieren Sie zur OCI-Konsole, navigieren Sie zu Oracle Database, Autonomous Database, und klicken Sie auf den Namen der neu erstellten Instanz.

  2. Klicken Sie auf Database Actions und SQL, um die SQL-Konsole im Browser zu öffnen.

  3. Laden Sie den Inhalt der Datei insert_products_books.sql herunter, öffnen Sie ihn, und fügen Sie ihn in den SQL-Editor ein.

  4. Klicken Sie auf Ausführen, oder drücken Sie Strg+Eingabetaste.

  5. Laden Sie jetzt den Inhalt der Datei invoice_data_insert.sql herunter, öffnen Sie ihn, und fügen Sie ihn in den Editor ein.

  6. Klicken Sie auf Ausführen, oder drücken Sie Strg+Eingabetaste.

  7. Um die Daten zu prüfen, führen Sie den folgenden Befehl durch.

    SELECT * FROM PRODUCTS;
    SELECT * FROM INVOICE;
    SELECT * FROM ITEM_INVOICE;
    

Aufgabe 4: Funktion "Erweiterte Suche" in der Datenbank erstellen und kompilieren

Erstellen Sie eine PL/SQL-Funktion namens fn_advanced_search, die intelligente Suchen nach Schlüsselwörtern in Produktbeschreibungen durchführt. Diese Funktion wird von KI-Agents als Teil des Tools resolve_ean verwendet, mit dem sie den nächsten EAN-Code basierend auf der Beschreibung finden können, die ein Kunde im Retourenhinweis angegeben hat.

Was macht die Funktion?

Führen Sie die Schritte aus:

  1. Kopieren Sie das vollständige Skript similarity_search.sql, und fügen Sie es in die SQL-Konsole der autonomen Datenbank ein.

    Dazu gehört:

    • Die Tabelle products wird erstellt (falls noch nicht geschehen).
    • Textindex erstellen
    • Typen product_result und product_result_tab.
    • Die Funktion fn_advanced_search.
    • Optionale Tests.
  2. Führen Sie das vollständige Skript aus. Das Ergebnis muss Function created und Type created lauten.

  3. Führen Sie die folgende Abfrage aus, um die Funktion mit simulierten Beschreibungen zu testen.

    SELECT *
    FROM TABLE(fn_advanced_search('harry poter askaban'))
    ORDER BY similarity DESC;
    

Aufgabe 5: Vectorize-Produkte für die semantische Suche mit KI

In dieser Aufgabe ergänzen wir die erweiterte SQL-basierte Suche mit einem neuen Ansatz, der auf semantischen Vektoren basiert. Dies ist besonders nützlich für KI-Agenten, die Einbettungen (numerische Darstellungen von Phrasen) verwenden, um die Ähnlichkeit zwischen Produktbeschreibungen zu vergleichen - flexibler und intelligenter als Wort- oder phonetische Suchen.

Dazu verwenden wir das Python-Skript (process_vector_products.py), das eine Verbindung zur Oracle-Datenbank herstellt, die Produkte aus der Tabelle PRODUCTS extrahiert, ihre Beschreibungen in Vektoren (Einbettungen) umwandelt und einen Vektorindex mit der Oracle-Datenbank selbst erstellt.

Was macht das Drehbuch?

Hinweis: Die Einbettungen werden in Byte konvertiert, wobei np.float32.tobytes() als BLOB gespeichert werden soll. Um die Vektoren abzurufen, verwenden Sie np.frombuffer(blob, dtype=np.float32).

Mit diesem Format können zukünftige Ähnlichkeitssuchen direkt mit SQL oder durch Laden der Vektoren aus der Datenbank für Vorgänge mit np.dot, cosine_similarity oder Integration mit LLMs durchgeführt werden.

Dieses Skript generiert semantische Einbettungen für Produkte und schreibt diese Vektoren in die Oracle 23ai-Datenbank. Im Folgenden werden die wichtigsten Punkte hervorgehoben:

Skript ausführen:

Denken Sie daran, dass Oracle Wallet heruntergeladen und konfiguriert werden muss. Führen Sie sie im Terminal aus.

python process_vector_products.py

Fertig! Die Produkte in der Datenbank wurden vektorisiert.

Warum ist das wichtig?

Die Vektorsuche ist sehr effektiv, um Produkte zu finden, auch wenn die Beschreibung subjektiv, ungenau oder in natürlicher Sprache ist.

Code verstehen: LLM-Agent mit MCP-Server

Dieses Projekt besteht aus 3 Hauptkomponenten:

Verstehen Sie die Funktionalität jeder Komponente und heben Sie die wichtigsten Teile des Codes detailliert hervor.

Aufgabe 6: Modell und Einbettungen im MCP-Agent konfigurieren

Konfigurieren Sie das Sprachmodell und die Einbettungen, die vom Conversational Agent basierend auf dem MCP-Protokoll verwendet werden, mit OCI Generative AI-Services.

  1. Sprachmodell (LLM) konfigurieren

    Das Sprachmodell ist dafür verantwortlich, Nachrichten zu interpretieren, Antworten zu generieren und als Hauptgehirn des Agenten zu fungieren.

    • Konfigurieren Sie sie in der Datei main.py.

      from langchain_community.chat_models.oci_generative_ai import ChatOCIGenAI
      
      llm = ChatOCIGenAI(
          model_id="cohere.command-r-08-2024",
          service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
          compartment_id="ocid1.compartment.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
          auth_profile="DEFAULT",
          model_kwargs={"temperature": 0.1, "top_p": 0.75, "max_tokens": 2000}
      )
      
      Parameter Beschreibung
      model_id ID des generativen KI-Modells, z.B. cohere.command-r-08-2024
      service_endpoint Regionaler Endpunkt für generativen KI-Service
      compartment_id OCID des OCI-Compartments
      auth_profile Name des in der Datei ~/.oci/config konfigurierten Profils
      model_kwargs Temperatur, Top-p und Ansprechgröße
    • Verfügbare Modelle auflisten.

      • OCI-CLI verwenden:

        oci generative-ai model list --compartment-id <seu_compartment_id>
        
      • Python-SDK verwenden:

        from oci.generative_ai import GenerativeAiClient
        from oci.config import from_file
        
        config = from_file(profile_name="DEFAULT")
        client = GenerativeAiClient(config)
        
        models = client.list_models(compartment_id=config["compartment_id"])
        for model in models.data:
            print(model.display_name, model.model_id)
        
  2. Konfigurieren Sie Einbettungen für die semantische Suche.

    Die Suche nach ähnlichen Produkten oder kontextbezogenen Informationen hängt von Vektoreinbettungen ab.

    Beispiel für die Verwendung im Agent:

    @mcp.tool()
    def search_vectorized_product(description: str) -> dict:
        """
            Searches for a product by description using embeddings.
        """
        return sercher.search_similar_products(description)
    

    Ändern Sie die Parameter (product_search.py) wie unten dargestellt:

    
    class SimilarProductSearch:
        def __init__(
                self,
                top_k=5,
                minimum_distance=1.0,
                model_id="cohere.embed-english-light-v3.0",
                service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
                compartment_id="ocid1.compartment.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                auth_profile="DEFAULT",
                wallet_path="/WALLET_PATH/Wallet_oradb23ai",
                db_alias="oradb23ai_high",
                username="USER",
                password="Password"
        ):
    
    Parameter Beschreibung
    top_k Anzahl der zurückgegebenen Vorschläge.
    minimum_distance Maximale Entfernung, um relevante Ergebnisse zu berücksichtigen.
    model_id ID des Einbettungsmodells in der OCI (z.B. cohere.embed-english-light-v3.0).
    service_endpoint Regionaler OCI Generative AI-Endpunkt.
    compartment_id Compartment-OCID.
    auth_profile Profilname in der Datei ~/.oci/config.
    wallet_path Pfad zum Oracle Database 23ai Wallet.
    db_alias Datenbankalias.
    username Datenbankbenutzer.
    password Datenbankkennwort.

    MCP-Server konfigurieren:

    Genau wie bei der Ausführung des process_vector_products.py-Codes müssen Sie auch das Oracle Wallet für die Oracle Database 23ai-Datenbank konfigurieren.

    Ändern Sie die Parameter entsprechend Ihren Einstellungen:

    import os
    
    # Oracle Wallet settings
    WALLET_PATH = "/path/to/Wallet"
    DB_ALIAS = "oradb23ai_high"
    USERNAME = "admin"
    PASSWORD = "..."
    
    # Define the environment variable required for the Oracle client
    os.environ["TNS_ADMIN"] = WALLET_PATH
    

    Führen Sie dann die process_vector_products.py aus, um die Produkte in die Oracle Database 23ai zu vektorisieren.

    python process_vector_products.py
    

Damit können das LLM-Modell und die Einbettungen vom MCP-Agent mit LangGraph und LangChain verwendet werden.

  1. Führen Sie die Datei main.py mit dem folgenden Befehl aus.

    python main.py
    
  2. Wenn die Eingabeaufforderung Sie: angezeigt wird, geben Sie die folgende Anweisung ein.

    { "customer": "Customer 108",  "description": "Harry Poter askaban", "price": 82.26, "location": "SP"}
    

    Hinweis: Der Name des Buches Harry Potter und Azkaban ist falsch geschrieben, aber die Engine kann es problemlos finden.

    img.png

    img_1.png

    Beachten Sie, dass die Services ausgeführt wurden:

    fetch_vectorized_product
    resolve_ean
    search_invoices_by_criteria
    
  3. Geben Sie jetzt die folgende Anweisung ein.

    { "customer": "Customer 108",  "description": "Harry Poter askaban", "price": 82.26}
    

    Sie werden sehen, dass kein Ausgangsrechnungsdatensatz gefunden wurde. Dies liegt daran, dass der Standort der Schlüssel für die Suche nach einer Rechnung ist.

    img_2.png

  4. Geben Sie nun die folgende Anweisung ein.

    { "customer": "Customer 108",  "description": "Harry Poter", "location": "SP"}
    

    Diesmal geben wir den Standort ein, lassen aber den Stückpreis aus.

    img_3.png

    Und doch wurde die Rechnung gefunden. Dies liegt daran, dass der Preis nicht grundlegend ist, aber er hilft, die Lücke zu schließen, um durchsetzungsfähiger zu sein.

    Beispiele für Tests:

     { "customer": "Customer 108",  "description": "Harry Poter askaban", "price": 82.26, "location": "SP"}
    
     { "customer": "Customer 108",  "description": "Harry Poter askaban", "price": 82.26}
    
     { "customer": "Customer 108",  "description": "Harry Poter askaban", "location": "SP"}
    
     { "customer": "Customer 108",  "description": "Harry Poter askaban", "price": 82.26, "location": "RJ"}
    
     { "customer": "Customer 125",  "description": "Harry Potter Chamber", "price": 79.16, "location": "SP"}
    
     { "customer": "Customer 125",  "description": "Harry Potter Chamber", "price": 79.15, "location": "SP"}
    

Aufgabe 8: Beobachtbarkeit mit Phoenix anzeigen

Geben Sie in Ihrem Browser http://localhost:6006/ ein, um die Beobachtbarkeit mit Phoenix anzuzeigen.

img.png

img.png

img.png

Bestätigungen

Weitere Lernressourcen

Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.