Programma
Ti è mai capitato di dover simulare una riunione in cui testare idee di prodotto o pubblicità? TinyTroupe risolve proprio questo problema.
TinyTroupe è un framework agentico open source sviluppato da Microsoft. Offre un potente ambiente di simulazione che ti permette di creare più personae basate su AI e vedere come interagiscono tra loro.
In questo articolo spiegherò TinyTroupe e realizzerò un progetto demo per aiutarti a capire come creare personae realistiche in un ambiente interattivo. Anche se la documentazione ufficiale fornisce un'introduzione completa, io mi concentrerò su istruzioni passo per passo ed esempi originali.
Che cos'è TinyTroupe?
TinyTroupe è una libreria Python sperimentale basata su LLM rilasciata di recente che ti consente di creare “TinyPersons” con personalità, interessi e obiettivi specifici. Questi agenti mirano a simulare un comportamento umano realistico in determinate condizioni.
TinyTroupe punta a offrire un contesto in cui vengono simulate le interazioni, i dialoghi e le azioni di agenti simili a esseri umani in condizioni definite. La documentazione ufficiale propone vari motivi per usare questo framework, incentrati soprattutto sull'aumento della produttività e sul test di scenari di business, come simulare una sessione di brainstorming con un focus group o valutare come un pubblico simulato giudicherebbe annunci digitali.
Oltre ai casi d'uso business, è affascinante e divertente simulare scenari diversi e osservare interazioni tra personaggi che altrimenti non sarebbero possibili (come faremo in questo articolo).

