Добици:
- Способност мапирања режима ћаскања да би се исправио тип задатка са инлине довршавањем
- Способност писања моћних упутстава за производњу која укључују улазно/излазне уговоре, рубне случајеве и стилска ограничења
- Могућност провере генерисаног кода и свих нових предложених зависности пре спајања
Прва тачка контакта програмера са АИ често је аутодовршавање — функција која предлаже следећи ред док куцате — или изговарање „унесите ту функцију“ у прозор за ћаскање. Обојица користе исти мотор, али захтевају различите дисциплине. У овој јединици трансформишемо генерисање кода из насумичног „записивања“ у инжењерски корак чији је излаз предвидљив и проверљив.
Циљ је претворити АИ из алата који убрзава вашу машину за куцање у шегрта који ради у оквиру ограничења која сте поставили. Добро вођени шегрт штеди време; Невођени шегрт ствара неред који касније морате да почистите.
Два режима коришћења: Инлине довршавање и ћаскање
Инлине довршавање долази у игру док куцате у уређивачу; Укуцате потпис функције или ред за коментаре и он предлаже остало. Одличан је за брзину, али има узак контекст: види само код у непосредној близини. Зато најбоље функционише када у коментару јасно напишете своју намеру. На пример, //валидате корисничког имејла, избаци ВалидатионЕррор ако неважећи коментар значајно побољшава предлог у наставку.
Режим ћаскања је за веће и структуриране задатке: „Додај пагинацију овој класи“, „Издвоји интерфејс те услуге“. Овде имате луксуз да дате улогу, контекст и формат. Опште правило је: завршетак за мале и текуће задатке, разговор за задатке који захтевају размишљање и структуру.
Савет: Не прихватајте слепо предлог за завршетак са „Таб“. Прочитајте предложени ред на секунд; Одавде најчешће цури нетачно име променљиве или обрнути услов.
Кораци за превођење намере у код
- Дефинишите уговор. Какво је понашање функције уноса, излаза и грешке? На пример, „Преузми е-пошту, нормализуј ако је важећа, избаци грешку ако је неважећа“.
- Наведите ограничења. Не користите спољну зависност? Конкретан водич за стил? Да ли постоји ограничење перформанси?
- Дајте пример. Пар улаз-излаз („али@к.цом → валидан, али@ → грешка“) помера разумевање намере модела од предвиђања до прецизности.
- Затражите мале комаде. Једна функција, једна одговорност. Затим пређите на следећи.
- Прочитајте и покрените генерисани код. Састављање + брзи ручни покушај је најјефтинији корак уверавања.
Три мини кућишта
Случај 1 — Производња заснована на коментарима повећава тачност. Програмер је прво затражио функцију рашчлањивања датума са празним телом и добио тачан резултат у 3 рунде. У другом покушају, када сам дефинисао функцију са коментаром од 4 реда (прихваћени формати, правило временске зоне, стање грешке) и захтевао је, дошао је код који је радио у првом кругу. Исти модел, исти дан; разлика је била само у јасноћи намере.
Случај 2 — Ненавођење верзије је скупо. Један тим се борио са застарелим АПИ-јем заснованим на повратном позиву који је заменио фс.промисес у коду произведеном за Ноде.јс. Када је линија „Користи чвор 20, ЕСМ, асинц/аваит“ додата у промпт, производња је пратила пројекат први пут; Просек од 12 минута утрошених на корекцију је ресетован.
Случај 3 — Стварна добит у шаблонском коду. Микросервис је захтевао 6 нових ДТО (Објекат преноса података — једноставна класа података која преноси податке између слојева) и њихова правила валидације. Оно што је некада било отприлике 90 минута ручног рада, смањено је на 35 минута када га је произвела и прегледала АИ; Пошто је понављање кода велико и образац јасан, АИ је овде радио у свом најефикаснијем делу.
Четири шаблона за копирање
Генерисање функција на основу уговора:
Улога: Ви сте марљив {{језик}} програмер. Уговор о функцији:- Име: {{наме}}- Улаз: {{типови и њихово значење}}- Излаз: {{тип и значење}}- Статус грешке: {{шта се баца/враћа када}}Ограничења: {{без спољних зависности / стилова_/извођења {}}-Пример> {{оутпут_1}}- {{ентри_2}} -> {{еррор_2}}Прво дајте потпис + кратак план, а затим код. Писање тестова, само функција.
Да одговара постојећем стилу (прилагодите се бази кода):
Испод је пример функције из нашег пројекта; Научите именовање, руковање грешкама и стил коментарисања овде. Напишите функцију за {{нев_таск}} са ИСТИМ стилом. Пример: {{цуррент_цоде}}
Од скелета до пуњења (стуб → имплементација):
Попуните скелет функције испод према ТОДО-има у коментарима. ПРОМЕНИ потпис и тип враћања. Немојте правити помоћну функцију која не постоји; ако је потребно, јавите ми „овај помоћник је потребан“. {{скелет_код}}
Алтернативно поређење апликација:
Наведите 2 различите имплементације за {{задатак}}: (а) давање приоритета читљивости, (б) давање приоритета перформансама. Испод сваке напишите по једну реченицу „када је боље“.
Слаби промпт / Јаки промпт
Слабо: „Напишите ми функцију верификације е-поште.“
Снажан: „ТипеСцрипт 5, само стандардна библиотека. Напишите исВалидЕмаил(инпут: стринг): боолеан. Скратите размаке, учините да не разликује велика и мала слова, а@б.цо је важећи, а@, @б.цо, празан стринг је неважећи. Ако ћете користити регуларни израз, немојте бити превише сложени; додајте 2 реда коментара.“
Моћна верзија; Враћа језик, верзију, потпис, рубне случајеве и стилско ограничење. Дакле, генерисани код функционише и уклапа се у ваш пројекат.
Приступ
Када користити
Пажња
Инлине завршетак
Мали уметци у току
Не прихватајте предлог без читања
Производња по уговору у цхату
Нова функција/класа
Наведите пример и ивични случај
Израда по узорку стила
Додавање постојећем коду
Изаберите тренутни узорак кода
пуњење скелета
Потпис фиксиран, тело празно
Промена потписа
Дуплирање кода и замка зависности
АИ често препоручује нову библиотеку како би јој олакшао посао. Понекад је ово тачно, понекад додаје непотребну зависност вашем пројекту или сугерише пакет који не постоји (халуцинација). Правило: потврђујете сваку нову зависност. Немојте га додавати у пројекат без провере да пакет заиста постоји, да се одржава и да има одговарајућу лиценцу. Већину времена је помоћник који је већ у пројекту бољи од новог пакета.
Опрез: Прегледајте линије за увоз које је предложила АИ. Непостојећи назив пакета (који такође може да личи на лажне пакете који се називају „чување приликом куцања“) и прекида компилацију и представља безбедносни ризик.
Уобичајене грешке
- Имајући потпис одређен моделом. Ако не поправите типове улаза/излаза, са сваком производњом долази другачији потпис и интеграција постаје тешка.
- Да не спомињем ивице случајеве. Празан унос, нула, негативан број, веома велика вредност — ако ово не наведете, модел уписује „срећну путању“, прескачући ивице.
- Комбиновање предлога без тестирања. Код који изгледа да функционише не значи да функционише.
- Прихватање непотребне зависности. Додавање целе библиотеке за једнолинер ствара технички дуг.
- Стилска недоследност. Различито именовање и руковање грешкама од остатка пројекта чини базу кода неуједначеном.
Укратко
Генерисање кода је моћно када намеру преведете у јасан уговор. Користите инлине довршавање за мале задатке у току и за задатке који успостављају структуру у разговору. Ви одређујете типове улаза/излаза, рубне случајеве, верзију и стил; Наведите пример модела; верификовати сваку нову зависност; и покрените и прочитајте сваки произведени комад. АИ се најбоље исплати у формулисаном коду који се понавља - покрените га тамо, у границама које сте поставили.
Задатак апликације
Изаберите стварну малу функцију из свог пројекта коју треба да напишете. Прво га одштампајте на АИ са шаблоном „генерисање функција засновано на уговору“, дајући типове улаза/излаза, два ивична случаја и стилско ограничење. Саставите генерисани код и испробајте га са два различита улаза. Затим поново питајте исту функцију, овог пута „напишите ми ово“ без икаквог контекста, и упоредите два излаза ред по ред: који рубни случајеви су пропуштени, колико је исправки било потребно?
контролна листа
- [ ] Знам где да користим режим ћаскања са инлине довршавањем.
- [ ] Одређујем улаз/излаз уговор и рубне случајеве у генерисању функција.
- [ ] Ушао сам у навику да у промпт додам информације о језику и верзији.
- [ ] Састављам и тестирам сваки произведени комад пре него што га саставим.
- [ ] Потврђујем сваку нову зависност коју АИ предлаже тако што потврђујем њено постојање и неопходност.
- [ ] Проверавам да ли генерисани код одговара стилу пројекта.