Generación de código utilizando modelos locales LLM – ejemplos prácticos
En la actualidad, las redes neuronales artificiales, especialmente los grandes modelos de lenguaje (LLM), se están volviendo cada vez más populares en la generación de código. Gracias a la posibilidad de ejecutar modelos localmente, los programadores pueden aprovechar su potencial sin necesidad de utilizar soluciones en la nube. En este artículo, discutiremos cómo utilizar modelos locales LLM para generar código, presentando ejemplos prácticos.
¿Por qué modelos locales LLM?
El uso de modelos locales LLM tiene varias ventajas:
- Privacidad: Los códigos fuente y los datos no salen de tu computadora.
- Control: Control total sobre el entorno de ejecución.
- Costos: No hay cargos por API en la nube.
Preparación del entorno
Para comenzar, necesitas:
- Modelo LLM: Por ejemplo,
Mistral-7BoLlama-2. - Bibliotecas:
transformersyacceleratede la biblioteca Hugging Face. - Soporte GPU: Para un mejor rendimiento.
Instalación de las bibliotecas requeridas
pip install transformers accelerate torch
Ejemplo 1: Generación de código Python simple
A continuación, se muestra un ejemplo de generación de código Python simple utilizando un modelo local LLM.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Carga del modelo y el tokenizador
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Preparación del prompt
prompt = "Escribe una función Python que calcule la suma de dos números:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Generación de código
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)
Resultado
def sum_two_numbers(a, b):
return a + b
Ejemplo 2: Generación de código utilizando la biblioteca requests
En este ejemplo, mostraremos cómo el modelo puede generar código que utiliza la biblioteca requests para realizar una solicitud HTTP.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Carga del modelo y el tokenizador
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Preparación del prompt
prompt = "Escribe código Python que realice una solicitud GET a la API JSONPlaceholder:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Generación de código
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)
Resultado
import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.json())
Ejemplo 3: Generación de código utilizando una clase en Python
En este ejemplo, mostraremos cómo el modelo puede generar código que define una clase en Python.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Carga del modelo y el tokenizador
model_name = "mistral-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Preparación del prompt
prompt = "Crea una clase Python que represente un rectángulo:"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
# Generación de código
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)
Resultado
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)
Optimización de la generación de código
Para mejorar la calidad del código generado, se pueden aplicar varias técnicas:
- Prompts precisos: Describir con precisión lo que esperas.
- Control de longitud: Establecer la longitud adecuada del código generado.
- Generación múltiple: Generar varias versiones de código y elegir la mejor.
Resumen
La generación de código utilizando modelos locales LLM es una herramienta poderosa para los programadores. Gracias a la posibilidad de ejecutar modelos localmente, se puede disfrutar de privacidad y control sobre el código. En este artículo, hemos presentado varios ejemplos prácticos que muestran cómo utilizar estas tecnologías en el trabajo diario.
Recuerda que la calidad del código generado depende de la calidad del modelo y la precisión de los prompts. Experimenta con diferentes modelos y técnicas para lograr los mejores resultados.