Construir o código com base na linguagem natural

Concluído

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

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

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

Os exemplos deste módulo usam gpt-35-turbo.

Escrever funções

Os modelos do OpenAI do Azure podem criar funções e aplicativos em várias linguagens 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 realizar.

Alterar a linguagem de codificação

Se você tiver o código em uma linguagem, mas precisar dele em outra, o OpenAI do Azure poderá convertê-lo para você. Por exemplo, digamos que você tenha a função print_squares no Python.

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

Se você fornecer esse código, acompanhado do prompt convert this code to C#, provavelmente, obterá algo semelhante à função a seguir.

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 loops for e funções são definidos nas diferentes linguagens (incluindo modificadores de acesso em C#) e alterou o código de acordo.

Entender um código desconhecido

Os modelos do OpenAI do Azure são úteis para entender um código que não faz sentido ou que podem estar em uma linguagem com a qual você não está familiarizado. Por exemplo, digamos que você tenha recebido a função a seguir (em uma linguagem de codificação fictícia!) e não sabia 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 ela é fornecida ao modelo, acompanhado do 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.

A combinação da explicação e da conversão em uma linguagem com a qual você está familiarizado torna essa funcionalidade ainda mais útil.