Cognee 把文档变成图,图里可能藏着客户身份证号、未公开财报、内部架构。一旦图谱被人拖走,损失比丢几份文档更大——因为图把散落信息连成了可顺藤摸瓜的网络。这一节讲清凭证、敏感数据、审计三道关。
这是第五章第三站,合规场景下不能省。
第三章讲过密钥走环境变量。生产里要更进一步:密钥存部署平台的密钥管理,图库连接启用 TLS,禁止明文口令写在配置文件。
import os, cognee # 5.3 安全性与合规性 cognee.configure( api_key=os.getenv("OPENAI_API_KEY"), # 密钥管理注入 graph_db_url=os.getenv("GRAPH_DB_URL"), # 如 bolt+ssc://... 加密 ) print("凭证与连接均已走安全通道") # 凭证与连接均已走安全通道
注意图库 URL 用 bolt+ssc(加密)而非裸 bolt,避免图数据在网路里裸奔。
| 关卡 | 位置 | 做法 |
|---|---|---|
| 抽取前 | 摄取层 | 正则/分类识别敏感文本,脱敏后再 add |
| 写入前 | 管线节点 | 4.5 节的 filter 节点移除敏感三元组 |

图谱可溯源性也能服务审计——每条答案带 source,你可进一步记录"谁在什么时间查了哪个实体"。下面示意审计日志的落法。
import cognee, datetime async def audited_search(user, query): results = await cognee.search(query) # 写审计日志(示意) log = { "user": user, "query": query, "time": datetime.now().isoformat(), "hits": [r["entity"] for r in results], } append_to_audit_log(log) # 落库或发消息队列 return results # 合规场景要求查询可追溯,审计日志是底线
审计日志让"谁泄了密"可被回溯,也是很多行业合规的硬性要求。Cognee 的 source 字段天然适配这种需求。
背景:银行要把客户合同建图做智能问答,但合同含身份证号与卡号,不能进图。
操作:摄取层先脱敏,写入前再过滤一遍。
import asyncio, re, cognee ID_RE = re.compile(r"\d{17}[\dXx]") # 身份证号粗匹配 def mask(text: str) -> str: return ID_RE.sub("***", text) async def safe_build(): raw = open("合同.pdf").read() masked = mask(raw) # 摄取层脱敏 await cognee.add(masked) await cognee.cognify() print("脱敏后建图,敏感字段未入图") asyncio.run(safe_build()) # 脱敏后建图,敏感字段未入图
结果:合同的关系结构(如"甲方—借款—金额")保留,但身份证号被替换,图可查却不含隐私。
解读:合规不是"不建图",而是"建对图"。脱敏保留结构、剔除标识,既满足智能问答又守住隐私红线。
变式:若监管要求"原文档与图分离存储",把 source 指向权限更高的加密存储,查询时按用户权限决定是否回原文,做到图与原文分级管控。
前文讲凭证加密和传输安全,但图建好后还有一层:访问控制。一份图谱里可能同时有公开信息和机密关系,不能谁查都能拿到全部。实务要给敏感实体打标签,检索时按调用方身份过滤。类比到金融——同一账本,柜员看自己客户,主管看全行,权限分层。
# 敏感实体打标 + 按身份过滤(示意) SENSITIVE = {"未公开财报", "内部架构"} def filtered_search(q, role): raw = await cognee.search(q) if role != "admin": raw = [r for r in raw if r["entity"] not in SENSITIVE] return raw
把访问控制做在检索层,机密关系不会因一次宽权限查询泄露。
| 角色 | 可见范围 | 实现 |
|---|---|---|
| 公众 | 公开实体 | 强过滤 |
| 内部 | 多数实体 | 中过滤 |
| 管理员 | 全图 | 不过滤 |
⚠️ 别以为"图在内部网络就安全"——内部越权同样算泄露,访问边界必须显式定义。
💡 合规审计留痕:每次 search 记谁、查了什么、返回了哪些实体,出事能追责,也满足监管。
图里装秘密,最好在摄入阶段就脱敏——身份证号、手机号建图前打码,图里只留"已认证用户"这类关系而非明文。类比到金融——上链前脱敏,比上链后控访问更根本,因为明文根本没进图。
| 字段 | 处理 |
|---|---|
| 身份证号 | 建图前打码 |
| 内部架构 | 标敏感+过滤 |
| 公开信息 | 正常建 |
⚠️ 别依赖"图在内网就安全"——内网泄露事件不少,明文敏感字段进图是定时炸弹。
💡 脱敏规则作为摄入流水线的一环,和抽取并列,敏感字段从源头就不进图。
安全不是上线配一次就完。模型、图库、权限策略都会变,合规要定期复审:密钥是否轮换、敏感标签是否还在、访问边界是否收紧。类比到金融——风控不是开一次户就完,要持续监控。
⚠️ 别把合规当"上线过检"——检完松懈,泄露往往发生在松懈后的窗口期。
💡 合规项列成季度 checklist,逐项打钩留痕,审计时直接出证据。
⚠️ 别以为"图里只有关系不要紧"。关系网能把分散标识拼出个人画像, sensitivity 不低。
💡 合规设计早做:摄取层就接脱敏,比建完图再清理被动得多,也避免敏感数据落盘。