Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   ChatGPT - Wow! (Cron-Job) (https://www.delphipraxis.net/215441-chatgpt-wow-cron-job.html)

hschmid67 3. Jul 2024 08:04

ChatGPT - Wow! (Cron-Job)
 
Hallo zusammen,

nun habe ich endlich auch mal einen Versuch gewagt, ChatGPT für einen Delphi-Code zu verwenden - und bin sehr beeindruckt.

Ich suche schon längere Zeit eine gute, einfach Komponente, die ich in meine Programme einbauen kann und die ähnlich wie ein Cron-Job bestimmte Aufgaben zeitgesteuert ausführt. So habe ich ChatGPT mal gebeten:

Zitat:

Erstelle mir ein Delphi-Programm, das mit ähnlichen Eingaben wie ein Linux-Cron-Job zeitgesteuert eine Aufgabe ausführt.
Das Ergebnis scheint mir recht gut. Allerdings verwendet es ein TTimer für die Zeitsteuerung. Das ist ja nicht so ideal, weil schon mal ein Intervall ausfallen kann. Das hab ich dann auch geschrieben,

Zitat:

Bei einer hohen Prozessorauslastung ist die Timer-Komponente nicht genau. Was kann man tun, um keinen Intervall zu verpassen?
und prompt schlägt es eine Thread-Steuerung vor und liefert den enstprechenden Code. Rund 150 Zeilen Quellcode. Allein das Tippen hätte mich schon ein Vielfaches der Zeit gekostet, ganz abgesehen von dem Hirnschmalz...

In ein paar Minuten habe ich damit einen Code, den ich für die Zeitsteuerung in meinen Programmen durchaus verwenden kann. Wow!

Viele Grüße
Harald

Sherlock 3. Jul 2024 09:02

AW: ChatGPT - Wow! (Cron-Job)
 
ChatGPT 4 oder 3.5? Nur um das einordnen zu können, woher die Verbesserung kommt.

hschmid67 3. Jul 2024 10:20

AW: ChatGPT - Wow! (Cron-Job)
 
Meine Frage:
Zitat:

welche Version von chatgpt verwende ich aktuell
ChatGPT
Zitat:

Du verwendest derzeit die GPT-4-Architektur von OpenAI.

Sherlock 3. Jul 2024 11:13

AW: ChatGPT - Wow! (Cron-Job)
 
OK, Danke :thumb:

jaenicke 3. Jul 2024 12:51

AW: ChatGPT - Wow! (Cron-Job)
 
ChatGPT verwende ich auch ab und zu, weil es einfach oft schneller geht, als etwas herunterzutippen. Bei komplizierteren Themen steigt es dann oft aus und man muss mehrfach Änderungen anfragen, aber rein zur Codegenerierung für klar definierte Aufgabenstellungen kann man es sehr gut verwenden.

Zum Beispiel ist es hilfreich, wenn man eine neue Klasse und/oder ein Interface erstellen möchte. Da kann man dann einfach die Eigenschaften mit ihren Typen auflisten und das erledigt die Tipparbeit. Oder wenn man Code anhand einer Dokumentation erstellen möchte, die in einer anderen Sprache gehalten ist.

Bei umfangreicheren Quelltexten muss man auch wieder aufpassen, dass ChatGPT den Code nicht irgendwo geklaut hat, so dass man Urheberrechte verletzen könnte.

Umgekehrt muss man wiederum aufpassen, dass man im beruflichen Kontext nicht Quelltexte oder andere zur Generierung notwendige Daten eingibt, die geheim sind. Das mussten ja schon mehrere große Firmen schmerzhaft erfahren...

Jens01 3. Jul 2024 13:51

AW: ChatGPT - Wow! (Cron-Job)
 
Die Erfahrung von jaenicke kann ich gut teilen und bestätigen.

Ich lasse mir auch öfter mal aus anderen Sprachen Code nach Delphi übersetzen. GEht meist um mathematische Probleme. Das geht ganz gut. Prüfen muss man aber immer.
Gutgläubig darf man nie sein.

Rollo62 3. Jul 2024 19:02

AW: ChatGPT - Wow! (Cron-Job)
 
Ich kannst nicht genau sagen, aber ich glaube ChatGPT 4o sollte kostenlos sein.
:https://openai.com/index/gpt-4o-and-more-tools-to-chatgpt-free/

himitsu 3. Jul 2024 20:14

AW: ChatGPT - Wow! (Cron-Job)
 
Nicht, wenn es darum geht, die WebAPI zur automatischen Abfrage nutzen zu wollen

Mavarik 3. Jul 2024 23:38

AW: ChatGPT - Wow! (Cron-Job)
 
Ich lasse mittlerweile alle meine MySQL-Querys von Chat-GPT schreiben.

- Richtige Frage stellen
- original Tabellen und Feldbezeichnungen nennen
- Bedingungen benennen
- fertig

20 Zeilen mit Joins inner selects und alles drum und dran.

Natürlich ohne einen Schreibfehler oder eine vergessene Klammer.

Mavarik :coder:

Rollo62 4. Jul 2024 06:59

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von himitsu (Beitrag 1538572)
Nicht, wenn es darum geht, die WebAPI zur automatischen Abfrage nutzen zu wollen

Ja, aber der Playground mit CopyAndPaste scheint mir aktuell immer qualitativ im Ergebnis noch etwas besser zu sein,
in der Bezahlvariante.
Vermutlich benutzt OpenAI da einen optimierten Session-Cache, den man sonst irgendwie selber nachbilden muss.

Lange Zeit war im Playground GPT4 und im WebAPI aber nur der schwächere GPT3.5, kann sein dass dies jetzt anderes ist, es ändert sich ja gefühlt wöchentlich irgendwas :stupid:

Zitat:

Zitat von Mavarik (Beitrag 1538573)
- Richtige Frage stellen
- original Tabellen und Feldbezeichnungen nennen
- Bedingungen benennen
- fertig

Im Playground kann man dazu sehr spezialisierte GPTs, optimiert für den jeweiligen Zweck genau bestimmen.
Da reicht es dann schon nur die Roh-Daten zu schicken mit einer kleinen Anweisung, den Rest macht er immer gleich und präzise.
Ist aber leider Handarbeit und so nicht im API vorhanden, trotzdem viel schneller als alles andere.

dummzeuch 4. Jul 2024 07:50

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von Rollo62 (Beitrag 1538571)
Ich kannst nicht genau sagen, aber ich glaube ChatGPT 4o sollte kostenlos sein.
:https://openai.com/index/gpt-4o-and-more-tools-to-chatgpt-free/

Der Link ist kaputt. Richtig wäre:
https://openai.com/index/gpt-4o-and-...-chatgpt-free/

fisipjm 4. Jul 2024 08:09

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von Mavarik (Beitrag 1538573)
- Richtige Frage stellen
...

Hab das Gefühl, da scheitert es bei den meisten. Ich kann auch nur positives berichten. Natürlich spukt die KI kein fertiges Programm aus und natürlich muss man die Ergebnisse kontrollieren, aber da setze ich einfach mal genug gesunden Menschenverstand voraus.
Was ich auch schon oft festgestellt habe, wenn man seine Frage etwas offener stellt und die KI dadurch nicht so stark einschränkt, kommen über die Antwort oft Ansätze die man sonst vielleicht nicht verfolgt hätte, bzw. auf die man vielleicht nicht gekommen wäre.

Ich gehe auch oft gerne hin und werfe eine fertige Funktion in ChatGPT und frag nochmal wie er den Code unter dem Aspekt von Lesbarkeit, Performance und Aufbau findet und ob es aus seiner Sicht was zu verbessern gibt. So zu sagen Pair-Programming mit der KI. Das kann richtig laune machen und man kann sich dadurch selbst ständig verbessern.

My 2 Cents.

vG
PJM

Rollo62 4. Jul 2024 13:34

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von fisipjm (Beitrag 1538583)
Was ich auch schon oft festgestellt habe, wenn man seine Frage etwas offener stellt und die KI dadurch nicht so stark einschränkt, kommen über die Antwort oft Ansätze die man sonst vielleicht nicht verfolgt hätte, bzw. auf die man vielleicht nicht gekommen wäre.

Und/Oder der Frage entsprechend viele Positiv-Beispiele dabeilegen, die exakt beschreiben, was genau man eigentlich haben will und in welchem Format.

Gausi 7. Jul 2024 09:30

AW: ChatGPT - Wow! (Cron-Job)
 
Ich habe ja in letzter Zeit öfter mal über KI gemeckert, besonders über Googles Bard bzw. jetzt Gemini. Aber Holladiwaldfee ... ChatGPT ist tatsächlich um Welten besser. :shock:

Da ich grade dabei bin, bei meiner Audio-Bibliothek auch Opus-Dateien zu unterstützen, habe ich für ein (bereits implementiertes) Teilproblem mal diese KIs befragt.

Mein Input: Kannst du mir eine Funktion in der Programmiersprache Delphi schreiben, die aus einer gegebenen Ogg-Datei die maximale absolute granule position ermittelt?

Gemini hat (mal wieder) irgendwelche nicht-existenten Klassen herbei-fantasiert und somit nutzlosen Code produziert.
Delphi-Quellcode:
unit OggGranulePosition;

interface
uses
  Windows,
  Messages,
  StdCtrls,
  ExtCtrls,
  OggVorbis;

implementation

function GetMaxGranulePosition(oggFileName: string): LongWord;
  var
    oggFile: TOggVorbisFile;
    oggStream: TOggVorbisStream;
    granulePosition: LongWord;
    granuleCount: LongWord;
    i: LongWord;
  begin
    oggFile := TOggVorbisFile.Create;
    try
      oggFile.Open(oggFileName, ofRead);

      oggStream := TOggVorbisStream.Create(oggFile);
      try
        granulePosition := 0;

        granuleCount := oggStream.Info.Packets;

        for i := 0 to granuleCount - 1 do
        begin
          granulePosition := Max(granulePosition, oggStream.Packets[i].Granulepos);
        end;

      finally
        oggStream.Free;
      end;

    finally
      oggFile.Free;
    end;

    Result := granulePosition;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Maximal absolute granule position: ' +
             IntToStr(GetMaxGranulePosition('C:\path\to\oggFile.ogg')));
