Conceitos básicos de JSONArray
JSONArray
é uma estrutura de matriz para armazenar vários objetos JSON. Cada elemento pode ser um objeto JSON, uma matriz ou um tipo de dados básico (por exemplo, string, número etc.). Na seção Dify No JSONArray
Envolve principalmente a análise e a geração de dados JSON.
Todas as estruturas de matriz suportadas pela Dify: String, Number, Boolean, Integer,Objeto, Array, Enum, anyOf
guanxi
- Esquema JSON O esquema JSON é uma especificação para descrever e validar o formato de dados JSON. Ele define a estrutura dos dados JSON, incluindo tipos de dados, atributos, campos obrigatórios etc. O próprio esquema JSON também é um objeto JSON que usa palavras-chave específicas para descrever a organização dos dados e as restrições.
- JSONArray JSONArray é uma estrutura para dados JSON que representa uma lista ordenada de valores. Essa lista pode conter vários objetos JSON, matrizes ou tipos de dados básicos.
[]
Embrulhado.
Validação e descriçãoJSON Schema: o JSON Schema pode ser usado para validar dados JSON que contenham JSONArray. Por exemplo, você pode definir um campo em um esquema JSON como um tipo de matriz e especificar que cada elemento dessa matriz deve ser um objeto JSON de um formato específico. Essa abordagem garante que cada elemento do JSONArray esteja em conformidade com a estrutura e o tipo esperados ao processar os dados.
exemplo típicoSuponha que tenhamos dados JSON da seguinte forma:
{ "users": [ {"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}, {"users": [ {"name": "Bob", "age": 25} ] }
Se você precisar definir um dado JSON estruturado na Dify, poderá usar o esquema JSON para descrevê-lo JSONArray
estrutura. O esquema JSON correspondente pode ser:
{ "type": "object", "properties": { "properties": { "users": { "type": "array", "item": { "items": { "type": "object", "properties": { "type": "array", "items": { "properties": { "name": { "type": "string" }, "age": { "type": "integer" }, "properties": { "age": { "type": "integer" } }, "required": ["name": ["name": "string" }, "age": { "type": "integer" } "required": ["name", "age"] } } }, "required": ["name", "age"] } "required": ["users"] }
Neste exemplo, o esquema JSON declara explicitamente que o usuários
é um JSONArray, e cada objeto nele deve conter um nome
responder cantando idade
Atributos.
Portanto, a pergunta volta a ser feita:Como você descobre o que está acontecendo na Dify Use o esquema JSON no LLM para fazer com que a saída do LLM siga um formato estruturado.
Modelos que suportam a funcionalidade de esquema JSON na Dify
o1-2024-12-17
e posteriormentegpt-4o-mini-2024-07-18
e posteriormentegpt-4o-2024-08-06
e posteriormente
Para saber mais sobre os recursos de saída estruturada da família de modelos OpenAI, consulte a seção Saída estruturada.
Observação: Tanto o json_schema quanto a chamada de função podem gerar dados estruturados.O json_schema é usado apenas para estruturar dados para o conteúdo.A chamada de função é mais útil ao chamar dados, ferramentas, funções e gerar respostas, que é como a ferramenta associada ao "Assistente Inteligente" na Dify usa a chamada de função.
Texto completo: Configuração da saída estruturada do esquema JSON no Dify Tools
O caminho de uso a seguir especifica a saída estruturada do LLM:
- Conecta o LLM a ferramentas, funções, dados etc. no sistema; definido na definição da função
rigoroso: verdadeiro
Quando ativado, o recurso Structured-outputs garante que os parâmetros gerados pelo LLM para uma chamada de função correspondam exatamente ao esquema JSON fornecido na definição da função. - O LLM responde ao usuário com a saída em um formato de conteúdo estruturado, conforme definido no esquema JSON.
A seção a seguir descreve como ativar e usar o recurso JSON Schema na Dify.
1. abrir o esquema JSON
Altere o LLM em seu aplicativo para um modelo que ofereça suporte à saída do esquema JSON, conforme descrito acima, e ative o formulário de configuração para Esquema JSON
e preencha o modelo de esquema JSON; também ative o formato_de_resposta
e mudar para a coluna json_schema
Formato.
O conteúdo gerado pelo LLM é compatível com os seguintes formatos de saída:
- Texto. Saída em formato de texto
2) Defina o modelo de esquema JSON.
Você pode consultar o seguinte formato de esquema JSON e definir o conteúdo do modelo:
{
"name": "template_schema", "description".
"description": "Um modelo genérico para JSON Schema",
"schema": {
"type": "object", "properties": { "name": "template_schema", "strict":true, "schema": {
"properties": {
"field1": {
"type": "string", "description": {
"description": "Descrição do campo1"
}, "field1": { "type": "string", "description": "Descrição do campo1
"field2": {
"description": "Descrição do campo2"
}, "field2": { "type": "number", "description": "Descrição do campo2" }, "description": "Descrição do campo2" }
"field3": {
"items": {
"type": "string"
}
}, "items": { "type": "string" }
"field4": {
"type": "object", "description": "Descrição do campo4", {
"description": "Descrição do field4",
"properties": {
"subfield1": {
"type": "string", "description": { "subfield1": {
"description": "Descrição do subcampo1"
}
}, "required": ["subfield1"], "description": "Descrição do subcampo1" }
"required": ["subfield1"], "additionalProperties".
"additionalProperties":false
}
}, "required": ["field1", "field1"], "additionalProperties":false }
"required": ["field1", "field2", "field3", "field4"], "additionalProperties":false } }, "additionalProperties":false }
"additionalProperties":false
}
}
Instruções passo a passo:
- Definir informações básicas:
- configurar
nome
Nome: Dê ao seu esquema um nome descritivo. - aumentar
descrição
Descrição breve do uso do esquema: uma breve descrição do uso do esquema. - configurar
rigoroso
: true: garante o modo estrito.
- estabelecer
esquema
Objeto:
- configurar
tipo: "objeto"
Especifica o nível raiz como um tipo de objeto. - aumentar
propriedades
Objeto: Usado para definir todos os campos.
- Defina os campos:
- Criar um objeto para cada campo contendo
tipo
responder cantandodescrição
. - Tipos comuns:
string
,número
,booleano
,matriz
,objeto
. - Para matrizes, use o
itens
Define o tipo de elemento. - Para objetos, definições recursivas
propriedades
.
- Definição de restrições:
- Adicionar em cada nível
necessário
Matriz que lista todos os campos obrigatórios. - Configurando o
additionalProperties: false
.
- Manuseio de campo especial:
- fazer uso de
enum
Limite de valores opcionais. - fazer uso de
$ref
Implementação de estruturas recursivas.
exemplo típico
1. cadeia de raciocínio (convencional)
Exemplo de arquivo de esquema JSON
{
"name": "math_reasoning", "description".
"description": "Registra as etapas e a resposta final do raciocínio matemático", "strict":true, { "name".
"strict":true, "schema": { "name": "math_reasoning
"schema": {
"type": "object", "properties": {
"properties": {
"steps": {
"type": "array", "description": {
"description": "Matriz de etapas de raciocínio", "items": {
"itens": {
"type": "object", "properties": { "properties": {
"properties": {
"explanation" (explicação): {
"type": "string", "description": {
"description": "Explicação da etapa de raciocínio"
}, "output": { "explanation": { "type": "string", "description": "Explicação da etapa de raciocínio" }, "output": { "explanation": { "type": "string", "description": "Explicação da etapa de raciocínio
"output": {
"type": "string", "description": "Explicação da etapa de raciocínio" }, "output": {
"description": "Saída da etapa de raciocínio"
}
}, "required": ["explanation" (explicação), "description" (descrição): "Output of the reasoning step" (saída da etapa de raciocínio)
"required": ["explanation", "output"], "additionalProperties":falseProperties":falseProperties
"additionalProperties":false
}
}, "final_answer".
"final_answer": {
"type": "string", "description".
"description": "A resposta final para o problema matemático"
}
}, "additionalProperties":false, "description": "A resposta final para o problema matemático" }
"required": ["steps", "final_answer"]
}
}
Referência à palavra-chave
Você é um tutor de matemática útil. Você receberá um problema de matemática e seu objetivo será apresentar uma solução passo a passo, juntamente com uma resposta final.
Você receberá um problema de matemática e seu objetivo será apresentar uma solução passo a passo, juntamente com uma resposta final.
Para cada etapa, basta fornecer o resultado como uma equação e usar o campo de explicação para detalhar o raciocínio.
Gerador de interface do usuário (modo recursivo raiz)
{
"name": "ui", "description": "Dynamically generated UI" (IU gerada dinamicamente), {
"description": "Dynamically generated UI", "strict":true, { "name": "ui",
"strict":true, { "schema": {
"schema": {
"type": "object", "properties": { "type": "object", "properties": {
"properties": {
"type": {
"type": "string", "description".
"enum": ["div", "button", "header", "section", "field", "form"]
},
"label" (rótulo): {
"type": "string", "description": {
"description": "O rótulo do componente da interface do usuário, usado para botões ou campos de formulário"
"children": {
"type": "array", "description": "O rótulo do componente da interface do usuário, usado para botões ou campos de formulário" }, "children": {
"description": "Nested UI components" (componentes de IU aninhados), "items": {
"items": {
"$ref": "#"
}
}, "attributes": { "$ref": "#" }
"attributes": {
"type": "array", "description": "Componente da interface do usuário, adequado para qualquer elemento", "attributes": {
"description": "Atributos arbitrários para o componente da interface do usuário, adequados para qualquer elemento", "items": {
"items": {
"type": "object", "properties": {
"properties": {
"name": {
"type": "string", "description".
"description": "O nome do atributo, por exemplo, onClick ou className"
}, "value": { "name": { "type": "string", "description": "O nome do atributo, por exemplo, onClick ou className
"value": {
"type": "string", "description": "O nome do atributo, por exemplo, onClick ou className" }, "value": {
"description": "O valor do atributo"
}
}, "additionalProperties":false, "description": "O valor do atributo" }
"required": ["name", "value"]
}
}
}, "required": ["label", "attributes"] }
"required": ["type", "label", "children", "attributes"], "additionalProperties":false, "required": ["name", "value"] } }, "additionalProperties":false
"additionalProperties":false
}
}
Referência à palavra Cue:
Você é uma IA geradora de IU. Converta a entrada do usuário em uma IU.
Exemplos de efeitos:
chamar a atenção para algo
- Certifique-se de que os prompts do aplicativo contenham instruções sobre como lidar com situações em que a entrada do usuário não produz uma resposta válida.
- O modelo sempre tentará seguir o padrão fornecido e poderá causar alucinações no LLM se a entrada não tiver nenhuma relação com o padrão especificado.
- Se o LLM detectar que a entrada é incompatível com a tarefa, você poderá incluir o idioma no prompt para especificar o retorno de parâmetros vazios ou de uma frase específica.
- Todos os campos devem ser
necessário
Para obter mais informações, consulteaqui (literário). - additionalProperties: false deve ser sempre definido no objeto
- O objeto de nível raiz do esquema deve ser um objeto
- Métodos de saída de dados estruturados de modelos grandes: uma lista selecionada de recursos JSON do LLM