notícias

Preciso e erro 0, insira o preço e ele quebrará! A API de anúncio oficial da OpenAI suporta saída estruturada, a precisão do JSON é de 100%

2024-08-07

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina



  Novo Relatório de Sabedoria

Editor: Departamento Editorial
[Introdução à Nova Sabedoria] Boas notícias para programadores! O modelo de API recém-lançado da OpenAI suporta saída estruturada, a taxa de correspondência do esquema JSON chega a 100% e o custo é imediatamente reduzido pela metade.
Ainda quebrando a cabeça para pensar em um monte de palavras rápidas e com dor de cabeça devido aos vários resultados de saída após uma única operação?
A OpenAI finalmente ouviu a voz das massas e forneceu aos desenvolvedores o tão esperado recurso número 1.
OpenAI anunciou hoje o lançamento de novos recursos, e a API ChatGPT agora suporta saída estruturada JSON.
JSON (JavaScript Object Notation) é o padrão da indústria para formatos de troca de arquivos e dados porque é fácil de ler para humanos e fácil de analisar para máquinas.
No entanto, o LLM geralmente funciona contra o JSON, muitas vezes produzindo alucinações, seja gerando respostas que seguem instruções apenas parcialmente ou gerando um monte de "livros celestiais" que não podem ser totalmente analisados.
Isso exige que os desenvolvedores usem diversas ferramentas de código aberto, experimentem diferentes prompts ou repitam solicitações para gerar o resultado desejado, o que é demorado e trabalhoso.
O recurso de saída estruturada, lançado hoje, resolve os problemas espinhosos acima e garante que a saída gerada pelo modelo corresponda ao esquema especificado em JSON.
A função de saída estruturada sempre foi o recurso número um solicitado pelos desenvolvedores. Ultraman também afirmou em seu tweet que esta versão foi lançada em resposta a solicitações dos usuários.
Os novos recursos lançados pela OpenAI realmente atingiram o coração de muitos desenvolvedores, e todos concordam que “Isso é um grande negócio”.
Muitas pessoas deixaram mensagens expressando seus elogios, chamando “Excelente!”
Alguns estão felizes e outros tristes. Esta atualização do OpenAI deixou as pessoas preocupadas com a possibilidade de engolir as startups.
No entanto, para usuários mais comuns, a questão que os preocupa mais é quando o GPT-5 será lançado. Quanto ao esquema JSON, "O que é isso?"
Afinal, sem as novidades do GPT-5, o DevDay da OpenAI neste outono pode ser muito mais silencioso do que no ano passado.

Garanta facilmente a consistência do esquema

Com a saída estruturada, você só precisa definir um esquema JSON, e a IA não será mais "intencional" e produzirá dados obedientemente de acordo com as instruções.
Além disso, a nova função não só torna a IA mais obediente, mas também melhora muito a confiabilidade do conteúdo de saída.
Na avaliação de rastreamento de esquema JSON complexo, o novo modelo gpt-4o-2024-08-06 com saída estruturada recebeu pontuação perfeita de 100%. Em comparação, gpt-4-0613 obteve pontuação inferior a 40%.
Na verdade, a função JSON Schema foi lançada pela OpenAI no DevDay do ano passado.
Agora, a OpenAI estendeu essa funcionalidade na API, garantindo que a saída gerada pelo modelo corresponda exatamente ao esquema JSON fornecido pelo desenvolvedor.
A geração de dados estruturados a partir de entradas não estruturadas é um dos principais casos de uso da inteligência artificial nas aplicações atuais.
Os desenvolvedores usam a API OpenAI para criar assistentes poderosos que podem obter dados e responder perguntas por meio de chamadas de função, extrair dados estruturados para entrada de dados e criar fluxos de trabalho de agente em várias etapas, permitindo que o LLM tome medidas.

Princípios técnicos

OpenAI adota uma abordagem dupla para melhorar a correspondência entre a saída do modelo e o esquema JSON.
Embora o desempenho do modelo tenha melhorado significativamente, atingindo 93% de precisão nos testes de benchmark, a incerteza inerente permanece.
Para garantir a estabilidade dos aplicativos criados pelos desenvolvedores, o OpenAI fornece um método de maior precisão para restringir a saída do modelo, alcançando assim 100% de confiabilidade.

Decodificação de restrição

OpenAI usa uma técnica chamada amostragem restrita ou decodificação restrita. Por padrão, o modelo gera saídas completamente irrestritas, potencialmente selecionando qualquer token do vocabulário como a próxima saída.
Essa flexibilidade pode levar a erros, como a inserção aleatória de caracteres inválidos ao gerar JSON válido.
Para evitar tais erros, OpenAI usa um método de decodificação de restrição dinâmica para garantir que o token de saída gerado sempre esteja em conformidade com o esquema fornecido.
Para conseguir isso, OpenAI converte o esquema JSON fornecido em uma gramática livre de contexto (CFG).
Para cada esquema JSON, o OpenAI calcula uma sintaxe que representa o esquema e acessa com eficiência os componentes pré-processados ​​durante a amostragem.
Essa abordagem não apenas torna a saída gerada mais precisa, mas também reduz atrasos desnecessários. A primeira solicitação de um novo esquema pode ter tempo de processamento adicional, mas as solicitações subsequentes são respondidas rapidamente por meio do mecanismo de cache.

