Ollama: Interação Básica via CLI
O CLI é o canal direto para conversar com Modelos de Linguagem Grande locais — digite uma pergunta, pressione Enter para obter uma resposta, sem necessidade de código.
ollama run pela primeira vez com um Modelo específico, o Ollama fará o download automático do arquivo do Modelo (2GB-40GB+) do repositório remoto antes de iniciar a Inferência. Execuções subsequentes do mesmo Modelo carregam diretamente dos arquivos locais, sem necessidade de novo download. Recomendamos baixar o Modelo antecipadamente: ollama pull <model>.
📋 Pré-requisitos: Você precisa dominar o seguinte primeiro
1. O Que Você Vai Aprender
- Modos de diálogo single-shot e interativo
- Conversas de múltiplas rodadas e comandos slash
- Configuração de papel do System Prompt
- Integração com pipeline e redirecionamento em scripts Shell
- Cenário prático de geração de SQL da Alice
2. Uma História Real de Uma Fundadora de SaaS
(1) O Problema: Escrever SQL à Mão É Muito Lento
Alice fundou a plataforma de e-commerce GlobalShop e escreve dezenas de consultas SQL complexas diariamente para analisar dados de negócios. Ir de requisitos de produto a instruções SQL leva uma média de 15 minutos por consulta, com erros frequentes nas condições JOIN. Ela precisa de uma ferramenta para converter rapidamente linguagem natural em SQL.
(2) A Solução: CLI Gera SQL em Segundos
Usando o CLI do Ollama com um System Prompt, Alice insere "consultar contagem de usuários ativos do mês passado" e obtém SQL completo em 3 segundos:
ollama run llama3.2 "Write a SQL query to count active users last month"
3. Aprofundamento no Comando ollama run
ℹ️ Nota: Os exemplos neste curso focam em demonstrações de funcionalidade real. Concentre-se na sintaxe dos comandos CLI, significado dos parâmetros e uso do modo interativo.
(1) Dois Modos de Execução
| Modo | Comando | Comportamento |
|---|---|---|
| Modo single-shot | ollama run model "prompt" |
Sai após a saída |
| Modo interativo | ollama run model |
Entra em diálogo contínuo |
sequenceDiagram
participant U as Usuário
participant O as Ollama CLI
participant S as Servidor Ollama
U->>O: ollama run llama3.2
O->>S: Check if model loaded
S-->>O: Model ready
O-->>U: >>> prompt
U->>O: What is machine learning?
O->>S: POST /api/generate
S-->>O: Streaming response
O-->>U: Machine learning is...
▶ Exemplo 1: Modos Single-shot e Interativo
# Single-shot: ask and exit
ollama run llama3.2 "Explain recursion in one sentence"
# Recursion is a function that calls itself to solve smaller instances of the same problem.
# Interactive: stay in conversation
ollama run llama3.2
>>> What is Python?
Python is a high-level programming language...
>>> Can you give an example? # Context preserved
Sure! Here's a simple Python example:
print("Hello, World!")
Saída:
I'm a helpful AI assistant running locally on your machine...
(2) Parâmetros Principais do Run
| Parâmetro | Finalidade | Exemplo |
|---|---|---|
--verbose |
Mostrar tempo e velocidade de Inferência | ollama run --verbose llama3.2 "Hello" |
--system |
Definir System Prompt | ollama run --system "Reply in JSON" llama3.2 "List colors" |
--prompt-template |
Template de prompt personalizado | ollama run --prompt-template "Q: {{.Prompt}}\nA:" llama3.2 "What is AI?" |
▶ Exemplo 2: Comando Run com Parâmetros
# Show performance metrics
ollama run --verbose llama3.2 "Hello"
# ...response...
# total duration: 1.2s
# load duration: 800ms
# prompt eval count: 12 token(s)
# prompt eval speed: 15.0 tokens/s
# eval count: 45 token(s)
# eval speed: 30.0 tokens/s
# Set system prompt inline
ollama run --system "Reply in JSON format only" llama3.2 "List 3 colors"
# {"colors": ["red", "blue", "green"]}
Saída:
I'm a helpful AI assistant running locally on your machine...
4. Diálogo de Múltiplas Rodadas com ollama chat
(1) Diferenças entre chat e run
| Recurso | ollama run |
ollama chat |
|---|---|---|
| Contexto | Mantém a rodada anterior por padrão | Mensagens explícitas de múltiplas rodadas |
| Formato de mensagem | Texto puro | Suporta distinção de papel (user/assistant/system) |
| Mapeamento de API | /api/generate |
/api/chat |
| Caso de uso | Perguntas rápidas | Conversas estruturadas |
(2) Referência de Comandos Slash
| Comando | Função |
|---|---|
/clear |
Limpar contexto da conversa |
/help |
Mostrar todos os comandos |
/set parameter |
Definir parâmetros de Inferência |
/set system |
Definir System Prompt |
/info |
Mostrar informações do Modelo |
/exit ou Ctrl+D |
Sair da conversa |
▶ Exemplo 3: Diálogo de Múltiplas Rodadas e Ajuste de Parâmetros
# Start chat session
ollama chat llama3.2
>>> /set system You are a helpful data analyst
System prompt set.
>>> Analyze this: sales dropped 20% last quarter
The 20% sales drop could indicate several issues...
>>> What visualization would you recommend?
I'd suggest a line chart showing quarterly trends...
>>> /set parameter temperature 0.3
Set parameter 'temperature' to 0.3
>>> Give me the SQL for that analysis
SELECT quarter, revenue FROM sales_data...
>>> /clear
Cleared session context.
>>> /exit
Saída:
# Command executed successfully
5. System Prompt e Fundamentos de Prompt Engineering
(1) O Papel do System Prompt
O System Prompt define o papel, regras e formato de saída do Modelo antes da conversa começar:
graph TB
SP[System Prompt<br/>Papel + Regras + Formato] --> C[Contexto da Conversa]
U[Mensagem do Usuário] --> C
C --> M[Resposta do Modelo]
M --> C
| Papel | Exemplo de System Prompt | Efeito |
|---|---|---|
| Especialista SQL | "You are a SQL expert. Only output valid SQL." | Produz apenas instruções SQL |
| Tradutor | "You are a translator. Translate to French." | Traduz automaticamente |
| Atendimento ao Cliente | "You are a customer service agent. Be polite and concise." | Respostas educadas e concisas |
| Revisor de Código | "You are a code reviewer. Point out bugs and improvements." | Foca em problemas de código |
▶ Exemplo 4: Cenário de Geração de SQL da Alice
# Alice's SQL assistant with System Prompt
ollama run --system "You are a PostgreSQL expert. Given a natural language question, output ONLY the SQL query. No explanations, no markdown, just the SQL." llama3.2
>>> Count users who registered in the last 30 days and made at least one purchase
SELECT COUNT(DISTINCT u.id)
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.created_at >= NOW() - INTERVAL '30 days'
AND o.id IS NOT NULL;
>>> Find the top 5 products by revenue this month
SELECT p.name, SUM(oi.quantity * oi.price) AS revenue
FROM products p
JOIN order_items oi ON p.id = oi.product_id
JOIN orders o ON oi.order_id = o.id
WHERE o.created_at >= DATE_TRUNC('month', CURRENT_DATE)
GROUP BY p.id, p.name
ORDER BY revenue DESC
LIMIT 5;
Saída:
I'm a helpful AI assistant running locally on your machine...
6. Integração com Pipeline e Shell
ollama run lê a entrada do stdin e aguarda a resposta completa antes de enviar para stdout. Isso significa que o modo pipeline é não-streaming, adequado para processamento em lote em vez de interação em tempo real.
(1) Modo Pipeline do CLI
O CLI do Ollama integra-se perfeitamente com pipelines Unix para fluxos de trabalho automatizados:
| Modo | Comando | Caso de Uso |
|---|---|---|
| Entrada stdin | echo "prompt" | ollama run model |
Invocação via script |
| Redirecionamento de saída | ollama run model "prompt" > output.txt |
Salvar resultados |
| Pipeline encadeado | cat data.txt | ollama run model | jq . |
Pós-processamento |
▶ Exemplo 5: Integração com Script Shell
# Batch translate product descriptions
echo "Translate to French: Premium wireless headphones" | ollama run llama3.2
# Generate commit messages from git diff
git diff --staged | ollama run llama3.2 "Write a concise git commit message for these changes"
# Summarize a log file
cat /var/log/app.log | tail -100 | ollama run llama3.2 "Summarize the key errors in this log"
Saída:
I'm a helpful AI assistant running locally on your machine...
7. Exemplo Abrangente: Script de Assistente SQL da Alice
LIMIT e EXPLAIN antes de executar.
#!/bin/bash
# ============================================
# Comprehensive: Alice's SQL Assistant
# Natural language to SQL with context awareness
# ============================================
MODEL="llama3.2"
SYSTEM="You are a PostgreSQL expert. Output ONLY valid SQL. No explanations, no markdown fences."
# Interactive mode with preset system prompt
sql_chat() {
echo "SQL Assistant ready. Type your query in natural language (or 'exit'):"
ollama run --system "$SYSTEM" "$MODEL"
}
# Single-shot: pipe question, get SQL
sql_ask() {
local question="$1"
echo "$question" | ollama run --system "$SYSTEM" "$MODEL"
}
# Batch mode: process questions from file
sql_batch() {
local input_file="$1"
local output_file="sql_output_$(date +%Y%m%d_%H%M%S).sql"
while IFS= read -r question; do
echo "-- Question: $question" >> "$output_file"
sql_ask "$question" >> "$output_file"
echo "" >> "$output_file"
done < "$input_file"
echo "Batch complete: $output_file"
}
# Main menu
case "${1:-interactive}" in
ask) sql_ask "$2" ;;
batch) sql_batch "$2" ;;
*) sql_chat ;;
esac
-- Question: Count users registered last month
SELECT COUNT(*) FROM users
WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND created_at < DATE_TRUNC('month', CURRENT_DATE);
-- Question: Top 10 products by sales
SELECT p.name, SUM(oi.quantity) AS total_sold
FROM products p
JOIN order_items oi ON p.id = oi.product_id
GROUP BY p.id, p.name
ORDER BY total_sold DESC
LIMIT 10;
❓ Perguntas Frequentes
P: Devo usar ollama run ou ollama chat? R: Use
ollama runpara perguntas rápidas de uso único; useollama chatpara conversas contínuas com contexto. Ambos funcionam para desenvolvimento diário —runé mais leve,chatsuporta distinção de papel.
P: Conversas no CLI podem salvar histórico? R: O contexto é preservado dentro de uma sessão interativa, mas limpo ao sair. Para persistência, use redirecionamento de pipeline para um arquivo ou gerencie o histórico de conversas via REST API.
P: Como posso tornar a saída mais consistente e estável? R: Defina uma temperatura baixa (0.1-0.3) para saída mais determinística. No CLI, use
/set parameter temperature 0.2para ajustar. Temperatura mais alta (0.7-1.0) produz saída mais aleatória e criativa.
P: Por que não há saída streaming no modo pipeline? R: O modo pipeline (entrada stdin) é não-streaming por padrão, aguardando a resposta completa antes de enviar. Adicionar
--verbosemostra o processo de Inferência, mas a saída ainda é o resultado completo.
P: Um System Prompt longo afeta o desempenho? R: Sim. O System Prompt conta para a janela de contexto (padrão 2048 tokens); um excessivamente longo reduz o espaço disponível para conversa. Recomendamos manter abaixo de 200 tokens.
P: Como fazer perguntas em outros idiomas no CLI? R: Basta digitar no seu idioma diretamente. Modelos como llama3.2 e qwen2 suportam múltiplos idiomas. Para a melhor experiência em chinês, recomendamos
ollama run qwen2.
📖 Resumo
ollama runsuporta tanto modo single-shot quanto interativo — o comando mais usadoollama chatfornece diálogo estruturado de múltiplas rodadas com distinção de papel e comandos slash- System Prompt define o papel e as regras do Modelo, controlando o formato de saída
- O CLI integra-se com pipelines Unix para fluxos de trabalho de IA via script
- O parâmetro temperature controla a aleatoriedade da saída; valores mais baixos são mais estáveis
- Alice reduziu o tempo de escrita de SQL de 15 minutos para 3 segundos usando CLI + System Prompt
📝 Exercícios
- Básico (Dificuldade ⭐): Use
ollama runpara um diálogo interativo de pelo menos 3 rodadas, experimentando os comandos/set systeme/clear. - Intermediário (Dificuldade ⭐⭐): Crie um "assistente de revisão de código" com um System Prompt, envie um trecho de código para revisão e observe como a configuração de papel afeta a saída.
- Avançado (Dificuldade ⭐⭐⭐): Escreva um script Shell que leia uma lista de requisitos de um arquivo, gere SQL em lote e envie para um arquivo, incluindo tratamento de erros e mecanismos de timeout.