SuperAPI AI 工具集

cognee-forget

数据与分析

查看项目

更新于 10-16 06:15

技能介绍

用途:forget() 是 cognee 唯一的删除 API。它可删除一个文档、整个数据集,或仅删除派生的记忆(图 + 向量)而保留原始文件。删除不可撤销,工作流是先查找、读取内容、确认,再删除。

主要能力与硬性限制:仅删除用户明确要求遗忘的内容,必须先读内容识别,不能只凭文件名猜测;删除前须与用户确认具体条目,除非用户已给出精确 id。允许的最大删除范围是 forget(everything=True),且仅在用户明确要求清空全部记忆时使用,不得用其他重置或清除机制删除数据。

使用方式:

  1. 查找数据集:SDK 用 await cognee.datasets.list_datasets();HTTP 用 GET /api/v1/datasets;CLI 用 cognee-cli datasets list。
  2. 列出文档:SDK 用 await cognee.datasets.list_data(dataset_id);HTTP 用 GET /api/v1/datasets/{dataset_id}/data?limit=100&offset=0(limit 最大 1000,计数用 GET .../data/count);CLI 用 cognee-cli datasets data <dataset_uuid>。条目含 id、name、created_at、extension、mime_type、raw_data_location、dataset_id、label、external_metadata(含 node_set)、data_size。
  3. 读取内容再决定:HTTP 用 GET /api/v1/datasets/{dataset_id}/data/{data_id}/raw 返回存储文件(不存在返回 404);SDK 无 get raw 辅助,可用 from cognee.infrastructure.files.utils.open_data_file import open_data_file,以 async with open_data_file(item.raw_data_location, mode="rb") 预览内容。按语义而非仅关键词判断匹配,并向用户展示候选(名称 + 简短预览)。
  4. 删除:单文档用 forget(data_id=..., dataset_id=...) 或 forget(dataset="name");整个数据集用 forget(dataset="name") 或 forget(dataset_id=...);仅重建图用 forget(dataset="name", memory_only=True);仅删某文档记忆用 forget(dataset="name", data_id=..., memory_only=True);清空全部可删数据集用 forget(everything=True)。返回值分别含 data_id/dataset_id/status、dataset_id/status(memory_only 时加 data_records_reset)、datasets_removed/status。HTTP 用 POST /api/v1/forget,JSON 体支持 camelCase 与 snake_case,非法组合返回 422。CLI 用 cognee-cli forget --dataset NAME | --dataset-id UUID [--data-id UUID] [--memory-only],或 --everything / --all;CLI 不询问确认,需先与用户确认。

限制与陷阱:不在数据集中的 data_id 会返回成功但不删除任何内容;dataset 与 dataset_id 只能二选一(否则 ValueError);data_id 与 memory_only 都需要 dataset;SDK 中 everything=True 会忽略 memory_only(CLI 拒绝该组合),everything=True 总是全删。未知数据集名与无删除权限均抛 DatasetNotFoundError,删除需该数据集的 delete 权限。everything=True 会删除当前租户下用户拥有删除权限的所有数据集(含被共享且有删除权的),并清空会话缓存。删除被引用的数据会使引用它的会话失效,但 agent-trace 条目不失效。修改文档内容不是删除,应使用 cognee.update(data_id=..., data=..., dataset_id=...)。cognee.delete() 已弃用,改用 forget()。