end;

end.
ChatGPT liefert hingegen eine Struktur für den Ogg-Seitenheader, ermittelt nach einer Gültigkeits-Überprüfung daraus den gesuchten Wert. Dann wird korrekt die Größe der Seite berechnet, um sich seitenweise durch die Datei zu hangeln, um dann schließlich auf der letzten Seite den gesuchten Wert zu ermitteln.
Delphi-Quellcode:
program MaxGranulePosition;

uses
  Classes, SysUtils;

type
  TOggPageHeader = packed record
    CapturePattern: array[0..3] of AnsiChar;
    Version: Byte;
    HeaderType: Byte;
    GranulePosition: Int64;
    BitstreamSerialNumber: Cardinal;
    PageSequenceNumber: Cardinal;
    Checksum: Cardinal;
    PageSegments: Byte;
  end;

function ReadOggPageHeader(Stream: TStream; out Header: TOggPageHeader): Boolean;
begin
  Result := Stream.Read(Header, SizeOf(TOggPageHeader)) = SizeOf(TOggPageHeader);
end;

function GetMaxGranulePosition(const FileName: string): Int64;
var
  FileStream: TFileStream;
  OggPageHeader: TOggPageHeader;
  MaxGranulePosition: Int64;
  PageSegments: array of Byte;
  SegmentSize: Integer;
  I: Integer;
