第一步:只保留可以公开的事实
原始简历包含教育、实习、项目、技能,也包含电话和邮箱。进入 RAG 前,我建立公开字段白名单:保留职业信息,去掉电话、邮箱、年龄和民族。
RESUME_DOCUMENTS = [
{
"source": "resume/project-linter-ai",
"title": "Linter+AI 应用平台",
"content": "担任 AI 算法负责人及队长,集成大模型与 Agent……",
},
]
第二步:转成 LangChain Document
每段内容保留 source 与 title。未来展示引用时,前端可以说明答案来自哪一段简历。
from langchain_core.documents import Document
documents = [
Document(
page_content=item["content"],
metadata={"source": item["source"], "title": item["title"]},
)
for item in RESUME_DOCUMENTS
]
第三步:设计轻量中文分词
import re
def tokenize(text: str) -> list[str]:
return re.findall(
r"[a-zA-Z0-9+#.]+|[\u4e00-\u9fff]",
text.lower(),
)
这一步让我意识到:RAG 的质量首先取决于文档边界、元数据和检索策略,并不只是“选一个向量数据库”。