es-ES/about_Powershai_CHATS.help.txt
TOPIC
about_powershai_chats SHORT DESCRIPTION PowershAi define el concepto de Chats, que ayudan a crear historial y contexto de las conversaciones! LONG DESCRIPTION PowershAi crea el concepto de Chats, que son muy similares al concepto de Chats en la mayoría de los servicios de LLM. Los chats permiten conversar con servicios de LLM de una manera estándar, independientemente del proveedor actual. Proporcionan una forma estándar para estas funcionalidades: - Historial de chats - Contexto - Pipeline (usar el resultado de otros comandos) - Llamadas a herramientas (ejecutar comandos a petición del LLM) No todos los proveedores implementan el soporte para Chats. Para saber si un proveedor posee el soporte para el chat, usa el cmdlet Get-AiProviders, y consulta la propiedad "Chat". Si es $true, entonces el chat es soportado. Y, una vez que el chat es soportado, no todas las funciones pueden ser soportadas, debido a las limitaciones del proveedor. Iniciar un nuevo chat La forma más sencilla de iniciar un nuevo chat es usando el comando Send-PowershaiChat. Obviamente, debes usarlo después de configurar el proveedor (usando `Set-AiProvider`) y las configuraciones iniciales, como la autenticación, si es necesario. Send-PowershaiChat "Hola, estoy hablando contigo desde Powershai" Por simplicidad, el comando `Send-PowershaiChat` tiene un alias llamado `ia` (abreviatura de inteligencia artificial). Con él, se reduce bastante y se concentra más en el prompt: ia "Hola, estoy hablando contigo desde Powershai" Todo mensaje se envía en un chat. Si no se crea un chat explícitamente, el chat especial llamado `default` se usa. Puedes crear un nuevo chat usando `New-PowershaiChat`. Cada chat tiene su propio historial de conversaciones y configuraciones. Puede contener sus propias funciones, etc. Crear chats adicionales puede ser útil en caso de que necesites mantener más de un tema sin que se mezclen! Comandos de Chat Los comandos que manipulan los chats de alguna forma están en el formato ` -Powershai Chat*`. Generalmente, estos comandos aceptan un parámetro -ChatId, que permite especificar el nombre o el objeto del chat creado con `New-PowershaiChat`. Si no se especifica, usan el chat activo. Chat Activo El Chat activo es el chat default usado por los comandos PowershaiChat. Cuando solo existe 1 chat creado, se considera como chat activo. Si tienes más de 1 chat activo, puedes usar el comando `Set-PowershaiActiveChat` para definir cuál es. Puedes pasar el nombre o el objeto retornado por `New-PowershaiChat`. Parámetros del chat Todo chat posee algunos parámetros que controlan diversos aspectos. Por ejemplo, el máximo de tokens a ser retornado por el LLM. Nuevos parámetros pueden ser añadidos a cada versión de PowershAI. La forma más fácil de obtener los parámetros y lo que hacen es usando el comando `Get-PowershaiChatParameter`; Este comando va a traer la lista de parámetros que pueden ser configurados, junto con el valor actual y una descripción de cómo usarlo. Puedes alterar los parámetros usando el comando `Set-PowershaiChatParameter`. Algunos parámetros listados son los parámetros directos de la API del proveedor. Vendrán con una descripción que indica eso. Contexto e Historial Todo Chat posee un contexto e historial. El historial es todo el historial de mensajes enviados y recibidos en la conversación. El tamaño del contexto es cuánto del historial se va a enviar al LLM, para que recuerde las respuestas. Nota que este tamaño del contexto es un concepto de PowershAI, y no es el mismo "tamaño del contexto" que se define en los LLMs. El tamaño del contexto afecta solo a Powershai, y, dependiendo del valor, puede superar el tamaño del contexto del proveedor, lo que puede generar errores. Es importante mantener el tamaño del contexto equilibrado entre mantener el LLM actualizado con lo que ya se ha dicho y no exceder el máximo de tokens del LLM. Puedes controlar el tamaño del contexto a través del parámetro del chat, es decir, usando `Set-PowershaiChatParameter`. Nota que el historial y el contexto se almacenan en la memoria de la sesión, es decir, si cierras tu sesión de Powershell, se perderán. En el futuro, podemos tener mecanismos que permitan al usuario guardar automáticamente y recuperar entre sesiones. También, es importante recordar que, una vez que el historial se guarda en la memoria de Powershell, las conversaciones muy largas pueden causar un desbordamiento o un alto consumo de memoria de powershell. Puedes reiniciar los chats en cualquier momento usando el comando `Reset-PowershaiCurrentChat`, que borrará todo el historial del chat activo. Usa con precaución, ya que esto causará que todo el historial se pierda y el LLM no recordará las peculiaridades informadas a lo largo de la conversación. Pipeline Uno de los recursos más poderosos de los Chats de Powershai es la integración con el pipeline de Powershell. Básicamente, puedes pasar el resultado de cualquier comando de powershell y se usará como contexto. PowershAI hace esto convirtiendo los objetos a texto y enviándolos en el prompt. Entonces, el mensaje del chat se añade a continuación. Por ejemplo: Get-Service | ia "Haz un resumen sobre qué servicios no son comunes en Windows" En las configuraciones estándar de Powershai, el comando `ia` (alias para `Send-PowershaiChat`), va a obtener todos los objetos retornados por `Get-Service` y los formateará como una cadena gigante única. Entonces, esa cadena se inyectará en el prompt del LLM, y se le indicará que use ese resultado como "contexto" para el prompt del usuario. El prompt del usuario se concatena justo después. Con esto, se crea un efecto poderoso: puedes integrar fácilmente las salidas de los comandos con tus prompts, usando un simple pipe, que es una operación común en Powershell. El LLM tiende a considerar bien. A pesar de poseer un valor estándar, tienes total control de cómo se envían estos objetos. La primera forma de controlar es cómo el objeto se convierte a texto. Como el prompt es una cadena, es necesario convertir ese objeto a texto. Por defecto, se convierte en una representación estándar de Powershell, según el tipo (usando el comando `Out-String`). Puedes cambiar esto usando el comando `Set-PowershaiChatContextFormatter`. Puedes definir, por ejemplo, JSON, tabla, e incluso un script personalizado para tener total control. La otra forma de controlar cómo se envía el contexto es usando el parámetro del chat `ContextFormat`. Este parámetro controla todo el mensaje que se inyectará en el prompt. Es un scriptblock. Debes retornar un array de cadenas, que equivale al prompt enviado. Este script tiene acceso a parámetros como el objeto formateado que se está pasando en el pipeline, los valores de los parámetros del comando Send-PowershaiChat, etc. El valor default del script está hard-coded, y debes consultar directamente en el código para saber cómo se envía (y para un ejemplo de cómo implementar el tuyo propio). HERRAMIENTAS Una de las grandes funcionalidades implementadas es el soporte a la Llamada a Funciones (o Llamada a Herramientas). Esta función, disponible en varios LLMs, permite que la IA decida invocar funciones para traer datos adicionales en la respuesta. Básicamente, se describe una o más funciones y sus parámetros, y el modelo puede decidir invocarlas. IMPORTANTE: Solo se puede usar esta función en proveedores que expongan la llamada a funciones usando la misma especificación de OpenAI Para más detalles, consulta la documentación oficial de OpenAI sobre la Llamada a Funciones: Llamada a Funciones . El modelo solo decide qué funciones invocar, cuándo invocarlas y sus parámetros. La ejecución de esa invocación la realiza el cliente, en nuestro caso, PowershAI. Los modelos esperan la definición de las funciones describiendo lo que hacen, sus parámetros, retornos, etc. Originalmente esto se hace usando algo como OpenAPI Spec para describir las funciones. Sin embargo, Powershell posee un poderoso sistema de ayuda usando comentarios, que permite describir funciones y sus parámetros, además de los tipos de datos. PowershAI se integra con este sistema de ayuda, traduciéndolo a una especificación OpenAPI. El usuario puede escribir sus funciones normalmente, usando comentarios para documentarlas y esto se envía al modelo. Para demostrar este recurso, vamos a un simple tutorial: crea un archivo llamado `MinhasFuncoes.ps1` con el siguiente contenido # Archivo MinhasFuncoes.ps1, guarda en algún directorio de tu preferencia! <# .DESCRIPTION Lista la hora actual #> function HoraAtual { return Get-Date } <# .DESCRIPTION Obtiene un número aleatorio! #> function NumeroAleatorio { param( # Número mínimo $Min = $null, # Número máximo $Max = $null ) return Get-Random -Min $Min -Max $Max } Nota el uso de los comentarios para describir funciones y parámetros . Esta es una sintaxis soportada por PowerShell, conocida como Ayuda Basada en Comentarios . Ahora, vamos a añadir este archivo a PowershAI: import-module powershai Set-AiProvider openai Set-OpenaiToken #configura el token si aún no lo has configurado. # Añade el script como herramientas! # Suponiendo que el script se guardó en C:\tempo\MinhasFuncoes.ps1 Add-AiTool C:\tempo\MinhasFuncoes.ps1 # Confirma que las herramientas fueron añadidas Get-AiTool ¡Experimenta pidiendo al modelo cuál es la fecha actual o pídele que genere un número aleatorio! ¡Verás que ejecutará tus funciones! ¡Esto abre posibilidades infinitas, y tu creatividad es el límite! ia "Cuántas horas?" En el comando anterior, el modelo va a invocar la función. ¡En la pantalla verás la función siendo llamada! Puedes añadir cualquier comando o script de powershell como una herramienta. Utiliza el comando `Get-Help -Full Add-AiTol` para más detalles de cómo usar esta poderosa funcionalidad. PowershAI automáticamente se encarga de ejecutar los comandos y enviar la respuesta de vuelta al modelo. Si el modelo decide ejecutar varias funciones en paralelo, o insiste en ejecutar nuevas funciones, PowershAI las gestionará automáticamente. Nota que, para evitar un bucle infinito de ejecuciones, PowershAI fuerza un límite con el máximo de ejecuciones. El parámetro que controla estas interacciones con el modelo es `MaxInteractions`. INVOKE-AICHATTOOLS Y GET-AICHAT Estos dos cmdlets son la base de la función de chats de Powershai. `Get-AiChat` es el comando que permite comunicarse con el LLM de la forma más primitiva posible, casi cerca de la llamada HTTP. Es, básicamente, un wrapper estándar para la API que permite generar texto. Se le informa de los parámetros, que están estandarizados, y devuelve una respuesta, que también está estandarizada. Independientemente del proveedor, la respuesta debe seguir la misma regla! Ya el cmdlet `Invoke-AiChatTools` es un poco más elaborado y un poco más alto nivel. Permite especificar funciones de Powershell como herramientas. Estas funciones se convierten a un formato que el LLM entiende. Usa el sistema de ayuda de Powershell para obtener todos los metadatos posibles para enviar al modelo. Envía los datos al modelo usando el comando `Get-Aichat`. Al obtener la respuesta, valida si hay llamada a herramientas, y si la hay, ejecuta las funciones equivalentes y devuelve la respuesta. Sigue haciendo este ciclo hasta que el modelo finalice la respuesta o que se alcance el máximo de interacciones. Una interacción es una llamada a la API al modelo. Al invocar Invoke-AiChatTools con funciones, pueden ser necesarias varias llamadas para devolver las respuestas al modelo. El siguiente diagrama explica este flujo: sequenceDiagram Invoke-AiChatTools->>modelo:prompt (INTERACCIÓN 1) modelo->>Invoke-AiChatTools:(response, 3 function call) Invoke-AiChatTools-->Invoke-AiChatTools:Call Tool 1 Invoke-AiChatTools-->Invoke-AiChatTools:Call Tool 2 Invoke-AiChatTools-->Invoke-AiChatTools:Call Tool 3 Invoke-AiChatTools->>modelo:Resultado tool call + prompts anteriores prompt (INTERACCIÓN 2) modelo->>Invoke-AiChatTools:respuesta final CÓMO LOS COMANDOS SE TRANSFORMAN E INVOCAN El comando `Invoke-AiChatTools` espera en el parámetro -Functions una lista de comandos de powershell mapeados a schemas OpenAPI. Espera un objeto que llamamos OpenaiTool, conteniendo las siguientes props: (el nombre OpenAiTool se debe al hecho de que usamos el mismo formato de llamada a herramientas de OpenAI) - tools Esta propiedad contiene el schema de la llamada a funciones que se enviará al LLM (en los parámetros que esperan esa información) - map Este es un método que retorna el comando de powershell (función, alias, cmdlet, exe, etc.) a ser ejecutado. Este método debe retornar un objeto con la propiedad llamada "func", que debe ser el nombre de una función, comando ejecutable o scriptblock. Recibirá en el primer argumento el nombre de la herramienta, y en el segundo el propio objeto OpenAiTool (como si fuera el this). Además de estas propiedades, cualquier otra es libre de ser añadida al objeto OpenaiTool. Esto permite que el script map tenga acceso a cualquier dato externo que necesite. Cuando el LLM devuelve la solicitud de llamada a funciones, el nombre de la función a ser invocada se pasa al método `map`, y debe retornar qué comando debe ejecutar. Esto abre diversas posibilidades, permitiendo que, en tiempo de ejecución, se pueda determinar el comando a ser ejecutado a partir de un nombre. Gracias a este mecanismo el usuario tiene total control y flexibilidad sobre cómo va a responder a la llamada a herramientas del LLM. Entonces, el comando se invocará y los parámetros y valores enviados por el modelo se pasarán como Argumentos Ligados. Es decir, el comando o script debe ser capaz de recibir los parámetros (o identificarlos dinámicamente) a partir de su nombre. Todo esto se hace en un bucle que va a iterar, secuencialmente, en cada Llamada a Herramientas retornado por el LLM. No hay ninguna garantía del orden en que se ejecutarán las herramientas, por lo tanto, nunca se debe presumir el orden, a menos que el LLM envíe una herramienta en secuencia. Esto significa que, en implementaciones futuras, diversas llamadas a herramientas pueden ser ejecutadas al mismo tiempo, en paralelo (En Jobs, por ejemplo). Internamente, PowershAI crea un script map estándar para los comandos añadidos usando `Add-AiTool`. Para un ejemplo de cómo implementar funciones que retornen este formato, consulta en el proveedor openai.ps1, los comandos que empiezan con Get-OpenaiTool* Nota que esta función de Llamada a Herramientas funciona solo con modelos que soportan la Llamada a Herramientas siguiendo las mismas especificaciones de OpenAI (tanto de entrada como de retorno). CONSIDERACIONES IMPORTANTES SOBRE EL USO DE HERRAMIENTAS La función de Llamada a Funciones es poderosa al permitir la ejecución de código, pero también es peligrosa, MUY PELIGROSA. Por lo tanto, ten extrema precaución con lo que implementas y ejecutas. Recuerda que PowershAI ejecutará según lo que el modelo pida. Algunas sugerencias de seguridad: - Evita ejecutar el script con un usuario Administrador. - Evita implementar código que elimine o modifique datos importantes. - Prueba las funciones antes. - No incluyas módulos o scripts de terceros que no conozcas o en los que no confíes. La implementación actual ejecuta la función en la misma sesión, y con las mismas credenciales, del usuario conectado. Esto significa que, por ejemplo, si el modelo (intencional o erróneamente) pide ejecutar un comando peligroso, tus datos, o incluso tu computadora, pueden ser dañados o comprometidos. Por eso, vale esta advertencia: Ten el máximo cuidado y solo añade herramientas con scripts en los que tengas total confianza. Hay un plan para añadir futuros mecanismos para ayudar a aumentar la seguridad, como aislar en otros runspaces, abrir un proceso separado, con menos privilegios y permitir que el usuario tenga opciones para configurar esto. |