begin
  MaxGranulePosition := 0;
  FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    while FileStream.Position < FileStream.Size do
    begin
      if not ReadOggPageHeader(FileStream, OggPageHeader) then
        Break;

      if (OggPageHeader.CapturePattern <> 'OggS') then
        Break; // Invalid Ogg page

      if OggPageHeader.GranulePosition > MaxGranulePosition then
        MaxGranulePosition := OggPageHeader.GranulePosition;

      SetLength(PageSegments, OggPageHeader.PageSegments);
      FileStream.Read(PageSegments[0], OggPageHeader.PageSegments);

      SegmentSize := 0;
      for I := 0 to OggPageHeader.PageSegments - 1 do
        Inc(SegmentSize, PageSegments[I]);

      FileStream.Seek(SegmentSize, soFromCurrent);
    end;
  finally
    FileStream.Free;
  end;
  Result := MaxGranulePosition;
end;

var
  FileName: string;
  MaxGranule: Int64;
begin
  Write('Enter the Ogg file path: ');
  ReadLn(FileName);
  try
    MaxGranule := GetMaxGranulePosition(FileName);
    WriteLn('Max Granule Position: ', MaxGranule);
  except
    on E: Exception do
      WriteLn('Error: ', E.Message);
  end;
  ReadLn;
end.
Meine bisherigen Methode, vom Ende der Datei aus den letzten Ogg-Header zu suchen, ist zwar schneller, wenn die Seitengröße klein ist. Aber wenn die fehlschlägt (warum auch immer) ist das, was ChatGPT vorschlägt, die korrekte und sichere Variante.

Hat mich tatsächlich beeindruckt. Vor allem, weil das ja kein "Standard-Problem" ist, was ständig diskutiert wird.

dummzeuch 7. Jul 2024 09:49

AW: ChatGPT - Wow! (Cron-Job)
 
Da fragt man sich dann natürlich, woher ChatGPT diesen Code geklaut hat, denn selbst produzieren kann es ja nicht.

Rollo62 7. Jul 2024 09:56

AW: ChatGPT - Wow! (Cron-Job)
 
Und Claude Sonnet 3.5 kommt mit Deiner Frage wohl auch nicht sehr weit.
Das war auch auch ehrlicherweise nur das Standardmodell, weil ich noch keine Subscription habe.
Falls jemand vollenm Zugriff darauf hat, dann würde mich das Ergebnis auch interessieren.
Bisher ist ChatGPT 4o jedenfalls der klare Gewinner, aus meiner Sicht.

Delphi-Quellcode:
function GetMaxGranulePosition(const FileName: string): Int64;
var
  FileStream: TFileStream;
  Buffer: array[0..27] of Byte;
  PageHeader: array[0..3] of AnsiChar;
  GranulePosition: Int64;
  MaxGranulePosition: Int64;
begin
  MaxGranulePosition := 0;
  FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    while FileStream.Position < FileStream.Size do
    begin
      FileStream.ReadBuffer(PageHeader, 4);
      if PageHeader <> 'OggS' then
        raise Exception.Create('Ungültiges Ogg-Dateiformat');

      FileStream.ReadBuffer(Buffer, SizeOf(Buffer));
      GranulePosition := PInt64(@Buffer[6])^;

      if GranulePosition > MaxGranulePosition then
        MaxGranulePosition := GranulePosition;

      // Zum nächsten Ogg-Page springen
      FileStream.Seek(PCardinal(@Buffer[22])^ + 27, soFromCurrent);
    end;
  finally
    FileStream.Free;
  end;
  Result := MaxGranulePosition;
end;
Interessehalber habe ich den Prompt auch nochmal hier eingegeben, bei ChatGPT, dann kommt das raus.
Ähnlich, aber nicht exakt gleich. Kannst Du ja mal vergleichen, sieht jedenfalls deutlich strukturierter aus als alles andere.


Hier ist eine Delphi-Funktion, die die maximale absolute Granule-Position aus einer gegebenen Ogg-Datei extrahiert:
Delphi-Quellcode:
unit OggGranuleExtractor;

interface

uses
  Classes, SysUtils;

function GetMaxGranulePosition(const FileName: string): Int64;

implementation

type
  TOggPageHeader = packed record
    CapturePattern: array[0..3] of AnsiChar; // "OggS"
    Version: Byte;
    HeaderType: Byte;
    GranulePosition: Int64;
    BitstreamSerialNumber: Cardinal;
    PageSequenceNumber: Cardinal;
    Checksum: Cardinal;
    PageSegments: Byte;
  end;

