Desbloqueando o poder do desenvolvimento orientado por IA com SudoLang – O’Reilly


À medida que a IA continua a avançar em ritmo acelerado, os desenvolvedores estão cada vez mais se voltando para o desenvolvimento orientado por IA (AIDD) para construir aplicativos mais inteligentes e adaptáveis. No entanto, usar prompts de linguagem pure para descrever comportamentos complexos para a IA pode ser um verdadeiro desafio. Embora a linguagem pure seja expressiva, ela não tem a estrutura e a eficiência necessárias para comunicar claramente instruções intrincadas e manter o estado complexo.

Um dos maiores problemas com prompts de linguagem pure é a falta de encapsulamento e delineamento claros de instruções relacionadas. Ao contrário do código-fonte, que usa elementos como chaves e recuo para agrupar e organizar blocos de código, os prompts de linguagem pure podem rapidamente se transformar em uma parede de texto que é um pesadelo para ler e manter. Essa falta de estrutura torna mais difícil para a IA entender e seguir as instruções pretendidas com precisão.

Aprenda mais rápido. Vá mais fundo. Veja mais longe.

A linguagem pure nem sempre é a maneira mais eficiente de representar instruções complexas. Os modelos de linguagem podem sofrer de “atenção esparsa”, onde a capacidade de atenção do modelo é estressada conforme o contexto de entrada cresce. Isso pode levar a IA a esquecer ou interpretar mal informações importantes dentro do immediate, particularmente no meio da entrada, um fenômeno conhecido como o problema “Perdido no Meio” (Liu e outros, 2023). Como resultado, a IA pode ter dificuldade em seguir as instruções pretendidas, levando a resultados incorretos.

Para superar essas limitações e desbloquear todo o potencial do AIDD, precisamos de uma abordagem mais estruturada para a comunicação de IA. É aqui que o immediate de pseudocódigo e a linguagem de programação SudoLang entram em cena.

Prompting de pseudocódigo e SudoLang: uma solução para desenvolvimento orientado por IA

O prompting de pseudocódigo é uma técnica que combina a expressividade da linguagem pure com a estrutura e a precisão dos conceitos de programação. Ao usar sintaxe semelhante a pseudocódigo, os desenvolvedores podem fornecer pistas contextuais para a IA, orientando-a a entender e seguir instruções com mais precisão.

Os modelos de linguagem se comportam como atores, e tudo em seu immediate é usado como contexto e conotação para a IA fundamentar sua resposta. Os modelos de linguagem grande (LLMs) são treinados em código e entendem que é uma linguagem usada para instruir computadores de maneira detalhada e precisa. Por isso, ver coisas que parecem código carrega a conotação de que ele deve pensar cuidadosamente sobre o conteúdo. Isso aciona o pensamento aprimorado, o rastreamento de estado e o raciocínio no modelo de linguagem. O artigo “Prompting with Pseudocode Directions” (Mishra e outros, 2023) demonstraram que os prompts de pseudocódigo geraram melhorias de 12% a 38% na pontuação de resposta.

Um dos principais benefícios do immediate de pseudocódigo é sua capacidade de representar eficientemente instruções complexas. Ao usar construções de programação como restrições, interfaces e funções, o pseudocódigo pode expressar lógica e algoritmos intrincados de uma forma concisa, legível e expressiva. Isso não apenas reduz a contagem de tokens do immediate, o que economiza dinheiro e tempo, mas também torna mais fácil para a IA compreender e executar o comportamento desejado.

SudoLang, uma linguagem de programação projetada, descoberta e curada especificamente com a ajuda do GPT-4 para comunicar ideias e programas complexos com IA, leva o immediate de pseudocódigo para o próximo nível. Eu digo projetado, descoberto e curado porque, embora algum design inteligente tenha sido aplicado ao SudoLang, o esforço actual foi para descobrir e testar a compreensão do pseudocódigo inerente aos modelos de linguagem, curando recursos e conceitos comuns de linguagens existentes — tanto de programação quanto de linguagem pure. Na verdade, todos os modelos de linguagem grandes suficientemente avançados já conhecem o SudoLang — ele sempre esteve lá no espaço latente. Nós apenas o descobrimos, curamos recursos e o documentamos.

