""" Data Scientist.: Dr.Eddy Giusepe Chirinos Isidro Este script tem que ser otimizado !!! https://www.datacamp.com/tutorial/chromadb-tutorial-step-by-step-guide https://abhishektatachar.medium.com/run-chroma-db-on-a-local-machine-and-as-a-docker-container-a9d4b91d2a97 https://docs.trychroma.com/usage-guide """ import chromadb from chromadb.utils import embedding_functions import openai client = chromadb.Client() #client.reset() # Esvazia e redefine completamente o banco de dados. Isso é destrutivo e irreversível. #client.delete_collection(name="my_collection") print(client.list_collections()) #collection = client.create_collection("my_collection") #client.heartbeat() # 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'] # # Isto é quando usas o arquivo .env: # from dotenv import load_dotenv # import os # print('Carregando a minha chave Key: ', load_dotenv()) # Eddy_API_KEY_OpenAI = os.environ['OPENAI_API_KEY'] student_info = """ Alexandra Thompson, uma estudante do segundo ano de ciências físicas de 19 anos com um GPA de 3.7, é membro \ dos clubes de programação e xadrez e gosta de pizza, nadar e fazer caminhadas em seu tempo livre na esperança \ de trabalhar em uma empresa de tecnologia depois de se formar no Universidade de Washington. """ club_info = """ O clube de xadrez universitário oferece uma oportunidade para os alunos se reunirem e se divertirem jogando o clássico \ jogo de estratégia de xadrez. Membros de todos os níveis são bem-vindos, desde iniciantes aprendendo as regras até \ jogadores experientes de torneios. O clube normalmente se reúne algumas vezes por semana para jogar jogos casuais, \ participar de torneios, analisar partidas de xadrez famosas e melhorar as habilidades dos membros. """ university_info = """ A Universidade de Washington, fundada em 1861 em Seattle, é uma universidade pública de pesquisa com mais de 45000 alunos \ em três campi em Seattle, Tacoma e Bothell. Como instituição emblemática das seis universidades públicas do estado de Washington, \ a UW abrange mais de 500 edifícios e 20 milhões de pés quadrados de espaço, incluindo um dos maiores sistemas de bibliotecas do mundo. """ class Retriver: def __init__(self): pass def get_retrieval_results(self, input, k=1): openai_ef = embedding_functions.OpenAIEmbeddingFunction(model_name="text-embedding-ada-002") students_embeddings = openai_ef([student_info, club_info, university_info]) collection = client.get_or_create_collection(name="my_collection", embedding_function=openai_ef) collection.add( embeddings = students_embeddings, documents = [student_info, club_info, university_info], metadatas = [{"source": "student info"},{"source": "club info"},{'source':'university info'}], ids = ["id1", "id2", "id3"] ) retrieval_results = collection.query( query_embeddings=openai_ef(input), #query_texts=[input], n_results=k, ) return retrieval_results["documents"][0] # Você é um assistente prestativo que responde às queries do usuário em base as informações recebidas. class Generator: def __init__(self, openai_model="gpt-3.5-turbo-1106"): # gpt-4 self.openai_model = openai_model self.prompt_template = """Sumarize a resposta recuperada: ```{text}```. Ademais a sua resposta deve conter como máximo 20 palavras.""" def generate_response(self, text): # prompts = [] # for result in retrieval_results: # prompt = self.prompt_template.format(answer_rec=result) # prompts.append(prompt) # prompts.reverse() prompt = self.prompt_template.format(text=text) response = openai.ChatCompletion.create( model=self.openai_model, messages=[{"role": "assistant", "content": prompt}], temperature=0, ) sumarizando = response["choices"][0]["message"]["content"] return sumarizando class Chatbot: def __init__(self): self.retriver = Retriver() self.generator = Generator() def answer(self, input): retrieval_results = self.retriver.get_retrieval_results(input) return self.generator.generate_response(retrieval_results) # Creating an instance of the Chatbot class chatbot = Chatbot() while True: user_input = input("You: ") # Taking user input from the CLI response = chatbot.answer(user_input) print(f"Chatbot: {response}")