Dieses Repository ist mein Spielplatz für Testaufforderungen, die geeignete Antworten von lokalen LLMs generieren. Da es sich um einen Spielplatz handelt, ist es nicht gut strukturiert. Wenn Sie also Fragen haben, falls Sie sie haben. Die Autogen-Zwietracht ist ein großartiger Ort für die Diskussion. Siehe den #Alt-Models-Kanal darin.
Ich untersuche Punkte im Autogen -Workflow (von der Codebasis bis zu den Agentenbeschreibungen), die auf lokale LLMs zugeschnitten werden müssen, die nicht so fähig sind wie große private Modelle wie AIs Chatgpt.
Derzeit testen Sie mit einem "Gruppen -Chat" -Debattierszenario (siehe Debate.py), das von Tevslin (siehe Repository und Blog -Beitrag, Danke!) Mit MixTral und verschiedenen anderen lokalen LLMs erstellt wurde, damit die LLM den Namen des Namens zurückgeben, um den Namen des Namens zurückzugeben. Nächster Agent/Rolle konsequent. Dies ist ein guter Test, da es sich um ein LLM handelt, das eine Reihenfolge der Agenten versteht, überprüft, wo die Debatte der nächste Agent entspricht, und den nächsten Agenten zu bestimmen. Wir könnten dies fast in einem Round-Robin-Format oder in einer endlichen Staatsmaschine (in der wir festlegen, wer mit wem sprechen kann), aber es ist wichtig, dass es in der Lage ist, einen LLM zu veranlassen, das Recht zu wählen, als nächstes Agent.
Ich werde in diesem Readme Erkenntnisse einsetzen. Bitte beachten Sie, dass sich dies weiterentwickelt und ich nur eine Person, die versucht, Dinge zum Laufen zu bringen?
Ich verwende Ollama beim Testen gegen Autogenbibliotheken und mit LitellM beim Testen durch Autogenstudio.
Der Code, mit dem ich gerade teste, ist in der Lautsprecherauswahl - Testrunden.
Lautsprecher korrekt ausgewählt | |
---|---|
✅ | Alle 5 richtig |
? | 4 von 5 richtig |
3 oder weniger korrekt | |
? | Gab nicht |
Breiter Tisch - Scroll ->
Schritt 1 Inhalt | Lautsprecher auswählen | Kontextreduzierung | Phind-Codellama: 34b-V2 | Mixtral 8x7b (Q4) | Openhermes: 7B-MISTRAL-V2.5-Q6_K | orca2: 13b-q5_k_s | Solar: 10.7b-Instruct-V1-Q5_K_M | Neural-Chat: 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 | Keiner | ? | ||||||||||
Original | Betonen, Sequenz, präzise | Zusammengefasst | ✅ | ✅ | ✅ | ? | ? | ||||||
Original | Betonen, Sequenz, präzise | Keiner | ✅ | ✅ | ? | ? | |||||||
Ordnung betonen | Betonen, Sequenz, präzise | Keiner | ✅ | ? | ✅ | ? | ? | ? | ? | ||||
Ordnung betonen | Betonen, Sequenz, präzise | Zusammengefasst | ✅ | ? | ✅ | ? | ? | ? | ? | ||||
Betonen + Beispiel | Betonen, Sequenz, präzise | Keiner | ✅ | ✅ | ? | ? | ? | ? | ? | ||||
Betonen + Beispiel | Betonen, Sequenz, präzise | Zusammengefasst | ✅ | ✅ | ? | ? | ? | ? | ? | ||||
Original | Original | Nur Sprechername | ✅ | ✅ | ? | ||||||||
Betonen + Beispiel | Betonen Sie, Hauptstädte, Argumentation, keine Debatte | Erste 300 Zeichen | ? | ✅ | ? | ? | ? | ||||||
Ordnung betonen | Betonen, Sequenz, präzise | Erste 300 Zeichen | ? | ✅ | ? | ? | ? | ||||||
Ordnung betonen | Betonen, Sequenz, präzise | Erste 100 Zeichen und Name | ✅ | ? | ? | ? | ? | ||||||
Ordnung betonen | Betonen, Sequenz, präzise | Nur Sprechername | ? | ✅ | ? | ? | ? | ||||||
Ordnung betonen | Betonen Sie, Hauptstädte, Argumentation, keine Debatte | Erste 300 Zeichen | ? | ✅ | ? | ? | |||||||
Betonen + Beispiel | Betonen, Sequenz, präzise | Erste 300 Zeichen | ✅ | ? | ? | ? | |||||||
Betonen + Beispiel | Betonen, Sequenz, präzise | Nur Sprechername | ? | ✅ | ? | ? | |||||||
Betonen + Beispiel | Betonen Sie, Hauptstädte, Einzelwort -Antwort | Zusammengefasst | ? | ✅ | ? | ? | |||||||
Betonen + Beispiel | Betonen, Sequenz, präzise | Erste 100 Zeichen und Name | ? | ✅ | ? | ||||||||
Betonen + Beispiel | Betonen Sie, Hauptstädte, Einzelwort -Antwort | Keiner | ✅ | ? | ? | ||||||||
Betonen + Beispiel | Betonen Sie, Hauptstädte, Einzelwort -Antwort | Nur Sprechername | ✅ | ? | |||||||||
Betonen + Beispiel | Betonen Sie, Hauptstädte, Argumentation, keine Debatte | Keiner | ? | ? | ? | ? | ? | ? | |||||
Betonen + Beispiel | Betonen Sie, Hauptstädte, Argumentation, keine Debatte | Zusammengefasst | ? | ? | ? | ? | ? | ? |
Gewinner:
Die Ergebnisse unterscheiden sich signifikant zwischen LLMs, nicht überraschend. Die Optimierung der Eingaben veränderte jedoch die Art und Weise, wie sie sich unabhängig verhalten haben - zB, z. B. ein oder zwei Wörtern in einer Aufforderung zu ändern, würde bedeuten, dass Mistral 7b, das das richtige Ergebnis erzielt hatte, etwas Unerwartetes erzeugen würde, aber dieselbe Änderung würde bedeuten, dass Solar 10.7b. Was nicht produzierte, was ich wollte, würde plötzlich das richtige Ergebnis erzielen.
In diesem Stadium müssen wir also viele Eingabeaufforderungen (beide, die wir durch Agentenbeschreibungen und Systemnachrichten kontrollieren können . Das heißt, bis ein minimaler LLM -Argumentationsstandard erreicht werden kann.
Ich habe schnell gelernt, dass ich die Temperatur auf Null setzen musste, um konsequente Ergebnisse zu erzielen, zumindest für die Auswahl der Lautsprecherauswahl (kann möglicherweise mit niedrigen Zahlen und nicht nur mit Null funktionieren). Obwohl die Antworten selbst bei Null zu zeitweise variieren, sind sie im Allgemeinen konsistent.
Die Fähigkeit, die Temperatur für Modelle in Autogen einzustellen, ist für diese kleinen LLMs wichtig.
Da die Chat -Nachrichten weiter wachsen, wächst auch die Wahrscheinlichkeit, dass ein Modell nicht mehr gute Antworten erzeugt. Einige, wie PHI-2 mit einer 2K-Kontextlänge, würden die Erzeugung von Ergebnissen weniger als die Hälfte meiner Tests mit dem Chat der Debattengruppe einstellen. Andere, einschließlich Mixtral 8x7b mit einem 32K -Kontextfenster, zeigten eine Verbesserung, wenn die Kontextlängen reduziert waren (lange bevor der Inhalt so lang war).
Ein Beispiel dafür mit MixTral ist, dass die richtige Antwort (konsequent bis dieser Charakterzahl) die richtige Antwort zurückgeben würde, wenn die an Mixtral übergebene vollständige Chat -Nachricht weniger als 8.700 Zeichen betrug (nicht an Tokens). Wenn es über 8.700 Zeichen war, würde es nicht den Anweisungen folgen und anstatt den Namen des nächsten Sprechers zurückzugeben, würde er als sie debattieren. Dies war ein konsequentes Problem, da die Länge über 8.700 weiter zunahm. Ich stelle mir vor, andere Modelle, dass dieser Schaltpunkt immer noch niedriger wäre.
Im Moment scheint es keinen Mechanismus für die Komprimierung der Konversationsgeschichte zu geben, aber ich denke, dies könnte nützlich sein, um den Kontext des vollständigen Chats zu halten, wenn mehr Chating auftritt.
Mit der Herausforderung, die Kontextlänge zu minimieren, dachte ich an zwei Optionen:
Ich denke, wir könnten die beiden Optionen kombinieren, den Inhalt älterer Nachrichten beseitigen und die neueren zusammenfassen.
Für die von mir durchgeführten Lautsprecherauswahl -Tests funktionierten die Kontext und die Zusammenfassung der Agent -Nachrichten, die sowohl gearbeitet als auch die richtigen Ergebnisse erzielten. Das ist vielversprechend.
Ich habe mich darauf konzentriert, dies zu testen, da es wichtig ist, dass Agenten korrekt ausgewählt werden. Diese Aufgabe, die größtenteils im zugrunde liegenden Autogencode erfolgt, ist auf das Öffnen von AI von Chatgpt zugeschnitten. Die Eingabeaufforderung erzeugt wahrscheinlich auch mit anderen sehr großen Modellen. Die Steuerung dieser Eingabeaufforderung ist jedoch erforderlich, um die spezifische Richtung für unsere kleineren lokalen LLMs bereitzustellen.
Die Standardaufforderung ist
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.
Für meine Tests am debattierenden Workflow schneide ich ständig die Eingabeaufforderung an und ein Beispiel dafür, wie es für Mixtral 8x7b aussieht:
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?
Interessanterweise sogar eine kleine Änderung wie Änderungen (im obigen Text)
answer concisely please
Zu
return only the name of the role
änderte die Antwort auf eine falsche für Mixtral, aber auf eine korrekte für Lama 13b.
Mit dem debattierenden Test gibt es eine einführende Chat -Nachricht (dies ist ein Rollenspielspiel, ...) und dann eine Chat -Nachricht für jeden der Debattierer. Wir geben all diese Chat -Nachrichten an die LLM weiter, um den nächsten Sprecher während des Sprecherauswahlprozesses zu bestimmen.
Die Chat -Nachricht für jeden Debater enthält den Inhalt (ihre Debattenantwort), die Rolle ("Benutzer") und den Namen (ihren Agentennamen) wie folgt:
{
"content": "<a whole lot of content here.>",
"role": "user",
"name": "Affirmative_Constructive_Debater",
},
Da alles an die LLM übergeben wird, dachte ich, dass es diesen name
/den Wert verwenden würde, um zu wissen, aus welchem Agenten diese Nachricht stammt.
Interessanterweise, wenn ich den Beginn des Inhalts für jede dieser Nachrichten Folgendes hinzufügte
I am <the debater's name here>. <then the original content goes next>
... Mixtral war viel besser darin, den nächsten Agenten zu erfassen und auszuwählen. Daher kann es vorteilhaft sein, dies zu Beginn der Nachricht jedes Agenten explizit einzufügen, sodass wir sicher sind, dass der LLM weiß, wer der Agent war. Oder zumindest in diesem Fall, in dem der Name des Agenten wichtig ist, um die Sequenz zu bestimmen.
Die meisten Modelle wurden zurückgegeben, und dies ist wichtig, um Agentnamen mit dem vom LLM zurückgegebenen Text abzustimmen.
Und schmerzhaft, da es das primäre Modell ist, das ich verwenden wollte, scheint Mixtral die meiste Zeit eine Reaktion im Markdown -Format (?) -Format zu liefern. Also, wenn ein Agent benannt wurde
Negative_Constructive_Debater
es kann zurückkehren
Negative_Constructive_Debater
oder
Negative Constructive Debater
Und das würde Autogen davon abhalten, es gegen den Namen eines Agenten abzustimmen.
Ich habe versucht, die Eingabeaufforderungen zu ändern, damit Mixtral eine einfache Textausgabe liefert, konnte aber nicht konsequent dazu führen.
Vielleicht besteht eine Taktik hier nicht darin, Unterstriche zu verwenden, obwohl ich denke, dass es erwähnt wurde, um Räume in Agentennamen zu vermeiden und stattdessen Unterstriche zu verwenden. Daher lohnt es sich, dies anzugehen.
Änderungen des passenden Codes, um _
und Räume für Unterstriche aufzunehmen, würden einen großen Beitrag zur Unterstützung lokaler LLMs leisten, die diese möglicherweise vermischen.
Als Einschränkung bin ich früh in meinen Tests und habe nur die Auswahl der Lautsprecher getestet. Obwohl dies für den Multi-Agent-Prozess von entscheidender Bedeutung ist, gibt es viele andere Aspekte von LLMs (Qualitätsantworten, Codegenerierung, Funktionsaufruf usw.), die ich nicht einmal berührt habe.
In meinen folgenden Notizen werden also die frühen Prüfung von LLMs den richtigen nächsten Agenten auswählen und seinen Namen zurückgeben. Ich werde sie in meiner Reihenfolge der Präferenz einsetzen.
Zuletzt sind viel davon herrschende Fähigkeiten und ich bin kein Experte :).
Llm | Gedanken |
---|---|
MIMTRAL 8X7B V0.1 ANTRUCTIEREN (Q4) | Als größtes Modell erwartete ich, dass dies besser umgeht als die anderen. Meine Erfahrung war, dass es konsistente Antworten liefert und mit ein paar sofortigen Änderungen es streiten können, um das von Ihnen benötigte Ergebnis zu erzielen. Es hat eine seltsame Eigenart, als es manchmal im Markdown -Format reagiert. |
Mistral 7B v0.2 Anweisung | Ursprünglich lieferte dies die besten Antworten, einfache Textergebnisse und die Möglichkeit, einen einzelnen Agentennamen zurückzugeben, ohne den Kurs abzugeben. Die Aufforderung zeigte, dass es ziemlich empfindlich auf sofortige Änderungen war. Es versteht jedoch nicht immer die Anweisungen |
LAMA2 13B CHAT | Hit und Fräulein, als es auf dem Punkt war, war es perfekt, sonst war es einfach nicht. Weitere schnelle Optimierungen könnten hier funktionieren. |
Solar 10.7b Anweisung | Als Aufforderungen wurde dies immer konsequenter |
Neural Chat 7b | Ähnlich wie Lama 13b war manchmal ausgezeichnet, aber alles andere als bei anderen |
Openhermes 7b Mistral V2.5 (Q6) | In einem Test war es perfekt, trotz aller anderen bombardierten es. Fand, dass es nicht gut den Anweisungen folgte. |
Orca 2 13b | Nur einen Test gut abgeschlossen und nicht den Anweisungen für den Rest gut befolgt |
Qwen 14b Chat (Q6) | Ich hatte dieses Modell noch nicht benutzt und war hoffentlich, aber es hat nie einen Test bestanden und die Anweisungen waren nicht seine Stärke. |
Phi-2 | Leider lief die von diesem Modell unterstützte Kontextlänge schnell ab. Außerdem folgte es den Anweisungen nicht genau. |
Phind Codellama 34b | Überraschend gut! Nach oben mit Mixtral. Es heißt jedoch, dass es nicht diskutieren wird! |
Yi-34b-Chat (Q3) | Das überraschte mich, es war wirklich das Schlimmste der Haufen. Ich rankiere es unter phi-2, da es zu groß ist, um so schlecht in den Anweisungen zu sein. Vielleicht wäre ein Anweisungen / eine andere Version besser. |
Weitere Informationen finden Sie in einem meiner schnellen Erkennungsdokumente, in denen angezeigt wird, wie ich durch Eingabeaufforderungen iteriert habe und wie der Effekt auf die einzelnen Antworten der LLMs war.
Haben Sie andere Modelle verwendet, die den Anweisungen gut befolgen, bitte lassen Sie es mich wissen!
Durch die Implementierung einiger dieser (TEMP = 0, zusammenfassende Namen, Reinigungsagentennamen, Änderung der Rollenauswahl) konnte ich MixTral jedes Mal während der Auswahl der Lautsprecher (jeweils 10 Sequenzen mit jeweils 10 Iterationen) den richtigen Agenten auswählen. ?
Ohne die Eingabeaufforderungen speziell auf diese anderen Modelle abzustimmen:
Ich glaube, diese sind bedeutend, weil sie vor diesen Veränderungen weniger erfolgreich waren und ziemlich unvorhersehbar waren.
Natürlich sind meine Tests und Optimierungen, insbesondere bei Eingabeaufforderungen, im Test -Chat, an dem ich arbeite. So wäre also mehr Tests gut.