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