Primera fase: se completan las funciones para las 15 preguntas abiertas.

This commit is contained in:
Mongar28
2025-10-30 19:39:03 -05:00
parent 878ff1e9f3
commit a27b87e97b
4 changed files with 331 additions and 26 deletions

View File

View File

@@ -2,6 +2,8 @@ from llm.context import LLMContext
from llm.config import LLMConfig from llm.config import LLMConfig
from extraccion.schemas_entidades import ( from extraccion.schemas_entidades import (
Acciones, Acciones,
Expectativa,
Opinion,
Temas, Temas,
Estrategias, Estrategias,
Factores, Factores,
@@ -9,6 +11,8 @@ from extraccion.schemas_entidades import (
Competencias, Competencias,
Herramientas, Herramientas,
Mecanismos, Mecanismos,
Opiniones,
Expectativas,
) )
import yaml import yaml
@@ -38,7 +42,7 @@ def extractor_pre_1(respuesta: str) -> Acciones:
llm_so = llm.with_structured_output(Acciones) llm_so = llm.with_structured_output(Acciones)
acciones: list = llm_so.invoke(prompt) acciones = llm_so.invoke(prompt)
lista_acciones = acciones.acciones lista_acciones = acciones.acciones
@@ -62,7 +66,7 @@ def extractor_pre_2(respuesta: str) -> Acciones:
llm_so = llm.with_structured_output(Acciones) llm_so = llm.with_structured_output(Acciones)
acciones: list = llm_so.invoke(prompt) acciones = llm_so.invoke(prompt)
lista_acciones = acciones.acciones lista_acciones = acciones.acciones
@@ -86,7 +90,7 @@ def extractor_pre_3(respuesta: str) -> Temas:
llm_so = llm.with_structured_output(Temas) llm_so = llm.with_structured_output(Temas)
temas: list = llm_so.invoke(prompt) temas = llm_so.invoke(prompt)
lista_temas = temas.temas lista_temas = temas.temas
@@ -110,7 +114,7 @@ def extractor_pre_4(respuesta: str) -> Temas:
llm_so = llm.with_structured_output(Temas) llm_so = llm.with_structured_output(Temas)
temas: list = llm_so.invoke(prompt) temas = llm_so.invoke(prompt)
lista_temas = temas.temas lista_temas = temas.temas
@@ -134,7 +138,7 @@ def extractor_pre_5(respuesta: str) -> Estrategias:
llm_so = llm.with_structured_output(Estrategias) llm_so = llm.with_structured_output(Estrategias)
estrategias: list = llm_so.invoke(prompt) estrategias = llm_so.invoke(prompt)
lista_estrategias = estrategias.estrategias lista_estrategias = estrategias.estrategias
@@ -158,7 +162,7 @@ def extractor_pre_6(respuesta: str) -> Mecanismos:
llm_so = llm.with_structured_output(Mecanismos) llm_so = llm.with_structured_output(Mecanismos)
mecanismos: list = llm_so.invoke(prompt) mecanismos = llm_so.invoke(prompt)
lista_mecanismos = mecanismos.mecanismos lista_mecanismos = mecanismos.mecanismos
@@ -182,7 +186,7 @@ def extractor_pre_7(respuesta: str) -> Estrategias:
llm_so = llm.with_structured_output(Estrategias) llm_so = llm.with_structured_output(Estrategias)
estrategias: list = llm_so.invoke(prompt) estrategias = llm_so.invoke(prompt)
lista_estrategias = estrategias.estrategias lista_estrategias = estrategias.estrategias
@@ -206,7 +210,7 @@ def extractor_pre_8(respuesta: str) -> Factores:
llm_so = llm.with_structured_output(Factores) llm_so = llm.with_structured_output(Factores)
factores: list = llm_so.invoke(prompt) factores = llm_so.invoke(prompt)
lista_factores = factores.factores lista_factores = factores.factores
@@ -230,7 +234,7 @@ def extractor_pre_9(respuesta: str) -> Entidades:
llm_so = llm.with_structured_output(Entidades) llm_so = llm.with_structured_output(Entidades)
entidades: list = llm_so.invoke(prompt) entidades = llm_so.invoke(prompt)
lista_entidades = entidades.entidades lista_entidades = entidades.entidades
@@ -276,7 +280,7 @@ def extractor_pre_11(respuesta: str) -> Herramientas:
llm_so = llm.with_structured_output(Herramientas) llm_so = llm.with_structured_output(Herramientas)
herramientas: list = llm_so.invoke(prompt) herramientas = llm_so.invoke(prompt)
lista_herramientas = herramientas.herramientas lista_herramientas = herramientas.herramientas
@@ -288,11 +292,108 @@ def extractor_pre_11(respuesta: str) -> Herramientas:
return herramientas return herramientas
def extractor_pre_12(respuesta: str) -> Opiniones:
prompt = prompts_config["prompts"]["pregunta_12"]["prompt"].format(
respuesta=respuesta
)
config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5")
context.set_strategy(config)
llm = context.get_llm()
llm_so = llm.with_structured_output(Opiniones)
opiniones = llm_so.invoke(prompt)
lista_opiniones = opiniones.opiniones
for opinion in lista_opiniones:
print("-" * 100)
print(opinion.opinion)
print("-" * 100)
return opiniones
def extractor_pre_13(respuesta: str) -> Expectativas:
prompt = prompts_config["prompts"]["pregunta_13"]["prompt"].format(
respuesta=respuesta
)
config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5")
context.set_strategy(config)
llm = context.get_llm()
llm_so = llm.with_structured_output(Expectativas)
expectativas = llm_so.invoke(prompt)
lista_expectativas = expectativas.expectativas
for expectativa in lista_expectativas:
print("-" * 100)
print(expectativa.expectativa)
print("-" * 100)
return expectativas
def extractor_pre_14(respuesta: str) -> Opiniones:
prompt = prompts_config["prompts"]["pregunta_14"]["prompt"].format(
respuesta=respuesta
)
config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5")
context.set_strategy(config)
llm = context.get_llm()
llm_so = llm.with_structured_output(Opiniones)
opiniones = llm_so.invoke(prompt)
lista_opiniones = opiniones.opiniones
for opinion in lista_opiniones:
print("-" * 100)
print(opinion.opinion)
print("-" * 100)
return opiniones
def extractor_pre_15(respuesta: str) -> Opiniones:
prompt = prompts_config["prompts"]["pregunta_14"]["prompt"].format(
respuesta=respuesta
)
config = LLMConfig(provider="anthropic", model_name="claude-haiku-4-5")
context.set_strategy(config)
llm = context.get_llm()
llm_so = llm.with_structured_output(Opiniones)
opiniones = llm_so.invoke(prompt)
lista_opiniones = opiniones.opiniones
for opinion in lista_opiniones:
print("-" * 100)
print(opinion.opinion)
print("-" * 100)
return opiniones
respuesta = """ respuesta = """
Cada semestre en nuestra programación están estipuladas dos capacitaciones según A la fecha no conocemos si se ha realizado o no, ya que no
las necesidades que los profesores expresen. Cuando algunos profesores participan hemos tenido conocimiento si el rector las conoce o está gestionando.
en fotos o seminarios deben de comprometerse a compartir lo aprendido sacando para Desde el núcleo de ciencias naturales en el año 2022 se realizó una
ello un espacio en la reunión de profesores, también deben de enviar un correo con alianza con cornare y la UMATA, dicha invitación a participar se hizo
el certificado por la página de la secretaria departamental, donde a partir de un
infograma explicaba paso a paso como participar y además contaba con linea telefónica.
""" """
extractor_pre_6(respuesta) # extractor_pre_15(respuesta)

View File

@@ -661,34 +661,98 @@ prompts:
Tu tarea es: Tu tarea es:
1. Leer cuidadosamente la explicación e identificar las **razones, justificaciones o ejemplos** clave que la persona da. 1. Leer cuidadosamente la explicación e identificar las **razones, justificaciones, procesos o ejemplos** clave que la persona da.
2. Extraer cada razón, fortaleza, debilidad o ejemplo clave como un elemento separado. 2. Extraer cada razón, proceso o ejemplo clave como un elemento separado.
3. Reescribir cada ítem para que sea claro, conciso y capture la esencia del punto de la explicación. 3. Reescribir cada ítem para que sea claro, conciso y capture la esencia del punto de la explicación.
4. Asegurarte de que cada ítem responda directamente a la instrucción ("Explique..."). 4. Asegurarte de que cada ítem responda directamente a la instrucción ("Explique...").
Por ejemplo, si la instrucción fuera: Por ejemplo, si la instrucción fuera:
"Explique brevemente su respuesta anterior [sobre la pertinencia del currículo], señale ejemplos." "Explique brevemente su respuesta anterior [sobre la pertinencia del currículo], señale ejemplos."
y la respuesta (explicación) fuera: y la respuesta (explicación) fuera:
"Responde bien a las aspiraciones de los estudiantes porque incluimos una media técnica en software que es lo que ellos piden. Pero falla en responder al contexto regional, ya que nuestra región es agrícola y no tenemos proyectos en ese frente.", "Nuestras actividades están planeadas desde principio de año de acuerdo a las experiencias vividas en el año anterior, siempre basadas en el proyectos educativos que tienen como eje central las necesidades del entorno, para que los estudiante de educación media desarrollen su pensamiento crítico y análitico.
Son ellos quienes van dando las ideas de qué contenidos deben de irse proponiendo en cada proyecto. Otra forma de responder a sus necesidades es la participación que tienen en el proceso de evaluación, ya que desde el inicio de los proyectos se socializa la rubrica de evaluación para que ellos determinen que criterios evaluar y sean ellos quienes contribuyan a una adecuada evaluación formativa.
Todo lo anterior promueve la reflexión conjunta entre profesorado, estudiantes y padres de familia, estos últimos participan activamente en los procesos de fuentes humanas de información dependiendo de los temas trabajados.",
deberías extraer y estructurar la información así: deberías extraer y estructurar la información así:
1. El currículo responde a las aspiraciones de los estudiantes al incluir una media técnica en software. 1. La planeación de actividades se basa en experiencias anteriores y en proyectos educativos centrados en las necesidades del entorno.
2. El currículo falla en responder al contexto regional (agrícola) al no tener proyectos en ese frente. 2. Los proyectos buscan desarrollar el pensamiento crítico y analítico de los estudiantes.
3. Los estudiantes participan en la propuesta de contenidos para cada proyecto.
4. Los estudiantes participan en el proceso de evaluación, ayudando a determinar los criterios mediante rúbricas socializadas.
5. Se promueve la reflexión conjunta entre profesorado, estudiantes y padres de familia.
6. Los padres de familia participan activamente como fuentes humanas de información en los proyectos.
Pautas para estructurar los ítems: Pautas para estructurar los ítems:
* Cada ítem debe ser una afirmación clara que resuma una razón, un ejemplo, una fortaleza o una debilidad mencionada en la explicación. * Cada ítem debe ser una afirmación clara que resuma una razón, un ejemplo, una fortaleza o un proceso mencionado en la explicación.
* Céntrate en el "por qué" (la explicación y los ejemplos). * Céntrate en el "por qué" (la explicación, los procesos y los ejemplos).
* Separa las ideas distintas (p.ej., una fortaleza y una debilidad) en ítems diferentes. * Separa las ideas distintas (p.ej., la planeación, la participación estudiantil, la evaluación) en ítems diferentes.
Escribe tu lista estructurada de acciones dentro de las etiquetas <structured_actions>, numerando cada acción en una línea separada. Escribe tu lista estructurada de acciones dentro de las etiquetas <structured_actions>, numerando cada acción en una línea separada.
# ESTRUCTURA DE SALIDA # ESTRUCTURA DE SALIDA
{{ {{
"percepcioones": [ "opiniones": [
{{ {{
"accion": "string", // texto del punto clave, razón o ejemplo extraído de la explicación. "opinion": "string", // texto del punto clave, razón o ejemplo extraído de la explicación.
}}
]
}}
# RESTRICCIONES
- Entregar únicamente el JSON con las opiniones
- No incluir texto explicativo adicional
pregunta_13:
prompt: |
Ayudarás a estructurar y extraer las expectativas (metas o resultados deseados) de respuestas abiertas de encuestas.
Se te proporcionará una pregunta y una respuesta correspondiente, y tu tarea será identificar
las expectativas específicas mencionadas en la respuesta.
Aquí está el enunciado (pregunta):
<pregunta>
¿Qué expectativas tiene su institución sobre el fortalecimiento de la educación media?
</pregunta>
Aquí está la respuesta a analizar:
<respuesta>
{respuesta}
</respuesta>
Tu tarea es:
1. Leer cuidadosamente la respuesta e identificar todas las **expectativas, metas o resultados deseados** que la institución tiene sobre el fortalecimiento.
2. Extraer cada expectativa como un elemento separado.
3. Reescribir cada expectativa para que sea clara, completa y estructurada como una meta.
4. Asegurarte de que cada ítem responda directamente a la pregunta.
Por ejemplo, si la pregunta fuera:
"¿Qué expectativas tiene su institución sobre el fortalecimiento de la educación media?"
y la respuesta fuera:
"Desde que nos propusieron participar en esta estrategia nuestras expectativas subieron a altas ya que vemos que es factible desarrollar varias ideas que por asuntos de logística interna no habíamos podido desarrollar.
Nuestro mayor interés y respondiendo nuestra misión y visión institucional es trabajar en actividades pedagógicas que permitan que nuestros estudiantes tengan un tránsito exitoso hacia la educación superior y un apoyo para aquellos que desean dedicarse a aspectos laborales. Teniendo en cuenta las situaciones violentas que se han vivido en el territorio y donde muchos de nuestros estudiantes están vinculados de manera directa (víctimas), y que además han manifestado su deseo de migrar a otras zonas, es importante que como institución recibamos información y formación de oportunidades que existen para los jóvenes a nivel regional",
deberías extraer y estructurar la información así:
1. Desarrollar ideas pedagógicas que no se habían podido implementar por asuntos de logística interna.
2. Trabajar en actividades pedagógicas que permitan el tránsito exitoso de los estudiantes a la educación superior.
3. Brindar apoyo a los estudiantes que desean dedicarse a aspectos laborales.
4. Recibir información y formación sobre oportunidades regionales para jóvenes (en respuesta al contexto de violencia y migración).
Pautas para estructurar las expectativas:
* Cada expectativa debe ser una afirmación clara que describa una meta o resultado deseado.
* Escribe cada expectativa comenzando con un verbo en infinitivo (p.g., "Desarrollar", "Trabajar", "Brindar", "Recibir").
* Céntrate en la meta. Si la respuesta menciona un problema o contexto (ej. "situaciones violentas", "asuntos de logística"), extrae la expectativa de solución (ej. "Recibir información...", "Desarrollar ideas...").
* Ignora el preámbulo o comentarios sobre la expectativa en sí (p.ej., "nuestras expectativas subieron a altas").
Escribe tu lista estructurada de acciones dentro de las etiquetas <structured_actions>, numerando cada acción en una línea separada.
# ESTRUCTURA DE SALIDA
{{
"expectativas": [
{{
"expectativa": "string", // texto de la expectativa extraída (en infinitivo).
}} }}
] ]
}} }}
@@ -696,3 +760,115 @@ prompts:
# RESTRICCIONES # RESTRICCIONES
- Entregar únicamente el JSON con las acciones - Entregar únicamente el JSON con las acciones
- No incluir texto explicativo adicional - No incluir texto explicativo adicional
pregunta_14:
prompt: |
Ayudarás a estructurar y extraer los puntos clave, razones o ejemplos de una respuesta abierta de explicación.
Se te proporcionará una instrucción (la pregunta a la que responde el texto) y una respuesta
correspondiente (la explicación), y tu tarea será identificar los puntos clave de esa explicación.
Aquí está la instrucción (pregunta) a la que responde el texto:
<pregunta>
Explique brevemente su respuesta anterior [sobre la coherencia de la formación y apoyo
de la Secretaría de Educación], indicando ejemplos o situaciones específicas.
</pregunta>
Aquí está la respuesta (la explicación) a analizar:
<respuesta>
{respuesta}
</respuesta>
Tu tarea es:
1. Leer cuidadosamente la explicación e identificar las **razones, justificaciones, ejemplos o situaciones** clave que la persona da.
2. Extraer cada razón, fortaleza, debilidad o ejemplo clave como un elemento separado.
3. Reescribir cada ítem para que sea claro, conciso y capture la esencia del punto de la explicación.
4. Asegurarte de que cada ítem responda directamente a la instrucción ("Explique...").
Por ejemplo, si la instrucción fuera:
"Explique brevemente su respuesta anterior [sobre la coherencia de la formación y apoyo de la Secretaría de Educación], indicando ejemplos o situaciones específicas."
y la respuesta (explicación) fuera:
"Si bien algunos maestros han logrado vincularse a algunos de los procesos formativos que ha ofrecido secretaría, estos siguen siendo focalizados en los docentes que están en el casco urbano, quedando relegados los maestros de zonas rurales ya que es complejo dejar a los estudiantes sin clase y conseguir reemplazo los días de capacitación es prácticamente imposible. Otro aspecto que se ha convertido en debilidad está relacionado con las solicitudes que ha realizado el rector con respecto a formación y capacitación en emprendimiento, donde se nos comparte material pero este no es pertinente a las necesidades de nuestro contexto. Se ha insistido que nos colaboren con un profesional que asista a la IE para que nos forme pero a la fecha no ha sido posible.",
deberías extraer y estructurar la información así:
1. Los procesos formativos de la Secretaría se focalizan en docentes del casco urbano, relegando a los maestros rurales.
2. La participación de docentes rurales se dificulta por la complejidad de conseguir reemplazos para los días de capacitación.
3. El material de formación en emprendimiento proporcionado por la Secretaría no es pertinente a las necesidades del contexto de la institución.
4. Las solicitudes de un formador profesional presencial (in-situ) no han sido atendidas por la Secretaría.
Pautas para estructurar los ítems:
* Cada ítem debe ser una afirmación clara que resuma una razón, un ejemplo, una fortaleza o una debilidad mencionada en la explicación.
* Céntrate en el "por qué" (la explicación, las situaciones y los ejemplos).
* Separa las ideas distintas (p.ej., la focalización urbana, la pertinencia del material) en ítems diferentes.
Escribe tu lista estructurada de acciones dentro de las etiquetas <structured_actions>, numerando cada acción en una línea separada.
# ESTRUCTURA DE SALIDA
{{
"opiniones": [
{{
"opinion": "string", // texto del punto clave, razón o ejemplo extraído de la explicación.
}}
]
}}
# RESTRICCIONES
- Entregar únicamente el JSON con las opiniones
- No incluir texto explicativo adicional
pregunta_15:
prompt: |
Ayudarás a estructurar y extraer los puntos clave, razones o ejemplos de una respuesta abierta de explicación.
Se te proporcionará una instrucción (la pregunta a la que responde el texto) y una respuesta
correspondiente (la explicación), y tu tarea será identificar los puntos clave de esa explicación.
Aquí está la instrucción (pregunta) a la que responde el texto:
<pregunta>
Explique brevemente cómo se ha dado éste acompañamiento [orientación en alianzas
estratégicas] o qué aspectos deberían fortalecerse.
</pregunta>
Aquí está la respuesta (la explicación) a analizar:
<respuesta>
{respuesta}
</respuesta>
Tu tarea es:
1. Leer cuidadosamente la explicación e identificar las **razones, justificaciones, ejemplos o situaciones** clave que la persona da (ya sea sobre cómo se dio el acompañamiento o qué falta por fortalecer).
2. Extraer cada razón, fortaleza, debilidad o ejemplo clave como un elemento separado.
3. Reescribir cada ítem para que sea claro, conciso y capture la esencia del punto de la explicación.
4. Asegurarte de que cada ítem responda directamente a la instrucción ("Explique...").
Por ejemplo, si la instrucción fuera:
"Explique brevemente cómo se ha dado éste acompañamiento [orientación en alianzas estratégicas] o qué aspectos deberían fortalecerse."
y la respuesta (explicación) fuera:
"A la fecha no conocemos si se ha realizado o no, ya que no hemos tenido conocimiento si el rector las conoce o está gestionando. Desde el núcleo de ciencias naturales en el año 2022 se realizó una alianza con cornare y la UMATA, dicha invitación a participar se hizo por la página de la secretaria departamental, donde a partir de un infograma explicaba paso a paso como participar y además contaba con linea telefónica.",
deberías extraer y estructurar la información así:
1. (Aspecto a fortalecer) Desconocimiento a la fecha sobre si se ha realizado la orientación o si el rector la gestiona.
2. (Ejemplo de acompañamiento) La Secretaría Departamental publicó una invitación en su página web (con infograma y línea telefónica) para una alianza (con Cornare y UMATA en 2022).
Pautas para estructurar los ítems:
* Cada ítem debe ser una afirmación clara que resuma una razón, un ejemplo, una fortaleza o una debilidad (aspecto a fortalecer) mencionada en la explicación.
* Céntrate en el "por qué" o el "cómo" (la explicación, las situaciones y los ejemplos).
* Separa las ideas distintas (p.ej., el desconocimiento general y el ejemplo específico) en ítems diferentes.
Escribe tu lista estructurada de acciones dentro de las etiquetas <structured_actions>, numerando cada acción en una línea separada.
# ESTRUCTURA DE SALIDA
{{
"opiniones": [
{{
"opinion": "string", // texto del punto clave, razón o ejemplo extraído de la explicación.
}}
]
}}
# RESTRICCIONES
- Entregar únicamente el JSON con las opiniones
- No incluir texto explicativo adicional

View File

@@ -99,3 +99,31 @@ class Mecanismos(BaseModel):
..., ...,
description="Lista de mecanismos extraidas de la respuesta.", description="Lista de mecanismos extraidas de la respuesta.",
) )
class Opinion(BaseModel):
opinion: str = Field(
...,
description="Texto de la opinión extraida de la respuesta.",
)
class Opiniones(BaseModel):
opiniones: list[Opinion] = Field(
...,
description="Lista de opiniones extraidas de la respuesta.",
)
class Expectativa(BaseModel):
expectativa: str = Field(
...,
description="Texto de la expectativa extraida de la respuesta.",
)
class Expectativas(BaseModel):
expectativas: list[Expectativa] = Field(
...,
description="Lista de expectativas extraidas de la respuesta.",
)