401 lines
9.7 KiB
Python
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 = "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)
|