{"id":1218,"date":"2026-06-18T07:55:00","date_gmt":"2026-06-18T05:55:00","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=1218"},"modified":"2026-06-03T20:27:29","modified_gmt":"2026-06-03T18:27:29","slug":"construyendo-un-agente-de-ia-nativo-con-c-y-llama-cpp-v","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2026\/06\/18\/construyendo-un-agente-de-ia-nativo-con-c-y-llama-cpp-v\/","title":{"rendered":"Construyendo un Agente de IA Nativo con C y Llama.cpp (V)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Pues ya estamos en posici\u00f3n para definir nuestro sistema de agentes IA, lo primero es un breve recordatorio de lo que hace nuestro sistema IA, en el ejemplo Agente se realiza mucho por funciones, y luego explicaremos lo que deberemos a\u00f1adir.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>llama_backend_init();\n\/************ Cargamos modelo de Memoria para el agente *************\/\nconst char *pathModelo=\".\/modelos\/qwen2.5-coder-1.5b-instruct-q4_k_m.gguf\";\nmodelo_t *modelo = cargaModelo(pathModelo);\n \ncontext_t *contexto = iniciaContexto(modelo);\n \n\/\/ Para que no piense en conclusiones, ya que lo que deseamos son funciones a llamar usaremos uno preciso.\nsampler_t *miSampler = llama_sampler_chain_init(llama_sampler_chain_default_params());\nllama_sampler_chain_add(miSampler, llama_sampler_init_greedy()); \/\/ Mas exacta\n\n\/************* Cargams el vocabulario ********\/\nconst vocab_t *vocab = llama_model_get_vocab(modelo);\n\n\/************** Obtenemos el Rol de System de un fichero pues suele ser grande ****************\/\ninferencia(rolSystem, prompt,modelo, contexto, miSampler, vocab, respuesta,sizeof(respuesta));<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El modelo que utilizaremos es uno que este especializado en generar instrucciones como \u00abqwen2.5-coder-1.5b-instruct-q4_k_m.gguf\u00bb<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un sistema agentico nos indicara que funciones debemos llamar y no que nos de explicaciones, por eso crearemos un sampler lo m\u00e1s preciso posible.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rol-System<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una de las partes importantes de un sistema agentico es que nos responder\u00e1 indic\u00e1ndonos que funciones puede llamar y no que se comporte como un chat, para eso debemos decirle al sistema como debe comportarse. A continuaci\u00f3n podemos ver un Rol-System para un sistema que nos indicara que funciones llamar para obtener la hora o el clima del pa\u00eds que le digamos, le hemos pedido que las funciones nos las indique como \u00abFUNC(funcio:parametros)\u00bb para facilitarnos nuestro an\u00e1lisis de la respuesta, normalmente se usa en <strong>JSON<\/strong> pero como me gustan las expresiones regulares decid\u00ed este formato.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Eres un asistente que debe responder lo mejor que puedas llamando a funciones predefinidas, podr\u00e1s llamar a una o m\u00e1s funciones para ayudar a generar la consulta del usuario.\n\nFUNCIONES DISPONIBLES\nEstas son las funciones disponibles:\n\nFUNC(elTiempo:Madrid)\t\tNos da el tiempo meteorologico: temperatura, lluvias, viento, nubes, clima\nFUNC(laFecha)\t\t\tObtenemos la hora y fecha del sistema.\n\nREGLAS DE OPERACI\u00d3N (ESTRICTAS)\n\n- No converses ni expliques.\n- Tu salida debe ser \u00fanicamente llamadas a funciones y estas funciones deben ser unicamente las disponibles.\n- Si se pregunta por varia localidades se lanzara una funcion por cada una de ellas.\n\nPROTOCOLO de RESPUESTA (Ejemplos)\n\n\u00bfQu\u00e9 tiempo en Madrid? -> FUNC(elTiempo:Madrid)\n\n\u00bfQu\u00e9 tiempo hace en Madrid y Barcelona? -> FUNC(elTiempo:Madrid)\nFUNC(elTiempo:Barcelona)\n\n\u00bfQu\u00e9 hora? -> FUNC(laFecha)\n\n\u00bfTiempo + hora? -> FUNC(elTiempo:Alcobendas)\nFUNC(laFecha)\n\n\nSIEMPRE usa el siguiente formato:\n\nFUNC(funcion:parametro)\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura de un Rol-System Robusto<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un prompt de sistema profesional para un agente se divide en tres bloques cr\u00edticos:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Definici\u00f3n de Identidad y Misi\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Establece qui\u00e9n es y qu\u00e9 limitaciones tiene. Esto ayuda a que la IA no genere texto innecesario que llene el contexto.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u00abEres un asistente que debe responder lo mejor que puedas llamando a funciones predefinidas, podr\u00e1s llamar a una o m\u00e1s funciones para ayudar a generar la consulta del usuario.\u00bbEl Protocolo de Comunicaci\u00f3n (Formato de Salida)<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.- El Protocolo de Comunicaci\u00f3n (Formato de Salida)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es donde preparas el terreno para tu <strong>Regex<\/strong>. Debes ser extremadamente espec\u00edfico con la sintaxis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00abREGLA CR\u00cdTICA: Cuando necesites realizar una acci\u00f3n, DEBES usar estrictamente el formato: &#8216;FUNC(ACCION:PARAMETROS)&#8217; <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3.- Funciones disponibles<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Daremos la lista de las funciones y las capacidades de esta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con el Rol-System definido podemos lanzar las preguntas y recibir si todo esta correcto las funciones a ejecutar, as\u00ed en el pr\u00f3ximo POST analizaremos la respuesta para saber a que funciones llamar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pues ya estamos en posici\u00f3n para definir nuestro sistema de agentes IA, lo primero es un breve recordatorio de lo que hace nuestro sistema IA, en el ejemplo Agente se realiza mucho por funciones, y luego explicaremos lo que deberemos a\u00f1adir. El modelo que utilizaremos es uno que este especializado en generar instrucciones como \u00abqwen2.5-coder-1.5b-instruct-q4_k_m.gguf\u00bb [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1197,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[212],"tags":[223,214,215],"class_list":["post-1218","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-llama-cpp-ia","tag-agentes","tag-ia","tag-llama-cpp"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=1218"}],"version-history":[{"count":6,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1218\/revisions"}],"predecessor-version":[{"id":1224,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1218\/revisions\/1224"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/1197"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=1218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=1218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=1218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}