Comment exploiter le plein potentiel de l'IA pour effectuer des recherches à partir de l'ERP sur le net ?

Une nouvelle expérience de l’IA à travers Business Central

Copilot , Copilot , IA , … C’est le nouveau sujet à la mode. Chez BMS, nous voulons aussi explorer et exploiter le potentiel de l’ERP et de l’intelligence artificielle. Nous sommes tous convaincus du potentiel de cette combinaison, et il serait difficile d’imaginer un futur de Business Solution sans intégrer une solution d’intelligence artificielle.

Notre vision était de profiter de Copilot pour effectuer des recherches rapides et efficaces sur internet. L’idée est de confier à Copilot la compilation des résultats de recherche de prix d’articles et de fournisseurs, provenant du Net.
Ce principe de recherche peut évidemment être diversifié à d’autres domaines, variés, de l’ERP.

La puissance de l’ERP est décuplée par l’interaction avec l’intelligence artificielle et des API :

Function Calling

Dans notre contexte, Copilot doit s’appuyer sur des outils complémentaires pour effectuer des recherches sur internet. Les function callings permettent de répondre à ce besoin. Pour les définir, nous avons repris l’intégralité de leur définition proposée par la plateforme OPENAI, qui nous a semblé la plus simple et claire.
Le function calling est défini comme suit: « Permet aux développeurs de connecter des modèles de langage à des données et systèmes externes. Vous pouvez définir un ensemble de fonctions en tant qu’outils auxquels le modèle a accès, et il peut les utiliser le cas échéant en fonction de l’historique de la conversation. Vous pouvez ensuite exécuter ces fonctions dans la partie applicative et renvoyer les résultats au modèle ».
Le schéma ci-dessous décrit leur fonctionnement :

La notion de function calling a été introduite en juin 2023, mais ce, uniquement sur les modèles basés sur GPT4. Aujourd’hui, la plupart des modèles intègrent cette fonctionnalité (tous les GPT-* par exemple). Nous vous conseillons tout de même de vérifier les capacités de votre modèle avant de l’implémenter.

Un extrait de la documentation sur ces function calling vous est proposé ci-dessous :

Exemple BMS : Recherche de prix et fournisseurs sur internet

Il est difficile d’identifier une utilisation réelle d’une telle approche, mais elle a le mérite de montrer le potentiel de la solution.
Imaginez avant d’acheter un article, vérifier sur internet les prix et les fournisseurs disponibles… intéressant, non ?

Une fonctionnalité ergonomique ne serait-elle pas de pouvoir mettre à jour le catalogue fournisseur, créer un article si ce dernier n’existe pas, avec son prix d’achat et finalement pouvoir envoyer une demande d’achat au fournisseur offrant le meilleur prix ?

Voici un cas d’usage de notre extension dont on vous expliquera par la suite sa mise en place :

Étapes de mise en œuvre et de développement

1. API de recherche Bing

Pour gérer les recherches sur internet, nous faisons appel à un service dédié, Bing search, disponible sur la plateforme Azure, API Bing Search.

Il serait possible d’avoir des recherches beaucoup plus riches et pertinentes en utilisant l’outil dédié aux LLM pour les recherches sur le net, Tavily.

La création d’une ressource est extrêmement simple. Sur Azure, tapez Bing ressources et créez une nouvelle ressource de recherche.

Le résultat pour la recherche « prix et fournisseurs pour l’article Item PARIS Guest Chair black » est visible ci-dessous:

2. Copilot, modèle LLM

Pour les développements ultérieurs, l’URL de la ressource et sa clé d’accès seront nécessaires dans une logique d’identification.

 

L’utilisation du service OPENAI sur une souscription Azure est soumise à une demande préalable. Cette demande donne lieu à un formulaire à remplir, avec une réponse donnée sous 2 à 3 jours.

Pour commencer, vous devez créer une ressource Azure AI Hub qui vous permettra de gérer vos projets ainsi que chacune de leurs spécificités, en particulier les modèles à utiliser.

Une fois notre Hub créé, nous devons passer à la création de notre projet d’IA. Microsoft a récemment baptisé l’interface de gestion d’Azure AI Azure AI Foundry . Depuis cette interface, il est facile de créer un projet et d’y assigner des modèles.
Voici notre projet (Purch-Copilot) :

Pour le projet BMS, nous utilisons le modèle GTP-4o-mini. (ce choix a été motivé par le nombre de jetons disponibles pour chaque modèle)

Il est évidemment possible de tester notre modèle à partir de l’interface Azure AI foundry :

Vous pouvez retrouver le détail de la procédure Microsoft grâce au lien suivant : Créer et déployer une ressource Azure OpenAI Service.

Lors de différents évènements Microsoft, l’éditeur a évoqué la possibilité d’un modèle d’IA dédié, disponible pour le développement de fonctionnalités d’IA spécifiques, à partir duquel cette étape ne serait plus nécessaire.

3. Développement sur Business Central

L’équipe de Business Central, avec l’aide de la communauté, a fait un excellent travail pour faciliter la mise en œuvre des capacités d’IA, nous pouvons encore les en remercier. Ceci étant dit, je ne peux que vous envoyer cette documentation, Integrating AI using Developer Tools for Copilot.

