EddyGiusepe's picture
Deploy do LLM
c1b7b41
"""
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}")