""" Data Scientist.: PhD.Eddy Giusepe Chirinos Isidro CHROMA ====== Chroma é um banco de dados para criar aplicativos de IA com Embeddings. Aqui vou estudar e analisar certos parâmetros relevantes na hora de realizar a pesqusia por similaridade em texto. """ # Substitua sua chave de API OpenAI: import openai import os from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) # read local .env file openai.api_key = os.environ['OPENAI_API_KEY'] from langchain.chains import RetrievalQA # Tem que atualizar --> pip install langchai==0.0.137 from langchain.llms import OpenAI from langchain.document_loaders import TextLoader from langchain.document_loaders import PyPDFLoader from langchain.indexes import VectorstoreIndexCreator from langchain.text_splitter import CharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.text_splitter import RecursiveCharacterTextSplitter # As seguinte biblioteca é para usar os Embeddings do HuggingFace: from langchain.embeddings import HuggingFaceEmbeddings # Definimos a variável de ambiente CUDA_VISIBLE_DEVICES como um valor inválido para a GPU ou seja CPU: os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # "0" para usar GPU "-1" para CPU # Carregando meu documento em PDF: # loader = PyPDFLoader("/home/and_other_stuff_too/docs/carta-de-servicos-ao-cidadao-seedf-agosto23.pdf") # #documents = loader.load() # documents = loader.load_and_split() loader = TextLoader("/home/eddygiusepe/1_Eddy_Giusepe/6_REPO_HuggingFace/12_LangChain_Router_Chains_and_other_stuff_too/docs/carta01.txt") documents = loader.load() # Dividir os documentos em chunks: #text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=50, separators="\n\n" ) texts = text_splitter.split_documents(documents=documents) # Para .pdf e .txt persist_directory = './chromadb' # Selecione que EMBEDDINGS quer usar: embeddings = OpenAIEmbeddings() # embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2") # Default --> "sentence-transformers/all-mpnet-base-v2" "neuralmind/bert-large-portuguese-cased" # from transformers import AutoModel # model_name="sentence-transformers/all-mpnet-base-v2" # model = AutoModel.from_pretrained(model_name) # print("O tamanho do Embedding é: ", model.config.hidden_size) # # Crie o vectorestore para usar como índice (index): # db = Chroma(collection_name='eddy_1', # embedding_function=embeddings, # persist_directory=persist_directory) # db.add_documents(documents=texts, embeddings=embeddings) # db.persist() # Crie o vectorestore para usar como índice (index): db = Chroma.from_documents(texts, embeddings, persist_directory=persist_directory) # Exponha este índice em uma interface de recuperação: retriever = db.as_retriever(search_type="similarity", search_kwargs={"k":3}) # Crie uma cadeia para responder perguntas: qa = RetrievalQA.from_chain_type( llm=OpenAI(), chain_type="stuff", retriever=retriever, return_source_documents=True) # query = "Qual é a descrição da EMMP?" # result = qa({"query": query}) # print(result['result']) """" Lembrar que o SCORE na hora de realizar a Pesquisa por Similaridade é um float que está relacionado com a Distância. Default é DISTÂNCIA EUCLIDIANA 🧐 """ # #query = """A McDonald’s tem algum colaborador infetado?""" # query = """Como são criados os frangos?""" # docs_score = db.similarity_search_with_score(query=query, distance_metric="cos", k = 4) # #docs_score = db.similarity_search(query=query) # print(docs_score[0][0].page_content) # print("") # print(docs_score) # print("Os scores de distância: ") # print(docs_score[0][1]) # print(docs_score[1][1]) # print(docs_score[2][1]) # print(docs_score[3][1]) print("\033[033mDigite a sua pergunta para similarity search:🤓\033[m ") print("") while True: query = input("\033[033mPergunta do usuário:🤓\033[m ") #docs_score = db.similarity_search_with_score(query=query, distance_metric="cos", k=2) #print(docs_score) print("") resposta = qa({"query": query}) print("\033[033mA resposta mais SIMILAR é: \033[m", resposta['result']) print("") if not query: break