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?

BeneficioDescripción
🆓 GratisSin costes de API, nunca
🔒 PrivadoLos datos permanecen en su máquina
📴 Sin conexiónFunciona sin internet
🎛️ ControlElija cualquier modelo, personalice la configuración
RápidoSin 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

ModeloTamañoRAM NecesariaMejor Para
llama3.23B4GBRápido, propósito general
llama3.2:7b7B8GBMejor calidad
qwen2.5:7b7B8GBMejor para invocación de herramientas
mistral7B8GBCódigo y razonamiento
codellama7B8GBGeneración de código
gemma29B10GBRendimiento equilibrado
llama3.1:70b70B48GBMáxima calidad

Cómo Elegir un Modelo

  • ¿RAM limitada (8GB)?llama3.2 (3B)
  • ¿Necesita invocación de herramientas?qwen2.5:7b
  • ¿Escribiendo código?codellama o mistral
  • ¿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.2 en lugar de llama3.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


Anterior: ← Model Providers | Siguiente: Local Models (mistral.rs) →