Ollama (Modèles Locaux)
Exécutez des LLMs localement en toute confidentialité - pas de clés API, pas d'internet, pas de coûts.
Présentation
┌─────────────────────────────────────────────────────────────────────┐
│ Ollama Local Setup │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ Your Machine │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ ADK-Rust │ ───▶ │ Ollama │ │ │
│ │ │ Agent │ │ Server │ │ │
│ │ └──────────────┘ └──────┬───────┘ │ │
│ │ │ │ │
│ │ ┌──────▼───────┐ │ │
│ │ │ Local LLM │ │ │
│ │ │ (llama3.2) │ │ │
│ │ └──────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 🔒 100% Private - Data never leaves your machine │
│ │
└─────────────────────────────────────────────────────────────────────┘
Pourquoi Ollama ?
| Avantage | Description |
|---|---|
| 🆓 Gratuit | Pas de coûts API, jamais |
| 🔒 Privé | Les données restent sur votre machine |
| 📴 Hors ligne | Fonctionne sans internet |
| 🎛️ Contrôle | Choisissez n'importe quel modèle, personnalisez les réglages |
| ⚡ Rapide | Pas de network latency |
Étape 1 : Installer Ollama
macOS
brew install ollama
Linux
curl -fsSL https://ollama.com/install.sh | sh
Windows
Téléchargez depuis ollama.com
Étape 2 : Démarrer le Serveur
ollama serve
Vous devriez voir :
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"
Étape 3 : Télécharger un Modèle
Dans un nouveau terminal :
# Modèle de démarrage recommandé (3B parameters, rapide)
ollama pull llama3.2
# Autres modèles populaires
ollama pull qwen2.5:7b # Excellent tool calling
ollama pull mistral # Bon pour le code
ollama pull codellama # Génération de code
ollama pull gemma2 # Le modèle efficace de Google
Étape 4 : Ajouter à Votre Projet
[dependencies]
adk-model = { version = "0.2", features = ["ollama"] }
Étape 5 : Utilisation dans le code
use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// No API key needed!
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(())
}
Exemple complet et fonctionnel
use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
// No API key needed!
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()?;
// Run interactive session
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"
Options de configuration
use adk_model::ollama::{OllamaModel, OllamaConfig};
let config = OllamaConfig::new("llama3.2")
.with_base_url("http://localhost:11434") // Custom server URL
.with_temperature(0.7) // Creativity (0.0-1.0)
.with_max_tokens(2048); // Max response length
let model = OllamaModel::new(config)?;
Modèles recommandés
| Modèle | Taille | RAM Nécessaire | Idéal pour |
|---|---|---|---|
llama3.2 | 3B | 4GB | Rapide, usage général |
llama3.2:7b | 7B | 8GB | Meilleure qualité |
qwen2.5:7b | 7B | 8GB | Meilleur appel d'outil |
mistral | 7B | 8GB | Code et raisonnement |
codellama | 7B | 8GB | Génération de code |
gemma2 | 9B | 10GB | Performance équilibrée |
llama3.1:70b | 70B | 48GB | Qualité la plus élevée |
Choisir un modèle
- RAM limitée (8GB) ? →
llama3.2(3B) - Besoin d'appels d'outil ? →
qwen2.5:7b - Écriture de code ? →
codellamaoumistral - Meilleure qualité ? →
llama3.1:70b(nécessite 48GB+ de RAM)
Appel d'outil avec Ollama
Ollama prend en charge l'appel de fonction avec les modèles compatibles :
use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use adk_tool::FunctionTool;
use std::sync::Arc;
// qwen2.5 has excellent tool calling support
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()?;
Note : L'appel d'outil utilise le mode non-streaming pour une meilleure fiabilité avec les modèles locaux.
Exemple de sortie
👤 Utilisateur : Bonjour ! Que pouvez-vous faire ?
🤖 Ollama (llama3.2) : Bonjour ! Je suis un assistant IA local fonctionnant sur votre
machine. Je peux vous aider avec :
- Répondre aux questions
- Écrire et éditer du texte
- Expliquer des concepts
- Aide au codage de base
Tout est entièrement privé - rien ne quitte votre ordinateur !
Dépannage
"Connexion refusée"
# Assurez-vous que Ollama est en cours d'exécution
ollama serve
"Modèle introuvable"
# Téléchargez d'abord le modèle
ollama pull llama3.2
Réponses lentes
- Utilisez un modèle plus petit (
llama3.2au lieu dellama3.1:70b) - Fermez les autres applications pour libérer de la RAM
- Envisagez l'accélération GPU si disponible
Vérifier les modèles disponibles
ollama list
Exécution des exemples
# Depuis le dossier official_docs_examples
cd official_docs_examples/models/providers_test
cargo run --bin ollama_example
Lié
- Fournisseurs de modèles - Fournisseurs de LLM basés sur le cloud
- Modèles locaux (mistral.rs) - Inférence Rust native
Précédent: ← Fournisseurs de modèles | Suivant: Modèles locaux (mistral.rs) →