11 pontos por GN⁺ 2024-08-07 | 2 comentários | Compartilhar no WhatsApp
  • Introdução de "Structured Outputs" na API
    • Novo recurso que faz a saída do modelo corresponder exatamente ao esquema JSON fornecido pelo desenvolvedor
    • No DevDay do ano passado, foi apresentado o modo JSON, mas ele não garantia respostas em conformidade com um esquema específico
    • As saídas estruturadas restringem a saída do modelo ao esquema fornecido pelo desenvolvedor e treinam o modelo para compreender melhor esquemas complexos
  • Necessidade de saídas estruturadas
    • Gerar dados estruturados a partir de entradas não estruturadas é um dos principais casos de uso de IA
    • Com a API da OpenAI, é possível realizar várias tarefas, como busca de dados, respostas a perguntas, extração de dados e construção de fluxos de trabalho em várias etapas
    • Antes, era necessário esforço com ferramentas open source, prompts e novas tentativas para fazer a saída do modelo se adequar a formatos interoperáveis com os sistemas
    • As saídas estruturadas resolvem esse problema ao restringir a saída do modelo ao esquema fornecido pelo desenvolvedor
  • Avaliação de desempenho
    • Em uma avaliação de conformidade com esquemas JSON complexos, o modelo gpt-4o-2024-08-06 obteve 100% de pontuação
    • O modelo gpt-4-0613 ficou abaixo de 40%
  • Como usar saídas estruturadas
    • Saídas estruturadas via chamada de função: definir strict: true dentro da definição da função
      • Disponível em modelos que oferecem suporte a ferramentas
  • Saídas estruturadas seguras
    • Seguem as políticas de segurança já existentes da OpenAI
    • O modelo pode recusar solicitações inseguras
    • A resposta da API inclui um valor de string de recusa, permitindo detectar programaticamente se o modelo gerou uma recusa
  • Suporte nativo em SDKs
    • Os SDKs de Python e Node oferecem suporte nativo a saídas estruturadas
    • É possível fornecer objetos Pydantic ou Zod para convertê-los em esquema JSON e serializar/analisar automaticamente a resposta JSON
  • Restrições
    • Apenas parte do JSON Schema é suportada
    • A primeira resposta da API com um novo esquema pode ter latência adicional
    • O modelo pode recusar solicitações inseguras
    • Não é compatível com chamadas paralelas de função
    • Saídas estruturadas não estão cobertas por Zero Data Retention (ZDR)
  • Disponibilidade
    • Saídas estruturadas já estão disponíveis de forma geral na API
    • Saídas estruturadas via chamada de função podem ser usadas em todos os modelos que oferecem suporte a function calling
    • A opção de formato de resposta está disponível nos modelos mais recentes

Resumo do GN⁺

  • O novo recurso da OpenAI, saídas estruturadas, permite fazer a saída do modelo corresponder exatamente a um esquema JSON
  • Com isso, desenvolvedores podem executar com mais confiabilidade tarefas como busca de dados, resposta a perguntas e extração de dados
  • Há suporte nativo nos SDKs de Python e Node, o que facilita o desenvolvimento
  • Também há vários casos de uso adicionais, como extração de dados estruturados a partir de dados não estruturados
  • Usa a técnica de constrained decoding para restringir a saída do modelo e gerar apenas JSON válido

2 comentários

 
bluejoyq 2024-08-08

Que funcionalidade interessante.

 
GN⁺ 2024-08-07
Comentários no Hacker News
  • Construindo UI dinâmica e código com GPT-4o

    • Funciona de forma confiável usando o modo JSON
    • No GPT-4o-mini, isso deve ajudar a resolver problemas de formatação
    • No modo de chamada de função, a taxa de sucesso é menor do que no modo JSON
    • Há grande expectativa em relação a esse recurso
  • Principais mudanças no gpt-4o-2024-08-06

    • Os tokens de saída aumentaram de 4k para 16k
    • Redução de 50% no custo de entrada e de 33% no custo de saída
    • É uma mudança importante para usuários da API
  • Experiência usando o Structured Output do Outlines no vLLM

    • Oferece recursos mais avançados do que o Structured Output da OpenAI
    • Suporte limitado a tipos de campo
      • A OpenAI só oferece suporte a tipos básicos como String, Number e Boolean
      • O Outlines permite definir padrões com expressões regulares
    • Alto custo de configuração de schema e latência
      • vLLM e Outlines praticamente não têm custo
      • A OpenAI leva tempo para gerar gramáticas sem contexto
    • É um bom começo como primeiro passo da OpenAI, mas ainda precisa evoluir mais
  • Opiniões sobre desempenho de IA

    • Fazer a IA especificar o formato de saída é uma forma antiga de resolver esse problema
    • O processamento de linguagem natural e a capacidade de resolver problemas tiveram avanços impressionantes
    • Porém, é necessário um volume enorme de computação para obter esse resultado
  • Opiniões sobre a abordagem da OpenAI

    • Abandono da abordagem de fine-tuning para saída estruturada
    • O llama.cpp já implementava esse recurso há 1,5 ano
  • Confusão sobre a opção "strict: true"

    • Como esse é sempre o comportamento desejado, deveria ser o padrão
    • Aprendizado sobre técnicas de decodificação restrita
      • Podem aumentar a confiabilidade e reduzir a latência
  • Opinião de que codificar JSON de forma fixa no modelo vai na direção oposta da meta de AGI

  • Preocupações com efeito de lock-in ao usar recursos da OpenAI

    • Não é fácil migrar para outro LLM
    • Recomendado usar apenas quando um prompt em texto não for suficiente
  • Observação sobre erro de formato JSON

    • {“val{“:2} é um JSON válido
  • Dúvida sobre por que o nível mais alto precisa ser um objeto

    • É inconveniente ter que envolver arrays em um objeto