Единица 1 / 12

Вештачка интелигенција за софтверски тимови: Работен модел и ограничувања

Добивки:

  • Способност да се објасни како асистент за кодирање работи како јазичен модел и концептите на токен, контекстен прозорец, халуцинација
  • Способност да се разликуваат софтверски задачи каде што вештачката интелигенција е силна и слаба со ментална мапа
  • Способност да го применат основниот работен циклус на предлагање-произведување-верификација на сопствените задачи

Денот на развивачот на софтвер ретко го поминува „пишувајќи код од нула“. Во реално време; Читање на кодот напишан од некој друг, обид да се репродуцира бубачка, скенирање на дневникот (линиите на дневникот произведени од апликацијата додека работи), пишување тестови, пишување ПР (барање за влечење - барање за спојување каде што се поднесува промена на кодот за преглед на тимот) објаснување и ажурирање на документацијата. Вештачката интелигенција (ВИ) е мултипликатор на брзина што може да ги допре скоро сите овие невидени работни места. Но, првиот услов за безбедно користење е правилно да се разбере што е тоа, а што не е.

Во оваа единица, прво ја објаснуваме основната технологија на асистент за кодирање на едноставен јазик; потоа создаваме ментална мапа на силните и слабите страни на моделот; Конечно, ја воспоставуваме основната работна дисциплина што ќе ја користиме во текот на целиот модул: предлагаме, произведуваме, потврдуваме. Овие три чекори се столбот на следните единаесет единици.

Забелешка: Овој модул е ​​општа обука. Во безбедносно критичниот софтвер (обработка на плаќања, здравствена заштита, автентикација, критична инфраструктура) излезот на вештачката интелигенција не е замена за преглед и одобрување од квалификуван инженер. АИ е асистент; Потписникот е инженерот.

Што всушност прави асистент за кодирање?

Повеќето асистенти за кодирање се изградени на голем јазичен модел (LLM - вештачка интелигенција обучена на огромни количини текст и код што го предвидува следниот најверојатно „дел“). Моделот не го „разбира“ кодот како човек; Го генерира најверојатното продолжение на контекстот што ќе му го дадете, врз основа на шемите што ги учи од огромен број примери. Овој навидум едноставен механизам дава изненадувачки умешни резултати во пракса - затоа што најголемиот дел од софтверот се состои од повторувачки обрасци: барање HTTP, циклус, нула проверка, тест шема.

Три термини се критични овде. Токен е најмалата единица што моделот ја обработува со делење на текстот; Тоа е приближно неколку букви или дел од зборот. Контексниот прозорец е количината на токени што моделот може да ги „види“ одеднаш; Вашиот код, порака за грешка и инструкција мора да се вклопат во овој прозорец. Промпт се сите инструкции и контекст што му ги давате на моделот. Квалитетот на излезот што го добивате директно зависи од овие две: колку подобар контекст и појасни упатства му давате на моделот, толку подобар резултат ќе добиете. Лошиот влез произведува лош излез, дури и ако се работи за паметен модел - класичното правило на софтверот „ѓубре во, ѓубре надвор“ важи и за вештачката интелигенција.

Карта на силните и слабите страни

За да се насочи вештачката интелигенција кон вистинските работни места, неопходно е да се знае каде сјае и каде се сопнува. Меморирањето на оваа карта ќе ве натера да се прашувате при секоја следна мисија: „Дали треба да ја нарачувам оваа работа на вештачката интелигенција или да ја направам сам?“ Ви овозможува да одговорите на прашањето за неколку секунди.

Неговите јаки страни се: генерирање на код за котел, превод од еден јазик на друг, пишување регуларен израз (регекс), опишување на функција, создавање тест скелет, толкување порака за грешка, изготвување документација, предлагање имиња на променливи/функции и мали рефакторирања (подобрување на структурата на кодот без промена на неговото однесување).

