Neofir
Home / Playbook
Playbook

Cum operează un agent conversațional pe canale multiple

Un reper tehnic, vertical-agnostic, despre cele cinci primitive pe care un agent conversațional le folosește pentru a opera consistent peste web, Instagram, Messenger și WhatsApp: personalitate, cunoștințe, unelte, canale, inbox.

Rev. 2026-06-02 Aprox. 25 min de citit
RO EN
Capitolul 01

Cele cinci primitive

Un agent conversațional, indiferent de vertical, este compus din cinci primitive separabile. Le definim explicit pentru că orice ambiguitate între ele se traduce într-un comportament inconsistent în producție.

Personalitatea este politica de comportament: rolul agentului, mediul în care operează, tonul, obiectivul fiecărei interacțiuni și garda de protecție (ce nu are voie să facă). Personalitatea este declarativă și se exprimă printr-un set fix de câmpuri, nu printr-un script de dialog.

Cunoștințele sunt corpusul de documente pe care agentul îl poate consulta — descrieri de servicii, politici, FAQ, prețuri, proceduri interne. Sunt indexate pentru retrieval-augmented generation (RAG) și injectate selectiv în prompt la fiecare răspuns.

Uneltele sunt funcțiile pe care agentul le poate apela: rezervarea unui slot, căutarea unei comenzi, trimiterea unei oferte, escaladarea către un om. O unealtă are o schemă de intrare strictă, un comportament determinist și un contract de rezultat. Modelul decide când să o apeleze; codul tău decide ce face.

Canalele sunt suprafețele prin care același agent comunică: widget web embeddable, Instagram DM, Facebook Messenger, WhatsApp Business. Fiecare canal are constrângeri proprii — lungime, formatare, fereastră de mesagerie — dar agentul rămâne unul singur. Diferă transportul, nu personalitatea.

Inboxul este interfața operatorului uman. Conversațiile pot fi monitorizate, preluate manual, etichetate, sau atribuite. Inboxul este sursa adevărului pentru handoff: când agentul cedează controlul, când operatorul cedează înapoi.

Separarea acestor cinci primitive este principiul de bază. Un sistem care fuzionează două dintre ele (de exemplu, personalitate cu unelte, sau cunoștințe cu canal) devine rigid și greu de iterat. Le păstrăm ortogonale.

Capitolul 02

Definirea personalității

Personalitatea este descrisă prin cinci câmpuri fixe — rol, mediu, ton, obiectiv, gărzi. Acest model declarativ înlocuiește scripturile de dialog. Modelul de limbaj gestionează dialogul; tu gestionezi politica.

Rolul

Cine este agentul. O propoziție, nu un eseu. „Asistent care răspunde la întrebări despre programări și servicii pentru o echipă mică." Rolul fixează granița identității: agentul nu pretinde că este om, nici că este o altă companie.

Mediul

Contextul operațional: orele de funcționare, locația dacă este relevantă, ce poate vedea agentul (calendar, catalog de servicii, baza de clienți), ce nu vede. Mediul previne răspunsuri fabulatorii — agentul nu inventează informații pe care nu are cum să le aibă.

Tonul

Vocea pe care o folosește agentul. Concis vs. expansiv, formal vs. informal, cald vs. neutru. Tonul este observabil în output și se calibrează prin câteva exemple, nu prin reguli abstracte. Trei exemple bune valorează mai mult decât zece principii.

Obiectivul

Ce încearcă să obțină agentul la finalul fiecărei conversații. „Programare confirmată", „lead calificat cu nume și telefon", „întrebare rezolvată sau escaladare clară". Obiectivul este criteriul intern de evaluare — fără el, agentul devine reactiv și nu progresează.

Gărzile

Lista explicită de comportamente interzise. „Nu da estimări de preț pentru lucrări care nu sunt în catalog." „Nu confirma programări în afara intervalelor disponibile." „Nu trimite linkuri externe nespecificate." Gărzile sunt o listă scurtă, niciodată o secțiune lungă — un model nu reține bine zece pagini de interdicții.

