Athrun Data Intelligence


En este tutorial, construimos un sistema de narración agente totalmente almacén y sin API utilizando Cinta de agarre y un maniquí atolondrado Hugging Face. Analizamos la creación de un agente con habilidades para el uso de herramientas, la vivientes 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. Mira el CÓDIGOS COMPLETOS aquí.

!pip install -q "griptape(drivers-prompt-huggingface-pipeline)" "transformers" "accelerate" "sentencepiece"


import textwrap
from griptape.structures import Workflow, Agent
from griptape.tasks import PromptTask
from griptape.tools import CalculatorTool
from griptape.rules import Rule, Ruleset
from griptape.drivers.prompt.huggingface_pipeline import HuggingFacePipelinePromptDriver


local_driver = HuggingFacePipelinePromptDriver(
   model="TinyLlama/TinyLlama-1.1B-Chat-v1.0",
   max_tokens=256,
)


def show(title, content):
   print(f"n{'='*20} {title} {'='*20}")
   print(textwrap.fill(str(content), width=100))

Configuramos nuestro entorno instalando Griptape e inicializando un compensador almacén 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 reconocer de API externas. Mira el CÓDIGOS COMPLETOS aquí.

math_agent = Agent(
   prompt_driver=local_driver,
   tools=(CalculatorTool()),
)


math_response = math_agent.run(
   "Compute (37*19)/7 and explain the steps briefly."
)


show("Agent + CalculatorTool", math_response.output.value)

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

world_task = PromptTask(
   input="Create a vivid fictional world using these cues: {{ args(0) }}.nDescribe geography, culture, and conflicts in 3–5 paragraphs.",
   id="world",
   prompt_driver=local_driver,
)


def character_task(task_id, name):
   return PromptTask(
       input=(
           "Based on the world below, invent a detailed character named {{ name }}.n"
           "World description:n{{ parent_outputs('world') }}nn"
           "Describe their background, desires, flaws, and one secret."
       ),
       id=task_id,
       parent_ids=("world"),
       prompt_driver=local_driver,
       context={"name": name},
   )


scotty_task = character_task("scotty", "Scotty")
annie_task = character_task("annie", "Annie")

Construimos la tarea de vivientes de mundos y construimos dinámicamente tareas de vivientes 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. Mira el CÓDIGOS COMPLETOS aquí.

style_ruleset = Ruleset(
   name="StoryStyle",
   rules=(
       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=(
       "Write a complete short story using the following elements.nn"
       "World:n{{ parent_outputs('world') }}nn"
       "Character 1 (Scotty):n{{ parent_outputs('scotty') }}nn"
       "Character 2 (Annie):n{{ parent_outputs('annie') }}nn"
       "The story must have a clear beginning, middle, and end, with a meaningful character decision near the climax."
   ),
   id="story",
   parent_ids=("world", "scotty", "annie"),
   prompt_driver=local_driver,
   rulesets=(style_ruleset),
)


story_workflow = Workflow(tasks=(world_task, scotty_task, annie_task, story_task))
topic = "tidally locked ocean world with floating cities powered by storms"
story_workflow.run(topic)

Introducimos reglas estilísticas y creamos la tarea novelística final que fusiona la construcción del mundo y los personajes en una novelística coherente. Luego reunimos todas las tareas en un flujo de trabajo y lo ejecutamos con un tema predilecto. A través de esto, somos testigos de cómo Griptape encadena múltiples indicaciones en un canal creativo estructurado. Mira el 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("Generated World", world_text)
show("Character: Scotty", scotty_text)
show("Character: Annie", annie_text)
show("Final Story", story_text)


def summarize_story(text):
   paragraphs = (p for p in text.split("n") if p.strip())
   length = len(text.split())
   structure_score = min(len(paragraphs), 10)
   return {
       "word_count": length,
       "paragraphs": len(paragraphs),
       "structure_score_0_to_10": structure_score,
   }


metrics = summarize_story(story_text)
show("Story Metrics", metrics)

Recuperamos todos los resultados generados y mostramos el mundo, los personajes y la historia final. Todavía calculamos métricas simples para evaluar la estructura y la largo, lo que nos brinda un epítome 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 vivientes creativa utilizando modelos locales interiormente del situación 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.


Mira el CÓDIGOS COMPLETOS aquí. No dudes en consultar nuestra Página de GitHub para tutoriales, códigos y cuadernos. Adicionalmente, no dudes en seguirnos en Gorjeo y no olvides unirte a nuestro SubReddit de más de 100.000 ml y suscríbete a nuestro boletín. ¡Esperar! estas en telegrama? Ahora todavía puedes unirte a nosotros en Telegram.


Asif Razzaq es el director ejecutor de Marktechpost Media Inc.. Como patrón e ingeniero quimérico, Asif está comprometido a beneficiarse el potencial de la inteligencia industrial para el perfectamente social. Su esfuerzo más flamante es el emanación de una plataforma de medios de inteligencia industrial, Marktechpost, que se destaca por su cobertura en profundidad del enseñanza obligatorio y las informativo sobre enseñanza 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 sabido.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *