创建 Retriever
BM25Retriever 根据查询与文档的词项相关度排序。简历只有八个主题,先取前三条结果,覆盖同义问题又不会给模型过多无关上下文。
from langchain_community.retrievers import BM25Retriever
retriever = BM25Retriever.from_documents(
documents,
preprocess_func=tokenize,
)
retriever.k = 3
输出必须携带来源
def retrieve_resume_context(query: str) -> str:
docs = retriever.invoke(query)
return "\n\n".join(
f"[来源: {doc.metadata['source']}]\n{doc.page_content}"
for doc in docs
)
先测试检索,再连接模型
.\.venv\Scripts\python -c "from rag import retrieve_resume_context; print(retrieve_resume_context('AI项目'))"
回答不准确时,分层测试可以快速判断问题在知识、检索、工具选择还是模型生成。