paint-brush
Comment affiner et optimiser les assistants GPT avec OpenAIpar@weblabtechnology
6,596 lectures
6,596 lectures

Comment affiner et optimiser les assistants GPT avec OpenAI

par WebLab Technology23m2023/05/03
Read on Terminal Reader

Trop long; Pour lire

Weblab Technology partage des informations sur le réglage fin des assistants GPT avec OpenAI. Découvrez comment ce processus peut améliorer le traitement du langage naturel et améliorer les performances des modèles d'IA.
featured image - Comment affiner et optimiser les assistants GPT avec OpenAI
WebLab Technology HackerNoon profile picture
0-item
1-item
2-item


GPT a récemment fait l'objet de beaucoup de battage médiatique. Les solutions basées sur GPT peuvent sembler faciles à mettre en œuvre - après tout, il est possible d'obtenir des sorties de haute qualité en fournissant simplement des instructions au modèle. C'est certainement assez bon pour impressionner les décideurs. Mais ce qui se passe réellement, c'est que vous présentez des exemples beaux mais choisis avec soin. De plus, le système peut nécessiter une plus grande fiabilité pour passer en production.


Les entreprises envisagent divers cas d'utilisation pour GPT , dont certains reposent sur une communication ouverte entre GPT et l'utilisateur.


Prenez ces outils par exemple :


  1. ChatSpot. La requête Natural Language va à l'API ChatSpot et est transformée en opérations pour l'API HubSpot CRM, l'API Google Docs, etc., puis répond à l'aide d'un modèle de texte génératif lorsque l'action a été effectuée (ou non). Basé sur GPT-4 .


  2. Khanmigo. Guide alimenté par l'IA de la Khan Academy. Les demandes des utilisateurs sont transformées en invites avec un contexte injecté. Le système s'appuie sur la capacité de GPT à gérer jusqu'à huit fois plus de contexte injecté. Basé sur GPT-4.


Nous savons que les entreprises et les utilisateurs sont disposés à utiliser les requêtes en langage naturel comme alternative à l'interface utilisateur. Cependant, pour garantir que les solutions d'IA sont fiables et efficaces lorsqu'elles sont intégrées à des applications réelles, les modèles basés sur GPT doivent être affinés pour s'appliquer réellement à des cas d'utilisation et à des connaissances de domaine spécifiques.


Il est important de noter que GPT-4 offre plus de possibilités de fournir un contexte pour les invites et comporte beaucoup moins d'erreurs hallucinantes.


Hallucinations de l'IA

Les hallucinations de l'IA constituent un défi critique que les ingénieurs doivent relever lorsqu'ils travaillent avec de grands modèles de langage tels que GPT-4. Comme les hallucinations génèrent des informations fausses ou trompeuses, elles peuvent avoir des conséquences extrêmement graves dans les applications où l'exactitude factuelle est primordiale. Dans cette section, nous explorerons plus en détail les aspects techniques des hallucinations de l'IA et discuterons également des stratégies pour atténuer leur apparition.


Pour un exemple rapide, considérons ce test égocentrique de précision factuelle fourni par Noble Ackerson.


Vous repérerez beaucoup de fausses informations parmi les faits :



Les hallucinations de l'IA surviennent principalement en raison des limitations inhérentes à l'architecture du transformateur ainsi qu'aux données d'entraînement utilisées pour les grands modèles de langage. L'absence d'architecture cognitive permettant le raisonnement déductif rend ces modèles susceptibles de générer des informations qui peuvent sembler plausibles mais qui sont, en fait, incorrectes.


L'architecture de transformateur des grands modèles de langage s'appuie sur les mécanismes d'attention et l'auto-attention pour capturer les dépendances à longue portée dans les données d'entrée. Bien que cela permette au modèle de générer un texte cohérent et contextuellement pertinent, cela ne garantit pas l'exactitude factuelle . De plus, les données de formation peuvent contenir des biais ou des informations erronées que le modèle peut apprendre par inadvertance et, par conséquent, contribuer aux hallucinations de l'IA.


Nature probabiliste


Une des raisons de ce manque de fiabilité peut être trouvée dans la nature probabiliste de GPT. Pour le contexte, examinons un instant les structures de données probabilistes, comme les filtres Bloom. Un filtre Bloom est une structure de données probabiliste utilisée pour tester si un élément est membre d'un ensemble composé d'un tableau de bits et de plusieurs fonctions de hachage, chacune mappant un élément à un ou plusieurs indices de tableau.