function ReadOggPageHeader(Stream: TStream; out Header: TOggPageHeader): Boolean;
begin
  Result := Stream.Read(Header, SizeOf(TOggPageHeader)) = SizeOf(TOggPageHeader);
  if Result then
  begin
    Result := Header.CapturePattern = 'OggS';
    if not Result then
      Stream.Seek(-SizeOf(TOggPageHeader) + 1, soCurrent); // Synchronize to the next potential page start
  end;
end;

function GetMaxGranulePosition(const FileName: string): Int64;
var
  FileStream: TFileStream;
  OggHeader: TOggPageHeader;
  MaxGranulePos: Int64;
begin
  Result := -1;
  MaxGranulePos := -1;

  try
    FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    try
      while FileStream.Position < FileStream.Size do
      begin
        if ReadOggPageHeader(FileStream, OggHeader) then
        begin
          if OggHeader.GranulePosition > MaxGranulePos then
            MaxGranulePos := OggHeader.GranulePosition;

          // Skip page segments
          FileStream.Seek(OggHeader.PageSegments, soCurrent);
        end
        else
          Break; // No more valid headers
      end;
      Result := MaxGranulePos;
    finally
      FileStream.Free;
    end;
  except
    on E: Exception do
      Writeln('Error: ', E.Message);
  end;
end;

end.
Erklärung der Funktion:

TOggPageHeader: Eine Struktur, die den Header eines Ogg-Pakets repräsentiert.
ReadOggPageHeader: Eine Hilfsfunktion, die einen Ogg-Page-Header aus einem Stream liest und überprüft, ob das Capture-Muster ("OggS") korrekt ist.
GetMaxGranulePosition: Die Hauptfunktion, die die Ogg-Datei öffnet, durch die Pakete iteriert und die maximale Granule-Position ermittelt.

Schritte zur Verwendung:

Speichere den obigen Code in eine Delphi-Unit, z.B. OggGranuleExtractor.pas.
Verwende die GetMaxGranulePosition-Funktion, um die maximale absolute Granule-Position einer Ogg-Datei zu ermitteln:



Delphi-Quellcode:
uses
  OggGranuleExtractor, SysUtils;

var
  MaxGranulePos: Int64;
begin
  try
    MaxGranulePos := GetMaxGranulePosition('path_to_your_ogg_file.ogg');
    Writeln('Maximale Granule-Position: ', MaxGranulePos);
  except
    on E: Exception do
      Writeln('Fehler: ', E.Message);
  end;
end.

Rollo62 7. Jul 2024 09:57

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von dummzeuch (Beitrag 1538637)
Da fragt man sich dann natürlich, woher ChatGPT diesen Code geklaut hat, denn selbst produzieren kann es ja nicht.

Exakt 1:1 kopieren kann es aber auch nicht :stupid:

Edit:
Vielleicht interessiert sich ja jemand wie es im inneren eines LLM so aussieht, ist hier sehr schön beschrieben.
Pure Matritzenrechnung, wir sind in der Matrix :-D

https://www.youtube.com/watch?v=eMlx5fFNoYc

Jens01 7. Jul 2024 10:05

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Da fragt man sich dann natürlich, woher ChatGPT diesen Code geklaut hat, denn selbst produzieren kann es ja nicht.
Der Herr ALtman kennt das Problem mit dem Urheberrecht auch. Hat ja auch schon ein paar Klagen am Hals.
Ich vermute, Chatgpt wird das irgendwie umgehen und die Sachen nicht 1:1 wiedergeben.
Müßte man mal bei seinen eigenen Sachen probieren...

jaenicke 7. Jul 2024 10:06

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von dummzeuch (Beitrag 1538637)
Da fragt man sich dann natürlich, woher ChatGPT diesen Code geklaut hat, denn selbst produzieren kann es ja nicht.

Da man auch konkrete Verbesserungen an dem gelieferten Codes anfragen kann, kann das so nicht stimmen. Diese Verbesserungen kann es nirgends einfach abschreiben.

Gausi 7. Jul 2024 10:26

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von dummzeuch (Beitrag 1538637)
Da fragt man sich dann natürlich, woher ChatGPT diesen Code geklaut hat, denn selbst produzieren kann es ja nicht.

Bevor ich mich daran gesetzt habe, den Code selber zu schreiben, habe ich nach Delphi-Code dafür gesucht. Abgesehen von lizenz-technisch inkompatiblem Code von 3delite.hu habe ich wenig brauchbares gefunden. Und in diesem kostenlos downloadbaren Code ist schon die Struktur des Headers signifikant anders - dort ist auch das Array mit den Segmentgrößen im Record enthalten. Beim auslesen wird das Record dann in zwei Schritten gefüllt, da man am Anfang nicht weiß, wie groß das Array tatsächlich ist.

Wenn "geklaut" dann vermutlich von einer anderen Sprache, und dann nach Delphi übersetzt. Aber alleine das ist dann auch schon beeindruckend, finde ich.

Zitat:

Zitat von Rollo62 (Beitrag 1538638)
Ähnlich, aber nicht exakt gleich. Kannst Du ja mal vergleichen, sieht jedenfalls deutlich strukturierter aus als alles andere.

Das ist ja nun interessant. Der Code ist nämlich fehlerhaft:
Delphi-Quellcode:
// Skip page segments
  FileStream.Seek(OggHeader.PageSegments, soCurrent);
Tatsächlich muss man nämlich "PageSegments" viele Bytes lesen, und aus diesen Werten die Größe der OggPage zu berechnen, die man anschließend per Seek überspringt. Das ist der Teil
Delphi-Quellcode:
SetLength(PageSegments, OggPageHeader.PageSegments);
FileStream.Read(PageSegments[0], OggPageHeader.PageSegments);

