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