Files
extractor_tematizador_pregu…/extraccion/agentes_entidades.py

401 lines
9.7 KiB
Python

from llm.context import LLMContext
from llm.config import LLMConfig
from extraccion.schemas_entidades import (
Acciones,
Expectativa,
Opinion,
Temas,
Estrategias,
Factores,
Entidades,
Competencias,
Herramientas,
Mecanismos,
Opiniones,
Expectativas,
)
import yaml
import os
# 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 = f"{os.path.abspath(os.path.join('..'))}/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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = llm_so.invoke(prompt)
lista_herramientas = herramientas.herramientas
for herramienta in lista_herramientas:
print("-" * 100)
print(herramienta.herramienta)
print("-" * 100)
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 = """
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.
"""
# extractor_pre_15(respuesta)