Ollama (Modelos Locais)
Execute LLMs localmente com total privacidade - sem chaves de API, sem internet, sem custos.
Visão Geral
┌─────────────────────────────────────────────────────────────────────┐
│ Ollama Local Setup │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ Your Machine │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ ADK-Rust │ ───▶ │ Ollama │ │ │
│ │ │ Agent │ │ Server │ │ │
│ │ └──────────────┘ └──────┬───────┘ │ │
│ │ │ │ │
│ │ ┌──────▼───────┐ │ │
│ │ │ Local LLM │ │ │
│ │ │ (llama3.2) │ │ │
│ │ └──────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 🔒 100% Private - Data never leaves your machine │
│ │
└─────────────────────────────────────────────────────────────────────┘
Por que Ollama?
| Benefício | Descrição |
|---|---|
| 🆓 Gratuito | Sem custos de API, nunca |
| 🔒 Privado | Os dados permanecem na sua máquina |
| 📴 Offline | Funciona sem internet |
| 🎛️ Controle | Escolha qualquer modelo, personalize as configurações |
| ⚡ Rápido | Sem latência de rede |
Passo 1: Instalar Ollama
macOS
brew install ollama
Linux
curl -fsSL https://ollama.com/install.sh | sh
Windows
Baixe em ollama.com
Passo 2: Iniciar o Servidor
ollama serve
Você deve 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"
Passo 3: Baixar um Modelo
Em um novo terminal:
# Modelo inicial recomendado (3B parâmetros, rápido)
ollama pull llama3.2
# Outros modelos populares
ollama pull qwen2.5:7b # Excelente para chamada de ferramentas
ollama pull mistral # Bom para código
ollama pull codellama # Geração de código
ollama pull gemma2 # Modelo eficiente do Google
Passo 4: Adicionar ao Seu Projeto
[dependencies]
adk-model = { version = "0.2", features = ["ollama"] }
Passo 5: Usar no Código
use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Nenhuma chave de API necessária!
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 o Agent...
Ok(())
}
Exemplo Completo de Funcionamento
use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
// Nenhuma chave de API necessária!
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()?;
// Executar sessão interativa
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"
Opções de Configuração
use adk_model::ollama::{OllamaModel, OllamaConfig};
let config = OllamaConfig::new("llama3.2")
.with_base_url("http://localhost:11434") // URL do servidor personalizado
.with_temperature(0.7) // Criatividade (0.0-1.0)
.with_max_tokens(2048); // Comprimento máximo da resposta
let model = OllamaModel::new(config)?;
Modelos Recomendados
| Modelo | Tamanho | RAM Necessária | Melhor Para |
|---|---|---|---|
llama3.2 | 3B | 4GB | Rápido, propósito geral |
llama3.2:7b | 7B | 8GB | Melhor qualidade |
qwen2.5:7b | 7B | 8GB | Melhor uso de ferramentas |
mistral | 7B | 8GB | Código e raciocínio |
codellama | 7B | 8GB | Geração de código |
gemma2 | 9B | 10GB | Desempenho equilibrado |
llama3.1:70b | 70B | 48GB | Mais alta qualidade |
Escolhendo um Modelo
- RAM limitada (8GB)? →
llama3.2(3B) - Precisa de uso de ferramentas? →
qwen2.5:7b - Escrevendo código? →
codelamaoumistral - Melhor qualidade? →
llama3.1:70b(requer 48GB+ RAM)
Uso de Ferramentas com Ollama
Ollama suporta o uso de funções com modelos compatíveis:
use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use adk_tool::FunctionTool;
use std::sync::Arc;
// qwen2.5 tem excelente suporte para uso de ferramentas
let model = OllamaModel::new(OllamaConfig::new("qwen2.5:7b"))?;
let weather_tool = Arc::new(FunctionTool::new(
"get_weather",
"Obter o tempo para um local",
|_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("Ajude os usuários a verificar o tempo.")
.model(Arc::new(model))
.tool(weather_tool)
.build()?;
Nota: O uso de ferramentas utiliza o modo não-streaming para confiabilidade com modelos locais.
Exemplo de Saída
👤 Usuário: Olá! O que você pode fazer?
🤖 Ollama (llama3.2): Olá! Eu sou um assistente de IA local rodando na sua
máquina. Posso ajudar com:
- Responder perguntas
- Escrever e editar texto
- Explicar conceitos
- Ajuda básica com código
Tudo completamente privado - nada sai do seu computador!
Solução de Problemas
"Conexão recusada"
# Certifique-se de que o Ollama está em execução
ollama serve
"Modelo não encontrado"
# Baixe o modelo primeiro
ollama pull llama3.2
Respostas lentas
- Use um modelo menor (
llama3.2em vez dellama3.1:70b) - Feche outros aplicativos para liberar RAM
- Considere aceleração por GPU, se disponível
Verificar modelos disponíveis
ollama list
Executando Exemplos
# Da pasta official_docs_examples
cd official_docs_examples/models/providers_test
cargo run --bin ollama_example
Relacionado
- Provedores de Modelo - Provedores de LLM baseados em nuvem
- Modelos Locais (mistral.rs) - Inferência nativa em Rust
Anterior: ← Provedores de Modelo | Próximo: Modelos Locais (mistral.rs) →