Nous reprenons l’architecture de ce type de projet à partir de la schématique ci-dessous tout en y ajoutant quelques informations.

Le fonctionnement de notre extension se déroule selon le processus suivant :

  • Extension Item List Page  (1)- Cet objet ne comporte qu’un seul bouton qui permet le lancement du processus.
pageextension 60300 "bmsItem List Extension" extends "Item List"
{
    actions
    {
        addfirst(Prompting)
        {
            action("bmsCheck Prices Online")
            {
                ApplicationArea = all;
                Caption = 'Check Item Prices Online';
                ToolTip = 'Check Price from the web';
                trigger OnAction()
                var
                    checkItemPriceOnline: Page "bmsCheck Item Prices OL Prompt";
                begin
                    checkItemPriceOnline.setItem(rec);
                    checkItemPriceOnline.RunModal();
                end;
            }
        }
    }
}
  • AI Prompt Page (2)- Page de dialogue pour notre interaction avec Copilot et insertion de la réponse du modèle utilisé (à partir d’un fichier Json) sur une table temporaire dédiée.
  • Extension ENUM AI capabilities (3)- Ajout de notre fonctionnalité à celles natives de Copilot.
  • Secrets and capability registration (4)- Ce CodeUnit lance l’enregistrement de notre fonctionnalité lors de l’installation de l’extension, et ce, avec tous les éléments de configuration pour la gestion de notre modèle, en mode isolation.
    • URL Copilot : URL du noeud d’extrémité du modèle
    • Déploiement : Nom du modèle déployé, GPT-4o-mini dans notre cas
    • Clé API : Clé d’accès au modèle
codeunit 60301 "bmsSecrets And Cap Sep Intern"
{
    Subtype = Install;
    InherentEntitlements = X;
    InherentPermissions = X;
    Access = Internal;

    trigger OnInstallAppPerDatabase()
    begin
        RegisterCapability();
    end;

    local procedure RegisterCapability()
    var
        EnvironmentInfo: Codeunit "Environment Information";
        CopilotCapability: Codeunit "Copilot Capability";
    begin
        // Verify that environment in a Business Central online environment
        if EnvironmentInfo.IsSaaSInfrastructure() then
            // Register capability 
            if not CopilotCapability.IsCapabilityRegistered(Enum::"Copilot Capability"::"Online Item Price request") then
                CopilotCapability.RegisterCapability(
                      Enum::"Copilot Capability"::"Online Item Price request",
                      Enum::"Copilot Availability"::Preview, '');

        IsolatedStorage.Set('Endpoint', 'votre url');
        IsolatedStorage.Set('Deployment', 'votre modèle (gpt-4o-mini pour nous)');
        IsolatedStorage.Set('Apikey', 'votre clé d'accès');
    end;
}
  •  Item Price Copilot Mngt (5)- Ce CodeUnit orchestre la fonctionnalité en utilisant les bibliothèques OAI.

  • Bing Search API Codeunit (6)- fonction appelée par Copilot.
codeunit 60301 "bmsSecrets And Cap Sep Intern"
{
    Subtype = Install;
    InherentEntitlements = X;
    InherentPermissions = X;
    Access = Internal;

    trigger OnInstallAppPerDatabase()
    begin
        RegisterCapability();
    end;

    local procedure RegisterCapability()
    var
        EnvironmentInfo: Codeunit "Environment Information";
        CopilotCapability: Codeunit "Copilot Capability";
    begin
        // Verify that environment in a Business Central online environment
        if EnvironmentInfo.IsSaaSInfrastructure() then
            // Register capability 
            if not CopilotCapability.IsCapabilityRegistered(Enum::"Copilot Capability"::"Online Item Price request") then
                CopilotCapability.RegisterCapability(
                      Enum::"Copilot Capability"::"Online Item Price request",
                      Enum::"Copilot Availability"::Preview, '');

        IsolatedStorage.Set('Endpoint', 'votre url');
        IsolatedStorage.Set('Deployment', 'votre modèle (gpt-4o-mini pour nous)');
        IsolatedStorage.Set('Apikey', 'votre clé d'accès');
    end;
}

Afin de mettre en place la fonctionnalité Copilot, le code doit prendre en charge les étapes suivantes :

  • Vérifier qu’elle est activée (Copilot & AI capabilities) et enregistrée, le faire si elle ne l’est pas.
  • Administrer l’authentification avec le modèle choisi.
  • Gérer la configuration, la température et le nombre de jetons.
  • Définir le métaprompt : Envoyer une indication générale au modèle concernant l’appel qui sera effectué, la manière d’y répondre, l’appel d’une fonction et le format de la réponse attendue.
  • Définir la requête de l’utilisateur : Dans notre contexte, la requête est générée en fonction de l’article sélectionné dans la liste.
  • Définition de la fonction : En plus de la fonction qui doit être appelée pour effectuer une recherche sur l’internet, plusieurs fonctions peuvent être appelées.
  • Interroger le modèle.
  • Nouvelle interrogation du modèle structure la réponse obtenue de l’API Bing.

N’hésitez pas à nous contacter pour que nous vous transmettions le code source de notre extension 🙂