Слабости: Познавање на деловните правила специфични за вашата компанија, запомнување на целата база на кодови, всушност извршување и потврдување на кодот, сигурно познавање на најновите верзии на библиотеката, откривање на безбедносни пропусти со стопроцентна гаранција. Најопасната работа е халуцинацијата: моделот измислува непостоечка функција, библиотека или API (интерфејс што овозможува размена на податоци помеѓу апликациите) на многу убедлив јазик. Овој ризик всушност може да се претвори во ваша корист, бидејќи кодот, за разлика од обичниот текст, може да се тестира за да се види дали „работи“ - само не прескокнувајте го чекорот за верификација.

Тип на мисија

Улогата на вештачката интелигенција

улогата на човекот

Производство на котел/скелет

произведува нацрт

Се прилагодува, прегледува

Опис на кодот

Дава брзо резиме

Го потврдува критичниот дел во кодот

пишување тестови

Случајот сугерира

Ја потврдува покриеноста и точноста

Безбедносно-критична логика

корисна идеја

Одлуката и одговорноста се целосно на луѓето.

Користење на API/библиотека

Генерира примерок

Го потврдува постоењето и верзијата

архитектонска одлука

Видови опции

Избира и брани знаејќи го контекстот

Чекор по чекор: Основен работен циклус

  1. Разјаснете ја задачата. Ако не можете да напишете што сакате во една реченица, не може ниту моделот. Колку порано навлегува несигурноста во влезот, толку таа расте во излезот.
  2. Дајте контекст. Додајте го релевантниот код, целосната порака за грешка, верзијата на јазикот/рамковниот јазик и ограничувањата во промптот. Не кажувајте „поправете го ова“, кажете „Python 3.11, FastAPI 0.110; оваа функција дава грешка 500, таа експлодира кога телото на барањето е празно“.
  3. Улога и формат на наметнување. Рамката како „Вие сте висок програмер на Go; само дајте го кодот и образложението со две реченици“ го фокусира излезот.
  4. Побарајте мали. Поделете го на чекори наместо на едно огромно барање; Потврдете го секој чекор посебно. Големите промени се ризични бидејќи тешко се проверуваат и се склони кон криење на грешките.
  5. Потврди. Стартувај го, тестирај го, визуелно прочитај го. Непроверениот код за вештачка интелигенција е „скица“, а не „решение“. Ова е најнепреговараниот чекор од циклусот.

Три мини футроли

Случај 1 - Заштедата на време е реална, но скромна. Кога тимот ги скелетираше новите крајни точки CRUD (Креирај-читај-апдејт-избриши) со вештачка интелигенција, времето на првиот нацрт падна од приближно 40 минути на 8 минути. Меѓутоа, со преглед и тестирање, вкупното време беше 25 минути; значи вистинската добивка е од 40 до 25, околу 38%. Оваа стапка, мерена наместо очекувањата „забрзавме 10 пати“, е одржлива добивка.

Случај 2 - Халуцинацијата е скапа. Развивачот го користел повикот предложени од AI барања.get_json() без валидација; Немаше таков метод (прецизно одговор.json()). Беа изгубени 20 минути кога кодот не се компајлира. Едноставно „дали овој метод навистина постои? верификацијата ќе ја ресетира загубата.

Случај 3 - Добриот контекст го удвојува излезот. За истата грешка, еден развивач едноставно напиша „Добивам грешка“, а другиот ја додаде трагата на целото стек, верзијата и влезниот примерок. Вториот го доби точното решение при првиот обид; Првиот помина три кривини. Разликата не беше во моделот, туку во влезот.

Четири шаблони за копирање

Општа намена, моќно известување за стартување:

Улога: Вие сте искусен развивач на {{јазик}}. Задача: {{what_want}}Контекст:- Рамка/верзија: {{framework_and_version}}- Ограничувања: {{ правила за изведба, стил, зависност}}Правила:- Не користете непостоечка библиотека/функција; Ако не сте сигурни, означете го како „потврди“. - Прво дајте краток план, па кодот, па 2 реченици оправдување. - Направете проверлив, работен код.

За да ја филтрирате несигурноста назад во моделот:

