Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zur Registrierung für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. In der Übung ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
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:
-
Interpretieren Sie informelle oder falsche Beschreibungen, die von Benutzern bereitgestellt werden.
-
Schlagen Sie die ähnlichsten Produkte basierend auf semantischer Ähnlichkeit vor.
-
Garantieren Sie einen Rückfall mit herkömmlichen Algorithmen (z. B. Fuzzy Matching), wenn die semantische Suche keine relevanten Ergebnisse findet.
-
Integration mit APIs und automatisierten Abläufen intelligenter Agents.
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:
- Zeigt eine Gruppe benannter Tools an, die Aktionen darstellen oder Services, die Agents aufrufen können.
- Jedes Tool kann mit einer Datenbankfunktion, einer REST-API, einem Legacy-System oder einem programmierbaren Vorgang verbunden werden.
- Empfängt Agent-Befehle (im JSON-Format), führt den entsprechenden Service aus und gibt eine standardisierte Antwort zurück.
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:
- Verkapseln Sie Aufrufe von REST-Services, gespeicherten Prozeduren oder SQL-Abfragen.
- Machen Sie diese Services über eine einheitliche Kommunikationsschnittstelle für einen Agent zugänglich.
- Integrieren Sie ältere Systeme in moderne Architekturen, die auf dialogorientierter KI und RAG basieren.
Vorteile
- Wiederverwendung vorhandener Geschäftslogik.
- Es müssen keine Legacy-Systeme umgestaltet werden.
- Ermöglicht LLM-Agents die sichere und kontrollierte Interaktion mit externen Systemen.
- Erleichtert Tests, Versionierung und Modularität bei der Integration zwischen KI und Backend-Services.
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:
- Verwenden Sie remote gehostete Tools mit MCP.
- Intelligente Suche nach Produkten und EANs durchführen
- Suchen Sie entsprechende Debitorenrechnungen.
- Notieren Sie alles in Beobachtbarkeit mit Phoenix und OpenTelemetry.
Dieser modulare Aufbau ermöglicht die Wiederverwendbarkeit und eine einfache Weiterentwicklung des Systems zu anderen Domains als Rechnungen.
Ziele
-
Konfigurieren Sie einen AI-Agent mit LangGraph und LangChain, um mit strukturierten Prompts zu arbeiten.
-
Integrieren Sie diesen Agent mit dem Protokoll
stdio
in einen MCP-Server. -
Verwenden Sie Remote-Tools, die auf dem Server registriert sind, um:
- Vektorsuchen anhand von Produktbeschreibungen durchführen
- Identifizieren Sie den wahrscheinlichsten EAN-Code für ein Element.
- Suchen Sie anhand von Kriterien wie Kunde, Bundesland und Preis nach Originalrechnungen.
-
Überwachen Sie die Agent-Ausführung in Echtzeit mit Phoenix und OpenTelemetry.
-
Simulieren Sie eine echte Problemlösung basierend auf einer JSON-Eingabe, wie:
{ "customer": "Customer 43", "description": "Harry Potter", "price": 139.55, "location": "RJ" }
Voraussetzungen
-
Zugriff auf einen OCI-Mandanten zur Verwaltung Ihrer Cloud-Ressourcen. Sie können sich kostenlos unter
oracle.com/cloud/free
registrieren. -
Installieren Sie Python
version 3.12
oder höher. -
Zugriff auf einen OCI-Account mit aktiviertem OCI Generative AI-Service.
-
Installation und Konfiguration der Python-Langchain-Bibliothek.
-
Zugriff auf das
cohere.command-r-08-2024
-Modell mit OCI Generative AI. -
Installieren Sie Auxiliary Librarys:
oracledb
sentence_transformers
numpy
mcp-server-fastmcp
asyncio
langchain_core
langchain_community
mcp
langgraph
langchain_mcp_adapters
phoenix
(für Beobachtbarkeit mit OpenTelemetry)opentelemetry-sdk
,opentelemetry-exporter-otlp
-
Ein funktionaler MCP-Server mit den Tools:
resolve_ean
search_vectorized_product
search_invoices_by_criteria
-
Konfigurieren Sie die Datei
server_invoice_items.py
so, dass sie als MCP-Server ausgeführt wird, der ein ERP simuliert.
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.
-
Melden Sie sich bei der OCI-Konsole an, navigieren Sie zu Oracle Database, Autonomous Database, und klicken Sie auf Autonomous Database-Instanz erstellen.
-
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.
-
Wählen Sie Immer kostenlos aus, um sicherzustellen, dass die Instanz kostenlos bereitgestellt wird.
-
Erstellen Sie ein sicheres Kennwort für den Benutzer
ADMIN
, das für den Zugriff auf die Datenbank verwendet wird. -
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.
-
Navigieren Sie zur OCI-Konsole, navigieren Sie zu Oracle Database, Autonomous Database, und klicken Sie auf den Namen der neu erstellten Instanz.
-
Klicken Sie auf Database Actions und SQL, um die SQL-Konsole im Browser zu öffnen.
-
Laden Sie die Datei
script.sql
herunter, öffnen Sie sie, und fügen Sie den gesamten Inhalt in den SQL-Konsoleneditor ein. -
Klicken Sie auf Ausführen, oder drücken Sie Strg+Eingabetaste. Warten Sie auf die Bestätigung, dass die Befehle erfolgreich ausgeführt wurden.
-
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:
insert_products_books.sql
: Fügt eine Liste der Bücher als Produkte mit den entsprechenden EANs und Beschreibungen ein.invoice_data_insert.sql
: Fügt Mock-Forderungsrechnungsdatensätze ein, die Kunden, Produkten und Preisen zugeordnet sind.
Diese Daten werden von KI-Agenten verwendet, um Inkonsistenzen in Retourenrechnungen zu beheben.
-
Navigieren Sie zur OCI-Konsole, navigieren Sie zu Oracle Database, Autonomous Database, und klicken Sie auf den Namen der neu erstellten Instanz.
-
Klicken Sie auf Database Actions und SQL, um die SQL-Konsole im Browser zu öffnen.
-
Laden Sie den Inhalt der Datei
insert_products_books.sql
herunter, öffnen Sie ihn, und fügen Sie ihn in den SQL-Editor ein. -
Klicken Sie auf Ausführen, oder drücken Sie Strg+Eingabetaste.
-
Laden Sie jetzt den Inhalt der Datei
invoice_data_insert.sql
herunter, öffnen Sie ihn, und fügen Sie ihn in den Editor ein. -
Klicken Sie auf Ausführen, oder drücken Sie Strg+Eingabetaste.
-
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?
-
Tokenisierung der Eingabebegriffe (Beispiel:
harry poter stone
wird zu [harry
,poter
,stone
]) -
Suchtechniken mit Scoring:
-
Direkte Suche in Beschreibungen
(LIKE '%term%')
→ +3 Punkte. -
Phonetische Suche mit
SOUNDEX
→ +2 Punkten. -
Ähnliche Rechtschreibsuche mit
UTL_MATCH.EDIT_DISTANCE <= 2
→ +1 Punkt.
-
-
Bewertungslogik:
- Sammelt Punkte für jedes Produkt.
- Gibt nur Produkte mit einer Gesamtbewertung > 0 zurück.
-
Rückgabeformat:
Produkte werden als Objekte vom Typ
result_product
zurückgegeben, die Folgendes enthalten:code
(EAN.description
(Produktbeschreibung).similarity
(berechnete Suchbewertung).
Führen Sie die Schritte aus:
-
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
undproduct_result_tab
. - Die Funktion
fn_advanced_search
. - Optionale Tests.
- Die Tabelle
-
Führen Sie das vollständige Skript aus. Das Ergebnis muss
Function created
undType created
lauten. -
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?
- Liest die Produkte aus der Tabelle
products
mitoracledb
. - Generiert die Einbettungen mit dem Modell
all-MiniLM-L6-v2
aus dem Packagesentence-transformers
. - Erstellen Sie die Tabelle
embeddings_products
, um die Vektoren direkt in Oracle zu speichern. - Fügen Sie die Datensätze ein, oder aktualisieren Sie sie, und speichern Sie den Vektor als binäres BLOB (im serialisierten
float32
-Format).
Hinweis: Die Einbettungen werden in Byte konvertiert, wobei
np.float32.tobytes()
als BLOB gespeichert werden soll. Um die Vektoren abzurufen, verwenden Sienp.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:
-
Verbindung zu Oracle mit Wallet konfigurieren.
Der Code verwendet die
oracledb
-Library im Dünn-Modus und konfiguriert den sicheren Zugriff mit einem Oracle Wallet.os.environ["TNS_ADMIN"] = WALLET_PATH connection = oracledb.connect( user=USERNAME, password=PASSWORD, dsn=DB_ALIAS, ... )
-
Konsultation der Produkttabelle.
Die Tabelle
products
enthält die ursprünglichen Daten (ID, Code und Beschreibung). Diese Beschreibungen werden als Grundlage für die Generierung der semantischen Vektoren verwendet.cursor.execute("SELECT id, code, description FROM products")
-
Einbettungen mit
sentence-transformers
generierenDas Modell
all-MiniLM-L6-v2
wird verwendet, um Produktbeschreibungen in hochdimensionale numerische Vektoren umzuwandeln.model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(descriptions, convert_to_numpy=True)
-
Erstellen Sie die Einbettungstabelle (falls sie nicht vorhanden ist).
Die Tabelle
embeddings_products
wird dynamisch mit den folgenden Feldern erstellt:id
: Produkt-ID (Primärschlüssel).code
: Produktcode.description
: Originalbeschreibung.vector
: BLOB, das den Vektor enthält, der infloat32
serialisiert ist.
CREATE TABLE embeddings_products ( id NUMBER PRIMARY KEY, code VARCHAR2(100), description VARCHAR2(4000), BLOB vector )
Hinweis: Bei der Erstellung wird
EXECUTE IMMEDIATE
in einemBEGIN...EXCEPTION
verwendet, um einen Fehler zu vermeiden, wenn die Tabelle bereits vorhanden ist. -
Mit
MERGE
einfügen oder aktualisieren.Für jedes Produkt wird der Vektor in Byte (
float32
) konvertiert und mit einerMERGE INTO
in die Tabelleembeddings_products
eingefügt oder aktualisiert.vector_bytes = vector.astype(np.float32).tobytes()
MERGE INTO embeddings_products ...
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:
- ReAct Agent mit LangGraph und OCI LLM (
main.py
). - MCP-Server mit den Tools zur Rechnungsauflösung (
server_invoice_items.py
). - Mit OCI Generative AI und FAISS nach ähnlichen Produkten suchen (
product_search.py
).
Verstehen Sie die Funktionalität jeder Komponente und heben Sie die wichtigsten Teile des Codes detailliert hervor.
-
ReAct Agent mit LangGraph und LLM von OCI:
Diese Komponente führt die Hauptanwendung aus, in der der Benutzer mit dem Agent basierend auf dem Large Language Model (LLM) von Oracle Cloud interagiert. Er kommuniziert mit dem MCP-Server über ein
stdio
-Protokoll.Hauptmerkmale:
-
Telemetriekonfiguration mit Phoenix und OpenTelemetry.
px.launch_app() ... trace.set_tracer_provider(provider)
-
Erstellen Sie ein LLM-Modell mit
ChatOCIGenAI
.llm = ChatOCIGenAI( model_id="cohere.command-r-08-2024", ... )
-
Definition des aufgabenorientierten Prompt für die Abstimmung von Ausgangsrechnungen.
prompt = ChatPromptTemplate.from_messages([ ("system", """You are an agent responsible for resolving inconsistencies in invoices...""), ("placeholder", "{messages}") ])
-
Lokale MCP-Serverausführung mit
stdio
.# Run the client with the MCP server async def main(): async with MultiServerMCPClient( { "InvoiceItemResolver": { "command": "python", "args": ["server_invoice_items.py"], "transport": "stdio", }, } ) as client:
-
Hauptbenutzerinteraktionsschleife.
while True: query = input("You: ") ... result = await agent_executor.ainvoke({"messages": memory_state.messages})
-
Integration mit vom MCP-Server bereitgestellten Tools.
agent_executor = create_react_agent( model=llm, tools=tools, prompt=prompt, )
-
Mehrere MCP-Server.
Wenn Sie mehrere MCP-Server konsumieren möchten, schließen Sie die Server hier ein:
# Run the client with the MCP server async def main(): async with MultiServerMCPClient( { "InvoiceItemResolver": { "command": "python", "args": ["server_invoice_items.py"], "transport": "stdio", }, "InvoiceItemResolver": { "command": "python", "args": ["another_mcp_server.py"], "transport": "stdio", }, ... } ) as client: tools = client.get_tools() if not tools: print("❌ No MCP tools were loaded. Please check if the server is running.") return
Eingabeaufforderung:
Die Eingabeaufforderung ist für die Festlegung der Prozess- und Betriebsregeln für den KI-Agent unerlässlich.
-
-
MCP-Server mit Lösungstools:
Dieser Server reagiert auf Agent-Aufrufe, indem er Tools bereitstellt, die mit Produkt- und Rechnungsinformationen auf eine Oracle Database zugreifen.
Hauptmerkmale:
-
Initialisierung des MCP-Servers mit dem Namen
InvoiceItemResolver
.mcp = FastMCP("InvoiceItemResolver")
-
Verbindung zu Oracle Database mit Oracle Wallet herstellen.
connection = oracledb.connect( user=USERNAME, password=PASSWORD, dsn=DB_ALIAS, wallet_location=WALLET_PATH, ... )
-
Implementierung von MCP-Tools.
-
search_vectorized_product
:Suche nach ähnlichen Produkten mit Einbettungen.
@mcp.tool() def search_vectorized_product(description: str) -> dict: """ Searches for a product by description using embeddings. """ return sercher.search_similar_products(description)
-
resolve_ean
:Löst eine EAN basierend auf der Beschreibungsähnlichkeit auf.
@mcp.tool() def resolve_ean(description: str) -> dict: result = execute_search_ean(description) ... return {"ean": result[0]["code"], ...}
-
search_invoices_by_criteria
:Sucht nach Debitorenrechnungen auf Basis mehrerer Filter.
@mcp.tool() def search_invoices_by_criteria(customer: str = None, state: str = None, price: float = None, ean: str = None, margin: float = 0.05) -> list: """ Searches for outbound invoices based on customer, state, EAN, and approximate price. Allows one or more fields to be omitted. As long as an EAN has not been established, it is not useful to use this service. """ query = """ SELECT nf.no_invoice, nf.name_customer, nf.state, nf.date_print, inf.no_item, inf.code_ean, inf.description_product, inf.value_unitary FROM invoice nf JOIN item_invoice inf ON nf.no_invoice = inf.no_invoice WHERE 1=1 """ params = {} #if customer: query += " AND LOWER(nf.name_customer) LIKE LOWER(:customer)" params["customer"] = f"%{customer}%" #if state: query += " AND LOWER(nf.state) = LOWER(:state)" params["state"] = state #if ean: query += " AND inf.code_ean = :ean" params["ean"] = ean if price is not None: query += " AND inf.value_unitary BETWEEN :price_min AND :price_max" params["price_min"] = price * (1 - margin) params["price_max"] = price * (1 + margin) result = execute_query(query, params) return [ dict(zip( ["no_invoice", "name_customer", "state", "date_print", "no_item", "code_ean", "description_product", "value_unitary"], row )) for row in result ]
-
-
Server im
stdio
-Modus ausführenif __name__ == "__main__": mcp.run(transport="stdio")
-
-
Suche nach ähnlichen Produkten mit OCI Generative AI und Vector Database:
In diesem Modul
product_search.py
wird eine Python-Klasse implementiert, mit der Sie semantisch ähnliche Produkte aus einer Textbeschreibung suchen können. Dazu verwenden Sie:- Einbettungen aus OCI Generative AI.
- Vektorindizes mit Oracle Database 23ai.
- Fuzzy-Vergleiche mit RapidFuzz als Fallback.
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.
-
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 Profilsmodel_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)
-
-
-
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.
Aufgabe 7: Produkt- und Rechnungsbeschreibungssuche testen
-
Führen Sie die Datei
main.py
mit dem folgenden Befehl aus.python main.py
-
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.
Beachten Sie, dass die Services ausgeführt wurden:
fetch_vectorized_product resolve_ean search_invoices_by_criteria
-
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.
-
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.
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.
Verwandte Links
Bestätigungen
- Autor – Cristiano Hoshikawa (Oracle LAD A-Team Solution Engineer)
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.
Build an AI Agent with Multi-Agent Communication Protocol Server for Invoice Resolution
G35139-05
Copyright ©2025, Oracle and/or its affiliates.