Bases: BaseDocumentCompressor
将 Reranker Protocol 实例包装为 LangChain 的
BaseDocumentCompressor,用于 ContextualCompressionRetriever。
Parameters
reranker:
任何满足 Reranker Protocol 的对象。
top_n:
重排序后返回的最大文档数量(转发到底层 reranker 调用)。
Example
from lightrag_langchain.config import settings
from lightrag_langchain.reranker import create_reranker, LightRAGReranker
reranker = create_reranker(settings.reranker)
compressor = LightRAGReranker(reranker, top_n=5)
源代码位于: src/lightrag_langchain/reranker.py
| class LightRAGReranker(BaseDocumentCompressor):
"""将 ``Reranker`` Protocol 实例包装为 LangChain 的
``BaseDocumentCompressor``,用于 ``ContextualCompressionRetriever``。
Parameters
----------
reranker:
任何满足 ``Reranker`` Protocol 的对象。
top_n:
重排序后返回的最大文档数量(转发到底层 reranker 调用)。
Example:
```python
from lightrag_langchain.config import settings
from lightrag_langchain.reranker import create_reranker, LightRAGReranker
reranker = create_reranker(settings.reranker)
compressor = LightRAGReranker(reranker, top_n=5)
```
"""
def __init__(self, reranker: Reranker, top_n: int | None = None) -> None:
self._reranker = reranker
self._top_n = top_n
def compress_documents(
self,
documents: list[Document] | tuple[Document, ...],
query: str,
**kwargs: Any,
) -> list[Document]:
"""同步路径——使用 ``asyncio.run`` 桥接异步 reranker。
提取每个 Document 的 ``page_content``,调用 reranker,
将 ``relevance_score`` 附加到 metadata,并按分数降序返回排序后的文档。
"""
texts = [doc.page_content for doc in documents]
scores = asyncio.run(
self._reranker.rerank(query, texts, self._top_n)
)
return _sort_and_attach_scores(documents, scores)
async def acompress_documents(
self,
documents: list[Document] | tuple[Document, ...],
query: str,
**kwargs: Any,
) -> list[Document]:
"""异步路径——直接 await reranker,无需 ``asyncio.run``。"""
texts = [doc.page_content for doc in documents]
scores = await self._reranker.rerank(query, texts, self._top_n)
return _sort_and_attach_scores(documents, scores)
|
compress_documents
compress_documents(
documents: list[Document] | tuple[Document, ...],
query: str,
**kwargs: Any,
) -> list[Document]
同步路径——使用 asyncio.run 桥接异步 reranker。
提取每个 Document 的 page_content,调用 reranker,
将 relevance_score 附加到 metadata,并按分数降序返回排序后的文档。
源代码位于: src/lightrag_langchain/reranker.py
| def compress_documents(
self,
documents: list[Document] | tuple[Document, ...],
query: str,
**kwargs: Any,
) -> list[Document]:
"""同步路径——使用 ``asyncio.run`` 桥接异步 reranker。
提取每个 Document 的 ``page_content``,调用 reranker,
将 ``relevance_score`` 附加到 metadata,并按分数降序返回排序后的文档。
"""
texts = [doc.page_content for doc in documents]
scores = asyncio.run(
self._reranker.rerank(query, texts, self._top_n)
)
return _sort_and_attach_scores(documents, scores)
|
acompress_documents
async
acompress_documents(
documents: list[Document] | tuple[Document, ...],
query: str,
**kwargs: Any,
) -> list[Document]
异步路径——直接 await reranker,无需 asyncio.run。
源代码位于: src/lightrag_langchain/reranker.py
| async def acompress_documents(
self,
documents: list[Document] | tuple[Document, ...],
query: str,
**kwargs: Any,
) -> list[Document]:
"""异步路径——直接 await reranker,无需 ``asyncio.run``。"""
texts = [doc.page_content for doc in documents]
scores = await self._reranker.rerank(query, texts, self._top_n)
return _sort_and_attach_scores(documents, scores)
|