Skip to content

MelisAIEngine

Le moteur IA abstrait — contrat fournisseur, runtime agent/scénario, stockage des conversations, pont MCP/tools, et toutes les tables de base de données IA. Paquet melisplatform/melis-ai-engine.

Présentation

MelisAIEngine est la clé de voûte de la suite MelisAI. Il définit le contrat fournisseur abstrait (MelisAIEngineModelService) qu'implémentent Claude et Gemini, exécute les agents au fil de workflows de scénario multi-étapes, gère le pont MCP/tool-calling, et possède toutes les tables melis_ai_* en base de données. L'interface back-office se trouve dans le module compagnon MelisAI ; ce module est uniquement la couche service et données.

Activation

Ajoutez à config/melis.module.load.php :

php
return [
    'MelisAIEngine',
];

Dépendances Composer requises : melisplatform/melis-core ^5.3 et melisplatform/melis-document-upload ^5.3. Au moins un module fournisseur (MelisAIEngineClaude ou MelisAIEngineGemini) doit être installé pour effectuer de vrais appels de modèle.

Services principaux

Alias de serviceRôle
MelisAIEngineModelServiceContrat fournisseur abstrait. Étendre cette classe pour ajouter un nouveau fournisseur IA (§ Contrat fournisseur).
MelisAIEngineServiceRegistre/factory : getActiveInstance(), getActiveAgent(), getActiveModel(), getActiveModelClass() (sélection du fournisseur), getActiveAITools(), saveDailyUsage().
MelisAIEngineAgentServiceRuntime de scénario : runAgent($postValues, $files) parcourt les étapes de l'agent et pilote MelisAIEngineModelService::send().
MelisAIEngineMcpServicePont MCP/tool-calling : gestion des serveurs, communication JSON-RPC, disjoncteur, getAvailableTools(), isMcpTool(), invokeTool(), formatToolsForAI(), getToolSchema().
MelisAIEngineConversationStoreÉtat de conversation multi-tours persisté dans melis_ai_conversation_state : get(), has(), set(), delete(). GC automatique après 48 heures.
MelisAIEngineFunctionServiceImplémentations de tools intégrés (non-MCP), p. ex. get_table_structure, create_database_table.
MelisAIEngineFileServiceNettoyage de rétention des documents téléversés via IA : deleteAIDocUploads().
MelisAIEngineGeneralServiceBase orientée événements : sendEvent(), makeArrayFromParameters().

Contrat fournisseur

MelisAIEngineModelService (src/Service/MelisAIEngineModelService.php) est la classe abstraite que tout fournisseur doit étendre. Constructeur : (ServiceManager $serviceManager, int $modelId, int $agentId).

Méthodes abstraites qu'un fournisseur doit implémenter :

php
abstract public function setClient();
abstract public function addToolsToPayload($payload);
abstract public function addContentToPayload($payload, $role, $prompt, $files=[], $content=[]);
abstract public function constructContent($role, $prompt, $files=[]);
abstract public function getMessageKey(): string;            // 'messages' (Claude) | 'contents' (Gemini)
abstract public function sendCustomAI(?array $payload = []): array;
abstract public function getAllowedMimetypes(): array;
abstract public function setPromptTokenCount($responseData);
abstract public function setResponseTokenCount($responseData);
abstract public function setTotalTokenCount($responseData);
abstract public function processFiles($filesArr): array;
abstract public function processContextFiles($filesArr): array;

Le cycle de vie de la méthode send(array $contextArr): array de base est fixé : addToolsToPayload()addContentToPayload() par entrée de contexte → sendCustomAI() → comptage des tokens → retourne ['request','responseData','result','errors','needs_continuation','session_id','continuation_context','tool_results'].

Aides fournies par la classe de base : getModel(), getAgentFunctions(), getToolDeclarationByName(), accesseurs de tokens, uploadDocument(), extractTextFromDocx(), extractTextFromXlsx(), getMimeType().

Sélection du fournisseur

MelisAIEngineService::getActiveModelClass($company, $modelId, $agentId) choisit le fournisseur en fonction du nom de société du modèle :

php
if (strpos($company, 'Google') !== false) {
    // builds MelisAIEngineModelGeminiService — requires MelisAIEngineGemini module
} elseif (strpos($company, 'Anthropic') !== false) {
    // builds MelisAIEngineModelClaudeService — requires MelisAIEngineClaude module
}

Pour ajouter un nouveau fournisseur (p. ex. OpenAI) : étendre MelisAIEngineModelService, implémenter les méthodes abstraites, l'enregistrer comme service, et ajouter une branche ici indexée sur le nom de la société.

