Code maken uit natuurlijke taal

Voltooid

Een van de mogelijkheden van Azure OpenAI-modellen is het genereren van code op basis van prompts in natuurlijke taal. Taken kunnen variëren van een eenvoudige één regelopdracht tot een volledige toepassing. De AI-modellen kunnen ook verstrekte code of eerdere antwoorden bewerken en bijwerken om de aangevraagde taak te voltooien.

AI-modellen voor het genereren van code

In eerdere generaties van gpt modellen werden sommige specifiek getraind voor gebruik met code (ook wel codexmodellen genoemd). Naarmate nieuwe generaties van modellen zich ontwikkelen, verbeteren de basismodellen hun prestaties en inzicht in zowel taal als code drastisch, wat resulteert in het niet nodig hebben van specifieke codemodellen. Deze verbetering resulteert in slechts één model voor recentere generaties (zoals gpt-35-turbo en gpt-4) die kunnen worden gebruikt voor zowel natuurlijke taal als code.

In de voorbeelden in deze module wordt gebruikgemaakt van gpt-35-turbo.

Schrijffuncties

Azure OpenAI-modellen kunnen functies en apps in verschillende talen maken door alleen maar te beschrijven wat u wilt. Stel dat u een implementatie van binaire zoekopdrachten nodig hebt, maar u weet niet meer hoe het is gedaan. Gezien de prompt write a function for binary search in pythonontvangt u waarschijnlijk een antwoord met de functie en een uitleg van de code.

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.

De aanvraag kan verder gaan dan functies en een reeks functies of een hele app aanvragen. Het antwoord biedt een goed beginpunt voor de taak die u probeert te bereiken.

Codetaal wijzigen

Als u code in één taal hebt, maar deze in een andere taal nodig hebt, kan Azure OpenAI dat voor u vertalen. Stel dat u deze print_squares functie hebt in Python.

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

Als u die code opgeeft, samen met de prompt convert this code to C#, krijgt u waarschijnlijk iets vergelijkbaars met de volgende functie.

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

U ziet dat het model de verschillen begrijpt tussen de manier waarop for lussen en functies worden gedefinieerd in de verschillende talen (inclusief toegangsmodifiers in C#) en de code op de juiste manier hebt gewijzigd.

Onbekende code begrijpen

Azure OpenAI-modellen zijn handig voor het begrijpen van code die niet zinvol is, of in een taal die u niet kent. Stel dat u de volgende functie hebt gekregen (in een fictieve coderingstaal!) en u niet wist hoe u deze moet begrijpen.

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

Wanneer u aan het model wordt verstrekt, samen met de prompt could you explain what this code is doing?, krijgt u een antwoord dat er ongeveer als volgt uitziet:

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.

Door de uitleg en vertaling te combineren in een taal waarmee u bekend bent, is deze functionaliteit nog nuttiger.