Generazione di codice utilizzando modelli LLM locali – esempi pratici
Negli ultimi tempi, le reti neurali artificiali, in particolare i grandi modelli linguistici (LLM), stanno diventando sempre più popolari nella generazione di codice. Grazie alla possibilità di eseguire i modelli localmente, i programmatori possono sfruttarne il potenziale senza dover ricorrere a soluzioni cloud. In questo articolo, discuteremo di come utilizzare i modelli LLM locali per generare codice, presentando esempi pratici.
Perché i modelli LLM locali?
L'uso di modelli LLM locali presenta diversi vantaggi:
- Privacy: I codici sorgente e i dati non lasciano il tuo computer.
- Controllo: Controllo completo sull'ambiente di esecuzione.
- Costi: Nessun costo per le API cloud.
Preparazione dell'ambiente
Per iniziare, hai bisogno di:
- Modello LLM: Ad esempio,
Mistral-7BoLlama-2. - Biblioteche:
transformerseacceleratedalla libreria Hugging Face. - Supporto GPU: Per una migliore prestazione.
Installazione delle librerie necessarie
pip install transformers accelerate torch
Esempio 1: Generazione di codice Python semplice
Di seguito è riportato un esempio di generazione di codice Python semplice utilizzando un modello LLM locale.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Caricamento del modello e del tokenizzatore
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Preparazione del prompt
prompt = "Scrivi una funzione Python che calcola la somma di due numeri:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Generazione del codice
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)
Risultato
def sum_two_numbers(a, b):
return a + b
Esempio 2: Generazione di codice utilizzando la libreria requests
In questo esempio, mostreremo come il modello possa generare codice che utilizza la libreria requests per eseguire una richiesta HTTP.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Caricamento del modello e del tokenizzatore
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Preparazione del prompt
prompt = "Scrivi un codice Python che esegue una richiesta GET all'API JSONPlaceholder:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Generazione del codice
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)
Risultato
import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.json())
Esempio 3: Generazione di codice utilizzando una classe in Python
In questo esempio, mostreremo come il modello possa generare codice che definisce una classe in Python.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Caricamento del modello e del tokenizzatore
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Preparazione del prompt
prompt = "Crea una classe Python che rappresenta un rettangolo:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Generazione del codice
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)
Risultato
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)
Ottimizzazione della generazione di codice
Per migliorare la qualità del codice generato, è possibile applicare diverse tecniche:
- Prompt precisi: Descrizione precisa di ciò che ti aspetti.
- Controllo della lunghezza: Impostazione della lunghezza appropriata del codice generato.
- Generazione multipla: Generazione di diverse versioni di codice e scelta della migliore.
Conclusione
La generazione di codice utilizzando modelli LLM locali è uno strumento potente per i programmatori. Grazie alla possibilità di eseguire i modelli localmente, è possibile godere di privacy e controllo sul codice. In questo articolo, abbiamo presentato alcuni esempi pratici che mostrano come utilizzare queste tecnologie nel lavoro quotidiano.
Ricorda che la qualità del codice generato dipende dalla qualità del modello e dalla precisione dei prompt. Sperimenta con diversi modelli e tecniche per ottenere i migliori risultati.