Pour insérer un élément dans le filtre, l'élément est haché à l'aide des fonctions de hachage et les bits de tableau correspondants sont définis sur 1.


Pour demander si un élément est présent dans le filtre, l'élément est également haché à l'aide des fonctions de hachage, et si tous les bits correspondants du tableau sont définis sur 1, l'élément est probablement dans le filtre.


Cependant, si l'un des bits n'est pas défini sur 1, l'élément n'est certainement pas dans le filtre. Les faux positifs sont intégrés dans des structures de données probabilistes par conception.


Comme un filtre Bloom, GPT est également hautement probabiliste. Mais au lieu de tester l'appartenance à un ensemble, il génère du texte en fonction des invites de saisie. GPT se compose de plusieurs couches de transformateur qui effectuent des calculs complexes pour générer une séquence de sortie de jetons basée sur une invite d'entrée.


La sortie générée par GPT n'est pas déterministe et peut varier considérablement en fonction de la méthode d'échantillonnage utilisée ainsi que des hyperparamètres supplémentaires sélectionnés lors de la formation. Comme les filtres Bloom, GPT peut également « halluciner » en retournant des résultats qui semblent plausibles au niveau de la surface mais qui sont factuellement incorrects.


Cependant, cette probabilité de générer des sorties non fiables peut être réduite en affinant le modèle et en lui fournissant des données de formation de haute qualité.


GPT-4 et risques

Les inexactitudes factuelles cachées peuvent être très préjudiciables aux utilisateurs. Ainsi, il est essentiel que les développeurs mettent en œuvre des mesures pour réduire la probabilité d'apparition d'inexactitudes.


GPT-4 est plus lent et les utilisateurs ne remarqueront pas une grande différence dans les cas occasionnels par rapport aux générations de modèles précédentes. Cela étant dit, GPT-4 est beaucoup plus sûr en raison des diverses mesures de sécurité mises en œuvre pendant la formation, y compris l'engagement d'experts, les améliorations de la sécurité des modèles et une surveillance et une application supplémentaires.


Ces atténuations ont considérablement amélioré les propriétés de sécurité de GPT-4 par rapport à GPT-3.5 , la tendance du modèle à répondre aux demandes de contenu non autorisé diminuant de 82 % et le modèle répondant aux demandes sensibles conformément aux politiques augmentant de 29 %. [ réf ]





Réduire les hallucinations

Même si un certain niveau de risque est impliqué, il sera difficile d'ignorer complètement GPT. GPT est devenu une nouvelle interface de communication pour les humains et les API qui est conçue pour réduire le besoin d'interface utilisateur. Notre travail en tant qu'ingénieurs est de trouver des moyens de résoudre les problèmes qui découlent de son utilisation grâce aux ressources à notre disposition. Et il y a plusieurs façons de le faire.


Ingénierie rapide

L'amélioration des invites peut améliorer les performances des tâches, entraînant des résultats satisfaisants dans environ 50 % à 65 % du temps, mais les performances peuvent ne pas dépasser cette plage fréquemment.