SegmentSize := 0;
for I := 0 to OggPageHeader.PageSegments - 1 do
  Inc(SegmentSize, PageSegments[I]);

FileStream.Seek(SegmentSize, soFromCurrent);
aus meinem Ergebnis.

Rollo62 7. Jul 2024 13:38

AW: ChatGPT - Wow! (Cron-Job)
 
Das meine ich, es kommt sehr wahrscheinlich jedes Mal etwas anderes raus.
"Kopieren" definiere ich anders, aber das müssen die Rechtsgelehrten entscheiden.

Nimmt man mal das Beispiel Studenten / Professor, dann müsste ja auch jeder Professor seine Studenten permanent verklagen, weil die ihm sein "geistiges Eigentum" in den Vorlesungen stehlen.
Egal ob die nun daraus was komplett neues, nobelpreisreifes Entwickeln, oder wirklich nur platt plagiieren.
Ich könnte auch fragen woher der Professor denn sein "geistiges Eigentum" eigentlich bekommen hat.

Wie man so schön sagt: "Wir stehen alle auf den Schultern von Riesen", die LLMs eben auch.

Gut dass ich so einen Rechtsstreit nicht entscheiden muss, ich hoffe nur, dass die Richter dann wenigstens tief in der technischen Materie sind und sich nicht von Lobbyisten einlullen lassen.

Jens01 7. Jul 2024 15:16

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Das meine ich, es kommt sehr wahrscheinlich jedes Mal etwas anderes raus.
Wenn was anderes rauskommt, dann ist das auch wieder was anderes und unterliegt nicht dem Urheberrecht (USA ist da aber etwas anders).

fisipjm 8. Jul 2024 07:02

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von dummzeuch (Beitrag 1538637)
Da fragt man sich dann natürlich, woher ChatGPT diesen Code geklaut hat, denn selbst produzieren kann es ja nicht.

Das ist meines Wissens nicht ganz richtig. LLMs werden ja oft als "stochastischer Papagei" bezeichnet, weil sie statistisch kontextbezogen das wahrscheinlichste nächste Wort ermitteln. Natürlich kann ChatGPT keine gänzlich neuen Erkenntnisse gewinnen, ist aber durchaus in der Lage, aus einer großen vorhandenen Datenmenge Zusammenhänge zu ziehen, die noch niemand an irgendeiner anderen Stelle formuliert hat bzw. zum Anlernen verwendet hat. (So kommen ja auch die Halluzinationen von Methoden/Funktionen/Prozeduren zustande, die es in Delphi gar nicht gibt). Der große Vorteil bei Fragen zur Programmierung ist, dass Programmieren im Grundsatz nichts anderes ist als eine andere Sprache. Sie folgt einer "Grammatik", "Syntax" und hat einen vordefinierten "Satzaufbau". Und in Sprachen sind LLMs, der Natur der Sache geschuldet, extrem gut. Deshalb kann ich mir schon vorstellen, dass dieser Code so noch nicht irgendwo kursiert.

ChatGPT kann ja beispielsweise auch PDF-Dokumente lesen. Gib ihm ein PDF mit einem selbst definierten Standard oder einer Beschreibung für den Aufbau einer Syntax für ein eigenes Dokumentenformat und bitte ihn, dafür in Delphi einen Parser zu schreiben. Das wird genau so funktionieren, obwohl diesen Standard vorher noch keiner zu Gesicht bekommen hat.

Rollo62 8. Jul 2024 07:07

AW: ChatGPT - Wow! (Cron-Job)
 
Genau, ich finde man muss das "Training" von KI im Sinne von "Lernen" verstehen und auch so behandeln.
Wenn man das als "Kopieren" definieren möchte, dann "kopieren" halt auch alle Schüler.
Wahrscheinlich fehlt noch ein genauer Begriff dafür, denn philosophisch und rechtlich ist das Training einer KI im Zusammenhang mit menschlichem Lernen noch nicht wirklich abgegrenzt.

bepe 9. Jul 2024 22:28

AW: ChatGPT - Wow! (Cron-Job)
 
Da hier einige den Grundschüler (ChatGPT) eher positiv aussehen lassen und mein geschätzter Professor (Claude) eher negativ und nur bleiläufig erwähnt wurde, wollte ich nur kurz erwähnt haben: Ihr habt doch alle keine Ahnung :)

Sorry, nur ein dummer Scherz. Aber auch ich habe mich in den letzten Monaten mit Begeisterung von der aktuellen KI-Generation beeindrucken lassen. Nach meiner Erfahrung geht nichts über Suno AI (Musik)...

Meine Erfahrung mit ChatGPT ist eher durchwachsen. Viel zu oft hat GPT bzw. Copilot einen Themenwechsel vorgeschlagen, weil meine Fragen nicht zufrieden stellend oder falsch beantworten wurden.
Ja, ja Prompt Engineering. Davon halte ich nichts. Wenn ich ein LLM mit natürlicher Sprache bedienen können soll, dann werde ich keinen Kurs belegen, in dem mir beigebracht wir mit dieser KI zu kommunizieren. Dennoch ist mir bewusst, dass wenn ich bei meiner Anfrage zu sehr ins Detail gehe, ich damit ggf. Grenzen setze. Grenzen die die KI in ihrer Kreativität einschränken oder Fehler provozieren können...

