Генерація коду з використанням локальних моделей LLM – практичні приклади
У сучасний час штучні нейронні мережі, зокрема великі мовні моделі (LLM), стають все популярнішими у генерації коду. Дякуючи можливості запуску моделей локально, програмісти можуть користуватися їхнім потенціалом без необхідності використання хмарних рішень. У цій статті ми розглянемо, як використати локальні моделі LLM для генерації коду, надаючи практичні приклади.
Чому локальні моделі LLM?
Використання локальних моделей LLM має кілька переваг:
- Приватність: Код джерела і дані не покидають вашого комп'ютера.
- Контроль: Повний контроль над середовищем виконання.
- Витрати: Відсутність оплат за API хмар.
Підготовка середовища
Аби почати, вам знадобиться:
- Модель LLM: Наприклад,
Mistral-7BабоLlama-2. - Бібліотеки:
transformersіaccelerateз бібліотеки Hugging Face. - Підтримка GPU: Для кращої продуктивності.
Встановлення необхідних бібліотек
pip install transformers accelerate torch
Приклад 1: Генерація простого коду Python
Нижче наведено приклад генерації простого коду Python за допомогою локальної моделі LLM.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Завантаження моделі і токенізатора
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Підготовка промпту
prompt = "Напишіть функцію Python, яка обчислює суму двох чисел:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Генерація коду
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)
Результат
def sum_two_numbers(a, b):
return a + b
Приклад 2: Генерація коду з використанням бібліотеки requests
У цьому прикладі ми покажемо, як модель може згенерувати код, що використовує бібліотеку requests для виконання HTTP-запиту.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Завантаження моделі і токенізатора
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Підготовка промпту
prompt = "Напишіть код Python, який виконує запит GET до API JSONPlaceholder:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Генерація коду
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)
Результат
import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.json())
Приклад 3: Генерація коду з використанням класу в Python
У цьому прикладі ми покажемо, як модель може згенерувати код, що визначає клас в Python.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Завантаження моделі і токенізатора
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Підготовка промпту
prompt = "Створіть клас Python, який представляє прямокутник:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Генерація коду
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)
Результат
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)
Оптимізація генерації коду
Аби покращити якість згенерованого коду, можна застосувати кілька технік:
- Точні промпти: Точний опис того, що ви очікуєте.
- Контроль довжини: Встановлення відповідної довжини згенерованого коду.
- Множинна генерація: Генерація кількох версій коду і вибір найкращої.
Підсумок
Генерація коду за допомогою локальних моделей LLM є потужним інструментом для програмістів. Дякуючи можливості запуску моделей локально, можна користуватися приватністю і контролем над кодом. У цій статті ми надали кілька практичних прикладів, які показують, як використати ці технології у щоденній роботі.
Пам'ятайте, що якість згенерованого коду залежить від якості моделі і точності промптів. Експериментуйте з різними моделями і техніками, аби досягти найкращих результатів.