Selon des recherches sur la façon dont les grands modèles de langage sont des Reasoners Zero-Shot (concernant uniquement les capacités de complétion de texte, et non les modèles de chat ou d'instruction), l'amélioration des invites améliore considérablement les performances du GPT sur les tâches de raisonnement.


L'étude a démontré que l'ajout d'une phrase simple comme « Réfléchissons étape par étape » avant chaque réponse est capable de transformer GPT en un raisonneur zéro-shot décent, surpassant les performances LLM zéro-shot par rapport à diverses tâches de raisonnement de référence sans avoir besoin de main- créé des exemples à quelques prises de vue.


L'apprentissage en quelques coups est une autre technique puissante d'ingénierie rapide qui peut améliorer considérablement les performances des modèles de langage comme GPT-4 sur de nouvelles tâches, même avec seulement des données de formation limitées pour continuer. Cela pourrait donc être une bonne alternative pour affiner les cas plus simples. Dans l'approche en quelques prises de vue, l'utilisateur utilise des exemples structurés pour montrer ce qu'il attend, puis laisse un espace libre pour le modèle à remplir.


Vous pouvez consulter un article sur les problèmes que ChatGPT ne peut pas encore résoudre .


Injection de contexte

L'injection de contexte est une technique qui peut aider à réduire les hallucinations de l'IA et à améliorer la précision du texte généré dans des domaines spécifiques. En injectant un contexte pertinent dans l'invite de saisie, le modèle reçoit des informations plus précises, ce qui lui permet de générer des réponses plus précises et pertinentes.


Bien que la méthode d'ingestion de contexte soit plus rapide et moins chère, elle nécessite également une connaissance et une expertise du domaine pour être efficace. Cela dit, cette approche peut être particulièrement utile dans les domaines où la précision et la pertinence du texte généré sont cruciales. On s'attend à ce que cette approche soit adoptée dans des contextes d'entreprise tels que le service à la clientèle et les diagnostics médicaux.


Par exemple, dans une application de chatbot de service client, l'injection de contexte peut impliquer de fournir au modèle des détails pertinents concernant le compte du client, les interactions précédentes et tout problème ou préoccupation connu. Le contexte ajouté permet au modèle de générer des réponses plus personnalisées et précises, améliorant ainsi l'expérience utilisateur globale.


GitHub Copilot et GitHub Copilot X en dépendent fortement dans leurs implémentations. En ingérant le contexte du code en cours d'écriture, ainsi que tout commentaire ou documentation, ces assistants de codage sont capables de saisir les fonctionnalités et les contraintes prévues du code.


L'injection de contexte est le moyen le plus fiable de réduire les hallucinations disponible à ce jour, cependant, une limitation clé existe par rapport à la taille des invites.


 # Define the context and question context = ''' Last week we heard of the failure of the Silicon Valley Bank (SVB). And it is the 2nd largest bank to shut down in the US since 2000. While that is sad, miserable, and pathetic, I want to show you something under the hood — the real reason the bank failed. ''' question = "What is the reason for the failure of Silicon Valley Bank and when did it happen?" # Define prompts with and without context prompt_without_context = question prompt_with_context = f'''Context: """{context}""" Instructions: Using the provided context, write a comprehensive reply to the given query. Query: {question}''' # List of prompts to iterate over prompts = [ {"name": "Without context", "prompt": prompt_without_context}, {"name": "With context", "prompt": prompt_with_context}, ] for prompt_info in prompts: print(f"--- {prompt_info['name']} ---") print(f"Prompt: {prompt_info['prompt']}") response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt_info['prompt']}, ] ) # Extract the answer from the response answer = response.choices[0].message.content.strip() # Print the answer print(f"Answer: {answer}\n")



 --- Without context --- Prompt: What is the reason for the failure of Silicon Valley Bank and when did it happen? Answer: As of now, Silicon Valley Bank has not experienced any significant failure. Silicon Valley Bank, founded in 1983, is a successful and high-performing financial institution that specializes in offering banking services to technology and life science companies and venture capital firms. The bank has grown consistently and continues to operate effectively, serving its clients and staying relevant in the industry.



 --- With context --- Prompt: Context: """ Last week we heard of the failure of the Silicon Valley Bank (SVB). And it is the 2nd largest bank to shut down in the US since 2000. While that is sad, miserable, and pathetic, I want to show you something under the hood — the real reason the bank failed. """ Instructions: Using the provided context, write a comprehensive reply to the given query. Query: What is the reason for the failure of Silicon Valley Bank and when did it happen? Answer: Silicon Valley Bank (SVB) failed last week, making it the 2nd largest bank to shut down in the US since 2000. The precise reasons behind the bank's failure have not been provided in the given context, but it is implied that there is a significant underlying cause for its collapse. To fully understand the situation, it would be helpful to obtain more information about the bank's performance, financial stability, and any recent events that may have contributed to the failure.


Réglage fin

Le réglage fin est une autre technique qui peut servir à améliorer considérablement la précision et la fiabilité du GPT. Le réglage fin est le processus consistant à fournir des données de formation supplémentaires afin que le modèle s'adapte à la tâche ou au domaine spécifique et améliore la précision et la pertinence du texte généré. La motivation n'est vraiment pas si différente de tout autre réseau neuronal d'apprentissage en profondeur.


Le processus nécessite que les données spécifiques au domaine soient continuellement introduites dans le modèle pré-formé jusqu'à ce qu'il apprenne à générer un texte plus pertinent et précis pour la tâche cible.


Apprentissage par renforcement à partir de la rétroaction humaine (RLHF)

RLHF a été très utile pour rendre ChatGPT génial. Voir Leandro von Werra demandant à ChatGPT de nous expliquer RLHF ; ça a vraiment fait du bon boulot !





Comme vous l'avez peut-être remarqué ci-dessus, une astuce consiste à ajouter "comme si j'avais cinq ans", etc. est un excellent moyen de simplifier une explication.


RLHF est une approche puissante qui peut être utilisée pour améliorer les performances et la sécurité des modèles basés sur GPT. Le modèle est affiné grâce à des commentaires générés par l'homme, ce qui l'aide à apprendre à partir d'exemples réels et d'interactions avec les utilisateurs. Ce processus implique la collecte d'un ensemble de données de réponses générées par le modèle ainsi que des scores ou des comparaisons de qualité classés par l'homme, qui sont utilisés pour optimiser les paramètres du modèle.


RLHF a été utilisé avec succès dans un certain nombre d'applications du monde réel, y compris les chatbots et les assistants d'IA, pour améliorer la qualité des réponses et réduire l'apparition d'hallucinations d'IA. En incorporant la rétroaction humaine dans le processus de formation, RLHF apprend au modèle à générer des réponses plus précises, contextuelles et sûres, ce qui conduit finalement à une bien meilleure expérience utilisateur et à une fiabilité accrue. Fondamentalement, cette approche permet aux développeurs d'exploiter la puissance des modèles basés sur GPT tout en répondant aux préoccupations liées à la création d'informations fausses ou trompeuses.


Tant que nous connaissons le domaine, nous sommes en mesure de former le modèle pour répondre à nos besoins. On peut l'entraîner à répondre « je ne sais pas » ou à ignorer certains thèmes. OpenAI utilise RLGH sur ses modèles bruts pour les rendre prêts pour la production.


Voici quelques exemples de résultats :




Conception du modèle

Plongeons-nous dans un exemple pratique en construisant un processus de réglage fin pour GPT. Nous entraînerons le modèle à l'aide d'un ensemble de données défini, lui apprenant ainsi à répondre aux requêtes relatives à ce domaine spécifique.


Considérez le schéma suivant :



Le processus comprend ces composants :


  1. Source Dataset : Une collection de fichiers de formation spécifiques au domaine en question.
  2. Générateur de questions et réponses : une solution basée sur GPT-4 utilisant l'injection de contexte pour produire des questions et des réponses à partir de l'ensemble de données source.
  3. Échantillons de questions-réponses : les données d'apprentissage sont utilisées pour affiner le modèle.
  4. Ajustement : Le modèle de complétion de texte GPT-3 est ajusté en fonction de l'ensemble de données.
  5. Benchmark Q&A : Un ensemble de questions et réponses est utilisé pour évaluer les performances du modèle.
  6. Benchmarking : affiner le processus qui saisit les questions du Benchmark Q&A et évalue la validité des réponses générées.


Nous continuons d'utiliser le modèle de saisie semi-automatique GPT-3, car GPT-4 ne prend actuellement pas en charge le processus de réglage fin.


Ensemble de données source

Pour s'assurer que GPT n'est pas familier avec l'ensemble de données que nous voulons utiliser, nous devrions idéalement nous appuyer sur des données concernant des événements après septembre 2021, la date limite de connaissance de GPT.


Par exemple, j'utilise souvent Next.js pour créer des applications Web, et Vercel a publié Next.js version 13 en 2022. Pour vérifier cela, interrogeons ChatGPT sur la date de sortie de Next.js 13 et voyons quelles informations il peut tirer sur le sujet:




Bien! Mon objectif est que le modèle résultant en sache plus sur Next.js 13 et sur la manière de l'utiliser que ce modèle actuel. Vous pouvez lire sur la façon dont j'ai préparé l'ensemble de données basé sur les articles de blog de next.js 13 ici :





Générateur d'échantillons

Dans ses réponses, nous voulons que notre modèle réponde aux questions (requêtes) dans un format ouvert. Actuellement, seuls les modèles d'achèvement de texte prennent en charge le réglage fin. Nous devrons donc entraîner des modèles de saisie automatique de texte pour répondre à nos questions. Pour garantir des résultats corrects, nous devons d'abord convertir l'ensemble de données en un ensemble de questions et réponses. Nous pouvons le faire en utilisant le modèle ChatGPT.


Voici un exemple de code :


 def generate_qa(filepath): article = read_file(filepath)[:MAX_CONTENT_LENGTH] content = f'''Content for {filepath}: {article} Instructions: Generate question and answer based on Content for {filepath}. Structure it as: Q: <question> A: <answer> ''' questions_answers = [] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful software developer who specialize in next.js and react."}, {"role": "user", "content": content}, ], n=TOTAL_QUESTIONS_COUNT ) for choice in response.choices: qa = extract_qa_from_content(choice.message.content.strip()) questions_answers.extend(qa) return questions_answers


Toute la solution se trouve ici .


Nous cherchons à générer au moins 100 couples question-réponse pour chaque dossier de formation.

La sortie doit être enregistrée dans le Document JSONL . Il est important de terminer chaque invite avec le même modèle. Nous terminerons par \n\n###\n\n comme séparateur. Vous pouvez trouver l'ensemble de données résultant dans ce fichier ici : fine_tuning_dataset.jsonl .


Ingestion de fausses questions

Nous voulons que le modèle réponde véritablement "Je ne sais pas" à toutes les questions sans rapport avec le développement logiciel et next.js. Nous pourrions y parvenir en intégrant un classificateur de questions next.js pour tester si la question est liée à next.js ou non. Alternativement, si nous voulions avoir une architecture simple, nous pourrions ajouter des données de formation supplémentaires à notre processus de réglage fin.


De plus, même si la question était liée à next.js, nous ne voulons pas que notre système réponde à des questions absurdes telles que : "Quand le framework next.js atteindra-t-il 1 milliard d'utilisateurs ?" Nous aimerions que le modèle réponde à cette question par « Je ne sais pas ».


Exemple de code :

 NON_NEXTJS_Q_A_PROMPT = """Create a series of random questions and answers that are not related to the Next.js framework. Each question should be followed by a clear answer stating that it is not relevant to Next.js. For example: <question>What is the capital of Ukraine?</question> <answer>This question is not related to Next.js.</answer> <question>What is Spring Framework?</question> <answer>It is not related to Next.js.</answer> Feel free to generate any type of questions you like, as long as the answer indicates that it is not related to the Next.js framework.""" def generate_random_qa(prompt): questions_answers = [] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful software developer who specialize in next.js and react."}, {"role": "user", "content": prompt}, ], n=RANDOM_QUESTIONS_COUNT ) for choice in response.choices: qa = extract_qa_from_content(choice.message.content.strip()) questions_answers.extend(qa) return questions_answers



J'ai généré 100 questions et réponses pour montrer au modèle que nous voulons qu'il ne réponde qu'aux questions relatives à Next.js et qu'il est tout à fait acceptable de répondre "je ne sais pas" pour réduire les hallucinations. L'ensemble de données d'entraînement résultant est répertorié ici dans réglage fin de dataset.jsonl .


Réglage fin

Enfin, après avoir créé un ensemble de données d'entraînement (pour plus de détails sur ce processus, consultez le guide officiel d'OpenAI ), nous sommes prêts pour les ajustements.