Bei einem "Gespräch" über die bikubische Interpolation (zur Skalierung von Bildern) kamen wir zu dem Schluss, dass pro Bildzeile und Bildspalte je ein Satz an Koeffizienten benötigt werden. "Also bei einem Bild mit 150x150 Pixeln werden 300 Sätze benötigt?" "Nein, 22.500". ChatGPT hatte sich spontan umentschieden und meinte zu jedem Pixel müssten die Koeffizienten individuell berechnet werden (auch dann wäre 22.500 falsch)…

Nicht falsch verstehen, ChatGPT ist verdammt beeindruckend und ich mag was damit möglich ist. Aber mein Fazit lautet: Ein manchmal nützliches Spielzeug, das sein Geld noch nicht Wert ist.

Mit GPT-4o wurde wohl ein ordentlicher Sprung gemacht. Und während des Vorstellungsvideo hatte ich nur einen Gedanken: Haben will!
Aber das habe ich nicht ausprobiert und werde ich wohl auch nicht. Die Benchmarks scheinen sich da recht einig zu sein. Bei Semantik führt GPT-4o, ansonsten und vor allem bei Software Entwicklung hat Claude die Nase vorne.

Ich Verfasse diesen Text nicht um irgendjemand von irgendwas zu überzeugen. Ich benutze Claude seit Sonntag und bin begeistert. Wollte nur ein paar Fragen und Probleme aus der DP kopieren um Claude zu füttern. Dabei bin ich hier gelandet und musste meiner Begeisterung Ausdruck verleihen. Und darauf hinweisen, Claude ist imho ein Versuch wert.

Ein kleines Beispiel, das ich GTP-4 nicht zutraue (mit GTP-4o würde ich es ausprobieren). Unit A hatte Daten erzeugt, Unit B hat sie aufbereitet und Unit C daraus ein Bild erstellt. Eine Änderung in Unit A, die ich vergaß in Unit B zu berücksichtigen, führte zu einem Fehler in dem Bild.
Ich habe Claude das Bild und die Unit B und C gegeben. "Siehst du die beiden roten Punkte? Die müssten sich eigentlich ...blah blub… befinden. Wo ist mein Fehler?"
Claude fragt ein par mögliche Ursachen ab, welche ich ausschließen konnte. Dann sollte ich ein par Debugzeilen einfügen (OutputDebugString an spezifischen Stellen). Die Ausgabe habe ich Claude gegeben. Und erneut wurden mir Fragen gestellt und ich sollte weitere Debugzeilen einfügen. Claude wurde erneut mit der Ausgabe gefüttert und "Dann kann es nur noch A oder B sein". Und richtig, Claude kannte die Unit A nicht, konnte also den Fehler bzw. den Ort nicht exakt bestimmen, hatte mir aber den entscheidenden Hinweis gegeben.

Dieses systematische und zielführende Vorgehen hat mich beeindruckt. Wie gesagt, ich nutze Claude erst seit Sonntag. Also urteile ich evtl. vorschnell. Aber im Moment fühlt sich die Arbeit mit Claude wie eine Mischung aus Pair Programming und Brainstorming an (und Tipparbeit abnehmen kann er auch ;)). Die erste KI, die ich als nützliches Hilfsmittel empfinde.

Um den Anschluss an diesen Thread nicht völlig zu verlieren, komme ich noch zum "Auslöser" meiner Textwand :)

Zitat:

Zitat von Rollo62 (Beitrag 1538638)
Und Claude Sonnet 3.5 kommt mit Deiner Frage wohl auch nicht sehr weit.
Das war auch auch ehrlicherweise nur das Standardmodell, weil ich noch keine Subscription habe.

Von Claude 3.5 gibt es derzeit nur Sonnet. Das kleine und das große Modell (sollten sie kommen) sind noch nicht verfügbar. Aber das ist die Antwort, die ich erhalten habe:

Delphi-Quellcode:
type
  EOggError = class(Exception);

  TOggPageHeader = packed record
    CapturePattern: array[0..3] of AnsiChar;
    StreamStructureVersion: Byte;
    HeaderType: Byte;
    GranulePosition: Int64;
    BitstreamSerialNumber: Cardinal;
    PageSequenceNumber: Cardinal;
    Checksum: Cardinal;
    PageSegments: Byte;
  end;

const
  OGG_CAPTURE_PATTERN: array[0..3] of AnsiChar = 'OggS';
  MAX_PAGE_SIZE = 65307; // Maximum theoretical Ogg page size

function GetMaxGranulePosition(const FileName: string): Int64;
var
  FileStream: TFileStream;
  Header: TOggPageHeader;
  MaxGranulePosition: Int64;
  SegmentTable: array[0..254] of Byte;
  PageSize: Integer;
  i: Integer;
begin
  MaxGranulePosition := 0;
  FileStream := nil;
  try
    try
      FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
      while FileStream.Position < FileStream.Size do
      begin
        // Read Ogg page header
        if FileStream.Read(Header, SizeOf(TOggPageHeader)) <> SizeOf(TOggPageHeader) then
          raise EOggError.Create('Unexpected end of file while reading Ogg header');

        // Check capture pattern
        if not CompareMem(@Header.CapturePattern[0], @OGG_CAPTURE_PATTERN[0], 4) then
          raise EOggError.Create('Invalid Ogg file format: Capture pattern mismatch');

        // Update max granule position
        if Header.GranulePosition > MaxGranulePosition then
          MaxGranulePosition := Header.GranulePosition;

        // Read segment table
        if FileStream.Read(SegmentTable, Header.PageSegments) <> Header.PageSegments then
          raise EOggError.Create('Unexpected end of file while reading segment table');

        // Calculate page size
        PageSize := 0;
        for i := 0 to Header.PageSegments - 1 do
          Inc(PageSize, SegmentTable[i]);

        // Sanity check on page size
        if PageSize > MAX_PAGE_SIZE then
          raise EOggError.Create('Invalid Ogg page size');

        // Skip to next page
        FileStream.Seek(PageSize, soFromCurrent);
      end;
    except
      on E: EOggError do
        raise;
      on E: Exception do
        raise EOggError.CreateFmt('Error processing Ogg file: %s', [E.Message]);
    end;
  finally
    FileStream.Free;
  end;

  Result := MaxGranulePosition;
