Skip to content

Intégration IA

Doggy intègre en profondeur les capacités IA via le Symfony AI Bundle, avec prise en charge de plusieurs fournisseurs de modèles et d'une interface d'appel unifiée.

Aperçu

Le cœur du système IA se trouve dans src/Service/AI/ :

src/Service/AI/
├── AiManager.php                    # AI 管理器(统一调用接口)
├── AgentManager.php                 # Agent 管理器(Facade)
├── Agent/
│   ├── CodingAgent.php              # 编码助手
│   ├── NaturalLanguageQueryAgent.php # 自然语言查询
│   ├── VisionAgent.php              # 视觉识别
│   └── PasswordPolicyAgent.php      # 密码策略 Agent
├── Runtime/                         # AI 运行时(Agent 引擎)
│   ├── AiAssistant.php              # 泛化 Agent 工厂(ReAct)
│   ├── AiContextRegistry.php        # 上下文注册表
│   ├── LlmRouterPlatform.php        # PlatformInterface 桥接
│   └── ChatResultConverter.php      # 响应格式转换
├── Context/                         # 页面上下文提供者
│   └── ViewEditorAiContext.php      # 视图编辑器上下文
├── Orchestrator/                    # AI 编排(意图识别 + 子 Agent)
│   ├── IntentAgent.php              # 意图识别主 Agent
│   └── SubAgent/                    # 6 个场景子 Agent
├── Tool/                            # 工具调用
│   ├── ViewEditorToolProvider.php   # 视图编辑器工具
│   ├── ViewFileToolProvider.php     # 视图文件工具
│   └── ChromeDevToolsToolProvider.php # CDP 浏览器工具
└── Provider/
    └── AbstractOpenAiProvider.php   # OpenAI API 抽象

Fournisseurs de modèles

AiManager prend en charge plusieurs fournisseurs, sélectionnés via la variable d'environnement AI_PROVIDER :

FournisseurService de plateformeConfiguration
Alibaba Bailianai.platform.generic.aliyunALIYUN_MODEL_ID
LM Studioai.platform.generic.lmstudioLM_STUDIO_MODEL_ID
yaml
# config/packages/ai.yaml
ai:
  providers:
    alibaba:
      type: alibaba_bailian
      api_key: '%env(ALIBABA_AI_KEY)%'

Configuration

bash
# .env
AI_PROVIDER=aliyun
ALIYUN_MODEL_ID=qwq-32b
ALIYUN_FAST_MODEL_ID=qwen-plus
LM_STUDIO_MODEL_ID=deepseek/deepseek-r1-0528-qwen3-8b

Appeler l'IA

php
use App\Service\AI\AiManager;

class SomeService
{
    public function __construct(private AiManager $aiManager) {}

    public function ask(): string
    {
        return $this->aiManager->chat([
            ['role' => 'system', 'content' => 'You are a helpful assistant.'],
            ['role' => 'user', 'content' => 'Hello!'],
        ], [
            'temperature' => 0.7,
            'model' => 'qwen-plus',  // 可选覆盖默认模型
        ]);
    }
}

AiManager gère automatiquement :

  • La sélection du fournisseur (selon AI_PROVIDER)
  • La réponse en streaming (mode stream, prise en charge des modèles à raisonnement comme qwq-32b)
  • La fusion des configurations de modèle

Système de configuration LLM

Outre l'appel direct via AiManager, le framework fournit également un système de configuration LLM graphique prenant en charge :

  • Multi-fournisseurs : OpenAI, Azure, Anthropic, Ollama, passerelle personnalisée
  • Routage par rôle : LlmRole lié à un modèle, bascule dynamique selon l'usage
  • Chiffrement des clés : stockage chiffré des clés API
  • Bascule en cas de panne : dégradation automatique si le fournisseur principal échoue

Runtime IA

Runtime d'agents construit sur symfony/ai-agent (voir Assistant IA) :

  • Boucle ReAct : raisonnement + appel d'outils jusqu'à obtention d'un résultat
  • Enregistrement de contexte : les pages enregistrent leur contexte via window.__AI_CONTEXT__
  • Appel d'outils : les méthodes d'outil sont déclarées avec l'annotation #[AsTool]

Bascule rapide de modèle

NaturalLanguageQueryAgent prend en charge la configuration d'un modèle rapide pour les requêtes NL (afin d'éviter la lenteur des modèles à raisonnement) :

php
if ($this->provider === 'aliyun' && $this->aliyunFastModelId) {
    $options['model'] = $this->aliyunFastModelId;
}

Open source sous licence MIT | Copyright © 2026 Doggy