{"id":2069,"date":"2023-07-20T06:28:14","date_gmt":"2023-07-20T06:28:14","guid":{"rendered":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=2069"},"modified":"2023-07-20T06:37:41","modified_gmt":"2023-07-20T06:37:41","slug":"integrando-otros-llms-con-semantic-kernel","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/","title":{"rendered":"Integrando otros LLMs con Semantic Kernel"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2093\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel.jpg\" alt=\"\" width=\"796\" height=\"597\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel.jpg 796w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel-300x225.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel-768x576.jpg 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel-610x458.jpg 610w\" sizes=\"auto, (max-width: 796px) 100vw, 796px\" \/><\/p>\n<p>Como seguro os habr\u00e9is dado cuenta, \u00faltimamente estoy implementando much\u00edsimos proyectos \u00ab<em>muy chul\u00edsimos<\/em>\u00bb (\ud83d\ude05) con las librer\u00edas del <a href=\"https:\/\/learn.microsoft.com\/en-us\/semantic-kernel\/overview\/\">Semantic Kernel<\/a>, un marco de trabajo de c\u00f3digo abierto (<em>open source<\/em>) que principalmente se enfoca en facilitar la combinaci\u00f3n de mensajes e indicaciones \u2013 los famosos <em>prompts<\/em> \u2013 para Inteligencias Artificiales generativas basadas en las tecnolog\u00edas de OpenAI.<\/p>\n<p><!--more--><\/p>\n<p>Y ah\u00ed hay un punto importante y es que, en su estado actual, Semantic Kernel por ahora s\u00f3lo opera \u00fanicamente con OpenAI, ya sea la variante de Azure o la propia de OpenAI.<\/p>\n<p>Pero\u2026 \u00bfy si queremos usar un modelo que no sea de OpenAI con Semantic Kernel? \u00bfSi queremos usar recursos de otro proveedor de Inteligencia Artificial?<\/p>\n<p>\u00a1Qu\u00e9date conmigo que te explico c\u00f3mo podemos integrar modelos de otros LLMs (<em>Large Language Models<\/em>) como los disponibles en <a href=\"https:\/\/huggingface.co\/deepset\/roberta-base-squad2\">Hugging Face<\/a> en nuestros proyectos de IA usando Funciones Nativas y <em>plugins<\/em> de Semantic Kernel!<\/p>\n<p>El c\u00f3digo fuente de este art\u00edculo lo pod\u00e9is conseguir en GitHub, aqu\u00ed \ud83d\udc49\ud83c\udffb <a href=\"https:\/\/github.com\/rliberoff\/BLOG-001-Semantic-Kernel-Native-Functions\">https:\/\/github.com\/rliberoff\/BLOG-001-Semantic-Kernel-Native-Functions<\/a><\/p>\n<h2 style=\"text-align: justify;\">Creando una Funci\u00f3n Nativa para la integraci\u00f3n con otro LLM<\/h2>\n<p>En Semantic Kernel, las Funciones Nativas son b\u00e1sicamente c\u00f3digo en nuestro lenguaje de programaci\u00f3n de elecci\u00f3n, en mi caso C#.<\/p>\n<p>Para crear una Funci\u00f3n Nativa, primero debemos definir un <em>plugin<\/em>. Esto es algo s\u00faper sencillo, b\u00e1sicamente es crear un directorio dentro de nuestro proyecto en el cual dejaremos clases que representar\u00e1n a nuestros <em>plugins<\/em> con m\u00e9todos que representar\u00e1n a nuestras funciones.<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Plugins.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2080\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Plugins.png\" alt=\"\" width=\"998\" height=\"260\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Plugins.png 998w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Plugins-300x78.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Plugins-768x200.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Plugins-610x159.png 610w\" sizes=\"auto, (max-width: 998px) 100vw, 998px\" \/><\/a><\/p>\n<p>En nuestro caso, vamos a realizar una integraci\u00f3n con \u00ab<span style=\"font-family: monospace;\">roberta-base-squad2<\/span>\u00bb disponible en <a href=\"https:\/\/huggingface.co\/deepset\/roberta-base-squad2\">Hugging Face<\/a>. Este modelo nos permite integrarnos con un LLM llamado <a href=\"https:\/\/arxiv.org\/abs\/1907.11692\">RoBERTa<\/a> (nombre gracioso para <em>Robustly Optimized BERT Approach<\/em>) desarrollado por la empresa <a href=\"https:\/\/www.deepset.ai\/\">deepset<\/a> (los mismos de <a href=\"https:\/\/haystack.deepset.ai\/\">Haystack<\/a>).<\/p>\n<p>El modelo \u00ab<span style=\"font-family: monospace;\">roberta-base-squad2<\/span>\u00bb nos permitir\u00e1 realizar preguntas que ser\u00e1n contestadas a partir del contenido de un contexto que tambi\u00e9n debemos suministrar. El resultado retornado nos dar\u00e1 la respuesta junto con un valor num\u00e9rico que indicar\u00e1 el \u00edndice de confiabilidad de la calidad de dicha respuesta, es decir, un <em>score<\/em> cuyo valor cu\u00e1nto m\u00e1s alto sea indicar\u00e1 que la respuesta es de mejor calidad y, por el contrario, cuanto m\u00e1s bajo sea que la respuesta es menos confiable.<\/p>\n<p>Para esta integraci\u00f3n es fundamental que tengas una cuenta en Hugging Face, ya que necesitar\u00e1s un token para autenticarte al realizar las llamadas al API REST que nos da conectividad con el modelo de \u00ab<span style=\"font-family: monospace;\">roberta-base-squad2<\/span>\u00bb. Perfectamente te valdr\u00e1 una cuenta gratuita para esto \ud83d\ude0f<\/p>\n<p>Para gestionar el token de Hugging Face crearemos una clase de opciones llamada <span style=\"font-family: monospace;\">HuggingFaceOptions<\/span> con una propiedad Token que inicializaremos con un valor que obtendremos del fichero de configuraci\u00f3n (<span style=\"font-family: monospace;\">appsetttings.json<\/span>).<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceOptions.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2078\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceOptions.png\" alt=\"\" width=\"998\" height=\"218\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceOptions.png 998w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceOptions-300x66.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceOptions-768x168.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceOptions-610x133.png 610w\" sizes=\"auto, (max-width: 998px) 100vw, 998px\" \/><\/a><\/p>\n<p>Recordemos que las clases de opciones las configuramos con inyecci\u00f3n de dependencias en el archivo <span style=\"font-family: monospace;\">Program.cs<\/span>:<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Options.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2079\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Options.png\" alt=\"\" width=\"1654\" height=\"260\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Options.png 1654w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Options-300x47.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Options-1024x161.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Options-768x121.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Options-1536x241.png 1536w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Options-610x96.png 610w\" sizes=\"auto, (max-width: 1654px) 100vw, 1654px\" \/><\/a><\/p>\n<p>Con esta parte de la carpinter\u00eda b\u00e1sica ya montada, el siguiente paso ser\u00e1 crear el directorio <span style=\"font-family: monospace;\">Plugins<\/span> (no somos muy originales con los nombres \ud83d\ude05) y dentro de \u00e9ste crearemos una clase llamada <span style=\"font-family: monospace;\">HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin<\/span> (de nuevo los nombres no son mi fuerte \ud83d\ude05). Esta clase representa al <em>plugin<\/em> que nos dar\u00e1 conectividad con el modelo, y cada uno de sus m\u00e9todos p\u00fablicos ser\u00e1n las Funciones Nativas que podemos utilizar con Semantic Kernel.<\/p>\n<p>En nuestro caso s\u00f3lo tendremos un m\u00e9todo llamado <span style=\"font-family: monospace;\">AskQuestionWithContextAsync<\/span> para integrarnos al modelo \u00ab<span style=\"font-family: monospace;\">roberta-base-squad2<\/span>\u00bb. Este m\u00e9todo toma dos variables: el contexto y la pregunta, las cuales son usadas para armar la llamada al modelo \u00ab<span style=\"font-family: monospace;\">roberta-base-squad2<\/span>\u00bb mediante un API REST de Hugging Face (l\u00edneas 30 a 37).<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2077\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin.png\" alt=\"\" width=\"2500\" height=\"1910\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin.png 2500w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin-300x229.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin-1024x782.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin-768x587.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin-1536x1174.png 1536w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin-2048x1565.png 2048w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_HuggingFaceDeepsetRobertaQuestionsAnsweringPlugin-610x466.png 610w\" sizes=\"auto, (max-width: 2500px) 100vw, 2500px\" \/><\/a><\/p>\n<p>Un detalle importante con las funciones en Semantic Kernel (sean Nativas o Sem\u00e1nticas) es que todo se gestiona con <em>strings<\/em>. Esto quiere decir que lo que retorne nuestra Funci\u00f3n Nativa (el m\u00e9todo <span style=\"font-family: monospace;\">AskQuestionWithContextAsync<\/span>) s\u00f3lo puede ser un <span style=\"font-family: monospace;\">string<\/span>. La parte interesante, es que podemos devolver un JSON como <span style=\"font-family: monospace;\">string<\/span> que despu\u00e9s podemos <em>parsear<\/em> para crear un objeto m\u00e1s concreto y espec\u00edfico. Por esa raz\u00f3n es que, como ves en el c\u00f3digo, se retorna directamente el contenido de la respuesta recibida de la llamada al API REST.<\/p>\n<p><strong>Y como puedes apreciar, \u00a1no hay magia! <\/strong>La integraci\u00f3n con otros LLMs en Semantic Kernel la podemos hacer de formas tan pueriles o triviales como llamadas a un API REST, o integrarnos con un SDK que puedan ofrecernos a trav\u00e9s de paquetes tales como los NuGet.<\/p>\n<p>Ahora tenemos que configurar Semantic Kernel para que pueda hacer uso de nuestra Funci\u00f3n Nativa.<\/p>\n<h2 style=\"text-align: justify;\">Configurando Semantic Kernel con la Funci\u00f3n Nativa<\/h2>\n<p>Configurar el Semantic Kernel en nuestros proyectos es realmente sencillo. Todo se hace (habitualmente) en el <span style=\"font-family: monospace;\">Program.cs<\/span>.<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_SemanticKernelConfiguration.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2081\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_SemanticKernelConfiguration.png\" alt=\"\" width=\"2048\" height=\"706\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_SemanticKernelConfiguration.png 2048w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_SemanticKernelConfiguration-300x103.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_SemanticKernelConfiguration-1024x353.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_SemanticKernelConfiguration-768x265.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_SemanticKernelConfiguration-1536x530.png 1536w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_SemanticKernelConfiguration-610x210.png 610w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\" \/><\/a><\/p>\n<p>Nuestra Funci\u00f3n Sem\u00e1ntica la hemos codificado para que perfectamente pueda ser registrada en el contenedor de dependencias de .NET como un <em>singleton<\/em>, lo cual nos ayudar\u00e1 ligueramente con el desempe\u00f1o del c\u00f3digo.<\/p>\n<p>Al configurar una instancia de Semantic Kernel, es recomendable para escenarios web que se registre como <em>scoped<\/em>, ya que internamente el Semantic Kernel gestiona estados y contextos que en escenarios compartidos (usualmente web) podr\u00edan producir efectos secundarios y comportamientos inesperados no deseados si se registra como <em>singleton<\/em>. Tambi\u00e9n recuerda que es siempre una buena idea configurar un <em>logger<\/em> con el Semantic Kernel, pues as\u00ed podr\u00e1s saber qu\u00e9 ha podido salir mal en caso de errores; a m\u00ed, particularmente me gusta usar Azure Application Insights como servicio para mis trazas y registros de eventos, y podr\u00e1s ver c\u00f3mo lo he configurado en el c\u00f3digo del <span style=\"font-family: monospace;\">Program.cs<\/span> disponible en el repo de GitHub.<\/p>\n<p>Dentro de la configuraci\u00f3n, una vez que tenemos un <em>kernel<\/em> establecido, importamos la Funci\u00f3n Nativa (l\u00edneas 11 y 12) proporcionando una instancia de \u00e9sta y un nombre para la <em>skill<\/em> que representa.<\/p>\n<p>No es nuestro caso, pero puede ocurrir que tengas Funciones Nativas complejas, con inicializaciones complicadas o costosas en t\u00e9rminos de recursos. Si eso ocurre, mi recomendaci\u00f3n es que inviertas cierto tiempo y esfuerzo en implementar un patr\u00f3n <span style=\"font-family: monospace;\">Factory<\/span> para la <em>skill<\/em>, y que pases una instancia de dicho <span style=\"font-family: monospace;\">Factory<\/span> al Semantic Kernel.<\/p>\n<p>Lo que queda ahora es poder utilizar esta Funci\u00f3n Nativa y manipular el string que retorna para devolver algo m\u00e1s significativo.<\/p>\n<h2 style=\"text-align: justify;\">Llamando a nuestra Funci\u00f3n Nativa para usar el LLM<\/h2>\n<p>Para probar nuestra integraci\u00f3n, vamos a crear un <em>controller<\/em> con una acci\u00f3n para exponer desde un API REST un <em>endpoint<\/em> para consumir nuestro LLM.<\/p>\n<p>Y no s\u00f3lo eso, sino que tambi\u00e9n nos permita interpretar el resultado para saber a partir del <em>score<\/em> si vale la pena retornar la respuesta, o mejor contestar un \u201c<em>no s\u00e9<\/em>\u201d.<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Controller.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2076\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Controller.png\" alt=\"\" width=\"2560\" height=\"1984\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Controller.png 2560w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Controller-300x233.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Controller-1024x794.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Controller-768x595.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Controller-1536x1190.png 1536w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Controller-2048x1587.png 2048w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Controller-610x473.png 610w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/a><\/p>\n<p>Para esta demo, estoy estableciendo el valor m\u00ednimo del <em>score<\/em> de la respuesta en un 0.7 (un 70% de confiabilidad) para considerarla como v\u00e1lida. Lo idea es que este valor est\u00e9 parametrizado en una clase de opciones parecida a la que vimos como ejemplo antes con el caso de <span style=\"font-family: monospace;\">HuggingFaceOptions<\/span>. De momento, nos vale con tenerlo como una constante dentro de la acci\u00f3n.<\/p>\n<p>Tomaremos la pregunta y el contexto que nos llegar\u00e1n por request (clase <span style=\"font-family: monospace;\">AskRequest<\/span>) y sus valores los usaremos en una instancia de la clase <span style=\"font-family: monospace;\">ContextVariables<\/span> que pasaremos como par\u00e1metros al Semantic Kernel (representado por una instancia v\u00e1lida del tipo de interface <span style=\"font-family: monospace;\">IKernel<\/span> que recibimos como dependencia en el constructor del controlador).<\/p>\n<p>Para llamar a nuestra Funci\u00f3n Nativa registrada en el Semantic Kernel simplemente tenemos que suministrar el nombre de la <em>skill<\/em> y de la funci\u00f3n (l\u00edneas 25 a 30). El resultado de la ejecuci\u00f3n de la funci\u00f3n es una instancia del tipo <span style=\"font-family: monospace;\">SKContext<\/span>, la cual nos ofrece variada informaci\u00f3n sobre el resultado de dicha ejecuci\u00f3n.<\/p>\n<p>As\u00ed, con el resultado obtenido, primero verificamos que no haya ocurrido ning\u00fan error (excepci\u00f3n), y en caso de haberlo, retornar el mensaje del error correspondiente<br \/>\n(l\u00edneas 32 a 35).<\/p>\n<p>Si todo ha ido bien, tomamos la respuesta que nos ha llegado como tipo string y que sabemos de la implementaci\u00f3n que realmente es un JSON con la respuesta del modelo \u00ab<span style=\"font-family: monospace;\">roberta-base-squad2<\/span>\u00bb. Para obtener los valores de la respuesta, he creado la clase <span style=\"font-family: monospace;\">AskResponse<\/span> que mapea \u00ab<em>1 a 1<\/em>\u00bb con algunos de los valores del JSON retornado por \u00ab<span style=\"font-family: monospace;\">roberta-base-squad2<\/span>\u00bb; y de los cuales nos interesan dos en concreto: la respuesta y su <em>score<\/em>. Usando el <span style=\"font-family: monospace;\">JsonSerializer<\/span> podemos obtener la instancia de <span style=\"font-family: monospace;\">AskResponse<\/span> con los valores que nos interesan.<\/p>\n<p>Finalmente, verificamos si el <em>score<\/em> recibido es mayor al valor m\u00ednimo que hemos establecido. De ser as\u00ed, retornamos la respuesta, sino retornamos un <span style=\"font-family: monospace;\">HTTP 404 Not Found<\/span> con un mensaje indicando que no se consigui\u00f3 una respuesta satisfactoria porque el <em>score<\/em> era bajo.<\/p>\n<p>Para probar esto, os dejo una colecci\u00f3n de Postman con esta llamada y que est\u00e1 disponible en el repo en GitHub mencionado al principio del art\u00edculo. Abajo tienes dos im\u00e1genes de una respuesta correcta y otra de \u201c<em>no s\u00e9<\/em>\u201d \ud83d\udc47\ud83c\udffb<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2074\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman1.png\" alt=\"\" width=\"1265\" height=\"537\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman1.png 1265w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman1-300x127.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman1-1024x435.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman1-768x326.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman1-610x259.png 610w\" sizes=\"auto, (max-width: 1265px) 100vw, 1265px\" \/><\/a><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2075\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman2.png\" alt=\"\" width=\"1254\" height=\"489\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman2.png 1254w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman2-300x117.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman2-1024x399.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman2-768x299.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/Integrando-otros-LLMs-con-Semantic-Kernel_Postman2-610x238.png 610w\" sizes=\"auto, (max-width: 1254px) 100vw, 1254px\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">M\u00e1s informaci\u00f3n<\/h2>\n<p>Si tienes m\u00e1s curiosidad sobre Semantic Kernel, te dejo aqu\u00ed algunas publicaciones en <a href=\"https:\/\/www.youtube.com\/@CODERTECTURA\">YouTube<\/a> donde justamente trato sobre estos temas:<\/p>\n<ul>\n<li>\n<h5>Configuraci\u00f3n paso a paso del Semantic Kernel\ud83d\udc49\ud83c\udffb <a href=\"https:\/\/youtu.be\/a8gNdF0D23g\">https:\/\/youtu.be\/a8gNdF0D23g<\/a><\/h5>\n<\/li>\n<\/ul>\n<p><iframe loading=\"lazy\" title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/a8gNdF0D23g\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<h5><\/h5>\n<ul>\n<li>\n<h5>Las Funciones Sem\u00e1nticas en Semantic Kernel\ud83d\udc49\ud83c\udffb <a href=\"https:\/\/youtu.be\/jc6H8gmXAAA\">https:\/\/youtu.be\/jc6H8gmXAAA<\/a><\/h5>\n<\/li>\n<\/ul>\n<p><iframe loading=\"lazy\" title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/jc6H8gmXAAA\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\n<h5>Las Funciones Nativas en Semantic Kernel\ud83d\udc49\ud83c\udffb<a href=\"https:\/\/youtu.be\/mSJa0oaS_XE\">https:\/\/youtu.be\/mSJa0oaS_XE<\/a><\/h5>\n<\/li>\n<\/ul>\n<p><iframe loading=\"lazy\" title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/mSJa0oaS_XE\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>\u00a1Hasta pronto! \ud83d\ude42<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Como seguro os habr\u00e9is dado cuenta, \u00faltimamente estoy implementando much\u00edsimos proyectos \u00abmuy chul\u00edsimos\u00bb (\ud83d\ude05) con las librer\u00edas del Semantic Kernel, un marco de trabajo de c\u00f3digo abierto (open source) que principalmente se enfoca en facilitar la combinaci\u00f3n de mensajes e &hellip; <a href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":199,"featured_media":2093,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70,132],"tags":[135,134,133],"class_list":["post-2069","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-ia","tag-hugging-face","tag-llms","tag-semantic-kernel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Integrando otros LLMs con Semantic Kernel - Piensa en software, desarrolla en colores<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Integrando otros LLMs con Semantic Kernel\" \/>\n<meta property=\"og:description\" content=\"Como seguro os habr\u00e9is dado cuenta, \u00faltimamente estoy implementando much\u00edsimos proyectos \u00abmuy chul\u00edsimos\u00bb (\ud83d\ude05) con las librer\u00edas del Semantic Kernel, un marco de trabajo de c\u00f3digo abierto (open source) que principalmente se enfoca en facilitar la combinaci\u00f3n de mensajes e &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-20T06:28:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-20T06:37:41+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"796\" \/>\n\t<meta property=\"og:image:height\" content=\"597\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Rodrigo Liberoff\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rliberoff\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rodrigo Liberoff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/\"},\"author\":{\"name\":\"Rodrigo Liberoff\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/5d872a89111919d7f5072c32fef484e0\"},\"headline\":\"Integrando otros LLMs con Semantic Kernel\",\"datePublished\":\"2023-07-20T06:28:14+00:00\",\"dateModified\":\"2023-07-20T06:37:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/\"},\"wordCount\":1573,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2023\\\/07\\\/semantic-kernel.jpg\",\"keywords\":[\"Hugging Face\",\"LLMs\",\"Semantic Kernel\"],\"articleSection\":[\".NET\",\"IA\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/\",\"name\":\"Integrando otros LLMs con Semantic Kernel - Piensa en software, desarrolla en colores\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2023\\\/07\\\/semantic-kernel.jpg\",\"datePublished\":\"2023-07-20T06:28:14+00:00\",\"dateModified\":\"2023-07-20T06:37:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/5d872a89111919d7f5072c32fef484e0\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/integrando-otros-llms-con-semantic-kernel\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2023\\\/07\\\/semantic-kernel.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2023\\\/07\\\/semantic-kernel.jpg\",\"width\":796,\"height\":597},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/\",\"name\":\"Piensa en software, desarrolla en colores\",\"description\":\"Las ventajas que te ofrece Microsoft Azure y el mundo.NET\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/5d872a89111919d7f5072c32fef484e0\",\"name\":\"Rodrigo Liberoff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/eb6e449978f2a7277cccb31a42a6114cd3e5d05151c7654632b12691f96d2397?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/eb6e449978f2a7277cccb31a42a6114cd3e5d05151c7654632b12691f96d2397?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/eb6e449978f2a7277cccb31a42a6114cd3e5d05151c7654632b12691f96d2397?s=96&d=mm&r=g\",\"caption\":\"Rodrigo Liberoff\"},\"description\":\"Arquitecto Cloud y de Soluciones de Software en ENCAMINA, cuento con con m\u00e1s de 19 a\u00f1os de experiencia. Apasionado del dise\u00f1o, conceptualizaci\u00f3n e implementaci\u00f3n de software empleando el lenguaje de programaci\u00f3n C# y las \u00faltimas tecnolog\u00edas de Microsoft, especialmente Azure. Disfruto de crear arquitecturas de software e investigar sobre nuevas tecnolog\u00edas, y su posible implantaci\u00f3n dentro de diversas organizaciones y clientes. Tambi\u00e9n soy un Agile Coach, y me fascina hablar y ayudar en la instituci\u00f3n y uso de metodolog\u00edas \u00e1giles como Scrum, Kamban, Sumban y SAFe.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/rliberoff\\\/\",\"https:\\\/\\\/x.com\\\/rliberoff\"],\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/author\\\/rliberoff\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Integrando otros LLMs con Semantic Kernel - Piensa en software, desarrolla en colores","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/","og_locale":"es_ES","og_type":"article","og_title":"Integrando otros LLMs con Semantic Kernel","og_description":"Como seguro os habr\u00e9is dado cuenta, \u00faltimamente estoy implementando much\u00edsimos proyectos \u00abmuy chul\u00edsimos\u00bb (\ud83d\ude05) con las librer\u00edas del Semantic Kernel, un marco de trabajo de c\u00f3digo abierto (open source) que principalmente se enfoca en facilitar la combinaci\u00f3n de mensajes e &hellip; Continue reading &rarr;","og_url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2023-07-20T06:28:14+00:00","article_modified_time":"2023-07-20T06:37:41+00:00","og_image":[{"width":796,"height":597,"url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel.jpg","type":"image\/jpeg"}],"author":"Rodrigo Liberoff","twitter_card":"summary_large_image","twitter_creator":"@rliberoff","twitter_misc":{"Escrito por":"Rodrigo Liberoff","Tiempo de lectura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/"},"author":{"name":"Rodrigo Liberoff","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/5d872a89111919d7f5072c32fef484e0"},"headline":"Integrando otros LLMs con Semantic Kernel","datePublished":"2023-07-20T06:28:14+00:00","dateModified":"2023-07-20T06:37:41+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/"},"wordCount":1573,"commentCount":1,"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel.jpg","keywords":["Hugging Face","LLMs","Semantic Kernel"],"articleSection":[".NET","IA"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/","name":"Integrando otros LLMs con Semantic Kernel - Piensa en software, desarrolla en colores","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/#primaryimage"},"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel.jpg","datePublished":"2023-07-20T06:28:14+00:00","dateModified":"2023-07-20T06:37:41+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/5d872a89111919d7f5072c32fef484e0"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/integrando-otros-llms-con-semantic-kernel\/#primaryimage","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel.jpg","contentUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2023\/07\/semantic-kernel.jpg","width":796,"height":597},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/","name":"Piensa en software, desarrolla en colores","description":"Las ventajas que te ofrece Microsoft Azure y el mundo.NET","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/5d872a89111919d7f5072c32fef484e0","name":"Rodrigo Liberoff","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/eb6e449978f2a7277cccb31a42a6114cd3e5d05151c7654632b12691f96d2397?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/eb6e449978f2a7277cccb31a42a6114cd3e5d05151c7654632b12691f96d2397?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/eb6e449978f2a7277cccb31a42a6114cd3e5d05151c7654632b12691f96d2397?s=96&d=mm&r=g","caption":"Rodrigo Liberoff"},"description":"Arquitecto Cloud y de Soluciones de Software en ENCAMINA, cuento con con m\u00e1s de 19 a\u00f1os de experiencia. Apasionado del dise\u00f1o, conceptualizaci\u00f3n e implementaci\u00f3n de software empleando el lenguaje de programaci\u00f3n C# y las \u00faltimas tecnolog\u00edas de Microsoft, especialmente Azure. Disfruto de crear arquitecturas de software e investigar sobre nuevas tecnolog\u00edas, y su posible implantaci\u00f3n dentro de diversas organizaciones y clientes. Tambi\u00e9n soy un Agile Coach, y me fascina hablar y ayudar en la instituci\u00f3n y uso de metodolog\u00edas \u00e1giles como Scrum, Kamban, Sumban y SAFe.","sameAs":["https:\/\/www.linkedin.com\/in\/rliberoff\/","https:\/\/x.com\/rliberoff"],"url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/author\/rliberoff\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/2069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/comments?post=2069"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/2069\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media\/2093"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=2069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=2069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=2069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}