„Било која довољно напредна технологија се не разликује од магије.“ Артхур Ц. Цларке
У СБЦ неуронска мрежа након што смо видели мрежу од 1к тежине обучену са 10к узорака за апроксимацију синусне функције. У овом посту користићемо тегове од 175Г обучене са узорцима од 450Г који могу програмирати боље од просечног програмера. Величина ових модела је импресивна, али заправо нико не зна како функционишу нити која су њихова ограничења.
ГитХуб Цопилот је АИ алат који убрзава развој софтвера, омогућавајући програмеру да уради многе ствари које су раније биле немогуће. У почетку се чини слично коришћењу СтацкОверфлов-а, веб странице на коју програмери шаљу питања када не знају како да нешто ураде, али Цопилот иде много даље, у стању је да синтетише нови одговор за наш проблем.
Цопилот је укључен у Мицрософт Висуал Студио Цоде и непрекидно предлаже кодове у сивој боји које можете прихватити притиском на дугме таб. Овај предложени код може се грубо дефинисати као „најчешће“ подударање између вашег упита (ваш код) и скупа података за обуку (ГитХуб код).
Пример

У овом примеру дефинишемо нашу функцију и њен доцстринг и тражимо од Цопилота да заврши. Као што видимо, завршетак одговара доцстрингу. Прва интуиција је да Цопилот делује као претраживач и једноставно усклађује ваш упит са скупом података за обуку (150 ГБ пројеката отвореног кода), али то не функционише овако.
Пример

Овде креирамо неки насумични/луди низ који не може бити у сету за обуку. Резултат и даље изгледа као да је најкохерентније решење које се може обезбедити, у овом случају: збир улазних параметара.
Пример

У овом примеру тражимо (на шпанском) да саберемо површину пресека два круга с обзиром на центар и полупречник. Цопилот разуме шпански текст без проблема и предлаже назив функције, параметре и цело тело функције. Након кратког прегледа изгледа да би код требао радити.
Пример

Сада креирамо хипотетички текст питања/одговора. Ово чини да Цопилот подудара упит са неким испитима који могу бити у овом скупу података за обуку. Једноставно тражимо главни град Шпаније, а Цопилот генерише тачан одговор.
Пример

Међутим, ако питамо за непостојећу земљу, Цопилот такође даје свој најбољи одговор који такође изгледа „тачан“.
Пример

У овом примеру обрћемо процес, дајемо одговор да покушамо да генеришемо питање. Цопилот генерише питање које нисмо очекивали. Очекивали смо 'Који је главни град Француске?' а копилот је упитао 'Шта је резултат следећег кода?' али ипак можемо разумети исправан предлог.
Пример

Овде приморавамо Цопилот да пита шта желимо да променимо на уобичајенији језик и додамо прво слово. Међутим, генерише још једно питање, овог пута потпуно погрешно и нема везе са одговором.
Укратко, копилот:
- Израђује предлог на основу најчешћег решења.
- Обично је тачно ако ваш упит има смисла.
- Обично је погрешно када ваш упит изгледа као уобичајен проблем, али није, и заправо има сасвим другачији циљ.
Цопилот користећи библиотеке отвореног кода
Цопилот је био обучен за пројекте отвореног кода. Укључује милионе случајева коришћења било које библиотеке отвореног кода као што су нумпи, опенцв, кт... Ово чини Цопилот заиста корисним јер помаже програмеру са најчешћим предлогом који је обично најбољи.
Пример

У овом примеру користимо униттест питхон модул, а Цопилот зна да је униттест.ТестЦасе има метод под називом ассертЕкуал и то такође зна фоо( 1, 2 ) требало би да буде 3.
Пример

Изнад стварамо сложенији фоо функцију (за коју претпостављамо да не може бити у подацима о обуци), да видимо да ли Цопилот заиста разуме код. Након покретања кода са 17 тест случајева, само 6 није успело дајући 65% успешности.
Можда се не чини много, али имајте на уму да Цопилот није тумач за питон, није извршио функцију да би добио свој излаз... Цопилот је користио оно што је научио током обуке да конвертује наш упит у излаз који има савршену синтаксу питона и такође добро функционише 65% времена.
Пример

