检查其他资源
- 为这个问题添加了一个非常描述性的标题。
- 使用集成搜索在LangChain文档中进行了搜索。
- 使用GitHub搜索找到了一个类似的问题,但没有找到。
- 我确信这是LangChain中的一个bug,而不是我的代码。
- 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此bug。
示例代码
问题描述
在使用Langchain Qdrant集成中的Qdrant.from_existing_collection
方法时遇到了问题。以下是我使用的代码:
from langchain_community.vectorstores.qdrant import Qdrant
url = "http://localhost:6333"
collection_name = "unique_case_2020"
qdrant = Qdrant.from_existing_collection(
embedding=embeddings, # Please set according to actual situation
collection_name=collection_name,
url=url
)
当我运行这段代码时,我得到了以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[21], line 7
3 url = "http://localhost:6333"
4 collection_name = "unique_case_2020"
----> 7 qdrant = Qdrant.from_existing_collection(
8 embedding=embeddings, # Please set according to actual situation
9 collection_name=collection_name,
10 url=url
11 )
TypeError: Qdrant.from_existing_collection() missing 1 required positional argument: 'path'
为了解决这个问题,我添加了path
参数,但遇到了另一个错误:
qdrant = Qdrant.from_existing_collection(
embedding=embeddings, # Please set according to actual situation
collection_name=collection_name,
url=url,
path=""
)
这引发了以下错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[23], line 7
3 url = "http://localhost:6333"
4 collection_name = "unique_case_2020"
----> 7 qdrant = Qdrant.from_existing_collection(
8 embedding=embeddings, # Please set according to actual situation
9 collection_name=collection_name,
10 url=url,
11 path=""
12 )
File ~/.local/lib/python3.10/site-packages/langchain_community/vectorstores/qdrant.py:1397, in Qdrant.from_existing_collection(cls, embedding, path, collection_name, location, url, port, grpc_port, prefer_grpc, https, api_key, prefix, timeout, host, **kwargs)
1374 @classmethod
1375 def from_existing_collection(
1376 cls: Type[Qdrant],
(...)
1390 **kwargs: Any,
1391 ) -> Qdrant:
1392 """
1393 Get instance of an existing Qdrant collection.
1394 This method will return the instance of the store without inserting any new
1395 embeddings
1396 """
-> 1397 client, async_client = cls._generate_clients(
1398 location=location,
1399 url=url,
1400 port=port,
1401 grpc_port=grpc_port,
1402 prefer_grpc=prefer_grpc,
1403 https=https,
1404 api_key=api_key,
1405 prefix=prefix,
1406 timeout=timeout,
1407 host=host,
1408 path=path,
1409 **kwargs,
1410 )
1411 return cls(
1412 client=client,
1413 async_client=async_client,
(...)
1416 **kwargs,
1417 )
File ~/.local/lib/python3.10/site-packages/langchain_community/vectorstores/qdrant.py:2250, in Qdrant._generate_clients(location, url, port, grpc_port, prefer_grpc, https, api_key, prefix, timeout, host, path, **kwargs)
2233 @staticmethod
2234 def _generate_clients(
2235 location: Optional[str] = None,
(...)
2246 **kwargs: Any,
2247 ) -> Tuple[Any, Any]:
2248 from qdrant_client import AsyncQdrantClient, QdrantClient
-> 2250 sync_client = QdrantClient(
2251 location=location,
2252 url=url,
2253 port=port,
2254 grpc_port=grpc_port,
2255 prefer_grpc=prefer_grpc,
2256 https=https,
2257 api_key=api_key,
2258 prefix=prefix,
2259 timeout=timeout,
2260 host=host,
2261 path=path,
2262 **kwargs,
2263 )
2265 if location == ":memory:" or path is not None:
2266 # Local Qdrant cannot co-exist with Sync and Async clients
2267 # We fallback to sync operations in this case
2268 async_client = None
File ~/.local/lib/python3.10/site-packages/qdrant_client/qdrant_client.py:107, in QdrantClient.__init__(self, location, url, port, grpc_port, prefer_grpc, https, api_key, prefix, timeout, host, path, force_disable_check_same_thread, grpc_options, auth_token_provider, **kwargs)
104 self._client: QdrantBase
106 if sum([param is not None for param in (location, url, host, path)]) > 1:
--> 107 raise ValueError(
108 "Only one of <location>, <url>, <host> or <path> should be specified."
109 )
111 if location == ":memory:":
112 self._client = QdrantLocal(
113 location=location,
114 force_disable_check_same_thread=force_disable_check_same_thread,
115 )
ValueError: Only one of <location>, <url>, <host> or <path> should be specified.
错误信息和堆栈跟踪(如果适用)
- 无响应*
描述
预期行为
from_existing_collection
方法应该允许path
参数是可选的,因为指定url
和path
会导致冲突,而当提供url
时,path
不应该被强制执行。
实际行为
- 当未提供
path
时,会引发一个TypeError
,指示path
是一个必需的位置参数。 - 当提供
path
时,会引发一个ValueError
,指示只应指定其中一个<location>
、<url>
、<host>
或<path>
。
建议修复
- 更新
from_existing_collection
方法,使path
参数变为可选。 - 调整内部逻辑以处理在提供
url
的情况下不要求提供x20n20的情况。
重现步骤
- 使用提供的代码从现有集合示例化一个 x22n22 对象。
- 在未提供 x23n23 时观察 x24n24。
- 在提供 x25n25 和 x26n26 时观察 x27n27。
感谢您查看此问题。
系统信息
环境
- Python版本:3.10
- 名称:langchain-community
版本:0.2.2
摘要:社区贡献的LangChain集成。
主页: x29f0xf
作者:
作者-邮箱:
许可证:MIT
位置:/home/lighthouse/.local/lib/python3.10/site-packages
需要:aiohttp, dataclasses-json, langchain, langchain-core, langsmith, numpy, PyYAML, requests, SQLAlchemy, tenacity
由:langchain-experimental所需的
1条答案
按热度按时间aelbi1ox1#
你好@deepslit。
请使用包含此修复的新版
langchain-qdrant
。社区版本已不再维护。