end;
Da ich mit Ogg/Sound nicht viel zu tun habe, kann ich nicht beurteilen ob die Zahl korrekt ist aber ich habe eine erhalten :)


Ach zum Thema kopieren... In den Netzen werden die Trainingsdaten ja nicht direkt gespeichert. Diverse Eingaben werden zu "abstrakten Zahlen Kolonnen" zusammengefasst. Wenn ein Netz sehr monoton trainiert wird, dann wird die Ausgabe sehr monoton und den Trainingsdaten sehr ähnlich. Aber auch dann erhalten wir keine Kopie. Es ist eine Fusion und neu Interpretation von diversen Eingaben. Wenn ich mir von einer KI z.B. ein Bild erzeugen lasse, dann stammt die Kreative "Leistung" (zumindest weitestgehend) von mir. Die KI hat gelernt was ein Strich, ein Kreis, was rot und grün ist und wie viele Striche und Kreise benötigt werden um z.B. die Skizze von einem Auto anzufertigen. Aber wie das Auto aussehen soll, das gebe ich vor. Anstatt eines Bleistifts nehme ich halt eine KI (ja, vielleicht habe ich das ganze etwas stark vereinfacht aber von einer Kopie zu reden?)

Oder Suno, Musik... Natürlich gab es schon jemanden der Gitarre gespielt hat. Und natürlich spielt Suno nicht eine einzige Note, die nicht schonmal gespielt wurde. Aber die KI ist weit davon entfernt einfach Schnipsel aus verschiedenen Stücken auszuschneiden und zu einem Neuen zusammen zu setzen. So funktioniert KI nicht...

Gausi 10. Jul 2024 05:36

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von bepe (Beitrag 1538704)
Da ich mit Ogg/Sound nicht viel zu tun habe, kann ich nicht beurteilen ob die Zahl korrekt ist aber ich habe eine erhalten :)

Den Wert kann man recht einfach überprüfen: Der gibt die Anzahl der Samples in der Datei an. Teilt man diesen Wert durch die Samplerate (meist 44100 oder 48000), dann sollte man die Abspieldauer in Sekunden erhalten. Auf den ersten Blick sieht der Code für mich richtig aus, auch wenn man sich den "Sanity check on page size" sparen kann - der dürfte immer True ergeben.

dummzeuch 10. Jul 2024 08:31

AW: ChatGPT - Wow! (Cron-Job)
 
Nur so nebenbei: Die aktuell frei verfügbare chatGPT-Version ist 4:
"This is ChatGPT, based on the GPT-4 architecture."

Es kommt mir auch etwas besser vor als die letzten Male, wo ich es ausprobiert hatte, aber die Fehler, die es einstreut nerven einfach gewaltig.

Wobei ich geschworen hätte, dass ich zuletzt für eine beschränkte Zeit die Version 4o hatte...

jaenicke 10. Jul 2024 08:43

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von dummzeuch (Beitrag 1538713)
Wobei ich geschworen hätte, dass ich zuletzt für eine beschränkte Zeit die Version 4o hatte...

Das kannst du nur testen. Nach ein paar Anfragen sagt es dann, dass das genug ist und du nun kostenlos nur noch die kleinere Version nutzen kannst.

himitsu 10. Jul 2024 08:51

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von Gausi (Beitrag 1538709)
auch wenn man sich den "Sanity check on page size" sparen kann - der dürfte immer True ergeben.

Ich hoffe doch False.

Außerdem kann Length(SegmentTable) * High(Byte) aka High(PageSegments) * High(Byte) sowieso niemals größer als MAX_PAGE_SIZE sein.
255*255 = 64.770 < 65.307

Ich kann jetzt auch nicht erkennen, wie jemand auf den Wert von MAX_PAGE_SIZE kommt.
Bei SizeOf(TOggPageHeader) + High(PageSegments) * High(Byte) kommt auch was Anderes raus.



Aber so lange da PageSize niemals kleiner 0 sein kann, wird man hier zumindest nicht in eine Endlosschleife landen, falls durch einen Datenfehler mal PageSize/SegmentTable Mist liefert.

Gausi 10. Jul 2024 09:28

AW: ChatGPT - Wow! (Cron-Job)
 
Klar, die if-Schleife (:stupid:) liefert immer False, und somit ist der Test auf "Sanity" immer True. ;-)
Zitat:

Zitat von himitsu (Beitrag 1538717)
Außerdem kann Length(SegmentTable) * High(Byte) aka High(PageSegments) * High(Byte) sowieso niemals größer als MAX_PAGE_SIZE sein.
255*255 = 64.770 < 65.307

