创建 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项目'))"

回答不准确时,分层测试可以快速判断问题在知识、检索、工具选择还是模型生成。