Могло би се очекивати да ће дуг унос текста довести до неуспеха Цопилот-а, али то није случај, што више информација дајемо, боље одговоре копилот може да генерише.
У горњем примеру тражимо сложен задатак, комплетан програм који захтева различита разумевања за решавање, као што су: вештине програмирања за питхон, библиотеке специфичне за микропитхон и како их правилно користити чак иу разумевању описа људског текста.
Потпуни наговештај се приказује у следећој ћелији. Имајте на уму да се веома добро подудара са описом програма. Класа апликације има смисла, па чак и микропитхон библиотеке (ПИН, УАРТ, АДЦ, ПИН.ирк…) се правилно користе. Није 100% савршено, на пример у овом случају темп_сенор је АДЦ објекат, који нема темп_сенсор.инит() методе, и могу се генерисати друге мале грешке, али је цела структура програма дефинитивно исправна и мале грешке се могу лако поправити.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | увоз време увоз машина класа апликација: деф __инит__(само): само.дугме = машина.Пин(0, машина.Пин.ИН) само.темп_сенсор = машина.АДЦ (машина.Пин(1)) само.уарт = машина.УАРТ(1, 115200) само.уарт.у томе(115200, битс=8, паритет=ниједан, зауставити=1) само.ласт_евент = 0 само.ласт_темп = 0 само.последњи пут = 0 само.дугме.ирк (окидач=машина.Пин.ИРК_ФАЛЛИНГ, руковалац=само.дугме_притиснуто) само.дугме.ирк (окидач=машина.Пин.ИРК_РИСИНГ, руковалац=само.буттон_релеасед) само.темп_сенсор.у томе() деф буттон_прессед(само, пин): само.ласт_евент = 1 само.последњи пут = време.тицкс_мс() само.уарт.писати (б'{},{},{}\n'.формат (само.последњи пут, само.последњи_догађај, само.последња_темп)) деф буттон_релеасед(само, пин): само.ласт_евент = 0 само.последњи пут = време.тицкс_мс() само.уарт.писати (б'{},{},{}\n'.формат (само.последњи пут, само.последњи_догађај, само.последња_темп)) деф реад_темп(само): само.ласт_темп = само.темп_сенсор.читати() само.уарт.писати (б'{},{},{}\n'.формат (само.последњи пут, само.последњи_догађај, само.последња_темп)) деф рун(само): док Прави: само.реад_темп() време.спавати (0.1) |
Пример
Коначно, у примеру испод користимо Цопилот да додамо коментаре претходном коду. Двапут копирамо класу и додамо неки водич за Цопилот као што је „Доцстринг верзија горње класе“. Цопилот генерише класу и коментаре за сваку линију.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # Доцстринг верзија горње класе класа апликација: """ Кратак: Ово је једноставна апликација која чита температурни сензор и шаље податке у УАРТ. Подаци се шаљу у формату: време, догађај, темп Време је време у милисекундама од почетка апликације. Догађај је 1 ако је дугме притиснуто и 0 ако је дугме отпуштено. Температура је температура у степенима Целзијуса. "" " деф __инит__(само): # Креирајте објекат дугмета само.дугме = машина.Пин(0, машина.Пин.ИН) # Креирајте објекат сензора температуре само.темп_сенсор = машина.АДЦ (машина.Пин(1)) # Креирајте УАРТ објекат само.уарт = машина.УАРТ(1, 115200) # Иницијализујте УАРТ објекат само.уарт.у томе(115200, битс=8, паритет=ниједан, зауставити=1) # Креирајте променљиву за чување последњег догађаја само.ласт_евент = 0 # Креирајте променљиву за чување последње температуре само.ласт_темп = 0 # Креирајте променљиву за чување последњи пут само.последњи пут = 0 # Региструјте обрађивач догађаја притиснутог дугмета само.дугме.ирк (окидач=машина.Пин.ИРК_ФАЛЛИНГ, руковалац=само.дугме_притиснуто) # Региструјте обрађивач догађаја отпуштеног дугмета само.дугме.ирк (окидач=машина.Пин.ИРК_РИСИНГ, руковалац=само.буттон_релеасед) # Покрените сензор температуре само.темп_сенсор.у томе() деф буттон_прессед(само, пин): # Поставите последњи догађај на 1 само.ласт_евент = 1 # Подесите последње време на тренутно време само.последњи пут = време.тицкс_мс() # Пошаљите последње време, последњи догађај и последњу температуру на УАРТ само.уарт.писати (б'{},{},{}\n'.формат (само.последњи пут, само.последњи_догађај, само.последња_темп)) деф буттон_релеасед(само, пин): # Поставите последњи догађај на 0 само.ласт_евент = 0 # Подесите последње време на тренутно време само.последњи пут = време.тицкс_мс() # Пошаљите последње време, последњи догађај и последњу температуру на УАРТ само.уарт.писати (б'{},{},{}\n'.формат (само.последњи пут, само.последњи_догађај, само.последња_темп)) деф реад_темп(само): # Подесите последњу температуру на тренутну температуру само.ласт_темп = само.темп_сенсор.читати() # Пошаљите последње време, последњи догађај и последњу температуру на УАРТ само.уарт.писати (б'{},{},{}\n'.формат (само.последњи пут, само.последњи_догађај, само.последња_темп)) деф рун(само): док Прави: # Очитајте температуру само.реад_темп() # Сачекајте 0.1 секунду време.спавати (0.1) |
