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