检查其他资源
- 我为这个问题添加了一个非常描述性的标题。
- 我使用集成搜索在LangChain文档中进行了搜索。
- 我使用GitHub搜索查找类似的问题,但没有找到。
- 我确信这是LangChain中的一个错误,而不是我的代码。
- 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此错误。
示例代码
使用位于tiledb.py中的标准tiledb代码
错误信息和堆栈跟踪(如果适用)
没有提供具体的错误信息
描述
尽管在线说明中说tiledb源代码具有"from_documents"方法,但实际上它并没有。
系统信息
Windows 10
3条答案
按热度按时间wvmv3b1j1#
TileDB
是 Core 中的VectorStore
的子类。VectorStore 在这里有一个名为from_document
的类方法。qqrboqgw2#
解决方案:
调查和解决步骤:
from_documents
方法应该存在。tiledb.py
中的TileDB矢量存储实现,以确认不存在from_documents
方法。VectorStore
进行对照,查看该方法是否应被继承或需要显式实现。from_documents
应被继承,请确保TileDB正确地继承并公开此方法。建议的代码修复:
如果应该显式定义
from_documents
方法,则将其添加到 TileDB矢量存储实现中。后续行动:
a. 为TileDB矢量存储实现实施建议的代码修复。
b. 更新LangChain文档,以准确反映TileDB矢量存储中可用的方法。
v1l68za43#
当我尝试使用
from_documents
方法时,它一直给我各种错误,而且,更糟糕的是,会在没有给出任何错误的情况下提前退出;例如:AttributeError: 'int' object has no attribute '_length_function'
TypeError: 'str_iterator' object does not support the context manager protocol
TypeError: 'dict' object is not callable
TypeError: unsupported operand type(s) for +: 'int' and 'str'
经过大约两天的艰苦排查,我通过修改
sentence-transformers
库本身找到了一个解决方案;具体来说是在SentenceTransformers.py
中的_text_length
方法。这个修改使得_text_length
能够接受一个 "字符串列表" 以及像它目前所做的那样的 "单个字符串"。这是修改后的代码:
显然,这种修改并不是理想的,因为它需要修改
sentence-transformers
源代码,并可能导致与其他sentence-transformers
库功能的不稳定性...AI建议的另一个解决方案是使用 TileDB 的
from_texts
方法。然而,这将需要将所有 "文档对象" 分解成两个列表...我还没有尝试过这个解决方案,而是提交了这个问题。
以下是我如何使用 TileDB 的方法。请注意...在我的项目中,"texts" 变量是一个 "文档对象" 列表,而 "embedding" 参数使用
HuggingFaceEmbeddings
、HuggingFaceInstructEmbeddings
或HuggingFaceBgeEmbeddings
: