Preskoči na glavno vsebino

Učenje iz prekinitev: Kako naš AI zapomni vaše preference (ne da bi bil čudaški)

· 5 min branja
Osama Alghanmi
Soustanovitelj in tehnični vodja

Vsakič, ko odobrite ali zavrnete AI-jevo akcijo, se uči. Po 5 odobritvah se ta akcija zgodi samodejno.

Problem Human-in-the-Loop

AI agenti potrebujejo nadzor. Lahko:

  • Izvedejo napačni ukaz
  • Predlagajo nevarne operacije
  • Naredijo drage API klice
  • Dostopajo do občutljivih podatkov

Torej dodamo prekinitve:

AI: "Želim zagnati: rm -rf /data/old-logs"
[ODOBRI] [ZAVRZI] [SPREMENI]

Ampak to ustvarja trenje. Vsaka akcija potrebuje odobritev. AI se zdi počasen.

Rešitev? Učiti se iz prekinitev.

Kako deluje Interrupt Memory

Korak 1: Zabeleži odločitev

Ko odobrite ali zavrnete:

await sessionManager.recordInterruptDecision(
sessionId,
userId,
{
toolName: 'execute',
toolArgs: { command: 'rm -rf /data/old-logs' },
decision: 'approved',
reason: 'Varno čiščenje starih logov',
}
);

To ustvari InterruptRecord:

interface InterruptRecord {
interruptId: string;
sessionId: string;
userId: string;
toolName: string;
toolArgs: Record<string, unknown>;
decision: 'approved' | 'rejected' | 'modified';
modifiedArgs?: Record<string, unknown>;
reason?: string;
timestamp: Date;
}

Korak 2: Posodobi Tool Preference

Vsaka odločitev posodobi vaše ToolApprovalPreference:

interface ToolApprovalPreference {
userId: string;
toolName: string;
autoApprove: boolean;
confidence: number;
approvedCount: number;
rejectedCount: number;
lastDecisionAt: Date;
}

Algoritem učenja:

// Po vsaki odločitvi
const approvedCount = previous.approvedCount + (decision === 'approved' ? 1 : 0);
const rejectedCount = previous.rejectedCount + (decision === 'rejected' ? 1 : 0);
const total = approvedCount + rejectedCount;
const approvalRate = approvedCount / total;

// Samodejno odobri, če:
// - Vsaj 5 odločitev (min velikost vzorca)
// - Stopnja odobritev > 80%
const autoApprove = total >= 5 && approvalRate > 0.8;

// Zaupanje raste z več podatki
const confidence = Math.min(0.95, total * 0.1);

Korak 3: Samodejno odobri prihodnje akcije

Naslednjič ko AI želi uporabiti ta tool:

const shouldAutoApprove = await sessionManager.shouldAutoApproveTool(
userId,
'execute'
);

if (shouldAutoApprove) {
// Izvedi brez prekinitve
} else {
// Pokaži dialog odobritve
}

Primer iz resničnega sveta

Teden 1: Nov uporabnik, vse prekinja

AkcijaOdločitevŠtevec
Izvedi ls✅ Odobreno1/0
Izvedi cat file.txt✅ Odobreno2/0
Izvedi rm temp.txt✅ Odobreno3/0
Izvedi git status✅ Odobreno4/0
Izvedi git commit✅ Odobreno5/0

Teden 2: Vzorec se pojavi

AkcijaOdločitevStatistika
Izvedi ls✅ Samodejno odobreno6/0 (100%)
Izvedi cat✅ Samodejno odobreno4/0 (100%)
Izvedi rm⛔ Prekinja3/2 (60%)
Izvedi npm publish⛔ Prekinja1/3 (25%)

Rezultat:

  • Varni, pogosti ukazi se izvedejo takoj
  • Destruktivne operacije še vedno potrebujejo odobritev
  • Akcije z visokimi vložki vedno prekinjajo

Zasebnost in nadzor

Uporabniški nadzor

Uporabniki lahko:

  • Ogledajo vse zabeležene odločitve
  • Izbrišejo zgodovino prekinitev
  • Onemogočijo samodejno odobritev globalno
  • Zahtevajo odobritev za specifične toole
// Onemogoči samodejno odobritev za nevarne toole
await memoryManager.updateToolPreference(userId, 'execute', {
autoApprove: false, // Vedno vprašaj za shell ukaze
});

Kaj shranjujemo

Shranjujemo:

  • Imena toolov (execute, persist, call-service)
  • Odločitev (approved/rejected)
  • Timestamp
  • Anonimizirane vzorce

