Codex найрал хөгжмийн нээлттэй эхийн тодорхойлолт: Symphony
Алекс Котлиарский, Виктор Жу болон Зак Брок нар
Зургаан сарын өмнө манай баг дотоод бүтээмжийн хэрэгсэл дээр ажиллаж байхдаа (тухайн үед) маргаантай шийдвэр гаргасан: бид репозитороо хүний бичсэн кодгүйгээр бүтээх болно. Манай төслийн репозитор дахь мөр бүрийг Codex үүсгэх ёстой байсан.
Үүнийг амжилттай болгохын тулд бид инженерийн ажлын урсгалыг шинээр нь шинэчилсэн. Бид агентэд ээлтэй репозитор бүтээж, автоматжуулсан тестүүд болон хамгаалалтын хашлагад ихээхэн хөрөнгө оруулж, Codex-т бүрэн эрхт багийн хамтрагчийн хувиар хандсан. Бид энэ аяллыг морины инженерчлэлийн талаарх өмнөх блог нийтлэлдээ баримтжуулсан.
Энэ нь ажилласан ч бид дараагийн саад бэрхшээлтэй тулгарсан: контекст солих.
Энэ шинэ асуудлыг шийдэхийн тулд бид Symphony нэртэй систем бүтээсэн. Symphony(шинэ цонхонд нээгдэнэ) бол Linear гэх мэт төслийн удирдлагын самбарыг код бичих агентуудын хяналтын хавтгай болгон хувиргадаг агент найруулагч юм. Нээлттэй даалгавар бүрт агент гарч ирдэг, агентууд тасралтгүй ажилладаг бөгөөд хүмүүс үр дүнг нь хянадаг.
Энэ нийтлэлд бид Symphony-г хэрхэн бүтээсэн—үүний үр дүнд зарим багийн хувьд амжилттай нэгтгэгдсэн pull request 500%-иар нэмэгдсэн—мөн үүнийг ашиглан өөрийн issue tracker-ийг үргэлж ажиллах агент зохицуулагч болгон хувиргах талаар тайлбарлана.
Интерактив код бичих агентуудын дээд хязгаар
Ашиглахад хялбар болсон ч вэб апп эсвэл CLI-ээр—дамжуулан ханддаг код бичих агентууд нь—интерактив хэрэгслүүд хэвээр байна.
OpenAI дахь агентлаг ажлын цар хүрээ нэмэгдэхийн хэрээр бид шинэ төрлийн ачаалалтай тулгарсан. Инженер бүр хэд хэдэн Codex сесс нээж, даалгавар өгч, гаралтыг хянаж, агентийг удирдаж, давтана. Практик дээр ихэнх хүмүүс нөхцөл байдлыг өөрчлөх нь өвдөлттэй болохоос өмнө нэг дор гурваас таван удаагийн хичээлийг тухтай зохицуулж чаддаг байсан. Үүнээс гадна бүтээмж буурсан. Бид аль сесс юу хийж байгааг мартаж, агентуудыг дахин зөв замд нь оруулахын тулд терминалуудын хооронд үсрэх, мөн замын дундуур гацсан удаан хугацаанд хийгдэж буй ажлуудыг дибаг хийх болно.
Агентууд хурдан байсан ч бидэнд системийн саад бэрхшээл тулгарсан: хүний анхаарал. Бид маш чадварлаг залуу инженерүүдийн багийг үр дүнтэйгээр бүрдүүлж, дараа нь хүний инженерүүддээ тэднийг бичил удирдлагаар хангах үүрэг өгсөн. Энэ нь цар хүрээгээ тэлэхгүй байсан.
Алсын харааны өөрчлөлт
Бид буруу зүйлийг оновчтой болгож байгаагаа ойлгосон. Бид системээ код бичих сесс болон нэгтгэсэн PR-д чиглүүлж байсан бол PR болон сесс нь үнэхээр зорилгодоо хүрэх хэрэгсэл болж байсан. Програм хангамжийн ажлын урсгалыг голчлон хүргэлтүүдээр зохион байгуулдаг: асуудлууд, даалгаварууд, тасалбарууд, чухал үе шатууд.
Тиймээс бид агентуудыг шууд хянахаа больж, оронд нь тэдэнд манай даалгаврын хянагчаас ажлыг нь авахыг зөвшөөрвөл юу болох вэ гэж өөрсдөөсөө асуусан.
Энэ санаа нь агентлагийн ажлыг удирдан зохион байгуулах удирдагчийн үүрэг гүйцэтгэдэг бичмэл тусгай бүтээл болох Symphony болсон.
Асуудлын мөрдөгчөө агент найруулагч болгон хувиргаж байна
Симфони нь энгийн ойлголтоос эхэлсэн: аливаа нээлттэй даалгаврыг агент авч, гүйцэтгэх ёстой. Codex сессийг олон таб дээр удирдахын оронд бид асуудлын хянагчаа хяналтын хавтгай болгосон.
Энэ тохиргоонд нээлттэй шугаман асуудал бүр тусгай агентын ажлын талбарт холбогддог. Symphony нь даалгаврын самбарыг тасралтгүй хянаж, идэвхтэй даалгавар бүрийг дуустал нь давталтанд ажиллуулж байгаа эсэхийг шалгадаг. Хэрэв агент гацсан эсвэл гацсан бол Symphony үүнийг дахин эхлүүлнэ. Хэрэв шинэ бүтээл гарч ирвэл Симфони үүнийг аваад ажлаа зохион байгуулж эхэлдэг.
Бид ажлын урсгалаа тасалбарын төлөв дээр үндэслэн Linear task manager-ийг төлөв машин болгон ашигласан.
Практикт Symphony нь сессүүд болон татах хүсэлтүүдээс ажлыг салгадаг. Зарим асуудлууд нь репозиторууд дээр олон тооны PR үүсгэдэг бол зарим нь кодын баазтай хэзээ ч холбогддоггүй цэвэр судалгаа эсвэл дүн шинжилгээ юм.
Ажлыг ийм байдлаар хийсвэрлэсний дараа тасалбарууд нь ажлын илүү том нэгжийг төлөөлж чадна.
Бид нарийн төвөгтэй функцууд болон дэд бүтцийн шилжилтийг зохион байгуулахын тулд Symphony-г тогтмол ашигладаг. Жишээлбэл, бид агентаас кодын сан, Slack эсвэл Notion-г шинжилж, хэрэгжүүлэх төлөвлөгөө гаргахыг хүссэн даалгавар гаргаж болно. Бид төлөвлөгөөнд сэтгэл хангалуун болсны дараа агент нь даалгаврын мод үүсгэж, ажлыг үе шатуудад хувааж, даалгавруудын хоорондох хамаарлыг тодорхойлдог.
Агентууд зөвхөн хаагаагүй ажлууд дээр л ажиллаж эхэлдэг тул гүйцэтгэл нь энэхүү DAG (гүйцэтгэлийн алхмуудын дараалал)-ын хувьд байгалийн жамаар болон оновчтой байдлаар зэрэгцээ өрнөдөг. Жишээлбэл, бид Vite руу шилжих үед React шинэчлэлтийг хаагдсан гэж тэмдэглэсэн. Хүлээгдэж байсанчлан, агентууд Vite руу шилжих ажиллагаа дууссаны дараа л React-ийг шинэчилж эхэлсэн.
Агентууд бас өөрсдөө ажил үүсгэж чадна. Хэрэгжүүлэх эсвэл хянах явцад тэд одоогийн даалгаврын хүрээнээс гадуурх сайжруулалтыг ихэвчлэн анзаардаг: гүйцэтгэлийн асуудал, рефакторинг хийх боломж эсвэл илүү сайн архитектур. Ийм зүйл тохиолдоход тэд зүгээр л бидний үнэлж, дараа нь хуваарь гаргах боломжтой шинэ асуудал гаргадаг бөгөөд эдгээр дараагийн ажлуудын ихэнхийг нь агентууд мөн авч үздэг. Бид энэ үйл явцыг хянаж байх зуур агентууд зохион байгуулалттай байж, ажлыг урагшлуулсаар байна.
Энэхүү ажиллах арга нь тодорхойгүй ажлыг эхлүүлэх танин мэдэхүйн зардлыг эрс бууруулдаг. Хэрэв агент ямар нэгэн алдаа гаргавал энэ нь ашигтай мэдээлэл хэвээр байх бөгөөд бидэнд учирч болзошгүй зардал тэгтэй ойролцоо байна. Бид агентад туршилтын загвар гаргаж, судлах тасалбарыг маш хямд үнээр гаргаж өгч болох бөгөөд бидний дургүй аливаа судалгааг хаяж болно.
Оркестратор нь хөгжүүлэлтийн хайрцаг дээр ажилладаг бөгөөд хэзээ ч унтдаггүй тул бид хаанаас ч даалгавар нэмж, агент үүнийг авах болно гэдгийг мэдэж болно. Жишээлбэл, манай багийн нэг инженер чанар муутай wifi-тай тохилог байшингаас утсан дээрх Linear аппликейшн дээрээ гурван чухал өөрчлөлт хийсэн.
Ийм байдлаар ажилласнаар хайгуулын ажил нэмэгдэнэ
Symphony-тэй ажиллахын үр нөлөөг ажиглахад хамгийн тод өөрчлөлт нь гаралт байв. OpenAI-ийн зарим багуудын дунд эхний гурван долоо хоногт газардсан PR-уудын тоо 500%-иар өссөнийг бид харсан. OpenAI-ээс гадна Linear-ийн үүсгэн байгуулагч Карри Сааринен Symphony-г гаргаснаар бий болсон ажлын талбаруудын огцом өсөлтийг(шинэ цонхонд нээгдэнэ) онцолсон. Гэсэн хэдий ч илүү гүнзгий өөрчлөлт нь багууд ажлын талаар хэрхэн бодож байгаа явдал юм.
Манай инженерүүд Codex сессүүдийг хянахад цагаа зарцуулахаа больсон үед кодын өөрчлөлтийн эдийн засаг бүрэн өөрчлөгдөнө. Өөрчлөлт бүрийн мэдрэгдэх зардал буурдаг, учир нь бид нэвтрүүлэлтийг өөрийг нь хэрэгжүүлэхэд хүний хүчин чармайлт зарцуулахаа больсон.
Энэ нь бидний зан авирыг өөрчилсөн. Симфони дээр таамаглал дэвшүүлэх нь дэмий зүйл болсон. Санааг туршиж үзээд, рефактор хийх хувилбарыг судалж, таамаглалаа шалгаад, ирээдүйтэй харагдаж буй үр дүнгүүдийг үлдээгээрэй.
Мөн энэ нь ажлыг хэн эхлүүлж болох хүрээг өргөжүүлдэг. Манай бүтээгдэхүүний менежер болон дизайнер одоо функцийн хүсэлтүүдийг Symphony-д шууд бүртгүүлэх боломжтой боллоо. Тэд репозиторийг татаж авах эсвэл Codex-ийн сессийг удирдах шаардлагагүй. Тэд уг функцийг тайлбарлаж, бодит бүтээгдэхүүн дотор ажиллаж байгаа функцийн видео танилцуулгыг багтаасан хяналтын багцыг буцааж авдаг.
Symphony нь мөн том монорепод (OpenAI дээр байдаг шиг) гялалздаг бөгөөд PR-г буух сүүлийн миль нь удаан бөгөөд эмзэг байдаг. Систем нь CI-г хянаж, шаардлагатай үед дахин ачаалж, зөрчлийг шийдвэрлэж, алдаатай шалгалтыг дахин оролдож, ерөнхийдөө өөрчлөлтийг дамжуулах хоолойгоор дамжуулан хянадаг. Тикет Нэгтгэж байна төлөвт хүрэх үед уг өөрчлөлт хүний гар оролцоо (байнгын “харж хандах”)-гүйгээр үндсэн салбарт амжилттай нэгтгэгдэнэ гэдэгт бид өндөр итгэлтэй байдаг.
Symphony-г хэрэгжүүлсний дараа бид илүү их ажлыг агентуудад даалгаж, илүү хүнд, илүү судалгааны ажлууд дээр анхаарлаа төвлөрүүлдэг.
Дэвшил нь шинэ, өөр асуудлуудтай хамт ирдэг
Энэ түвшинд ажиллах нь буулт хийхтэй холбоотой. Бид агентуудыг харилцан үйлчлэлцэхээс тасалбарын түвшинд ажил даалгах руу шилжих үед нислэгийн дундуур тэднийг байнга түлхэж, шаардлагатай үед чиглэлээ засах чадвараа алдсан. Заримдаа агент зорилгодоо огт нийцээгүй зүйл гаргадаг байсан. Энэ нь ашигтай байсан—эдгээр алдаанууд нь системийн цоорхойг илчилж, бидэнд үүнийг илүү хүчирхэг болгоход тусалсан.
Үр дүнг гараар нөхөхийн оронд бид хамгаалалтын хашлага болон ур чадваруудыг нэмсэн тул агентууд дараагийн удаа амжилтанд хүрэх боломжтой болсон. Цаг хугацаа өнгөрөхөд энэ нь биднийг бүрэн хэмжээний тест хийх, Chrome DevTools-оор дамжуулан аппликейшнийг ажиллуулах, чанарын баталгааны утааны тестийг удирдах гэх мэт шинэ боломжуудыг нэмэхэд хүргэсэн. Бид баримтжуулалтаа эрс сайжруулж, сайн зүйл хэрхэн харагдахыг тодруулсан.
Бүх даалгавар Symphony-ийн ажлын хэв маягт тохирохгүй. Зарим асуудал, ялангуяа тодорхой бус асуудлууд эсвэл өндөр түвшний дүгнэлт, мэргэшил шаарддаг ажил нь инженерүүдийг интерактив Codex сешнүүдтэй шууд ажиллахыг шаарддаг. Практикт эдгээр нь ихэвчлэн манай инженерүүдийн цаг зарцуулахад хамгийн сонирхолтой, таатай ажлууд юм.
Ялгаа нь Symphony өдөр тутмын хэрэгжүүлэлтийн ажлын ихэнхийг хариуцан гүйцэтгэх боломжтойд оршино. Энэ нь инженерүүдэд жижиг ажлуудын хооронд байнга контекст шилжихийн оронд нэг хүнд асуудалд анхаарлаа төвлөрүүлэх боломжийг олгодог.
Мөн бид агентуудыг төлөвийн машинд хатуу нод гэж үзэх нь сайн үр дүнгүй болохыг мэдэж авсан. Загварууд улам ухаажиж, бидний тэднийг багтаах гэж оролддог хүрээнээс давсан илүү том асуудлуудыг шийдвэрлэж чаддаг. Бидний агентлагийн ажлын эхний хувилбарууд нь зөвхөн Codex-оос уг даалгаврыг хэрэгжүүлэхийг хүссэн. Энэ арга барил хэтэрхий хязгаарлагдмал байсан нь батлагдсан. Codex нь олон тооны PR үүсгэхээс гадна тоймуудын санал хүсэлтийг уншиж, шийдвэрлэх чадвартай. Тиймээс бид түүнд хэрэгслүүд—gh CLI, CI лог унших чадвар гэх мэт—өгсөн бөгөөд одоо хуучин PR-уудыг хаах эсвэл дууссан болон орхигдсон ажлын тайлан гаргах зэрэг илүү олон зүйлийг Codex-оос хүсэх боломжтой боллоо. Эдгээр төрлийн даалгаварууд нь анхны функцийг хэрэгжүүлэх хүрээнээс хамаагүй гадуур байсан.
Тиймээс бид эцэст нь сайн менежер багийнхаа шууд захирагчдад зорилго оноодогтой адил хатуу шилжилтийн оронд агентуудад зорилго тавих чиглэлд шилжсэн. Моделийн хүч чадал нь тэдний сэтгэх чадвараас үүдэлтэй тул тэдэнд багаж хэрэгсэл, нөхцөл байдлыг өгч, хоол хийхийг нь зөвшөөр.
Симфони ашиглан симфони бүтээх
Та Symphony репозиторийг(шинэ цонхонд нээгдэнэ) нээхэд хамгийн түрүүнд анзаарах зүйл бол Symphony нь техникийн хувьд зүгээр л SPEC.md файл бөгөөд асуудлын тодорхойлолт болон зорилтот шийдлийг илэрхийлдэг. Нарийн төвөгтэй хяналтын систем бүтээхийн оронд бид асуудал болон зорьсон шийдлүүдийг тодорхойлж, агентуудад өндөр түвшний чиглүүлэг өгсөн.
Лавлах хэрэгжилтийг Elixir дээр бичсэн байдаг - учир нь код нь үр дүнтэйгээр үнэгүй байх үед та эцэст нь Elixir-ийн зэрэгцээ байдал гэх мэт давуу талуудын хэлийг сонгож болно - гэхдээ гол санааг энгийн Markdown баримт бичигт илэрхийлж болно. Бид танд дуртай код бичих агент аа техникийн үзүүлэлт рүү чиглүүлж, өөрийн гэсэн хувилбарыг хэрэгжүүлэхийг зөвлөж байна.
Symphony-ийн анхны хувилбар нь зүгээр л tmux дээр ажиллаж байсан Codex сесс байсан бөгөөд Linear-г асууж, шинэ даалгавруудад зориулж дэд агентуудыг бий болгодог байв. Энэ нь ажилласан, гэхдээ энэ нь тийм ч найдвартай биш байсан. Хоёр дахь хувилбар нь манай төслийн үндсэн репозитор дотор байсан бөгөөд үүнийг агентуудыг харгалзан бүтээсэн. Бид агентуудад энэ репозиторт өндөр чанартай ажил хийх ур чадвар, нөхцөл байдлыг олгохын тулд агентын бэхэлгээг аль хэдийн бүтээсэн байсан тул Symphony үүнийг бүгдийг нь холбодог.
Үндсэн функцууд бий болсны дараа бид Symphony-г бүтээхийн тулд Symphony ашигласан.
Бид системийн даалгавруудыг удирдах үйл явцыг дотооддоо үзүүлж, ажлын нотолгооны видеог хавсаргахад хариу үйлдэл маш эерэг байсан: манай Symphony төслийн суваг өргөжиж, байгууллага даяарх багууд үүнийг органик байдлаар ашиглаж эхэлсэн. OpenAI дээр гадагшаа гарахын тулд дотоодын бүтээгдэхүүний зах зээлд тохирох нь урьдчилсан нөхцөл юм. OpenAI дээр бидний харсан хэрэглээнд үндэслэн бид Symphony-г компанийн хананаас гадуур хуваалцах нь тодорхой болсон.
Тиймээс бид энэ санааг бие даасан SPEC.md файл болгон задалж, Codex-оос хэрэгжүүлэхийг хүссэн. Лавлах хэрэгжилтийн хувьд бид зэрэгцээ үйл явцыг зохион байгуулах, хянах маш сайн командуудтай харьцангуй өвөрмөц хэл болох Elixir-ийг сонгосон. Codex нь Elixir-ийн хэрэгжилтийг нэг дор бүтээсэн бөгөөд бид тэндээс техникийн тодорхойлолт болон хэрэгжилтийг хоёуланг нь давтаж ажилласаар байсан. Тодорхойлолтыг сайжруулахын тулд бид Codex-оос үүнийг TypeScript, Go, Rust, Java, Python—зэрэг хэд хэдэн хэл—дээр хэрэгжүүлэхийг хүссэн бөгөөд үр дүнг нь тодорхойгүй байдлыг тодорхойлж, системийг хялбаршуулахад ашиглахыг хүссэн. Энэ нь бүх хэл дээр амжилтанд хүрсэн.
Symphony бүтээх үйл явцын явцад бид тодорхой репозиторууд эсвэл Linear MCP-ээс хамааралтай байдал гэх мэт олон тохиолдлын нарийн төвөгтэй байдлыг арилгасан. Symphony нь бидний дотоод репозитор эсвэл ажлын урсгалаас хамаарахаа больсон. Үндсэн арга нь энгийн болсон:
Нээлттэй даалгавар бүрийн хувьд агент өөрийн ажлын талбарт ажиллаж байгаа эсэхийг баталгаажуулна уу.
Идэвхтэй ажилд туслахаас гадна хөгжүүлэлтийн ажлын урсгал нь одоо агентуудын мэддэг, дагаж мөрддөг зүйл болсон. Хөгжүүлэлтийн ажлын урсгал — асуудал дээр ажиллах, репозиторыг шалгах, Ерөнхий сайдад ажиллаж байгааг мэдэгдэхийн тулд түүнийг ажиллуулах, PR нэмэх, Хяналтын төлөв рүү шилжүүлэх, видео хавсаргах гэх мэт — одоо энгийн WORKFLOW.md файлд бичигдсэн болно. Энэ бүхэн бол хүмүүсийн дагаж мөрддөг үйл явц боловч хэзээ ч баримтжуулаагүй. Энэхүү далд алхмуудын багцад найдахын оронд бид одоо үүнийг баримтжуулж, Symphony нь агентууд үүнийг дагаж мөрдөхийг баталгаажуулдаг. Энэ нь бидэнд бидэнтэй хамт ажилладаг агентуудыг бий болгох боломжийг олгодог. Хэрэв бид агентууд дууссан ажилд өөрийгөө эргэцүүлэн бодохыг хавсаргах ёстой гэж шийдвэл үүнийг WORKFLOW.md файлд нэмнэ. мөн Symphony агентуудыг тэр алхам руу чиглүүлнэ.
Бид мөн Codex-ийг апп серверийн горимд(шинэ цонхонд нээгдэнэ) ашиглах боломжтой болсон бөгөөд энэ нь Codex-д зориулсан толгойгүй горим юм. Энэ горим нь бидэнд Codex-ийг ажиллуулж, thread эхлүүлэх эсвэл ээлжинд хариу үйлдэл үзүүлэх гэх мэт зүйлсийн хувьд сайн баримтжуулсан JSON-RPC API-аар дамжуулан программчлалын дагуу ярих боломжийг олгосон. Энэ нь CLI эсвэл шууд tmux сессүүдээр дамжуулан Codex-тэй харилцахаас илүү тохиромжтой, өргөтгөх боломжтой.
Codex App Server нь бидний хэрэглээнд төгс тохирсон байсан: бид Codex-ийн хангадаг бэхэлгээний давуу талыг ашиглан залгах товчлуур болон дэгээтэй байсан. Жишээ нь, Linear-ийн хандалтын токеныг дэд агентуудад ил гаргахаас зайлсхийхийн тулд бид Linear-ийн эсрэг дурын хүсэлтүүдийг гүйцэтгэдэг түүхий linear_graphql функцийг MCP-д найдалгүйгээр эсвэл хандалтын токеныг контейнерүүдэд ил гаргалгүйгээр ашиглах боломж олгодог динамик хэрэгслийн дуудлагууд(шинэ цонхонд нээгдэнэ)-ыг ашигладаг.
Дараа нь юу вэ
Симфони бол санаатайгаар хамгийн бага найрал хөгжмийн давхарга юм. Бид Linear гэх мэт өөр өөр ажлын урсгалын хэрэгслүүдтэй хослуулсан үед Codex App Server-ийн хүчийг харуулахын тулд үүнийг нээлттэй эх сурвалжаас гаргаж байна. Тиймээс бид Symphony-г бие даасан бүтээгдэхүүн болгон үргэлжлүүлэн дэмжихээр төлөвлөөгүй. Үүнийг лавлагаа хэрэгжилт гэж бодоорой. Олон хөгжүүлэгчид репозиторуудаа суурь бүтэцтэй болгохын тулд код бичих агентуудаа harness инженерчлэлийн нийтлэл рүү чиглүүлж байсан шиг, та ч мөн өөрийн дуртай код бичих агентаа Symphony-ийн тодорхойлолт(шинэ цонхонд нээгдэнэ) болон репозитор(шинэ цонхонд нээгдэнэ) руу чиглүүлж, өөрийн орчинд тохируулсан хувилбаруудаа бүтээнэ гэж найдаж байна.
Хүчээ Codex болон түүний аппын серверээс авдаг. Symphony нь ажлын удирдлагын асуудлыг шийдэхийн тулд бидний аль хэдийн ашиглаж байсан хоёр зүйл болох Codex-ийг Linear-тай холбох арга байсан. Код бичих агентууд сэтгэн бодох, зааврыг дагах чадвараа сайжруулахын хэрээр бусад компаниудын саад бэрхшээл нь код бичихээс агентын ажлыг удирдах руу шилжих болно гэж бид үзэж байна. Сэтгэл хөдөлгөм нь эдгээр код бичих агентын системүүдийг туршиж үзэх босго одоо гайхмаар бага болсон явдал юм. Та Codex ашиглан юм бүтээж болно.
Нийгэмлэгийн талархал
Инженерийн салбарынхан Symphony-г худалдаанд гарснаас хойш хэдэн долоо хоногийн дотор ашиглаж, 4-р сарын 23-ны байдлаар 15 мянга гаруй GitHub од(шинэ цонхонд нээгдэнэ) цуглуулж байгааг хараад бид баяртай байна.