24.6 C
Colombia
domingo, julio 6, 2025

Liberando el poder del desarrollo impulsado por la IA con SudoLang – O’Reilly


A medida que la IA continúa avanzando a un ritmo rápido, los desarrolladores recurren cada vez más al desarrollo impulsado por IA (AIDD) para crear aplicaciones más inteligentes y adaptables. Sin embargo, utilizar indicaciones en lenguaje pure para describir comportamientos complejos a la IA puede ser un verdadero desafío. Si bien el lenguaje pure es expresivo, carece de la estructura y la eficiencia necesarias para comunicar claramente instrucciones complejas y mantener un estado complejo.

Uno de los mayores problemas con las indicaciones del lenguaje pure es la falta de una encapsulación clara y una delimitación de las instrucciones relacionadas. A diferencia del código fuente, que utiliza elementos como llaves y sangría para agrupar y organizar bloques de código, las indicaciones del lenguaje pure pueden convertirse rápidamente en un muro de texto que es una pesadilla de leer y mantener. Esta falta de estructura dificulta que la IA comprenda y siga con precisión las instrucciones previstas.

Aprende más rápido. Profundiza más. Ver más lejos.

El lenguaje pure no siempre es la forma más eficaz de representar instrucciones complejas. Los modelos de lenguaje pueden sufrir de “escasa atención”, donde la capacidad de atención del modelo se acentúa a medida que crece el contexto de entrada. Esto puede llevar a que la IA olvide o malinterprete información importante dentro del mensaje, particularmente en medio de la entrada, un fenómeno conocido como el problema “Perdido en el medio” (Liu y otros, 2023). Como resultado, la IA puede tener dificultades para seguir las instrucciones previstas, lo que genera resultados incorrectos.

Para superar estas limitaciones y desbloquear todo el potencial de AIDD, necesitamos un enfoque más estructurado para la comunicación de IA. Aquí es donde entran en juego las indicaciones de pseudocódigo y el lenguaje de programación SudoLang.

Solicitud de pseudocódigo y SudoLang: una solución para el desarrollo impulsado por IA

La indicación de pseudocódigo es una técnica que combina la expresividad del lenguaje pure con la estructura y precisión de los conceptos de programación. Al utilizar una sintaxis comparable a un pseudocódigo, los desarrolladores pueden proporcionar pistas contextuales a la IA, guiándola para que comprenda y siga las instrucciones con mayor precisión.

Los modelos de lenguaje se comportan como jugadores de rol, y todo lo que aparece en su mensaje se utiliza como contexto y connotación para que la IA base su respuesta. Los modelos de lenguaje grandes (LLM) se entrenan en código y entienden que es un lenguaje que se usa para instruir. ordenadores de forma detallada y precisa. Debido a esto, ver cosas que parecen código conlleva la connotación de que se debe pensar detenidamente en el contenido. Desencadena un pensamiento mejorado, un seguimiento de estados y un razonamiento en el modelo de lenguaje. El artículo “Solicitudes con instrucciones de pseudocódigo” (Mishra y otros, 2023) demostraron que las indicaciones de pseudocódigo generaron mejoras en la puntuación de respuesta del 12% al 38%.

Uno de los beneficios clave de la indicación de pseudocódigo es su capacidad para representar de manera eficiente instrucciones complejas. Al utilizar construcciones de programación como restricciones, interfaces y funciones, el pseudocódigo puede expresar lógica y algoritmos complejos de una manera concisa, legible y expresiva. Esto no solo cut back el recuento de tokens del mensaje, lo que ahorra dinero y tiempo, sino que también facilita que la IA comprenda y ejecute el comportamiento deseado.

SudoLang, un lenguaje de programación diseñado, descubierto y seleccionado específicamente con la ayuda de GPT-4 para comunicar concepts y programas complejos con IA, lleva las indicaciones de pseudocódigo al siguiente nivel. Digo diseñado, descubierto y curado porque, si bien se hizo algo de diseño inteligente en SudoLang, el verdadero esfuerzo fue descubrir y probar la comprensión del pseudocódigo inherente a los modelos de lenguaje, seleccionando características y conceptos comunes de los lenguajes existentes, tanto de programación como de lenguaje pure. De hecho, todos los modelos de lenguajes grandes suficientemente avanzados ya conocen SudoLang: siempre estuvo ahí en el espacio latente. Simplemente lo descubrimos, seleccionamos características y lo documentamos.

SudoLang es un lenguaje multiparadigma que presenta programación basada en restricciones en lenguaje pure inspirada en el Sketchpad de Ivan Sutherland. Sketchpad period un lenguaje de programación gráfico que permitía a los usuarios seleccionar múltiples elementos en el lienzo mediante la interacción directa en la pantalla con un lápiz óptico. Por ejemplo, podría seleccionar dos líneas, restringirlas para que sean paralelas y luego cambiar una línea provocaría que los solucionadores de restricciones se activen y actualicen la otra línea para mantener la restricción paralela. Las restricciones son un concepto poderoso en SudoLang, que permite a los desarrolladores especificar los comportamientos y relaciones deseados entre entidades de manera declarativa.

