ღია კოდის სპეციფიკაცია Codex-ის ორკესტრირებისთვის: Symphony
ავტორები: ალექს კოტლიარსკი, ვიქტორ ჟუ და ზაკ ბროკი
ექვსი თვის წინ, შიდა პროდუქტიულობის ინსტრუმენტზე მუშაობისას, ჩვენმა გუნდმა (იმ დროისთვის) საკამათო გადაწყვეტილება მიიღო: რეპოზიტორიუმი ადამიანის მიერ დაწერილი კოდის გარეშე აგვეგო. ჩვენი პროექტის რეპოზიტორიუმში ყოველი ხაზი Codex-ის მიერ უნდა შექმნილიყო.
ამის ასამუშავებლად, ჩვენი საინჟინრო სამუშაო პროცესი თავიდან ბოლომდე გადავაწყვეთ. ჩვენ შევქმენით აგენტებზე მორგებული რეპოზიტორია, განვახორციელეთ დიდი ინვესტიცია ავტომატიზებულ ტესტებსა და დამცავ მექანიზმებში და Codex-ს აღვიქვამდით, როგორც გუნდის სრულუფლებიან წევრს. ჩვენ ამ გზის დოკუმენტირება გავაკეთეთ ჩვენს წინა ბლოგ პოსტში საინჟინრო პროცესების მართვის შესახებ.
და ამან იმუშავა, მაგრამ შემდეგ მომდევნო შეფერხებას წავაწყდით: კონტექსტის გადართვას.
ამ ახალი პრობლემის გადასაჭრელად, შევქმენით სისტემა სახელწოდებით Symphony. Symphony(იხსნება ახალ ფანჯარაში) არის აგენტების ორკესტრატორი, რომელიც Linear-ის მსგავს პროექტების მართვის დაფას კოდირების აგენტებისთვის მართვის პანელად გარდაქმნის. ყველა ღია დავალებას ენიჭება აგენტი, აგენტები უწყვეტად მუშაობენ, ხოლო ადამიანები შედეგებს ამოწმებენ.
ეს პოსტი განმარტავს, როგორ შევქმენით Symphony — რამაც ზოგიერთ გუნდში ინტეგრირებული pull request-ების რაოდენობა 500%-ით გაზარდა — და როგორ უნდა გამოიყენოთ ის, რათა თქვენი საკუთარი საკითხების ტრეკერი მუდმივმოქმედ აგენტების ორკესტრატორად აქციოთ.
ინტერაქტიული პროგრამირების აგენტების შესაძლებლობების ზღვარი
მიუხედავად იმისა, რომ მათი გამოყენება უფრო მარტივი ხდება, პროგრამირების აგენტები — იქნება მათზე წვდომა ვებ-აპლიკაციების თუ CLI-ის მეშვეობით — კვლავ ინტერაქტიული ინსტრუმენტებია.
OpenAI-ში აგენტული სამუშაოს მასშტაბის ზრდასთან ერთად, ახალი სახის ტვირთი აღმოვაჩინეთ. თითოეული ინჟინერი ხსნიდა Codex-ის რამდენიმე სესიას, ანაწილებდა დავალებებს, განიხილავდა შედეგს, აძლევდა აგენტს მიმართულებას და ამ პროცესს იმეორებდა პრაქტიკაში, ადამიანების უმეტესობას ერთდროულად სამიდან ხუთამდე სესიის კომფორტულად მართვა შეეძლო, სანამ კონტექსტის გადართვა შემაწუხებელი გახდებოდა. ამ ზღვარს მიღმა პროდუქტიულობა შემცირდა. გვავიწყდებოდა, რომელი სესია რას აკეთებდა, ტერმინალებს შორის გადავდიოდით, რათა აგენტები ისევ სწორ გზაზე დაგვებრუნებინა, და ხარვეზებს ვასწორებდით ხანგრძლივად მიმდინარე დავალებებში, რომლებიც შუა გზაზე იჭედებოდა.
აგენტები სწრაფად მუშაობდნენ, თუმცა სისტემურ შეფერხებას ერთი ფაქტორი ქმნიდა: ადამიანის ყურადღება. ჩვენ ეფექტურად შევქმენით უაღრესად უნარიანი უმცროსი ინჟინრების გუნდი და შემდეგ ჩვენს ადამიან ინჟინრებს დავავალეთ მათი მიკრომართვა. ეს მიდგომა მასშტაბირებადი არ იყო.
პერსპექტივის ცვლილება
მივხვდით, რომ არასწორ რამეს ვუწევდით ოპტიმიზაციას. ჩვენ სისტემას კოდირების სესიებისა და შერწყმული PR-ების გარშემო ვაწყობდით, მაშინ როცა PR-ები და სესიები სინამდვილეში მხოლოდ მიზნის მიღწევის საშუალებაა. პროგრამული უზრუნველყოფის სამუშაო პროცესები უმეტესწილად საბოლოო პროდუქტების გარშემოა ორგანიზებული: საკითხები, ამოცანები, ტიკეტები, ეტაპები.
ამიტომ საკუთარ თავს ვკითხეთ, რა მოხდებოდა, თუ აგენტებზე პირდაპირ ზედამხედველობას შევწყვეტდით და სანაცვლოდ მათ მივცემდით საშუალებას, თვითონ აირჩიონ სამუშაო ჩვენი ამოცანების ტრეკერიდან.
ეს იდეა Symphony-ად იქცა — წერილობით სპეციფიკაციად, რომელიც აგენტური სამუშაოს ორგანიზებისთვის ზედამხედველის როლს ასრულებს.
ჩვენი საკითხების ტრეკერი აგენტების ორკესტრატორად გადავაქციეთ.
Symphony მარტივი კონცეფციით დაიწყო: ნებისმიერი ღია ამოცანა აგენტმა უნდა შეასრულოს. იმის ნაცვლად, რომ Codex-ის სესიები მრავალ ჩანართში (tabs) გვემართა, დავალებების ტრეკერი მართვის პანელად ვაქციეთ.
ამ კონფიგურაციაში Linear-ის თითოეული ღია საკითხი შეესაბამება აგენტის გამოყოფილ სამუშაო სივრცეს. Symphony მუდმივად აკონტროლებს დავალებების დაფას და უზრუნველყოფს, რომ თითოეულ აქტიურ დავალებაზე აგენტი მუშაობდეს ციკლში მის დასრულებამდე. თუ აგენტი ავარიულად ითიშება ან იჭედება, Symphony მას თავიდან რთავს. თუ ახალი სამუშაო გამოჩნდება, Symphony მას იღებს და სამუშაოს ორგანიზებას იწყებს.
ჩვენი სამუშაო პროცესი ტიკეტების სტატუსებზე ავაგეთ და ამოცანების მენეჯერი Linear მდგომარეობის მანქანად გამოვიყენეთ.
პრაქტიკაში, Symphony სამუშაოს სესიებისა და pull request-ებისგან აცალკევებს. ზოგიერთი საკითხი რამდენიმე PR-ს ქმნის სხვადასხვა რეპოზიტორიაში; ზოგი კი წმინდად კვლევითი ან ანალიტიკური ხასიათისაა და კოდის ბაზას საერთოდ არ ეხება.
მას შემდეგ, რაც სამუშაო პროცესის ასეთი აბსტრაქცია მოხდება, ტიკეტები შეიძლება გაცილებით დიდი მოცულობის დავალებების რეპრეზენტაცია.
ჩვენ რეგულარულად ვიყენებთ Symphony-ს კომპლექსური ფუნქციონალისა და ინფრასტრუქტურული მიგრაციების ორკესტრირებისთვის. მაგალითად, შეიძლება შევქმნათ დავალება, რომელშიც აგენტს ვთხოვთ, გააანალიზოს კოდების ბაზა, Slack ან Notion და მოამზადოს დანერგვის გეგმა. მას შემდეგ, რაც გეგმით კმაყოფილები ვიქნებით, აგენტი ქმნის ამოცანების ხეს, სამუშაოს ეტაპებად ყოფს და ამოცანებს შორის დამოკიდებულებებს განსაზღვრავს.
აგენტები მუშაობას მხოლოდ იმ ამოცანებზე იწყებენ, რომლებიც დაბლოკილი არ არის, ამიტომ ამ DAG-ისთვის (შესრულების ნაბიჯების თანმიმდევრობა) შესრულება ბუნებრივად და ოპტიმალურად მიმდინარეობს პარალელურ რეჟიმში. მაგალითად, React-ის განახლება მოვნიშნეთ დაბლოკილად, რადგან ის Vite-ზე მიგრაციაზე იყო დამოკიდებული. როგორც მოსალოდნელი იყო, აგენტებმა React-ის განახლება მხოლოდ Vite-ზე მიგრაციის დასრულების შემდეგ დაიწყეს.
აგენტებს ასევე შეუძლიათ თავად შექმნან სამუშაო. იმპლემენტაციის ან შემოწმების პროცესში ისინი ხშირად ამჩნევენ გაუმჯობესების შესაძლებლობებს, რომლებიც სცილდება მიმდინარე დავალების ფარგლებს: იქნება ეს წარმადობის პრობლემა, რეფაქტორინგის შესაძლებლობა თუ უკეთესი არქიტექტურა. ასეთ დროს, ისინი უბრალოდ არეგისტრირებენ ახალ დავალებას, რომლის შეფასება და დაგეგმვაც მოგვიანებით შეგვიძლია — ამ შემდგომი დავალებების დიდ ნაწილსაც ხშირად ისევ აგენტები ასრულებენ. როდესაც ჩვენ ამ პროცესს ზედამხედველობას ვუწევთ, აგენტები ორგანიზებულობას ინარჩუნებენ და სამუშაოს წინსვლას უზრუნველყოფენ.
მუშაობის ეს მიდგომა მნიშვნელოვნად ამცირებს ბუნდოვანი სამუშაოს დაწყებასთან დაკავშირებულ კოგნიტიურ დანახარჯს. აგენტის მიერ დაშვებული შეცდომაც კი სასარგებლო ინფორმაციაა, ჩვენთვის კი ამის დანახარჯი თითქმის ნულის ტოლია. ჩვენ შეგვიძლია ძალიან მცირე დანახარჯით შევქმნათ ტიკეტები, რათა აგენტმა პროტოტიპები ააგოს და სხვადასხვა მიმართულება გამოიკვლიოს, ხოლო ნებისმიერი გამოკვლევა, რომელიც არ მოგვეწონება, შეგვიძლია უარვყოთ.
რადგან ორკესტრატორი devbox-ებზე მუშაობს და არასოდეს ითიშება, ჩვენ შეგვიძლია დავალებები ნებისმიერი ადგილიდან დავამატოთ და ვიცოდეთ, რომ აგენტი მათ შეასრულებს. მაგალითად, ჩვენი გუნდის ერთ-ერთმა ინჟინერმა სამი მნიშვნელოვანი ცვლილება პირდაპირ საკუთარი ტელეფონით, Linear-ის აპლიკაციიდან განახორციელა მყუდრო კოტეჯიდან, უხარისხო Wi‑Fi-ის პირობებში.
მუშაობის ამ მეთოდმა კვლევისა და ძიების პროცესის ინტენსივობა გაზარდა
Symphony-სთან მუშაობის ეფექტებზე დაკვირვებისას, ყველაზე აშკარა ცვლილება გამომავალ შედეგში გამოიკვეთა. OpenAI-ს ზოგიერთ გუნდში, პირველი სამი კვირის განმავლობაში, მიღებული PR-ების რაოდენობა 500%-ით გაიზარდა. OpenAI-ის ფარგლებს გარეთ, Linear-ის დამფუძნებელმა კარი საარინენმა ხაზი გაუსვა შექმნილი სამუშაო სივრცეების რაოდენობის მკვეთრ ზრდას(იხსნება ახალ ფანჯარაში), Symphony-ს გამოშვებისთანავე. თუმცა, უფრო ღრმა ცვლილება ის არის, თუ როგორ აღიქვამენ გუნდები მუშაობას.
როდესაც ჩვენი ინჟინრები აღარ ხარჯავენ დროს Codex-ის სესიების ზედამხედველობაზე, კოდის შექმნისა და ცვლილების ეკონომიკა ფუნდამენტურად იცვლება თითოეული ცვლილების აღქმული ხარჯი მცირდება, რადგან აღარ ვდებთ ადამიანურ ძალისხმევას დანერგვის უშუალო პროცესში.
ამან შეცვალა ჩვენი ქცევა. Symphony-ში სპეკულაციური ამოცანების გაშვება ძალიან მარტივი გახდა. სცადეთ იდეა, შეისწავლეთ რეფაქტორინგი, შეამოწმეთ ჰიპოთეზა და დაიტოვეთ მხოლოდ ის შედეგები, რომლებიც პერსპექტიულად გამოიყურება.
ის ასევე აფართოებს იმ პირთა წრეს, ვისაც შეუძლია სამუშაოს დაწყება. ჩვენს პროდუქტ-მენეჯერსა და დიზაინერს ახლა უკვე შეუძლიათ, ფუნქციონალის დამატების მოთხოვნები პირდაპირ Symphony-ში დაარეგისტრირონ. მათ არ სჭირდებათ კოდის რეპოზიტორიუმის გახსნა ან Codex-ის სესიის მართვა. ისინი აღწერენ ფუნქციას და პასუხად იღებენ განხილვის პაკეტს, რომელიც მოიცავს ვიდეოგიდს, სადაც ნაჩვენებია, როგორ მუშაობს ფუნქცია რეალურ პროდუქტში.
Symphony ასევე გამოირჩევა დიდ მონორეპოზიტორიებში (როგორიც OpenAI-ში გვაქვს), სადაც PR-ის შერწყმის საბოლოო ეტაპი ნელი და მყიფეა. სისტემა აკვირდება CI-ს, საჭიროების შემთხვევაში ახდენს მონაცემთა ბაზის შეცვლას, აგვარებს კონფლიქტებს, ხელახლა უშვებს არასტაბილურ შემოწმებებს და, როგორც წესი, ცვლილებებს მთელი პროცესის განმავლობაში ახორციელებს. როდესაც ტიკეტი შერწყმის ეტაპს აღწევს,ჩვენ სრულიად დარწმუნებულები ვართ, რომ ცვლილება მთავარ მთავარ შტოში ადამიანის მუდმივი ზედამხედველობის გარეშე მოხვდება.
Symphony-ს დანერგვის შემდეგ, ჩვენ სამუშაოს დიდ ნაწილს აგენტებს ვავალებთ, თავად კი კონცენტრირებას უფრო რთულ და კვლევით დავალებებზე ვახდენთ.
პროგრესს თან ახლავს ახალი, განსხვავებული პრობლემები
ამ დონეზე მუშაობას თან ახლავს კომპრომისები. როდესაც აგენტების ინტერაქტიულად წარმართვიდან მათთვის სამუშაოს ტიკეტების დონეზე მინიჭებაზე გადავედით, დავკარგეთ შესაძლებლობა, მუდმივად მიგვემართა ისინი შესრულების პროცესში და საჭიროების შემთხვევაში მიმართულება შეგვესწორებინა. ზოგჯერ აგენტი ქმნიდა ისეთ შედეგს, რომელიც მიზანს სრულიად აცდენილი იყო. ეს სასარგებლო აღმოჩნდა — ამ წარუმატებლობებმა სისტემაში არსებული ხარვეზები გამოავლინა და დაგვეხმარა, ის უფრო მდგრადი გაგვეხადა.
შედეგის ხელით შესწორების ნაცვლად, დავამატეთ დამცავი მექანიზმები და უნარები, რათა აგენტებს შემდეგ ჯერზე წარმატებისთვის მიეღწიათ. დროთა განმავლობაში, ამან მიგვიყვანა იქამდე, რომ ჩვენს ტესტირების სისტემას ახალი შესაძლებლობები დავუმატეთ, როგორიცაა end-to-end ტესტების გაშვება, აპის მართვა Chrome DevTools-ის მეშვეობით და QA smoke ტესტების მართვა. ჩვენ მნიშვნელოვნად გავაუმჯობესეთ ჩვენი დოკუმენტაცია და დავაზუსტეთ, რას ნიშნავს კარგი შედეგი.
ყველა ამოცანა არ ერგება Symphony-ს მუშაობის სტილს. ზოგიერთი ამოცანა კვლავ მოითხოვს, რომ ინჟინრები უშუალოდ მუშაობდნენ Codex-ის ინტერაქტიულ სესიებთან, განსაკუთრებით არაერთმნიშვნელოვანი ამოცანები ან სამუშაო, რომელიც საღ განსჯასა და ექსპერტულ ცოდნას საჭიროებს. პრაქტიკაში, ეს, როგორც წესი, ყველაზე საინტერესო და სასიამოვნო ამოცანებია, რომლებზეც ჩვენი ინჟინრები სიამოვნებით ხარჯავენ დროს.
განსხვავება ისაა, რომ Symphony-ს შეუძლია რუტინული იმპლემენტაციის სამუშაოების ძირითადი ნაწილის შესრულება. ეს ინჟინრებს საშუალებას აძლევს, ერთ რთულ პრობლემაზე კონცენტრირდნენ ერთ ჯერზე, უფრო მცირე ამოცანებს შორის კონტექსტის მუდმივი გადართვის ნაცვლად.
ჩვენ ასევე გავიგეთ, რომ აგენტების მდგომარეობათა მანქანაში ხისტ კვანძებად განხილვა კარგად არ მუშაობს. მოდელები სულ უფრო ჭკვიანები ხდებიან და იმაზე დიდი პრობლემების გადაჭრა შეუძლიათ, ვიდრე იმ ჩარჩოებს შეეფერება, რომლებშიც მათ მოქცევას ვცდილობთ. ჩვენი აგენტური მუშაობის ადრეულ ვერსიებში საქმე მხოლოდ იმით შემოიფარგლებოდა, რომ Codex-ისთვის ამოცანის განხორციელება გვეთხოვა. ეს მიდგომა ზედმეტად შემზღუდველი აღმოჩნდა. Codex-ს სრულყოფილად შეუძლია როგორც PR-ის შექმნა, ასევე მიმოხილვის უკუკავშირის წაკითხვა და გათვალისწინება. ასე რომ, ჩვენ მას მივეცით ინსტრუმენტები —gh CLI, CI ჟურნალების წაკითხვის უნარები და ა.შ. — და ახლა შეგვიძლია Codex-ს ვთხოვოთ მეტის გაკეთება, მაგალითად, ძველი PR-ების დახურვა ან დასრულებული და მიტოვებული სამუშაოს შესახებ ანგარიშების მოძიება. ამ ტიპის დავალებები საწყისი ფუნქციის დანერგვის ჩარჩოს ფარგლებს ბევრად სცდებოდა.
საბოლოოდ, ჩვენ გადავედით აგენტებისთვის არა მკაცრი ინსტრუქციების, არამედ მიზნების დასახვაზე — ზუსტად ისე, როგორც კარგი მენეჯერი აძლევს დავალებას თავის გუნდის წევრს. მოდელების ძალა მათი მსჯელობის უნარიდან მოდის, ამიტომ მიაწოდეთ მათ ინსტრუმენტები და კონტექსტი და აცადეთ მუშაობა.
Symphony-ის გამოყენებით Symphony-ის შექმნა
როდესაც გახსნით Symphony-ის რეპოზიტორიუმს,(იხსნება ახალ ფანჯარაში) პირველი, რასაც შეამჩნევთ, არის ის, რომ Symphony ტექნიკურად მხოლოდ SPEC.md ფაილია: ეს არის პრობლემისა და განზრახული გადაწყვეტის აღწერა. კომპლექსური ზედამხედველობის სისტემის შექმნის ნაცვლად, ჩვენ განვსაზღვრეთ პრობლემა და განზრახული გადაწყვეტები და აგენტებს მაღალი დონის მართვის შესაძლებლობა მივეცით.
რეფერენსული იმპლემენტაცია Elixir-ზეა დაწერილი — რადგან, როცა კოდის დაწერა ფაქტობრივად უფასოა, საბოლოოდ შეგიძლიათ ენები მათი ძლიერი მხარეების მიხედვით შეარჩიოთ, მაგალითად, Elixir-ის კონკურენტული შესრულების შესაძლებლობების გამო — თუმცა ძირითადი იდეის გამოხატვა მარტივ Markdown დოკუმენტშიც შესაძლებელია. გირჩევთ, თქვენს რჩეულ კოდირების აგენტს სპეციფიკაცია მიუთითოთ და მას საკუთარი ვერსიის განხორციელება დაავალოთ.
Symphony-ის პირველი ვერსია უბრალოდ Codex-ის სესია იყო, რომელიც tmux-ში მუშაობდა, Linear-ს პერიოდულად ამოწმებდა და ახალი დავალებებისთვის ქვეაგენტებს უშვებდა. მუშაობდა, მაგრამ განსაკუთრებით საიმედო არ იყო. მეორე ვერსია ჩვენი მთავარი პროექტის რეპოზიტორიუმში იყო განთავსებული, რომელიც აგენტების გათვალისწინებით იყო შექმნილი. ჩვენ უკვე შევქმენით აგენტის აღჭურვა, რათა აგენტებისთვის მიგვეცა უნარები და კონტექსტი ამ საცავში მაღალი ხარისხის სამუშაოს შესასრულებლად, ამიტომ Symphony უბრალოდ ყველაფერს ერთმანეთთან აკავშირებს.
მას შემდეგ, რაც საბაზისო ფუნქციონალი უკვე არსებობდა, Symphony გამოვიყენეთ Symphony-ის შესაქმნელად.
როდესაც შიდა დემონსტრაციისას ვაჩვენეთ, როგორ მართავდა სისტემა ამოცანებს და როგორ ურთავდა შესრულებული სამუშაოს დამადასტურებელ ვიდეოს, რეაქცია ერთმნიშვნელოვნად დადებითი იყო: ჩვენი Symphony-ის პროექტის არხი გაიზარდა, ხოლო გუნდებმა მთელი ორგანიზაციის მასშტაბით მისი გამოყენება ბუნებრივად დაიწყეს. OpenAI-ში პროდუქტის შიდა ბაზართან თავსებადობა გარე გაშვების აუცილებელი წინაპირობაა. OpenAI-ში ნანახი გამოყენების საფუძველზე ცხადი გახდა, რომ Symphony კომპანიის ფარგლებს გარეთაც უნდა გაგვეზიარებინა.
ამიტომ, ეს იდეა ცალკე SPEC.md ფაილად გამოვყავით და Codex-ს მისი განხორციელება ვთხოვეთ. რეფერენსული იმპლემენტაციისთვის ავირჩიეთ Elixir — შედარებით ნიშური ენა, რომელსაც გააჩნია საუკეთესო პრიმიტივები პარალელური პროცესების ორკესტრირებისა და ზედამხედველობისთვის. Codex-მა Elixir-ის იმპლემენტაცია ერთჯერადად შექმნა, ამის შემდეგ კი ჩვენ როგორც სპეციფიკაციას, ისე იმპლემენტაციას იტერაციულად ვაუმჯობესებდით. სპეციფიკაციის დახვეწისთვის Codex-ს ვთხოვეთ, ის განეხორციელებინა რამდენიმე სხვა პროგრამირების ენაზე — TypeScript, Go, Rust, Java, Python — და მიღებული შედეგები გამოგვეყენებინა ბუნდოვანებების გამოსავლენად და სისტემის გასამარტივებლად. ეს ყველა ენაზე წარმატებით შესრულდა.
Symphony-ს შექმნის პროცესში ჩვენ მოვაშორეთ უამრავი თანმდევი სირთულე, როგორიცაა დამოკიდებულება კონკრეტულ რეპოზიტორიებზე ან Linear MCP-ზე. Symphony აღარ არის დამოკიდებული ჩვენს შიდა რეპოზიტორიუმებზე ან სამუშაო პროცესებზე. ძირითადი მიდგომა მარტივი გახდა:
თითოეული ღია დავალებისთვის უზრუნველყავით აგენტის მუშაობა მის ინდივიდუალურ სამუშაო სივრცეში
აქტიურ მუშაობაში დახმარებასთან ერთად, დეველოპმენტის სამუშაო ნაკადი ახლა უკვე ისეთი რამ არის, რაც აგენტებმა იციან და ზედმიწევნით მიჰყვებიან. დეველოპმენტის სამუშაო პროცესი — ამოცანაზე მუშაობა, რეპოზიტორიუმის შემოწმება, მისი in progress-ში გადაყვანა, რათა PM-მა იცოდეს, რომ მასზე მუშაობა მიმდინარეობს, PR-ის დამატება, მისი Review სტატუსში გადატანა, ვიდეოების მიმაგრება და ა.შ. — ახლა აღწერილია მარტივ WORKFLOW.md ფაილში. ეს ყველაფერი არის პროცესი, რომელსაც ადამიანები მიჰყვებოდნენ, თუმცა ის არასოდეს ყოფილა დოკუმენტირებული. იმის ნაცვლად, რომ ნაბიჯების ამ იმპლიციტურ ნაკრებს დავეყრდნოთ, ახლა მას დოკუმენტურად ვაფიქსირებთ, ხოლო Symphony უზრუნველყოფს, რომ აგენტები ამ პროცესს მიჰყვნენ. ეს საშუალებას გვაძლევს, შევქმნათ აგენტები, რომლებიც ჩვენთან ერთად მუშაობენ. თუ გადავწყვეტთ, რომ აგენტებმა დასრულებულ სამუშაოს თვითრეფლექსიაც უნდა დაურთონ, ამას დავამატებთ WORKFLOW.md-ში, და Symphony აგენტებს იმ ნაბიჯამდე მიიყვანს.
ჩვენ ასევე გამოვიყენეთ Codex აპის სერვერის რეჟიმში(იხსნება ახალ ფანჯარაში), რომელიც არის Codex-ის ჩაშენებული, უინტერფეისო (headless) მუშაობის რეჟიმი. ამ რეჟიმმა საშუალება მოგვცა, გაგვეშვა Codex და მასთან პროგრამულად გვქონოდა ურთიერთობა კარგად დოკუმენტირებული JSON-RPC API-ის მეშვეობით, მაგალითად ნაკადის დაწყება ან სვლებზე რეაგირება. ეს უფრო მოსახერხებელი და მასშტაბირებადია, ვიდრე Codex-თან CLI-ის ან პირდაპირი tmux სესიების საშუალებით ურთიერთობა.
Codex App Server-ი იდეალურად მოერგო ჩვენს გამოყენების სცენარს: ვიყენებთ Codex-ის მიერ მოწოდებულ გარემოს და ამავდროულად გვაქვს მოსარგები პარამეტრები და გაფართოების წერტილები, რომლებთანაც ინტეგრირება შეგვიძლია. მაგალითად, Linear-ის წვდომის token-ის ქვეაგენტებისთვის გამჟღავნების თავიდან ასაცილებლად, ვიყენებთ დინამიკური ინსტრუმენტის გამოძახებებს(იხსნება ახალ ფანჯარაში), რათა ხელმისაწვდომი გავხადოთ დაუმუშავებელი linear_graphql ფუნქცია, რომელიც Linear-ის მიმართ ნებისმიერ მოთხოვნას ასრულებს MCP-ზე დაყრდნობის ან წვდომის token-ის კონტეინერებისთვის გამჟღავნების გარეშე.
შემდგომი ნაბიჯები
Symphony, თავისი არსით, არის განზრახ მინიმალისტური ორკესტრირების შრე. მას ღია კოდის სახით ვაქვეყნებთ, რათა ვაჩვენოთ Codex App Server-ის შესაძლებლობები სამუშაო პროცესების სხვადასხვა ინსტრუმენტთან, მაგალითად, Linear-თან ინტეგრაციისას. შესაბამისად, არ ვგეგმავთ Symphony-ის დამოუკიდებელ პროდუქტად შენარჩუნებას. განიხილეთ ის, როგორც რეფერენსული იმპლემენტაცია. ისევე, როგორც ბევრმა დეველოპერმა თავიანთი კოდირების აგენტები harness engineering-ის პოსტისკენ მიმართა, რათა თავიანთი რეპოზიტორიუმების საწყისი სტრუქტურა შეექმნათ, ვიმედოვნებთ, რომ თქვენს რჩეულ კოდირების აგენტს Symphony-ის სპეციფიკაციის(იხსნება ახალ ფანჯარაში) და რეპოზიტორიუმის(იხსნება ახალ ფანჯარაში) გამოყენებას დაავალებთ, რათა თქვენს გარემოებზე მორგებული საკუთარი ვერსიები შექმნათ.
ძალა მოდის Codex-იდან და მისი აპლიკაციის სერვერიდან. Symphony იყო გზა Codex-ისა და Linear-ის დასაკავშირებლად — ორი ინსტრუმენტის, რომლებსაც ისედაც ვიყენებდით, რათა სამუშაო პროცესების მართვის პრობლემა გადაგვეჭრა. როდესაც კოდირების აგენტები მსჯელობასა და ინსტრუქციების შესრულებაში გაუმჯობესდებიან, ვვარაუდობთ, რომ სხვა კომპანიებში შემაფერხებელი ფაქტორი კოდის წერიდან აგენტური სამუშაოს მართვაზე გადაინაცვლებს. ყველაზე საინტერესო ის არის, რომ ამ კოდირების აგენტების სისტემებით ექსპერიმენტირების ბარიერი ახლა საოცრად დაბალია. უბრალოდ შეგიძლიათ Codex-ით შექმნათ სხვადასხვა რამ.
საზოგადოების განსაკუთრებული აღნიშვნა
ძალიან გვახარებს, რომ გამოშვებიდან სულ რამდენიმე კვირაში საინჟინრო საზოგადოება Symphony-ს იყენებს და 23 აპრილის მდგომარეობით მან GitHub-ის 15 ათასზე მეტი ვარსკვლავი(იხსნება ახალ ფანჯარაში) მოაგროვა.