langchain AzureCosmosDB向量搜索过滤器不起作用

3xiyfsfu  于 3个月前  发布在  其他
关注(0)|答案(1)|浏览(47)

检查其他资源

  • 为这个问题添加了一个非常描述性的标题。
  • 使用集成搜索在LangChain文档中进行了搜索。
  • 使用GitHub搜索查找类似的问题,但没有找到。
  • 我确信这是LangChain中的一个bug,而不是我的代码。
  • 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此bug。

示例代码

# Filtering pipeling working in pymongo used to filter on a list of file_ids
query_embedding = self.embedding_client.embed_query(query)
pipeline = [
            {
                '$search': {
                    "cosmosSearch": {
                        "vector": query_embedding,
                        "path": "vectorContent",
                        "k": 5, #, #, "efsearch": 40 # optional for HNSW only 
                        "filter": {"fileId": {'$in': file_ids}}
                    },
                    "returnStoredSource": True }},
            {'$project': { 
                'similarityScore': { '$meta': 'searchScore' }, 
                'document' : '$$ROOT' 
                } 
            },
        ]
docs = self.mongo_collection.aggregate(pipeline)

当前实现

def _get_pipeline_vector_ivf(
        self, embeddings: List[float], k: int = 4
    ) -> List[dict[str, Any]]:
        pipeline: List[dict[str, Any]] = [
            {
                "$search": {
                    "cosmosSearch": {
                        "vector": embeddings,
                        "path": self._embedding_key,
                        "k": k,
                    },
                    "returnStoredSource": True,
                }
            },
            {
                "$project": {
                    "similarityScore": {"$meta": "searchScore"},
                    "document": "$$ROOT",
                }
            },
        ]
        return pipeline

def _get_pipeline_vector_hnsw(
        self, embeddings: List[float], k: int = 4, ef_search: int = 40
    ) -> List[dict[str, Any]]:
        pipeline: List[dict[str, Any]] = [
            {
                "$search": {
                    "cosmosSearch": {
                        "vector": embeddings,
                        "path": self._embedding_key,
                        "k": k,
                        "efSearch": ef_search,
                    },
                }
            },
            {
                "$project": {
                    "similarityScore": {"$meta": "searchScore"},
                    "document": "$$ROOT",
                }
            },
        ]
        return pipeline

错误信息和堆栈跟踪(如有适用)

  • 无响应*

描述

正如langchain文档所述,Azure Cosmos DB Mongo vCore应该支持过滤:https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/
当我直接使用pyomongo应用我的MongoDB查询时,过滤功能可以正常工作,就像示例中所示的那样。然而,通过langchain,相同的过滤器无法应用。我尝试使用filter、pre_filter、search_kwargs和kwargs参数,但都没有用。

docs = self.vectorstore.similarity_search(query, 
    k=5, 
    pre_filter = {'fileId': {'$in': ["31c283c2-ac31-4260-a8d0-864f444c33ee]"}}
)

仔细检查源代码后,我发现查询字典中没有过滤器键,也没有看到kwargs、search_kwargs被传递,这可能是原因。
https://github.com/langchain-ai/langchain/blob/master/libs/community/langchain_community/vectorstores/azure_cosmos_db.py
对此问题有任何建议吗?

系统信息

系统信息

操作系统:Windows
操作系统版本:10.0.22631
Python版本:3.11.4 (tags/v3.11.4:d2340ef, Jun 7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)]

软件包信息

langchain_core: 0.2.10
langchain: 0.2.6
langchain_community: 0.2.6
langsmith: 0.1.82
langchain_openai: 0.1.13
langchain_text_splitters: 0.2.2

没有安装的软件包(不一定是问题)

以下软件包未找到:
langgraph
langserve

bpzcxfmw

bpzcxfmw1#

你是对的。我会创建一个修复。

相关问题