Ollama: Modelos Personalizados com Modelfile

Um Modelfile é a forma que molda um papel de IA — uma configuração define personalidade, habilidades e limites comportamentais.

💡 Dica: A diretiva TEMPLATE do Modelfile usa sintaxe de template Go. Variáveis-chave incluem {{ .System }} (conteúdo do System Prompt), {{ .Prompt }} (entrada do usuário, modo generate), e {{ .Messages }} (lista de mensagens, modo chat). Entender essas variáveis é crucial para personalizar formatos de diálogo — por exemplo, você pode usar um template personalizado para fazer o Modelo produzir apenas JSON sem blocos Markdown, ou implementar diálogo no formato ChatML.

📋 Pré-requisitos: Você precisa dominar o seguinte primeiro

1. O Que Você Vai Aprender


2. Uma História Real de Uma Fundadora de SaaS

⚠️ Aviso: Modelfiles baixados de fontes não oficiais podem conter diretivas SYSTEM maliciosas (por exemplo, "encaminhar entrada do usuário para um servidor externo"). Sempre revise o conteúdo do Modelfile antes de criar um Modelo, especialmente as diretivas SYSTEM e TEMPLATE.

(1) O Problema: Passar System Prompt Toda Vez

Alice percebeu que cada chamada de API exigia um System Prompt longo — fácil de omitir e difícil de manter. Diferentes cenários de atendimento (reembolso, envio, consultas de produto) precisavam de diferentes configurações de papel, e o gerenciamento manual era caótico.

(2) A Solução: Modelfile Resolve de Uma Vez por Todas

Com um Modelfile, o papel, parâmetros e template são incorporados ao Modelo — crie uma vez, reutilize muitas vezes:

BASH
# Create SupportBot model from Modelfile
ollama create supportbot -f Modelfile

# Use it directly, no need for system prompt
ollama run supportbot "I want a refund"

3. Sintaxe Completa do Modelfile

💡 Dica: A diretiva TEMPLATE do Modelfile suporta sintaxe de template Go, com variáveis como {{ .System }}, {{ .Prompt }}, e {{ .Response }}. Entender essas variáveis é crucial para personalizar formatos de diálogo — por exemplo, fazendo o Modelo produzir apenas JSON sem blocos Markdown.

ℹ️ Info: A diretiva MESSAGE permite pre-definir exemplos de conversa (few-shot) no Modelfile, usando o formato MESSAGE user: ... / MESSAGE assistant: .... Isso "demonstra" seu estilo de saída desejado de forma mais eficaz que um System Prompt, especialmente para controle de formato (por exemplo, saída apenas SQL, saída apenas JSON).

(1) Tabela de Referência de Diretivas

Diretiva Obrigatória Finalidade Exemplo
FROM Modelo base FROM llama3.2
SYSTEM System Prompt SYSTEM You are a helpful assistant
PARAMETER Parâmetros de Inferência PARAMETER temperature 0.7
TEMPLATE Template de diálogo TEMPLATE """{{ .Prompt }}"""
LICENSE Licença LICENSE "Apache 2.0"
MESSAGE Mensagens pré-definidas MESSAGE user Hello
100%
flowchart TD
    A[Modelfile] --> B[FROM: Modelo Base]
    B --> C[SYSTEM: Definição de Papel]
    C --> D[PARAMETER: Config de Inferência]
    D --> E[TEMPLATE: Formato do Prompt]
    E --> F[ollama create]
    F --> G[Modelo Personalizado Pronto]

(2) Aprofundamento na Diretiva FROM

ℹ️ Nota: A diretiva FROM especifica o Modelo base e é a única diretiva obrigatória em um Modelfile. Suporta três fontes: nome de Modelo oficial (por exemplo, FROM llama3.2, herdando da Ollama Library), caminho de arquivo GGUF local (por exemplo, FROM ./model.gguf, importando um Modelo baixado do HuggingFace), ou um Modelo personalizado já criado (por exemplo, FROM my-bot, implementando herança em cadeia de Modelos). Herdar de um Modelo oficial é a abordagem mais comum.

Fonte FROM Sintaxe Descrição
Modelo oficial FROM llama3.2 Herdar da Ollama Library
GGUF local FROM ./model.gguf Importar de arquivo local
Modelo personalizado FROM my-custom-model Herdar de Modelo criado

▶ Exemplo 1: Modelfile Mínimo

TEXT
FROM llama3.2
SYSTEM You are a helpful assistant that only speaks in haikus.
PARAMETER temperature 0.7
BASH
# Build the model
ollama create haiku-bot -f Modelfile

# Test it
ollama run haiku-bot "What is debugging?"
# Finding the bug's lair,
# Line by line with patient care,
# Code runs free at last.

