# Memoryとナレッジ

> PentAGIがflow全体でコマンド、結果、関連性を記憶する仕組み

PentAGIは3種類の[memory](https://pentagi.com/ja/docs/glossary/#memory)を保持しており、[agents](https://pentagi.com/ja/docs/glossary/#agent)がゼロから開始するのではなく、過去の作業に基づいて構築できるようにしています。

| Memory           | 保存場所                               | 保持内容                                                 |
| ---------------- | ---------------------------------- | ---------------------------------------------------- |
| Long-term memory | pgvector対応PostgreSQL               | 結果、成功したアプローチ、[tool](https://pentagi.com/ja/docs/glossary/#tool)に関する知識の埋め込み |
| Working memory   | [Flow](https://pentagi.com/ja/docs/glossary/#flow)コンテキスト | 現在の目標、[task](https://pentagi.com/ja/docs/glossary/#task)の状態、利用可能なリソース      |
| Episodic memory  | コマンド履歴                             | 過去のアクション、その結果、有効だったパターン                              |

すべてのコマンドとその出力はPostgreSQLに保存されます。Agentsは実行前に類似のケースを[vector store](https://pentagi.com/ja/docs/glossary/#vector-store)で検索し、[findings](https://pentagi.com/ja/docs/glossary/#finding)を書き戻します。この検索作業の大部分は`memorist`および`searcher` agentsが担当します。

## [Knowledge graph（オプション）](https://pentagi.com/ja/docs/concepts/memory/#knowledge-graph-optional)

[knowledge graph](https://pentagi.com/ja/docs/glossary/#knowledge-graph)スタックを有効にすると、PentAGIはagentの応答とtool実行をNeo4j上の[Graphiti](https://github.com/getzep/graphiti)に送信します。`.env` templateの取り込みルールに従って、terminalおよびファイル操作からエンティティと関係性（ホスト、サービス、脆弱性、手法、およびそれらの時間的な関連性）を抽出し、その他のイベントは抽出せずに検索可能な状態に保ちます。

```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`（`openai` の場合は `OPEN_AI_KEY`）から取得されます。2.2.0 より前の `.env` にはこれらの行と `GRAPHITI_INGEST_*` ルールが存在しないため、現在の `.env.example` からコピーしてください。

> [!WARNING]
> Graphitiはベータ版の連携機能であり、デフォルトでは無効になっています。検索の対象はアクティブなflowに限定されます。同梱のGraphiti APIには認証機能がないため、APIおよびNeo4jはプライベートネットワーク内に配置してください。抽出処理および埋め込み生成にかかる料金は、flow自体のモデルとは別に請求されます。

PentAGIは起動時の数秒間のみGraphitiをチェックします。その時間までにGraphitiが準備できていない場合、PentAGIは警告をログに記録し、次回再起動までknowledge graphなしで実行されます。そのため、Graphitiが正常であると報告したら、`docker restart pentagi`を実行してください。