Construa código a partir de linguagem natural

Concluído

Um dos recursos dos modelos OpenAI do Azure é gerar código a partir de prompts de linguagem natural. As tarefas podem variar de um simples comando de uma linha a um aplicativo completo. Os modelos de IA também podem editar e atualizar o código fornecido ou respostas anteriores para concluir a tarefa solicitada.

Modelos de IA para geração de código

Em gerações anteriores de modelos, alguns foram treinados especificamente para uso com código (muitas vezes chamados de gpt modelos codex). À medida que as novas gerações de modelos evoluem, os modelos base melhoram drasticamente seu desempenho e compreensão da linguagem e do código, o que resulta na não necessidade de modelos de código específicos. Essa melhoria resulta em apenas um único modelo para as gerações mais recentes (como gpt-35-turbo e gpt-4) que pode ser usado tanto para linguagem natural quanto para código.

Os exemplos neste módulo estão usando gpt-35-turboo .

Funções de escrita

Os modelos OpenAI do Azure podem criar funções e aplicativos em vários idiomas apenas descrevendo o que você deseja. Por exemplo, digamos que você precise de uma implementação de pesquisa binária, mas não se lembre de como ela é feita. Dado o prompt write a function for binary search in python, você provavelmente receberá uma resposta com a função e uma explicação do 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.

A solicitação pode ir além das funções e solicitar uma série de funções ou um aplicativo inteiro. A resposta fornece um bom ponto de partida para a tarefa que você está tentando alcançar.

Alterar linguagem de codificação

Se você tiver código em um idioma, mas precisar dele em outro, o Azure OpenAI pode traduzir isso para você. Por exemplo, digamos que você tenha essa print_squares função em Python.

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

Se você fornecer esse código, juntamente com o prompt convert this code to C#, você provavelmente obterá algo semelhante à seguinte função.

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

Observe que o modelo entendeu as diferenças entre como for loops e funções são definidos nas diferentes linguagens (incluindo modificadores de acesso em C#) e alterou o código apropriadamente.

Compreender código desconhecido

Os modelos do Azure OpenAI são úteis para entender o código que não faz sentido ou pode estar em uma linguagem com a qual você não está familiarizado. Por exemplo, digamos que você recebeu a seguinte função (em uma linguagem de codificação fictícia!) e não soube como entendê-la.

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));
    }
}

Quando fornecido ao modelo, juntamente com o prompt could you explain what this code is doing?, você obtém uma resposta semelhante à seguinte:

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.

Combinar a explicação e a tradução para um idioma com o qual você está familiarizado torna essa funcionalidade ainda mais útil.