# Memory и знания

> Как PentAGI сохраняет команды, результаты и связи в рамках flow.

PentAGI использует три вида [memory](https://pentagi.com/ru/docs/glossary/#memory), чтобы [agents](https://pentagi.com/ru/docs/glossary/#agent) могли опираться на результаты предыдущей работы, а не начинать каждый раз с нуля.

| Memory        | Где хранится                          | Что содержит                                                                                   |
| ------------- | ------------------------------------- | ---------------------------------------------------------------------------------------------- |
| Долгосрочная  | PostgreSQL с pgvector                 | Векторные представления результатов, успешных подходов и знаний о [tool](https://pentagi.com/ru/docs/glossary/#tool) |
| Рабочая       | Контекст [flow](https://pentagi.com/ru/docs/glossary/#flow) | Текущую цель, состояние [task](https://pentagi.com/ru/docs/glossary/#task) и доступные ресурсы                       |
| Эпизодическая | История команд                        | Прошлые действия, их результаты и выявленные эффективные паттерны                              |

Каждая команда и её вывод сохраняются в PostgreSQL. Перед выполнением действий agents обращаются к [vector store](https://pentagi.com/ru/docs/glossary/#vector-store) для поиска похожих случаев, а затем записывают туда свои [findings](https://pentagi.com/ru/docs/glossary/#finding) — основную часть этой работы по поиску выполняют agents `memorist` и `searcher`.

## [Knowledge graph (опционально)](https://pentagi.com/ru/docs/concepts/memory/#knowledge-graph-optional)

При включённом стеке [knowledge graph](https://pentagi.com/ru/docs/glossary/#knowledge-graph) PentAGI отправляет ответы agent и результаты выполнения tool в [Graphiti](https://github.com/getzep/graphiti) на Neo4j. С помощью правил импорта шаблона `.env` он извлекает сущности и взаимосвязи — хосты, сервисы, уязвимости, техники и динамику их взаимосвязей во времени — из операций в терминале и с файлами, а остальные события сохраняет доступными для поиска без извлечения.

```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 использует собственную модель: `GRAPHITI_LLM_CLIENT_TYPE` выбирает пресет — `openai`, `gemini`, `litellm` или `custom`, — чьи модели заданы в `./graphiti/<preset>.yaml`, а соответствующий ключ берётся из `.env` (`OPEN_AI_KEY` для `openai`). В `.env` версии до 2.2.0 отсутствуют эти строки и правила `GRAPHITI_INGEST_*`: скопируйте их из текущего `.env.example`.

> [!WARNING]
> Graphiti — это бета-интеграция, которая по умолчанию отключена. Область поиска ограничена активным flow; встроенный API Graphiti не имеет аутентификации, поэтому размещайте его и Neo4j только в приватной сети. Извлечение данных и создание векторных представлений тарифицируются отдельно от модели самого flow.

PentAGI проверяет Graphiti только при запуске, в течение нескольких секунд. Если к этому моменту Graphiti не готов, PentAGI регистрирует предупреждение и работает без knowledge graph до следующего перезапуска, поэтому, как только Graphiti сообщит о работоспособности, выполните `docker restart pentagi`.