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