Fonte: pagina GitHub di TinyTroupe
Le caratteristiche chiave di TinyTroupe includono:
- Design basato sulle personae: ogni persona simulata (
TinyPerson) può ricevere caratteristiche dettagliate, tra cui età, background, occupazione, competenze e opinioni. - Interazioni multi-agente: le personae possono interagire tra loro per simulazioni di scenari complessi.
Per migliorare il processo di costruzione di questi agenti, TinyTroupe offre funzionalità come:
- TinyPersonFactory: una classe per la generazione rapida di TinyPersons a partire da una breve descrizione.
from tinytroupe.factory import TinyPersonFactory
factory = TinyPersonFactory("A hospital in São Paulo.")
person = factory.generate_person("Create a Brazilian person that is a doctor, like pets and the nature and love heavy metal.")
- Capacità degli agenti: metodi come listen() e listen_and_act() per ricevere stimoli e compiere azioni. Il metodo define() permette di creare proprietà e caratteristiche a tua scelta, come età o descrizioni.
- TinyTool: una classe per creare strumenti simulati che possono essere usati dagli agenti.
- Valutazione: classi per validare il comportamento degli agenti o analizzare l'esito delle interazioni (come TinyPersonValidator e ResultsExtractor)
Configurare TinyTroupe
Per installare TinyTroupe, possiamo seguire questi passaggi:
1. Crea un ambiente Python:
conda create -n tinytroupe python=3.10
2. Attiva conda:
bash conda activate tinytroupe
3. Clona il repository:
git clone <https://github.com/microsoft/tinytroupe>
cd tinytroupe
4. Installa le librerie necessarie:
bash pip install .
Progetto di esempio TinyTroupe: simposio sull'AI
Costruiremo una semplice simulazione per mostrare TinyTroupe in azione. L'obiettivo è far discutere alcune figure storiche ed esperti sullo stato attuale e futuro dell'intelligenza artificiale. Le figure includono Richard Feynman, Aristotele, Erwin Schrödinger e Alan Turing.
Import
Se vuoi seguire passo passo, assicurati di avere pronta la tua chiave API di OpenAI dato che useremo GPT-4o: ecco una breve guida su come iniziare con le API di OpenAI.
Iniziamo importando i moduli necessari e la nostra chiave API.
import sys
sys.path.append('..')
from tinytroupe.agent import TinyPerson
from tinytroupe.environment import TinyWorld
from tinytroupe.extraction import default_extractor as extractor
import os
# Load environment variables from .env.local
os.environ["OPENAI_API_KEY"] = "YOUR-API-KEY"
Creare i TinyPersons
Usiamo la classe TinyPerson per creare le nostre quattro figure. Descrivere i personaggi il più possibile aiuta TinyTroupe a generare simulazioni più accurate. Descriviamo età, nazionalità, occupazione e routine di ciascuna figura (puoi usare l'AI per questa parte). Nota che la descrizione dei personaggi non deve essere coerente tra tutti.
Con il codice seguente, creiamo quattro personalità:
- Richard Feynman
- Aristotele
- Erwin Schrödinger
- Alan Turing
def create_feynman():
feynman = TinyPerson("Richard Feynman")
feynman.define("age", 69) # Lived 1918-1988
feynman.define("nationality", "American")
feynman.define("occupation", "Theoretical Physicist")
feynman.define("occupation_description",
"""
You are a theoretical physicist known for your groundbreaking work in quantum mechanics and
quantum electrodynamics (QED). You developed the Feynman diagrams, a visual tool for understanding
particle interactions, and made significant contributions to the Manhattan Project. As a professor
at Caltech, you're known for your exceptional teaching ability and making complex physics concepts
accessible. You won the Nobel Prize in Physics in 1965 for your work on QED. Your main challenges
involve pushing the boundaries of theoretical physics while maintaining rigorous mathematical precision.
You're also passionate about making science education engaging and understandable for students.
""")
return feynman
def create_aristotle():
aristotle = TinyPerson("Aristotle")
aristotle.define("age", 62)
aristotle.define("nationality", "Greek")
aristotle.define("occupation", "Philosopher and Scientist")
aristotle.define("occupation_description",
"""
You are a philosopher and polymath who founded the Lyceum school in Athens. Your work spans
multiple disciplines including logic, metaphysics, biology, physics, ethics, and politics. You
developed the system of deductive reasoning through syllogisms and established many of the
foundational principles of Western philosophy. Your scientific observations and classifications
of living things remained influential for nearly two millennia. As Alexander the Great's tutor,
you had unique opportunities to gather specimens and information from across the known world.
Your main challenges involve systematizing all human knowledge and understanding the fundamental
nature of reality and truth.
""")
return aristotle
def create_schrodinger():
schrodinger = TinyPerson("Erwin Schrödinger")
schrodinger.define("age", 73)
schrodinger.define("nationality", "Austrian")
schrodinger.define("occupation", "Theoretical Physicist")
schrodinger.define("routine",
"""Your days are spent developing mathematical equations, engaging in theoretical work,
and discussing quantum mechanics with colleagues. You often take walks to clear your mind
and contemplate physics problems.""",
group="routines")
schrodinger.define("occupation_description",
"""
You are a theoretical physicist who made fundamental contributions to quantum mechanics.
You developed the Schrödinger equation, which describes how the quantum state of a physical
system changes over time. Your famous thought experiment, "Schrödinger's cat," illustrates
the paradoxical nature of quantum superposition. You work at various institutions across
Europe, including the University of Zurich and Dublin Institute for Advanced Studies. Your
main challenges involve reconciling quantum mechanics with classical physics and developing
mathematical frameworks to describe quantum phenomena accurately.
""")
return schrodinger
def create_turing():
turing = TinyPerson("Alan Turing")
turing.define("age", 41) # Lived 1912-1954
turing.define("nationality", "British")
turing.define("occupation", "Mathematician and Computer Scientist")
turing.define("routine",
"""You start your day with long-distance running, then spend hours working on mathematical
problems and machine designs. You often work late into the night, especially when pursuing
a particularly interesting problem.""",
group="routines")
turing.define("occupation_description",
"""
You are a mathematician and computer scientist who laid the theoretical foundation for
computer science. You developed the concept of the Turing machine, a mathematical model
of computation that remains fundamental to computer science. During World War II, you
worked at Bletchley Park, where you played a crucial role in breaking the German Enigma
code. You also made significant contributions to artificial intelligence, developing the
Turing test. Your main challenges involve developing mathematical frameworks for
computation and applying them to practical problems, while also facing significant
personal persecution due to your sexuality in 1950s Britain.
""")
return turing
Creare un TinyWorld
Le nostre figure hanno bisogno di un mondo in cui vivere. Definire un mondo può essere semplice come una riga di codice:
world = TinyWorld("AI Symposium", [create_aristotle(), create_feynman(), create_schrodinger(), create_turing()])
Esecuzione della simulazione
Con il nostro mondo e le figure pronte, ora indichiamo loro l'obiettivo. Usiamo world.broadcast per fare un annuncio:
world.broadcast("""
Distinguished colleagues, welcome to this private symposium on the future of Artificial Intelligence.
Today we gather some of the greatest minds across mathematics, physics, and philosophy to discuss
a topic about AI's current stage and future:
Can artificial systems truly achieve consciousness? We'll explore
the fundamental nature of consciousness, intelligence, and whether our current computational
models are sufficient for genuine understanding and awareness.
Remember, each one of you must be blunt in his unique perpective, even directly oppose
each other when you have different opinions. Let's begin this historic discussion.
""")
Per l'ultimo passaggio, eseguiamo il mondo in tre step:
world.run(3)
L'esecuzione del mondo richiede di specificare un numero di step. Nel nostro esempio, il numero di step indica quante tornate di dialogo avranno le nostre figure. Più step richiedono più tempo e token.
Quando esegui il mondo, gli agenti iniziano ad agire, usare i loro strumenti o, nel nostro caso, a conversare. L'output è dettagliato e lungo, quindi ne pubblicherò solo una parte per leggibilità:

Al termine dell'esecuzione, possiamo esaminare l'output per vedere l'esito della simulazione. Ma può risultare piuttosto noioso. Un approccio più semplice è usare uno strumento fornito dal framework TinyTroupe per estrarre i risultati del nostro mondo. Questo può essere fatto anche per ogni singolo TinyPerson.
report = extractor.extract_results_from_world(world,
extraction_objective="Compose a detailed report of each person's perspective on consciousness and how they differ from one another.",
verbose=True)
Ora usiamo la libreria pprint per visualizzare correttamente il report estratto:
from pprint import pprint
pprint(report)
Il nostro report finale è il seguente (l'output è comunque un po' lungo e ho dovuto troncarlo):

Idee da realizzare con TinyTroupe
Se vuoi fare pratica con il framework, ecco tre idee non coperte nella documentazione originale.
1. Simulazione di formazione dei dipendenti
Crea alcuni TinyPersons che rappresentano clienti o stakeholder difficili per simulare un ambiente in cui i nuovi dipendenti possano interagire con loro e gestire situazioni complesse.
2. Valutazione di una nuova policy
Valuta come reagirebbero i tuoi gruppi target a una nuova policy aziendale prima di implementarla. Il gruppo target può essere rappresentato da TinyPersons con background e valori diversi dei tuoi dipendenti, clienti o pubblico social.
3. Valutazione di contenuti social
Prima di condividere nuovi contenuti, simula come potrebbe pensarla il tuo pubblico di riferimento. Usa il loro feedback per capire come verrebbe percepito un nuovo post e migliora la qualità per ottenere la massima reach.
Conclusione
Come sottolineano gli autori, TinyTroupe è in fase “sperimentale”. Molte funzioni, capacità e API potrebbero cambiare in futuro, e il team rilascerà altre funzionalità nel prossimo periodo.
Nota però che il realismo di queste simulazioni può essere limitato. Molti comportamenti e sfumature umane non sono abbastanza “allineati” da essere replicati accuratamente dagli LLM, il che significa che gli esiti dei diversi agenti potrebbero risultare simili (come visto nel nostro esempio, in cui le figure sono confluite in dialoghi simili a quelli dell'AI). Questo è un comportamento prevedibile delle simulazioni AI, poiché il motore dietro questi agenti—gli LLM—è progettato per essere più “allineato” che “simile agli umani”.
Tuttavia, le applicazioni di produttività, come quelle nella documentazione, possono essere molto più efficaci nell'automatizzare attività o ottenere insight sulle interazioni e i comportamenti di un gruppo target.
TinyTroupe è uno strumento agentico di AI entusiasmante da tenere d'occhio!
Studente magistrale in Intelligenza Artificiale e technical writer in ambito AI. Condivido approfondimenti sulle tecnologie AI più recenti, rendo la ricerca di ML accessibile e semplifico argomenti complessi legati all’AI, per aiutarti a restare in prima linea.