Reguli de escaladare

Personalitatea include criteriile pentru predarea către om: complaint, ambiguitate persistentă după două runde, cereri în afara scopului, sume mari, sentiment negativ pronunțat. Escaladarea este o decizie, nu un colaps — agentul anunță clar și transferă context.

{
  "role": "Asistent care răspunde la întrebări despre serviciile și programările unei echipe mici.",
  "environment": {
    "hours": "Lu-Vi 09:00–18:00 EEST",
    "knowledge_sources": ["services.md", "policies.md", "calendar"],
    "out_of_scope": ["sfat juridic", "garanții comerciale"]
  },
  "tone": "Concis, cald, fără superlative. Maxim două propoziții per răspuns.",
  "goal": "Programare confirmată sau întrebare rezolvată cu o sursă citată.",
  "guardrails": [
    "Nu confirma sloturi în afara calendarului.",
    "Nu inventa prețuri care nu există în knowledge.",
    "Dacă utilizatorul cere refund, escaladează la operator."
  ],
  "escalation": {
    "on_complaint": true,
    "on_repeated_ambiguity": 2,
    "on_sentiment_negative": 0.8
  }
}
Capitolul 03

Ingerarea cunoștințelor

Cunoștințele sunt corpusul pe care agentul îl consultă la runtime. Calitatea răspunsurilor este o funcție directă a calității acestui corpus, nu a inteligenței modelului. Un model bun pe documente proaste produce răspunsuri proaste.

Ce să ingerezi

Documentele cu valoare maximă sunt cele pe care un operator uman le-ar deschide în paralel când răspunde unui client: catalog de servicii cu descrieri scurte, politica de anulare, prețuri (când sunt publice), proceduri de pre-vizită, FAQ existente. Documente cu valoare redusă: materiale de marketing, branding, manuale interne fără context client.

Cum afectează chunk-urile răspunsurile

RAG-ul nu vede documentul tău întreg; vede fragmente (chunk-uri) selectate pe similaritate cu întrebarea. Un chunk prea mare diluează relevanța; unul prea mic pierde context. Dimensiunea recomandată este 300–600 tokeni cu suprapunere de 50–100. Un singur document monolitic de 50 de pagini se comportă mai prost decât 30 de documente focalizate.

Structură peste prozã

Listele, tabelele și headerele scurte se chunk-uiesc mai bine decât paragrafele lungi. Dacă vrei ca agentul să răspundă consistent despre un serviciu, formatează-l ca un bloc structurat: nume, durată, preț (dacă publice), descriere scurtă, contraindicații, ce să aducă clientul. Nu îl scrie ca brochure.

Sursele citate

Configurează agentul să returneze, alături de răspuns, identificatorul chunk-ului folosit. Acesta este singurul mod prin care detectezi când agentul răspunde din cunoștințe vs. fabulează. Răspunsurile fără sursă citată trebuie tratate cu suspiciune.

Întreținerea corpusului

Un corpus stagnant produce drift: prețul s-a schimbat, programul s-a modificat, dar agentul citează încă valoarea veche. Recomandare practică: un proces lunar care trece prin lista documentelor și marchează ce a fost atins. Documentele neatinse de șase luni sunt candidate la audit.

