Запуск модели из Ollama с конфигурационным файлом JSON

Полноценный пример создания запроса из командной строки и полным набором параметров с подключением внешнего файла настроек JSON

Командная строка с передачей JSON файла

Создаем конфигурационный файл request_config.json:

{
  "model": "qwen3:4b",
  "prompt": "Объясни концепцию искусственного интеллекта",
  "stream": false,
  "format": "markdown",
  "options": {
    "temperature": 0.7,
    "top_p": 0.9,
    "top_k": 40,
    "num_predict": 300,
    "stop": ["\n", "##"],
    "repeat_penalty": 1.1,
    "presence_penalty": 0.0,
    "frequency_penalty": 0.0,
    "seed": 424242,
    "mirostat": 2,
    "mirostat_tau": 5.0,
    "mirostat_eta": 0.1,
    "num_ctx": 2048,
    "num_thread": 8
  },
  "template": "Ответь как эксперт по AI: {{ .Prompt }}\n\n"
}

Скрипт для обработки JSON конфига:

#!/bin/bash

process_ollama_config() {
    local config_file="$1"
    
    if [ ! -f "$config_file" ]; then
        echo "Config file $config_file not found!"
        return 1
    fi
    
    # Извлекаем параметры из JSON
    local model=$(jq -r '.model' "$config_file")
    local prompt=$(jq -r '.prompt' "$config_file")
    local temperature=$(jq -r '.options.temperature' "$config_file")
    local top_p=$(jq -r '.options.top_p' "$config_file")
    local top_k=$(jq -r '.options.top_k' "$config_file")
    local num_predict=$(jq -r '.options.num_predict' "$config_file")
    local seed=$(jq -r '.options.seed' "$config_file")
    local repeat_penalty=$(jq -r '.options.repeat_penalty' "$config_file")
    
    # Строим команду ollama run
    local command="ollama run '$model' --temperature $temperature --top-p $top_p --top-k $top_k --num-predict $num_predict --seed $seed --repeat-penalty $repeat_penalty"
    
    # Добавляем stop слова если они есть
    local stop_words=$(jq -r '.options.stop[]?' "$config_file" 2>/dev/null)
    if [ -n "$stop_words" ]; then
        while IFS= read -r word; do
            command+=" --stop \"$word\""
        done <<< "$stop_words"
    fi
    
    # Добавляем промпт
    command+=" \"$prompt\""
    
    echo "Выполняем команду: $command"
    eval "$command"
}

# Использование
process_ollama_config "request_config.json"

Альтернативный вариант с прямым использованием curl:

#!/bin/bash

# Прямое использование JSON конфига с curl
curl -s http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d "$(cat request_config.json)" \
  | jq -r '.response'