Spaces:
Running
Running
# coding=utf8 | |
from langchain_openai import ChatOpenAI | |
from langchain.prompts import PromptTemplate | |
from langchain_community.document_loaders import TextLoader | |
from langchain_text_splitters import CharacterTextSplitter | |
from langchain_community.vectorstores import FAISS | |
from langchain_openai import OpenAIEmbeddings | |
from langchain.chains import RetrievalQA | |
import gradio as gr | |
import time | |
import os | |
# Carregar chave da API OpenAI | |
api_key = os.getenv("OPENAI_API_KEY") | |
if not api_key: | |
raise ValueError("OPENAI_API_KEY não está definido no ambiente.") | |
else: | |
print("Chave API carregada com sucesso.") | |
# Variáveis globais para armazenamento dos objetos carregados | |
global bd, chain | |
# Load CSS from a separate file | |
try: | |
with open("src/css/styles.css", "r") as css_file: | |
css = css_file.read() | |
print("Arquivo CSS carregado com sucesso.") | |
except Exception as e: | |
print(f"Erro ao carregar o arquivo CSS: {e}") | |
def initialize_chatbot(): | |
global bd, chain | |
try: | |
llm = ChatOpenAI( | |
temperature=0.0, | |
model="gpt-3.5-turbo", | |
api_key=api_key, | |
) | |
print("Modelo ChatOpenAI inicializado com sucesso.") | |
except Exception as e: | |
print(f"Erro ao inicializar o modelo ChatOpenAI: {e}") | |
try: | |
carregador = TextLoader("docs/Produtos.txt", encoding="utf-8") | |
documentos = carregador.load() | |
print("Documentos carregados com sucesso.") | |
except Exception as e: | |
print(f"Erro ao carregar documentos: {e}") | |
try: | |
quebrador = CharacterTextSplitter(separator="\n\n\n", chunk_overlap=200) | |
textos = quebrador.split_documents(documentos) | |
print("Documentos divididos com sucesso.") | |
except Exception as e: | |
print(f"Erro ao dividir documentos: {e}") | |
try: | |
embeddings = OpenAIEmbeddings() | |
bd = FAISS.from_documents(textos, embeddings) | |
chain = RetrievalQA.from_chain_type(llm, retriever=bd.as_retriever()) | |
print("FAISS e RetrievalQA inicializados com sucesso.") | |
except Exception as e: | |
print(f"Erro ao inicializar FAISS ou RetrievalQA: {e}") | |
def chatbot(input_text): | |
modelo_prompt = PromptTemplate.from_template( | |
""" | |
Você é um sommelier altamente experiente trabalhando para a Adega Hippo, uma adega renomada por sua vasta seleção de vinhos de alta qualidade. Um cliente entra na adega e pede uma recomendação de vinho. Utilize seu extenso conhecimento sobre vinhos, incluindo variedades de uvas, regiões vinícolas, harmonizações gastronômicas e preferências pessoais, para fornecer a melhor recomendação possível. | |
Seja amigável, acolhedor e pronto para oferecer sugestões detalhadas e úteis. Lembre-se de perguntar ao cliente sobre suas preferências pessoais, como tipos de vinho que gosta (tinto, branco, rosé, espumante), ocasiões especiais, e qualquer outra informação relevante que possa ajudá-lo a fazer uma recomendação personalizada. | |
O cliente diz: {pergunta} | |
""", | |
) | |
prompt = modelo_prompt.format(pergunta=input_text) | |
try: | |
response = chain({"query": prompt}) | |
print(response['result']) | |
return response['result'] | |
except Exception as e: | |
print(f"Erro ao obter resposta do chatbot: {e}") | |
return "Desculpe, houve um erro ao processar sua solicitação." | |
def respond(message, chat_history): | |
try: | |
response = chatbot(message) | |
chat_history.append((message, response)) | |
time.sleep(1) | |
return "", chat_history | |
except Exception as e: | |
print(f"Erro ao responder mensagem: {e}") | |
return "Erro ao processar a mensagem.", chat_history | |
with gr.Blocks(css=css, title='Adega Hippo') as demo: | |
realPath = str(os.path.dirname(os.path.realpath(__file__))) | |
img1 = gr.Image("images/adega_hippo.png", elem_classes="img svelte-ms5bsk", elem_id="img-svelte-ms5bsk") | |
gpt = gr.Chatbot(label=".", elem_classes="wrap svelte-1o68geq", elem_id="chatbot") | |
msg = gr.Textbox(elem_id="div-svelte-awbtu4", elem_classes="textBoxBot", show_label=False, | |
placeholder="Bem vindo ao Hippo Supermercados, em que posso ajuda-lo?", | |
) | |
msg.submit(respond, [msg, gpt], [msg, gpt]) | |
# Inicializar o chatbot | |
initialize_chatbot() | |
# Lançar o aplicativo sem a opção share | |
demo.launch() | |