Ce référentiel est mon terrain de jeu pour tester des invites qui génèrent des réponses appropriées à partir de LLM locaux. Comme c'est un terrain de jeu, il n'est pas bien structuré, alors n'hésitez pas à poser des questions si vous les avez. La discorde Autogen est un excellent endroit pour la discussion, voir le canal # alt-modèles à l'intérieur.
J'étudie les points dans le flux de travail Autogen (de la base de code aux descriptions d'agent) qui doivent être adaptées pour accueillir les LLM locales qui ne sont pas aussi capables que de grands modèles privés comme le chatppt d'AI.
Testant actuellement avec un scénario de débat "de chat de groupe" (voir Debate.py) qui a été créé par Tevslin (voir son référentiel et son article de blog, merci!) En utilisant Mixtral et divers autres LLM locaux pour que le LLM rende le nom du nom de la Agent / rôle suivant de manière cohérente. Il s'agit d'un bon test car il implique un LLM comprenant un ordre des agents, en examinant où le débat se trouve et déterminant le prochain agent. Nous pourrions presque le faire dans un format à la ronde, ou dans une machine à états finis (où nous avons défini qui peut parler à qui), mais il est important de pouvoir inciter un LLM à choisir l'agent bon, suivant.
Je vais mettre toutes les conclusions dans cette lecture. Veuillez noter que cela évolue et que je ne suis qu'une personne qui essaie de faire fonctionner les choses ?.
J'utilise Olllama lorsque je teste contre les bibliothèques Autogen et avec Litellm lors des tests via AutogenStudio.
Le code avec lequel je teste actuellement est dans la sélection des conférenciers - Test Rounds.
Haut-parleurs sélectionnés correctement | |
---|---|
✅ | Tous les 5 corrects |
? | 4 sur 5 correct |
3 ou moins correct | |
? | ne passait pas aller |
Table large - défilement ->
Contenu de l'étape 1 | Sélectionner le haut-parleur | Réduction du contexte | PHIND-CODELLAMA: 34B-V2 | mixtral 8x7b (Q4) | OpenHermes: 7B-Mistral-V2.5-Q6_K | ORCA2: 13B-Q5_K_S | solaire: 10.7b-instruct-v1-q5_k_m | Chat neural: 7b-v3.3-Q6_K | llama2: 13b-chat | Qwen: 14b-chat-Q6_K | Mistral: 7B-Instruct-Q6_K | yi: 34b-chat-q3_k_m | phi-2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Original | Original | Aucun | ? | ||||||||||
Original | Souligner, séquence, concis | Résumé | ✅ | ✅ | ✅ | ? | ? | ||||||
Original | Souligner, séquence, concis | Aucun | ✅ | ✅ | ? | ? | |||||||
Souligner l'ordre | Souligner, séquence, concis | Aucun | ✅ | ? | ✅ | ? | ? | ? | ? | ||||
Souligner l'ordre | Souligner, séquence, concis | Résumé | ✅ | ? | ✅ | ? | ? | ? | ? | ||||
Souligner + exemple | Souligner, séquence, concis | Aucun | ✅ | ✅ | ? | ? | ? | ? | ? | ||||
Souligner + exemple | Souligner, séquence, concis | Résumé | ✅ | ✅ | ? | ? | ? | ? | ? | ||||
Original | Original | Unique nom du haut-parleur | ✅ | ✅ | ? | ||||||||
Souligner + exemple | Souligner, les capitales, le raisonnement, aucun débat | 300 premiers caractères | ? | ✅ | ? | ? | ? | ||||||
Souligner l'ordre | Souligner, séquence, concis | 300 premiers caractères | ? | ✅ | ? | ? | ? | ||||||
Souligner l'ordre | Souligner, séquence, concis | 100 premiers chars et nom | ✅ | ? | ? | ? | ? | ||||||
Souligner l'ordre | Souligner, séquence, concis | Unique nom du haut-parleur | ? | ✅ | ? | ? | ? | ||||||
Souligner l'ordre | Souligner, les capitales, le raisonnement, aucun débat | 300 premiers caractères | ? | ✅ | ? | ? | |||||||
Souligner + exemple | Souligner, séquence, concis | 300 premiers caractères | ✅ | ? | ? | ? | |||||||
Souligner + exemple | Souligner, séquence, concis | Unique nom du haut-parleur | ? | ✅ | ? | ? | |||||||
Souligner + exemple | Souligner, les capitales, la réponse à mot unique | Résumé | ? | ✅ | ? | ? | |||||||
Souligner + exemple | Souligner, séquence, concis | 100 premiers chars et nom | ? | ✅ | ? | ||||||||
Souligner + exemple | Souligner, les capitales, la réponse à mot unique | Aucun | ✅ | ? | ? | ||||||||
Souligner + exemple | Souligner, les capitales, la réponse à mot unique | Unique nom du haut-parleur | ✅ | ? | |||||||||
Souligner + exemple | Souligner, les capitales, le raisonnement, aucun débat | Aucun | ? | ? | ? | ? | ? | ? | |||||
Souligner + exemple | Souligner, les capitales, le raisonnement, aucun débat | Résumé | ? | ? | ? | ? | ? | ? |
Gagnants:
Les résultats diffèrent significativement entre les LLM, sans surprise. Cependant, les ajustements des invites modifiaient la façon dont ils se comportaient indépendamment - par exemple, changer un mot ou deux dans une invite signifierait que Mistral 7B, qui avait produit le meilleur résultat, produirait quelque chose d'inattendu mais ce même changement signifierait que Solar 10.7b, Ce qui ne produisait pas ce que je voulais, générerait tout d'un coup le résultat correct.
Ainsi, à ce stade, je crois que nous devrons adapter de nombreuses invites (à la fois celles que nous pouvons contrôler par le biais de descriptions d'agent et de messages système, jusqu'aux invites sous-jacentes telles que la sélection de haut-parleurs) pour s'adapter aux LLM que nous utilisons . C'est jusqu'à ce qu'un standard de raisonnement LLM minimum puisse être atteint.
J'ai appris rapidement que pour obtenir des résultats cohérents, au moins pour l'invite de sélection des haut-parleurs, j'ai dû régler la température à zéro (peut fonctionner avec de faibles nombres plutôt que de zéro). Bien que, même à zéro, les réponses varient parfois, elles sont généralement cohérentes.
La capacité de pouvoir régler la température des modèles d'Autogen est importante pour ces petits LLM.
Alors que les messages de chat continuent de croître en nombre, il en va de même pour le risque qu'un modèle cesse de produire de bonnes réponses. Certains, comme PHI-2 avec une longueur de contexte 2K, cesseraient de générer des résultats moins de la moitié de mes tests avec le chat de groupe de débat. D'autres, dont Mixtral 8x7b avec une fenêtre de contexte de 32k, ont montré une amélioration lorsque les longueurs de contexte ont été réduites (bien avant que le contenu ne soit aussi long).
Un exemple de cela, avec Mixtral, est que lorsque le message de chat complet transmis à Mixtral était inférieur à 8 700 caractères (pas des jetons, je n'ai pas pu obtenir ce chiffre), il renverrait la bonne réponse (régulièrement à ce nombre de personnages). Lorsqu'il était supérieur à 8 700 caractères, il ne suivrait pas les instructions et au lieu de retourner le nom de l'orateur suivant, il débatrait comme eux. C'était un problème cohérent car la longueur a continué d'augmenter au-delà de 8 700. J'imagine que d'autres modèles ce point de commutation serait encore plus bas.
Pour le moment, il ne semble pas y avoir de mécanisme pour comprimer l'historique de la conversation, mais je pense que cela pourrait être utile pour garder le contexte du chat complet à mesure que plus de discussion se produit.
Avec le défi de minimiser la durée du contexte, j'ai pensé à deux options:
Nous pourrions, je suppose, combiner les deux options, en supprimant le contenu des messages plus anciens et en résumant les plus récents.
Pour les tests de sélection des conférenciers, je fais, en supprimant le contexte et en résumant les messages d'agent a travaillé et ont produit les résultats corrects. C'est prometteur.
Je me suis concentré sur le test car il est essentiel que les agents soient sélectionnés correctement. Cette tâche, qui se fait largement dans le code Autogen sous-jacente, est adaptée à l'ouvrir le chatppt de l'IA. L'invite qu'il génère fonctionne probablement avec d'autres très grands modèles également. Cependant, le contrôle de cette invite est nécessaire pour fournir la direction spécifique pour nos petits LLM locaux.
L'invite par défaut est
You are in a role play game. The following roles are available:n{self._participant_roles(agents)}.nnRead the following conversation.nThen select the next role from {[agent.name for agent in agents]} to play. Only return the role.
Pour mes tests sur le flux de travail de débat, je suis en permanence de l'invite et un exemple de ce à quoi il ressemble pour Mixtral 8x7b est:
Read the above conversation and select the next role, the list of roles is ['Debate_Moderator_Agent', 'Affirmative_Constructive_Debater', 'Negative_Constructive_Debater', 'Affirmative_Rebuttal_Debater', 'Negative_Rebuttal_Debater', 'Debate_Judge']. What is the next role to speak, answer concisely please?
Fait intéressant, même un petit ajustement comme le changement (dans le texte ci-dessus)
answer concisely please
à
return only the name of the role
a changé la réponse en une réponse incorrecte pour Mixtral mais pour une bonne pour Llama 13B.
Avec le test de débat, il y a un message de discussion (il s'agit d'un jeu de rôles, ...) puis un message de chat pour chacun des débatteurs. Nous transmettons tous ces messages de chat à la LLM pour déterminer le haut-parleur suivant pendant le processus de sélection des haut-parleurs.
Le message de chat pour chaque débatteur a le contenu (leur réponse de débat), le rôle ("utilisateur") et le nom (nom de leur agent), comme ceci:
{
"content": "<a whole lot of content here.>",
"role": "user",
"name": "Affirmative_Constructive_Debater",
},
Au fur et à mesure que tout est transmis au LLM, je pensais qu'il utiliserait cette clé / valeur name
pour savoir de quel agent provenait de ce message.
Fait intéressant, si j'ai ajouté ce qui suit au début du contenu pour chacun de ces messages
I am <the debater's name here>. <then the original content goes next>
... Mixtral était bien mieux pour ramasser qui a parlé et choisi le prochain agent. Par conséquent, il peut être avantageux d'insérer explicitement au début du message de chaque agent, nous sommes donc sûrs que le LLM sait qui était l'agent. Ou, au moins dans ce cas où le nom de l'agent est important pour déterminer la séquence.
La plupart des modèles ont renvoyé des réponses en texte brut et cela est important pour faire correspondre les noms d'agent au texte renvoyé du LLM.
Cependant, et douloureusement que c'est le modèle principal que je voulais utiliser, Mixtral semble fournir une réponse au format Markdown (?) La plupart du temps. Donc, si un agent était nommé
Negative_Constructive_Debater
il peut revenir
Negative_Constructive_Debater
ou
Negative Constructive Debater
Et cela emporterait Autogen en le faisant correspondre contre le nom d'un agent.
J'ai essayé de modifier les invites pour obtenir Mixtral pour fournir une sortie de texte brut, mais je n'ai pas pu le faire de manière cohérente.
Peut-être qu'une tactique ici est de ne pas utiliser de soulignements, bien que je pense qu'il a été mentionné pour éviter les espaces dans les noms d'agent et utiliser des soulignements à la place, il vaut donc la peine de vous y attaquer.
Les modifications du code correspondant pour accueillir _
et les espaces pour les traits de soulignement contribueraient grandement à soutenir les LLM locales qui peuvent les mélanger.
En tant que mise en garde, je suis tôt dans mes tests et je n'ai testé que sur la sélection des conférenciers. Bien que cela soit essentiel au processus multi-agents, il existe de nombreux autres aspects des LLM (réponses de qualité, génération de code, appels de fonction, etc.) que je n'ai même pas touchées.
Ainsi, mes notes ci-dessous sont sur les tests précoces des LLM qui choisissent le prochain agent correct et renvoient son nom. Je vais les mettre dans mon ordre de préférence.
Enfin, une grande partie des compétences en provenance et je ne suis pas un expert :).
LLM | Pensées |
---|---|
Mixtral 8x7b v0.1 instruct (Q4) | Comme le plus grand modèle, je m'attendais à ce que cela gère la direction mieux que les autres. Mon expérience a été qu'il fournit des réponses cohérentes et avec quelques modifications rapides, vous pouvez l'atteindre pour obtenir le résultat dont vous avez besoin. Il a une bizarrerie étrange en ce qu'il répond parfois au format Markdown. |
Mistral 7B v0.2 instructeur | À l'origine, cela a fourni les meilleures réponses, les résultats en texte brut et la possibilité de retourner un seul nom d'agent sans sortir. La demande a montré qu'il était assez sensible à des changements rapides. Il ne comprend pas toujours les directions, cependant, pas aussi bien que Mixtral |
LLAMA2 13B CHAT | Hit and Miss, quand il était sur le point, c'était parfait, sinon ce n'était tout simplement pas le cas. Plus de modifications rapides pourraient fonctionner ici. |
Instruction solaire 10.7b | Comme les invites ont été modifiées, cela est devenu de plus en plus cohérent |
Chat neuronal 7b | Semblable à Llama 13b, il était parfois excellent mais tout sauf à d'autres |
OpenHermes 7b Mistral V2.5 (Q6) | Dans un test, c'était parfait, pour tout le reste qu'il a bombardé. J'ai constaté que cela ne suivait pas bien les instructions. |
Orca 2 13B | Seulement terminé un seul test, n'a pas bien suivi les instructions pour le reste |
CHAT QWEN 14B (Q6) | Je n'avais pas utilisé ce modèle auparavant et je l'espérais, mais il n'a jamais réussi un test et suivre les instructions n'était pas son fort. |
Phi-2 | Malheureusement, la longueur de contexte soutenue par ce modèle s'est rapidement épuisée. De plus, cela n'a vraiment pas suivi les instructions précisément. |
Phind Codellama 34b | Étonnamment bon! Avec Mixtral. Cependant, il dit qu'il ne débatra pas! |
YI-34B Chat (Q3) | Cela m'a surpris, c'était vraiment le pire du groupe. Je le classe sous PHI-2 car il est trop grand pour être aussi mauvais dans les instructions suivantes. Peut-être qu'un instruct / autre version serait mieux. |
Voir plus d'informations dans l'un de mes documents de constatations rapides qui montrent comment j'ai itéré à travers des invites et quel était l'effet sur chacune des réponses des LLMS.
Avez-vous utilisé d'autres modèles qui suivent bien les instructions, faites-le moi savoir!
La mise en œuvre de certains d'entre elles (temp = 0, résumé, noms de nettoyage des noms d'agent, modification de l'invite de sélection des rôles) signifiait que j'ai pu obtenir Mixtral pour choisir le bon agent à chaque fois pendant la sélection des haut-parleurs (5 séquences avec 10 itérations chacune). ?
Sans régler les invites spécifiquement à ces autres modèles:
Je crois que ceux-ci sont importants car ils ont moins réussi avant ces changements et plutôt imprévisibles.
Bien sûr, mes tests et modifications, en particulier sur les invites, sont sur le chat de test sur lequel je travaille. Donc, plus de tests seraient bons.