You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ObjectBox作为向量存储时遇CoreException 10001错误的解决咨询

解决ObjectBox向量存储的多实例冲突问题

问题背景

我开发了一个基于RAG的问答应用,采用ObjectBox作为向量存储,Streamlit作为前端交互。核心代码如下:

import streamlit as st
import os
from langchain_groq import ChatGroq
from langchain_community.document_loaders import PyPDFDirectoryLoader
from langchain_community.embeddings import OllamaEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain_objectbox.vectorstores import ObjectBox
import time

groq_api_key = "The Groq API Key"

st.title("Objectbox VectorsstoreDB with Llama3")

llm = ChatGroq(groq_api_key=groq_api_key, model_name="Llama3-8b-8192")

prompt = ChatPromptTemplate.from_template(
    """
    Answer the questions based on the provided context only.
    Please provide te most accurate response based on the question
    <<context>>
    {context}
    <<context>>
    Questions: {input}
"""
)

if "vector" not in st.session_state:
        st.session_state.embeddings=OllamaEmbeddings()
        st.session_state.loader = PyPDFDirectoryLoader("./us_census") # Data Ingestion
        st.session_state.docs = st.session_state.loader.load() # Document loading
        st.session_state.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200) # Chunk Creation
        st.session_state.final_documents = st.session_state.text_splitter.split_documents(st.session_state.docs[:20]) # Splitting
        st.session_state.vectors = ObjectBox.from_documents(st.session_state.final_documents,st.session_state.embeddings,embedding_dimensions=768) # Vector Ollama embeddings
        print("hi")

input_prompt = st.text_input("Input Prompt")

if st.button("Documents Embedding"):
    #vector_embedding()
    st.write("Vector Store DB is Ready")

if input_prompt:
    document_chain = create_stuff_documents_chain(llm,prompt)
    retriever = st.session_state.vectors.as_retriever()
    retrieval_chain = create_retrieval_chain(retriever,document_chain)
    start = time.process_time()
    response = retrieval_chain.invoke({"input":input_prompt})
    print("Response time:",time.process_time()-start)
    st.write(response['answer'])

    # Streamlit expander
    with st.expander("Doc similarity search"):
        # finding relevant chunks
        for i, doc in enumerate(response["context"]):
            st.write(doc.page_content)
            st.write("-------------------------")

错误详情

在Streamlit输入框提交查询后,触发以下错误:

CoreException: 10001 (ILLEGAL_STATE) - Cannot open store: another store is still open using the same path: "C:\Users\RISHAV BHATTACHARJEE\Desktop\RB Workbase\Generative-AI\Langchain\ObjectBox\objectbox"

回溯信息:

File "C:\Users\RISHAV BHATTACHARJEE\anaconda3\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 584, in _run_script
exec(code, module.__dict__)
File "C:\Users\RISHAV BHATTACHARJEE\Desktop\RB Workbase\Generative-AI\Langchain\ObjectBox\app.py", line 38, in 
st.session_state.vectors = ObjectBox.from_documents(st.session_state.final_documents,st.session_state.embeddings,embedding_dimensions=768) # Vector Ollama embeddings
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RISHAV BHATTACHARJEE\anaconda3\Lib\site-packages\langchain_core\vectorstores.py", line 550, in from_documents
return cls.from_texts(texts, embedding, metadatas=metadatas, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RISHAV BHATTACHARJEE\anaconda3\Lib\site-packages\langchain_objectbox\vectorstores.py", line 215, in from_texts
ob = cls(embedding, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RISHAV BHATTACHARJEE\anaconda3\Lib\site-packages\langchain_objectbox\vectorstores.py", line 52, in __init__
self._db = self._create_objectbox_db()
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RISHAV BHATTACHARJEE\anaconda3\Lib\site-packages\langchain_objectbox\vectorstores.py", line 252, in _create_objectbox_db
return objectbox.Store(model=model,directory=db_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RISHAV BHATTACHARJEE\anaconda3\Lib\site-packages\objectbox\store.py", line 168, in __init__
self._c_store = c.obx_store_open(options._c_handle)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RISHAV BHATTACHARJEE\anaconda3\Lib\site-packages\objectbox\c.py", line 295, in check_result
raise CoreException(C.obx_last_error_code())

解决方法

1. 修正Session State键名匹配问题

原代码中判断条件用的是"vector",但实际赋值的是st.session_state.vectors(复数),导致每次脚本运行都会重新创建ObjectBox实例,引发多实例冲突。把判断条件改为:

if "vectors" not in st.session_state:

2. 优化初始化触发逻辑

把向量库初始化逻辑绑定到"Documents Embedding"按钮,避免自动重复执行:

if st.button("Documents Embedding"):
    if "vectors" not in st.session_state:
        st.session_state.embeddings=OllamaEmbeddings()
        st.session_state.loader = PyPDFDirectoryLoader("./us_census")
        st.session_state.docs = st.session_state.loader.load()
        st.session_state.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200)
        st.session_state.final_documents = st.session_state.text_splitter.split_documents(st.session_state.docs[:20])
        st.session_state.vectors = ObjectBox.from_documents(st.session_state.final_documents,st.session_state.embeddings,embedding_dimensions=768)
    st.write("Vector Store DB is Ready")

3. 确保单例实例唯一

ObjectBox不允许同一路径下同时打开多个存储实例,通过Session State保存唯一实例,确保整个应用生命周期中只创建一次。

修改后的完整代码

import streamlit as st
import os
from langchain_groq import ChatGroq
from langchain_community.document_loaders import PyPDFDirectoryLoader
from langchain_community.embeddings import OllamaEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain_objectbox.vectorstores import ObjectBox
import time

groq_api_key = "The Groq API Key"

st.title("Objectbox VectorsstoreDB with Llama3")

llm = ChatGroq(groq_api_key=groq_api_key, model_name="Llama3-8b-8192")

prompt = ChatPromptTemplate.from_template(
    """
    Answer the questions based on the provided context only.
    Please provide the most accurate response based on the question
    <<context>>
    {context}
    <<context>>
    Questions: {input}
"""
)

input_prompt = st.text_input("Input Prompt")

if st.button("Documents Embedding"):
    if "vectors" not in st.session_state:
        st.session_state.embeddings=OllamaEmbeddings()
        st.session_state.loader = PyPDFDirectoryLoader("./us_census") # Data Ingestion
        st.session_state.docs = st.session_state.loader.load() # Document loading
        st.session_state.text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200) # Chunk Creation
        st.session_state.final_documents = st.session_state.text_splitter.split_documents(st.session_state.docs[:20]) # Splitting
        st.session_state.vectors = ObjectBox.from_documents(st.session_state.final_documents,st.session_state.embeddings,embedding_dimensions=768) # Vector Ollama embeddings
        print("Vector Store initialized")
    st.write("Vector Store DB is Ready")

if input_prompt:
    if "vectors" not in st.session_state:
        st.error("Please click 'Documents Embedding' first to initialize the vector store.")
    else:
        document_chain = create_stuff_documents_chain(llm,prompt)
        retriever = st.session_state.vectors.as_retriever()
        retrieval_chain = create_retrieval_chain(retriever,document_chain)
        start = time.process_time()
        response = retrieval_chain.invoke({"input":input_prompt})
        print("Response time:",time.process_time()-start)
        st.write(response['answer'])

        # Streamlit expander
        with st.expander("Doc similarity search"):
            # finding relevant chunks
            for i, doc in enumerate(response["context"]):
                st.write(doc.page_content)
                st.write("-------------------------")

内容的提问来源于stack exchange,提问作者Rishav Bhattacharjee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:52:18