Quando il mio collega ha iniziato a usare la mia istanza di OpenClaw, ho scoperto che il multi-utente non era solo una casella da spuntare nella configurazione. Era una revisione del modo in cui l’agente percepiva il contesto, le autorizzazioni e la privacy.
Il momento in cui ho realizzato ciò: il mio collega ha chiesto all’agente di informarci riguardo “il progetto”, e l’agente ha mostrato il mio progetto personale — non il progetto del team a cui lui pensava. L’agente aveva un solo contesto, una sola memoria, e nessuna concezione che diversi utenti potevano avere progetti diversi con lo stesso nome.
Configurare correttamente il multi-utente mi ha richiesto tre tentativi. Ecco cosa ho imparato.
Tentativo 1: Tutto condiviso
Il mio primo approccio: entrambi usiamo lo stesso agente con la stessa configurazione. Facile da impostare. Orribile nella pratica.
Problemi:
– L’agente confondeva i nostri contesti (“Hai menzionato di voler della pizza per cena” — era il mio collega, non io)
– Le autorizzazioni erano identiche (il mio collega poteva vedere le mie automazioni personali e viceversa)
– La memoria era condivisa (tutto ciò che una persona diceva all’agente, l’altra poteva accedervi)
– I task cron venivano eseguiti per entrambi, senza considerare la pertinenza
Funziona se non hai alcun requisito di privacy e casi d’uso identici. Nella pratica, nessuno ha zero requisiti di privacy.
Tentativo 2: Istanze separate
Il mio secondo approccio: ogni utente ha la propria istanza di OpenClaw che opera sullo stesso server. Isolamento completo. Nessun contesto condiviso.
Problemi:
– Doppio utilizzo delle risorse (due processi, due insiemi di memoria)
– Nessuna conoscenza condivisa (dovevamo informare i due agenti dei processi di team separatamente)
– Configurazione duplicata (ogni modifica doveva essere effettuata due volte)
– Competenze installate due volte, aggiornate due volte, mantenute due volte
Funziona se gli utenti sono completamente indipendenti. Ma condividiamo un team, lavoriamo sugli stessi progetti e abbiamo bisogno di un certo livello di contesto condiviso.
Tentativo 3: Ciò che funziona realmente
La soluzione: un’istanza con sessioni a portata utente e una memoria condivisa ma separata.
Sessioni utente. Ogni utente ha la propria sessione con il proprio storico della conversazione e il proprio contesto. Quando invio un messaggio all’agente, carica il mio contesto. Quando il mio collega invia un messaggio, carica il loro contesto. Nessuna contaminazione incrociata.
Memoria a portata. Tre portate di memoria:
– Portata personale: visibile solo dall’utente proprietario (preferenze, progetti personali, note private)
– Portata di team: visibile da tutti (processi di team, dettagli di progetto condivisi, decisioni di gruppo)
– Portata globale: informazioni a livello di sistema (indirizzi del server, configurazioni degli strumenti)
Quando parlo all’agente del mio progetto personale, questo va nella mia portata personale. Quando ne parlo del processo di distribuzione del team, va nella portata di team.
Autorizzazioni basate sui ruoli. Io sono l’amministratore — posso configurare il sistema, gestire le competenze e accedere a tutte le portate. Il mio collega è un utente standard — può usare l’agente e gestire la propria portata personale, ma non può cambiare la configurazione del sistema.
Impostazione
Passo 1: Configurare l’autenticazione utente. Ogni piattaforma di messaggistica ha la propria identificazione utente. Discord usa identificatori utente, Slack usa identificatori membri, Telegram usa identificatori utente. OpenClaw li associa a identità interne.
Passo 2: Configurare l’isolamento delle sessioni. Configurare OpenClaw per mantenere sessioni separate per utente. Ogni sessione ha il proprio storico della conversazione e la propria finestra di contesto.
Passo 3: Configurare le portate di memoria. Definire quali portate esistono (personale, team, globale) e la portata predefinita per le nuove memorie. Imposto come predefinita la portata personale — tutto è privato a meno che non venga esplicitamente condiviso.
Passo 4: Definire le autorizzazioni. Definire cosa può fare ogni ruolo utente. Utenti standard: interagire con l’agente, gestire la memoria personale, utilizzare competenze approvate. Amministratori: tutto più la configurazione del sistema e l’accesso a tutte le portate.
I trabocchetti
Task cron condivisi. Un task cron che pubblica un briefing mattutino — deve essere eseguito per utente o una sola volta per tutti? La risposta dipende dal task. I briefing mattutini sono personali (calendari diversi, priorità diverse). I controlli di stato del server sono condivisi (stessi server per tutti). Configura ogni task con la portata appropriata.
Autorizzazioni delle competenze. Alcune competenze sono adatte a tutti (ricerca sul web, riassunto). Alcune sono riservate agli amministratori (gestione del server, configurazione del sistema). Esamina le capacità di ogni competenza e assegnala al livello di autorizzazione appropriato.
Conflitti di memoria. Due utenti potrebbero registrare informazioni contraddittorie nella portata di team. “Noi usiamo PostgreSQL” e “Stiamo migrando verso MySQL.” L’agente non riconcilia automaticamente questo — registra entrambi e può fare emergere l’uno o l’altro. Un riesame regolare della memoria rileva questi conflitti prima che causino confusione.
Attribuzione dei costi. Con più utenti che condividono una chiave API, il monitoraggio dei costi individuali diventa importante. Senza di esso, l’uso intensivo di un utente viene sovvenzionato dal budget degli altri. Ho aggiunto un monitoraggio dei costi per utente al mio cruscotto di monitoraggio.
Considerazioni sull’eccellenza
Questa configurazione funziona bene per 2 a 5 utenti. A questa scala, la gestione manuale della memoria è praticabile, l’impostazione delle autorizzazioni è gestibile e una sola istanza di OpenClaw può gestire il carico.
Per team più grandi (10+ utenti), vorrai: una gestione automatizzata delle portate di memoria (invece di manuale), un controllo degli accessi granulari basato sui ruoli, un bilanciamento del carico tra più istanze, e un vero cruscotto di amministratore per la gestione degli utenti.
Non ho avuto bisogno di scalare oltre i 5 utenti, quindi non posso parlare dei dettagli dei deploy più grandi. Ma l’architettura di base (sessioni isolate, memoria a portata, autorizzazioni basate sui ruoli) dovrebbe essere in grado di adattarsi se l’infrastruttura lo consente.
🕒 Published: