Cómo diseñar un canal de narración agente totalmente local utilizando flujos de trabajo de cinta adhesiva, modelos de rostros abrazados y orquestación modular de tareas creativas

En este tutorial, construimos un sistema de narración agente totalmente local y sin API utilizando Griptape y un modelo ligero de Hugging Face. Analizamos la creación de un agente con habilidades para el uso de herramientas, la generación de un mundo ficticio, el diseño de personajes y la orquestación de un flujo de trabajo de varias etapas que produce una historia corta coherente. Al dividir la implementación en fragmentos modulares, podemos comprender claramente cada componente a medida que se une en un proceso creativo de un extremo a otro. Consulta los CÓDIGOS COMPLETOS aquí.

!pip install -q “lija[drivers-prompt-huggingface-pipeline]” “transformers” “acelerar” “frase” importar ajuste de texto de griptape.structures importar flujo de trabajo, agente de griptape.tasks importar PromptTask de griptape.tools importar CalculatorTool de griptape.rules importar regla, conjunto de reglas de griptape.drivers.prompt.huggingface_pipeline importar HuggingFacePipelinePromptDriver local_driver = HuggingFacePipelinePromptDriver( model=”TinyLlama/TinyLlama-1.1B-Chat-v1.0″, max_tokens=256, ) def show(título, contenido): print(f”\n{‘=’*20} {título} {‘=’*20}”) print(textwrap.fill(str(contenido), ancho=100))

Configuramos nuestro entorno instalando Griptape e inicializando un controlador local de Hugging Face. Configuramos una función auxiliar para mostrar los resultados de forma limpia, permitiéndonos seguir cada paso del flujo de trabajo. A medida que construimos las bases, nos aseguramos de que todo se ejecute localmente sin depender de API externas. Consulta los CÓDIGOS COMPLETOS aquí.

math_agent = Agente (prompt_driver = controlador_local, herramientas =[CalculatorTool()]) math_response = math_agent.run( “Calcule (37*19)/7 y explique los pasos brevemente.” ) show(“Agent + CalculatorTool”, math_response.output.value)

Creamos un agente equipado con una herramienta de calculadora y lo probamos con una simple indicación matemática. Observamos cómo el agente delega el cálculo a la herramienta y luego formula una explicación en lenguaje natural. Al ejecutar esto, validamos que nuestra integración de herramientas y controladores locales funcione correctamente. Consulta los CÓDIGOS COMPLETOS aquí.

world_task = PromptTask( input=”Crea un mundo ficticio vívido usando estas señales: {{ args[0] }}.\nDescribe la geografía, la cultura y los conflictos en 3 a 5 párrafos.”, id=”world”, Prompt_driver=local_driver, ) def carácter_task(task_id, nombre): return PromptTask( input=( “Basado en el mundo siguiente, inventa un personaje detallado llamado {{ nombre }}.\n” “Descripción del mundo:\n{{ parent_outputs[‘world’] }}\n\n” “Describe sus antecedentes, deseos, defectos y un secreto.” ), id=task_id, parent_ids=[“world”]Prompt_driver=controlador_local, contexto={“nombre”: nombre}, ) scotty_task = tarea_carácter(“scotty”, “Scotty”) annie_task = tarea_carácter(“annie”, “Annie”)

Construimos la tarea de generación de mundos y construimos dinámicamente tareas de generación de personajes que dependen de la producción del mundo. Definimos una función reutilizable para crear tareas de personajes condicionadas a un contexto compartido. A medida que ensamblamos estos componentes, vemos cómo el flujo de trabajo comienza a tomar forma a través de dependencias jerárquicas. Consulta los CÓDIGOS COMPLETOS aquí.

style_ruleset = Conjunto de reglas( nombre=”StoryStyle”, reglas=[
Rule(“Write in a cinematic, emotionally engaging style.”),
Rule(“Avoid explicit gore or graphic violence.”),
Rule(“Keep the story between 400 and 700 words.”),
]) story_task = PromptTask( input=( “Escribe una historia corta completa usando los siguientes elementos.\n\n” “Mundo:\n{{ parent_outputs[‘world’] }}\n\n” “Personaje 1 (Scotty):\n{{ parent_outputs[‘scotty’] }}\n\n” “Personaje 2 (Annie):\n{{ parent_outputs[‘annie’] }}\n\n” “La historia debe tener un comienzo, un desarrollo y un final claros, con una decisión significativa del personaje cerca del clímax.” ), id=”story”, parent_ids=[“world”, “scotty”, “annie”]driver_driver=controlador_local, conjuntos de reglas=[style_ruleset]) story_workflow = Flujo de trabajo (tareas =[world_task, scotty_task, annie_task, story_task]) topic = “mundo oceánico bloqueado por mareas con ciudades flotantes impulsadas por tormentas” story_workflow.run(topic)

Introducimos reglas estilísticas y creamos la tarea narrativa final que fusiona la construcción del mundo y los personajes en una narrativa coherente. Luego reunimos todas las tareas en un flujo de trabajo y lo ejecutamos con un tema elegido. A través de esto, somos testigos de cómo Griptape encadena múltiples indicaciones en un canal creativo estructurado. Consulta los CÓDIGOS COMPLETOS aquí.

world_text = world_task.output.value scotty_text = scotty_task.output.value annie_text = annie_task.output.value story_text = story_task.output.value show(“Mundo generado”, world_text) show(“Personaje: Scotty”, scotty_text) show(“Personaje: Annie”, annie_text) show(“Historia final”, story_text) def resumir_historia(texto): párrafos = [p for p in text.split(“\n”) if p.strip()]
longitud = len(text.split()) puntuación_estructura = min(len(párrafos), 10) return { “word_count”: longitud, “párrafos”: len(párrafos), “estructura_score_0_to_10”: puntuación_estructura, } métricas = resumir_story(story_text) show(“Métricas de la historia”, métricas)

Recuperamos todos los resultados generados y mostramos el mundo, los personajes y la historia final. También calculamos métricas simples para evaluar la estructura y la longitud, lo que nos brinda un resumen analítico rápido. Al concluir, observamos que el flujo de trabajo completo produce resultados mensurables e interpretables.

En conclusión, demostramos con qué facilidad podemos orquestar pasos de razonamiento complejos, interacciones de herramientas y generación creativa utilizando modelos locales dentro del marco de Griptape. Experimentamos cómo las tareas modulares, los conjuntos de reglas y los flujos de trabajo se fusionan en un poderoso sistema agente capaz de producir resultados narrativos estructurados. Al ejecutar todo sin API externas, obtenemos control, reproducibilidad y flexibilidad totales, lo que abre la puerta a experimentos más avanzados en canalizaciones de agentes locales, sistemas de escritura automatizados y orquestación de tareas múltiples.

Consulta los CÓDIGOS COMPLETOS aquí. No dude en consultar nuestra página de GitHub para tutoriales, códigos y cuadernos. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 100.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.

Asif Razzaq es el director ejecutivo de Marktechpost Media Inc.. Como emprendedor e ingeniero visionario, Asif está comprometido a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, Marktechpost, que se destaca por su cobertura en profundidad del aprendizaje automático y las noticias sobre aprendizaje profundo que es técnicamente sólida y fácilmente comprensible para una amplia audiencia. La plataforma cuenta con más de 2 millones de visitas mensuales, lo que ilustra su popularidad entre el público.