Opções

Além do método CFG, outros métodos geralmente usam máquinas de estados finitos (FSM) ou expressões regulares para decodificação de restrições.
No entanto, esses métodos têm capacidades limitadas na atualização dinâmica de tokens válidos. Especialmente para estruturas de dados complexas aninhadas ou recursivas, o FSM costuma ser difícil de manusear.
O método CFG da OpenAI tem um bom desempenho ao expressar esquemas complexos. Por exemplo, o esquema JSON que suporta esquemas recursivos é implementado na API OpenAI, mas não pode ser expresso por meio de métodos FSM.

Economize metade do custo de insumos

A saída estruturada está disponível para todos os modelos que suportam chamadas de função, incluindo os modelos GPT-4o e GPT-4o-mini mais recentes, bem como modelos ajustados.
Este recurso está disponível na API Chat Completions, API Assistants e API Batch e é compatível com entrada visual.
Em comparação com a versão gpt-4o-2024-05-13, a versão gpt-4o-2024-08-06 também é mais econômica. Os desenvolvedores podem economizar 50% do custo no lado de entrada (US$ 2,50/token de 1 milhão). , economizando 33% do custo no final da produção (token de US$ 10,00/1 milhão).

Como usar saída estruturada

Existem dois formulários que podem ser usados ​​para introduzir saída estruturada na API:

chamada de função

A saída estruturada por meio de ferramentas pode ser obtida definindo strict: true na definição da função.
Este recurso está disponível em todos os modelos com ferramentas suportadas, incluindo todos os modelos gpt-4-0613 e gpt-3.5-turbo-0613 e superiores.
Quando a saída estruturada estiver habilitada, a saída do modelo corresponderá à definição da ferramenta fornecida.
Solicitação de exemplo:
Exemplo de saída:
{
  "table_name": "orders",
  "columns": ["id", "status", "expected_delivery_date", "delivered_at"],
  "conditions": [
    {
      "column": "status",
      "operator": "=",
      "value": "fulfilled"
    },
    {
      "column": "ordered_at",
      "operator": ">=",
      "value": "2023-05-01"
    },
    {
      "column": "ordered_at",
      "operator": "<",
      "value": "2023-06-01"
    },
    {
      "column": "delivered_at",
      "operator": ">",
      "value": {
        "column_name": "expected_delivery_date"
      }
    }
  ],
  "order_by": "asc"
}

Novas opções para o parâmetro response_format

Os desenvolvedores agora podem escolher se desejam a saída formatada por meio da nova opção json_schema de response_format.
Este recurso é útil quando o modelo não invoca ferramentas, mas responde ao usuário de forma estruturada.
Este recurso está disponível para os modelos GPT-4o mais recentes: gpt-4o-2024-08-06 e gpt-4o-mini-2024-07-18 lançados hoje.
Quando response_format for definido como strict:true, a saída do modelo corresponderá ao esquema fornecido.
Solicitação de exemplo:
Exemplo de saída:
{
  "steps": [
    {
      "explanation": "Subtract 31 from both sides to isolate the term with x.",
      "output": "8x + 31 - 31 = 2 - 31"
    },
    {
      "explanation": "This simplifies to 8x = -29.",
      "output": "8x = -29"
    },
    {
      "explanation": "Divide both sides by 8 to solve for x.",
      "output": "x = -29 / 8"
    }
  ],
  "final_answer": "x = -29 / 8"
}
Os desenvolvedores podem gerar respostas passo a passo usando resultados estruturados para orientar o resultado desejado.
De acordo com a OpenAI, os desenvolvedores não precisam validar ou tentar novamente respostas malformadas, e o recurso permite prompts mais simples.

Suporte SDK nativo

OpenAI afirma que seus SDKs Python e Node foram atualizados para oferecer suporte nativo à saída estruturada.
Fornecer um esquema ou formato de resposta a uma ferramenta é tão fácil quanto fornecer um objeto Pydantic ou Zod. O SDK da OpenAI pode converter tipos de dados em esquemas JSON suportados, desserializar automaticamente respostas JSON em estruturas de dados digitadas e analisar rejeições.
Além disso, o suporte de saída estruturada nativa também está disponível para response_format.

Outros casos de uso