Las restricciones en SudoLang están escritas en lenguaje pure y pueden consistir en guías positivas o elementos a evitar. Pueden ser axiomas matemáticos formales o instrucciones caprichosas para un chatbot cachorro juguetón. SudoLang es un lenguaje declarativo, lo que significa que debes centrar las restricciones en lo que deseas en lugar de escribir instrucciones detalladas sobre cómo hacerlo. La IA suele ser lo suficientemente inteligente como para descubrir el “cómo” por usted, y esa capacidad le ahorrará mucho trabajo, tiempo, fichas y dinero.

Con SudoLang, los desarrolladores pueden definir restricciones que la IA resolverá continuamente, asegurando que los estados relacionados permanezcan sincronizados y consistentes. Por ejemplo, puede especificar que un valor calculado siempre debe actualizarse cada vez que cambia una variable clave. Las restricciones también proporcionan una forma de guiar el comportamiento de la IA, como darle una personalidad specific o adaptar su producción a un público objetivo específico.

El diseño orientado a la interfaz de SudoLang es otra característica clave que lo distingue. Los desarrolladores pueden definir de forma clara y sucinta estructuras y operaciones de datos utilizando interfaces escritas. Si bien se pueden inferir la mayoría de los tipos, SudoLang permite declaraciones de tipos explícitas cuando es necesario y se admiten todos los tipos de lenguajes de programación comunes. Este enfoque basado en interfaz promueve la modularidad y la reutilización, lo que facilita la creación y el mantenimiento de aplicaciones complejas basadas en IA.

La composición es otro punto fuerte de SudoLang. El lenguaje admite funciones, composición de funciones y composición de interfaces, lo que permite a los desarrolladores crear programas complejos combinando componentes independientes más simples. La composición de funciones le permite unir una serie de funciones una tras otra para formar una función nueva y más compleja. La definición algebraica de composición de funciones es: (f ∘ g)(x) = f(g(x)) (a menudo pronunciado “f después g“).

En SudoLang, puedes escribir esto como g |> f—lo que significa: aplicar la función g al valor proporcionado, luego aplique la función f a la salida de g. Componer interfaces también es fácil:

// Some interfaces to compose:
Character {
  title: ""
  well being: 1..10 // ".." is the vary operator in SudoLang
  power: 1..10
  pace: 1..10
}

Goal  completed


Quest {
  title
  description
  targets: []
}

// The next composes all the above interfaces collectively:
Participant {
  // The `...` right here is the unfold operator. It's going to combine
  // all of the properties of "character" into the highest degree
  // of the participant object, so as an alternative of participant.character.well being
  // we get a direct reference to participant.well being.
  ...character // embody the properties of "character"
  quests: []
}

Veamos cómo un modelo de lenguaje podría interpretar y ejecutar un escenario de aventura de texto usando SudoLang. Este ejemplo se basa en una interacción con el Soneto Claude 3.5 de Anthropic:

Village Elder: "Greetings, courageous adventurer. Our village is in dire want of historical knowledge. Within the grand library to the east, there lies a scroll of immense energy. I process you with retrieving this scroll and bringing it again to me. Will you settle for this quest?"


Participant: I settle for the hunt, Elder.


Village Elder: "Wonderful! The scroll is alleged to be hidden within the deepest chamber of the library. Be cautious, for the trail could also be treacherous. Return to me after getting the scroll in your possession."


Your quest log updates:

Quests:
  - title: Retrieve the Historical Scroll
    description: Fetch an previous scroll from the traditional library and return it to the village elder.
    targets:
      - title: Fetch the scroll
        description: Discover and retrieve the traditional scroll from the library.
        standing: began
      - title: Return to the elder
        description: Deliver the scroll again to the village elder.
        standing: prepared

[Time passes as the player journeys to the ancient library and navigates its chambers…]

You enter a dimly lit chamber deep throughout the library. Mud motes dance within the air as your torch illuminates rows upon rows of historical texts. Within the heart of the room, atop a weathered stone pedestal, you see a scroll emanating a faint, ethereal glow.


Participant: I fastidiously method the pedestal and take the glowing scroll.


As your fingers contact the parchment, you're feeling a surge of power course by means of your physique. The scroll's glow intensifies for a second earlier than settling into a gentle, heat mild. You've got discovered the traditional scroll the elder spoke of!


You could have a brand new merchandise: Historical Scroll

Your quest log updates:
Participant:
title: Adventurer
stock:
- Historical Scroll
quests:
- title: Retrieve the Historical Scroll
description: Fetch an previous scroll from the traditional library and return it to the village elder.
targets:
- title: Fetch the scroll
description: Discover and retrieve the traditional scroll from the library.
standing: completed
- title: Return to the elder
description: Deliver the scroll again to the village elder.
standing: began