Malheureusement, il n'y a pas beaucoup de modèles à partir desquels nous pouvons nous ajuster. Vous pouvez tous les voir en tirant une liste de tous les modèles openai api models.list' with '“allow_fine_tuning”: true, .


Dans le cadre du processus de réglage fin, nous pourrions jouer avec le taux d'apprentissage, etc., mais d'après mon expérience, cela n'affecte pas vraiment le score obtenu. Et la formation du jeu de données réel peut déjà être coûteuse, donc jouer avec des paramètres supplémentaires peut ne pas en valoir la peine.


La durée du processus de mise au point dépend du modèle (davinci, ada, etc.). Sur notre ensemble de données de 1511 cas et 907 Ko, cela a pris environ une heure.


Analyse comparative

N'oubliez pas que nous travaillons avec le modèle d'achèvement de texte, pas le modèle de chat ou d'instruction. Et notre modèle d'achèvement de texte est réglé pour répondre en utilisant le format de réponse. De plus, notre modèle attend que l'invite de saisie se termine par ?\n\n###\n\n . Si ce n'est pas le cas, la sortie peut être inattendue, mais le modèle essaiera très probablement de générer du contenu pour terminer l'invite avec le terminateur d'invite.


Essayons d'estimer comment le modèle se comportera avec les ensembles de questions suivants.


