https://aie24.pl/
Aby zobaczyć, jak dobrze duże modele językowe radzą sobie z tłumaczeniem między językami programowania, zacznijmy od prostej funkcji JavaScript:
// converts an array to an HTML unordered list
function makeUnorderedList(array) {
let listItems = array.map(element => {
return `<li>${element}</li>`;
});
return `<ul>${listItems.join(“)}</ul>`;
}Nie ma nic skomplikowanego w tej funkcji. Gdy podasz jej tablicę, konwertuje ona tablicę na wypunktowaną listę HTML. Rysunek pokazuje funkcję makeUn orderedList() w akcji.

Możesz użyć Copilot Chat do tłumaczenia kodu z jednego języka na inny. Gdy plik zawierający tylko funkcję makeUnordinateList() jest otwarty w VS Code, podaj Copilot Chat następujący monit:
przetłumacz tę funkcję na język Python.
Tłumaczenie Copilota jest następujące:
def make_unordered_list(array):
list_items = [f”<li>{element}</li>” for element in array]
return f”<ul>{“.join(list_items)}</ul>”
To rozwiązanie wydaje się w porządku. Aby je przetestować, wprowadź je do Google Colab i uruchom funkcję. Wynik, który pokazano na rysunku , jest taki, jakiego się spodziewałem.

Copilot wykonał świetną robotę, konwertując prostą funkcję między dwoma popularnymi językami programowania. Teraz zobaczmy, jak poradzi sobie z tłumaczeniem na mniej popularny język, konwertując wersję Pythona funkcji na język programowania Nim. Nim to statycznie typowany kompilowany język programowania, który łączy najlepsze cechy innych języków programowania, takich jak Python, Lisp i Ada. Przetłumaczona funkcja wygląda następująco:
import strutils
proc makeUnorderedList(array: seq[string]): string =
var listItems = “”
for element in array:
listItems = listItems & “<li>” & element & “</li>”
return “<ul>” & listItems & “</ul>”
Nie znam Nima (jeszcze), ale na pierwszy rzut oka ten wynik wydaje się rozsądny. Poprosiłem Copilota o przykład użycia tej funkcji, a on podał przykład i powiedział, jaki będzie wynik, jak pokazano na rysunku

Aby sprawdzić, czy kod Nim Copilota działa i generuje oczekiwane dane wyjściowe, skopiuj przykładowy kod do Nim Playground na stronie https://play.nim-lang. org/. Dane wyjściowe były dokładnie takie, jak podał Copilot, jak pokazano na rysunku

Chociaż ten prosty przykład generuje poprawne wyniki, nie wiem, czy jest to najlepszy sposób na napisanie tej funkcji w Nim. Chyba że po prostu eksperymentujesz, nie proś asystenta AI o konwersję kodu na język, którego nie znasz. Przejście z JavaScript do Nim wydawało się sukcesem. Teraz chcę się dowiedzieć, czy Copilot może pomóc w czymś, do czego mam codzienne zastosowanie: konwersji JavaScript do TypeScript. Niestety, przy pierwszej próbie Copilot odniósł tylko częściowy sukces:
converts an array to an HTML unordered list
function makeUnorderedList(array: any[]) {
let listItems = array.map((element) => {
return `<li>${element}</li>`;
});
return `<ul>${listItems.join(“)}</ul>`;
}
Widzę dwa problemy z tym kodem:
»»Komentarz nie jest oznaczony jako komentarz.
»»Parametr akceptowany przez makeUn orderedList() jest adnotowany jako będący typu any[].
Ponieważ oryginalna funkcja nie określa, jaki typ danych powinny mieć elementy tablicy, to tłumaczenie jest technicznie poprawne. Jednak programista użyłby bardziej szczegółowego typu. Poprosiłem Copilota o ponowne wykonanie tłumaczenia i tym razem wynik był lepszy, ale nadal nie był poprawny:
converts an array to an HTML unordered list
function makeUnorderedList(array: string[]): string {
let listItems: string[] = array.map((element) => {
return `<li>${element}</li>`;
});
return `<ul>${listItems.join(“)}</ul>`;
}
W tym tłumaczeniu komentarz nadal nie jest oznaczony jako komentarz, a adnotacje typu dla wartości zwracanej z funkcji i dla listItems są zbędne. Ponownie spróbowałem tłumaczenia i otrzymałem niemal idealny wynik, z wyjątkiem tego, że komentarz został usunięty:
function makeUnorderedList(array: string[]) {
let listItems = array.map((element) => {
return `<li>${element}</li>`;
});
return `<ul>${listItems.join(“)}</ul>`;
}
Prawdopodobnie Copilot będzie radził sobie z prostymi tłumaczeniami znacznie lepiej, gdy przeczytasz ten tekst, zwłaszcza jeśli używany przez niego model zostanie ulepszony. Jednak ten eksperyment pokazuje, że nie można ani nie jest mądre ufać tłumaczeniom AI, jeśli nie znasz języka docelowego.