Langchain-Chatchat
Langchain-Chatchat copied to clipboard
"删除知识库内指定文件"接口是不是有BUG
在调用”/knowledge_base/delete_docs“删除知识库内文件时,能返回200并提示删除成功,文件所保存的目录下也没有该文件,但是再用”/knowledge_base/list_files“进行搜索时却又能获取到刚刚提示已删除的文件,请问这个是BUG吗
🤖
嘿,@luojihaohuawei!又见面了,希望你最近一切都好!遇到你真是太好了,我们来看看这次又碰到了什么有趣的挑战吧。
根据我在Langchain-Chatchat仓库中找到的相关问题,这个问题可能是由于在删除知识库文件时,对应的向量索引并没有同步删除导致的。这个问题在这个issue中有详细的讨论,并且在这个commit中已经被修复。
另外,我还找到了一段Python代码,这段代码可以手动删除.faiss和.pkl文件中的向量数据,你可以参考一下:
import pickle
with open('index.pkl', 'rb') as f:
id_list = pickle.load(f)
print(id_list)
import faiss
import numpy as np
# 加载Faiss索引对象
index = faiss.read_index('index.faiss')
# 获取向量数量和维度
num_vectors = index.ntotal
dimension = index.d
print(num_vectors )
print(dimension)
# 打印向量数据
for i in range(num_vectors):
vector = index.reconstruct(i)
print(f"Vector {i+1}: {vector}")
# 要删除的数据点的标识符(ID)列表
ids_to_remove = [1, 2, 3]
ids_to_remove =np.array(ids_to_remove)
# 删除指定的数据
index.remove_ids(ids_to_remove)
# 重新生成.faiss文件
faiss.write_index(index, "index.faiss")
# 获取向量数量和维度
num_vectors = index.ntotal
dimension = index.d
print(num_vectors )
print(dimension)
# 打印向量数据
for i in range(num_vectors):
vector = index.reconstruct(i)
print(f"Vector {i+1}: {vector}")
这段代码首先加载.faiss和.pkl文件,然后删除指定的向量数据,最后重新生成.faiss文件。
如果你使用的是Langchain-Chatchat的最新版本,这个问题应该已经被修复了。如果你还在使用旧版本,建议你更新到最新版本试试。
Sources
- [BUG] 删除知识库文件时,index.faiss和index.pkl的内容并没有同步删除
- 关于删除知识库里面的文档后,LLM知识库对话的时候还是会返回该被删除文档的内容
- 知识库文件删除,对应的知识向量数据未删除,仍能问出答案
- server/db/repository/knowledge_file_repository.py
- server/knowledge_base/kb_api.py
About Dosu
This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.
Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.
If you want to continue the conversation, start your reply with @dosu-bot.
这是删除知识库,不是删除文件,相当于删除vector stor那个文件夹
这是删除知识库,不是删除文件,相当于删除vector stor那个文件夹
”/knowledge_base/delete_docs“接口按照swagger说明("删除知识库内指定文件")不是删除文件吗?
是删除这个文件并重新弄一个没有这个文件的vector store
是删除这个文件并重新弄一个没有这个文件的vector store
抱歉,这里我不是很理解清楚,我的理解是:按照您的说法重新弄的vector store不是应该覆盖旧的vector store吗?,这样才能实现删除DB里面该文件的功能呀。 如果不是我理解的这样,目前项目有无实现删除包括指定知识库和存储路径下文件的接口呢?
这个问题已经被标记为 stale ,因为它已经超过 30 天没有任何活动。