Cette semaine, l'accent est mis sur le Lab 2, qui consiste à contribuer à un référentiel que je ne possède pas en créant une pull request (PR). J'ai commencé par sélectionner le référentiel d'un camarade de classe sur lequel travailler. Étant donné que JavaScript est mon principal langage de programmation, j'ai opté pour un dépôt basé sur JavaScript pour rationaliser mon flux de travail. Bien que je sois ouvert à l’exploration d’autres langages, mon choix d’un projet JS m’a fait gagner du temps et m’a permis de travailler plus confortablement. Cette décision s'est avérée bénéfique, car le référentiel que j'ai sélectionné présentait des problèmes qui l'empêchaient de fonctionner localement. Cela m'a donné une longueur d'avance dans la compréhension de la base de code et dans la résolution de ses défis. Voici une description détaillée du processus :
Après avoir examiné plusieurs projets, j'ai décidé de contribuer à un référentiel visant à convertir le contenu d'une page Web en un fichier markdown. Après avoir copié et cloné le dépôt sur ma machine locale, j'ai suivi les instructions de configuration décrites dans le fichier README. Cependant, mon camarade de classe semble utiliser macOS, qui utilise la commande ln pour les liens symboliques. Comme je suis sous Windows, j'ai dû remplacer cette étape par la commande npm link.
En enquêtant sur la configuration, j'ai remarqué qu'il manquait dans le fichier package.json les propriétés start et bin, qui sont nécessaires à la configuration des liens symboliques. J'ai ajouté ces entrées et conseillé à mon camarade de classe d'inclure des instructions destinées aux utilisateurs Windows dans la documentation. Plus en détails
Une fois l'application lancée, j'ai rencontré des problèmes supplémentaires. Le premier problème impliquait l'enregistrement de la clé API saisie par les utilisateurs pour configurer l'API de Groq dans un fichier .env. J'ai écrit quelques lignes de code pour gérer le stockage des clés API. Un autre problème était dû à une portée de code incorrecte pour le traitement du fichier de sortie, ce qui empêchait l'application de générer la sortie comme prévu.
Avant d'implémenter la fonctionnalité principale de cet atelier (suivi de l'utilisation des jetons pour chaque requête/réponse), j'ai résolu ces deux problèmes initiaux. Pour chaque numéro, j'ai créé une branche distincte et soumis trois demandes d'extraction distinctes.
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; } }
En ce qui concerne mon propre référentiel, un camarade de classe nommé Hyujin Shin y a contribué pendant le laboratoire 1. Au départ, j'ai remarqué qu'il semblait travailler sur une version obsolète de ma base de code, car j'avais depuis réorganisé la structure pour plus de clarté et d'efficacité. Il a rencontré à nouveau des problèmes liés à la configuration du lien symbolique et j'ai fourni des conseils dans le numéro 7, lui suggérant d'extraire la dernière version avant de suivre les instructions de configuration du lien symbolique dans la section Utilisation.
Un autre problème dans mon code concernait le traitement du fichier de sortie, qui provenait d'une incompatibilité entre l'indicateur d'option et son invocation dans le code, empêchant le traitement correct du fichier. J'ai fourni une réponse détaillée avec des aides visuelles dans le numéro 8.
Pour la fonctionnalité principale de cet atelier : le suivi de l'utilisation des jetons, Hyujin l'a implémenté efficacement sans apporter de modifications significatives à la base de code. Comme j'avais déjà correctement initialisé Groq, il lui suffisait d'extraire les données d'utilisation de la réponse chatCompletion :
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 };
Après avoir examiné son ajout de fonctionnalités, j'ai fusionné le PR et l'ai testé, confirmant que tout fonctionnait comme prévu.
Ce laboratoire a fourni des informations précieuses sur l'extraction de l'utilisation des jetons à partir des LLM (Groq), que j'avais précédemment calculée de manière inexacte en comptant les mots. Plus important encore, cette expérience a mis en évidence l'importance de la collaboration : créer des demandes d'extraction, recevoir des révisions de code et fusionner les contributions des autres.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3