Os desenvolvedores costumam usar modelos OpenAI para gerar dados estruturados para uma variedade de casos de uso.
Alguns outros exemplos incluem:
-Gerar dinamicamente a interface do usuário com base na intenção do usuário
Os desenvolvedores podem usar saída estruturada para criar aplicativos de geração de código ou UI.
Usando o mesmo response_format, diferentes UIs podem ser geradas com base na entrada do usuário.
Por exemplo, crie uma "Interface de login do jardineiro":
Ele é gerado com o seguinte código:
{
  "type": "div",
  "label": "",
  "children": [
    {
      "type": "header",
      "label": "",
      "children": [
        {
          "type": "div",
          "label": "Green Thumb Gardening",
          "children": [],
          "attributes": [{ "name": "className", "value": "site-title" }]
        },
        {
          "type": "div",
          "label": "Bringing Life to Your Garden",
          "children": [],
          "attributes": [{ "name": "className", "value": "site-tagline" }]
        }
      ],
      "attributes": [{ "name": "className", "value": "header" }]
    },
    {
      "type": "section",
      "label": "",
      "children": [
        {
          "type": "div",
          "label": "",
          "children": [
            {
              "type": "div",
              "label": "About Us",
              "children": [
                {
                  "type": "div",
                  "label": "At Green Thumb Gardening, we specialize in transforming your outdoor spaces into beautiful, thriving gardens. Our team has decades of experience in horticulture and landscape design.",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "about-description" }
                  ]
                }
              ],
              "attributes": [{ "name": "className", "value": "about-section" }]
            }
          ],
          "attributes": [{ "name": "className", "value": "content" }]
        }
      ],
      "attributes": [{ "name": "className", "value": "about-container" }]
    },
    {
      "type": "section",
      "label": "",
      "children": [
        {
          "type": "div",
          "label": "",
          "children": [
            {
              "type": "div",
              "label": "Our Services",
              "children": [
                {
                  "type": "div",
                  "label": "Garden Design",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                },
                {
                  "type": "div",
                  "label": "Plant Care & Maintenance",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                },
                {
                  "type": "div",
                  "label": "Seasonal Cleanup",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                },
                {
                  "type": "div",
                  "label": "Custom Landscaping",
                  "children": [],
                  "attributes": [
                    { "name": "className", "value": "service-item" }
                  ]
                }
              ],
              "attributes": [{ "name": "className", "value": "services-list" }]
            }
          ],
          "attributes": [{ "name": "className", "value": "content" }]
        }
      ],
      "attributes": [{ "name": "className", "value": "services-container" }]
    }
  ],
  "attributes": [{ "name": "className", "value": "landing-page" }]
}
- Separe as respostas finais do raciocínio de apoio ou comentários adicionais
Fornecer ao modelo um campo de cadeia de pensamento separado pode melhorar a qualidade final da resposta.
perguntar:
Saída estruturada:
{
  "reasoning_steps": [
    "First step is to compare the numbers 9.11 and 9.9.",
    "Both numbers have the same whole number part, which is 9.",
    "To compare the decimal parts, convert them to the same number of decimal places.",
    "9.11 has two decimal places: it is 9.11.",
    "9.9 has one decimal place: it can be rewritten as 9.90.",
    "Now, compare 9.11 and 9.90 by looking at the decimal parts.",
    "Compare 11 with 90.",
    "90 is greater than 11, so 9.90 is greater than 9.11."
  ],
  "answer": "9.9 is bigger than 9.11."
}
- Extraia dados estruturados de dados não estruturados
Por exemplo, instrua o modelo a extrair itens como tarefas, prazos e tarefas de notas de reuniões.
perguntar:
Saída estruturada:
{
  "action_items": [
    {
      "description": "Collaborate on optimizing the path planning algorithm",
      "due_date": "2024-06-30",
      "owner": "Jason Li"
    },
    {
      "description": "Reach out to industry partners for additional datasets",
      "due_date": "2024-06-25",
      "owner": "Aisha Patel"
    },
    {
      "description": "Explore alternative LIDAR sensor configurations and report findings",
      "due_date": "2024-06-27",
      "owner": "Kevin Nguyen"
    },
    {
      "description": "Schedule extended stress tests for the integrated navigation system",
      "due_date": "2024-06-28",
      "owner": "Emily Chen"
    },
    {
      "description": "Retest the system after bug fixes and update the team",
      "due_date": "2024-07-01",
      "owner": "David Park"
    }
  ]
}
Saída estruturada segura
A segurança é uma prioridade máxima para OpenAI – o novo recurso de saída estruturado aderirá às políticas de segurança existentes da OpenAI e ainda permitirá que os modelos rejeitem solicitações inseguras.
Para facilitar o desenvolvimento, há um novo valor de string de recusa nas respostas da API que permite aos desenvolvedores detectar programaticamente se um modelo gera rejeições em vez de uma saída que corresponda ao esquema.
Quando a resposta não contém uma rejeição e a resposta do modelo não é interrompida prematuramente (conforme indicado por finish_reason), a resposta do modelo produzirá de forma confiável um JSON válido que corresponda ao esquema fornecido.
Referências: