# Memory e conoscenza

> Come PentAGI memorizza comandi, risultati e relazioni durante un flow.

PentAGI mantiene tre tipi di [memory](https://pentagi.com/it/docs/glossary/#memory) in modo che gli [agents](https://pentagi.com/it/docs/glossary/#agent) possano basarsi sul lavoro precedente invece di ricominciare da zero.

| Memory          | Dove risiede                              | Cosa contiene                                                                            |
| --------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------- |
| A lungo termine | PostgreSQL con pgvector                   | Embedding di risultati, approcci efficaci e conoscenze sui [tool](https://pentagi.com/it/docs/glossary/#tool)  |
| Di lavoro       | Contesto del [flow](https://pentagi.com/it/docs/glossary/#flow) | L'obiettivo corrente, lo stato del [task](https://pentagi.com/it/docs/glossary/#task) e le risorse disponibili |
| Episodica       | Cronologia dei comandi                    | Azioni passate, i loro esiti e i pattern che hanno funzionato                            |

Ogni comando e il relativo output vengono memorizzati in PostgreSQL. Gli agents interrogano il [vector store](https://pentagi.com/it/docs/glossary/#vector-store) per cercare casi simili prima di agire e vi salvano i [findings](https://pentagi.com/it/docs/glossary/#finding): sono gli agents `memorist` e `searcher` a svolgere la maggior parte di queste ricerche.

## [Knowledge graph (opzionale)](https://pentagi.com/it/docs/concepts/memory/#knowledge-graph-optional)

Quando lo stack del [knowledge graph](https://pentagi.com/it/docs/glossary/#knowledge-graph) è abilitato, PentAGI invia le risposte degli agent e le esecuzioni dei tool a [Graphiti](https://github.com/getzep/graphiti) su Neo4j. Con le regole di ingestione del template `.env`, estrae entità e relazioni — host, servizi, vulnerabilità, tecniche e come si relazionano nel tempo — dalle operazioni sul terminal e sui file, e mantiene gli altri eventi ricercabili senza estrazione.

```bash
GRAPHITI_ENABLED=true
GRAPHITI_URL=http://graphiti:8000
GRAPHITI_CONFIG_DIR=llm_configs
GRAPHITI_LLM_CLIENT_TYPE=openai
NEO4J_URI=bolt://neo4j:7687
NEO4J_PASSWORD=replace_with_a_strong_password
```

```bash
git clone --depth 1 https://github.com/vxcontrol/pentagi.git pentagi-src
cp -r pentagi-src/examples/graphiti ./graphiti
cp -r pentagi-src/examples/neo4j ./neo4j
rm -rf pentagi-src
curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/main/docker-compose-graphiti.yml
docker compose -f docker-compose.yml -f docker-compose-graphiti.yml up -d
```

Graphiti esegue il proprio modello: `GRAPHITI_LLM_CLIENT_TYPE` sceglie il preset — `openai`, `gemini`, `litellm` o `custom` — i cui modelli sono impostati in `./graphiti/<preset>.yaml`, e la chiave corrispondente proviene da `.env` (`OPEN_AI_KEY` per `openai`). Un `.env` precedente alla 2.2.0 non ha queste righe e le regole di `GRAPHITI_INGEST_*`: copiale dall'attuale `.env.example`.

> [!WARNING]
> Graphiti è un'integrazione in versione beta ed è disattivata per impostazione predefinita. Il ricordo è limitato al flow attivo; l'API Graphiti inclusa non prevede autenticazione, pertanto mantienila insieme a Neo4j su una rete privata. L'estrazione e gli embedding vengono addebitati separatamente rispetto al modello utilizzato dal flow.

PentAGI controlla Graphiti solo all'avvio, per alcuni secondi. Se Graphiti non è pronto entro quel tempo, PentAGI registra un avviso ed esegue senza il knowledge graph fino al suo prossimo riavvio, quindi una volta che Graphiti segnala di essere sano, esegui `docker restart pentagi`.