Eben, das ist der Punkt. So, wie PageSize berechnet wird, kann der maximale Wert nicht überschritten werden. Falls da Mist drin steht, springt das folgende Seek irgendwohin, aber nicht zum nächsten PageHeader, und die Funktion bricht ab.
Interessant ist allenfalls noch der Randfall, wenn die PageSize = 0 ist. Der Fall kann durchaus auftreten, denn manchmal braucht man in diesem Containerformat tatsächlich explizit eine Segmentgröße von 0 in der SegmentTable. Hängt damit zusammen, dass eine Segmentgröße kleiner $ff das Ende eines "Packets" angibt. Wenn die Packetgröße ein Vielfaches von 256 ist, braucht man da als "Trenner" eine Segmentgröße von 0. Und falls ein solches Packet die Seite komplett füllt, muss das auf der folgenden Seite abgeschlossen werden.

Auf den Wert kommt man per 255*256 + 27(=HeaderSize). Ob das sinnvoll ist, sei mal dahingestellt. Aber das führt zu weit weg vom Thema ChatGPT.
Edit: Doch, ist sinnvoll. Das ist SizeOf(TOggPageHeader) + High(PageSegments) + High(PageSegments) * High(Byte)

Rollo62 10. Jul 2024 10:05

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von bepe (Beitrag 1538704)
Meine Erfahrung mit ChatGPT ist eher durchwachsen. Viel zu oft hat GPT bzw. Copilot einen Themenwechsel vorgeschlagen, ...

Also um das klarzustellen, wenn ich von ChatGPT rede, dann meine ich erstmal immer die Pro-Subscription für den Playground, weil es da eine Menge Zusatzfunktionen gibt, die es in der freien Version nicht gibt (oder gab).
Das habe ich aber nicht gecheckt und das ändert sich ja gefühlt alle paar Tage.

Ich vermute einfach mal, dass die freie Version, auch von gleichen Modell, irgendwie beschränkt ist.
Jedenfalls liegt die ChatGPT Subscription meiner Meinung nach von der Leistung her ganz klar an der Spitze,
ich nutze es aber nur zum geringeren Teil für Coding.

Copilot, auch wenn ChatGPT draufsteht, performt meiner Meinung nach ziemlich unterirdisch.
Microsoft bekommt das nicht richtig hin, hab ich mal kurz geckect aber dann ad acta gelegt.


Zitat:

Zitat von bepe (Beitrag 1538704)
Zitat:

Zitat von Rollo62 (Beitrag 1538638)
Und Claude Sonnet 3.5 kommt mit Deiner Frage wohl auch nicht sehr weit.
Das war auch auch ehrlicherweise nur das Standardmodell, weil ich noch keine Subscription habe.

Von Claude 3.5 gibt es derzeit nur Sonnet.

Richtig, Ich meinte da aber auch die Subscription in irgendeiner Form,
die womöglich mehr Funktionen und Performance bietet als die freie Version beim gleichen Modell.

fisipjm 10. Jul 2024 10:43

AW: ChatGPT - Wow! (Cron-Job)
 
[QUOTE=Rollo62;1538722]
Zitat:

Zitat von bepe (Beitrag 1538704)
Copilot, auch wenn ChatGPT draufsteht, performt meiner Meinung nach ziemlich unterirdisch.
Microsoft bekommt das nicht richtig hin, hab ich mal kurz geckect aber dann ad acta gelegt.

Copilot find ich schon nicht schlecht, macht aber erst richtig Sinn wenn man das ganze mit einer IDE benutzt, die das Unterstützt aka VS Code. Klar kann man delphi/pascal auch in VS Code schreiben, aber das erzeugt aus meiner Sicht einfach nur Schmerzen. Keine Unterstützung für die Design Elemente, der LSP Server muss trotzdem laufen und vom Erzeugen eines Projekts und den benötigten Parametern für den Compiler will ich erst gar nicht anfangen.
Es wäre ein echter Mehrwert, wenn EMBA im RAD Studio die Möglichkeit bieten würde den Copilot vernünftig zu integrieren. Das wäre mal wirklich RAD:thumb:

himitsu 10. Jul 2024 11:10

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von Gausi (Beitrag 1538719)
Edit: Doch, ist sinnvoll. Das ist SizeOf(TOggPageHeader) + High(PageSegments) + High(PageSegments) * High(Byte)

Ahhh, das hatte ich vergessen. Hatte verschiedenes gerechnet und war nicht auf den Wert gekommen.

Also nur die segmente damit zu vergleichen ist also nutzlos und wenn man die Header dazu rechnet, kommt es nie über diesen Wert drüber.


Wenn es eine erhöte Nachfrage gibt (Serverauslastung), dann wird das Freie zuerst eingeschränkt (gebremst oder gar vorübergehend deaktiviert).
Abgesehn davon, dass des Freie eh limitiert ist.

dummzeuch 10. Jul 2024 11:35

AW: ChatGPT - Wow! (Cron-Job)
 
Zitat:

Zitat von jaenicke (Beitrag 1538715)
Zitat:

Zitat von dummzeuch (Beitrag 1538713)
Wobei ich geschworen hätte, dass ich zuletzt für eine beschränkte Zeit die Version 4o hatte...

Das kannst du nur testen. Nach ein paar Anfragen sagt es dann, dass das genug ist und du nun kostenlos nur noch die kleinere Version nutzen kannst.

Ich bin mir ziemlich sicher, dass das irgendwo explizit stand. Die Zeit- bzw. Anfragen-Beschränkung habe ich erst später festgestellt.

Aber ich meine, das war auch noch auf chat.openai.com, heute wurde ich von dort automatisch auf chatgpt.com weitergeleitet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz