Skip to content

AI 整合

Doggy 透過 Symfony AI Bundle 深度整合 AI 能力,支援多模型提供者和統一介面呼叫。

概述

AI 系統核心位於 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 抽象

模型提供者

AiManager 支援多個提供者,透過 AI_PROVIDER 環境變數切換:

提供者平台服務設定
阿里百煉ai.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)%'

設定

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

呼叫 AI

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 自動處理:

  • 提供者選擇(根據 AI_PROVIDER
  • 串流回應(stream 模式,支援 qwq-32b 等推理模型)
  • 模型設定合併

LLM 設定體系

除了 AiManager 直接呼叫,框架還提供圖形化的 LLM 設定系統,支援:

  • 多廠商:OpenAI、Azure、Anthropic、Ollama、自訂閘道
  • 角色路由:LlmRole 綁定模型,依用途動態切換
  • 金鑰加密:API Key 加密儲存
  • 容錯移轉:主要廠商失敗自動降級

AI 執行階段

基於 symfony/ai-agent 建置的 Agent 執行階段(見 AI 助手):

  • ReAct 迴圈:推理 + 工具呼叫,直到回傳結果
  • 上下文註冊:頁面透過 window.__AI_CONTEXT__ 註冊上下文
  • 工具呼叫#[AsTool] 註解宣告工具方法

快速模型切換

NaturalLanguageQueryAgent 支援設定快速模型用於 NL 查詢(避免使用推理模型造成回應緩慢):

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

基於 MIT 協議開源 | Copyright © 2026 Doggy