Ensemble 1. Questions correctes

Nous nous attendons à ce que le modèle donne des réponses appropriées en fonction du contenu fourni :


 proper_questions = [ "When Next.js 13 was released?", "Is Next.js 14 already released?", "How Next.js 13 is different from Next.js 12?", "How routing is different in Next.js 13 compared to Next.js 12?", "How to prevent Next.js file component from using React Server Components?", "What is Turbopack?" ]


J'ai effectué deux exécutions de modèle sur ces questions avec la température = 0,3.


La liste des bonnes réponses :

 #1 Q: When Next.js 13 was released? A: Next.js 13 was released on October 2022. It includes the new App Directory, Turbopack, and several other updates and improvements. #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 has been rebuilt from the ground up to be faster and more reliable. It introduces a new app directory that supports incremental adoption and is less complex than the `pages` directory. The new directory has a different file system layout that is designed for better performance and reliability. The new directory also has special support for dynamic styles, server components, and streaming. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: In Next.js 13, the `app` directory replaces the `pages` directory. This means that routing is handled via the file path each `page.tsx` is located in. Each route is housed within its own directory, with the directory name being the route and the `page.tsx` being its index that gets rendered at that route.


La liste des réponses partiellement correctes :

 #2 Q: Is Next.js 14 already released? A: No, Next.js 14 is not released yet. It will be released in the coming months. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, we can add the following code at the top of the file:


// @supports react-server // importez ClientComponentHere


 This code tells Next.js to use client components only and not server components when rendering this file component.


Je donnerai 1 pour la bonne réponse, 0 pour la réponse partiellement correcte et -2 pour la mauvaise réponse.


J'ai effectué deux exécutions de modèle sur ces questions avec la température = 0,7.

La liste des bonnes réponses :

 #2 Q: Is Next.js 14 already released? A: No, Next.js 14 is not released yet. This blog post is about the new features coming to Next.js 13 with React 18. #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 has several new features, including the `app` directory, layouts, error components, loading components, and server components. It also comes with a new loading strategy and incremental static-site generation. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: Routing in Next.js 13 no longer requires a `pages` directory. Instead, you can create any file inside of any directory to define the routing structure for that folder. Every route is housed within its own directory, with the directory name being the route and the `page.tsx` being its index render at that route. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, you can add the following code at the top of the file:


"utiliser le client" ;

 #6 Q: What is Turbopack? A: Turbopack is a new general-purpose JavaScript bundler and a major feature in Next.js 13. It is intended as a Webpack replacement, and although it's released as alpha, you can use Turbopack now as the dev-mode bundler from Next.js 13 forward. Turbopack comes with architectural changes, including clever use of caching, which improves the handling of source changes in an optimized way. #1 Q: When Next.js 13 was released? A: Next.js 13 was released in October 2022. #2 Q: Is Next.js 14 already released? A: No. Next.js 14 is still in beta, but with the release of Next.js 13.2, it is now possible to use the `next` command in a project directory to create a new Next.js application using the latest version. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: Routing in Next.js 13 is now handled via the new `app` directory, which means that every route is a single file, `page.js`. Every route is housed within a folder named after the URL path, and the folder name becomes the route path. For example, `app/profile/settings/page.js` is the file that controls the `/profile/settings` route. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, you can add the following code at the bottom of the file:


// Ce fichier est utilisé avec la fonction par défaut d'exportation du rendu du serveur ServerComponent { // ... }


 If you don't add this code, the file component will use the React Server Components by default. #6 Q: What is Turbopack? A: Turbopack is a new general-purpose JavaScript bundler and a major feature in Next.js 13. Using the Turbopack alpha with Next.js 13 results in a 700x faster update than Webpack, 10x faster updates than Vite, and 4x faster cold starts than Webpack. Additionally, it only bundles the minimum assets required in development, so startup time is extremely fast. Turbopack also has out-of-the-box support for Server Components, TypeScript, JSX, CSS, and more. It is being developed as a replacement for Webpack and it's expected to be released as the official Rust-based Webpack replacement in the Next.js 13 stable release.


La liste des réponses partiellement correctes :

 #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 is different from Next.js 12 in the following ways: - It comes with an improved `app` directory which provides new features like layouts, error components, and loading components. - It introduces the `loading.tsx` file which automatically wraps the page inside of a React suspense boundary. - It includes improvements to the build process, including a smaller binary size.


La liste des réponses incorrectes :

 #1 Q: When Next.js 13 was released? A: Next.js 13 was released in November of 2020.


