Skip to content
Ръководство и прозрение

Структурирани изходи в многомоделен API Gateway: JSON схема, извиквания на инструменти и семантични предпазни огради

Практичен модел на адаптер за надеждни структурирани изходи в множество доставчици на LLM: нормализиране на схеми, валидиране на отговорите, обработка на извиквания на инструменти, грешки в регистрационните файлове и блокиране на небезопасни действия, преди да достигнат производствените работни потоци.

Подканването на модел да „върне JSON“ не е производствен договор. Може да произведе валиден JSON с грешно изброяване, да пропусне задължително бизнес правило или уверено да поиска действие, което потребителят никога не е упълномощил. В работен процес с множество доставчици проблемът става по-труден: всеки доставчик излага различни механизми за структуриран изход и използване на инструменти и всеки поддържа само част от JSON вселената на схемата.

Практическото решение не е една магическа подкана. Това е модел на слоест шлюз: нормализирайте желаната от програмиста схема, преведете я във формати за структуриран изход или извикване на инструменти, където е възможно, проверете върнатия обект и приложете семантични предпазни парапети преди всякакъв страничен ефект.

Това ръководство разделя три различни цели, които често се смесват:

  • Валидност на синтаксиса: отговорът е анализируем JSON.
  • Валидност на схемата: JSON съответства на задължителните полета, типове, изброявания и структурни правила.
  • Бизнес коректност: обектът е безопасен, верен на потребителските намерения и валиден за действието надолу по веригата.

Повреда в производството: валидно JSON, грешно действие

Помислете за автоматизирана поддръжка, която насочва входящите билети:

{
  "ticket_id": "t_481",
  "category": "billing",
  "priority": "urgent",
  "action": "refund_customer",
  "amount_usd": 499
}

Този обект е синтактично валиден. Може дори да предаде проста схема, ако action е низ и amount_usd е число. Но все още може да е грешно. Може би клиентът е поискал само копие от фактура. Може би възстановяванията над $100 изискват одобрение от мениджъра. Може би потребителят изобщо не е упълномощен да задейства възстановяване на средства.

Структурираните изходи намаляват неуспешните анализи. Те не заместват оторизацията, проверките на правилата, проверките на инвентара, проверките на цените, идемпотентността или човешко потвърждение за рискови операции.

Факти: какво обещават и какво не обещават структурираните изходни режими на доставчика

Пейзажът на доставчика се променя бързо, но няколко стабилни факта са от значение за архитектурата:

    Режимът
  • JSON може да помогне да се създаде валиден JSON, но валидният JSON не е същото като съответствие с конкретна схема.
  • Собствените за доставчик режими на структурирани изходни данни са предназначени да подобрят придържането към схемата, но обикновено поддържат само подмножество от JSON схема.
  • Извикването на инструмент обикновено е по-подходящо за действия от свободната форма JSON, защото моделът избира деклариран инструмент и връща структурирани аргументи, докато приложението остава отговорно за изпълнението.
  • Различните доставчици излагат различни договори. Един може да използва строг JSON формат на отговор на схема, друг може да използва схеми за въвеждане на инструмент, а трети може да изисква резервен вариант за валидиране и повторен опит.
  • Дори изходът, валиден за схема, може да бъде семантично грешен, преди да достигне база данни, работен процес или платено действие.

Архитектурното значение е просто: OpenAI-съвместим API може да стандартизира клиентския интерфейс, но нивото на надеждност все още трябва да разбира възможностите на доставчика и да валидира изходните данни след генерирането.

Препоръчителна архитектура: адаптерът за структуриран изход

Използвайте адаптер от страната на шлюза между кода на приложението и API на доставчика. Приложението изпраща едно намерение за схема. Шлюзът картографира това намерение към най-силния поддържан механизъм на доставчика.

1. Приемете една нормализирана заявка от приложението

Клиентът не трябва да се нуждае от отделни пътеки на код за всеки доставчик. Практическият плик за заявка включва предпочитанията за модела, въвеждането на задачата, схемата, метаданните на схемата и нивото на риск:

{
  "model": "auto:accurate",
  "messages": [
    {"role": "system", "content": "Extract invoice fields. Do not infer missing values."},
    {"role": "user", "content": "Invoice text..."}
  ],
  "structured_output": {
    "schema_id": "invoice_extraction",
    "schema_version": "2026-08-01",
    "mode": "json_schema",
    "strict": true,
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": ["invoice_number", "vendor_name", "total", "currency", "due_date"],
      "properties": {
        "invoice_number": {"type": "string"},
        "vendor_name": {"type": "string"},
        "total": {"type": "number", "minimum": 0},
        "currency": {"type": "string", "enum": ["USD", "EUR", "GBP"]},
        "due_date": {"type": "string", "format": "date"},
        "confidence": {"type": "number", "minimum": 0, "maximum": 1}
      }
    }
  },
  "metadata": {
    "workflow": "accounts_payable",
    "risk_level": "medium"
  }
}

