Rig — biblioteca para integrar LLM en Rust
En el mundo del desarrollo en Rust, trabajar con modelos de lenguaje grandes (LLM) ha sido durante mucho tiempo una tarea compleja. La mayoría de los SDK estaban escritos en Python o JavaScript, y el ecosistema de Rust solo ofrecía clientes HTTP dispersos. La biblioteca Rig (Rust Integration with GGUF/LLM) resuelve este problema proporcionando una interfaz unificada, ergonómica y segura para interactuar con decenas de proveedores de LLM: OpenAI, Anthropic, Cohere, Google Gemini, Llama.cpp, Ollama y muchos más.
¿Por qué necesitas Rig? En primer lugar, ofrece una API type-safe: todas las solicitudes y respuestas están estrictamente tipadas, lo que elimina toda una clase de errores en tiempo de ejecución. En segundo lugar, Rig implementa pipelines: cadenas componibles de llamadas a LLM con soporte para streaming, ventanas de contexto y llamadas a herramientas (tool calling). En tercer lugar, la biblioteca está diseñada pensando en el rendimiento: asincronía de serie, asignaciones mínimas y soporte para batching.
Este artículo es la guía más detallada sobre Rig. Analizaremos la instalación, los métodos principales, escribiremos un ejemplo real y daremos consejos de optimización. Al final, podrás crear aplicaciones listas para producción en Rust que utilicen LLM.
Instalación
Añade Rig a tu proyecto Cargo:
cargo add rig-core --features openai,anthropic,cohere,gemini,ollama,llama-cpp
Si solo necesitas un proveedor, por ejemplo OpenAI:
cargo add rig-core --features openai
Para trabajar con modelos locales a través de llama.cpp, necesitarás instalar llama.cpp (descárgalo desde GitHub) y compilarlo con soporte CUDA/Metal. Luego agrega la feature llama-cpp.
Versión mínima de Rust: 1.75.0. Verifica:
rustc --version
Inicio rápido
Crea un archivo src/main.rs y escribe una solicitud simple a OpenAI:
use rig::providers::openai;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Inicialización del cliente mediante la variable de entorno OPENAI_API_KEY
let client = openai::Client::from_env();
// Creación del modelo
let model = client.model("gpt-4o-mini").build();
// Envío de la solicitud
let response = model.prompt("Cuenta un chiste sobre programadores").await?;
println!("{}", response);
Ok(())
}
Ejecuta:
export OPENAI_API_KEY="sk-..."
cargo run
Verás un chiste generado. ¡Felicidades! Acabas de integrar un LLM en Rust.
Métodos y funciones principales
Veamos los métodos clave de Rig. Para cada uno, mostraremos la firma, la descripción y un ejemplo funcional.
1. Client::from_env()
Firma: pub fn from_env() -> Self
Qué hace: Crea un cliente para un proveedor específico, leyendo la clave API de una variable de entorno (por ejemplo, OPENAI_API_KEY).
use rig::providers::openai;
let client = openai::Client::from_env();
2. Client::model(name)
Firma: pub fn model(&self, model_name: &str) -> ModelBuilder
Qué hace: Devuelve un builder para configurar el modelo. Permite establecer temperatura, max_tokens, palabras de parada y otros parámetros.
let model = client.model("gpt-4o")
.temperature(0.7)
.max_tokens(200)
.build();
3. Model::prompt(text)
Firma: pub async fn prompt(&self, prompt: impl Into<String>) -> Result<String, ModelError>
Qué hace: Envía una solicitud de texto al modelo y devuelve la respuesta generada.