File size: 2,628 Bytes
0a227d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# ENUNCIADO
# rag_engine.py
# 
# Este archivo contendrá toda la lógica del motor RAG. Se deben
# implementar obligatoriamente las siguientes funciones (con los nombres y parámetros
# exactos que se indican).
# Al inicio del script se deben cargar:
#   • El modelo de embeddings: SentenceTransformer("MongoDB/mdbr-leaf-ir")
#   • El modelo de lenguaje: PleIAs/Pleias-RAG350M (usando AutoTokenizer y AutoModelForCausalLM de transformers).
#   • Los documentos desde documents.json.
# Función recuperar_documentos(consulta, top_k=2, umbral=0.4)
# Dada una consulta en inglés, recupera los documentos más relevantes de la base de conocimiento.
#   • Parámetros:
#       o consulta (str): pregunta del usuario.
#       o top_k (int): número máximo de documentos a retornar.
#       o umbral (float): valor mínimo de similitud (coseno) para considerar un
#         documento relevante. Los documentos con similitud inferior a este
#         umbral se descartan.
#   • Proceso:
#       1. Calcular el embedding de la consulta y de todos los documentos
#          (preferiblemente una sola vez al cargar el script y almacenarlos para
#          evitar recalcular).
#       2. Calcular la similitud del coseno entre el embedding de la consulta y los
#          embeddings de los documentos.
#       3. Ordenar los documentos de mayor a menor similitud.
#       4. Recorrer en ese orden y seleccionar aquellos cuya similitud sea mayor o
#          igual al umbral, hasta un máximo de top_k documentos.
#   • Retorno: Lista con los textos de los documentos seleccionados. 
# Función generar_respuesta(consulta, documentos_recuperados)
# Genera una respuesta usando el modelo de lenguaje, inyectando los documentos
# recuperados como contexto.
# Parámetros:
#   o consulta (str): pregunta original del usuario.
#   o documentos_recuperados (list): lista de textos con los documentos
# relevantes.
# Proceso:
#   1. Se concatenan todos los documentos en un solo string (por ejemplo,
#   separados por espacios).
#   2. Se construye un prompt con el siguiente formato:
#   “””
#   Answer the question based only on the context provided
#   Context: <" ".join(documentos_recuperados)>
#   Question: <consulta>
#   Answer:
#   “””
#   3. Se genera la respuesta con el modelo
# Retorno: Cadena con la respuesta generada.
# Función preguntar(consulta, top_k=2, umbral=0.4)
#   • Descripción:
#       o Función de alto nivel que une la lógica de recuperar_documentos y
#         generar_respuestas
#   • Parámetros: los mismos que recuperar_documentos.
#   • Retorno: La respuesta generada (cadena).