Пред да ја решите задачата подолу, наведете НАЈМАЛКУ 3 точки што ви недостасуваат или ви се нејасни како прашања. НЕ пишувај код пред да одговорам. Задача: {{task}}

За да го самопроверувате излезот:

Го создадовте следниов код. Сега сменете ја вашата улога и критикувајте го овој код: - Наведете 3 случаи (работни случаи) кои можеби не функционираат.- Дали има некои API-и/функции што сте можеле да ги измислите? Обележете.- Дајте поправена верзија. Код:{{code}}

За да ја разложите одлуката на опции:

Предложете 2-3 пристапи за решение за {{проблем}}. За секој: краток опис, плус/минус, кога да се избере. Дајте во табеларна форма. НЕ избирај за мене; само разјасни ја опцијата.

Слаб промпт / Силен промпт

Слабо: „Поправете ја грешката во овој код“. (Која грешка? Кој јазик? Какво е очекуваното однесување?)
Strong: "Python 3.11 / FastAPI 0.110. Следната крајна точка враќа 500 со KeyError кога телото на барањето е празно; Сакам да врати 400 и значајна порака на празно тело. Прво објаснете ја причината, потоа наведете ја поправената функција, а потоа напишете тест за ова сценарио. [код]."

Моќна верзија; Ги дава јазикот, верзијата, вистинската грешка, очекуваното однесување и излезниот формат. Моделот повеќе не мора да предвидува.

Вообичаени грешки

  • Доверба без верификација. Најчеста и најскапа грешка. Не кажувајте „решено“ додека кодот не се состави и тестира.
  • Поставување прашања без контекст. Одговорот без верзија, текст за грешка и ограничувања е генерички и често погрешен.
  • Едно големо барање. Неможноста да побарате и прегледате производство од 300 линии одеднаш ги прави грешките невидливи.
  • Грешка на самодовербата на моделот како доказ. ВИ може самоуверено да каже нешто погрешно; Тонот не е показател за точноста.
  • Случајно лепење на тајната на компанијата. Приватните клучеви, податоците за клиентите или приватниот изворен код не треба да се внесуваат во неодобрени алатки (ќе истражуваме во оваа тема во единицата 10).
Совет: третирајте го секој излез на вештачка интелигенција како „ова е нацрт“. Оваа единствена ментална навика ги гасне повеќето ризици што ќе ги видите низ модулот.

Сумирано

Асистентот за кодирање е јазичен модел кој го предвидува следниот најверојатен фрагмент; Не го разбира кодот, произведува обрасци. Затоа тој е силен во повторливи, формулирани работи; Треба да се користи со претпазливост за работа која бара потврда која е специфична за вашиот контекст. Најголем ризик е халуцинацијата, а единствен противотров е верификацијата. Дисциплината што ќе ја следиме во текот на целиот модул е ​​јасна: разјаснете ја задачата, дадете контекст, побарајте мали, потврдете ја секоја испорака.

Задача за апликација

Запишете три софтверски задачи што сте ги направиле минатата недела (на пр. поправка на грешки, тест, ажурирање README). Погледнете ја „мапата на јаки и слаби страни“ за секоја од нив и опишете во една реченица каква би била вашата и улогата на вештачката интелигенција доколку вештачката интелигенција го прави ова. Потоа дадете една од овие задачи на вештачката интелигенција со шаблонот за „почеток“ погоре и стартувајте и потврдете го излезот; Забележете колку минути заштедивте и колку грешки требаше да поправите.

листа за проверка

  • [ ] Сфатив дека LLM произведува шеми, а не „разбира“ код.
  • [ ] Можам да ги објаснам концептите на токен, контекстен прозорец и промпт во една реченица.
  • [ ] Можам да разликувам типови задачи каде што вештачката интелигенција е силна и слаба.
  • [ ] Знам што е халуцинација и единствениот противотров е верификацијата.
  • [ ] Го приспособив циклусот „предложи, произведе, потврди“ на мојата сопствена задача.
  • [ ] Можам да ја покажам разликата помеѓу силен и слаб промпт во конкретен пример.