Sistema Agent
O sistema Agent do Doggy fornece vários agentes inteligentes, acedidos de forma unificada através do Facade AgentManager, e suporta agentes de runtime baseados em symfony/ai-agent.
Visão geral
O sistema Agent localiza-se em src/Service/AI/Agent/ e é coordenado de forma unificada através do AgentManager:
// src/Service/AI/AgentManager.php
class AgentManager
{
public function getQueryAgent(): NaturalLanguageQueryAgent
public function getVisionAgent(): VisionAgent
public function getCodingAgent(): CodingAgent
public function getPasswordPolicyAgent(): PasswordPolicyAgent
}Além disso, a arquitetura de agentes de runtime baseada em symfony/ai-agent (ciclo ReAct + chamadas de ferramentas) é descrita em Assistente IA, e o reconhecimento de intenções com a orquestração de subagentes de cenário é descrito em Aprimoramento de vista IA.
Assistente de codificação
CodingAgent para geração genérica de código:
use App\Service\AI\Agent\CodingAgent;
$code = $codingAgent->generateCode('Create a Symfony controller for employee CRUD');Consulta em linguagem natural
NaturalLanguageQueryAgent converte linguagem natural em condições de filtro do DataGrid, profundamente integrado com o DataGridService:
use App\Service\AI\Agent\NaturalLanguageQueryAgent;
$filters = $queryAgent->parseQuery(
text: '上个月入职的部门经理',
entityClass: Employee::class,
currentFilters: []
);
// Retorna: { filters: [...], thought_process: "..." }Exemplos suportados de linguagem natural:
- "Mostrar os departamentos com estado ativado"
- "Departamentos cujo nome contém 'Tecnologia'"
- "Empregados adicionados na última semana"
Como funciona
- Obtém o Schema de campos da entidade a partir do
DataGridService - Constrói o prompt de sistema (com nomes de campos, tipos, operadores)
- Invoca o modelo de IA para gerar as condições de filtro em JSON
- Corrige automaticamente campos de relação (ex.:
department→department.name) - Suporta combinações lógicas AND/OR
- Trata as etiquetas
</think>dos modelos DeepSeek/raciocínio
Agent de política de palavras-passe
PasswordPolicyAgent converte políticas de segurança em linguagem natural em expressões DSL:
$policy = $passwordPolicyAgent->parsePolicyInstruction(
'密码长度至少8位,必须包含数字和大写字母'
);
// Retorna: { and: [{field: "length", operator: ">=", value: 8}, {field: "has_number", ...}, {field: "has_uppercase", ...}] }Reconhecimento visual
VisionAgent para análise de imagens (interface reservada, aguardando suporte multimodal):
$result = $visionAgent->analyzeImage($imageUrl, '识别这张发票的信息');Extensão
Adicionar um agente personalizado:
- Criar a classe do agente, injetando o
AiManager - Registá-lo no
AgentManager