Този договор дава на шлюза достатъчно информация, за да избере внедряване на доставчика, да изпълни валидиране и да регистрира значими данни за грешки.

2. Поддържане на матрица за възможности на доставчика

Шлюзът трябва да поддържа машинночетима матрица на възможностите, а не да разчита на предположения като „всички OpenAI-съвместими модели поддържат едно и също поведение на схемата“. Една полезна матрица включва:

  • Име на доставчик и модел.
  • Поддържа JSON режим.
  • Поддържа JSON формат на отговор на схема.
  • Поддържа извиквания на инструменти.
  • Поддържа режим на стриктна схема.
  • Известни JSON ограничения на поднабора на схемата.
  • Дали паралелните извиквания на инструменти са съвместими с режим на стриктна схема.
  • Резервно поведение, когато заявеният режим не се поддържа.

Примерен запис на възможност:

{
  "provider": "provider_a",
  "model": "model_x",
  "json_mode": true,
  "json_schema_response": true,
  "tool_calls": true,
  "strict_schema": true,
  "schema_limitations": ["no oneOf", "limited format validation"],
  "fallback": "reject_or_route_to_compatible_model"
}

Тази матрица трябва да бъде версияна и тествана. Когато доставчик промени поведението си или се добави нов модел, съвместимостта на структурирания изход трябва да бъде проверена преди производствения маршрут.

3. Превод на най-силния роден договор за доставчика

Адаптерът трябва да следва ясен ред на предпочитанията:

  1. Използване на стриктни структурирани изходи на доставчика, когато се поддържа от избрания модел и схема.
  2. Използване на извикване на инструмент за действия и подобни на функции задачи.
  3. Използвайте нестриктно структуриран изход или JSON режим с валидиране и повторни опити, когато строг режим не е наличен.
  4. Отхвърлете заявката, насочете към съвместим резервен модел или върнете отговор без действие за високорискови работни потоци.

Не понижавайте безшумно високорискова операция от режим на стриктна схема до „максимални усилия JSON“. Ако приложението поиска стриктно поведение и избраният доставчик не може да го поддържа, шлюзът трябва да направи това видимо чрез грешка, решение за маршрутизиране или изричен флаг за понижаване.

Три слоя за валидиране преди изпълнение

Слой 1: валидиране на анализ

Първо определете дали отговорът може да бъде анализиран в очакваната обвивка. Бърз отказ при неправилно образуван JSON, липсващи блокове за извикване на инструменти, съкратени отговори или смесен естествен език и JSON, когато договорът го забранява.

function parseStructuredResponse(raw) {
  try {
    return { ok: true, value: JSON.parse(raw) };
  } catch (error) {
    return { ok: false, failure_type: "parse_failure", error: String(error) };
  }
}

Извикванията на собствения инструмент на доставчика може да не изискват анализиране на необработен текстов блок, но все пак изискват валидиране на обвивка: моделът избрал ли е известен инструмент, предоставил ли е аргументи и спрял ли е за изпълнение на инструмента, както се очаква?

Слой 2: JSON Проверка на схемата

След това проверете обекта спрямо декларираната схема, като използвате валидатор от страната на сървъра. Направете това дори когато доставчикът твърди, че поддържа стриктна схема. Валидирането от страна на шлюза ви дава последователно регистриране на грешки, предпазва от грешки при интегриране и улавя несъвместимости надолу по веригата.

const validate = schemaValidator.compile(schema);
const valid = validate(object);

if (!valid) {
  return {
    ok: false,
    failure_type: "schema_failure",
    errors: validate.errors
  };
}

За преносимост, проектирайте схеми, като имате предвид общото подмножество:

  • Предпочитайте изрични type, required, properties, enum и additionalProperties: false.
  • Избягвайте сложни комбинации като дълбоко вложени oneOf, anyOf и условни схеми, освен ако не знаете, че целевият доставчик ги поддържа.
  • Поддържайте аргументите за действие малки и конкретни.
  • Използвайте низове за ID, дати и кодове, освен ако системите надолу по веригата не изискват друг тип.
  • Представете несигурността изрично с полета като confidence, missing_fields или requires_human_review.

Слой 3: семантично и бизнес валидиране

Накрая проверете дали структурираният резултат е правилен за задачата. Този слой е специфичен за домейна и не може да бъде възложен само на JSON схема.

За извличане на фактури семантичните проверки може да включват:

  • Общата сума е неотрицателна и съответства на договорените позиции в рамките на допустимото отклонение.
  • Валутата се показва в изходния документ.
  • Не е невъзможно крайният срок да е далеч в миналото или бъдещето.
  • Доставчикът съществува в списък с одобрени доставчици.
  • Доверието е достатъчно високо за автоматично въвеждане.

За квалификация на потенциален клиент проверките може да включват:

  • Избраният сегмент е един от активните сегменти на екипа по продажбите.
  • Заявеният бюджет не е измислен, когато потребителят не е предоставил такъв.
  • Действие „демонстрация на книга“ не се изпълнява, освен ако потребителят изрично не го поиска.

За автоматизация на партньор API проверките може да включват:

  • Профилът на дистрибутора е упълномощен да създаде искания клиент или ключ.
  • Заявеният лимит на разходите е в рамките на правилата на партньора.
  • Операцията има ключ за идемпотентност.
  • Действието се записва в журнал за проверка преди изпълнение.

Извиквания на инструмента: третирайте изхода на модела като заявка, а не като изпълнение

Извикването на инструмент е правилният модел, когато моделът трябва да поиска от приложението да направи нещо: създаване на билет, изпращане на Telegram бот команда, търсене на цени, актуализиране на клиентски запис или стартиране на работен процес.

Безопасен цикъл на инструмента изглежда така:

  1. Приложението декларира наличните инструменти и техните входни схеми.
  2. Моделът връща извикване на инструмент със структурирани аргументи.
  3. Шлюзът проверява името и аргументите на инструмента.
  4. Приложението проверява изискванията за оторизация, политика, идемпотентност и потребителско потвърждение.
  5. Само тогава приложението изпълнява инструмента.
  6. Резултатът от инструмента се изпраща обратно към модела, ако разговорът трябва да продължи.

Никога не приемайте извикване на инструмент като доказателство, че действието трябва да се случи. Отнасяйте се към него като към структурирано предложение. Приложението остава органът за странични ефекти.

Безопасна резервна стълба за работни процеси с множество модели

Шлюзът трябва да дефинира резервно поведение, преди да възникнат инциденти. Практичната стълба е:

  1. Основно: строг структуриран изход на предпочитания модел.
  2. Съвместим резервен вариант: друг модел, който поддържа същите строги изисквания към схемата.
  3. Проверка и повторен опит: доставчик без стриктна поддръжка, използван само когато рискът го позволява.
  4. Човешки преглед: подреждане на структурирания резултат и изходното съдържание за одобрение.
  5. Отговор без действие: обяснете, че системата не може безопасно да завърши операцията.

Повторните опити са полезни за форматиране или незначителни грешки в схемата, но те не са стратегия за безопасност. Ако обектът е семантично опасен, многократното подканване може да превърне правилното отхвърляне в опасен изпълним обект. За високорискови действия предпочитайте преразглеждане или отказ пред повтарящи се опити за принудителен успех.

Наблюдаемост: регистрирайте всяко решение за структуриран изход

Отказите в структурирания изход са оперативни сигнали. Регистрирайте ги с достатъчно подробности, за да подобрите маршрутизирането, схемите и подканите, без да излагате ненужно чувствително съдържание.

Препоръчителни полета:

  • schema_id и schema_version.
  • Доставчик и модел.
  • Заявен режим и действително използван режим.
  • Състояние на неуспешен анализ.
  • Състояние на грешка в схемата и грешки при валидиране.
  • Причина за неуспешно семантично валидиране.
  • Брой повторни опити.
  • Закъснение.
  • Използване на токени и цена.
  • Състояние на крайно действие: изпълнено, на опашка, отхвърлено или върнато на потребителя.
  • Екип, проект, API ключ или идентификатор на акаунт на партньор, където е подходящо.

Тези регистрационни файлове поддържат отстраняване на грешки, анализ на разходите, сравнение на доставчици и API управление на екипа. Те също така помагат да се отговори на въпроси като: „Коя версия на схема причинява най-много повторни опити?“ и „Кой резервен модел предава синтаксиса, но не успява да премине валидирането на бизнеса?“

Правила за версия на схема

Схемите са производствени интерфейси. Отнасяйте се към тях като към API договори.

  • Включете schema_id и schema_version в метаданните и регистрационните файлове на заявката.
  • Не променяйте тихо задължителните полета за съществуващи автоматизации.
  • Съхранявайте старите схеми налични, докато клиентите мигрират.
  • Добавете нови незадължителни полета, преди да ги направите задължителни.
  • Тествайте схеми срещу всеки доставчик и резервен модел в групата за маршрутизиране.
  • Запишете коя версия на схемата е използвана за всяко действие със страничен ефект.

