Fundamentos de la ingeniería de solicitudes y procedimientos recomendados
En esta unidad, trataremos lo siguiente:
- ¿Qué es la ingeniería de solicitudes?
- Fundamentos de la ingeniería de solicitudes
- Procedimientos recomendados en la ingeniería de solicitudes
- Cómo aprende Copilot de sus solicitudes
¿Qué es la ingeniería de solicitudes?
La ingeniería de solicitudes es el proceso de creación de instrucciones claras para guiar los sistemas de inteligencia artificial, como GitHub Copilot, para que genere el código adecuado para que en cada contexto se adapte a las necesidades específicas del proyecto. Esto garantiza que el código sea correcto sintáctica, funcional y contextualmente.
Ahora que sabe qué es la ingeniería de solicitudes, vamos a aprender sobre algunos de sus principios.
Principios de ingeniería de solicitudes
Antes de explorar estrategias específicas, primero comprendamos los principios básicos de la ingeniería de indicaciones, resumidos en las siguientes 4 S. Estas reglas básicas son la base para crear solicitudes efectivas.
- Single (única): centre siempre su solicitud en una única tarea o pregunta bien definida. Esta claridad es fundamental para la elición de respuestas precisas y útiles de Copilot.
- Specific (específica): asegúrese de que las instrucciones son explícitas y detalladas. La especificidad conduce a sugerencias de código más aplicables y precisas.
- Short (corta): a la vez que especifica, mantenga las solicitudes concisas y al grano. Este equilibrio garantiza la claridad sin sobrecargar Copilot ni complicar la interacción.
- Surround (enmarcada): use nombres de archivo descriptivos y mantenga abiertos los archivos relacionados. Esto proporciona a Copilot un contexto enriquecido, lo que conduce a sugerencias de código más adaptadas.
Estos principios básicos constituyen la base para elaborar solicitudes eficientes y eficaces. Teniendo en cuenta las 4 S, vamos a profundizar en los procedimientos recomendados avanzados que garantizan que cada interacción con GitHub Copilot esté optimizada.
Procedimientos recomendados en la ingeniería de solicitudes
Las siguientes prácticas avanzadas, basadas en los 4 S, refinan y mejoran la interacción con Copilot, asegurándose de que el código generado no solo es preciso, sino que se alinea perfectamente con las necesidades y contextos específicos del proyecto.
Proporcionar suficiente claridad
Basándose en los principios de solicitud "Single" (única) y "Specific" (específica), apunte siempre a la claridad. Por ejemplo, una solicitud como "Escribe una función de Python para filtrar y devolver números pares de una lista determinada" es específica y centrada en una única cosa.
Proporcionar suficiente contexto con detalles
Enriquecer la comprensión de Copilot con el contexto, siguiendo el principio "Surround" (solicitud enmarcada). Cuanto más información contextual se proporcione, más adecuadas son las sugerencias de código generadas. Por ejemplo, agregando algunos comentarios en la parte superior del código para proporcionar más detalles a lo que quiere, puede proporcionar más contexto a Copilot para comprender la solicitud y proporcionar mejores sugerencias de código.
En el ejemplo anterior, hemos usado pasos para proporcionar más detalles a la vez que mantenemos la solicitud corta. Esta práctica sigue el principio de solicitud "Short" (corta), equilibrando los detalles concisamente para garantizar la claridad y precisión en la comunicación.
Nota
Copilot también usa pestañas abiertas paralelas en el editor de código para obtener más contexto sobre los requisitos del código.
Proporcionar ejemplos para el aprendizaje
El uso de ejemplos puede aclarar sus requisitos y expectativas, ilustrando conceptos abstractos y haciendo que las solicitudes sean más tangibles para Copilot. Los ejemplos bien diseñados ayudan a Copilot a comprender rápidamente los patrones, lo que conduce a sugerencias iniciales más precisas que requieren menos ciclos de revisión. Este enfoque es especialmente eficaz para generar código reutilizable, plantillas de prueba e implementaciones repetitivas que forman la base de características más grandes.
Aserción e iteración
Una de las claves para desbloquear todo el potencial de GitHub Copilot y acelerar el flujo de trabajo de desarrollo es la práctica de iteración estratégica. Es posible que la primera solicitud no siempre produzca código listo para producción, y eso es perfectamente aceptable. En lugar de dedicar tiempo a refinar manualmente la salida, tratarla como el principio de un diálogo eficaz con Copilot.
Si el primer resultado no es exactamente lo que busca, no empiece desde cero. En su lugar, borre el código sugerido, enriquezca el comentario inicial con detalles y ejemplos agregados y vuelva a preguntar a Copilot. Este enfoque iterativo a menudo le lleva a código de alta calidad y listo para la implementación más rápido que los métodos de desarrollo tradicionales, ya que cada iteración se basa en la comprensión de Copilot de sus requisitos específicos.
Ahora que ha aprendido los procedimientos recomendados para mejorar las aptitudes que le solicitan, echemos un vistazo más a cómo puede proporcionar ejemplos de los que Copilot puede aprender.
Cómo aprende Copilot de sus solicitudes
GitHub Copilot funciona en función de los modelos de inteligencia artificial entrenados en grandes cantidades de datos. Para mejorar su comprensión de contextos de código específicos, los ingenieros suelen proporcionarle ejemplos. Esta práctica, que se encuentra normalmente en el aprendizaje automático, llevó a diferentes enfoques de entrenamiento, como:
Aprendizaje en pocas etapas
Aquí, GitHub Copilot genera código sin ningún ejemplo específico, basándose únicamente en su entrenamiento fundamental. Este enfoque es ideal para implementar rápidamente patrones comunes y funcionalidad estándar. Por ejemplo, supongamos que desea crear una función para convertir las temperaturas entre Celsius y Fahrenheit. Solo puede empezar escribiendo un comentario que describa lo que quiera y Copilot podría generar código listo para producción para usted, en función de su entrenamiento anterior, sin ningún otro ejemplo.
Aprendizaje en pocas etapas
Con este enfoque, se proporciona un único ejemplo, lo que ayuda al modelo a generar respuestas más compatibles con el contexto que siguen sus patrones y convenciones específicos. Esto es especialmente eficaz para crear implementaciones coherentes en el código base, lo que acelera el desarrollo de características al tiempo que mantiene los estándares de código. Basándose en el ejemplo anterior de disparo cero, podría proporcionar un ejemplo de una función de conversión de temperatura y, a continuación, pedir a Copilot que cree otra función similar. Así es como podría ser:
Aprendizaje en pocos pasos
En este método, Copilot se presenta con varios ejemplos, que tienen un equilibrio entre la falta de seguridad de disparo cero y la precisión del ajuste fino. Este enfoque destaca por la generación de implementaciones sofisticadas que controlan varios escenarios y casos perimetrales, lo que reduce el tiempo invertido en pruebas manuales y refinamiento. Supongamos que quiere generar código que le envíe un saludo en función de la hora del día. Esta es una versión algo corta de una solicitud:
Cadena de mensajes y administración del historial de chat
Al trabajar en funcionalidades complejas que requieren varios pasos, es posible que participe de conversaciones extendidas con el chat de GitHub Copilot. Aunque el contexto detallado ayuda a Copilot a comprender sus requisitos, mantener historiales de conversación largos puede ser ineficaz y costoso en términos de procesamiento.
Por ejemplo, puede empezar con una implementación básica y, a continuación, agregar iterativamente el control de errores, las pruebas, la documentación y las optimizaciones. Cada turno se basa en el contexto anterior, pero el historial completo se hace más extenso.
Turno 1: "Crear una función de autenticación de usuario" Turn 2: "Add error handling for invalid credentials" (Agregar control de errores para credenciales no válidas)
Turno 3: "Agregar pruebas unitarias para la función de autenticación" Turno 4: "Agregar comentarios JSDoc para documentar la función" Turno 5: "Optimizar la función para mejorar el rendimiento"
Nota
Los avisos largos con el historial de conversaciones completo pueden consumir 2–3 PRU por turno. Resumir el contexto o restablecer la conversación puede mantenerlo más cerca de 1 PRU por solicitud.
Para administrar esto de forma eficaz:
- Resumir el contexto cuando las conversaciones se vuelven largas: "En función de nuestra explicación anterior sobre la autenticación de usuarios, ahora agregue una limitación de velocidad para evitar ataques por fuerza bruta".
- Restablecer y proporcionar contexto centrado para las nuevas características: comience con detalles esenciales en lugar de continuar toda la conversación
- Usar referencias concisas al trabajo anterior en lugar de repetir implementaciones completas
Sugerencia de roles para tareas especializadas
La solicitud de roles implica indicar a GitHub Copilot que actúe como un tipo específico de experto, lo que puede mejorar significativamente la calidad y relevancia del código generado para dominios especializados. Este enfoque ayuda a acelerar el desarrollo al obtener soluciones más específicas en el primer intento.
Rol experto en seguridad
Al trabajar en características críticas para la seguridad, pida a Copilot que piense como un experto en seguridad:
"Actuar como experto en ciberseguridad. Cree una función de validación de contraseñas que compruebe si hay vulnerabilidades comunes y sigue las directrices de OWASP".
Este enfoque normalmente genera código que incluye:
- Saneamiento de entrada
- Protección contra ataques comunes
- Patrones de validación estándar del sector
- Procedimientos recomendados de seguridad
Rol de optimización del rendimiento
Para el código crítico para el rendimiento, use un rol experto en rendimiento:
"Actuar como experto en optimización del rendimiento. Refactorice este algoritmo de ordenación para controlar grandes conjuntos de datos de forma eficaz".
Esto suele dar lugar a:
- Algoritmos optimizados y estructuras de datos
- Implementaciones eficientes en memoria
- Consideraciones sobre escalabilidad
- Sugerencias de supervisión del rendimiento
Rol de especialista en pruebas
Al crear conjuntos de pruebas completos, aproveche una perspectiva de experto en pruebas:
"Actuar como especialista en pruebas. Cree pruebas unitarias completas para este módulo de procesamiento de pagos, incluidos los casos perimetrales y los escenarios de error".
Normalmente, esto genera:
- Cobertura exhaustiva de pruebas
- Gestión de casos extremos
- Implementaciones ficticias
- Pruebas de condición de error
La solicitud de roles le ayuda a preparar el código de producción más rápido mediante la incorporación de conocimientos de dominio en implementaciones iniciales, lo que reduce la necesidad de varios ciclos de revisión.
Ahora que sabe cómo Copilot usa sus avisos para aprender, echemos un vistazo detallado a cómo usa realmente la solicitud para sugerir código automáticamente.