cdv-teste / chat.py
joaopedrocgf's picture
Adicionando novas funcionalidades
46e8b1c
import os
import json
from dotenv import load_dotenv
from retriever import db_chroma
from prompts import PROMPT_TEMPLATE, CLASSIFIER_PROMPT
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
def main():
# Bom modelo para classificação e respostas
model = ChatOpenAI(model_name='gpt-4o-mini', openai_api_key=os.getenv("OPENAI_API_KEY"))
with open('know_graph.json', 'r', encoding='utf-8') as f:
knowledge_graph_data = json.dumps(json.load(f), ensure_ascii=False)
chat_history = "" # Histórico inicial
while True:
query = input("Digite sua pergunta (para sair digite 'sair'): ")
if query.lower() == 'sair':
break
# Classificação inicial
prompt_classifier = ChatPromptTemplate.from_template(CLASSIFIER_PROMPT)
classifier_input = prompt_classifier.format(
knowledge_graph=knowledge_graph_data,
chat_history=chat_history,
question=query
)
classification_response = model.invoke(classifier_input).content
cleaned_response = classification_response.replace("```json", "").replace("```", "").strip()
try:
classification = json.loads(cleaned_response)
except:
classification = {"estagio": "Nao identificado", "objecao_id": "nenhuma", "argumento_base": ""}
# Busca de contexto relevante
docs_chroma = db_chroma.similarity_search(query, k=5)
context_text = "\n\n".join([doc.page_content for doc in docs_chroma])
diretriz_venda = f"\n[DIRETRIZ ESTRATÉGICA]: Estágio: {classification.get('estagio')}. " \
f"Objeção: {classification.get('objecao_id')}. " \
f"Argumento sugerido: {classification.get('argumento_base')}"
full_context = context_text + diretriz_venda
prompt_final = ChatPromptTemplate.from_template(PROMPT_TEMPLATE)
final_input = prompt_final.format(
context=full_context,
chat_history=chat_history,
question=query
)
response = model.invoke(final_input)
print(f"\n--- LOG DE VENDAS ---")
print(f"📍 Estágio: {classification.get('estagio')}")
print(f"⚠️ Objeção: {classification.get('objecao_id')}")
print(f"---------------------\n")
print('***Resposta:*** \n\n' + response.content)
# Atualizar histórico (simplificado)
chat_history += f"\nUsuário: {query}\nAssistente: {response.content}"
print("\n" + "-"*50 + "\n")
if __name__ == "__main__":
main()