Este repositorio es mi patio de recreo para probar las indicaciones que generan respuestas adecuadas de LLM locales. Como es un patio de recreo, no está bien estructurado, así que siéntase libre de hacer cualquier pregunta si las tiene. Autogen Discord es un gran lugar para la discusión, vea el canal #Alt-Models dentro de ella.
Estoy investigando puntos en el flujo de trabajo de autógeno (desde la base de código hasta las descripciones de los agentes) que deben adaptarse para acomodar LLM locales que no son tan capaces como modelos privados grandes como ChatGPT de AI.
Actualmente, pruebas con un escenario de debate de "chat grupal" (ver debate.py) creado por Tevslin (vea su repositorio y publicación de blog, ¡gracias!) Usando mixtral y varios otros LLM locales para obtener el LLM para devolver el nombre del nombre del nombre del nombre de Siguiente agente/rol consistentemente. Esta es una buena prueba porque implica que una LLM entienda un orden de agentes, revisando dónde está el debate y determinar el próximo agente. Casi podríamos hacer esto en un formato de remolino redondo, o en una máquina de estado finito (donde establecemos quién puede hablar con quién), pero es importante poder pedir a un LLM que elija el agente correcto.
Pondré cualquier hallazgo en este readme. Tenga en cuenta que esto está evolucionando y solo soy una persona que intenta hacer que las cosas funcionen.
Estoy usando Ollama cuando estoy probando contra bibliotecas de autógenos y con litellm cuando estoy probando a través de AutogenStudio.
El código con el que estoy probando actualmente está en la selección de altavoces: rondas de prueba.
Altavoces seleccionados correctamente | |
---|---|
✅ | Los 5 correctos |
? | 4 de 5 correcto |
3 o menos correcto | |
? | no pasó ir |
Mesa ancha - Scroll ->
Contenido del Paso 1 | Seleccionar altavoz | Reducción de contexto | Phind-Codellama: 34B-V2 | Mixtral 8x7b (Q4) | OpenHermes: 7b-Mistral-V2.5-Q6_K | ORCA2: 13B-Q5_K_S | Solar: 10.7b-Instuct-V1-Q5_K_M | NEURAL-CHAT: 7B-V3.3-Q6_K | Llama2: 13b-chat | Qwen: 14b-chat-q6_k | Mistral: 7B-InNSTRUCT-Q6_K | Yi: 34b-chat-q3_k_m | phi-2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Original | Original | Ninguno | ? | ||||||||||
Original | Enfatizar, secuencia, conciso | Resumido | ✅ | ✅ | ✅ | ? | ? | ||||||
Original | Enfatizar, secuencia, conciso | Ninguno | ✅ | ✅ | ? | ? | |||||||
Enfatizar el orden | Enfatizar, secuencia, conciso | Ninguno | ✅ | ? | ✅ | ? | ? | ? | ? | ||||
Enfatizar el orden | Enfatizar, secuencia, conciso | Resumido | ✅ | ? | ✅ | ? | ? | ? | ? | ||||
Enfatizar + ejemplo | Enfatizar, secuencia, conciso | Ninguno | ✅ | ✅ | ? | ? | ? | ? | ? | ||||
Enfatizar + ejemplo | Enfatizar, secuencia, conciso | Resumido | ✅ | ✅ | ? | ? | ? | ? | ? | ||||
Original | Original | Solo nombre del altavoz | ✅ | ✅ | ? | ||||||||
Enfatizar + ejemplo | Enfatizar, capitales, razonamiento, sin debate | Primeros 300 caracteres | ? | ✅ | ? | ? | ? | ||||||
Enfatizar el orden | Enfatizar, secuencia, conciso | Primeros 300 caracteres | ? | ✅ | ? | ? | ? | ||||||
Enfatizar el orden | Enfatizar, secuencia, conciso | Primeros 100 caracteres y nombre | ✅ | ? | ? | ? | ? | ||||||
Enfatizar el orden | Enfatizar, secuencia, conciso | Solo nombre del altavoz | ? | ✅ | ? | ? | ? | ||||||
Enfatizar el orden | Enfatizar, capitales, razonamiento, sin debate | Primeros 300 caracteres | ? | ✅ | ? | ? | |||||||
Enfatizar + ejemplo | Enfatizar, secuencia, conciso | Primeros 300 caracteres | ✅ | ? | ? | ? | |||||||
Enfatizar + ejemplo | Enfatizar, secuencia, conciso | Solo nombre del altavoz | ? | ✅ | ? | ? | |||||||
Enfatizar + ejemplo | Enfatizar, capitales, respuesta de una sola palabra | Resumido | ? | ✅ | ? | ? | |||||||
Enfatizar + ejemplo | Enfatizar, secuencia, conciso | Primeros 100 caracteres y nombre | ? | ✅ | ? | ||||||||
Enfatizar + ejemplo | Enfatizar, capitales, respuesta de una sola palabra | Ninguno | ✅ | ? | ? | ||||||||
Enfatizar + ejemplo | Enfatizar, capitales, respuesta de una sola palabra | Solo nombre del altavoz | ✅ | ? | |||||||||
Enfatizar + ejemplo | Enfatizar, capitales, razonamiento, sin debate | Ninguno | ? | ? | ? | ? | ? | ? | |||||
Enfatizar + ejemplo | Enfatizar, capitales, razonamiento, sin debate | Resumido | ? | ? | ? | ? | ? | ? |
Ganadores:
Los resultados difieren significativamente entre los LLM, como era de esperar. Sin embargo, ajustar las indicaciones fue cambiar la forma en que se comportaron de forma independiente: por ejemplo, cambiar una o dos palabras en un aviso significaría que Mistral 7b, que había estado produciendo el resultado correcto, produciría algo inesperado, pero ese mismo cambio significaría que Solar 10.7b, Lo cual no estaba produciendo lo que quería, de repente generaría el resultado correcto.
Entonces, en esta etapa, creo que tendremos que adaptar muchas de las indicaciones (ambos que podemos controlar a través de descripciones de agentes y mensajes del sistema, hasta las indicaciones subyacentes, como la selección de altavoces) para adaptarse a los LLM que estamos utilizando . Eso es hasta que se puede lograr un estándar mínimo de razonamiento LLM.
Aprendí rápidamente que para obtener resultados consistentes, al menos para el mensaje de selección de altavoces, tuve que establecer la temperatura en cero (puede funcionar con números bajos en lugar de solo cero). Aunque, incluso a cero, las respuestas varían a veces, generalmente son consistentes.
La capacidad de poder establecer la temperatura para los modelos en el autógeno es importante para estos pequeños LLM.
A medida que los mensajes de chat continúan creciendo en número, también lo hace la posibilidad de que un modelo deje de producir buenas respuestas. Algunos, como PHI-2 con una longitud de contexto de 2K, dejarían de generar resultados menos de la mitad de mis pruebas con el chat de grupo de debate. Otros, incluido Mixtral 8x7B con una ventana de contexto de 32k, mostraron una mejora cuando las longitudes de contexto se redujeron (mucho antes de que el contenido fuera tan largo).
Un ejemplo de esto, con Mixtral, es que cuando el mensaje de chat completo pasado a Mixtral era menos de 8,700 caracteres (no fichas, no pude obtener esa cifra) devolvería la respuesta correcta (constantemente hasta ese recuento de personajes). Cuando estaba por encima de 8,700 caracteres, no seguiría las instrucciones y, en lugar de devolver el nombre del próximo orador, debatiría como ellos. Este fue un problema consistente ya que la longitud continuó aumentando más allá de 8,700. Me imagino que otros modelos, este punto de conmutación sería aún más bajo.
En este momento no parece haber un mecanismo para comprimir el historial de conversación, sin embargo, creo que esto podría ser útil para mantener el contexto del chat completo a medida que se produce más chat.
Con el desafío de minimizar la longitud de contexto, pensé en dos opciones:
Supongo que podríamos combinar las dos opciones, eliminar el contenido de los mensajes más antiguos y resumir los más recientes.
Para las pruebas de selección de altavoces que estoy haciendo, eliminando el contexto y resumiendo los mensajes de los agentes funcionaron y produjeron los resultados correctos. Esto es prometedor.
Me he estado centrando en probar esto, ya que es fundamental para que los agentes seleccionen correctamente. Esta tarea, que se realiza en gran medida en el código de autógeno subyacente, se adapta para abrir el CHATGPT de AI. El aviso que genera es probable que también funcione con otros modelos muy grandes. Sin embargo, es necesario controlar este aviso para proporcionar la dirección específica para nuestros LLM locales más pequeños.
El mensaje predeterminado es
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.
Para mis pruebas sobre el flujo de trabajo de debate, estoy adaptando continuamente el aviso y un ejemplo de cómo se ve para Mixtrral 8x7b es:
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?
Curiosamente, incluso un pequeño ajuste como cambiar (en el texto anterior)
answer concisely please
a
return only the name of the role
cambió la respuesta a una incorrecta para mixtral pero a una correcta para Llama 13b.
Con la prueba de debate hay un mensaje de chat introducción (este es un juego de juego de roles, ...) y luego un mensaje de chat para cada uno de los debatidores. Pasamos todos estos mensajes de chat al LLM para determinar el siguiente altavoz durante el proceso de selección del altavoz.
El mensaje de chat para cada debatidor tiene el contenido (su respuesta de debate), el rol ("usuario") y el nombre (el nombre de su agente), así:
{
"content": "<a whole lot of content here.>",
"role": "user",
"name": "Affirmative_Constructive_Debater",
},
Como todo se pasa a la LLM, pensé que usaría esa clave/valor name
para saber de qué agente proviene ese mensaje.
Curiosamente, si agregué lo siguiente al inicio del contenido para cada uno de esos mensajes
I am <the debater's name here>. <then the original content goes next>
... Mixtral fue mucho mejor para recoger quién ha hablado y eligiendo al próximo agente. Por lo tanto, puede ser ventajoso insertar esto explícitamente al comienzo del mensaje de cada agente, por lo que estamos seguros de que el LLM sabe quién era el agente. O, al menos en este caso, donde el nombre del agente es importante para determinar la secuencia.
La mayoría de los modelos devolvieron las respuestas del texto plano y esto es importante para que los nombres de los agentes coincidentes con el texto devuelto del LLM.
Sin embargo, y dolorosamente como es el modelo principal que quería usar, Mixtral parece proporcionar una respuesta en el formato de Markdown () la mayor parte del tiempo. Entonces, si un agente fue nombrado
Negative_Constructive_Debater
puede regresar
Negative_Constructive_Debater
o
Negative Constructive Debater
Y eso arrojaría un autógeno de igualarlo con el nombre de un agente.
Traté de cambiar las indicaciones para que Mixtral proporcione una salida de texto sin formato, pero no pude lograr que lo hiciera de manera consistente.
Quizás una táctica aquí no es usar subrayos, aunque creo que se ha mencionado para evitar espacios en los nombres de los agentes y usar subrayos en su lugar, por lo que vale la pena abordar esto.
Los cambios en el código de coincidencia para acomodar _
y espacios para los subrayadores contribuirían en gran medida a apoyar a los LLM locales que pueden mezclarlos.
Como advertencia, llego temprano a mis pruebas y solo he estado probando en la solicitud de selección de altavoces. Aunque esto es crítico para el proceso de múltiples agentes, hay muchos otros aspectos de LLM (respuestas de calidad, generación de código, llamadas de funciones, etc.) que ni siquiera he tocado.
Por lo tanto, mis notas a continuación están en pruebas tempranas de LLM que eligen el siguiente agente correcto y devuelven su nombre. Los pondré en mi orden de preferencia.
Por último, mucho de eso son habilidades de promoción y no soy un experto :).
LLM | Pensamientos |
---|---|
MIXTRAL 8X7B V0.1 INSTRUCT (Q4) | Como el modelo más grande, esperaba que esto maneje la dirección mejor que los demás. Mi experiencia ha sido que proporciona respuestas consistentes y, con algunos cambios rápidos, puede discutirlo para obtener el resultado que necesita. Tiene una peculiaridad extraña porque a veces responde en formato de Markdown. |
Mistral 7b v0.2 instructa | Originalmente, esto proporcionó las mejores respuestas, resultados de texto sin formato y la capacidad de devolver un solo nombre de agente sin salir de curso. La provisión mostró que era bastante sensible a los cambios rápidos. Sin embargo, no siempre entiende las instrucciones, bueno, no tan bien como mixtral |
Llama2 13b chat | Golpea y señorita, cuando era en el momento, era perfecto, de lo contrario no era así. Más ajustes adicionales podría funcionar aquí. |
Solar 10.7b instrucciones | A medida que se ajustaron las indicaciones, esto se volvió cada vez más consistente |
Chat neural 7b | Similar a Llama 13b, fue excelente a veces, pero cualquier cosa menos en otros |
OpenHermes 7b Mistral v2.5 (Q6) | En una prueba fue perfecto, por todo el resto que bombardeó. Descubrí que no seguía bien las instrucciones. |
Orca 2 13b | Solo completó una prueba bien, no siguió bien las instrucciones para el resto |
QWEN 14B CHAT (Q6) | No había usado este modelo antes y esperamos, pero nunca pasó una prueba y seguir las instrucciones no era su fuerte. |
Phi-2 | Desafortunadamente, la longitud de contexto respaldada por este modelo se agotó rápidamente. Además, realmente no siguió las instrucciones con precisión. |
Phind Codellama 34B | ¡Sorprendentemente bueno! Arriba con mixtral. Sin embargo, dice que no debatirá! |
Chat yi-34b (Q3) | Esto me sorprendió, realmente fue el peor del grupo. Lo estoy clasificando debajo de PHI-2, ya que es demasiado grande para ser tan malo en las siguientes direcciones. Quizás una instrucción / otra versión sería mejor. |
Consulte más información en uno de mis documentos de hallazgos rápidos que muestran cómo iteraré a través de indicaciones y cuál fue el efecto en las respuestas de cada LLMS.
¿Has utilizado otros modelos que siguen bien las instrucciones? ¡Por favor hágamelo saber!
Implementar algunos de estos (temp = 0, resumir, limpiar nombres de agentes, cambiar el mensaje de selección de roles) significaba que podía obtener mixtral para elegir el agente adecuado cada vez durante la selección de altavoces (5 secuencias con 10 iteraciones cada una). ?
Sin ajustar las indicaciones específicamente a estos otros modelos:
Creo que estos son significativos porque tuvieron menos éxito antes de estos cambios y bastante impredecibles.
Por supuesto, mis pruebas y ajustes, particularmente por indicaciones, están en el chat de prueba en el que estoy trabajando. Entonces, más pruebas serían buenas.