Ollama (Modelos Locales)
Ejecute LLMs localmente con total privacidad: sin claves de API, sin internet, sin costes.
Resumen
┌─────────────────────────────────────────────────────────────────────┐
│ Configuración Local de Ollama │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ Su Máquina │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ ADK-Rust │ ───▶ │ Ollama │ │ │
│ │ │ Agent │ │ Server │ │ │
│ │ └──────────────┘ └──────┬───────┘ │ │
│ │ │ │ │
│ │ ┌──────▼───────┐ │ │
│ │ │ Local LLM │ │ │
│ │ │ (llama3.2) │ │ │
│ │ └──────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 🔒 100% Privado - Los datos nunca salen de su máquina │
│ │
└─────────────────────────────────────────────────────────────────────┘
¿Por qué Ollama?
| Beneficio | Descripción |
|---|---|
| 🆓 Gratis | Sin costes de API, nunca |
| 🔒 Privado | Los datos permanecen en su máquina |
| 📴 Sin conexión | Funciona sin internet |
| 🎛️ Control | Elija cualquier modelo, personalice la configuración |
| ⚡ Rápido | Sin latencia de red |
Paso 1: Instalar Ollama
macOS
brew install ollama
Linux
curl -fsSL https://ollama.com/install.sh | sh
Windows
Descargar desde ollama.com
Paso 2: Iniciar el servidor
ollama serve
Debería ver:
Couldn't find '/Users/you/.ollama/id_ed25519'. Generating new private key.
Your new public key is: ssh-ed25519 AAAA...
time=2024-01-05T12:00:00.000Z level=INFO source=server.go msg="Listening on 127.0.0.1:11434"
Paso 3: Descargar un modelo
En una nueva terminal:
# Modelo inicial recomendado (3B parámetros, rápido)
ollama pull llama3.2
# Otros modelos populares
ollama pull qwen2.5:7b # Excelente para tool calling
ollama pull mistral # Bueno para código
ollama pull codellama # Generación de código
ollama pull gemma2 # Modelo eficiente de Google
Paso 4: Añadir a su proyecto
[dependencies]
adk-model = { version = "0.2", features = ["ollama"] }
Paso 5: Uso en Código
use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// ¡No se necesita clave API!
let model = OllamaModel::new(OllamaConfig::new("llama3.2"))?;
let agent = LlmAgentBuilder::new("local_assistant")
.instruction("You are a helpful assistant running locally.")
.model(Arc::new(model))
.build()?;
// Use the agent...
Ok(())
}
Ejemplo Completo y Funcional
use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
// ¡No se necesita clave API!
let model = OllamaModel::new(OllamaConfig::new("llama3.2"))?;
let agent = LlmAgentBuilder::new("ollama_assistant")
.description("Ollama-powered local assistant")
.instruction("You are a helpful assistant running locally via Ollama. Be concise.")
.model(Arc::new(model))
.build()?;
// Ejecutar sesión interactiva
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}
Cargo.toml
[dependencies]
adk-rust = { version = "0.2", features = ["cli", "ollama"] }
tokio = { version = "1", features = ["full"] }
dotenvy = "0.15"
anyhow = "1.0"
Opciones de Configuración
use adk_model::ollama::{OllamaModel, OllamaConfig};
let config = OllamaConfig::new("llama3.2")
.with_base_url("http://localhost:11434") // URL de servidor personalizada
.with_temperature(0.7) // Creatividad (0.0-1.0)
.with_max_tokens(2048); // Longitud máxima de respuesta
let model = OllamaModel::new(config)?;
Modelos Recomendados
| Modelo | Tamaño | RAM Necesaria | Mejor Para |
|---|---|---|---|
llama3.2 | 3B | 4GB | Rápido, propósito general |
llama3.2:7b | 7B | 8GB | Mejor calidad |
qwen2.5:7b | 7B | 8GB | Mejor para invocación de herramientas |
mistral | 7B | 8GB | Código y razonamiento |
codellama | 7B | 8GB | Generación de código |
gemma2 | 9B | 10GB | Rendimiento equilibrado |
llama3.1:70b | 70B | 48GB | Máxima calidad |
Cómo Elegir un Modelo
- ¿RAM limitada (8GB)? →
llama3.2(3B) - ¿Necesita invocación de herramientas? →
qwen2.5:7b - ¿Escribiendo código? →
codellamaomistral - ¿Mejor calidad? →
llama3.1:70b(necesita 48GB+ de RAM)
Invocación de Herramientas con Ollama
Ollama admite la invocación de funciones con modelos compatibles:
use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use adk_tool::FunctionTool;
use std::sync::Arc;
// qwen2.5 tiene un excelente soporte para la invocación de herramientas
let model = OllamaModel::new(OllamaConfig::new("qwen2.5:7b"))?;
let weather_tool = Arc::new(FunctionTool::new(
"get_weather",
"Get weather for a location",
|_ctx, args| async move {
let location = args.get("location").and_then(|v| v.as_str()).unwrap_or("unknown");
Ok(serde_json::json!({
"location": location,
"temperature": "72°F",
"condition": "Sunny"
}))
},
));
let agent = LlmAgentBuilder::new("weather_assistant")
.instruction("Help users check the weather.")
.model(Arc::new(model))
.tool(weather_tool)
.build()?;
Nota: La invocación de herramientas utiliza el modo sin transmisión (non-streaming) para mayor fiabilidad con modelos locales.
Salida de Ejemplo
👤 Usuario: ¡Hola! ¿Qué puedes hacer?
🤖 Ollama (llama3.2): ¡Hola! Soy un asistente de IA local ejecutándose en tu
máquina. Puedo ayudar con:
- Responder preguntas
- Escribir y editar texto
- Explicar conceptos
- Ayuda básica con la codificación
Todo completamente privado - ¡nada sale de tu ordenador!
Solución de problemas
"Conexión rechazada"
# Asegúrate de que Ollama esté en ejecución
ollama serve
"Modelo no encontrado"
# Descarga el modelo primero
ollama pull llama3.2
Respuestas lentas
- Utiliza un modelo más pequeño (
llama3.2en lugar dellama3.1:70b) - Cierra otras aplicaciones para liberar RAM
- Considera la aceleración por GPU si está disponible
Verificar modelos disponibles
ollama list
Ejecutando Ejemplos
# Desde la carpeta official_docs_examples
cd official_docs_examples/models/providers_test
cargo run --bin ollama_example
Relacionado
- Model Providers - Proveedores de LLM basados en la nube
- Local Models (mistral.rs) - Inferencia nativa de Rust
Anterior: ← Model Providers | Siguiente: Local Models (mistral.rs) →