Codex-ի օրկեստրացման բաց կոդով սպեցիֆիկացիա՝ Symphony
Հեղինակներ՝ Alex Kotliarskyi, Victor Zhu և Zach Brock
Վեց ամիս առաջ, երբ աշխատում էինք ներքին արտադրողականության գործիքի վրա, մեր թիմը կայացրեց (այն ժամանակվա բավականին հակասական) որոշում՝ կկառուցել մեր պահոցը առանց մարդու կողմից գրված կոդի։ Մեր նախագծի պահոցում յուրաքանչյուր տող պետք է գեներացվեր Codex-ի կողմից։
Որպեսզի դա աշխատի, մենք մեր ինժեներական աշխատանքային հոսքը վերաձևավորեցինք հիմքից։ Մենք կառուցեցինք ագենտների համար հարմար պահոց, զգալի ներդրում կատարեցինք ավտոմատացված թեստերում և պաշտպանիչ մեխանիզմներում, և Codex-ին վերաբերվեցինք որպես լիարժեք թիմակցի։ Այդ ուղին փաստագրել ենք մեր նախորդ բլոգային գրառման մեջ harness engineering-ի մասին։
Եվ դա աշխատեց, բայց հետո բախվեցինք հաջորդ խոչընդոտին՝ համատեքստի միջև հաճախակի անցումներին։
Այս նոր խնդիրը լուծելու համար մենք կառուցեցինք Symphony կոչվող համակարգը։ Symphony(բացվում է նոր պատուհանում)-ն ագենտների օրկեստրատոր է, որը Linear-ի նման նախագծերի կառավարման տախտակը վերածում է կոդավորման ագենտների կառավարման հարթակի։ Յուրաքանչյուր բաց առաջադրանք ստանում է ագենտ. ագենտներն աշխատում են շարունակաբար, իսկ մարդիկ վերանայում են արդյունքները։
Այս գրառումը բացատրում է, թե ինչպես ստեղծեցինք Symphony-ն, որի արդյունքում որոշ թիմերում միավորված կոդի առաջարկների (pull request) քանակն աճեց 500%-ով, և ինչպես այն օգտագործել՝ ձեր սեփական issue tracker-ը մշտապես ակտիվ ագենտների օրկեստրատորի վերածելու համար։
Ինտերակտիվ կոդավորման ագենտների սահմանը
Նույնիսկ երբ դրանք դառնում են ավելի հեշտ օգտագործելի, կոդավորման ագենտները՝ լինի վեբ հավելվածների միջոցով, թե CLI-ով, դեռևս ինտերակտիվ գործիքներ են։
Քանի որ OpenAI-ում ագենտային աշխատանքի ծավալը մեծանում էր, մենք հայտնաբերեցինք նոր տեսակի ծանրաբեռնվածություն։ Յուրաքանչյուր ինժեներ բացում էր մի քանի Codex սեսիա, նշանակում առաջադրանքներ, վերանայում արդյունքները, ուղղորդում ագենտին և կրկնում գործընթացը։ Գործնականում մարդկանց մեծ մասը կարողանում էր հարմարավետ կառավարել միաժամանակ երեքից հինգ սեսիա, մինչև համատեքստերի միջև անցումները դառնում էին ծանր։ Դրանից հետո արտադրողականությունը նվազում էր։ Մենք մոռանում էինք, թե որ սեսիան ինչ էր անում, անցնում էինք տերմինալից տերմինալ՝ ագենտներին ճիշտ ուղու վրա վերադարձնելու համար, և կարգաբերում էինք երկարատև առաջադրանքներ, որոնք կանգ էին առել ճանապարհի կեսին։
Ագենտները արագ էին, բայց մենք ունեինք համակարգային խոչընդոտ (bottleneck)՝ մարդկային ուշադրությունը։ Մենք փաստորեն ստեղծել էինք չափազանց ունակ կրտսեր ինժեներների թիմ, ապա մեր մարդկային ինժեներներին հանձնարարել էինք մանրամասն վերահսկել նրանց աշխատանքը։ Դա չէր կարող մասշտաբավորվել։
Տեսանկյան փոփոխություն
Մենք հասկացանք, որ սխալ բանն էինք օպտիմալացնում։ Մենք մեր համակարգը կառուցում էինք կոդավորման սեսիաների և միավորված PR-ների շուրջ, մինչդեռ PR-ներն ու սեսիաներն իրականում ընդամենը միջոց են նպատակին հասնելու համար։ Ծրագրային աշխատանքային հոսքերը հիմնականում կազմակերպված են առաքելիքների շուրջ՝ issue-ներ, առաջադրանքներ, տոմսեր, milestone-ներ։
Ուստի մենք մեզ հարց տվեցինք, թե ինչ կլինի, եթե դադարենք ագենտներին անմիջապես վերահսկել և փոխարենը թողնենք, որ նրանք աշխատանքը վերցնեն մեր առաջադրանքների թրեքերից։
Այդ գաղափարը վերածվեց Symphony-ի՝ գրավոր սպեցիֆիկացիայի, որը գործում է որպես վերահսկիչ՝ ագենտային աշխատանքը օրկեստրացնելու համար։
Մեր issue թրեկերը ագենտների օրկեստրատորի վերածելը
Symphony-ն սկսվեց պարզ գաղափարից. յուրաքանչյուր բաց առաջադրանք պետք է վերցվի և ավարտվի ագենտի կողմից։ Մի քանի ներդիրներում Codex սեսիաներ կառավարելու փոխարեն մենք մեր issue թրեկերը վերածեցինք կառավարման հարթակի։
Այս կառուցվածքում յուրաքանչյուր բաց Linear issue համապատասխանում է ագենտի առանձին աշխատատարածքին։ Symphony-ն անընդհատ հետևում է առաջադրանքների տախտակին և ապահովում է, որ յուրաքանչյուր ակտիվ առաջադրանքի համար ցիկլում աշխատի ագենտ, մինչև դրա ավարտը։ Եթե ագենտը խափանվում է կամ կանգ է առնում, Symphony-ն այն վերագործարկում է։ Եթե նոր աշխատանք է հայտնվում, Symphony-ն այն վերցնում է և սկսում է դրա կազմակերպումը։
Մենք կառուցեցինք մեր աշխատանքային հոսքը առաջադրանքների կարգավիճակների հիման վրա՝ օգտագործելով Linear առաջադրանքների կառավարիչը որպես վիճակային մեքենա։
Գործնականում Symphony-ն աշխատանքը տարանջատում է սեսիաներից և pull request-ներից։ Որոշ issue-ներ առաջացնում են մի քանի PR տարբեր պահոցներում, իսկ մյուսները զուտ հետազոտական կամ վերլուծական բնույթի են և ընդհանրապես չեն առնչվում կոդային բազային։
Երբ աշխատանքը այսպես է աբստրակցվում, տոմսերը կարող են ներկայացնել աշխատանքի շատ ավելի մեծ միավորներ։
Մենք Symphony-ն պարբերաբար օգտագործում ենք բարդ ֆունկցիաների և ենթակառուցվածքային միգրացիաների օրկեստրացման համար։ Օրինակ՝ կարող ենք առաջադրանք ստեղծել՝ խնդրելով ագենտին վերլուծել կոդային բազան, Slack-ը կամ Notion-ը և կազմել իրականացման պլան։ Երբ գոհ ենք պլանից, ագենտը ստեղծում է առաջադրանքների ծառ՝ աշխատանքը բաժանելով փուլերի և սահմանելով առաջադրանքների միջև կախվածությունները։
Ագենտները սկսում են աշխատել միայն այն առաջադրանքների վրա, որոնք արգելափակված չեն, ուստի այս DAG-ի համար (կատարման քայլերի հաջորդականություն) աշխատանքը բնականորեն և օպտիմալ կերպով ընթանում է զուգահեռ։ Ստորև բերված օրինակում մենք React-ի թարմացումը նշել էինք որպես արգելափակված՝ կախված Vite-ի միգրացիայից։ Ինչպես և սպասվում էր, ագենտները սկսեցին React-ի թարմացումը միայն այն բանից հետո, երբ Vite-ի միգրացիան ավարտվեց։
Ագենտները կարող են նաև ինքնուրույն ստեղծել աշխատանք։ Իրականացման կամ վերանայման ընթացքում նրանք հաճախ նկատում են բարելավման հնարավորություններ, որոնք դուրս են ընթացիկ առաջադրանքի շրջանակից՝ արտադրողականության խնդիր, վերակառուցման հնարավորություն կամ ավելի արդյունավետ ճարտարապետություն։ Այդ դեպքում նրանք պարզապես ստեղծում են նոր issue, որը մենք կարող ենք հետագայում գնահատել և պլանավորել․ այդ հետագա առաջադրանքներից շատերը նույնպես վերցվում են ագենտների կողմից։ Մինչ մենք վերահսկում ենք այս գործընթացը, ագենտները պահպանում են կազմակերպված աշխատանքը և ապահովում են աշխատանքի շարունակական առաջընթացը։
Այս ձևով աշխատելը կտրուկ նվազեցնում է երկիմաստ աշխատանքի մեկնարկի ճանաչողական ծախսը։ Եթե ագենտը ինչ-որ բան սխալ է անում, դա միևնույն է օգտակար տեղեկություն է, իսկ մեզ համար դրա արժեքը գրեթե զրոյական է։ Մենք կարող ենք շատ փոքր ծախսով տոմսեր ձևակերպել, որպեսզի ագենտը նախատիպավորի և ուսումնասիրի, և մերժել բոլոր այն ուսումնասիրությունները, որոնք մեզ չեն բավարարում։
Քանի որ օրկեստրատորը աշխատում է devbox-երում և երբեք չի դադարում, մենք կարող ենք առաջադրանքներ ավելացնել ցանկացած տեղից և վստահ լինել, որ ագենտը կվերցնի դրանք։ Օրինակ՝ մեր թիմի ինժեներներից մեկը իր հեռախոսի Linear հավելվածից կատարել է երեք նշանակալի փոփոխություն՝ հարմարավետ տնակից, անկայուն wifi կապով։
Այսպես աշխատելու արդյունքում հետազոտական աշխատանքի աճ
Symphony-ով աշխատանքի ազդեցությունը դիտարկելիս ամենաակնհայտ փոփոխությունը արդյունքն էր։ OpenAI-ի որոշ թիմերում առաջին երեք շաբաթվա ընթացքում մենք նկատեցինք միավորված PR-ների քանակի 6-ապատիկ աճ։ OpenAI-ից դուրս Linear-ի հիմնադիր Karri Saarinen-ը, Symphony-ի թողարկումից հետո, ընդգծել է ստեղծված աշխատատարածքների աճը(բացվում է նոր պատուհանում)։ Սակայն ավելի խորքային փոփոխությունն այն է, թե ինչպես են թիմերը մտածում աշխատանքի մասին։
Երբ մեր ինժեներներն այլևս ժամանակ չեն ծախսում Codex սեսիաները վերահսկելու վրա, կոդային փոփոխությունների տնտեսագիտությունը ամբողջովին փոխվում է։ Յուրաքանչյուր փոփոխության ընկալվող արժեքը նվազում է, որովհետև մենք այլևս մարդկային ջանք չենք ներդնում հենց իրականացման գործընթացը կառավարելու մեջ։
Սա փոխեց մեր վարքագիծը։ Symphony-ում փորձարարական առաջադրանքներ գործարկելը դարձել է շատ հեշտ։ Փորձիր գաղափար, ուսումնասիրիր refactor, ստուգիր հիպոթեզներ, և պահպանիր միայն այն արդյունքները, որոնք խոստումնալից են թվում։
Սա նաև ընդլայնում է, թե ով կարող է նախաձեռնել աշխատանքը։ Մեր պրոդուկտ մենեջերն ու դիզայները այժմ կարող են ֆունկցիոնալ պահանջներ անմիջապես ներկայացնել Symphony-ում։ Նրանց պետք չէ checkout անել պահոցը կամ կառավարել Codex սեսիա։ Նրանք նկարագրում են ֆունկցիան և ստանում վերանայման փաթեթ, որը ներառում է ֆունկցիայի աշխատանքի վիդեո ուղեցույցը իրական պրոդուկտի ներսում։
Symphony-ն նաև հատկապես լավ է աշխատում մեծ monorepo-ներում (ինչպիսին մենք ունենք OpenAI-ում), որտեղ PR-ի վերջնական միաձուլման փուլը դանդաղ և անկայուն է։ Համակարգը հետևում է CI-ին, անհրաժեշտության դեպքում rebase է անում, լուծում է կոնֆլիկտները, նորից փորձում է անկայուն ստուգումները և, ընդհանուր առմամբ, անցկացնում է փոփոխությունները pipeline-ի բոլոր փուլերով։ Երբ տոմսը հասնում է Merging, մենք մեծ վստահություն ունենք, որ փոփոխությունը կհայտնվի հիմնական branch-ում՝ առանց մշտական մարդկային միջամտության։
Առաջընթացը բերում է նոր, այլ խնդիրներ
Այս մակարդակում աշխատելը ունի իր սահմանափակումներն ու փոխզիջումները։ Երբ մենք անցանք ագենտներին ինտերակտիվ կերպով ուղղորդելուց դեպի նրանց տոմսերի մակարդակով առաջադրանքներ հանձնարարելը, կորցրեցինք աշխատանքի ընթացքում նրանց շարունակաբար ուղղորդելու և անհրաժեշտության դեպքում ընթացքը ճշգրտելու հնարավորությունը։ Երբեմն ագենտը ստեղծում էր մի բան, որը լիովին չէր համապատասխանում նպատակին։ Դա օգտակար էր. այդ ձախողումները բացահայտում էին համակարգի բացերը և օգնում էին այն դարձնել ավելի կայուն։
Արդյունքը ձեռքով շտկելու փոխարեն մենք ավելացրեցինք սահմանափակող և ուղղորդող մեխանիզմներ, ինչպես նաև հմտություններ, որպեսզի ագենտները հաջորդ անգամ կարողանան հաջողությամբ կատարել առաջադրանքը։ Ժամանակի ընթացքում սա մեզ հանգեցրեց նրան, որ նոր հնարավորություններ ավելացնել մեր harness-ում, օրինակ՝ end-to-end թեստերի գործարկում, հավելվածի կառավարում Chrome DevTools-ով և QA smoke թեստերի իրականացում։ Մենք էականորեն բարելավեցինք մեր փաստաթղթավորումը և ավելի հստակեցրինք, թե ինչպիսին պետք է լինի լավ արդյունքը։
Ամեն առաջադրանք չէ, որ համապատասխանում է Symphony-ի աշխատանքային ոճին։ Որոշ խնդիրներ դեռ պահանջում են, որ ինժեներները աշխատեն Codex-ի ինտերակտիվ սեսիաներում, հատկապես երկիմաստ խնդիրների դեպքում կամ այն աշխատանքների, որոնք պահանջում են խորը դատողական ունակություն և փորձառություն։ Գործնականում հենց դրանք են սովորաբար ամենահետաքրքիր և հաճելի առաջադրանքները, որոնք մեր ինժեներները նախընտրում են կատարել։
Տարբերությունն այն է, որ Symphony-ն կարող է ստանձնել սովորական իրականացման աշխատանքի մեծ մասը։ Սա թույլ է տալիս ինժեներներին կենտրոնանալ մեկ բարդ խնդրի վրա՝ առանց փոքր առաջադրանքների միջև մշատական համատեքստի փոփոխության։
Մենք նաև սովորեցինք, որ ագենտներին որպես վիճակային մեքենայի կոշտ հանգույցներ դիտարկելն արդյունավետ չի աշխատում։ Մոդելները ավելի խելացի են դառնում և կարող են լուծել ավելի մեծ խնդիրներ, քան այն շրջանակը, որի մեջ փորձում ենք նրանց տեղավորել։ Օրինակ՝ վաղ տարբերակներում GitHub ինտեգրացիաներն ամբողջությամբ արտաքին harness-ի մաս էին. Օրինակ՝ վաղ տարբերակներում GitHub ինտեգրացիաներն ամբողջությամբ արտաքին harness-ի մաս էին. վաղ տարբերակներում ակնկալվում էր, որ Codex-ը կկատարի միայն կոդում փոփոխություններ, իսկ գործընթացի մնացած մասը (փոփոխությունների ներկայացում, թեստերի գործարկում) սահմանվում էր կոդով։ Մեր վաղ ագենտային աշխատանքի տարբերակներում Codex-ից պարզապես խնդրում էինք իրականացնել առաջադրանքը։ Այդ մոտեցումը չափազանց սահմանափակող էր։ Codex-ը լիովին ունակ է ստեղծել մի քանի PR, ինչպես նաև կարդալ վերանայման մեկնաբանություններն ու արձագանքել դրանց։ Ուստի մենք նրան տվեցինք գործիքներ՝gh CLI, ինչպես նաև հմտություններ՝ CI log-երը կարդալու համար և այլն, և այժմ կարող ենք Codex-ին հանձնարարել ավելի լայն խնդիրներ, օրինակ՝ փակել հին PR-ները կամ ստանալ հաշվետվություններ ավարտված և լքված աշխատանքի վերաբերյալ։ Այս տիպի առաջադրանքները շատ հեռու էին սկզբնական ֆունկցիոնալ իրականացման շրջանակից։
Ի վերջո, մենք անցանք այն մոտեցմանը, որ ագենտներին տրամադրենք նպատակներ, ոչ թե խիստ սահմանված վիճակային անցումներ՝ նման այն ձևին, որով լավ մենեջերը նպատակ է տալիս իր թիմի անմիջական հաշվետուին։ Մոդելների ուժը նրանց տրամաբանելու կարողության մեջ է, ուստի անհրաժեշտ է նրանց տրամադրել գործիքներ և համատեքստ և թույլ տալ, որ ինքնուրույն աշխատեն։
Symphony-ով կառուցել Symphony
Երբ բացում եք Symphony պահոցը, առաջին բանը, որ նկատում եք, այն է, որ տեխնիկապես Symphony-ն պարզապես SPEC.md ֆայլ է՝ խնդրի և նախատեսվող լուծման սահմանում։ Բարդ վերահսկողության համակարգ կառուցելու փոխարեն մենք սահմանել ենք խնդիրը և նախատեսված լուծումները՝ ագենտներին տալով բարձր մակարդակի ուղղորդում։
Հղումային իրականացումը գրված է Elixir-ով, որովհետև երբ կոդը փաստորեն անվճար է, վերջապես կարող ես լեզուներ ընտրել դրանց ուժեղ կողմերի համար, օրինակ՝ Elixir-ի զուգահեռականությունը, բայց հիմնական գաղափարը կարելի է արտահայտել պարզ Markdown փաստաթղթում։ Մենք խրախուսում ենք ձեր սիրելի կոդավորման ագենտին ուղղել սպեցիֆիկացիային և թողնել, որ այն իրականացնի իր սեփական տարբերակը։
Symphony-ի առաջին տարբերակը պարզապես tmux-ում աշխատող Codex սեսիա էր, որը հարցումներ էր ուղարկում Linear-ին՝ նոր առաջադրանքների համար ստեղծելով ենթաագենտներ։ Այն աշխատում էր, բայց առանձնապես հուսալի չէր։ Երկրորդ տարբերակը տեղակայված էր մեր հիմնական նախագծի պահոցում, որը կառուցված էր ագենտներին հաշվի առնելով։ Մենք արդեն ստեղծել էինք ագենտների ենթակառուցվածքը, որպեսզի նրանց ապահովենք անհրաժեշտ հմտություններով ու համատեքստով՝ այս պահոցում բարձրորակ աշխատանք կատարելու համար, ուստի Symphony-ն պարզապես միավորում է այդ ամենը։
Երբ հիմնական ֆունկցիոնալությունն արդեն առկա էր, մենք օգտագործեցինք Symphony-ն՝ Symphony-ն կառուցելու համար։
Երբ մենք ներքին ցուցադրության ընթացքում ներկայացրեցինք համակարգը, որը կառավարում էր առաջադրանքները և կցում էր իր proof-of-work տեսանյութը, արձագանքը չափազանց դրական էր. մեր Symphony նախագծի ալիքը աճեց, և կազմակերպության տարբեր թիմեր սկսեցին այն ինքնաբուխ կերպով օգտագործել։ OpenAI-ում ներքին product-market fit-ը արտաքին թողարկման նախապայման է։ OpenAI-ում դիտարկված օգտագործման հիման վրա պարզ դարձավ, որ պետք է Symphony-ն տարածել նաև ընկերության սահմաններից դուրս։
Ուստի մենք գաղափարը առանձնացրինք առանձին SPEC.md-ում և խնդրեցինք Codex-ին այն իրականացնել։ Հղումային իրականացման համար ընտրեցինք Elixir-ը՝ համեմատաբար նիշային լեզու, որն ունի գերազանց պրիմիտիվներ զուգահեռ պրոցեսների օրկեստրացման և վերահսկման համար։ Codex-ը մեկ օրինակով կառուցեց Elixir իրականացումը, և դրանից հետո մենք շարունակեցինք իտերացնել թե՛ սպեցիֆիկացիան, թե՛ իրականացումը։ Սպեցիֆիկացիան հղկելու համար նույնիսկ խնդրեցինք Codex-ին այն իրականացնել մի քանի այլ լեզուներով՝ TypeScript, Go, Rust, Java, Python, և արդյունքներն օգտագործել երկիմաստությունները բացահայտելու և համակարգը պարզեցնելու համար։ Այն հաջողությամբ իրականացվեց բոլոր լեզուներով։
Codex-ը մշակելու ընթացքում մենք հեռացրինք զգալի քանակությամբ ոչ էական բարդություն, օրինակ՝ կախվածությունները կոնկրետ պահոցներից կամ Linear MCP-ից։ Symphony-ն այլևս կախված չէ մեր ներքին պահոցներից կամ աշխատանքային հոսքերից։ Հիմնական մոտեցումը դարձավ պարզ.
Յուրաքանչյուր բաց առաջադրանքի համար ապահովիր առանձին աշխատատարածքում գործող ագենտ։
Ակտիվ աշխատանքին օգնելուց բացի, մշակման աշխատանքային հոսքն այժմ նաև մի բան է, որին ագենտները ծանոթ են և հետևում են։ Մշակման աշխատանքային հոսքը՝ առաջադրանքի վրա աշխատել, պահոցը վերցնել, այն դնել ընթացքի մեջ, որպեսզի PM-ը իմանա, որ դրա վրա աշխատում են, ավելացնել PR-ը, տեղափոխել այն վերանայման կարգավիճակ, կցել տեսանյութեր և այլն, այժմ ամփոփված է պարզ WORKFLOW.md ֆայլում։ Այս ամենը գործընթացների շարք էր, որին մարդիկ հետևում էին, սակայն այն երբեք փաստաթղթավորված չէր։ Այս ոչ բացահայտ քայլերի շարքին ապավինելու փոխարեն մենք այժմ այն փաստաթղթավորում ենք, և Symphony-ն ապահովում է, որ ագենտները հետևեն դրան։ Սա մեզ թույլ է տալիս կառուցել ագենտներ, որոնք աշխատում են մեզ հետ կողք կողքի։ Եթե որոշենք, որ ագենտները պետք է նաև ավարտված աշխատանքի համար ինքնաարտացոլում կցեն, մենք դա կավելացնենք WORKFLOW.md-ին, և Symphony-ն ագենտներին կուղղորդի այդ քայլին։
Մենք նաև կարողացանք օգտագործել Codex-ը app server mode(բացվում է նոր պատուհանում)-ում՝ Codex-ի ներկառուցված առանց միջերեսի ռեժիմում։ Այս ռեժիմը մեզ թույլ տվեց գործարկել Codex-ը և ծրագրային եղանակով հաղորդակցվել դրա հետ լավ փաստաթղթավորված JSON-RPC API-ի միջոցով՝ օրինակ թել սկսել կամ հերթերի փոփոխություններին արձագանքելիս։ Սա շատ ավելի հարմար և մասշտաբավորվող տարբերակ է, քան փորձել շփվել Codex-ի հետ CLI-ի կամ կենդանի tmux սեսիաների միջոցով։
Codex App Server-ը կատարյալ համապատասխանեց մեր օգտագործման դեպքին. մենք օգտվում ենք այն կոդային միջավայրից, որը տրամադրում է Codex-ը, միաժամանակ ունենալով կարգավորիչներ և միացման կետեր։ Օրինակ՝ Linear հասանելիության թոքենը ենթաագենտներին չբացահայտելու համար մենք օգտագործում ենք դինամիկ գործիքային կանչեր(բացվում է նոր պատուհանում), որպեսզի բացենք հում linear_graphql ֆունկցիան, որը կատարում է կամայական հարցումներ Linear համակարգի նկատմամբ՝ առանց MCP-ի վրա հենվելու կամ հասանելիության թոքենը կոնտեյներներին բացահայտելու։
Ինչ է տեղի ունենում հետո
Symphony-ն միտումնավոր նվազագույն օրկեստրացիայի շերտ է։ Մենք այն դարձնում ենք բաց կոդով՝ ցույց տալու համար Codex App Server-ի ուժը, երբ այն զուգակցվում է տարբեր աշխատանքային հոսքի գործիքների, օրինակ՝ Linear-ի հետ։ Այդ պատճառով մենք չենք նախատեսում Symphony-ն պահպանել որպես առանձին արտադրանք։ Դիտարկեք այն որպես հղումային իրականացում։ Նմանապես, ինչպես շատ ծրագրավորողներ իրենց կոդավորման ագենտներին ուղղեցին harness engineering-ի գրառմանը՝ իրենց պահոցների կառուցվածքը ձևավորելու համար, մենք հույս ունենք, որ դուք ձեր սիրելի կոդավորման ագենտին կուղղեք Symphony-ի սպեցիֆիկացիային(բացվում է նոր պատուհանում) և պահոցին(բացվում է նոր պատուհանում), որպեսզի կառուցեք ձեր միջավայրերին հարմարեցված սեփական տարբերակները։
Ուժը գալիս է Codex-ից և դրա հավելվածի սերվերից։ Symphony-ն միջոց էր կապելու Codex-ը և Linear-ը՝ երկու գործիքներ, որոնք մենք արդեն օգտագործում էինք աշխատանքի կառավարման խնդիրը լուծելու համար։ Քանի որ կոդավորման ագենտներն ավելի լավ են դառնում հիմնավորելու և հրահանգներին հետևելու մեջ, մենք ենթադրում ենք, որ այլ ընկերություններում bottleneck-ը նույնպես կտեղափոխվի կոդ գրելուց դեպի ագենտային աշխատանքի կառավարում։ Հետաքրքիրն այն է, որ այս կոդավորման ագենտային համակարգերի հետ փորձարկման շեմը հիմա զարմանալիորեն ցածր է։ Դուք կարող եք պարզապես բաներ կառուցել Codex-ով։
Համայնքի հիշատակումներ
Շատ ոգևորիչ է տեսնել, որ թողարկումից հետո անցած շաբաթների ընթացքում ինժեներական համայնքը օգտագործում Symphony-ն թողարկումից հետո անցած շաբաթների ընթացքում․ ապրիլի 23-ի դրությամբ այն արդեն հավաքել է ավելի քան 15K GitHub աստղ(բացվում է նոր պատուհանում)։