基于Langchain/Chroma的RAG无法存储超99条记录求助
Chroma向量数据库无法完整保存全部文本块嵌入的问题
我通过以下代码流程处理Markdown文件:加载文件→分割为文本块→嵌入并存储到Chroma向量数据库。当前单个Markdown文件被分割为801个文本块,但所有嵌入内容无法完整保存到磁盘上的向量库中。
现有实现代码
加载文档函数
def load_documents(): loader = DirectoryLoader(DATA_PATH, glob="*.md") documents = loader.load() return documents
文本分割函数
def split_text(documents: list[Document]): text_splitter = RecursiveCharacterTextSplitter( chunk_size=300, chunk_overlap=100, length_function=len, add_start_index=True, ) chunks = text_splitter.split_documents(documents) print(f"Split {len(documents)} documents into {len(chunks)} chunks.") document = chunks[10] print(document.page_content) print(document.metadata) return chunks
保存到Chroma函数
def save_to_chroma(chunks: list[Document]): # 先清空数据库 if os.path.exists(CHROMA_PATH): shutil.rmtree(CHROMA_PATH) # 基于文档创建新数据库 db = Chroma.from_documents( chunks, OpenAIEmbeddings(), persist_directory=CHROMA_PATH )
问题排查过程
我尝试用循环逐个保存文本块(代码如下),发现最多只能保存99个文本块的嵌入内容,超过这个数量就会崩溃:
for i, chunk in enumerate(chunks): db = Chroma.from_documents( chunks, OpenAIEmbeddings(), persist_directory=CHROMA_PATH )
用DB Browser for SQLite查看底层数据库,发现Chroma的embeddings表最多只有99条记录,但手动向该表添加记录可以超过99条。
已尝试的解决方法
- 按10或30个文本块为批量进行保存
- 保留已有99条记录的数据库,尝试写入更多数据
- 调整文本块的大小和重叠度
以上方法均未解决问题,求问该问题的原因及可行的解决方法?
内容的提问来源于stack exchange,提问作者hassaanq
相关产品推荐
相关产品推荐

