Bagikan melalui


Model penyelesaian dan kode dengan Azure OpenAI di Model Azure AI Foundry

Penting

Artikel ini ditulis dan diuji terhadap model pembuatan kode warisan. Model ini menggunakan API penyelesaian, dan gaya interaksi perintah/penyelesaiannya. Jika Anda ingin menguji teknik yang dijelaskan dalam artikel ini verbatim, sebaiknya gunakan gpt-35-turbo-instruct model yang memungkinkan akses ke API penyelesaian. Namun, untuk pembuatan kode, API penyelesaian obrolan dan model GPT-4o dan seri o terbaru akan memberikan hasil terbaik. Untuk menggunakan model yang lebih baru ini, perintah ini perlu dikonversi ke gaya percakapan khusus untuk berinteraksi dengan model tersebut.

Seri model Codex adalah turunan dari seri GPT-3 kami yang telah dilatih menggunakan bahasa alami dan miliaran baris kode. Kemampuan terkuatnya adalah pada Python dan juga mahir dalam lebih dari selusin bahasa pemrograman termasuk C#, JavaScript, Go, Perl, PHP, Ruby, Swift, TypeScript, SQL, dan bahkan Shell.

Anda dapat menggunakan Codex untuk berbagai tugas, termasuk:

  • Mengubah komentar menjadi kode
  • Melengkapi baris atau fungsi Anda berikutnya dalam konteks
  • Memberikan pengetahuan kepada Anda, seperti menemukan pustaka atau panggilan API yang berguna untuk aplikasi
  • Menambahkan komentar
  • Menulis ulang kode untuk efisiensi

Cara menggunakan model penyelesaian dengan kode

Berikut adalah beberapa contoh penggunaan model pelengkap yang dapat diuji di platform uji coba Azure AI Foundry dengan penyebaran berupa gpt-35-turbo-instruct.

Mengatakan "Halo" (Python)

"""
Ask the user for their name and say "Hello"
"""

Membuat nama acak (Python)

"""
1. Create a list of first names
2. Create a list of last names
3. Combine them randomly into a list of 100 full names
"""

Membuat kueri MyQSL (Python)

"""
Table customers, columns = [CustomerId, FirstName, LastName, Company, Address, City, State, Country, PostalCode, Phone, Fax, Email, SupportRepId]
Create a MySQL query for all customers in Texas named Jane
"""
query =

Menjelaskan kode (JavaScript)

// Function 1
var fullNames = [];
for (var i = 0; i < 50; i++) {
  fullNames.push(names[Math.floor(Math.random() * names.length)]
    + " " + lastNames[Math.floor(Math.random() * lastNames.length)]);
}

// What does Function 1 do?

Praktik terbaik

Mulailah dengan komentar, data, atau kode

Anda dapat bereksperimen menggunakan salah satu model Codex di ruang uji coba kami (instruksi gaya sebagai komentar saat diperlukan.)

Agar Codex membuat penyelesaian yang berguna, akan sangat membantu jika Anda memikirkan informasi apa yang dibutuhkan oleh seorang programmer untuk melakukan suatu tugas. Informasi ini bisa berupa komentar yang jelas atau data yang diperlukan untuk menulis fungsi yang berguna, seperti nama variabel atau kelas apa yang ditangani oleh fungsi.

Dalam contoh ini kami memberi tahu Codex apa yang harus dipanggil fungsi dan tugas apa yang akan dilakukan.

# Create a function called 'nameImporter' to add a first and last name to the database

Pendekatan ini menskalakan bahkan ke titik di mana Anda dapat memberikan Codex dengan komentar dan contoh skema database untuk membuatnya menulis permintaan kueri yang berguna untuk berbagai database. Berikut adalah contoh di mana kami menyediakan nama kolom dan tabel untuk kueri.

# Table albums, columns = [AlbumId, Title, ArtistId]
# Table artists, columns = [ArtistId, Name]
# Table media_types, columns = [MediaTypeId, Name]
# Table playlists, columns = [PlaylistId, Name]
# Table playlist_track, columns = [PlaylistId, TrackId]
# Table tracks, columns = [TrackId, Name, AlbumId, MediaTypeId, GenreId, Composer, Milliseconds, Bytes, UnitPrice]

