|
import box |
|
import yaml |
|
from langchain.prompts import PromptTemplate |
|
from langchain.chains import RetrievalQA |
|
|
|
from langchain.vectorstores import FAISS |
|
from llm.prompts import qa_template |
|
from llm.llm import setup_llm |
|
from langchain_community.embeddings.sentence_transformer import ( |
|
SentenceTransformerEmbeddings, |
|
) |
|
from langchain.vectorstores import Chroma |
|
|
|
with open('config.yml', 'r', encoding='utf8') as ymlfile: |
|
cfg = box.Box(yaml.safe_load(ymlfile)) |
|
def set_qa_prompt(): |
|
""" |
|
Prompt template for QA retrieval for each vectorstore |
|
""" |
|
prompt = PromptTemplate(template=qa_template, |
|
input_variables=['context', 'question']) |
|
return prompt |
|
|
|
def build_retrieval_qa_chain(llm, prompt): |
|
|
|
embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2",model_kwargs={'device': 'cpu'}) |
|
|
|
chromadb = Chroma(persist_directory="./vectorestore/db_faiss", embedding_function=embedding_function) |
|
retriever = chromadb.as_retriever(search_kwargs={'k': cfg.VECTOR_COUNT}) |
|
qa_chain = RetrievalQA.from_chain_type(llm=llm, |
|
chain_type='stuff', |
|
retriever=retriever, |
|
return_source_documents=cfg.RETURN_SOURCE_DOCUMENTS, |
|
chain_type_kwargs={'prompt': prompt}) |
|
|
|
return qa_chain |
|
def setup_qa_chain(): |
|
llm = setup_llm() |
|
qa_prompt = set_qa_prompt() |
|
qa_chain = build_retrieval_qa_chain(llm, qa_prompt) |
|
return qa_chain |
|
|
|
|
|
|
|
|
|
def query_embeddings(query): |
|
embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2",model_kwargs={'device': 'cpu'}) |
|
chromadb = Chroma(persist_directory="./vectorestore/db_faiss", embedding_function=embedding_function) |
|
retriever = chromadb.as_retriever(search_kwargs={'k': cfg.VECTOR_COUNT}) |
|
semantic_search = retriever.similarity_search_with_relevance_scores(query) |
|
return semantic_search |