Construir código a partir del lenguaje natural

Completado

Una de las funcionalidades de los modelos de Azure OpenAI es generar código a partir de mensajes de lenguaje natural. Las tareas pueden oscilar entre un sencillo comando de una línea hasta una aplicación completa. Los modelos de IA también pueden editar y actualizar el código proporcionado o las respuestas anteriores para completar la tarea solicitada.

Modelos de IA para la generación de código

En generaciones anteriores de modelos de gpt, algunos se entrenaron específicamente para su uso con código (a menudo denominados modelos códice). A medida que evolucionan nuevas generaciones de modelos, los modelos base mejoran radicalmente su rendimiento y comprensión tanto del lenguaje como del código, lo que da lugar a que no se necesiten modelos específicos de código. Esta mejora da como resultado un único modelo para las generaciones más recientes (como gpt-35-turbo y gpt-4) que se puede usar tanto para lenguaje natural como para código.

Los ejemplos de este módulo usan gpt-35-turbo.

Escribir funciones

Los modelos de Azure OpenAI pueden crear funciones y aplicaciones en varios lenguajes con tan solo describir aquello que quiere. Por ejemplo, supongamos que necesita una implementación de búsqueda binaria, pero no recuerda cómo se hace. Al proporcionar el mensaje write a function for binary search in python, probablemente reciba una respuesta con la función y una explicación del código.

Sure, here's an example implementation of binary search algorithm in Python:

def binary_search(array, target):  
    low = 0  
    high = len(array) - 1  
  
    while low <= high:  
        mid = (low + high) // 2  
        if array[mid] == target:  
            return mid  
        elif array[mid] < target:  
            low = mid + 1  
        else:  
            high = mid - 1  
  
    return -1  
 
This function takes in two arguments - an array of integers and a target integer that we want to search
for in the array. The function initializes two pointers - low and high - to the first and last indices
of the array, respectively.

Inside the while loop, the function calculates the middle index using integer division (//). If the 
middle element is equal to the target, the function returns the index of the middle element. If the 
middle element is less than the target, we update the low pointer to mid + 1. Otherwise, we update the 
high pointer to mid - 1. We continue these steps until we find the target or the pointers cross each 
other (i.e., low > high).

If the target is not found in the array, the function returns -1.

Note that the binary search algorithm assumes that the input array is sorted in ascending order. If 
the array is not sorted, the algorithm may not return the correct result.

Se pueden solicitar no solo funciones, sino también una serie de funciones o una aplicación completa. La respuesta proporciona un punto de partida óptimo para la tarea que intenta lograr.

Cambio del lenguaje de codificación

Si tiene código en un lenguaje pero lo necesita en otro, Azure OpenAI puede traducirlo automáticamente. Por ejemplo, supongamos que tiene la función print_squares en Python.

def print_squares(n):  
    for i in range(1, n+1):  
        print(i**2)   

Si proporciona ese código, junto con el mensaje convert this code to C#, probablemente obtenga algo similar a la función siguiente.

public void PrintSquares(int n)  
{  
    for (int i = 1; i <= n; i++)  
    {  
        Console.WriteLine(i * i);  
    }  
}  

Tenga en cuenta que el modelo ha entendido las diferencias entre cómo se definen las funciones y los bucles for en los distintos lenguajes (incluidos los modificadores de acceso en C#) y ha cambiado el código en consecuencia.

Entender código desconocido

Los modelos de Azure OpenAI son útiles para comprender código que no tiene sentido o que pueda estar en un lenguaje con el que no esté familiarizado. Por ejemplo, supongamos que se le ha asignado la siguiente función (en un lenguaje de codificación ficticio) y que no la entiende.

fn qzplv(n: i32, m: i32) -> i32 {
    if n == 0 {
        return m + 1;
    } else if m == 0 {
        return qzplv(n - 1, 1);
    } else {
        return qzplv(n - 1, qzplv(n, m - 1));
    }
}

Cuando se le proporciona al modelo, junto con el mensaje could you explain what this code is doing?, se obtiene una respuesta similar a la siguiente:

Sure, I'd be happy to explain what this code is doing!

This code is implementing the Ackermann function, which is a well-known mathematical function that 
grows very quickly in terms of computation time as its inputs increase. The function takes two integer 
arguments (n and m) and returns another integer.

Here's how the function works:
- If n is equal to 0, the function returns m + 1.
- If m is equal to 0, the function calls itself recursively with n - 1 and 1 as arguments.
- Otherwise, the function calls itself recursively with n - 1 and the result of calling itself with n 
and m - 1 as arguments.

The function is implemented in a way that is easy to understand and follow, but it has a very high 
computational complexity. In fact, it grows so quickly that it can't be computed for values of n and m 
greater than about 4 or 5.

La combinación de la explicación y la traducción a un lenguaje con el que esté familiarizado hace que esta funcionalidad sea aún más útil.