Noticias de IA y ML en español

Buena investigación sobre el asistente de codificación Mentat

Siguiendo de jugar con el asistente de codificación Aider, he estado usando Mentat para codificar durante las últimas semanas. Comparación con Aider La forma en que funciona es similar. Funciona en la terminal con una interfaz de usuario textual. Incluso te permite establecer esquemas de color claro y oscuro. Las sesiones de codificación implican agregar archivos relevantes para el contexto. En la caja de chat, haces tus deseos y devuelve un plan de acción que implica cambios de código. Aprobarlos y los cambios se realizan. La experiencia en general es similar a Aider, excepto que Aider hace un commit de git para cada cambio (lo cual puedes optar por no hacer). Mentat deja la gestión de versiones a ti. La calidad de cómo expreses tus deseos determina la calidad del trabajo. Tienes que ser bastante verboso al respecto. Lo que devuelve es una función de tu elección de LLM. No atribuiría inteligencia a los asistentes de codificación, pero le daría crédito por experiencia de desarrollo superior a ellos si fuera el caso. No importa cuál uses, todavía tienes que hablar con ellos como si fueran un interno sin pistas. Límite de contexto De serie, Mentat admite una lista miserable de LLMs en comparación con Aider (lo cual podría o no cambiar). No lo dejé ser un problema, lo conecté para que usara un LLM de codificación en Together.ai. Pero no importó; me topé con el límite de ventana de contexto de inmediato. Aunque algunos de mis archivos son de producción completa, no incluí muchos de ellos. Ni siquiera tuve la oportunidad de hacer que hiciera algo inteligente todavía. Estaba determinado a hacer que esto funcionara, solo que el límite de contexto se interponía en el camino. La solución no es simplemente usar un LLM con un límite de contexto más grande. Siempre hay un límite superior, solo terminarías golpeando constantemente contra él. Construí mi propio RAG Escuché que RAG es la respuesta. Así que construí un middleware que se encuentra entre Mentat y el LLM. Esta es una API REST compatible con OpenAI (http://localhost:<puerto>/chat/completions) que se ejecuta localmente, todo contenido en un solo archivo de Python. Lo llamo Broken Sword para facilitar la referencia. Por lo que respecta a Mentat, Broken Sword es un servicio LLM real. Dentro de Broken Sword, capturo las solicitudes de Mentat, masajeo las entradas, las envío a cualquier LLM que desee y devuelvo la respuesta de manera compatible con OpenAI. Al hacer esto, veo las directivas elaboradas dadas por Mentat, eso es lo que se ve como ingeniería de prompts. Solo al hacer esto, he habilitado a Mentat para utilizar cualquier LLM disponible para la humanidad. Procedí a utilizar Google Gemini 1.5 para alimentar Broken Sword, principalmente porque tiene el equilibrio adecuado entre calidad y costo. Esto no soluciona el límite de ventana de contexto, sin embargo. Esto no es más que una tubería glorificada. En lugar de enviar entradas de Mentat tal cual, la gran cantidad de contexto se puede almacenar en una base de datos vectorial y enviarse como embeddings. Si entiendo correctamente, grandes trozos de texto se convierten en matrices multidimensionales de números. Esto es mucho más pequeño para que los LLMs lo utilicen en lugar de los textos originales. Hice que todo funcionara usando LangChain (tiene la serie de procesos abstractos), con un toque de Flask para una API simple. Me pareció engañoso cuando todavía no sé cómo funciona esta magia, pero quería hacer trampa rápido. Sé que dicen que no necesitas realmente LangChain y les creo, pero algún día, hombre, algún día. Funciona Cuando terminé, Mentat terminó funcionando como se suponía. Hice que escribiera pruebas unitarias, se escribió en el estilo consistente con las existentes. Hice que escribiera un flujo de trabajo de GitHub Actions, el resultado fue sensato. Fue gratificante, cuando funciona. Saber que lo hice funcionar con Broken Sword es doblemente satisfactorio. Lo cual me hizo preguntarme, ¿por qué Mentat no usa RAG o bases de datos vectoriales como acabo de hacer? Me pareció casi trivial hacerlo. Miré el código base de Mentat, de hecho, se está usando Chroma DB (la misma base de datos vectorial que uso). Así que tal vez estén haciendo RAG de alguna manera, pero no de manera que me importe. Pero es torpe A medida que pongo a Mentat a trabajar más y más, la torpeza se vuelve evidente. A veces se cuelga por completo. A veces porque el LLM no devuelve algo que le guste, pero la mayoría de las veces por razones desconocidas para mí. El fallo gracioso no es su fuerte. Había momentos en que Mentat se cuelga después de que hago una solicitud. Al relanzarlo y re-incluir los archivos relevantes, repito la misma solicitud (buena cosa que tienen el historial de chats para hacer esto fácil) y todo funciona correctamente. Mezcla de codificación manual Una pregunta que esperaba responder en esta aventura es la mezcla adecuada de usar asistentes de codificación de esta manera y editar archivos directamente al resolver un problema. En ese sentido, si es posible, ¿debería hacerse toda la codificación solo desde el asistente de codificación? En mi caso, la mitad de la pantalla es para Mentat, la otra mitad para emacs. Esperaba que Mentat me diera la mayoría de lo que quiero pero no perfecto, y que haría ajustes menores a los mismos archivos en emacs. Si el asistente de codificación estilo Mentat tiene un futuro, me pregunto si esa es la forma en que debería ser.
dev.to
Deep dive into Mentat coding assistant
Create attached notes ...