Spaces:
No application file
No application file
""" | |
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 | |