Cognee - AI エージェントメモリプラットフォーム チートシート
Cognee はオープンソース AI メモリプラットフォーム で、エージェントに自ホスト型ナレッジグラフを使用してセッション間の永続的な長期メモリを付与します。その定義される概念は ECL パイプライン です — Extract, Cognify, Load — 多くのソースからのドキュメント、会話、データを取り込み、エンティティとリレーションシップのグラフにそれらを構造化し (「cognify」ステップ)、それらを取得用のグラフとベクトルストアにロードします。これにより、メモリは受動的なストアではなく、アクティブでクエリ可能なレイヤーになります。
インストール
| 方法 | コマンド |
|---|
| pip | pip install cognee |
| uv | uv add cognee |
| エクストラ付き | pip install "cognee[postgres,neo4j]" |
| LLM キーを設定 | export LLM_API_KEY="sk-..." |
| 確認 | python -c "import cognee; print('ok')" |
ECL パイプライン
| ステージ | 機能 |
|---|
| Extract | 30+ ソースタイプからの生データを取り込み |
| Cognify | ナレッジグラフ (エンティティ、リレーションシップ) を構築 |
| Load | グラフとベクトルデータベースに取得用にストア |
| Search | メモリをクエリ (グラフ、ベクトル、またはハイブリッド) |
基本的な使用法
import cognee
import asyncio
async def main():
# 1) メモリにデータを追加
await cognee.add("Nick prefers concise, direct answers.")
await cognee.add(open("notes.md").read())
# 2) ナレッジグラフを構築
await cognee.cognify()
# 3) メモリをクエリ
results = await cognee.search("What are Nick's preferences?")
print(results)
asyncio.run(main())
| 呼び出し | 説明 |
|---|
cognee.add(data) | テキスト、ファイル、または構造化データを取り込み |
cognee.cognify() | 取り込まれたデータをグラフに処理 |
cognee.search(query, ...) | メモリから検索 |
cognee.prune() | リセット/メモリストアをクリア |
検索タイプ
| タイプ | 戻り値 |
|---|
SearchType.GRAPH_COMPLETION | ナレッジグラフに基づいて接地された回答 |
SearchType.RAG_COMPLETION | クラシックベクトル RAG 回答 |
SearchType.INSIGHTS | エンティティリレーションシップ/インサイト |
SearchType.CHUNKS | マッチしている生チャンク |
SearchType.SUMMARIES | 集約された結果 |
from cognee import SearchType
res = await cognee.search("connections between X and Y",
query_type=SearchType.INSIGHTS)
データソース
| カテゴリ | 例 |
|---|
| ドキュメント | PDF, DOCX, Markdown, テキスト |
| 構造化 | CSV, JSON, データベース |
| 会話 | チャット/メッセージ履歴 |
| コード | ソースファイル/リポジトリ |
ストレージバックエンド
| レイヤー | オプション |
|---|
| グラフストア | NetworkX (デフォルト), Neo4j, Kuzu |
| ベクトルストア | LanceDB (デフォルト), Qdrant, pgvector, Weaviate |
| リレーショナル | SQLite (デフォルト), PostgreSQL |
| 設定 | 環境変数/設定経由でセット |
データセットとマルチテナント
| 機能 | 用途 |
|---|
| データセット | ユーザー/プロジェクトごとのメモリをネームスペース |
cognee.add(data, dataset_name="user-123") | 取り込みをスコープ |
| パーミッション | メモリパーティションへのアクセスをコントロール |
一般的なワークフロー
# エージェントにユーザーの永続メモリをセッション間で付与
await cognee.add(conversation_history, dataset_name="user-42")
await cognee.cognify()
context = await cognee.search("summarize what we know about user-42")
# `context` をエージェントのプロンプトに注入
# ドキュメントコーパスにグラフを構築してドットコネクト質問用
for f in docs: await cognee.add(open(f).read())
await cognee.cognify()
await cognee.search("how do these documents relate?",
query_type=SearchType.INSIGHTS)
Cognee vs その他のメモリフレームワーク
| アスペクト | Cognee | Mem0 | Graphiti |
|---|
| モデル | グラフネイティブ (ECL) | マルチティアベクトル/グラフ/KV | 時間的ナレッジグラフ |
| 強み | ローカルファーストグラフ推論 | 会話型パーソナライゼーション | 時間とともに変わる事実 |
| 自ホスト | あり | あり | あり |
| 最適な用途 | プライバシークリティカルなグラフメモリ | パーソナライゼーション | 時間的推論 |
リソース