我试图使用 RAG 和 ObjectBox 作为矢量存储来制作一个简单的问答应用程序。 我有 这是我曾经使用的代码:
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)-无法打开商店:另一个商店仍在使用相同的路径打开:“C:\ Users \ RISHAV BHATTACHARJEE \ Desktop \ RB Workbase \ Generative-AI \ Langchain \ ObjectBox \ objectbox” 追溯: 文件“C:\Users\RISHAV BHATTACHARJEE naconda3\Lib\site-packages\streamlit untime\scriptrunner\script_runner.py",第 584 行,在 _run_script 中 exec(代码,模块。dict) 文件“C:\Users\RISHAV BHATTACHARJEE\Desktop\RB Workbase\Generative-AI\Langchain\ObjectBox pp.py”,第 38 行,位于 st.session_state.vectors = ObjectBox.from_documents(st.session_state.final_documents,st.session_state.embeddings,embedding_dimensions=768) # 矢量 Ollama 嵌入 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ 文件“C:\Users\RISHAV BHATTACHARJEE naconda3\Lib\site-packages\langchain_core ectorstores.py”,第 550 行,在 from_documents 中 返回 cls.from_texts(文本、嵌入、元数据=元数据、**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ 文件“C:\Users\RISHAV BHATTACHARJEE naconda3\Lib\site-packages\langchain_objectbox ectorstores.py”,第 215 行,在 from_texts 中 ob = cls(嵌入, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\Users\RISHAV BHATTACHARJEE naconda3\Lib\site-packages\langchain_objectbox ectorstores.py”,第 52 行,位于 init self._db = self._create_objectbox_db() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\ Users \ RISHAV BHATTACHARJEE naconda3 \ Lib \ site-packages \ langchain_objectbox ectorstores.py”,第252行,在_create_objectbox_db中 返回 objectbox.Store(model=model,directory=db_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\Users\RISHAV BHATTACHARJEE naconda3\Lib\site-packages\objectbox\store.py”,第 168 行,位于 init self._c_store = c.obx_store_open(选项._c_handle) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\Users\RISHAV BHATTACHARJEE naconda3\Lib\site-packages\objectbo