"Kaikkia riittävän kehittyneitä tekniikoita ei voi erottaa taikuudesta." Arthur C. Clarke
In SBC-hermoverkko postitse näimme 1k painojen verkon, joka oli koulutettu 10 175 näytteellä sinifunktion arvioimiseksi. Tässä viestissä käytämme 450G painoja, jotka on koulutettu XNUMXG:n näytteillä, jotka voivat ohjelmoida paremmin kuin keskimääräinen ohjelmoija. Näiden mallien koko on vaikuttava, mutta itse asiassa kukaan ei tiedä, miten ne toimivat tai mitkä ovat niiden rajoitukset.
GitHub Copilot on tekoälytyökalu, joka nopeuttaa ohjelmistokehitystä ja antaa ohjelmoijalle mahdollisuuden tehdä monia asioita, jotka aiemmin olivat mahdottomia. Aluksi näyttää samanlaiselta kuin StackOverflow, verkkosivusto, jolle ohjelmoijat lähettävät kysymyksiä, kun he eivät tiedä, miten jotain tehdään, mutta Copilot menee paljon pidemmälle, se pystyy syntetisoimaan uuden vastauksen ongelmaamme.
Copilot sisältyy Microsoft Visual Studio -koodiin ja ehdottaa jatkuvasti harmaina koodeja, jotka voit hyväksyä painamalla välilehtipainiketta. Tämä ehdotettu koodi voidaan karkeasti määritellä "yleisin" vastaavuus kyselysi (koodisi) ja harjoitustietojoukon (GitHub-koodi) välillä.
Esimerkki 1
Tässä esimerkissä määrittelemme funktiomme ja sen dokumenttisarjan ja pyydämme Copilotilta täydentämään. Kuten näemme, täydennys vastaa asiakirjamerkkijonoa. Ensimmäinen intuitio on, että Copilot toimii hakukoneena ja yksinkertaisesti yhdistää kyselysi koulutustietosarjaansa (150 Gt avoimen lähdekoodin projekteja), mutta se ei toimi näin.
Esimerkki 2
Tässä luodaan satunnainen/hullu merkkijono, joka ei voi olla harjoitussarjassa. Tulos näyttää edelleen olevan johdonmukaisin ratkaisu, joka voidaan tarjota, tässä tapauksessa: syöttöparametrien summa.
Esimerkki 3
Tässä esimerkissä pyydämme (espanjaksi) summaamaan kahden ympyrän leikkausalueen sen keskipisteen ja säteen perusteella. Copilot ymmärtää espanjankielisen tekstin ongelmitta ja ehdottaa funktion nimeä, parametreja ja koko funktion runkoa. Lyhyen tarkastelun jälkeen näyttää siltä, että koodin pitäisi toimia.
Esimerkki 4
Nyt luomme hypoteettisen kysymys/vastaustekstin. Tämä saa Copilotin yhdistämään kyselyn joihinkin kokeisiin, jotka voivat olla tässä harjoitustietojoukossa. Kysymme vain Espanjan pääkaupunkia, ja Copilot tuottaa oikean vastauksen.
Esimerkki 5
Kuitenkin, jos kysymme olemattomasta maasta, Copilot antaa myös parhaan vastauksensa, joka näyttää myös "oikealta".
Esimerkki 6
Tässä esimerkissä käännämme prosessin päinvastaiseksi, annamme vastauksen yrittääksemme luoda kysymyksen. Copilot luo kysymyksen, jota emme odottaneet. Odotimme "Mikä on Ranskan pääkaupunki?" ja Copilot kysyi "Mikä on seuraavan koodin tulos?" mutta silti voimme ymmärtää oikean ehdotuksen.
Esimerkki 7
Tässä pakotamme Copilotin kysymään, mitä haluamme muuttaa yleisempään kieleen ja lisätä ensimmäisen kirjaimen. Se kuitenkin synnyttää toisen kysymyksen, tällä kertaa täysin väärän ja jolla ei ole mitään yhteyttä vastaukseen.
Yhteenvetona, Copilot:
- Rakentaa ehdotuksen yleisimmän ratkaisun perusteella.
- On yleensä oikein, jos kyselysi on järkevä.
- On yleensä väärin, kun kyselysi näyttää yleiseltä ongelmalta, mutta se ei ole sitä, ja sillä on itse asiassa hyvin erilainen tavoite.
Copilot käyttämällä avoimen lähdekoodin kirjastoja
Copilot koulutettiin avoimen lähdekoodin projekteihin. Se sisältää miljoonia käyttötapauksia mistä tahansa avoimen lähdekoodin kirjastosta, kuten numpy, opencv, qt… Tämä tekee Copilotista todella hyödyllisen, koska se auttaa ohjelmoijaa antamaan yleisimmän ehdotuksen, joka on yleensä paras.
Esimerkki 8
Tässä esimerkissä käytämme yksikkötesti python-moduuli, ja Copilot tietää, että unittest.TestCase on menetelmä nimeltä väittää yhtäläinen ja tietää sen myös foo (1, 2) pitäisi olla 3.
Esimerkki 9
Yllä luomme monimutkaisemman foo -toiminto (oletamme, että se ei voi olla harjoitustiedoissa), jotta näet, ymmärtääkö Copilot todella koodin. Kun koodi oli suoritettu 17 testitapauksella, vain 6 epäonnistui, mikä antoi 65 %:n onnistumissuhteen.
Se ei ehkä vaikuta paljolta, mutta muista, että Copilot ei ole python-tulkki, se ei ole suorittanut toimintoa saadakseen tulostensa… Copilot on käyttänyt koulutuksen aikana oppimaansa muuntaakseen kyselymme ulostuloksi, jolla on täydellinen python-syntaksi ja toimii myös hyvin 65% ajasta.
Esimerkki 10
Voisi odottaa, että pitkä syöttöteksti aiheuttaa Copilotin epäonnistumisen, mutta se ei tapahdu. Mitä enemmän tietoja annamme, sitä parempia vastauksia copilot voi tuottaa.
Yllä olevassa esimerkissä kysytään monimutkaista tehtävää, kokonaista ohjelmaa, jonka ratkaiseminen vaatii erilaisia ymmärryksiä, kuten: python-ohjelmointitaidot, micropython-kohtaiset kirjastot ja kuinka niitä käytetään oikein myös ihmisen tekstinkuvauksen ymmärtämisessä.
Täydellinen vihje näytetään seuraavassa solussa. Huomaa, että se vastaa hyvin ohjelman kuvausta. Sovellusluokka on järkevä, ja jopa micropython-kirjastoja (PIN, UART, ADC, PIN.irq…) käytetään oikein. Se ei ole 100% täydellinen, esimerkiksi tässä tapauksessa temp_senor on ADC-objekti, jolla ei ole temp_sensor.init() menetelmällä ja muita pieniä virheitä voi syntyä, mutta koko ohjelman rakenne on ehdottomasti oikea ja pienet virheet voidaan korjata helposti.
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 | tuoda aika tuoda kone luokka Hakemus: def __init__(itse): itse.nappia = kone.Pin(0, kone.Pin.SISÄÄN) itse.temp_sensor = kone.ADC (kone.Pin(1)) itse.uart = kone.UART(1, 115200) itse.uart.sen sisällä(115200, bittiä=8, pariteetti=Ei eristetty, lopettaa=1) itse.viimeinen_tapahtuma = 0 itse.viimeinen_lämp = 0 itse.viime kerta = 0 itse.nappia.irq(laukaisin=kone.Pin.IRQ_FALLING, ohjaaja=itse.button_pressed) itse.nappia.irq(laukaisin=kone.Pin.IRQ_RISING, käsittelijä=itse.button_released) itse.temp_sensor.sen sisällä() def button_pressed(itse, pin): itse.viimeinen_tapahtuma = 1 itse.viime kerta = aika.tiks_ms() itse.uart.kirjoittaa (b'{},{},{}\n'.muoto(itse.viime kerta, itse.last_event, itse.viimeinen_lämpötila)) def button_released(itse, pin): itse.viimeinen_tapahtuma = 0 itse.viime kerta = aika.tiks_ms() itse.uart.kirjoittaa (b'{},{},{}\n'.muoto(itse.viime kerta, itse.last_event, itse.viimeinen_lämpötila)) def lukulämpötila(itse): itse.viimeinen_lämp = itse.temp_sensor.lukea() itse.uart.kirjoittaa (b'{},{},{}\n'.muoto(itse.viime kerta, itse.last_event, itse.viimeinen_lämpötila)) def ajaa(itse): vaikka Totta: itse.read_temp() aika.nukkua(0.1) |
Esimerkki 11
Lopuksi alla olevassa esimerkissä lisäämme kommentit edelliseen koodiin Copilotilla. Kopioimme luokan kahdesti ja lisäämme Copilotiin oppaan, kuten "edellä olevan luokan asiakirjaversio". Copilot luo luokan ja kommentit jokaiselle riville.
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 | # Docstring-versio yllä olevasta luokasta luokka Hakemus: """ Lyhyesti: Tämä on yksinkertainen sovellus, joka lukee lämpötila-anturin ja lähettää tiedot UART:lle. Tiedot lähetetään muodossa: aika, tapahtuma, lämpötila Aika on aika millisekunteina sovelluksen alkamisesta. Tapahtuma on 1, jos painiketta painetaan ja 0, jos painike vapautetaan. Lämpötila on lämpötila celsiusasteina. """ def __init__(itse): # Luo painikeobjekti itse.nappia = kone.Pin(0, kone.Pin.SISÄÄN) # Luo lämpötila-anturiobjekti itse.temp_sensor = kone.ADC (kone.Pin(1)) # Luo UART-objekti itse.uart = kone.UART(1, 115200) # Alusta UART-objekti itse.uart.sen sisällä(115200, bittiä=8, pariteetti=Ei eristetty, lopettaa=1) # Luo muuttuja tallentaaksesi viimeisen tapahtuman itse.viimeinen_tapahtuma = 0 # Luo muuttuja viimeisimmän lämpötilan tallentamiseksi itse.viimeinen_lämp = 0 # Luo muuttuja tallentaaksesi viimeisen kerran itse.viime kerta = 0 # Rekisteröi painiketta painettu tapahtumakäsittelijä itse.nappia.irq(laukaisin=kone.Pin.IRQ_FALLING, ohjaaja=itse.button_pressed) # Rekisteröi painikkeen vapautettu tapahtumakäsittelijä itse.nappia.irq(laukaisin=kone.Pin.IRQ_RISING, käsittelijä=itse.button_released) # Alusta lämpötila-anturi itse.temp_sensor.sen sisällä() def button_pressed(itse, pin): # Aseta viimeiseksi tapahtumaksi 1 itse.viimeinen_tapahtuma = 1 # Aseta viimeinen aika nykyiseen aikaan itse.viime kerta = aika.tiks_ms() # Lähetä viimeinen kerta, viimeinen tapahtuma ja viimeinen lämpötila UART-laitteeseen itse.uart.kirjoittaa (b'{},{},{}\n'.muoto(itse.viime kerta, itse.last_event, itse.viimeinen_lämpötila)) def button_released(itse, pin): # Aseta viimeiseksi tapahtumaksi 0 itse.viimeinen_tapahtuma = 0 # Aseta viimeinen aika nykyiseen aikaan itse.viime kerta = aika.tiks_ms() # Lähetä viimeinen kerta, viimeinen tapahtuma ja viimeinen lämpötila UART-laitteeseen itse.uart.kirjoittaa (b'{},{},{}\n'.muoto(itse.viime kerta, itse.last_event, itse.viimeinen_lämpötila)) def lukulämpötila(itse): # Aseta viimeinen lämpötila nykyiseen lämpötilaan itse.viimeinen_lämp = itse.temp_sensor.lukea() # Lähetä viimeinen kerta, viimeinen tapahtuma ja viimeinen lämpötila UART-laitteeseen itse.uart.kirjoittaa (b'{},{},{}\n'.muoto(itse.viime kerta, itse.last_event, itse.viimeinen_lämpötila)) def ajaa(itse): vaikka Totta: # Lue lämpötila itse.read_temp() # Odota 0.1 sekuntia aika.nukkua(0.1) |