4. Configuração de Papel SYSTEM

(1) Padrões de Design de Papel

Padrão Estrutura Caso de Uso
Papel + Regras Papel + regras comportamentais + formato de saída Atendimento, tradução, código
Few-shot Papel + diálogo de exemplo Saída formatada
Restrições + Recusa Papel + limites de capacidade + estratégia de recusa Cenários sensíveis à segurança

(2) Melhores Práticas de Configuração de Papel

Princípio Descrição Antipadrão
Defina o papel claramente Dizer "quem você é" "Por favor me ajude a traduzir"
Especifique o formato Descrever formato de saída Nenhum formato especificado
Defina limites Dizer o que não pode fazer Sem limites definidos
Controle o comprimento Solicitar conciso/detalhado Sem controle de comprimento
Use instruções positivas Substituir negativas por diretivas positivas "Não diga coisas desnecessárias"

▶ Exemplo 2: Modelfiles com Diferentes Papéis

TEXT
# SQL Expert Modelfile
FROM codellama:7b
SYSTEM You are a PostgreSQL expert. Output ONLY valid SQL. No explanations. No markdown.
PARAMETER temperature 0.1
PARAMETER repeat_penalty 1.2
TEXT
# Translator Modelfile
FROM qwen2.5:7b
SYSTEM You are a professional translator. Translate the given text to the target language. Preserve formatting. Output only the translation, nothing else.
PARAMETER temperature 0.3
TEXT
# Code Reviewer Modelfile
FROM codellama:7b
SYSTEM You are a senior code reviewer. Analyze the given code for: 1) Bugs, 2) Performance issues, 3) Style violations. Rate severity as HIGH/MEDIUM/LOW. Suggest fixes.
PARAMETER temperature 0.2
PARAMETER num_ctx 8192

5. Ajuste de PARAMETER

(1) Tabela de Configuração de Parâmetros Comuns

Parâmetro Tipo Faixa Recomendada Descrição
temperature float 0.1-1.0 Controle de aleatoriedade
top_p float 0.8-0.95 Limiar de amostragem por núcleo
top_k int 20-50 Contagem de tokens candidatos
num_ctx int 2048-32768 Janela de contexto
num_predict int 128-2048 Contagem máxima de tokens gerados
repeat_penalty float 1.1-1.5 Penalização por repetição
stop string Personalizado Marcador de parada de geração

(2) Configuração de Parâmetros por Cenário

Cenário temperature num_ctx repeat_penalty Observações
Geração SQL 0.1 2048 1.2 Alto determinismo
Diálogo de atendimento 0.4 4096 1.1 Variação moderada
Complemento de código 0.2 8192 1.2 Preciso + contexto longo
Escrita criativa 0.8 4096 1.0 Alta aleatoriedade
R&A RAG 0.3 8192 1.1 Factualidade em primeiro

▶ Exemplo 3: Modelfile com Parâmetros Ajustados

TEXT
# SupportBot with optimized parameters
FROM qwen2.5:7b
SYSTEM You are SupportBot, an e-commerce customer service agent. Be polite, concise (2-3 sentences max), and helpful. If the question is outside your knowledge, say: "Let me connect you with a human agent."
PARAMETER temperature 0.4
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
PARAMETER num_predict 256
PARAMETER repeat_penalty 1.1
PARAMETER stop "\n\nCustomer:"

6. Variáveis TEMPLATE

(1) Referência de Variáveis de Template

Variável Significado Caso de Uso
.System Conteúdo do System Prompt Colocar no início do template
.Prompt Entrada do usuário (generate) Modo generate
.Messages Lista de mensagens (chat) Modo chat
.Role Papel da mensagem Distinguir user/assistant
.Content Conteúdo da mensagem Extrair texto

(2) Exemplos de Template Personalizado

Tipo de Template Finalidade Descrição
Template padrão Diálogo geral Ollama seleciona automaticamente
Template de instrução Seguimento estrito de instruções Formato ### Instruction / ### Response
Template ChatML Compatível com OpenAI <

▶ Exemplo 4: Modelfile com Template Personalizado

TEXT
# Custom chat template for SupportBot
FROM qwen2.5:7b
SYSTEM You are SupportBot for e-commerce customer service.
PARAMETER temperature 0.4

TEMPLATE """{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{- end }}
{{- range .Messages }}
<|im_start|>{{ .Role }}
{{ .Content }}<|im_end|>
{{- end }}
<|im_start|>assistant
"""

▶ Exemplo 5: Criar Modelo de Arquivo GGUF

