元数据的作用与管理
作者:程序员马丁
Ragent AI —— 从 0 到 1 纯手工打造企业级 Agentic RAG,拒绝 Demo 玩具!AI 时代,助你拿个offer。
上一节我们聊了数据分块(Chunking)——怎么把一篇长文档拆成大小合适的文本块,让检索更精准、让大模型更容易理解。但拆完之后你会发现,光有文本块还不够。每个块只剩下一段裸文本,丢失了它原本的上下文:这段话来自哪份文档?属于哪个部门?什么时候写的?谁有权限看?这些信息一旦缺失,检索质量和用户体验都会打折扣。
这就是本节要解决的问题—— 元数据管理(Metadata)。
为什么只有文本内容还不够?
1. 场景:企业知识库问答系统
假设你在一家中型互联网公司做开发,公司有个内部知识库系统,里面存了各个部门的文档:
- 产品部的需求文档、产品手册
- 技术部的架构设计、API 文档、故障处理手册
- 人事部的员工手册、考勤制度、薪酬政策
- 财务部的报销流程、预算审批规则
公司上了一套 RAG 系统,员工可以直接问问题,系统从知识库里检索相关内容并生成回答。听起来很美好,但实际跑起来,问题一个接一个冒出来。
2. 痛点一:用户问“这个规则的依据是什么”,系统答不上来
产品经理小王问:“新员工试用期是几个月?”
系统回答:“试用期为 3 个月。”
小王追问:“这个规定在哪份文档里?我要发给候选人看。”
系统:……(沉 默)
问题出在哪?系统确实从知识库里检索到了正确的文本块,但这个块只有纯文本内容,没有记录它来自哪份文档、哪一页、哪个章节。系统知道答案,但说不出依据。
这在企业场景里是个大问题。很多时候,用户不只是要答案,还要知道答案的出处——尤其是涉及制度、流程、合规这类严肃话题时,没有出处的答案是没有公信力的。
3. 痛点二:不同部门的员工看到了不该看的敏感信息
技术部的小李问:“公司的年终奖发放标准是什么?”
系统从知识库里检索到了一段文本,回答:“根据绩效等级,年终奖为月薪的 2-6 倍,其中 S 级 6 倍,A 级 4 倍,B 级 2 倍……”
问题来了:这段内容来自人事部的内部文档,按公司规定只有人事部和管理层能看。但系统在检索时没有做任何权限判断,直接把内容返回给了普通员工。
这在企业场景里是严重的安全隐患。不同部门、不同级别的员工,能看到的知识范围是不一样的。财务部的预算数据、人事部的薪酬政策、技术部的核心架构设计,这些都不应该对所有人开放。
但如果每个文本块只有内容,没有标记它属于哪个部门、适用于哪些角色,系统就没法做权限过滤。