@oliverlessa/gemini-agent-lib
Version:
Uma biblioteca NodeJS para criar agentes de IA com Gemini LLM
175 lines (143 loc) • 6.64 kB
JavaScript
/**
* Teste do gerenciamento automático de memórias
*
* Este teste verifica o funcionamento do mecanismo de gerenciamento automático
* de memórias de fatos e resumos no ChatAgent.
*/
const assert = require('assert');
const path = require('path');
const fs = require('fs');
const { ChatAgent, VertexAILLM } = require('../index');
// Importar adaptadores diretamente
const SQLiteConversationMemoryAdapter = require('../lib/memory/sqlite-conversation-memory-adapter');
const SQLiteFactMemoryAdapter = require('../lib/memory/sqlite-fact-memory-adapter');
const SQLiteSummaryMemoryAdapter = require('../lib/memory/sqlite-summary-memory-adapter');
// Classes base não são instanciadas diretamente
// const ConversationMemory = require('../lib/memory/conversation-memory');
// const FactMemory = require('../lib/memory/fact-memory');
// const SummaryMemory = require('../lib/memory/summary-memory');
// Configurações para o teste
const TEST_DB_PATH = path.join(__dirname, 'test_auto_memory.db');
const TEST_CHAT_ID = 'test-auto-memory-chat-id';
// Função para limpar o banco de dados de teste
function cleanupTestDb() {
if (fs.existsSync(TEST_DB_PATH)) {
fs.unlinkSync(TEST_DB_PATH);
console.log(`Banco de dados de teste removido: ${TEST_DB_PATH}`);
}
}
// Função principal de teste
async function runTests() {
console.log('Iniciando testes de gerenciamento automático de memórias...\n');
// Limpar banco de dados de teste anterior
cleanupTestDb();
try {
// Criar adaptadores de memória para teste (instanciar adaptadores diretamente)
const conversationMemory = new SQLiteConversationMemoryAdapter({
dbConfig: { dbPath: TEST_DB_PATH }
});
const factMemory = new SQLiteFactMemoryAdapter({
dbConfig: { dbPath: TEST_DB_PATH }
});
const summaryMemory = new SQLiteSummaryMemoryAdapter({
dbConfig: { dbPath: TEST_DB_PATH }
});
// Criar um mock do LLM para testes
// Este mock simula o comportamento do LLM real, mas com respostas predefinidas
const mockLLM = {
mode: 'chat',
generateContent: async (params) => {
// Se for uma chamada para o mecanismo de avaliação de memória
if (params.context && params.context.includes('sistema de gerenciamento de memória')) {
// Simular extração de fatos e geração de resumo
return {
text: `{
"fatos": [
{"chave": "nome_usuario", "valor": "João Silva"},
{"chave": "profissao", "valor": "engenheiro"},
{"chave": "cidade", "valor": "Rio de Janeiro"}
],
"resumo": "O usuário se chama João Silva, é engenheiro e mora no Rio de Janeiro."
}`
};
}
// Para chamadas normais do LLM, retornar uma resposta simples
return {
text: "Olá! Como posso ajudar você hoje?",
functionCall: null
};
}
};
// Criar instância do ChatAgent com gerenciamento automático de memórias
const chatAgent = new ChatAgent({
role: "Assistente de Teste",
objective: "Testar o gerenciamento automático de memórias",
context: "Você é um assistente de teste.",
llm: mockLLM,
conversationMemory: conversationMemory,
factMemory: factMemory,
summaryMemory: summaryMemory,
autoManageFactMemory: true,
autoManageSummaryMemory: true
});
// Sobrescrever o chatId para facilitar os testes
chatAgent.chatId = TEST_CHAT_ID;
console.log('1. Testando processamento de mensagem com gerenciamento automático...');
// Processar uma mensagem de teste
const userMessage = "Olá, meu nome é João Silva. Sou engenheiro e moro no Rio de Janeiro.";
const response = await chatAgent.processUserMessage(userMessage);
console.log(` Mensagem do usuário: "${userMessage}"`);
console.log(` Resposta do agente: "${response.text}"`);
// Verificar se os fatos foram extraídos automaticamente
console.log('\n2. Verificando extração automática de fatos...');
const facts = await chatAgent.getAllFacts();
console.log(` Fatos extraídos: ${JSON.stringify(facts)}`);
// Testes de asserção para os fatos
assert(facts.nome_usuario === 'João Silva', 'Falha: nome_usuario não foi extraído corretamente');
assert(facts.profissao === 'engenheiro', 'Falha: profissao não foi extraída corretamente');
assert(facts.cidade === 'Rio de Janeiro', 'Falha: cidade não foi extraída corretamente');
console.log(' ✓ Fatos extraídos corretamente');
// Verificar se o resumo foi gerado automaticamente
console.log('\n3. Verificando geração automática de resumo...');
const summary = await chatAgent.getLatestSummary();
console.log(` Resumo gerado: "${summary}"`);
// Teste de asserção para o resumo
assert(
summary === 'O usuário se chama João Silva, é engenheiro e mora no Rio de Janeiro.',
'Falha: resumo não foi gerado corretamente'
);
console.log(' ✓ Resumo gerado corretamente');
// Testar a coexistência de gerenciamento manual e automático
console.log('\n4. Testando coexistência de gerenciamento manual e automático...');
// Adicionar um fato manualmente
await chatAgent.setFact('hobby', 'fotografia');
// Verificar se o fato manual foi adicionado junto com os automáticos
const updatedFacts = await chatAgent.getAllFacts();
console.log(` Fatos após adição manual: ${JSON.stringify(updatedFacts)}`);
// Teste de asserção para o fato manual
assert(updatedFacts.hobby === 'fotografia', 'Falha: fato manual não foi adicionado corretamente');
assert(updatedFacts.nome_usuario === 'João Silva', 'Falha: fatos automáticos foram perdidos');
console.log(' ✓ Gerenciamento manual e automático coexistem corretamente');
// Fechar conexões
await conversationMemory.close();
await factMemory.close();
await summaryMemory.close();
console.log('\nTodos os testes foram concluídos com sucesso!');
} catch (error) {
console.error('Erro durante os testes:', error);
throw error;
} finally {
// Limpar banco de dados de teste
cleanupTestDb();
}
}
// Executar os testes
runTests()
.then(() => {
console.log('\nTestes de gerenciamento automático de memórias concluídos.');
process.exit(0);
})
.catch((error) => {
console.error('\nTestes falharam:', error);
process.exit(1);
});