Skapa kod från naturligt språk

Slutförd

En av funktionerna i Azure OpenAI-modeller är att generera kod från frågor på naturligt språk. Aktiviteter kan variera från ett enkelt enradskommando till ett fullständigt program. AI-modellerna kan också redigera och uppdatera tillhandahållen kod eller tidigare svar för att slutföra den begärda uppgiften.

AI-modeller för kodgenerering

I tidigare generationer av gpt modeller tränades vissa specifikt för användning med kod (kallas ofta codex-modeller ). När nya generationer av modeller utvecklas förbättrar basmodellerna drastiskt deras prestanda och förståelse för både språk och kod, vilket resulterar i att de inte behöver specifika kodmodeller. Den här förbättringen resulterar bara i en enda modell för senare generationer (till exempel gpt-35-turbo och gpt-4) som kan användas för både naturligt språk och kod.

Exemplen i den här modulen använder gpt-35-turbo.

Skrivfunktioner

Azure OpenAI-modeller kan skapa funktioner och appar på flera språk genom att bara beskriva vad du vill ha. Anta till exempel att du behöver en implementering av binär sökning men inte kommer ihåg hur det går till. Med kommandotolken write a function for binary search in pythonfår du förmodligen ett svar med funktionen och en förklaring av koden.

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.

Begäran kan gå längre än funktioner och begära en serie funktioner eller en hel app. Svaret är en bra utgångspunkt för den uppgift som du försöker uppnå.

Ändra kodningsspråk

Om du har kod på ett språk, men behöver den i ett annat, kan Azure OpenAI översätta det åt dig. Anta till exempel att du har den här print_squares funktionen i Python.

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

Om du anger koden tillsammans med uppmaningen convert this code to C#får du förmodligen något som liknar följande funktion.

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

Observera att modellen förstod skillnaderna mellan hur for loopar och funktioner definieras på de olika språken (inklusive åtkomstmodifierare i C#) och ändrade koden på rätt sätt.

Förstå okänd kod

Azure OpenAI-modeller är användbara för att förstå kod som inte är meningsfull eller som kan vara på ett språk som du inte är bekant med. Anta till exempel att du fick följande funktion (på ett fiktivt kodningsspråk!) och inte visste hur du skulle förstå den.

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

När den tillhandahålls till modellen får du, tillsammans med uppmaningen could you explain what this code is doing?, ett svar som liknar följande:

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.

Om du kombinerar förklaringen och översättningen till ett språk som du är bekant med blir den här funktionen ännu mer användbar.