'Jede ausreichend fortgeschrittene Technologie ist von Magie nicht zu unterscheiden.' Arthur C. Clarke
Im Neurales SBC-Netzwerk Post sahen wir ein 1k-Gewichtungsnetzwerk, das mit 10k-Samples trainiert wurde, um die Sinusfunktion anzunähern. In diesem Beitrag verwenden wir ein 175-G-Gewicht, das mit 450-G-Proben trainiert wurde und besser programmieren kann als der durchschnittliche Programmierer. Die Größe dieser Modelle ist beeindruckend, aber eigentlich weiß niemand wirklich, wie sie funktionieren oder wo ihre Grenzen liegen.
GitHub Copilot ist ein KI-Tool, das die Softwareentwicklung beschleunigt und es dem Programmierer ermöglicht, viele Dinge zu tun, die zuvor unmöglich waren. Zunächst scheint es ähnlich zu sein, StackOverflow zu verwenden, eine Website, auf der Programmierer Fragen senden, wenn sie nicht wissen, wie sie etwas tun sollen, aber Copilot geht viel weiter, es ist in der Lage, eine neue Antwort für unser Problem zu synthetisieren.
Copilot ist in einem Microsoft Visual Studio Code enthalten und schlägt in Grau fortlaufend Codes vor, die Sie durch Drücken der Tab-Taste übernehmen können. Dieser vorgeschlagene Code kann grob als die „häufigste“ Übereinstimmung zwischen Ihrer Abfrage (Ihrem Code) und dem Trainingsdatensatz (GitHub-Code) definiert werden.
Beispiel 1
In diesem Beispiel definieren wir unsere Funktion und ihren Docstring und bitten Copilot um Vervollständigung. Wie wir sehen, entspricht die Vervollständigung dem Docstring. Die erste Intuition ist, dass Copilot als Suchmaschine fungiert und Ihre Suchanfrage einfach mit seinem Trainingsdatensatz (150 GB Open-Source-Projekte) abgleicht, aber so funktioniert es nicht.
Beispiel 2
Hier erstellen wir eine zufällige/verrückte Zeichenfolge, die nicht im Trainingssatz enthalten sein kann. Das Ergebnis sieht immer noch so aus, als wäre es die kohärenteste Lösung, die bereitgestellt werden kann, in diesem Fall: die Summe der Eingabeparameter.
Beispiel 3
In diesem Beispiel fragen wir (auf Spanisch) nach der Summe der Schnittfläche zweier Kreise mit gegebenem Mittelpunkt und Radius. Copilot versteht den spanischen Text ohne Probleme und schlägt den Funktionsnamen, die Parameter und den gesamten Funktionskörper vor. Nach einer kurzen Überprüfung sieht es so aus, als ob der Code funktionieren sollte.
Beispiel 4
Nun erstellen wir einen hypothetischen Frage/Antwort-Text. Dadurch ordnet Copilot die Abfrage einigen Untersuchungen zu, die sich in diesem Trainingsdatensatz befinden können. Wir fragen einfach nach der Hauptstadt von Spanien und Copilot generiert die richtige Antwort.
Beispiel 5
Wenn wir jedoch nach einem nicht existierenden Land fragen, gibt Copilot auch seine beste Antwort, die auch „richtig“ aussieht.
Beispiel 6
In diesem Beispiel kehren wir den Prozess um, wir geben die Antwort, um zu versuchen, die Frage zu generieren. Copilot generiert eine Frage, die wir nicht erwartet haben. Wir erwarteten 'Was ist die Hauptstadt von Frankreich?' und Copilot fragte: "Was ist das Ergebnis des folgenden Codes?" aber dennoch können wir einen richtigen Vorschlag verstehen.
Beispiel 7
Hier zwingen wir Copilot, nachzufragen, was wir in eine gebräuchlichere Sprache ändern und den Anfangsbuchstaben hinzufügen möchten. Es erzeugt jedoch eine andere Frage, diesmal völlig falsch und in keiner Beziehung zur Antwort.
Zusammenfassend, Copilot:
- Erstellt einen Vorschlag basierend auf der gängigsten Lösung.
- Stimmt meist einfach, wenn deine Abfrage Sinn macht.
- Ist normalerweise falsch, wenn Ihre Abfrage wie ein allgemeines Problem aussieht, es aber nicht ist und eigentlich ein ganz anderes Ziel hat.
Copilot mit Open-Source-Bibliotheken
Copilot wurde mit Open-Source-Projekten geschult. Es enthält Millionen von Anwendungsfällen jeder Open-Source-Bibliothek wie numpy, opencv, qt … Das macht Copilot wirklich nützlich, weil es dem Programmierer mit dem häufigsten Vorschlag hilft, der normalerweise der beste ist.
Beispiel 8
In diesem Beispiel verwenden wir die Gerätetest Python-Modul, und Copilot weiß, dass das unittest.TestCase hat eine Methode namens behauptenGleich und weiß das auch foo( 1, 2 ) sollte 3 sein.
Beispiel 9
Oben erstellen wir eine komplexere foo Funktion (von der wir annehmen, dass sie nicht in den Trainingsdaten enthalten sein kann), um zu sehen, ob Copilot den Code wirklich versteht. Nachdem der Code mit 17 Testfällen ausgeführt wurde, sind nur 6 fehlgeschlagen, was eine Erfolgsquote von 65 % ergibt.
Es scheint nicht viel zu sein, aber denken Sie daran, dass Copilot kein Python-Interpreter ist, es hat die Funktion nicht ausgeführt, um seine Ausgabe zu erhalten … Copilot hat das, was während des Trainings gelernt wurde, verwendet, um unsere Abfrage in die Ausgabe zu konvertieren, die eine perfekte Python-Syntax und hat funktioniert auch gut 65% der Zeit.
Beispiel 10
Man könnte erwarten, dass ein langer Eingabetext dazu führt, dass Copilot fehlschlägt, aber das ist nicht der Fall, je mehr Informationen wir geben, desto bessere Antworten kann Copilot generieren.
Im obigen Beispiel bitten wir um eine komplexe Aufgabe, ein vollständiges Programm, für dessen Lösung verschiedene Kenntnisse erforderlich sind, wie z.
Der vollständige Hinweis wird in der nächsten Zelle angezeigt. Beachten Sie, dass es sehr gut zur Programmbeschreibung passt. Die Anwendungsklasse macht Sinn, und sogar die Micropython-Bibliotheken (PIN, UART, ADC, PIN.irq…) werden korrekt verwendet. Es ist nicht 100% perfekt, zum Beispiel in diesem Fall temp_senor ist ein ADC-Objekt, das nicht vorhanden ist temp_sensor.init() Methode, und andere kleine Fehler können generiert werden, aber die gesamte Struktur des Programms ist definitiv korrekt und die kleinen Fehler können leicht behoben werden.
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 | importieren Zeit importieren Maschine Klasse Antragsprozess: def __init__(selbst): selbst.Taste im nun erscheinenden Bestätigungsfenster nun wieder los. = Maschine.Stift(0Maschine.Pin.IM) selbst.Temperatursensor = Maschine.ADC (Maschine.Stift(1)) selbst.uart = Maschine.UART(1, 115200) selbst.uart.drin(115200, Bits=8, Parität=Keine, Stopp=1) selbst.letzte Veranstaltung = 0 selbst.last_temp = 0 selbst.letztes Mal = 0 selbst.Taste im nun erscheinenden Bestätigungsfenster nun wieder los..IRQ (Auslöser=Maschine.Pin.IRQ_FALLING, Handler=selbst.Knopf_gedrückt) selbst.Taste im nun erscheinenden Bestätigungsfenster nun wieder los..IRQ (Auslöser=Maschine.Pin.IRQ_RISING, Handler=selbst.button_released) selbst.Temperatursensor.drin() def Knopf_gedrückt(selbst, Stift): selbst.letzte Veranstaltung = 1 selbst.letztes Mal = Zeit.ticks_ms() selbst.uart.schreiben (b'{},{},{}\n'.Format(selbst.letztes Mal, selbst.letzte Veranstaltung, selbst.last_temp)) def button_released(selbst, Stift): selbst.letzte Veranstaltung = 0 selbst.letztes Mal = Zeit.ticks_ms() selbst.uart.schreiben (b'{},{},{}\n'.Format(selbst.letztes Mal, selbst.letzte Veranstaltung, selbst.last_temp)) def read_temp(selbst): selbst.last_temp = selbst.Temperatursensor.lesen() selbst.uart.schreiben (b'{},{},{}\n'.Format(selbst.letztes Mal, selbst.letzte Veranstaltung, selbst.last_temp)) def Lauf(selbst): während Wahre: selbst.read_temp() Zeit.schlafen(0.1) |
Beispiel 11
Schließlich verwenden wir im folgenden Beispiel Copilot, um die Kommentare zum vorherigen Code hinzuzufügen. Wir kopieren die Klasse zweimal und fügen Copilot eine Anleitung wie „Docstring-Version der obigen Klasse“ hinzu. Copilot generiert die Klasse und Kommentare für jede Zeile.
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-Version der obigen Klasse Klasse Antragsprozess: """ Knapp: Dies ist eine einfache Anwendung, die den Temperatursensor liest und die Daten an den UART sendet. Die Daten werden im Format gesendet: Zeit, Ereignis, Temp Die Zeit ist die Zeit in Millisekunden seit dem Start der Anwendung. Das Ereignis ist 1, wenn die Taste gedrückt wird, und 0, wenn die Taste losgelassen wird. Die Temperatur ist die Temperatur in Grad Celsius. "" " def __init__(selbst): # Erstellen Sie ein Schaltflächenobjekt selbst.Taste im nun erscheinenden Bestätigungsfenster nun wieder los. = Maschine.Stift(0Maschine.Pin.IM) # Erstellen Sie ein Temperatursensorobjekt selbst.Temperatursensor = Maschine.ADC (Maschine.Stift(1)) # Erstellen Sie ein UART-Objekt selbst.uart = Maschine.UART(1, 115200) # Initialisieren Sie das UART-Objekt selbst.uart.drin(115200, Bits=8, Parität=Keine, Stopp=1) # Erstellen Sie eine Variable, um das letzte Ereignis zu speichern selbst.letzte Veranstaltung = 0 # Erstellen Sie eine Variable, um die letzte Temperatur zu speichern selbst.last_temp = 0 # Erstellen Sie eine Variable, um das letzte Mal zu speichern selbst.letztes Mal = 0 # Registrieren Sie den Ereignishandler für gedrückte Schaltflächen selbst.Taste im nun erscheinenden Bestätigungsfenster nun wieder los..IRQ (Auslöser=Maschine.Pin.IRQ_FALLING, Handler=selbst.Knopf_gedrückt) # Registrieren Sie den Ereignishandler für die Schaltfläche freigegeben selbst.Taste im nun erscheinenden Bestätigungsfenster nun wieder los..IRQ (Auslöser=Maschine.Pin.IRQ_RISING, Handler=selbst.button_released) # Den Temperatursensor initialisieren selbst.Temperatursensor.drin() def Knopf_gedrückt(selbst, Stift): # Setzen Sie das letzte Ereignis auf 1 selbst.letzte Veranstaltung = 1 # Setzen Sie die letzte Zeit auf die aktuelle Zeit selbst.letztes Mal = Zeit.ticks_ms() # Senden Sie die letzte Zeit, das letzte Ereignis und die letzte Temperatur an den UART selbst.uart.schreiben (b'{},{},{}\n'.Format(selbst.letztes Mal, selbst.letzte Veranstaltung, selbst.last_temp)) def button_released(selbst, Stift): # Setzen Sie das letzte Ereignis auf 0 selbst.letzte Veranstaltung = 0 # Setzen Sie die letzte Zeit auf die aktuelle Zeit selbst.letztes Mal = Zeit.ticks_ms() # Senden Sie die letzte Zeit, das letzte Ereignis und die letzte Temperatur an den UART selbst.uart.schreiben (b'{},{},{}\n'.Format(selbst.letztes Mal, selbst.letzte Veranstaltung, selbst.last_temp)) def read_temp(selbst): # Stellen Sie die letzte Temperatur auf die aktuelle Temperatur ein selbst.last_temp = selbst.Temperatursensor.lesen() # Senden Sie die letzte Zeit, das letzte Ereignis und die letzte Temperatur an den UART selbst.uart.schreiben (b'{},{},{}\n'.Format(selbst.letztes Mal, selbst.letzte Veranstaltung, selbst.last_temp)) def Lauf(selbst): während Wahre: # Lesen Sie die Temperatur ab selbst.read_temp() # 0.1 Sekunden warten Zeit.schlafen(0.1) |