from llm.context import LLMContext from llm.config import LLMConfig from extraccion.schemas_entidades import ( Acciones, Temas, Estrategias, Factores, Entidades, Competencias, Herramientas, Mecanismos, ) import yaml # Cargar la configración de prompts desde el archivo .yaml def load_prompts_config(file_path): with open(file_path, "r") as file: prompts_config = yaml.safe_load(file) return prompts_config path_prompts = "extraccion/prompts.yaml" prompts_config = load_prompts_config(path_prompts) context = LLMContext() def extractor_pre_1(respuesta: str) -> Acciones: prompt = prompts_config["prompts"]["pregunta_1"]["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(Acciones) acciones: list = llm_so.invoke(prompt) lista_acciones = acciones.acciones for accion in lista_acciones: print("-" * 100) print(accion.accion) print("-" * 100) return acciones def extractor_pre_2(respuesta: str) -> Acciones: prompt = prompts_config["prompts"]["pregunta_2"]["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(Acciones) acciones: list = llm_so.invoke(prompt) lista_acciones = acciones.acciones for accion in lista_acciones: print("-" * 100) print(accion.accion) print("-" * 100) return acciones # El caso de este agente debe analizar se bien posteriormente para afinar bien el schema de datos def extractor_pre_3(respuesta: str) -> Temas: prompt = prompts_config["prompts"]["pregunta_3"]["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(Temas) temas: list = llm_so.invoke(prompt) lista_temas = temas.temas for tema in lista_temas: print("-" * 100) print(tema.tema) print("-" * 100) return temas def extractor_pre_4(respuesta: str) -> Temas: prompt = prompts_config["prompts"]["pregunta_4"]["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(Temas) temas: list = llm_so.invoke(prompt) lista_temas = temas.temas for tema in lista_temas: print("-" * 100) print(tema.tema) print("-" * 100) return temas def extractor_pre_5(respuesta: str) -> Estrategias: prompt = prompts_config["prompts"]["pregunta_5"]["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(Estrategias) estrategias: list = llm_so.invoke(prompt) lista_estrategias = estrategias.estrategias for estrategia in lista_estrategias: print("-" * 100) print(estrategia.estrategia) print("-" * 100) return estrategias def extractor_pre_6(respuesta: str) -> Mecanismos: prompt = prompts_config["prompts"]["pregunta_6"]["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(Mecanismos) mecanismos: list = llm_so.invoke(prompt) lista_mecanismos = mecanismos.mecanismos for mecanismo in lista_mecanismos: print("-" * 100) print(mecanismo.mecanismo) print("-" * 100) return mecanismos def extractor_pre_7(respuesta: str) -> Estrategias: prompt = prompts_config["prompts"]["pregunta_7"]["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(Estrategias) estrategias: list = llm_so.invoke(prompt) lista_estrategias = estrategias.estrategias for estrategia in lista_estrategias: print("-" * 100) print(estrategia.estrategia) print("-" * 100) return estrategias def extractor_pre_8(respuesta: str) -> Factores: prompt = prompts_config["prompts"]["pregunta_8"]["prompt"].format( respuesta=respuesta ) config = LLMConfig(provider="anthropic", model_name="claude-sonnet-4-5") context.set_strategy(config) llm = context.get_llm() llm_so = llm.with_structured_output(Factores) factores: list = llm_so.invoke(prompt) lista_factores = factores.factores for factor in lista_factores: print("-" * 100) print(factor.factor) print("-" * 100) return factores def extractor_pre_9(respuesta: str) -> Entidades: prompt = prompts_config["prompts"]["pregunta_9"]["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(Entidades) entidades: list = llm_so.invoke(prompt) lista_entidades = entidades.entidades for entidad in lista_entidades: print("-" * 100) print(entidad.entidad) print("-" * 100) return entidades def extractor_pre_10(respuesta: str) -> Competencias: prompt = prompts_config["prompts"]["pregunta_10"]["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(Competencias) competencias: Competencias = llm_so.invoke(prompt) print("\n Competencias extraídas:") print(f"Básicas: {competencias.basicas}") print(f"Socioemocionales: {competencias.socioemocionales}") print(f"Ciudadanas: {competencias.ciudadanas}") print(f"Siglo XXI: {competencias.siglo_xxi}") return competencias def extractor_pre_11(respuesta: str) -> Herramientas: prompt = prompts_config["prompts"]["pregunta_11"]["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(Herramientas) herramientas: list = llm_so.invoke(prompt) lista_herramientas = herramientas.herramientas for herramienta in lista_herramientas: print("-" * 100) print(herramienta.herramienta) print("-" * 100) return herramientas respuesta = """ Cada semestre en nuestra programación están estipuladas dos capacitaciones según las necesidades que los profesores expresen. Cuando algunos profesores participan en fotos o seminarios deben de comprometerse a compartir lo aprendido sacando para ello un espacio en la reunión de profesores, también deben de enviar un correo con el certificado """ extractor_pre_6(respuesta)