Ne shranjujemo:

  • Občutljive vrednosti argumentov
  • Vsebino datotek
  • API odzive
  • Gesla ali skrivnosti

Transparentnost

Vsaka samodejno odobrena akcija je zabeležena:

[2025-04-11 10:23:45] Samodejno odobreno: execute
Razlog: 95% stopnja odobritev čez 20 odločitev
Uporabnik: user_123
Seja: sess_456

Krivulja učenja

Različni tooli se učijo z različnimi hitrostmi:

ToolHitrost učenjaZakaj
read_fileHitroNizko tveganje, konsistentno
write_fileSrednjeSrednje tveganje
executePočasiVisoko tveganje, kontekstno odvisno
call_serviceNikoliVedno zahteva odobritev

Pragi zaupanja

const THRESHOLDS = {
read_file: { minDecisions: 3, minRate: 0.9 },
write_file: { minDecisions: 5, minRate: 0.85 },
execute: { minDecisions: 10, minRate: 0.9 },
call_service: { minDecisions: Infinity, minRate: 1.0 }, // Nikoli samo
};

Primer kode: Celoten potek

// Internal: Almadar's interrupt learning system
// (This is how it works under the hood — not a public API)

const memoryManager = createMemoryManager(db);
const sessionManager = createSessionManager({
memoryManager,
});

// Agent je ustvarjen z omogočenim učenjem prekinitev
const agent = createAgent({
skill: 'kflow-orbitals',
workDir: '/workspace',
userId: 'user_123',
// Interrupt config based on learned preferences
noInterrupt: false,
});

// Poženi agenta
const result = await agent.run({
input: 'Ustvari User entity',
});

// Med izvajanjem je uporabnik sprejel te odločitve:
// - Odobreno: execute 'ls'
// - Odobreno: execute 'orbital validate'
// - Odobreno: execute 'git status'
// - Zavrnjeno: execute 'rm -rf /'
// - Odobreno: execute 'orbital compile'

// Zabeleži vse prekinitve
for (const interrupt of result.interrupts) {
await sessionManager.recordInterruptDecision(
threadId,
'user_123',
{
toolName: interrupt.toolName,
toolArgs: interrupt.toolArgs,
decision: interrupt.decision,
reason: interrupt.reason,
}
);
}

// Preveri, kaj smo se naučili
const preferences = await memoryManager.getUserToolPreferences('user_123');
for (const pref of preferences) {
console.log(`${pref.toolName}: ${pref.approvedCount}/${pref.rejectedCount} ` +
`(${Math.round(pref.approvedCount/(pref.approvedCount+pref.rejectedCount)*100)}%) ` +
`- Auto: ${pref.autoApprove}`);
}

// Output:
// execute: 4/1 (80%) - Auto: false (need 5+ at 80%)
// validate: 1/0 (100%) - Auto: false (need 3+ at 90%)
// compile: 1/0 (100%) - Auto: false

Primerjava iz resničnega sveta: Pametni domači asistent

Mislite nanj kot na pameten dom:

Teden 1:

  • Vi: "Ugasi luči"
  • Asistent: "Ali naj ugasnem vse luči?" [Da] [Ne]
  • Vi: [Da]

Teden 2:

  • Vi: "Ugasi luči"
  • Asistent: Ugasi luči (se je naučil, da vedno rečete da)

Ampak:

  • Vi: "Odkleni vhodna vrata"
  • Asistent: "Potrdi odklepanje?" [Da] [Ne]
  • Vedno vpraša, ker varnost > udobje

Asistent se uči vzorcev, a spoštuje meje.

Koristi

Za uporabnike

  • ✅ Manj trenja sčasoma
  • ✅ Še vedno pod nadzorom
  • ✅ Transparentno učenje
  • ✅ Spoštovanje zasebnosti

Za AI agente

  • ✅ Hitrejše izvajanje
  • ✅ Boljša uporabniška izkušnja
  • ✅ Kontekstualno razumevanje
  • ✅ Varno privzeto

Za ekipe

  • ✅ Konsistentni vzorci med uporabniki
  • ✅ Sled odločitev za audit
  • ✅ Identifikacija tveganega tool usage

Spoznanje

Prekinitve ne morajo biti nadležne. Lahko so priložnosti za učenje.

Vsaka odobritev uči AI:

  • Kaj štejete za varno
  • Vaše preferirane workflowe
  • Katere akcije potrebujejo skrbni pregled

Sčasoma AI postane razširitev vašega namena — hiter, ko mora biti hiter, previden, ko mora biti previden.

To ni samo avtomatizacija. To je sodelovanje.

Več o Orbital Memory.

Nedavne objave