SudoLang é uma linguagem multiparadigma que apresenta programação baseada em restrições de linguagem pure inspirada no Sketchpad de Ivan Sutherland. O Sketchpad period uma linguagem de programação gráfica que permitia aos usuários selecionar vários elementos na tela usando interação direta na tela com uma caneta de luz. Por exemplo, você poderia selecionar duas linhas, restringi-las a serem paralelas e, em seguida, alterar uma linha faria com que os solucionadores de restrições entrassem em ação e atualizassem a outra linha para manter a restrição paralela. Restrições são um conceito poderoso no SudoLang, permitindo que os desenvolvedores especifiquem comportamentos e relacionamentos desejados entre entidades de forma declarativa.

As restrições no SudoLang são escritas em linguagem pure e podem consistir em orientação positiva ou elementos a serem evitados. Elas podem ser axiomas matemáticos formais ou instruções caprichosas para um chatbot brincalhão de cachorrinho. O SudoLang é uma linguagem declarativa, o que significa que você deve focar as restrições no que quer em vez de escrever instruções detalhadas sobre como fazê-lo. A IA geralmente é inteligente o suficiente para descobrir o “como” para você, e essa habilidade economizará muito trabalho, tempo, fichas e dinheiro.

Com o SudoLang, os desenvolvedores podem definir restrições que a IA resolverá continuamente, garantindo que os estados relacionados permaneçam sincronizados e consistentes. Por exemplo, você pode especificar que um valor calculado deve sempre ser atualizado sempre que uma variável-chave mudar. As restrições também fornecem uma maneira de orientar o comportamento da IA, como dar a ela uma personalidade específica ou adaptar sua saída para um público-alvo específico.

O design orientado a interface do SudoLang é outro recurso importante que o diferencia. Os desenvolvedores podem definir clara e sucintamente estruturas de dados e operações usando interfaces tipadas. Enquanto a maioria dos tipos pode ser inferida, o SudoLang permite declarações de tipo explícitas quando necessário, e todos os tipos comuns de linguagem de programação são suportados. Essa abordagem orientada a interface promove modularidade e reutilização, tornando mais fácil construir e manter aplicativos complexos orientados a IA.

Composição é outro ponto forte do SudoLang. A linguagem suporta funções, composição de funções e composição de interface, permitindo que os desenvolvedores criem programas complexos combinando componentes mais simples e independentes. A composição de funções permite que você canalize uma série de funções juntas, uma após a outra, para formar uma função nova e mais complexa. A definição algébrica de composição de funções é: (f ∘ g)(x) = f(g(x)) (frequentemente pronunciado “f depois g“).

Em SudoLang, você pode escrever isso como g |> f—que significa: aplicar a função g ao valor fornecido, então aplique a função f para a saída de g. Compor interfaces também é fácil:

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

Goal  completed


Quest {
  identify
  description
  aims: ()
}

// The next composes all the above interfaces collectively:
Participant {
  // The `...` right here is the unfold operator. It would combine
  // all of the properties of "character" into the highest degree
  // of the participant object, so as a substitute of participant.character.well being
  // we get a direct reference to participant.well being.
  ...character // embrace the properties of "character"
  quests: ()
}

Vamos ver como um modelo de linguagem pode interpretar e executar um cenário de aventura de texto usando SudoLang. Este exemplo é baseado em uma interação com o Claude 3.5 Sonnet da 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 activity you with retrieving this scroll and bringing it again to me. Will you settle for this quest?"


Participant: I settle for the search, Elder.


Village Elder: "Wonderful! The scroll is claimed 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:
  - identify: Retrieve the Historical Scroll
    description: Fetch an outdated scroll from the traditional library and return it to the village elder.
    aims:
      - identify: Fetch the scroll
        description: Discover and retrieve the traditional scroll from the library.
        standing: began
      - identify: Return to the elder
        description: Carry the scroll again to the village elder.
        standing: prepared

(O tempo passa enquanto o jogador viaja até a antiga biblioteca e navega por suas câmaras…)

You enter a dimly lit chamber deep inside the library. Mud motes dance within the air as your torch illuminates rows upon rows of historical texts. Within the middle of the room, atop a weathered stone pedestal, you notice 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 way 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 may have a brand new merchandise: Historical Scroll

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

