Configuration LLM
Doggy fournit un système graphique de gestion de la configuration LLM, avec prise en charge d'une configuration flexible multi-fournisseurs, multi-modèles et multi-rôles, ainsi que d'une bascule dynamique à l'exécution, offrant un support de modèles unifié pour les fonctionnalités IA.
Aperçu
Le système de configuration LLM se trouve dans src/Service/Platform/Llm/, s'inspirant des principes de conception de Platform du Symfony AI Bundle :
- Support multi-fournisseurs : OpenAI, Azure, Anthropic, Ollama, passerelle compatible OpenAI personnalisée
- Gestion graphique : pas de configuration YAML, gestion dynamique via l'interface d'administration
- Séparation des rôles : configuration et usage découplés, les rôles sont liés aux modèles
- Chiffrement des clés : stockage chiffré des clés API, jamais exposées au frontend
Modèle de données
LlmProvider (configuration du fournisseur)
| Champ | Type | Description |
|---|---|---|
| name | string | Nom d'affichage, ex. « GPT-4o » |
| provider | string | Identifiant du fournisseur : openai / anthropic / azure / ollama / custom |
| model | string | Nom du modèle : gpt-4o / claude-3-5-sonnet / ... |
| apiKey | encrypted | Clé API (stockage chiffré) |
| apiEndpoint | string | URL de l'interface (facultatif) |
| options | JSON | Paramètres supplémentaires : temperature, max_tokens, top_p, etc. |
| isEnabled | boolean | Actif ou non |
| sortOrder | int | Ordre de tri |
LlmRole (rôle/usage)
| Champ | Type | Description |
|---|---|---|
| code | string | Code de rôle : view_editor / entity_generation / workflow_analysis / query_assistant / chat / coding |
| label | string | Nom d'affichage |
| providerId | UUID | Configuration de modèle liée |
| systemPrompt | text | Prompt système du rôle |
| options | JSON | Surcharge des paramètres au niveau du rôle |
| isEnabled | boolean | Actif ou non |
Planification des usages par rôle
| Code de rôle | Usage | Modèle recommandé |
|---|---|---|
| view_editor | Assistant IA du concepteur de vues | gpt-4o / claude-3.5-sonnet |
| entity_generation | Génération d'entités assistée par IA | gpt-4o-mini |
| workflow_analysis | Analyse et suggestions de workflows | gpt-4o |
| query_assistant | Langage naturel → requête de données | gpt-4o-mini |
| chat | Assistant de conversation IA générique | gpt-4o-mini |
| coding | Génération de code (Twig/JS/PHP) | gpt-4o / claude-3.5-sonnet |
Chaîne d'appel
LlmRouter::chatByRole(roleCode, messages, opts)
├─ 查询 LlmRole(code) → 获取绑定的 LlmProvider
├─ LlmGatewayFactory::create(provider) → 实例化适配器
├─ 解密 API Key(LlmEncryptor)
└─ 调用 LLM API(支持工具调用、流式响应)LlmGatewayFactory
Achemine automatiquement l'adaptateur selon le champ LlmProvider.provider :
| provider | Adaptateur | Description |
|---|---|---|
| openai | OpenAiGateway | Interface compatible OpenAI |
| anthropic | AnthropicGateway | API Anthropic Claude |
| azure | AzureGateway | Azure OpenAI |
| ollama | OllamaGateway | Ollama local |
| custom | CustomGateway | Passerelle compatible OpenAI personnalisée |
Bascule en cas de panne
LlmRouter prend en charge chatByRoleWithFallback : en cas d'échec du fournisseur principal, le système bascule automatiquement vers un modèle de secours.
Interface d'administration
Point d'entrée : Paramètres système → Configuration LLM (/admin/platform/llm-config)
Page de liste
- Affichage sous forme de cartes par fournisseur, un fournisseur pouvant correspondre à plusieurs variantes de modèles
- Affichage direct des rôles/usages liés au modèle
- Interrupteur pour activer/désactiver
- Tri par glisser-déposer
Formulaire d'édition
- Nom, fournisseur, modèle, clé API (stockage chiffré), URL de l'interface
- Gestion des rôles (LlmRoleType) : code de rôle, prompt système, liaison de modèle
Chiffrement des clés
LlmEncryptor chiffre et déchiffre les clés API avec la clé de chiffrement de la plateforme. Les clés ne sont stockées que côté serveur, le frontend n'a jamais accès aux clés brutes :
// 存储时
$encrypted = $llmEncryptor->encrypt($apiKey);
// 调用时
$apiKey = $llmEncryptor->decrypt($provider->getApiKey());Intégration à l'assistant IA
L'assistant IA (voir Assistant IA) réutilise le système LlmRole/LlmProvider :
前端 → POST /api/admin/ai/chat
→ LlmRouter.chatByRole(roleCode, messages)
→ 查询 LlmRole → LlmGatewayFactory → LLM API- Les clés API sont stockées uniquement côté serveur (chiffrement en base de données)
- La bascule de modèle s'effectue dans l'interface d'administration, sans modification de code
- Le routage multi-fournisseurs est géré automatiquement par LlmGatewayFactory
Fichiers associés
| Fichier | Rôle |
|---|---|
src/Service/Platform/Llm/LlmGatewayInterface.php | Interface de passerelle |
src/Service/Platform/Llm/LlmGatewayFactory.php | Fabrique d'adaptateurs |
src/Service/Platform/Llm/LlmRouter.php | Routage par rôle + bascule en cas de panne |
src/Service/Platform/Llm/ModelRegistry.php | Registre des modèles |
src/Service/Platform/LlmEncryptor.php | Chiffrement/déchiffrement des clés API |
src/Entity/Platform/LlmProvider.php | Entité de configuration du fournisseur |
src/Entity/Platform/LlmRole.php | Entité de configuration du rôle |
src/Controller/Admin/Platform/LlmConfigController.php | Contrôleur de l'interface d'administration |