使用 SelfQueryRetriever 获取文档相似度分数 - Langchain

问题描述 投票:0回答:1

我希望能够在使用 SelfQueryRetriever 时获得检索到的文档的相似度分数,如下所示。

我制作了一个自查询检索器,如下所示:

retriever = SelfQueryRetriever.from_llm(
    llm = llm,
    vectorstore = vectorstore,
    document_contents = document_content_description,
    metadata_field_info = metadata_field_info,
    enable_limit=True, 
    search_type = "similarity_score_threshold",
    search_kwargs={"score_threshold": 0.80, "k": 5},
    verbose=True
)

检索器能够按预期检索文档,但我想以某种方式显示检索到的文档的相似度分数。这可以做到吗?如何做到?检索器返回带有 page_content 和元数据键的文档。

python langchain rag
1个回答
0
投票

参考:如何添加分数 您可以做的是子类

SelfQueryRetriever
并确保分数与文档一起返回。这可以使用
similarity_search_with_score
方法

来完成
from langchain.retrievers.self_query.base import SelfQueryRetriever
from typing import Any, Dict

from typing import Any, Dict


class CustomSelfQueryRetriever(SelfQueryRetriever):
    def _get_docs_with_query(
        self, query: str, search_kwargs: Dict[str, Any]
    ) -> List[Document]:
        """Get docs, adding score information."""
        docs, scores = zip(
            *self.vectorstore.similarity_search_with_score(query, **search_kwargs)
        )
        for doc, score in zip(docs, scores):
            doc.metadata["score"] = score

        return docs

retriever = CustomSelfQueryRetriever.from_llm(
    llm,
    vectorstore,
    document_content_description,
    metadata_field_info,
)


result = retriever.invoke("Your query)

现在您

Document
元数据包含一个名为
score

的键
© www.soinside.com 2019 - 2024. All rights reserved.