Der Fokus dieser Woche liegt auf Lab 2, bei dem es darum geht, durch die Erstellung einer Pull-Anfrage (PR) zu einem Repository beizutragen, das mir nicht gehört. Ich begann damit, das Repository eines Klassenkameraden auszuwählen, an dem ich arbeiten wollte. Da JavaScript meine primäre Programmiersprache ist, habe ich mich für ein JavaScript-basiertes Repo entschieden, um meinen Workflow zu optimieren. Ich bin zwar offen für die Erkundung anderer Sprachen, aber durch die Wahl eines JS-Projekts habe ich Zeit gespart und konnte bequemer arbeiten. Diese Entscheidung erwies sich als vorteilhaft, da das von mir ausgewählte Repository aufgrund einiger Probleme nicht lokal ausgeführt werden konnte. Dies verschaffte mir einen Vorsprung beim Verständnis der Codebasis und der Bewältigung ihrer Herausforderungen. Hier ist eine detaillierte Aufschlüsselung des Prozesses:
Nachdem ich mehrere Projekte überprüft hatte, beschloss ich, zu einem Repository beizutragen, das darauf abzielte, Webseiteninhalte in eine Markdown-Datei zu konvertieren. Nachdem ich das Repo geforkt und auf meinen lokalen Rechner geklont hatte, befolgte ich die Setup-Anweisungen in der README-Datei. Mein Klassenkamerad scheint jedoch macOS zu verwenden, das den Befehl ln für symbolische Verknüpfungen verwendet. Da ich unter Windows arbeite, musste ich diesen Schritt durch den Befehl npm link ersetzen.
Bei der Untersuchung des Setups ist mir aufgefallen, dass in der Datei package.json sowohl die Start- als auch die Bin-Eigenschaften fehlten, die zum Einrichten von Symlinks erforderlich sind. Ich habe diese Einträge hinzugefügt und meinem Klassenkameraden geraten, Anweisungen für Windows-Benutzer in die Dokumentation aufzunehmen. Mehr im Detail
Als ich die App zum Laufen brachte, traten weitere Probleme auf. Das erste Problem bestand darin, den API-Schlüssel, den Benutzer zum Konfigurieren der Groq-API eingegeben haben, in einer .env-Datei zu speichern. Ich habe ein paar Codezeilen geschrieben, um die API-Schlüsselspeicherung zu verwalten. Ein weiteres Problem wurde durch einen falschen Codebereich für die Verarbeitung der Ausgabedatei verursacht, der die App daran hinderte, die Ausgabe wie erwartet zu generieren.
Bevor ich die Hauptfunktion für dieses Lab implementierte – die Verfolgung der Token-Nutzung für jede Anfrage/Antwort – habe ich diese beiden anfänglichen Probleme gelöst. Für jedes Problem habe ich einen separaten Zweig erstellt und drei verschiedene Pull-Anfragen eingereicht.
for await (const chunk of chatCompletion) { process.stdout.write(chunk.choices[0]?.delta?.content || ""); // process.stdout.write(chunk.choices[0]?.delta?.content || ""); response = chunk.choices[0]?.delta?.content || ""; console.log(chunk); if (chunk.x_groq?.usage) { promptTokens = chunk.x_groq?.usage?.prompt_tokens; responseTokens = chunk.x_groq?.usage?.completion_tokens; } }
Was mein eigenes Repository betrifft, hat ein Klassenkamerad namens Hyujin Shin während Labor 1 dazu beigetragen. Zunächst fiel mir auf, dass er offenbar an einer veralteten Version meiner Codebasis arbeitete, da ich die Struktur inzwischen aus Gründen der Klarheit und Effizienz neu organisiert hatte. Er stieß auf Probleme im Zusammenhang mit der erneuten Einrichtung von Symlinks, und ich habe in Ausgabe Nr. 7 eine Anleitung gegeben und vorgeschlagen, dass er die neueste Version herunterlädt, bevor er den Anweisungen zur Einrichtung von Symlinks im Abschnitt „Verwendung“ folgt.
Ein weiteres Problem in meinem Code betraf die Verarbeitung der Ausgabedatei, die auf eine Nichtübereinstimmung zwischen dem Optionsflag und seinem Aufruf im Code zurückzuführen war und eine ordnungsgemäße Dateiverarbeitung verhinderte. Eine ausführliche Antwort mit visuellen Hilfsmitteln habe ich in Ausgabe Nr. 8 gegeben.
Für das Hauptmerkmal dieses Labors – die Verfolgung der Token-Nutzung – hat Hyujin es effizient implementiert, ohne wesentliche Änderungen an der Codebasis vorzunehmen. Da ich Groq bereits korrekt initialisiert hatte, musste er lediglich die Nutzungsdaten aus der ChatCompletion-Antwort extrahieren:
javascript Copy code // Retrieve Token Usage from Response const promptToken = chatCompletion.usage.prompt_tokens; const completionToken = chatCompletion.usage.completion_tokens; const totalToken = chatCompletion.usage.total_tokens; const tokenInfo = { promptToken, completionToken, totalToken };
Nachdem ich seine Funktionserweiterung überprüft hatte, habe ich die PR zusammengeführt und getestet und bestätigt, dass alles wie erwartet funktioniert hat.
Dieses Labor lieferte wertvolle Einblicke in die Extraktion der Token-Nutzung aus LLMs (Groq), die ich zuvor durch das Zählen von Wörtern ungenau berechnet hatte. Noch wichtiger ist, dass diese Erfahrung die Bedeutung der Zusammenarbeit verdeutlichte – Pull-Requests erstellen, Code-Reviews erhalten und Beiträge anderer zusammenführen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3