API-дегі Құрылымдалған нәтижелер таныстырылымы
Біз API-де Құрылымдалған нәтижелерді енгізіп жатырмыз — енді модель нәтижелері әзірлеуші ұсынған JSON Schema-ларға сенімді түрде сай келеді.

Өткен жылы DevDay іс-шарасында біз JSON режимін таныстырдық — бұл модельдерімізбен сенімді қолданбалар құрғысы келетін әзірлеушілер үшін пайдалы іргетас. JSON режимі жарамды JSON нәтижелерін жасауда модель сенімділігін жақсартқанымен, ол модель жауабы нақты бір схемаға сай келеді деп кепілдік бермейді. Бүгін біз API-де Құрылымдалған нәтижелерді ұсынып отырмыз, бұл — модель жасайтын нәтижелер әзірлеушілер ұсынған JSON Schema-ларға дәл сәйкес болуын қамтамасыз етуге арналған жаңа мүмкіндік.
Құрылымдалмаған енгізулерден құрылымдалған деректер жасау — бүгінгі қолданбалардағы ЖИ-дің негізгі қолдану жағдайларының бірі. Әзірлеушілер OpenAI API-ін деректерді алып, функция шақыру(жаңа терезеде ашылады) арқылы сұрақтарға жауап бере алатын қуатты ассистенттер құруға, деректер енгізуге арналған құрылымдалған деректерді шығаруға және LLM-дерге әрекет жасауға мүмкіндік беретін көпқадамды агенттік жұмыс ағындарын құруға пайдаланады. Әзірлеушілер бұл саладағы LLM (үлкен тілдік модель) шектеулерін open source құралдары, көмексөздер және модель нәтижелері өз жүйелерімен өзара әрекеттесу үшін қажет пішімдерге сәйкес келуі үшін сұрауларды қайта-қайта жіберу арқылы ұзақ уақыт бойы айналып өтіп келді. Құрылымдалған нәтижелер бұл мәселені OpenAI модельдерін әзірлеуші ұсынған схемаларға сәйкестендіру арқылы және модельдерімізді күрделі схемаларды жақсырақ түсінуге үйрету арқылы шешеді.
Күрделі JSON schema-ға бағынуды бағалау сынақтарымызда Құрылымдалған нәтижелермен бірге жаңа gpt-4o-2024-08-06 моделіміз мінсіз 100% көрсеткішке жетеді. Салыстыру үшін, gpt-4-0613 40%-дан төмен нәтиже көрсетеді.
Құрылымдалған нәтижелермен gpt-4o-2024-08-06 біздің бағалауларымызда 100% сенімділікке жетіп, нәтиже схемаларына мінсіз сәйкес келеді.
Біз API-де Құрылымдалған нәтижелерді екі түрде ұсынып отырмыз:
1. Функция шақыру: tools арқылы Құрылымдалған нәтижелер функция анықтамасының ішінде strict: true орнату арқылы қолжетімді. Бұл мүмкіндік құралдарды қолдайтын барлық модельдермен, соның ішінде gpt-4-0613 және gpt-3.5-turbo-0613 және одан кейінгі барлық модельдермен жұмыс істейді. Құрылымдалған нәтижелер қосылғанда, модель нәтижелері берілген құрал анықтамасына сәйкес болады.
2. response_format параметрі үшін жаңа опция: әзірлеушілер енді response_format параметрі үшін жаңа опция болып табылатын json_schema арқылы JSON Schema ұсына алады. Бұл модель құралды шақырмай, керісінше пайдаланушыға құрылымдалған түрде жауап берген кезде пайдалы. Бұл мүмкіндік ең жаңа GPT‑4o модельдерімізбен жұмыс істейді: бүгін шығарылған gpt-4o-2024-08-06 және gpt-4o-mini-2024-07-18. response_format strict: true параметрімен берілгенде, модель нәтижелері ұсынылған схемаға сәйкес болады.
Қауіпсіздік OpenAI үшін ең жоғары басымдықтардың бірі — жаңа Құрылымдалған нәтижелер мүмкіндігі қолданыстағы қауіпсіздік саясаттарымызға бағынады және модельге қауіпті сұраудан бас тартуға әлі де мүмкіндік береді. Әзірлеуді жеңілдету үшін API жауаптарында жаңа refusal жолдық мәні бар, ол әзірлеушілерге модель схемамен сәйкес келетін нәтиженің орнына бас тарту жасағанын бағдарламалық түрде анықтауға мүмкіндік береді. Жауапта бас тарту болмаса және модель жауабы мерзімінен бұрын үзілмесе (finish_reason арқылы көрсетілгендей), онда модель жауабы берілген схемаға сәйкес келетін жарамды JSON-ды сенімді түрде шығарады.
Біздің Python және Node SDK-ларымыз Құрылымдалған нәтижелерге арналған жергілікті қолдаумен жаңартылды. Құралдарға немесе жауап пішімі ретінде схема беру Pydantic не Zod нысанын бергендей оңай, ал SDK-ларымыз деректер түрін қолдау көрсетілетін JSON schema-ға түрлендіруді, JSON жауабын типтелген деректер құрылымына автоматты түрде десериализациялауды және бас тартулар туындаса, оларды талдауды өздері атқарады.
Төмендегі мысалдар функция шақырумен бірге Құрылымдалған нәтижелерге жергілікті қолдауды көрсетеді.
response_format үшін де жергілікті Құрылымдалған нәтижелер қолдауы бар.
Әзірлеушілер түрлі қолдану жағдайлары үшін құрылымдалған деректерді жасауға OpenAI модельдерін жиі пайдаланады. Қосымша мысалдар мыналарды қамтиды:
Мысалы, әзірлеушілер Құрылымдалған нәтижелерді код немесе UI жасайтын қолданбалар құру үшін пайдалана алады. Төмендегі мысалдардың барлығы бірдей response_format пайдаланады және пайдаланушы енгізуіне қарай әртүрлі UI жасау үшін қолданылуы мүмкін.
Сіз пайдаланушы интерфейсінің көмекшісісіз. Сіздің жұмысыңыз — пайдаланушыларға веб-сайт пен қолданба идеяларын визуализациялауға көмектесу.Жауаптың соңғы сапасын жақсарту үшін модельге ой қорытуға арналған бөлек өріс беру пайдалы болуы мүмкін.
Мысалы, модельге жиналыс жазбаларынан to-do тармақтарын, мерзімдерді және тағайындауларды шығаруды нұсқау.
JSON Schema-ға сәйкес келетін модель нәтижелерінің сенімділігін арттыру үшін біз екі бөліктен тұратын тәсіл қолдандық. Біріншіден, ең жаңа gpt-4o-2024-08-06 моделімізді күрделі схемаларды түсінуге және оларға сәйкес келетін нәтижелерді қалай жақсы жасауға болатынын меңгеруге үйреттік. Алайда модель мінез-құлқы табиғатынан детерминирленбеген — осы модельдің өнімділігі жақсарғанына қарамастан (біздің бенчмаркта 93%), ол әзірлеушілерге сенімді қолданбалар құру үшін қажет сенімділік деңгейіне жеткен жоқ. Сондықтан біз модель нәтижелерін шектеп, 100% сенімділікке жету үшін инженерлік, детерминирленген тәсілді де қолдандық.
Біздің тәсіл constrained sampling немесе constrained decoding деп аталатын техникаға негізделген. Әдепкі бойынша, модельдер нәтижелерді шығару үшін үлгіленгенде, оларға мүлде шектеу қойылмайды және олар келесі нәтиже ретінде сөздіктегі кез келген токенді таңдай алады. Дәл осы икемділік модельдерге қате жіберуге мүмкіндік береді; мысалы, тіпті ол жарамды JSON жасамайтын жағдайда да, олар әдетте кез келген уақытта ирек жақша токенін таңдауға ерікті. Жарамды нәтижелерді мәжбүрлі түрде шығарту үшін біз модельдерімізді қолжетімді барлық токендермен емес, берілген схемаға сәйкес жарамды болатын токендермен ғана шектейміз.
Іс жүзінде мұндай шектеуді енгізу қиын болуы мүмкін, себебі жарамды токендер модель нәтижесінің әр жерінде әртүрлі болады. Мысалы, бізде мынадай схема бар делік:
Нәтиженің басында жарамды болатын токендерге {, {“, { және т.б. жатады. Алайда модель {“val үлгісін таңдап қойғаннан кейін, { енді жарамды токен болмайды. Сондықтан бізге динамикалық шектеулі декодтауды іске асырып, қай токендердің жарамды екенін жауаптың басында алдын ала емес, әр токен жасалғаннан кейін анықтау керек.
Мұны істеу үшін біз берілген JSON Schema-ны контекстсіз грамматикаға (CFG) түрлендіреміз. Грамматика — тілді анықтайтын ережелер жиыны, ал контекстсіз грамматика — нақты ережелерге сай келетін грамматика. JSON мен JSON Schema-ны тіл ішіндегі ненің жарамды екенін анықтайтын ережелері бар нақты тілдер ретінде елестетуге болады. Ағылшын тілінде етістігі жоқ сөйлем жарамсыз болатыны сияқты, JSON-да да соңында артық үтір болуы жарамсыз.
Сондықтан әр JSON Schema үшін сол схеманы бейнелейтін грамматиканы есептеп, модель үлгілеуі кезінде оған оңай қол жеткізу үшін оның құрамдастарын алдын ала өңдейміз. Жаңа схемамен бірінші сұрауда кідіріс айыбының пайда болуының себебі де осы — үлгілеу кезінде тиімді пайдалана алатын осы артефактіні жасау үшін схеманы алдын ала өңдеуіміз керек.
Үлгілеу барысында әр токеннен кейін біздің inference engine бұрын жасалған токендер мен келесіде қай токендер жарамды екенін көрсететін грамматика ережелеріне сүйене отырып, келесіде қандай токендер шығарылуы мүмкін екенін анықтайды. Содан кейін осы токендер тізімін келесі үлгілеу қадамын mask жасау үшін қолданамыз, бұл іс жүзінде жарамсыз токендердің ықтималдығын 0-ге түсіреді. Схеманы алдын ала өңдегендіктен, мұны аз ғана қосымша кідіріспен тиімді орындау үшін кэштелген деректер құрылымын пайдалана аламыз.
Бұл мәселеге арналған баламалы тәсілдер шектеулі декодтау үшін көбіне ақырлы күй автоматтарын (FSM) немесе regex-терді (әдетте FSM арқылы іске асырылады) қолданады. Олар да әр токен жасалғаннан кейін қай токендердің жарамды екенін динамикалық түрде жаңартып отыратыны жағынан ұқсас жұмыс істейді, бірақ CFG тәсілінен кейбір маңызды айырмашылықтары бар. Атап айтқанда, CFG-лер FSM-дерге қарағанда тілдердің анағұрлым кең класын өрнектей алады. Іс жүзінде бұл жоғарыда көрсетілген value схемасы сияқты өте қарапайым схемалар үшін маңызды емес. Алайда ішіне ендірілген немесе рекурсивті деректер құрылымдары бар күрделірек схемалар үшін бұл айырмашылық мәнді деп санаймыз. Мысалы, FSM-дер әдетте рекурсивті түрлерді өрнектей алмайды, бұл FSM-ге негізделген тәсілдердің терең ендірілген JSON-дағы жақшаларды сәйкестендіруде қиналуы мүмкін екенін білдіреді. Төменде OpenAI API-де Құрылымдалған нәтижелермен қолдау көрсетілетін, бірақ FSM арқылы өрнектеу мүмкін болмайтын рекурсивті схеманың үлгісі берілген.
Әрбір UI элементінің түбір схемасына рекурсивті сілтеме жасайтын еркін еншілес элементтері бола алатынын ескеріңіз. Мұндай икемділікті CFG тәсілі қамтамасыз етеді.
Құрылымдалған нәтижелерді пайдаланғанда есте ұстайтын бірнеше шектеу бар:
- Құрылымдалған нәтижелер JSON Schema-ның тек бір бөлігін ғана қолдайды, толық мәлімет құжаттамамызда(жаңа терезеде ашылады) берілген. Бұл бізге мүмкін болған ең жақсы өнімділікті қамтамасыз етуге көмектеседі.
- Жаңа схемамен алғашқы API жауабында қосымша кідіріс болады, бірақ кейінгі жауаптар кідіріс айыбысыз жылдам болады. Себебі алғашқы сұрау кезінде біз жоғарыда көрсетілгендей схеманы өңдейміз де, кейін жылдам қайта пайдалану үшін осы артефактілерді кэшке сақтаймыз. Әдеттегі схемаларды алғашқы сұрауда өңдеу 10 секундтан аз уақыт алады, бірақ күрделірек схемалар бір минутқа дейін созылуы мүмкін.
- Егер модель қауіпті сұраудан бас тартуды таңдаса, ол схемаға бағынбауы мүмкін. Егер бас тартуды таңдаса, мұны көрсету үшін қайтарылатын хабарда
refusalboolean мәні true болып орнатылады. - Егер генерация аяқталмай тұрып
max_tokensмәніне немесе басқа тоқтау шартына жетсе, модель схемаға бағынбауы мүмкін. - Құрылымдалған нәтижелер модельдің барлық қателік түрлерінің алдын алмайды. Мысалы, модель JSON нысанының мәндерінің ішінде әлі де қате жіберуі мүмкін (мысалы, математикалық теңдеудегі бір қадамды қате беруі мүмкін). Егер әзірлеушілер қателер тапса, жүйелік нұсқауларда мысалдар беруді немесе тапсырмаларды қарапайым ішкі тапсырмаларға бөлуді ұсынамыз.
- Құрылымдалған нәтижелер параллель функция шақыруларымен үйлеспейді. Параллель функция шақыруы жасалғанда, ол берілген схемаларға сәйкес келмеуі мүмкін. Параллель функция шақыруды өшіру үшін
parallel_tool_calls: falseорнатыңыз. - Құрылымдалған нәтижелермен бірге берілген JSON Schema-лар деректерді мүлде сақтамау(жаңа терезеде ашылады) (ZDR) талаптарына сай келмейді.
Құрылымдалған нәтижелер бүгінде API-де жалпыға қолжетімді.
Функция шақырумен бірге Құрылымдалған нәтижелер API-дегі функция шақыруды қолдайтын барлық модельдерде қолжетімді. Бұған ең жаңа модельдеріміз (gpt-4o, gpt-4o-mini), gpt-4-0613 және gpt-3.5-turbo-0613 нұсқаларынан бастап әрі қарайғы барлық модельдер, сондай-ақ функция шақыруды қолдайтын кез келген fine-tuned модельдер кіреді. Бұл мүмкіндік Chat Completions API, Assistants API және Batch API-де қолжетімді. Функция шақырумен бірге Құрылымдалған нәтижелер көру енгізулерімен де үйлесімді.
Жауап пішімдерімен бірге Құрылымдалған нәтижелер gpt-4o-mini және gpt-4o-2024-08-06 модельдерінде және осы модельдер негізіндегі кез келген fine-tuned нұсқаларда қолжетімді. Бұл мүмкіндік Chat Completions API, Assistants API және Batch API-де қолжетімді. Жауап пішімдерімен бірге Құрылымдалған нәтижелер көру енгізулерімен де үйлесімді.
Жаңа gpt-4o-2024-08-06 нұсқасына ауысу арқылы әзірлеушілер gpt-4o-2024-05-13 нұсқасымен салыстырғанда енгізулерден 50% ($2.50/1M input tokens), ал нәтижелерден 33% ($10.00/1M output tokens) үнемдейді.
Құрылымдалған нәтижелерді қолдануды бастау үшін біздің құжаттамамызды(жаңа терезеде ашылады) қараңыз.
Құрылымдалған нәтижелер open source қауымдастығының тамаша жұмыстарына сүйеніп жасалды: атап айтқанда, outlines(жаңа терезеде ашылады), jsonformer(жаңа терезеде ашылады), instructor(жаңа терезеде ашылады), guidance(жаңа терезеде ашылады) және lark(жаңа терезеде ашылады) кітапханалары.
Автор
Негізгі үлес қосушылар
Chris Colby, Melody Guan, Michelle Pokrass, Ted Sanders, Brian Zhang
Алғыс
John Allard, Filipe de Avila Belbute Peres, Ilan Bigio, Owen Campbell-Moore, Chen Ding, Atty Eleti, Elie Georges, Katia Gil Guzman, Jeff Harris, Johannes Heidecke, Beth Hoover, Romain Huet, Tomer Kaftan, Jillian Khoo, Karolis Kosas, Ryan Liu, Kevin Lu, Lindsay McCallum, Rohan Nuttall, Joe Palermo, Leher Pathak, Ishaan Singal, Felipe Petroski Such, Freddie Sulit, David Weedon