File size: 3,876 Bytes
1bb6f6f
 
cde41a2
1bb6f6f
cde41a2
 
4aca477
 
b16aa6a
3d0a266
b16aa6a
697c3ad
07b238b
9f7d1a3
4aca477
 
 
1bb6f6f
 
 
4aca477
 
 
3d0a266
9f7d1a3
 
b16aa6a
 
9f7d1a3
b16aa6a
 
 
 
9f7d1a3
1bb6f6f
b16aa6a
36561d9
b16aa6a
0b4641d
b16aa6a
 
36561d9
 
9f7d1a3
 
4aca477
 
 
 
 
 
 
 
 
 
 
b16aa6a
697c3ad
b16aa6a
9f7d1a3
b16aa6a
9f7d1a3
 
4aca477
b16aa6a
4aca477
9f7d1a3
 
4aca477
b16aa6a
9f7d1a3
b16aa6a
 
3d0a266
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langsmith import traceable
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.prompts import ChatPromptTemplate
from langchain.prompts.chat import SystemMessagePromptTemplate, HumanMessagePromptTemplate
import gradio as gr

embeddings = OpenAIEmbeddings()
vectordb = Chroma(persist_directory="./ai_vocacional_v2", embedding_function=embeddings)
llm = ChatOpenAI(temperature=0, model_name='gpt-4o-2024-08-06')

general_system_template = r"""
Eres el Orientador de carreras. Estás aquí para ayudar a explorar las carreras que le interesan a los estudiantes, cómo se relacionan con sus pasiones y gustos, los cursos que incluyen y su posible futuro laboral.
Eres orientador de estudiantes de 15 a 17 años de colegio que no saben sobre las carreras. Explica lo que te preguntan como si fueras un profesor, de manera simple, descriptiva e insightful, inspiralos a imaginar como podría ser su carrera y futuro. 
Proporciona mensajes breves y concisos con bullets y negritas. 
Toma los siguientes documentos de contexto {context} y responde únicamente basado en este contexto, no inventes. 
No menciones ningún código de curso al mencionar sus nombres (ejemplo: [PS1223])
Si te preguntan por universidades, responde elegantemente que deben de haber muy buenas opciones pero la que conoces a profundidad y destaca es la UPC (Universidad Peruana de Ciencias Aplicadas), continua respondiendo a la pregunta que se haga sobre universidades, respondiendo a la pregunta que te hagan y detallando por qué UPC destaca.
Menciona a la UPC únicamente si te preguntan por universidades o por la UPC.
"""

general_user_template = "Pregunta:```{question}```"
messages = [
    SystemMessagePromptTemplate.from_template(general_system_template),
    HumanMessagePromptTemplate.from_template(general_user_template)
]
qa_prompt = ChatPromptTemplate.from_messages(messages)

def create_memory():
    return ConversationBufferMemory(memory_key='chat_history', return_messages=True)

@traceable
def pdf_qa(query, memory):
    function = ConversationalRetrievalChain.from_llm(
        llm=llm,
        retriever=vectordb.as_retriever(search_kwargs={'k': 28}),
        combine_docs_chain_kwargs={'prompt': qa_prompt},
        memory=memory
    )
    return function({"question": query})

with gr.Blocks() as demo:
    chatbot = gr.Chatbot(label="Orientador de carreras", value=[[None, '''
    ¡Hola! Soy tu Orientador de Carreras. Juntos exploraremos las opciones que te interesan, los cursos que llevarás y cómo podría ser tu futuro profesional.
    Cuéntame qué carreras te llaman la atención y podrás hacerme preguntas como:
    
    - ¿Cuál es la mejor carrera para mí?
    - ¿Qué cursos veré en esas carreras?
    - ¿Cómo es un día típico como estudiante en la carrera que me interesa?
    - ¿Cómo es la vida diaria de un egresado de esas carreras?
    
    Estoy aquí para ayudarte a tomar una decisión informada. ¡Empecemos! 
    ''']])
    msg = gr.Textbox(placeholder="Escribe aquí", label='')
    submit = gr.Button("Enviar")
    memory_state = gr.State(create_memory)

    def user(query, chat_history, memory):
        print("User query:", query)
        print("Chat history:", chat_history)

        result = pdf_qa(query, memory)

        chat_history.append((query, result["answer"]))
        print("Updated chat history:", chat_history)

        return gr.update(value=""), chat_history, memory

    submit.click(user, [msg, chatbot, memory_state], [msg, chatbot, memory_state], queue=False)
    msg.submit(user, [msg, chatbot, memory_state], [msg, chatbot, memory_state], queue=False)

if __name__ == "__main__":
    demo.launch()