skip to content
tlj 的工程笔记
← 项目

房产租赁 RAG 知识库

面试作品

一个房产租赁领域的检索增强问答系统。混合检索加重排是基础,真正的差异化在于一套自建评测集——它让我能用数字证明换了真实 embedding 后效果从 0.32 跳到 0.85,而不是凭感觉。

时间
2026-05
角色
独立完成(架构 / 检索 / 评测 / 部署)
成果
自建 30 题 8 场景评测集;mock→真实 embedding 双跑对比 Recall@5 从 0.317 升到 0.850

一个房产租赁领域的知识库问答系统,是为”AI 知识库工程师”岗位做的面试作品。我先做了个判断:这个岗位的技术地板线其实不高,多数候选人会去堆 Agent、堆框架。所以我反着来——不堆复杂度,把工程严谨性和业务理解做深,用三件大多数 demo 不会做的事拉开差距:完整的评测体系、按业务实体切片、运营视角(增量更新 + KPI)。

检索:混合 + 重排,但不堆框架

整条链路刻意不用 LangChain/LlamaIndex,保持透明、好讲清、避免版本地狱:

文档(14篇) → 归一化 → 按业务实体切片(59 chunks) → 四形态存储
检索: query → 意图分类 → BM25(top20) + 向量(top20) → RRF融合(k=60) → bge-rerank(top5) → LLM

切片是按业务实体,不是按字数。 政策按每条条文一个 chunk,流程按每个 step 一个 chunk,FAQ 整篇一个 chunk 但 embedding 文本拼了相似问。“按 512 字硬切”会把一条政策切两半、把问和答拆开,按实体切才能让检索命中完整语义单元。

四形态存储也有讲究:Pydantic 对象(运行时)、JSONL(可重建)、SQLite(元数据查询)、Obsidian Vault(人类可读 + 双链)。

评测:这套自建 Eval 是真正的护城河

大多数 RAG demo 做到”能跑通”就停了,但没有评测,你改一个 chunk 策略、换一个 embedding,根本不知道是变好还是变坏。所以我亲手构造了评测集:30 题,覆盖 8 种场景标签(标准/越界/计算/口语/过时/同义/跨城/时效)、3 个难度,指标是检索的 Recall@5 / MRR / nDCG@5 加四维 LLM-judge。

边界 case 是精心设计的:比如”2010 限购还有效吗”(过时政策应识别)、“上海政策北京适用吗”(跨城)、“火星上租房政策”(越界应拒答)、“二房东和二手房东一样吗”(同义)。

最能说明评测价值的是一次双跑对比。 同一套系统,先用 mock embedding 跑一遍打底,再换真实智谱 embedding + DeepSeek 跑一遍:

指标mock embedding真实 embedding
Recall@50.3170.850
MRR0.3670.850
nDCG@50.3280.971
拒答准确率86.7%86.7%

有了这套评测,“换真 embedding 有没有用”不是一句感觉,是 0.317→0.850 的数字。同时它也老实暴露了短板:意图分类只有 53.3%(我用的是纯正则,故意保留这个”最简单但最值得讲权衡”的实现)、过时政策场景 Recall=0,这些都写进了报告,没藏。

一个内存受限下的关键决策(D-009)

部署服务器 free -h 一看:内存只有 1.9G、可用 816M,还没装 Docker。本地跑 bge-m3(2.3G)+ bge-reranker(1G)+ Qdrant + 服务,必然 OOM。

我没硬上,而是把 embedding 抽象成可插拔接口,从本地 bge-m3 换成智谱 embedding API。这里有个具体到位的选择:智谱有 embedding-2(1024 维)和 embedding-3(2048 维),我选 1024 维的 embedding-2——因为它和既有 Qdrant collection 的维度兼容,零迁移;选 2048 维就得重建索引。重排则直接关掉(数据集只有 59 chunk,RRF 融合已经够拉开差距,需要时接 SiliconFlow 的 rerank API 一行 env 切回)。约束没逼我妥协,反而逼我把一个本来就更干净的方案提前落地了。

数据诚实性:抓真实政策,标清占位

被问到”数据是不是全假的”,我承认早期政策名是真、文号和生效日期是编的占位。这个岗位对信息准确性要求高,假数据一旦被查就塌房。所以核心高频政策我用 WebFetch 抓了官方原文,边缘语料保留并显式标 source_type=synthetic

抓真实数据时还捡到一个关键教训:北京公积金租房月限额 2023 年从 1500 调到了 2000,我原本编的 1500 已经过时两年——要不是拉真实数据,面试被问最新限额就直接翻车了。

工程细节与踩坑

小结

RAG 工程真正分水岭的地方,是检索质量和评测体系,不是把大模型接进来。这个项目我最看重那套自建 Eval——它让”我觉得变好了”变成”数据上从 0.317 到 0.850”,也让我敢把意图分类只有 53% 这种短板老实写出来。