Версионирането става особено важно за агенциите, дистрибуторите и автоматизацията на партньор API, където много клиенти надолу по веригата може да разчитат на стабилен структуриран договор.

Кога да не се изпълнява структуриран резултат

Използвайте твърдо спиране, когато се появи някое от следните условия:

  • Отговорът не може да се анализира.
  • Обектът е неуспешен JSON Проверка на схемата.
  • Стойността на enum не се поддържа или е измислена.
  • Количество, цена, дата или валута са невъзможни.
  • Резултатът противоречи на заявеното намерение на потребителя.
  • Моделът изразява ниска увереност или липсващи доказателства.
  • Потребителските инструкции са двусмислени.
  • Действието има странични ефекти и липсва потвърждение.
  • Акаунтът, екипът или ключът API не са оторизирани.
  • Отговорът на доставчика включва отказ или неотговор, свързан с безопасността.

Препоръки срещу прогнози

Препоръки: използвайте родни за доставчика структурирани изходи, когато има такива, валидирайте всеки отговор от страна на шлюза, предпочитайте извиквания на инструменти за действия, поддържайте матрица на възможностите, схеми на версиите и блокирайте странични ефекти, докато семантичните проверки не преминат.

Прогнози: поддръжката на доставчика за структурирани изходи вероятно ще стане по-силна и по-последователна, но преносимостта ще остане проблем за шлюза, тъй като семействата модели, подмножествата на схемите и циклите за извикване на инструменти няма да станат идентични за една нощ. Екипите, които изграждат валидиране, наблюдение и версия на схема сега, ще бъдат в по-добра позиция да приемат нови функции на доставчика, без да пренаписват всеки работен процес.

Контролен списък за приложимо внедряване

  1. Дефинирайте нормализиран формат на искане за структуриран изход за вашите приложения.
  2. Създайте матрица на възможностите на доставчика за всеки модел във вашия пул за маршрутизиране.
  3. Проектиране на схеми с помощта на преносим JSON поднабор от схеми.
  4. Превеждайте заявките към стриктни местни механизми на доставчика, когато се поддържат.
  5. Потвърдете анализируемостта, съответствието на схемата и бизнес коректността след генериране.
  6. Използвайте извиквания на инструменти за операции със страничен ефект.
  7. Изискване на оторизация, идемпотентност и потвърждение извън модела.
  8. Версия на схемата на регистрационния файл, доставчик, неуспешно валидиране, повторни опити, забавяне, цена и състояние на действие.
  9. Дефинирайте резервното поведение според нивото на риск на работния процес.
  10. Съхранявайте старите схеми налични, докато зависимите автоматизации не мигрират.

Практическата цел не е всеки модел да се държи еднакво. Целта е да се даде на разработчиците на приложения един стабилен договор, докато шлюзът се справя честно с различията между доставчиците. Структурираните изходи са необходима инфраструктура за надеждна автоматизация на AI, но производствената граница е валидаторът и нивото на правилата, които решават дали даден обект е безопасен за използване.

Свързано четене

FAQ

Често задавани въпроси

Режимът JSON достатъчен ли е за производствени структурирани изходи?
Режимът JSON може да намали неуспешните анализи, но сам по себе си не гарантира, че отговорът отговаря на вашата схема или бизнес правила. Използвайте валидиране на схемата и семантично валидиране, преди да приемете резултата.
Действията трябва ли да използват структурирани JSON отговори или извиквания на инструменти?
Използвайте призиви за действия на инструменти, когато е възможно. Извикването на инструмент дава на приложението структурирана заявка за валидиране, оторизиране и изпълнение. Моделът не трябва директно да извършва странични ефекти.
Какво трябва да направи шлюзът, когато доставчикът не поддържа стриктно структурирани изходи?
Той трябва да насочи към съвместим модел, изрично да понижи само когато рискът го позволява, да потвърди и да опита отново, ако е подходящо, или да изпрати задачата за проверка от човек. Не трябва тихо да третира слабите JSON ограничения като строги гаранции на схемата.
Защо е необходимо семантично валидиране, ако JSON схемата премине?
JSON Schema може да проверява формата, типовете, задължителните полета и някои ограничения. Той не може надеждно да определи дали обектът съответства на потребителското намерение, фирмената политика, правилата за оторизация, правилата за ценообразуване или осъществимостта в реалния свят.