fix(ia): a camada plataforma não impõe "assistente virtual" à apresentação do agente

platform.md entra antes das instruções do agente em todo turno e mandava
"Você é um assistente virtual de vendas" e "apresente-se como assistente
virtual" na primeira interação. Com o agente instruído a usar só o nome
próprio, as duas ordens brigavam e o modelo repetia o termo.

A apresentação passa a ser do agente; fica a regra de compliance: nunca
afirmar ser humano e responder com honestidade se perguntarem.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
rafaelbatistazz
2026-09-13 22:40:10 +00:00
co-authored by Claude Opus 5
parent 53428145bb
commit 209feac959
4 changed files with 68 additions and 6 deletions
@@ -0,0 +1,15 @@
---
impacto: nada_mudou
secao: corrigido
titulo: O agente para de se apresentar como assistente virtual contra as instruções dele
---
O texto de base que o sistema coloca antes das instruções de todo agente
mandava ele "se apresentar como assistente virtual" na primeira interação. Quem
escrevia na tela do agente um nome próprio e pedia para não usar esse termo via o
agente repetir "assistente virtual" mesmo assim, porque as duas ordens chegavam
juntas. A apresentação agora fica com as instruções do agente; continua valendo
que ele nunca afirma ser humano e responde com honestidade se perguntarem.
Vale para instalações novas. Em instalação existente o texto de base já gravado
no banco não é trocado sozinho. Crédito: @rafaelbatistazz.
+8 -5
View File
@@ -7,14 +7,17 @@
## Identidade
Você é um assistente virtual de vendas. Você conversa por WhatsApp em nome da
empresa da organização, sempre em português do Brasil, com naturalidade e
respeito.
Você conversa por WhatsApp em nome da empresa da organização, sempre em
português do Brasil, com naturalidade e respeito. Nome, apresentação e persona
vêm das instruções do agente, logo abaixo desta camada.
## Transparência
- Na primeira interação de uma conversa, apresente-se como assistente virtual.
- Nunca finja ser humano; se perguntarem, confirme que é um assistente virtual.
- Apresente-se como as instruções do agente definem. Não acrescente por conta
própria "assistente virtual", "robô" ou "IA" à apresentação.
- Nunca afirme ser humano. Se a pessoa perguntar diretamente se está falando
com um robô ou uma IA, responda com honestidade, em uma frase, e retome o
atendimento.
- Se a pessoa pedir para falar com um humano, acolha o pedido de imediato — a
transferência é feita pelo sistema, você apenas confirma que vai acontecer.
+1 -1
View File
@@ -80,7 +80,7 @@ describe("seedPlatformPlaybook (boot do worker, self-host)", () => {
const loaded = await loadPlaybook(pool, ORG);
expect(loaded.prompt).toContain("=== playbook:platform ===");
expect(loaded.prompt).toContain("assistente virtual");
expect(loaded.prompt).toContain("Nunca afirme ser humano");
expect(loaded.versionIds.platform).toBe(after.pointerVersionId);
});
@@ -0,0 +1,44 @@
import { readFileSync } from "node:fs";
import path from "node:path";
import { describe, expect, it } from "vitest";
/**
* A CAMADA PLATAFORMA NÃO DITA COMO O AGENTE SE APRESENTA.
*
* ## O defeito que fez este teste existir
*
* `platform.md` entra no prompt ANTES das instruções do agente, em todo turno, e mandava
* "Você é um assistente virtual de vendas" e "Na primeira interação, apresente-se como
* assistente virtual". O dono que escreve na tela "me chamo Clara, da loja — nunca diga
* que é assistente virtual" recebia duas ordens contrárias no mesmo prompt, e o modelo
* obedecia a da plataforma várias vezes por conversa. Medido numa instalação real
* (gpt-5.6-luna, painel de Teste): "assistente virtual" voltava mesmo com a proibição
* explícita no prompt do agente.
*
* Apresentação é persona, e persona é do agente. O que é compliance — não afirmar ser
* humano, responder com honestidade quando perguntam — continua aqui, e o gate
* `disclosure` (template por organização) segue sendo o caminho de quem QUER a frase fixa.
*
* ## O que este teste NÃO prova
*
* Que o modelo obedece. Ele só garante que a ordem contrária saiu do texto semeado, e que a
* regra de não afirmar ser humano ficou. E só alcança instalação NOVA: o seed não toca em
* ponteiro existente (regra dura nº 10).
*/
const PLATFORM = readFileSync(
path.join(process.cwd(), "lib", "agent-engine", "playbooks", "platform.md"),
"utf8",
);
describe("platform.md não impõe apresentação ao agente", () => {
it("não manda se apresentar como assistente virtual", () => {
expect(PLATFORM).not.toMatch(/apresente-se como assistente virtual/i);
expect(PLATFORM).not.toMatch(/Você é um assistente virtual/i);
});
it("mantém a regra de não afirmar ser humano e de responder com honestidade", () => {
expect(PLATFORM).toMatch(/Nunca afirme ser humano/);
expect(PLATFORM).toMatch(/responda com honestidade/);
});
});