Système MCP / tool-calling

Les tools sont déclarés à deux endroits : config['plugins']['melisaiengine']['datas']['function_declarations'] (nom, description, schéma JSON, booléen mcp) et la table melis_ai_tools. Un agent opte pour des tools via maa_agent_tools.

Lors de l'appel : getAgentFunctions() retourne les déclarations autorisées → addToolsToPayload() les injecte → lors d'un appel de tool, le fournisseur route via MelisAIEngineMcpService::isMcpTool($name) : les tools MCP vont vers invokeTool() (JSON-RPC sur stdio, protégé par disjoncteur) ; les tools intégrés vont vers MelisAIEngineFunctionService. Les résultats sont réinjectés et la conversation continue jusqu'à ce que le modèle signale la fin ou qu'un plafond de sécurité soit atteint.

Les serveurs MCP sont configurés sous config['mcp']['servers'][<name>] = {enabled, command, args, tools, timeout} ; MelisAIEngineMcpService les lance via proc_open et communique en JSON-RPC 2.0 (tools/list, invocation de tool).

Tables de base de données

Toutes les tables melis_ai_* sont gérées par ce module (dbdeploy: true) :

TableContenu
melis_ai_modelsModèles fournisseurs (société, mam_generative_model, lien clé API).
melis_ai_companiesSociétés IA (Google, Anthropic…).
melis_ai_platform_keysClés API par plateforme.
melis_ai_agentsAgents (maa_name, lien modèle, JSON maa_agent_tools, options fichiers).
melis_ai_agents_toolsAffectation agent ↔ tool.
melis_ai_toolsCatalogue des tools (mat_name, mat_desc, JSON mat_config).
melis_ai_instances / melis_ai_instance_transDéploiements nommés (instances) et leurs traductions.
melis_ai_scenario_steps / …_datas / …_datas_entryexitÉtapes de scénario, leurs données et paramètres d'entrée/sortie.
melis_ai_return_typesDéfinitions des types de retour d'étape.
melis_ai_filesFichiers attachés aux étapes/contexte.
melis_ai_daily_usageComptage des tokens et des appels par modèle/agent/instance/jour.
melis_ai_conversation_stateÉtat de conversation persisté (macs_key, JSON, GC automatique).

Exemple

Afficher une boîte de chat liée à une instance IA existante depuis n'importe quelle vue .phtml :

php
// Afficher la boîte de chat pour une instance nommée
echo $this->AIChatViewHelper($maiInstanceId);

Enregistrer un serveur MCP personnalisé et déclarer ses tools pour qu'un agent puisse les appeler :

php
// Dans la config d'un module — enregistrer le serveur MCP
'mcp' => [
    'servers' => [
        'my-mcp-server' => [
            'enabled' => true,
            'command' => 'node',
            'args'    => ['/path/to/server.js'],
            'tools'   => ['my_tool'],
            'timeout' => 30,
        ],
    ],
],
// Déclarer le tool avec mcp: true
'plugins' => [
    'melisaiengine' => [
        'datas' => [
            'function_declarations' => [
                [
                    'name'        => 'my_tool',
                    'description' => 'Does something useful',
                    'mcp'         => true,
                    // JSON schema for parameters…
                ],
            ],
        ],
    ],
],

Fichiers clés

ÉlémentChemin
Contrat fournisseur (abstrait)vendor/melisplatform/melis-ai-engine/src/Service/MelisAIEngineModelService.php
Registre + sélection du fournisseurvendor/melisplatform/melis-ai-engine/src/Service/MelisAIEngineService.php
Runtime agent/scénariovendor/melisplatform/melis-ai-engine/src/Service/MelisAIEngineAgentService.php
Pont MCP/toolsvendor/melisplatform/melis-ai-engine/src/Service/MelisAIEngineMcpService.php
Stockage de conversation persistévendor/melisplatform/melis-ai-engine/src/Service/MelisAIEngineConversationStore.php
Fonctions intégréesvendor/melisplatform/melis-ai-engine/src/Service/MelisAIEngineFunctionService.php
Contrôleur de chatvendor/melisplatform/melis-ai-engine/src/Controller/AIController.php
Plugins de type d'étapevendor/melisplatform/melis-ai-engine/src/Controller/Plugin/
Modèles de tables BDDvendor/melisplatform/melis-ai-engine/src/Model/Tables/
Config du modulevendor/melisplatform/melis-ai-engine/config/module.config.php

Voir aussi : MelisAI, MelisAIEngineClaude, MelisAIEngineGemini, MelisAIToolCreator.