我正在使用Langchain和OpenAI从一些PDF文档中创建嵌入,以询问这些PDF文档的问题。我正在使用NodeJS并尝试在Mongo Atlas中保存向量。
在服务启动时,我在MongoDBAtlasVectorSearch
类上调用fromDocuments()
方法。该方法采用嵌入模型,我将其传入OpenAIEmbeddings
的示例,该示例正在调用OpenAI Embeddings API。我遇到的问题是,每次服务启动时都会发生这种情况,并且我使用OpenAI运行成本非常快。
我在文档中看到,fromDocuments()
将文档添加到底层Mongo集合中,但文档中没有任何地方指示稍后在何处使用底层集合来重新加载先前保存的向量。
这是我用来添加文档的代码:
this.vectorStore = await MongoDBAtlasVectorSearch.fromDocuments(docs, embeddings, {
collection: this.collection
});
字符串
参数this.collection
是我通过NodeJS的MongoDB客户端获得的底层集合(我在此代码之前通过名称检索集合)。embeddings
参数是OpenAIEmbeddings
的示例。
我们是否可以保存以前创建的向量并重新加载它们,以避免在初始加载后再次重新创建嵌入?
2条答案
按热度按时间lnlaulya1#
你应该看看这里的LangChain类:https://js.langchain.com/docs/modules/data_connection/retrievers/integrations/remote-retriever
它可能会解决你的问题。
doinxwow2#
我终于能够使用这个文档来实现它:https://js.langchain.com/docs/modules/data_connection/vectorstores/integrations/mongodb_atlas
就这么简单:使用Mongo驱动程序从Mongo加载底层集合,而不是在
MongoDBAtlasVectorSearch
上调用fromDocuments()
,我所要做的就是构造对象并传递该集合,就像这样:字符串
即使我传入一个
embeddings
对象,如果集合中有文档,它也不会使用它。如果底层集合为空,则需要首先填充集合。您可以通过调用
fromDocuments()
来执行此操作,它会自动创建嵌入并将向量添加到集合中:型
希望这对某人有帮助,因为它对我来说是一个救星!