Integração IA
O Doggy integra capacidades de IA de forma aprofundada através do Symfony AI Bundle, com suporte para múltiplos fornecedores de modelos e invocação através de uma interface unificada.
Visão geral
O núcleo do sistema de IA localiza-se em src/Service/AI/:
src/Service/AI/
├── AiManager.php # Gestor de IA (interface de invocação unificada)
├── AgentManager.php # Gestor de Agent (Facade)
├── Agent/
│ ├── CodingAgent.php # Assistente de codificação
│ ├── NaturalLanguageQueryAgent.php # Consulta em linguagem natural
│ ├── VisionAgent.php # Reconhecimento visual
│ └── PasswordPolicyAgent.php # Agent de política de palavras-passe
├── Runtime/ # Runtime de IA (motor de Agent)
│ ├── AiAssistant.php # Fábrica de Agent genérica (ReAct)
│ ├── AiContextRegistry.php # Registo de contextos
│ ├── LlmRouterPlatform.php # Ponte PlatformInterface
│ └── ChatResultConverter.php # Conversão de formatos de resposta
├── Context/ # Fornecedores de contexto de página
│ └── ViewEditorAiContext.php # Contexto do editor de vistas
├── Orchestrator/ # Orquestração de IA (intenções + subagentes)
│ ├── IntentAgent.php # Agent principal de reconhecimento de intenções
│ └── SubAgent/ # 6 subagentes de cenário
├── Tool/ # Chamadas de ferramentas
│ ├── ViewEditorToolProvider.php # Ferramentas do editor de vistas
│ ├── ViewFileToolProvider.php # Ferramentas de ficheiros de vista
│ └── ChromeDevToolsToolProvider.php # Ferramentas de browser CDP
└── Provider/
└── AbstractOpenAiProvider.php # Abstração da API OpenAIFornecedores de modelo
AiManager suporta vários fornecedores, alternados através da variável de ambiente AI_PROVIDER:
| Fornecedor | Serviço de plataforma | Configuração |
|---|---|---|
| Alibaba Bailian | 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)%'Configuração
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-8bInvocar a IA
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', // substituição opcional do modelo predefinido
]);
}
}AiManager trata automaticamente de:
- Seleção do fornecedor (com base em
AI_PROVIDER) - Resposta em streaming (modo stream, suporta modelos de raciocínio como qwq-32b)
- Fusão da configuração do modelo
Sistema de configuração LLM
Para além da invocação direta via AiManager, o framework também fornece um sistema de configuração LLM gráfico, que suporta:
- Vários fornecedores: OpenAI, Azure, Anthropic, Ollama, gateways personalizados
- Roteamento por papel: LlmRole ligado a modelos, alternância dinâmica consoante a utilização
- Criptografia de chaves: armazenamento encriptado das API Key
- Failover: degradação automática quando o fornecedor principal falha
Runtime de IA
Runtime de Agent construído sobre symfony/ai-agent (ver Assistente IA):
- Ciclo ReAct: raciocínio + chamadas de ferramentas até retornar um resultado
- Registo de contexto: as páginas registam contexto através de
window.__AI_CONTEXT__ - Chamadas de ferramentas: métodos de ferramenta declarados com a anotação
#[AsTool]
Alternância rápida de modelo
NaturalLanguageQueryAgent suporta a configuração de um modelo rápido para consultas NL (evitando respostas lentas de modelos de raciocínio):
php
if ($this->provider === 'aliyun' && $this->aliyunFastModelId) {
$options['model'] = $this->aliyunFastModelId;
}