TEXT
# Import a custom GGUF model from HuggingFace
FROM ./my-model-q4_K_M.gguf
SYSTEM You are a specialized medical QA assistant.
PARAMETER temperature 0.3
PARAMETER num_ctx 4096
LICENSE "Apache 2.0"
BASH
# Create from the Modelfile
ollama create medical-bot -f Modelfile

# Verify
ollama show medical-bot

# Run
ollama run medical-bot "What are common cold symptoms?"

7. Exemplo Abrangente: Modelfile Dedicado do SupportBot da Alice

TEXT
# ============================================
# Comprehensive: SupportBot Custom Modelfile
# Multi-language e-commerce customer service
# ============================================

FROM qwen2.5:7b

# Role definition with clear boundaries
SYSTEM """You are SupportBot, an AI customer service agent for GlobalShop e-commerce.

Your capabilities:
- Answer questions about orders, returns, shipping, and products
- Respond in the customer's language (auto-detect)
- Be polite, concise, and empathetic

Your rules:
- Keep responses under 3 sentences
- For order-specific queries, ask for the order number
- If you cannot answer, say: "Let me connect you with a human agent."
- Never share internal pricing or competitor information
- Never process refunds directly; guide the customer to the refund portal

Common policies:
- Returns: 30 days, original condition, free return shipping
- Shipping: Free for orders over $50, 3-5 business days
- International: Available to 50+ countries, duties may apply
"""

# Inference parameters
PARAMETER temperature 0.4
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
PARAMETER num_predict 256
PARAMETER repeat_penalty 1.1

# Stop generation at customer input marker
PARAMETER stop "Customer:"
PARAMETER stop "<|im_end|>"

# Chat template (ChatML format)
TEMPLATE """{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{- end }}
{{- range .Messages }}
<|im_start|>{{ .Role }}
{{ .Content }}<|im_end|>
{{- end }}
<|im_start|>assistant
"""

# Pre-seed with example exchanges
MESSAGE user What is your return policy?
MESSAGE assistant Our return policy allows returns within 30 days of delivery in original condition. Free return shipping is provided. Would you like to start a return?

MESSAGE user Do you ship internationally?
MESSAGE assistant Yes, we ship to over 50 countries. Shipping times vary by destination, typically 7-14 business days. Import duties may apply depending on your location.
BASH
# Build SupportBot model
ollama create supportbot -f ./Modelfile

# Test different scenarios
ollama run supportbot "I want to return order #12345"
ollama run supportbot "How much does shipping cost?"  # English
ollama run supportbot "What is the return policy?"     # English

❓ Perguntas Frequentes

P: Qual é a relação entre um Modelo criado por Modelfile e o Modelo original? R: Um Modelo criado por Modelfile é uma "view" do Modelo original — compartilha arquivos de peso subjacentes e apenas acrescenta configurações de System Prompt e parâmetros. Não consome espaço adicional em disco.

P: Preciso recriar o Modelo após modificar o Modelfile? R: Sim. Após modificar o Modelfile, você precisa executar ollama create novamente. Conversas existentes não são afetadas; novas conversas usam a nova configuração.

P: O que acontece quando PARAMETER conflita com opções de chamada de API? R: Opções de chamada de API sobrescrevem valores de PARAMETER do Modelfile. Valores do Modelfile são padrões; opções da API são sobrescritas em tempo de execução.

P: O que acontece se não especificar um TEMPLATE? R: O Ollama usa o template padrão do Modelo base. O template padrão é suficiente na maioria dos casos. Templates personalizados são necessários principalmente ao importar Modelos GGUF.

P: Para que servem as mensagens pré-definidas MESSAGE? R: Servem como exemplos few-shot, guiando o Modelo a responder no formato esperado. Complementam o System Prompt mas não contam como rodadas de conversa do usuário.

P: Como depuro o efeito de um Modelfile? R: Teste com --system e --parameter no CLI primeiro, depois finalize no Modelfile uma vez confirmado. ollama show <model> --modelfile exibe o Modelfile completo de um Modelo criado.


📖 Resumo


📝 Exercícios

  1. Básico (Dificuldade ⭐): Crie um Modelfile baseado em llama3.2 com System Prompt definido como "assistente de tradução", construa e teste.
  2. Intermediário (Dificuldade ⭐⭐): Crie um Modelfile completo para o SupportBot da Alice, incluindo SYSTEM + PARAMETER + MESSAGE, e teste diálogos de atendimento em inglês e chinês.
  3. Avançado (Dificuldade ⭐⭐⭐): Desenhe um sistema de Modelfile multi-papel — especialista em reembolso, especialista em logística, especialista em produto — com parâmetros ajustados individualmente, e escreva um script Python que roteia automaticamente perguntas para o Modelo apropriado.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%