Vous avez peut-être remarqué que le modèle peut encore halluciner à des températures élevées. Jetez un œil à la réponse "Next.js 13 a été publié en novembre 2020".


Sur la base de deux températures différentes, nous pouvons voir que si nous voulons que notre assistant soit plus précis, nous devons réduire la température. Nous utiliserons donc la température 0,3 pour tous les tests suivants et garderons la note de suivi de 10/12. Il est également recommandé de régler la température sur 0,3 afin de rendre les sorties plus stables et de pouvoir rejouer les entrées.


Ensemble 2. Questions hors champ

Nous avons formé notre modèle pour répondre uniquement aux questions techniques sur JavaScript, Next.js et React.


 out_of_scope_questions = [ "What is the population of the United States?", "How to cook a steak?", "What is native vector database?", "Could you please generate a random number?", "What is a space-time continuum?", ]


La liste des bonnes réponses :

 #1 Q: What is the population of the United States? A: This question is not related to Next.js. #2 Q: How to cook a steak? A: This question is not related to Next.js. #5 Q: What is a space-time continuum? A: This question is not related to Next.js. #1 Q: What is the population of the United States? A: This question is not related to Next.js. #2 Q: How to cook a steak? A: I do not know. #5 Q: What is a space-time continuum? A: This question is not related to Next.js.


La liste des réponses partiellement correctes :

 #3 Q: What is native vector database? A: Native vector database is a new feature in Next.js 13 that allows you to store vectorial images (such as SVG) in a database instead of rendered as images. This feature is available in Next.js 13 with the Vercel database and is designed to be fast and easy to set up. #4 Q: Could you please generate a random number? A: Yes, I can generate a random number. #3 Q: What is native vector database? A: Native vector database is a new feature in Next.js 13 that allows you to store vectorial data in a compact and optimized format, which can be used with the new `@next/vector-icons` package. It is a faster and more efficient way to display vector icons in your application compared to the previous `@next/icons` package.


Une mauvaise réponse :

 #4 Q: Could you please generate a random number? A: Sure. Here you go:

npm exécuter générer

 This will generate a random number in the range of 1 to 10.


Surtout, le modèle fonctionne bien, mais quand même, il peut halluciner. La note est de 4/10. Nous faisons bien pire ici que sur les bonnes questions.


Set 3. Requêtes incorrectes

Nous avons formé notre modèle pour compléter les réponses avec des questions. Mais que se passe-t-il si nous essayons d'ajouter quelque chose au hasard ? Préparez-vous à quelque chose d'étrange.


 not_questions = [ "Generate Next.js index page", "Suggest how no name next.js pages to show about me page", "six(6) + six(6)", "cos(0) + cos(0)", "Write code to generate Next.js index page", "Aaaaaughibbrgubugbugrguburgle!?", "Mmmm mrrrggk", ] process_questions(not_questions, is_accumulate = False)


La liste des bonnes réponses :

 #3 Q: six(6) + six(6) A: This is not a valid mathematical expression. #6 Q: Aaaaaughibbrgubugbugrguburgle!? A: I do not understand. #7 Q: Mmmm mrrrggk A: I do not understand. #6 Q: Aaaaaughibbrgubugbugrguburgle!? A: I have no idea what that means. #3 Q: six(6) + six(6) A: This is not a valid mathematical expression.


La liste des réponses partiellement correctes :

 #1 Q: Generate Next.js index page A: Generate a Next.js `index.js` file with the given directory path.