Este exemplo demonstra como o SudoLang pode ser usado para criar interações dinâmicas e conscientes do estado em um jogo de aventura de texto. A IA interpreta as ações do jogador, atualiza o estado do jogo adequadamente e fornece respostas apropriadas e atualizações do log de missões, obedecendo às suas restrições dadas e respeitando as interfaces que definimos.

No SudoLang, quanto mais você puder confiar na capacidade da IA ​​de inferir sua intenção, melhor, então geralmente não precisamos recorrer a recursos como looping e branching, mas vale a pena notar que SudoLang inclui construções de loop e department, embora sem toda a confusão de sintaxe e referências precisas e definições de função que a maioria das linguagens de programação exigem. Por exemplo, loops podem ser expressos como:

for every consumer, ship replace e mail

Essa construção permite que a IA lide com os detalhes da implementação. Se você a guiar com as restrições certas, ela pode até personalizar cada e-mail com base nas preferências do usuário ou atividade recente, demonstrando como o SudoLang pode levar a resultados mais sofisticados e personalizados em comparação com abordagens de programação tradicionais.

Da mesma forma, existem construções de ramificação. A IA responde muito bem a “if” e “else”, mas você também pode usar a compreensão do modelo de linguagem de semântica e linguagem pure para fazer correspondência de padrões semânticospor exemplo:

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

Mas se você estiver jogando golfe com fichas (tentando reduzir a contagem de fichas para otimizar o custo e o desempenho), isso também pode funcionar:

(participant died) => extract penalty, respawn

Inclinar-se um pouco mais na inferência e introduzir um pouco de sintaxe neste caso reduziu a contagem de tokens no GPT-4 de 17 para 8.

A correspondência de padrões é um recurso poderoso inspirado em linguagens como Haskell, Elixir, Rust, Scala, F# e assim por diante.

A essência básica em linguagens de programação tradicionais pode ser algo como:

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

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

Vale a pena notar que em SudoLang, você não precisa definir as formas ou suas propriedades, pois a IA pode inferi-las do contexto. Em SudoLang, essa função não precisará de correspondência de padrões explícita e provavelmente se pareceria mais com:

operate space(form) => Quantity

Um dos aspectos mais poderosos do SudoLang é sua capacidade de alavancar as propriedades de inferência omnirreferencial dos LLMs. Os LLMs são treinados em vastas quantidades de conhecimento humano disponíveis na web, permitindo que eles entendam uma ampla gama de domínios. O SudoLang tira vantagem disso permitindo que os desenvolvedores definam funções sem sempre fornecer detalhes de implementação.

Em muitos casos, a IA pode inferir o que uma função deve fazer com base no contexto do programa e apenas no nome da função. Isso sem dúvida torna o SudoLang a linguagem de programação com a maior biblioteca padrão, pois pode explorar a ampla compreensão da linguagem pure da IA ​​para inferir funcionalidade em um amplo espectro de domínios.

Eu uso frequentemente welcome() como meu inicializador para instruir a IA sobre como começar, sem definir o que welcome() deve significar. Muitas vezes, se você fornecer um bom preâmbulo e interface principal com comandos, welcome() fará a coisa certa sem precisar de nenhuma instrução adicional.

Outros comandos ou funções que funcionam incluem funções de biblioteca padrão de linguagens de programação comuns; muitas das funções do Lodash ou RxJS do JavaScript funcionam, por exemplo. type(record) |> take(3) classificará uma lista com base em alguns critérios inferidos (por exemplo, alfabeticamente) e retornará os três primeiros resultados. Claro, você pode especificar os critérios e a ordem de classificação quando chamar type.

À medida que a IA continua a transformar o cenário de desenvolvimento de software program, ferramentas como prompting de pseudocódigo e SudoLang desempenharão um papel essential em permitir que os desenvolvedores aproveitem todo o potencial do AIDD. Ao fornecer uma maneira estruturada e eficiente de se comunicar com a IA, o SudoLang capacita os desenvolvedores a criar aplicativos inteligentes, adaptáveis ​​e robustos que expandem os limites do que é possível com inteligência synthetic.

Como você pode ver, SudoLang e prompting de pseudocódigo podem desbloquear o verdadeiro potencial do AI-Pushed Improvement. O futuro do desenvolvimento de software program está aqui. Vamos fazer mágica!



Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *