Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Démarrer avec le niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments d'Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles qui sont propres à votre environnement en nuage.
Créez un agent d'IA avec un serveur de protocole de communication multiagent pour la résolution des factures
Présentation
Les entreprises qui traitent un grand volume de produits - tels que les distributeurs, les industries et les chaînes de vente au détail - sont souvent confrontées au défi d'identifier des produits basés sur des descriptions textuelles inexactes, incomplètes ou variées. Dans les environnements où les données sont entrées manuellement, les fautes de frappe, les abréviations et les différents noms commerciaux peuvent rendre difficile l'identification correcte des éléments dans des systèmes tels que Enterprise Resource Planning (ERP), Customer Relationship Management (CRM) et les plateformes de commerce électronique.
Dans ce scénario, il existe un besoin commun d'outils qui peuvent :
-
Interpréter les descriptions informelles ou incorrectes fournies par les utilisateurs.
-
Suggérer les produits les plus similaires basés sur la similarité sémantique.
-
Garantir un repli avec des algorithmes traditionnels (tels que la mise en correspondance floue) si la recherche sémantique ne trouve pas de résultats pertinents.
-
Intégrer des API et des flux automatisés d'agents intelligents.
Dans ce tutoriel, nous allons apprendre à créer un agent IA spécialisé dans la résolution des incohérences dans les factures de retour client. L'agent peut interagir avec un serveur MCP qui fournit des outils de recherche vectorielle et d'extraction de factures, ce qui permet à l'agent de trouver automatiquement la facture de comptes clients d'origine de la société en fonction des informations fournies par le client.
Un serveur MCP (protocole de contexte de modèle) est un composant logiciel responsable de la médiation de la communication entre des agents intelligents et des services externes au moyen d'un protocole normalisé de messages et d'outils. Il sert de pont entre les modèles de langage (LLM) et les API existantes, ce qui permet aux agents d'IA d'accéder à des fonctionnalités spécifiques des systèmes existants sans avoir à les réécrire ou les adapter directement.
Comment cela fonctionne-t-il?
Le serveur MCP :
- Expose un ensemble d'outils nommés qui représentent des actions ou des services que les agents peuvent appeler.
- Chaque outil peut être connecté à une fonction de base de données, à une API REST, à un système existant ou à toute opération programmable.
- Reçoit les commandes d'agent (au format JSON), exécute le service correspondant et retourne une réponse standardisée.
Utilisation avec les applications existantes
Les applications existantes fournissent souvent déjà des fonctionnalités au moyen de bases de données, de fichiers ou d'API internes. Avec un serveur MCP, vous pouvez :
- Encapsuler les appels aux services REST, aux procédures stockées ou aux interrogations SQL.
- Rendez ces services accessibles à un agent via une interface de communication unifiée.
- Intégrez des systèmes plus anciens à des architectures modernes basées sur l'IA conversationnelle et la RAG.
Avantages
- Réutilisation de la logique métier existante.
- Il n'est pas nécessaire de réusiner les systèmes existants.
- Permet aux agents LLM d'interagir avec des systèmes externes de manière sécurisée et contrôlée.
- Facilite les tests, le contrôle des versions et la modularité dans l'intégration entre l'IA et les services dorsaux.
Cet agent est basé sur un modèle de langage d'IA générative pour Oracle Cloud Infrastructure (OCI) et s'intègre aux outils déclarés dynamiquement gérés par un serveur MCP.
Avec l'intégration de ces deux composants, le système active un agent basé sur Oracle LLM :
- Utiliser des outils hébergés à distance à l'aide de MCP.
- Effectuez des recherches intelligentes de produits et de réseaux étendus.
- Repérez les factures de comptes clients correspondantes.
- Enregistrez tout en observabilité en utilisant Phoenix et OpenTelemetry.
Cette conception modulaire permet une réutilisation et une évolution facile du système vers des domaines autres que les factures.
Objectifs
-
Configurez un agent d'intelligence artificielle avec LangGraph et LangChain pour qu'il fonctionne avec des invites structurées.
-
Intégrez cet agent à un serveur MCP à l'aide du protocole
stdio
. -
Utilisez les outils distants enregistrés sur le serveur pour :
- Effectuer des recherches vectorielles à partir des descriptions de produits.
- Identifiez le code EAN le plus probable pour un article.
- Rechercher les factures initiales en fonction de critères tels que le client, l'état et le prix.
-
Surveillez l'exécution de l'agent en temps réel à l'aide de Phoenix et de OpenTelemetry.
-
Simuler une résolution réelle de problème en fonction d'une entrée JSON telle que :
{ "customer": "Customer 43", "description": "Harry Potter", "price": 139.55, "location": "RJ" }
Conditions requises
-
Accès à une location OCI pour gérer vos ressources en nuage. Vous pouvez vous inscrire gratuitement à l'adresse
oracle.com/cloud/free
. -
Installez Python
version 3.12
ou une version supérieure. -
Accès à un compte OCI avec le service d'intelligence artificielle générative pour OCI activé.
-
Installez et configurez la bibliothèque Langchain Python.
-
Accès au modèle
cohere.command-r-08-2024
à l'aide du service d'intelligence artificielle générative pour OCI. -
Installez les bibliothèques auxiliaires :
oracledb
sentence_transformers
numpy
mcp-server-fastmcp
asyncio
langchain_core
langchain_community
mcp
langgraph
langchain_mcp_adapters
phoenix
(pour l'observabilité avec OpenTelemetry)opentelemetry-sdk
,opentelemetry-exporter-otlp
-
Serveur MCP fonctionnel doté des outils suivants :
resolve_ean
search_vectorized_product
search_invoices_by_criteria
-
Configurez le fichier
server_invoice_items.py
pour qu'il s'exécute en tant que serveur MCP simulant un système ERP.
Installez requirements.txt avec :
pip install -r requirements.txt
Tâche 1 : Créer une base de données Oracle Database 23ai (toujours gratuite)
Dans cette tâche, nous allons apprendre à provisionner une base de données Oracle Database 23ai en mode Toujours gratuit. Cette version offre un environnement entièrement géré, idéal pour le développement, les tests et l'apprentissage, sans frais supplémentaires.
-
Connectez-vous à la console OCI, naviguez jusqu'à Oracle Database, Autonomous Database et cliquez sur Créer une instance Autonomous Database.
-
Entrez les informations suivantes .
- Nom de la base de données : Entrez un nom d'identification pour votre instance.
- Type de charge de travail : Sélectionnez Entrepôt de données ou Traitement des transactions, selon vos besoins.
- Compartiment : Sélectionnez un compartiment approprié pour organiser vos ressources.
-
Sélectionnez Toujours gratuit pour vous assurer que l'instance est provisionnée gratuitement.
-
Créez un mot de passe sécurisé pour l'utilisateur
ADMIN
, qui sera utilisé pour accéder à la base de données. -
Vérifiez les paramètres et cliquez sur Créer une base de données Autonomous Database. Attendez quelques minutes que l'instance soit provisionnée et disponible pour utilisation.
Tâche 2 : Exécuter le script de création de table Autonomous Database
Préparez la base de données pour notre cas d'utilisation. Téléchargez et exécutez le script SQL à partir d'ici : script.sql qui crée trois tables essentielles (PRODUCTS
, INVOICE
et ITEM_INVOICE
) pour le scénario de rapprochement des factures avec les agents IA.
-
Allez à la console OCI, naviguez jusqu'à Oracle Database, Autonomous Database et cliquez sur le nom de l'instance nouvellement créée.
-
Cliquez sur Database Actions et sur SQL pour ouvrir la console SQL dans le navigateur.
-
Téléchargez et ouvrez le fichier
script.sql
localement et collez tout le contenu dans l'éditeur de console SQL. -
Cliquez sur Exécuter ou appuyez sur Ctrl + Entrée. Attendez la confirmation que les commandes ont été exécutées avec succès.
-
Exécutez les commandes suivantes pour vérifier que les tables ont été créées.
SELECT table_name FROM user_tables;
Tâche 3 : Insérer des exemples de données dans des tables
Insérez des données fictives qui simuleront un scénario réel pour l'application des agents d'IA. Nous utiliserons deux scripts SQL :
insert_products_books.sql
: Insère une liste de livres en tant que produits, avec leurs numéros EAN et descriptions respectifs.invoice_data_insert.sql
: Insère les enregistrements de factures de comptes clients fictives, associés aux clients, aux produits et aux prix.
Ces données seront utilisées par les agents d'IA pour résoudre les incohérences dans les factures de retour.
-
Allez à la console OCI, naviguez jusqu'à Oracle Database, Autonomous Database et cliquez sur le nom de l'instance nouvellement créée.
-
Cliquez sur Database Actions et sur SQL pour ouvrir la console SQL dans le navigateur.
-
Téléchargez et ouvrez le contenu du fichier
insert_products_books.sql
et collez-le dans l'éditeur SQL. -
Cliquez sur Exécuter ou appuyez sur Ctrl + Entrée.
-
Maintenant, téléchargez et ouvrez le contenu du fichier
invoice_data_insert.sql
et collez-le dans l'éditeur. -
Cliquez sur Exécuter ou appuyez sur Ctrl + Entrée.
-
Exécutez la commande suivante pour vérifier les données.
SELECT * FROM PRODUCTS; SELECT * FROM INVOICE; SELECT * FROM ITEM_INVOICE;
Tâche 4 : Créer et compiler la fonction de recherche avancée dans la base de données
Créez une fonction PL/SQL nommée fn_advanced_search
, qui effectue des recherches intelligentes de mots clés dans les descriptions de produit. Cette fonction sera utilisée par les agents d'IA dans le cadre de l'outil resolve_ean
, leur permettant de trouver le code EAN le plus proche en fonction de la description fournie par un client sur la note de retour.
Que fait la fonction?
-
Jokénisation des termes d'entrée (Exemple :
harry poter stone
devient [harry
,poter
,stone
]) -
Techniques de recherche avec notation :
-
Recherche directe dans les descriptions
(LIKE '%term%')
→ +3 points. -
Recherche phonétique à l'aide de
SOUNDEX
→ +2 points. -
Recherche orthographique similaire à l'aide de
UTL_MATCH.EDIT_DISTANCE <= 2
→ +1 point.
-
-
Logique de notation :
- Somme les points pour chaque produit.
- Retourne uniquement les produits dont la note totale est > 0.
-
Format de retour :
Les produits sont retournés en tant qu'objets de type
result_product
contenant :code
(EAN).description
(description du produit).similarity
(note de recherche calculée).
Voici la marche à suivre :
-
Copiez et collez le script complet
similarity_search.sql
dans la console SQL de la base de données autonome.Il s'agit notamment des éléments suivants :
- Création de la table
products
(si ce n'est pas déjà fait). - Création d'un index de texte.
- Types
product_result
etproduct_result_tab
. - Fonction
fn_advanced_search
. - Tests facultatifs.
- Création de la table
-
Exécutez le script complet. Le résultat doit être
Function created
etType created
. -
Exécutez l'interrogation suivante pour tester la fonction avec des descriptions simulées.
SELECT * FROM TABLE(fn_advanced_search('harry poter askaban')) ORDER BY similarity DESC;
Tâche 5 : Vectoriser les produits pour la recherche sémantique avec l'intelligence artificielle
Dans cette tâche, nous allons compléter la recherche SQL avancée par une nouvelle approche basée sur des vecteurs sémantiques. Cela sera particulièrement utile pour les agents d'IA qui utilisent des intégrations (représentations numériques d'expressions) pour comparer la similarité entre les descriptions de produits - de manière plus flexible et intelligente que les recherches verbales ou phonétiques.
Pour ce faire, nous utiliserons le script Python (process_vector_products.py
), qui se connecte à la base de données Oracle, extrait les produits de la table PRODUCTS
, transforme leurs descriptions en vecteurs (intégrations) et crée un index vectoriel à l'aide de la base de données Oracle elle-même.
Que fait le script?
- Lit les produits de la table
products
à l'aide deoracledb
. - Génère les intégrations à l'aide du modèle
all-MiniLM-L6-v2
à partir de l'ensemblesentence-transformers
. - Créez la table
embeddings_products
pour stocker les vecteurs directement dans Oracle. - Insérez ou mettez à jour les enregistrements et enregistrez le vecteur sous forme de BLOB binaire (au format
float32
sérialisé).
Note : Les plongements sont convertis en octets avec
np.float32.tobytes()
à stocker en tant que BLOB. Pour extraire les vecteurs, utiliseznp.frombuffer(blob, dtype=np.float32)
.
Ce format permet d'effectuer des recherches de similarité futures directement à l'aide de SQL ou en chargeant les vecteurs de la base de données pour les opérations avec np.dot
, cosine_similarity
ou l'intégration aux LLM.
Ce script génère des plongements sémantiques pour les produits et écrit ces vecteurs dans la base de données Oracle 23ai. Les principaux points sont mis en évidence ci-après :
-
Configurez la connexion à Oracle à l'aide du portefeuille.
Le code utilise la bibliothèque
oracledb
en mode mince et configure l'accès sécurisé à l'aide d'Oracle Wallet.os.environ["TNS_ADMIN"] = WALLET_PATH connection = oracledb.connect( user=USERNAME, password=PASSWORD, dsn=DB_ALIAS, ... )
-
Consultation du tableau des produits.
La table
products
contient les données initiales (ID, code et description). Ces descriptions sont utilisées comme base pour générer les vecteurs sémantiques.cursor.execute("SELECT id, code, description FROM products")
-
Générer des intégrations avec
sentence-transformers
Le modèle
all-MiniLM-L6-v2
est utilisé pour transformer les descriptions de produit en vecteurs numériques de grande dimension.model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(descriptions, convert_to_numpy=True)
-
Créez la table d'intégration (si elle n'existe pas).
La table
embeddings_products
est créée dynamiquement avec les champs suivants :id
: Identificateur de produit (clé primaire).code
: Code de produit.description
: Description initiale.vector
: BLOB contenant le vecteur sérialisé dansfloat32
.
CREATE TABLE embeddings_products ( id NUMBER PRIMARY KEY, code VARCHAR2(100), description VARCHAR2(4000), BLOB vector )
Note : La création utilise
EXECUTE IMMEDIATE
dans un fichierBEGIN...EXCEPTION
pour éviter une erreur si la table existe déjà. -
Insérer ou mettre à jour à l'aide de
MERGE
.Pour chaque produit, le vecteur est converti en octets (
float32
) et inséré ou mis à jour dans la tableembeddings_products
à l'aide d'unMERGE INTO
.vector_bytes = vector.astype(np.float32).tobytes()
MERGE INTO embeddings_products ...
Exécuter le script :
N'oubliez pas qu'Oracle Wallet doit être téléchargé et configuré. Exécutez-le dans le terminal.
python process_vector_products.py
Terminé. Les produits de la base de données ont été vectorisés.
Pourquoi est-ce important?
La recherche vectorielle est très efficace pour trouver des produits même lorsque la description est subjective, imprécise ou en langage naturel.
Comprendre le code : Agent LLM avec serveur MCP
Ce projet est composé de 3 composantes principales :
- Agent ReAct avec LangGraph et LLM OCI (
main.py
). - Serveur MCP avec outils de résolution de facture (
server_invoice_items.py
). - Rechercher des produits similaires avec OCI Generative AI et FAISS (
product_search.py
).
Comprendre les fonctionnalités de chaque composant et mettre en évidence en détail les parties les plus importantes du code.
-
Agent ReAct avec LangGraph et LLM à partir d'OCI :
Ce composant exécute l'application principale, où l'utilisateur interagit avec l'agent en fonction du grand modèle de langage (LLM) d'Oracle Cloud. Il communique avec le serveur MCP à l'aide d'un protocole
stdio
.Caractéristiques principales :
-
Configuration de la télémétrie avec Phoenix et OpenTelemetry.
px.launch_app() ... trace.set_tracer_provider(provider)
-
Créez un modèle de GML à l'aide de
ChatOCIGenAI
.llm = ChatOCIGenAI( model_id="cohere.command-r-08-2024", ... )
-
Définition de l'invite orientée tâche pour le rapprochement des factures.
prompt = ChatPromptTemplate.from_messages([ ("system", """You are an agent responsible for resolving inconsistencies in invoices...""), ("placeholder", "{messages}") ])
-
Exécution du serveur MCP local à l'aide de
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:
-
Boucle principale d'interaction avec l'utilisateur.
while True: query = input("You: ") ... result = await agent_executor.ainvoke({"messages": memory_state.messages})
-
Intégration aux outils exposés par le serveur MCP.
agent_executor = create_react_agent( model=llm, tools=tools, prompt=prompt, )
-
Multiplier les serveurs MCP.
Si vous voulez consommer plusieurs serveurs MCP, il suffit d'inclure les serveurs ici :
# 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
Invite :
L'invite est essentielle pour établir le processus et les règles d'exploitation de l'agent d'IA.
-
-
Serveur MCP avec outils de résolution :
Ce serveur répond aux appels d'agent en fournissant des outils qui accèdent à Oracle Database avec des informations sur les produits et les factures.
Caractéristiques principales :
-
Initialisation du serveur MCP avec le nom
InvoiceItemResolver
.mcp = FastMCP("InvoiceItemResolver")
-
Connexion à Oracle Database à l'aide d'Oracle Wallet.
connection = oracledb.connect( user=USERNAME, password=PASSWORD, dsn=DB_ALIAS, wallet_location=WALLET_PATH, ... )
-
Mise en oeuvre des outils MCP.
-
search_vectorized_product
:Recherche des produits similaires avec des plongements.
@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
:Résout un EAN en fonction de la similarité des descriptions.
@mcp.tool() def resolve_ean(description: str) -> dict: result = execute_search_ean(description) ... return {"ean": result[0]["code"], ...}
-
search_invoices_by_criteria
:Recherche les factures de comptes clients en fonction de plusieurs filtres.
@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 ]
-
-
Exécutez le serveur en mode
stdio
.if __name__ == "__main__": mcp.run(transport="stdio")
-
-
Recherchez des produits similaires avec OCI Generative AI and Vector Database :
Ce module
product_search.py
met en oeuvre une classe Python qui vous permet de rechercher des produits sémantiquement similaires à partir d'une description textuelle, à l'aide des éléments suivants :- Intégrations du service d'intelligence artificielle générative pour OCI.
- Index vectoriels avec Oracle Database 23ai.
- Comparaisons floues avec RapidFuzz comme solution de secours.
Tâche 6 : Configurer le modèle et les intégrations dans l'agent MCP
Configurons le modèle de langage et les intégrations utilisés par l'agent conversationnel en fonction du protocole MCP, à l'aide des services d'intelligence artificielle générative pour OCI.
-
Configurez le modèle de langue (LLM).
Le modèle linguistique est chargé d'interpréter les messages, de générer des réponses et d'agir comme le cerveau principal de l'agent.
-
Configurez le fichier
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} )
Paramètre Description model_id
ID modèle d'IA générative, par exemple cohere.command-r-08-2024
service_endpoint
Point d'extrémité régional du service d'intelligence artificielle générative compartment_id
OCID du compartiment OCI auth_profile
Nom du profil configuré dans le fichier ~/.oci/config
model_kwargs
Température, top-p et taille de réponse -
Liste des modèles disponibles.
-
À l'aide de l'interface de ligne de commande OCI :
oci generative-ai model list --compartment-id <seu_compartment_id>
-
À l'aide de la trousse SDK Python :
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)
-
-
-
Configurer les plongements pour la recherche sémantique.
La recherche de produits similaires ou d'informations contextuelles dépend des plongements vectoriels.
Exemple d'utilisation dans l'agent :
@mcp.tool() def search_vectorized_product(description: str) -> dict: """ Searches for a product by description using embeddings. """ return sercher.search_similar_products(description)
Modifiez les paramètres (
product_search.py
) comme indiqué ci-dessous :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" ):
Paramètre Description top_k
Nombre de suggestions retournées. minimum_distance
Distance maximale pour tenir compte du résultat pertinent. model_id
ID du modèle d'intégration dans OCI (par exemple, cohere.embed-english-light-v3.0
).service_endpoint
Point d'extrémité régional du service d'intelligence artificielle générative pour OCI. compartment_id
OCID du compartiment. auth_profile
Nom du profil dans le fichier ~/.oci/config
.wallet_path
Chemin d'accès au portefeuille Oracle Database 23ai. db_alias
Alias de base de données. username
Utilisateur de base de données. password
Mot de passe de base de données. Configurez le serveur MCP :
Comme vous l'avez fait lors de l'exécution du code
process_vector_products.py
, vous devrez configurer Oracle Wallet pour la base de données Oracle Database 23ai.Modifiez les paramètres en fonction de vos paramètres :
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
Ensuite, exécutez
process_vector_products.py
pour vectoriser les produits dans Oracle Database 23ai.python process_vector_products.py
Avec cela, le modèle de LLM et les intégrations sont prêts à être utilisés par l'agent MCP avec LangGraph et LangChain.
Tâche 7 : Tester la recherche de description de produit et de facture
-
Exécutez le fichier
main.py
à l'aide de la commande suivante.python main.py
-
Lorsque l'invite You (Vous) : s'affiche, entrez l'énoncé suivant.
{ "customer": "Customer 108", "description": "Harry Poter askaban", "price": 82.26, "location": "SP"}
Note : Le nom du livre Harry Potter et Azkaban est mal orthographié, mais le moteur peut le trouver sans aucun problème.
Notez que les services ont été exécutés :
fetch_vectorized_product resolve_ean search_invoices_by_criteria
-
Maintenant, entrez l'instruction suivante.
{ "customer": "Customer 108", "description": "Harry Poter askaban", "price": 82.26}
Vous verrez qu'aucun enregistrement de facture n'a été trouvé. En effet, l'emplacement est la clé pour trouver une facture.
-
Maintenant, entrez l'instruction suivante.
{ "customer": "Customer 108", "description": "Harry Poter", "location": "SP"}
Cette fois, nous entrons dans l'emplacement, mais nous omettons le prix unitaire.
Et pourtant la facture a été trouvée. C'est parce que le prix n'est pas fondamental, mais il aide à combler l'écart pour être plus affirmatif.
Voici quelques exemples de 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"}
Tâche 8 : Voir l'observabilité avec Phoenix
Entrez http://localhost:6006/
dans votre navigateur pour voir l'observabilité avec Phoenix.
Liens connexes
Remerciements
- Auteur - Cristiano Hoshikawa (Oracle LAD A-Team Solution Engineer)
Ressources d'apprentissage supplémentaires
Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir la documentation sur le produit, visitez Oracle Help Center.
Build an AI Agent with Multi-Agent Communication Protocol Server for Invoice Resolution
G35141-05
Copyright ©2025, Oracle and/or its affiliates.