# Create a query for all albums with more than 10 tracks

Saat Anda memperlihatkan Codex skema database, Codex dapat membuat tebakan berdasarkan informasi tentang cara memformat kueri.

Tentukan bahasa pemrograman

Codex memahami puluhan bahasa pemrograman yang berbeda. Banyak yang berbagi konvensi serupa untuk komentar, fungsi, dan sintaks pemrograman lainnya. Dengan menentukan bahasa dan versi apa dalam komentar, Codex lebih mampu memberikan penyelesaian untuk apa yang Anda inginkan. Meskipun demikian, Codex cukup fleksibel dengan gaya dan sintaks. Berikut adalah contoh untuk R dan Python.

# R language
# Calculate the mean distance between an array of points
# Python 3
# Calculate the mean distance between an array of points

Instruksikan Codex tentang apa yang ingin Anda lakukan

Jika Anda ingin Codex membuat halaman web, menempatkan baris kode awal dalam dokumen HTML (<!DOCTYPE html>) setelah komentar Anda memberi tahu Codex apa yang harus dilakukan selanjutnya. Metode yang sama berfungsi untuk membuat fungsi dari komentar (mengikuti komentar dengan baris baru yang dimulai dengan func atau def).

<!-- Create a web page with the title 'Kat Katman attorney at paw' -->
<!DOCTYPE html>

Menempatkan <!DOCTYPE html> setelah komentar kami akan membuatnya sangat jelas untuk Codex tentang apa yang ingin kita lakukan.

Atau jika kita ingin menulis fungsi, kita dapat memulai permintaan sebagai berikut dan Codex akan memahami apa yang perlu dilakukan selanjutnya.

# Create a function to count to 100

def counter

Menentukan pustaka akan membantu Codex memahami apa yang Anda inginkan

Codex memiliki pengetahuan luas tentang banyak perpustakaan, API, dan modul. Dengan memberi tahu Codex mana yang akan digunakan, baik dari komentar atau mengimpornya ke dalam kode Anda, Codex akan membuat saran berdasarkan mereka alih-alih alternatif.

<!-- Use A-Frame version 1.2.0 to create a 3D website -->
<!-- https://aframe.io/releases/1.2.0/aframe.min.js -->

Dengan menentukan versi, Anda dapat memastikan Codex menggunakan pustaka terbaru.

Nota

Codex dapat menyarankan pustaka dan API yang bermanfaat, tetapi selalu pastikan untuk melakukan penelitian Anda sendiri untuk memastikan bahwa pustaka dan API tersebut aman untuk aplikasi Anda.

Gaya komentar dapat memengaruhi kualitas kode.

Dengan beberapa bahasa, gaya komentar dapat meningkatkan kualitas output. Misalnya, saat bekerja dengan Python, dalam beberapa kasus menggunakan string dokumen (komentar yang dibungkus dalam tanda kutip tiga) dapat memberikan hasil berkualitas lebih tinggi daripada menggunakan simbol tagar (#).

"""
Create an array of users and email addresses
"""

Komentar di dalam fungsi dapat membantu

Standar pengodean yang direkomendasikan biasanya menyarankan untuk menempatkan deskripsi fungsi di dalam fungsi. Menggunakan format ini membantu Codex lebih memahami apa yang Anda inginkan untuk dilakukan fungsi.

def getUserBalance(id):
    """
    Look up the user in the database ‘UserData' and return their current account balance.
    """

Berikan contoh untuk hasil yang lebih tepat

Jika Anda memiliki gaya atau format tertentu yang perlu digunakan Codex, memberikan contoh atau menunjukkannya di bagian pertama permintaan akan membantu Codex lebih akurat mencocokkan apa yang Anda butuhkan.

"""
Create a list of random animals and species
"""
animals  = [ {"name": "Chomper", "species": "Hamster"}, {"name":

Suhu yang lebih rendah memberikan hasil yang lebih tepat

Mengatur suhu API ke 0, atau mendekati nol (seperti 0,1 atau 0,2) cenderung memberikan hasil yang lebih baik dalam banyak kasus. Tidak seperti model GPT-3, di mana suhu yang lebih tinggi dapat memberikan hasil kreatif dan acak yang berguna, suhu yang lebih tinggi dengan model Codex dapat menghasilkan respons acak atau tidak menentu.

Dalam kasus di mana Anda memerlukan Codex untuk memberikan hasil potensial yang berbeda, mulailah dari nol dan kemudian naikkan ke atas sebesar 0.1 hingga Anda menemukan variasi yang sesuai.

Atur tugas menjadi fungsi

Kita dapat menggunakan Codex untuk menulis fungsi dengan menentukan setepat mungkin apa yang harus dilakukan dalam komentar. Misalnya, dengan menulis komentar berikut, Codex membuat fungsi timer JavaScript yang dipicu saat pengguna menekan tombol:

Timer JavaScript sederhana

// Create a timer that creates an alert in 10 seconds

Membuat contoh data

Aplikasi pengujian sering kali memerlukan penggunaan data contoh. Karena Codex juga merupakan model bahasa yang memahami cara memahami dan menulis bahasa alami, Anda dapat meminta Codex untuk membuat data seperti array nama, produk, dan variabel buatan lainnya. Misalnya, di sini kami meminta Codex untuk membuat array suhu cuaca.

/* Create an array of weather temperatures for San Francisco */

Meminta Codex untuk melakukan tugas ini akan menghasilkan tabel seperti ini:

var weather = [
  { month: 'January', high: 58, low: 48 },
  { month: 'February', high: 61, low: 50 },
  { month: 'March', high: 64, low: 53 },
  { month: 'April', high: 67, low: 55 },
  { month: 'May', high: 70, low: 58 },
  { month: 'June', high: 73, low: 61 },
  { month: 'July', high: 76, low: 63 },
  { month: 'August', high: 77, low: 64 },
  { month: 'September', high: 76, low: 63 },
  { month: 'October', high: 73, low: 61 },
  { month: 'November', high: 68, low: 57 },
  { month: 'December', high: 64, low: 54 }
];

Fungsi campuran dan aplikasi kecil

Kita dapat memberikan Codex dengan komentar yang terdiri dari permintaan kompleks seperti membuat generator nama acak atau melakukan tugas dengan input pengguna dan Codex dapat menghasilkan sisanya asalkan ada cukup token.

/*
Create a list of animals
Create a list of cities
Use the lists to generate stories about what I saw at the zoo in each city
*/

Batasi ukuran penyelesaian untuk hasil yang lebih tepat atau latensi yang lebih rendah

Meminta penyelesaian yang lebih lama di Codex dapat menyebabkan jawaban yang tidak tepat dan pengulangan. Batasi ukuran kueri dengan mengurangi max_tokens dan mengatur token berhenti. Misalnya, tambahkan \n sebagai urutan berhenti untuk membatasi penyelesaian ke satu baris kode. Penyelesaian yang lebih kecil juga menghasilkan latensi yang lebih rendah.

Gunakan streaming untuk mengurangi latensi

Kueri Codex besar dapat memakan waktu puluhan detik untuk diselesaikan. Untuk membuat aplikasi yang memerlukan latensi yang lebih rendah, seperti asisten pengkodean yang melakukan penyelesaian otomatis, pertimbangkan untuk menggunakan streaming. Respons akan dikembalikan sebelum model selesai menghasilkan seluruh penyelesaian. Aplikasi yang hanya membutuhkan bagian dari penyelesaian dapat mengurangi latensi dengan memotong penyelesaian baik secara terprogram atau dengan menggunakan nilai kreatif untuk stop.

Pengguna dapat menggabungkan streaming dengan duplikasi untuk mengurangi latensi dengan meminta lebih dari satu solusi dari API, dan menggunakan respons pertama yang dikembalikan. Lakukan ini dengan mengatur n > 1. Pendekatan ini mengonsumsi lebih banyak kuota token, jadi gunakan dengan hati-hati (misalnya, dengan menggunakan pengaturan yang wajar untuk max_tokens dan stop).

Gunakan Codex untuk menjelaskan kode

Kemampuan Codex untuk membuat dan memahami kode memungkinkan kita menggunakannya untuk melakukan tugas seperti menjelaskan apa yang dilakukan kode dalam file. Salah satu cara untuk mencapainya adalah dengan meletakkan komentar setelah fungsi yang dimulai dengan "Fungsi ini" atau "Aplikasi ini adalah." Codex biasanya akan menafsirkan komentar ini sebagai awal penjelasan dan melengkapi teks lainnya.

/* Explain what the previous function is doing: It

Menjelaskan kueri SQL

Dalam contoh ini kami menggunakan Codex untuk menjelaskan dalam format yang dapat dibaca manusia apa yang dilakukan kueri SQL.

SELECT DISTINCT department.name
FROM department
JOIN employee ON department.id = employee.department_id
JOIN salary_payments ON employee.id = salary_payments.employee_id
WHERE salary_payments.date BETWEEN '2020-06-01' AND '2020-06-30'
GROUP BY department.name
HAVING COUNT(employee.id) > 10;
-- Explanation of the above query in human readable format
--

Menulis uji unit

Membuat pengujian unit dapat dilakukan di Python hanya dengan menambahkan komentar "Pengujian unit" dan memulai fungsi.

# Python 3
def sum_numbers(a, b):
  return a + b

# Unit test
def

Memeriksa kode untuk kesalahan

Dengan menggunakan contoh, Anda dapat menunjukkan Codex cara mengidentifikasi kesalahan dalam kode. Dalam beberapa kasus, tidak ada contoh yang diperlukan, namun menunjukkan tingkat dan detail untuk memberikan deskripsi dapat membantu Codex memahami apa yang harus dicari dan cara menjelaskannya. (Pemeriksaan oleh Codex untuk kesalahan tidak boleh menggantikan tinjauan yang cermat oleh pengguna. )

/* Explain why the previous function doesn't work. */

Menggunakan data sumber untuk menulis fungsi database

Sama seperti programmer manusia yang akan mendapat manfaat dari memahami struktur database dan nama kolom, Codex dapat menggunakan data ini untuk membantu Anda menulis permintaan kueri yang akurat. Dalam contoh ini, kami memasukkan skema untuk database dan memberi tahu Codex apa yang harus diquery dari database.

# Table albums, columns = [AlbumId, Title, ArtistId]
# Table artists, columns = [ArtistId, Name]
# Table media_types, columns = [MediaTypeId, Name]
# Table playlists, columns = [PlaylistId, Name]
# Table playlist_track, columns = [PlaylistId, TrackId]
# Table tracks, columns = [TrackId, Name, AlbumId, MediaTypeId, GenreId, Composer, Milliseconds, Bytes, UnitPrice]

# Create a query for all albums with more than 10 tracks

Mengonversi antar bahasa

Anda dapat membuat Codex untuk mengonversi dari satu bahasa ke bahasa lain dengan mengikuti format sederhana di mana Anda mencantumkan bahasa kode yang ingin Anda konversi dalam komentar, diikuti dengan kode lalu komentar dengan bahasa yang Anda inginkan untuk diterjemahkan.

# Convert this from Python to R
# Python version

[ Python code ]

# End

# R version

Menulis ulang kode untuk pustaka atau kerangka kerja

Jika Anda ingin Codex membuat fungsi lebih efisien, Anda dapat memberikan kode untuk menulis ulang diikuti dengan instruksi tentang format apa yang akan digunakan.

// Rewrite this as a React component
var input = document.createElement('input');
input.setAttribute('type', 'text');
document.body.appendChild(input);
var button = document.createElement('button');
button.innerHTML = 'Say Hello';
document.body.appendChild(button);
button.onclick = function() {
  var name = input.value;
  var hello = document.createElement('div');
  hello.innerHTML = 'Hello ' + name;
  document.body.appendChild(hello);
};

// React version:

Langkah selanjutnya

Pelajari selengkapnya tentang model yang mendasari yang mendukung Azure OpenAI.