La liste des réponses incorrectes :

 #2 Q: Suggest how no name next.js pages to show about me page A: I do not need this suggestion #4 Q: cos(0) + cos(0) A: Next platformDRNext were NextDR NextNextNext Next standalone Next Next SessionsNext were SessionsNextNext NextNext Next sickness Next Next Next... #5 Q: Write code to generate Next.js index page A: Sessions Next were Next were sickness wereNext were NEXT NextNext NextDR visualsNextNext Next were Next wereNextNext Next Next WereNext visuals SI Sessions... #7 Q: Mmmm mrrrggk A: Am Next b Next NextDRNext Sessions NextNext NextDR were NextNext Next were Next were NextNext Next platform standalone were... #1 Q: Generate Next.js index page A: This command will generate an index.js file inside the `pages/` directory. You can then use this file to render the index page of your app. #2 Q: Suggest how no name next.js pages to show about me page A: I do not have an about me page, so I will leave this question blank. #4 Q: cos(0) + cos(0) A: This expression is not a constant expression. #5 Q: Write code to generate Next.js index page A: Next.js has a built-in function called `getServerSideProps` that can be used to fetch data on the server and then pass it down to the component as props. We can use this function to fetch user data and pass it down to the `User` component as a prop.


 export default function User({ user }) { return <h1>User: {user.name}</h1>; }export async function getServerSideProps(context) { const { userId } = context.params; const res = await fetch(https://api.example.com/users/${userId}); const user = await res.json();


Le score final est de -11/14, en gros 0/14. Le modèle est absolument terrible chaque fois que nous ne formulons pas correctement les questions.


Évaluations OpenAI

OpenAI a ouvert Évaluations OpenAI , un framework logiciel qui facilite la création et l'exécution de benchmarks pour évaluer les modèles et examiner leurs performances échantillon par échantillon. Evals est employé par OpenAI pour orienter le développement de leurs modèles à travers la détection des faiblesses et la prévention des régressions. À notre tour, nous pouvons utiliser Evals pour surveiller les performances entre les versions de modèles et faire évoluer les intégrations de produits.


OpenAI Evals fonctionne avec les modèles de chat et non-chat, mais comme OpenAI se concentre sur les modèles de chat, vous devrez préparer un ensemble de données pour l'évaluation dans le format d'entrée basé sur le chat. Aujourd'hui, vous pouvez commencer par utiliser modelspec_extra_options dans la CLI « valable » pour contrôler les paramètres du modèle. Essayez de régler la température sur 0 pour obtenir des résultats prévisibles.


Autres cycles du processus de réglage fin

Les données sont au cœur du processus de création d'un modèle fonctionnel et fiable. Il va sans dire que le modèle que nous avons actuellement pour le bot QA du framework Next.js 13 n'est pas encore prêt pour la production. Nous devons développer l'ensemble de données de tournage et mieux apprendre au modèle comment répondre aux questions hors domaine, encore une fois, en utilisant plus d'échantillons. Nous devons créer un registre Eval et surveiller les performances actuelles de notre modèle.


De plus, nous pourrions également vouloir former notre modèle pour gérer les entrées dans le format sans question et, si nous le préparions pour la production, notre ensemble de données devrait idéalement avoir également quelques référentiels d'échantillons de code. Cette partie représente environ 60 % de l'ensemble du processus de réglage fin. De plus, nous pourrions avoir besoin de plus de RLHF pour préparer le modèle afin de répondre à certaines questions de la manière dont nous le souhaitons.


La bonne chose à propos des modèles affinés est qu'ils sont continuellement affinés. Ainsi, on peut régler plusieurs fois, mais il convient de noter que le réglage fin peut affecter les résultats précédemment réglés, il doit donc toujours y avoir une bonne raison de le faire, ce qui réduit également le coût et la durée de la formation.


Enfin, nous devons nous rappeler que nous construisons sur un modèle déjà formé et que les capacités d'apprentissage du modèle affiné sont relativement limitées. Si la portée de notre domaine n'est pas très familière au modèle GPT de base, il est préférable d'utiliser l'injection de contexte sous une forme ou une autre, car un réglage fin peut être insuffisant, voire inutile.


Et quelques derniers faits simples qui méritent d'être mentionnés :


  • Le réglage fin fonctionne très bien pour les tâches de classification relativement simples.
  • Essayez d'abord d'utiliser des modèles plus petits, comme Ada. Ils exécutent les demandes plus rapidement et sont plus stables, moins chers, plus rapides à former et moins chers à exploiter.
  • Ne construisez pas de modèles énormes. Si votre ensemble de données est « énorme » et séparable, créez-en plusieurs et entraînez-les séparément.



Également publié ici.



Les références

  1. https://github.com/vercel/next.js/tree/canary/docs
  2. https://openai.com/research/gpt-4
  3. https://towardsdatascience.com/chatgpt-insists-i-am-dead-and-the-problem-with-language-models-db5a36c22f11
  4. https://mpost.io/gpt-4-inherits-hallucinating-facts-and-reasoning-errors-from-earlier-gpt-models/
  5. https://arxiv.org/abs/2303.12712
  6. https://levelup.gitconnected.com/the-surprising-things-chatgpt-cant-do-yet-4362842da5b7
  7. https://digitalbunker.dev/understanding-the-inner-workings-of-bloom-filters/
  8. https://huggingface.co/blog/rlhf