Skip to content

KI-Integration

Doggy integriert KI-Fähigkeiten tiefgehend über das Symfony AI Bundle und unterstützt mehrere Modellanbieter mit einheitlichem Schnittstellenaufruf.

Übersicht

Der Kern des KI-Systems befindet sich unter 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 抽象

Modellanbieter

AiManager unterstützt mehrere Anbieter, die über die Umgebungsvariable AI_PROVIDER umgeschaltet werden:

AnbieterPlattformdienstKonfiguration
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)%'

Konfiguration

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

KI aufrufen

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 übernimmt automatisch:

  • Anbieterauswahl (basierend auf AI_PROVIDER)
  • Streaming-Antworten (Stream-Modus, unterstützt Reasoning-Modelle wie qwq-32b)
  • Zusammenführen der Modellkonfiguration

LLM-Konfigurationssystem

Neben der direkten Verbindung über AiManager bietet das Framework auch ein grafisches LLM-Konfigurationssystem, das Folgendes unterstützt:

  • Mehrere Anbieter: OpenAI, Azure, Anthropic, Ollama, benutzerdefinierte Gateways
  • Rollen-Routing: LlmRole bindet Modelle, dynamische Umschaltung je nach Verwendungszweck
  • Verschlüsselung von Schlüsseln: API-Keys werden verschlüsselt gespeichert
  • Failover: Automatisches Downgrade bei Ausfall des Hauptanbieters

KI-Laufzeit

Agent-Laufzeit auf Basis von symfony/ai-agent (siehe AI-Assistent):

  • ReAct-Schleife: Reasoning + Tool-Aufrufe, bis ein Ergebnis zurückgegeben wird
  • Kontext-Registrierung: Seiten registrieren Kontext über window.__AI_CONTEXT__
  • Tool-Aufrufe: Tool-Methoden werden mit #[AsTool] deklariert

Schneller Modellwechsel

NaturalLanguageQueryAgent unterstützt die Konfiguration eines schnellen Modells für NL-Abfragen (um langsame Antworten durch Reasoning-Modelle zu vermeiden):

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

Open Source unter MIT | Copyright © 2026 Doggy