Anti-pattern: ingerarea întregului site web cu un crawler. Conținutul de marketing („cea mai bună experiență"), navigația și footer-ul ajung în chunk-uri și otrăvesc retrieval-ul. Curăță întâi.
Capitolul 04

Unelte și pattern-uri de integrare

O unealtă este o funcție pe care modelul o poate invoca. Pattern-urile uzuale sunt patru: booking (rezervarea unui slot), lookup (citirea unei înregistrări), quoting (trimiterea unei oferte structurate), escalation (predarea către om). Restul sunt variante.

Booking

Agentul citește disponibilitatea, propune sloturi, confirmă rezervarea. Schema de intrare include obligatoriu: identificarea clientului (telefon sau email), serviciul, slotul propus. Validarea se face deterministic — modelul nu verifică disponibilitatea, ci doar inițiază apelul. Sursa adevărului rămâne calendarul intern.

Lookup

Citirea unei înregistrări existente: o programare, o comandă, statusul unei livrări. Schema este simplă (un identificator), iar răspunsul este structurat. Modelul rezumă rezultatul; nu îl reinterpretează. Dacă lookup-ul returnează un câmp pe care politica nu îl publică (de exemplu, marja de profit), filtrarea se face în unealtă, nu în prompt.

Quoting

Trimiterea unei oferte sau a unui rezumat structurat: preț, ce include, ce nu include, valabilitate. Quoting-ul este distinct de răspunsul în text liber — produce un mesaj formatat consistent, pe care utilizatorul îl poate referenția ulterior.

Escalation

Predarea către operator: agentul închide turnul curent, marchează conversația în inbox cu severitate și motiv, trimite un mesaj scurt utilizatorului („un coleg preia conversația"). Este o unealtă, nu un eveniment de sistem — modelul decide când o apelează pe baza regulilor de escaladare din personalitate.

Contractul unei unelte

{
  "name": "book_appointment",
  "description": "Rezervă un slot pentru un serviciu. Confirmă întâi disponibilitatea.",
  "input_schema": {
    "type": "object",
    "required": ["service_id", "slot_start", "customer_phone"],
    "properties": {
      "service_id": { "type": "string" },
      "slot_start": { "type": "string", "format": "date-time" },
      "customer_phone": { "type": "string", "pattern": "^\\+?[0-9]{8,15}$" },
      "notes": { "type": "string", "maxLength": 280 }
    }
  },
  "output_schema": {
    "type": "object",
    "properties": {
      "booking_id": { "type": "string" },
      "status": { "enum": ["confirmed", "pending", "rejected"] },
      "reason": { "type": "string" }
    }
  }
}

Cu cât schema este mai strictă, cu atât output-ul modelului este mai predictibil. Un parametru opțional ambiguu este loc de eroare. Validează intrarea înainte de a invoca codul real; respinge cu un mesaj clar dacă lipsește un câmp obligatoriu.

Capitolul 05

Canale și constrângerile lor

Agentul este același. Canalul nu este. Fiecare suprafață are particularități care impun adaptări la output, nu la personalitate.

Widget web

Sesiune efemeră, identificată printr-un cookie sau un identificator anonim. Mesajele sunt instant, fără latență de livrare. Suportă format bogat: butoane, carduri, atașamente. Sesiunea moare odată cu tab-ul; persistența contactului necesită identificare explicită (email sau telefon).

Instagram DM

Limitare de 1000 de caractere pe mesaj. Fereastră de 24 de ore: după ultimul mesaj al utilizatorului, agentul poate răspunde liber timp de 24h; după aceea, trebuie să folosească un Message Tag specific (HUMAN_AGENT, CONFIRMED_EVENT_UPDATE etc.). Reacții și mesaje vocale sunt evenimente separate. Storiile DM expiră în 24h și pot da context fără text.

Facebook Messenger

Limită de 2000 de caractere. Aceeași fereastră de 24 de ore ca Instagram. Suportă template-uri structurate (generic template, button template) care nu sunt disponibile pe Instagram. Persistent menu și ice breakers permit puncte de intrare predefinite.

WhatsApp Business

Fereastră de 24 de ore strictă, după care orice mesaj outbound trebuie să fie un Template Message pre-aprobat. Template-urile au categorii (utility, marketing, authentication) cu reguli diferite de aprobare. Mesajele text au limita de 4096 caractere, dar livrabilitatea bună necesită mesaje sub 1000. Read receipts sunt opt-in pentru utilizator.

Implicație de design: nu scrie copy specific canalului în personalitate. Scrie copy concis, și lasă un layer de rendering să decidă dacă răspunsul se taie la 1000, se împachetează într-un template, sau se trimite cu butoane.

Trimiterea proactivă

Pe widget poți inicia oricând. Pe IG/Messenger trebuie să răspunzi la ultima interacțiune sub 24h sau să folosești un Message Tag. Pe WhatsApp trebuie obligatoriu Template Message în afara ferestrei. Aceste reguli nu pot fi ocolite; orice arhitectură care presupune mesaje proactive nelimitate va eșua la audit Meta.

Capitolul 06

Inbox și handoff către operator

Inboxul este sursa de adevăr pentru starea unei conversații: cine vorbește acum (agentul sau operatorul), ce severitate are conversația, ce etichete o descriu. Designul corect al inboxului determină dacă echipa de suport are control sau este în panică.

Stările unei conversații

Trei stări sunt suficiente pentru majoritatea cazurilor: bot (agentul răspunde autonom), human (operator preluat, agentul tace), closed (conversația arhivată). Tranzițiile sunt explicite: bot → human prin escaladare sau preluare manuală, human → bot doar prin acțiunea operatorului.

Heuristici de severitate

Severitatea sortează coada operatorului. Câteva heuristici robuste, fără să fie ML-bazate:

Context la handoff

Când agentul cedează, operatorul nu trebuie să recitească toată conversația. Inboxul afișează un rezumat de 2–3 linii (intenția utilizatorului, ce a fost rezolvat, blocajul), istoricul complet sub el, și uneltele apelate cu rezultatele. Fără acest context, handoff-ul costă mai mult decât economia oferită de agent.

Reluarea automată

O conversație preluată de operator nu revine automat la bot. Reluarea este o acțiune explicită — un buton, un comentariu intern. Reluarea automată după timeout duce la situații în care agentul calcă peste un mesaj de la operator.

Capitolul 07

Măsurare și instrumentare

Un agent fără măsurare este o presupunere. Mai jos sunt semnalele care contează în primele luni de operare, ordonate după valoare.

Rata de rezolvare autonomă

Procentul de conversații finalizate fără escaladare. Definiția exactă depinde de obiectivul personalității (programare confirmată, lead salvat, întrebare rezolvată), dar trebuie să fie binară: rezolvat sau nu. O rată sub 40% în primele săptămâni este normală; sub 40% după trei luni sugerează o problemă cu personalitatea sau cu corpusul de cunoștințe.

Latența percepută

Timpul de la mesajul utilizatorului la primul caracter al răspunsului. Pentru o experiență acceptabilă: sub 2 secunde pe widget, sub 5 pe IG/Messenger, sub 8 pe WhatsApp. Latențe mai mari nu sunt fatale, dar erodează încrederea.

Lungimea conversației

Numărul de turnuri până la rezolvare. O conversație cu 12 turnuri într-un context care ar trebui rezolvat în 4 este un semnal că agentul nu progresează către obiectiv. Distribuția este mai informativă decât media; uită-te la coada lungă.

Apeluri la unelte

Câte unelte sunt apelate per conversație, care unelte, cu ce rată de eroare. O unealtă care eșuează în 30% din apeluri are o schemă proastă sau o validare lipsă în upstream. Loghează intrarea, ieșirea și timpul fiecărui apel.

Drift al cunoștințelor

O metrică simplă: procentul de răspunsuri care citează un chunk anume într-un interval de timp. Dacă un chunk nu mai este citat de o lună, fie a devenit irelevant, fie a fost înlocuit de altul mai bun, fie a fost îngropat de schimbări la corpus. Audit periodic.

Semnale calitative

Cantitatea de eșantioane revizuite manual contează mai mult decât orice dashboard. Recomandare: 20 de conversații pe săptămână, alese aleatoriu, citite integral. Niciun proxy automat nu înlocuiește această citire.

Capitolul 08

Moduri de eșec frecvente

Patru eșecuri sunt mai comune decât toate celelalte la un loc. Sunt previzibile și prevenibile.

Over-promise

Agentul confirmă ceva ce nu poate verifica: o disponibilitate, un preț, o procedură. Cauză uzuală: lipsa unei unelte pentru verificare, combinată cu un prompt prea encurajator („fii util cu orice preț"). Remediu: gărzi explicite („nu confirma fără apel la unealtă") și o unealtă de verificare obligatorie pentru fiecare afirmație concretă.

Under-route

Agentul nu escaladează când ar trebui. Operatorul descoperă cazul prin reclamație publică, nu prin coada de inbox. Cauză uzuală: criterii de escaladare prea vagi („dacă utilizatorul este frustrat") sau lipsa unei evaluări de sentiment. Remediu: criterii lexicale concrete pentru cuvinte de complaint, plus o regulă de fallback („dacă conversația depășește N runde fără progres, escaladează").

Token bloat

Prompt-ul crește pe măsură ce adăugi instrucțiuni, exemple, fragmente de cunoștințe. La un moment dat depășești bugetul modelului și retrieval-ul devine inconsistent. Cauză uzuală: nimeni nu monitorizează lungimea promptului. Remediu: buget explicit pe categorie (personalitate ≤500 tokeni, knowledge ≤2000, istoric ≤1000) și o alarmă când o categorie crește lunar cu >20%.

RAG drift

Documentele s-au schimbat, dar reindexarea nu a rulat. Sau invers: reindexarea a rulat, dar a stricat parsing-ul unui document important. Cauză uzuală: pipeline de ingestion fără verificări end-to-end. Remediu: un set mic de întrebări canonice care trebuie să returneze chunk-uri așteptate. Rulează după fiecare reindex; alertează la regresii.

Principiu unificator: aceste patru moduri de eșec au în comun lipsa unei bucle de feedback. Adaugă verificare; eșecurile devin vizibile înainte să devină problematice.
English version

How a conversational agent operates across channels

A vertical-agnostic technical reference covering the five primitives a conversational agent uses to operate consistently across web, Instagram, Messenger, and WhatsApp: personality, knowledge, tools, channels, inbox.

Chapter 01

The five primitives

A conversational agent, regardless of vertical, is composed of five separable primitives. We define them explicitly because any ambiguity between them translates to inconsistent production behavior.

Personality is the behavior policy: the agent's role, its operating environment, tone, the goal of each interaction, and the guardrails (what it must not do). Personality is declarative and expressed through a fixed set of fields, not through a dialog script.

Knowledge is the document corpus the agent may consult — service descriptions, policies, FAQ, pricing, internal procedures. It is indexed for retrieval-augmented generation (RAG) and selectively injected into the prompt per response.

Tools are the functions the agent may invoke: booking a slot, looking up an order, sending a quote, escalating to a human. A tool has a strict input schema, deterministic behavior, and a result contract. The model decides when to call it; your code decides what it does.

Channels are the surfaces through which the same agent communicates: an embeddable web widget, Instagram DM, Facebook Messenger, WhatsApp Business. Each channel has constraints — length, formatting, messaging window — but the agent remains singular. The transport differs; the personality does not.

Inbox is the human operator interface. Conversations can be monitored, taken over manually, labeled, or assigned. The inbox is the source of truth for handoff: when the agent yields control, when the operator yields it back.

Chapter 02

Designing the personality

Personality is described through five fixed fields — role, environment, tone, goal, guardrails. This declarative model replaces dialog scripts. The language model handles the dialog; you handle the policy.

Each field is concrete and short. The role is one sentence, not an essay. The environment lists what the agent can see and cannot see, preventing fabricated answers. The tone is calibrated with three examples, not abstract rules. The goal is the success criterion against which every conversation is measured. The guardrails are a short list of forbidden behaviors — never a multi-page policy document, since models do not retain long prohibition lists well.

Escalation rules are part of personality: complaint keywords, repeated ambiguity, scope violations, high-value requests, pronounced negative sentiment. Escalation is a decision, not a collapse — the agent announces clearly and transfers context.

Chapter 03

Knowledge ingestion

Response quality is a direct function of corpus quality, not of model intelligence. A capable model on a poor corpus produces poor responses.

Ingest documents an operator would open while answering a customer: service catalog with short descriptions, cancellation policy, pricing (when public), pre-visit procedures, existing FAQ. Avoid marketing materials, branding decks, internal manuals lacking customer context.

RAG does not see the entire document; it sees chunks selected by similarity to the query. Recommended chunk size is 300–600 tokens with 50–100 token overlap. Structured content (lists, tables, short headers) chunks better than long prose. Configure the agent to return the chunk identifier with each response — this is the only reliable way to distinguish grounded answers from hallucinations.

Maintain the corpus: a stagnant corpus drifts. Recommendation: a monthly review marking which documents have been touched. Documents untouched for six months are audit candidates.

Chapter 04

Tools and integration patterns

Four tool patterns cover most cases: booking (reserving a slot), lookup (reading a record), quoting (sending a structured offer), escalation (handing off to a human). Everything else is a variant.

The stricter the input schema, the more predictable the model's output. Ambiguous optional parameters are error sites. Validate input before invoking real code; reject with a clear message if a required field is missing. The model decides when to call a tool based on the personality; the tool decides what is actually done. Side effects belong in tools, not in prompts.

Chapter 05

Channel constraints

The agent is the same. The channel is not. Each surface imposes adaptations to output, not to personality.

Web widget: ephemeral session, instant delivery, rich format (buttons, cards, attachments), session dies with the tab. Instagram DM: 1000-character limit, 24-hour messaging window, after which a Message Tag is required. Facebook Messenger: 2000 characters, same window, structured templates available. WhatsApp Business: strict 24-hour window, after which outbound messages must be pre-approved Template Messages with category-specific approval rules.

Do not write channel-specific copy in the personality. Write concise copy and let a rendering layer decide whether to truncate, wrap in a template, or render as buttons.

Chapter 06

Inbox and operator handoff

Three states cover most cases: bot, human, closed. Transitions are explicit. Severity sorts the operator queue and can be driven by simple heuristics: complaint keywords, conversations exceeding five turns without progress, repeated contacts within 24 hours.

On handoff, the operator should not need to reread the conversation. Display a 2–3 line summary (user intent, what was resolved, the blocker), the full history below, and the tools invoked with results. Without this context, handoff costs more than the agent saves. Resumption after handoff is an explicit action, never automatic.

Chapter 07

Measurement

Signals that matter, in order of value: autonomous resolution rate (conversations finishing without escalation, defined per goal), perceived latency (under 2s on widget, 5s on IG/Messenger, 8s on WhatsApp), conversation length distribution (look at the long tail, not the mean), tool call counts and error rates, knowledge drift (chunks no longer being cited).

The most valuable signal remains manual review. Twenty conversations per week, chosen randomly, read in full. No automated proxy replaces this reading.

Chapter 08

Common failure modes

Four failures occur more often than all others combined and are preventable. Over-promise: the agent confirms what it cannot verify — fix with strict guardrails and mandatory verification tools. Under-route: the agent fails to escalate when it should — fix with concrete lexical criteria and a fallback rule on conversation length. Token bloat: the prompt grows monotonically until retrieval becomes inconsistent — fix with explicit budgets per category and alerts on monthly growth. RAG drift: documents change but reindexing fails silently — fix with a canonical question set that runs after every reindex and alerts on regression.

The unifying principle: all four failures lack a feedback loop. Add verification; failures become visible before they become problems.