Este ejemplo demuestra cómo se puede utilizar SudoLang para crear interacciones dinámicas y conscientes del estado en un juego de aventuras de texto. La IA interpreta las acciones del jugador, actualiza el estado del juego en consecuencia y proporciona respuestas apropiadas y actualizaciones del registro de misiones, obedeciendo las limitaciones dadas y respetando las interfaces que hemos definido.

En SudoLang, cuanto más puedas confiar en la capacidad de la IA para inferir Según su intención, mejor, por lo que normalmente no necesitamos recurrir a características como bucles y bifurcaciones, pero vale la pena señalar que SudoLang incluye construcciones de bucles y bifurcaciones, aunque sin todo el desorden de sintaxis y las referencias precisas y definiciones de funciones que la mayoría de la programación los idiomas requieren. Por ejemplo, los bucles se pueden expresar como:

for every consumer, ship replace electronic mail

Esta construcción permite a la IA manejar los detalles de implementación. Si lo guía con las restricciones adecuadas, podría incluso personalizar cada correo electrónico según las preferencias del usuario o su actividad reciente, lo que demuestra cómo SudoLang puede generar resultados más sofisticados y personalizados en comparación con los enfoques de programación tradicionales.

Asimismo, existen construcciones ramificadas. La IA responde bien a “si” y “si no”, pero también puede utilizar la comprensión de la semántica y el lenguaje pure del modelo de lenguaje para hacerlo. coincidencia de patrones semánticosp.ej:

if the participant dies, extract the penalty for dying and respawn within the nearest secure location

Pero si está jugando al golf con fichas (tratando de reducir el recuento de fichas para optimizar el costo y el rendimiento), esto también podría funcionar:

(participant died) => extract penalty, respawn

Apoyarse un poco más en la inferencia e introducir un poco de sintaxis en este caso redujo el recuento de tokens en GPT-4 de 17 a 8.

La coincidencia de patrones es una característica poderosa inspirada en lenguajes como Haskell, Elixir, Rust, Scala, F#, and many others.

La esencia básica de los lenguajes de programación tradicionales podría verse así:

// Non-standard, hypothetical sample matching syntax in JavaScript
perform space(form) {
  return match (form) => {
    ({ kind: "circle", radius }) => Math.PI * Math.pow(radius, 2);
    ({ kind: "rectangle", width, peak }) => width * peak;
    ({ kind: "triangle", base, peak }) => 0.5 * base * peak;
  }
}

console.log(space({ kind: "rectangle", width: 4, peak: 5 })); // 20

Vale la pena señalar que en SudoLang no es necesario definir las formas ni sus propiedades, ya que la IA puede inferirlas a partir del contexto. En SudoLang, esa función no necesitará una coincidencia de patrones explícita y probablemente se parecería más a:

perform space(form) => Quantity

Uno de los aspectos más poderosos de SudoLang es su capacidad para aprovechar las propiedades de inferencia omnireferencial de los LLM. Los LLM están capacitados en grandes cantidades de conocimiento humano disponible en Web, lo que les permite comprender una amplia gama de dominios. SudoLang aprovecha esto al permitir a los desarrolladores definir funciones sin proporcionar siempre detalles de implementación.

En muchos casos, la IA puede inferir qué debe hacer una función basándose únicamente en el contexto del programa y el nombre de la función. Podría decirse que esto convierte a SudoLang en el lenguaje de programación con la biblioteca estándar más grande, ya que puede aprovechar la amplia comprensión del lenguaje pure de la IA para inferir la funcionalidad en un amplio espectro de dominios.

Yo uso frecuentemente welcome() como mi inicializador para indicarle a la IA cómo comenzar, sin definir qué welcome() debería significar. Muy a menudo, si proporciona un buen preámbulo y una interfaz principal con comandos, welcome() simplemente hará lo correcto sin necesidad de instrucciones adicionales.

Otros comandos o funciones que simplemente funcionan incluyen funciones de biblioteca estándar de lenguajes de programación comunes; muchas de las funciones de Lodash o RxJS de JavaScript funcionan, por ejemplo. type(record) |> take(3) ordenará una lista basándose en algunos criterios inferidos (por ejemplo, alfabéticamente) y devolverá los tres primeros resultados. Por supuesto, puede especificar los criterios y el orden de clasificación cuando llama a kind.

A medida que la IA continúa transformando el panorama del desarrollo de software program, herramientas como la indicación de pseudocódigo y SudoLang desempeñarán un papel essential para permitir a los desarrolladores aprovechar todo el potencial de AIDD. Al proporcionar una forma estructurada y eficiente de comunicarse con la IA, SudoLang permite a los desarrolladores crear aplicaciones inteligentes, adaptables y robustas que superan los límites de lo que es posible con la inteligencia synthetic.

Como puede ver, SudoLang y las indicaciones de pseudocódigo pueden desbloquear el verdadero potencial del desarrollo impulsado por IA. El futuro del desarrollo de software program está aquí. ¡Hagamos algo de magia!



Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles