Generowanie kodu z użyciem lokalnych modeli LLM – praktyczne przykłady
W dzisiejszych czasach sztuczne sieci neuronowe, zwłaszcza duże modele językowe (LLM), stają się coraz popularniejsze w generowaniu kodu. Dzięki możliwości uruchamiania modeli lokalnie, programiści mogą korzystać z ich potencjału bez konieczności korzystania z chmurowych rozwiązań. W tym artykule omówimy, jak wykorzystać lokalne modele LLM do generowania kodu, przedstawiając praktyczne przykłady.
Dlaczego lokalne modele LLM?
Korzystanie z lokalnych modeli LLM ma kilka zalet:
- Prywatność: Kody źródłowe i dane nie opuszczają Twojego komputera.
- Kontrola: Pełna kontrola nad środowiskiem wykonawczym.
- Koszty: Brak opłat za API chmurowe.
Przygotowanie środowiska
Aby rozpocząć, potrzebujesz:
- Model LLM: Na przykład
Mistral-7BlubLlama-2. - Biblioteki:
transformersiacceleratez biblioteki Hugging Face. - Obsługa GPU: Dla lepszej wydajności.
Instalacja wymaganych bibliotek
pip install transformers accelerate torch
Przykład 1: Generowanie prostego kodu Python
Poniżej znajduje się przykład generowania prostego kodu Python za pomocą lokalnego modelu LLM.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Ładowanie modelu i tokenizera
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Przygotowanie promptu
prompt = "Napisz funkcję Python, która oblicza sumę dwóch liczb:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Generowanie kodu
output = model.generate(input_ids, max_length=100, num_return_sequences=1)
generated_code = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_code)
Wynik
def sum_two_numbers(a, b):
return a + b
Przykład 2: Generowanie kodu z użyciem biblioteki requests
W tym przykładzie pokażemy, jak model może wygenerować kod używający biblioteki requests do wykonania żądania HTTP.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Ładowanie modelu i tokenizera
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Przygotowanie promptu
prompt = "Napisz kod Python, który wykonuje żądanie GET do API JSONPlaceholder:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Generowanie kodu
output = model.generate(input_ids, max_length=150, num_return_sequences=1)
generated_code = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_code)
Wynik
import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.json())
Przykład 3: Generowanie kodu z użyciem klasy w Pythonie
W tym przykładzie pokażemy, jak model może wygenerować kod definiujący klasę w Pythonie.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Ładowanie modelu i tokenizera
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Przygotowanie promptu
prompt = "Stwórz klasę Python, która reprezentuje prostokąt:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Generowanie kodu
output = model.generate(input_ids, max_length=200, num_return_sequences=1)
generated_code = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_code)
Wynik
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def perimeter(self):
return 2 * (self.width + self.height)
Optymalizacja generowania kodu
Aby poprawić jakość generowanego kodu, można zastosować kilka technik:
- Dokładne prompty: Precyzyjne opisanie, czego oczekujesz.
- Kontrola długości: Ustawienie odpowiedniej długości generowanego kodu.
- Wielokrotne generowanie: Generowanie kilku wersji kodu i wybór najlepszej.
Podsumowanie
Generowanie kodu za pomocą lokalnych modeli LLM jest potężnym narzędziem dla programistów. Dzięki możliwości uruchamiania modeli lokalnie, można cieszyć się prywatnością i kontrolą nad kodem. W tym artykule przedstawiliśmy kilka praktycznych przykładów, które pokazują, jak wykorzystać te technologie w codziennej pracy.
Pamiętaj, że jakość generowanego kodu zależy od jakości modelu i precyzji promptów. Eksperymentuj z różnymi modelami i technikami, aby osiągnąć najlepsze rezultaty.