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.aliyun | ALIYUN_MODEL_ID |
| LM Studio | ai.platform.generic.lmstudio | LM_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-8bAI 호출
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;
}