Ollama

OllamaとLingo.devコンパイラーによるローカルAI翻訳

Ollamaとは?

Ollamaを使用すると、大規模言語モデルをローカルマシンで実行できます。完全なプライバシー、APIコスト不要、オフラインでの動作が可能です。Llama、Mistral、Gemma、Qwenなどのモデルから選択できます。OllamaはLingo.dev Compilerと連携し、ローカルモデルを使用してアプリケーションコンテンツを翻訳することができます。

始め方

ステップ1. Ollamaのインストール

macOS

brew install ollama

Linux

curl -fsSL https://ollama.com/install.sh | sh

Windows

  1. ollama.com/downloadにアクセスします。
  2. インストーラーをダウンロードして実行します。

ステップ2. Ollamaの起動

Ollamaがすでに実行されていない場合は、次のコマンドで起動します:

ollama serve

ステップ2. モデルのダウンロード

ollama pull llama3.1

Ollamaの使用方法

Ollamaを有効にするには、コンパイラオプションでmodelsプロパティを設定します:

import react from "@vitejs/plugin-react";
import lingoCompiler from "lingo.dev/compiler";
import { type UserConfig } from "vite";

// https://vite.dev/config/
const viteConfig: UserConfig = {
  plugins: [react()],
};

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja"],
  rsc: false,
  useDirective: false,
  debug: false,
  models: {
    "*:*": "ollama:llama3.1",
  },
});

export default withLingo(viteConfig);

このプロパティは以下のようなオブジェクトを受け取ります:

  • キーはソースロケールとターゲットロケールのペアで、*は任意のロケールを表します
  • 値はモデル識別子(例:ollama:llama3.1)です

Ollamaを使用して以下の翻訳が可能です:

  • すべてのロケール間
  • 特定のソースロケールから
  • 特定のターゲットロケールへ
  • 特定のソースロケールと特定のターゲットロケール間

すべてのロケールの翻訳

すべての翻訳ペアに同じOllamaモデルを適用するには、ワイルドカードパターン *:* を使用します:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // すべての翻訳ペアにLlama 3.1を使用
    "*:*": "ollama:llama3.1",
  },
});

特定のソースロケールからの翻訳

特定のソースロケールとワイルドカードターゲットを使用して、そのソースからのすべての翻訳にモデルを適用します:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // 英語からのすべての翻訳にLlama 3.1 70Bを使用
    "en:*": "ollama:llama3.1:70b",
    // スペイン語から任意の言語への翻訳にMixtralを使用
    "es:*": "ollama:mixtral",
    // その他のソース言語のフォールバック
    "*:*": "ollama:gemma2",
  },
});

特定のターゲットロケールへの翻訳

ワイルドカードソースと特定のターゲットロケールを使用して、そのターゲットへのすべての翻訳にモデルを適用します:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // 日本語への翻訳に特化したモデルを使用
    "*:ja": "ollama:qwen2",
    // 中国語への翻訳にMixtralを使用
    "*:zh": "ollama:mixtral",
    // ドイツ語への翻訳にMistralを使用
    "*:de": "ollama:mistral",
    // その他のターゲット言語のデフォルト
    "*:*": "ollama:llama3.1",
  },
});

特定のロケール間の翻訳

特定の言語の組み合わせを処理するモデルをきめ細かく制御するために、正確なソースターゲットペアを定義します:

const withLingo = lingoCompiler.vite({
  sourceRoot: "src",
  lingoDir: "lingo",
  sourceLocale: "en",
  targetLocales: ["es", "fr", "de", "ja", "pt", "zh"],
  models: {
    // 最適なモデルを持つ特定のペア
    "en:es": "ollama:gemma2", // 英語からスペイン語
    "en:ja": "ollama:qwen2", // 英語から日本語
    "en:zh": "ollama:qwen2", // 英語から中国語
    "es:en": "ollama:llama3.1", // スペイン語から英語
    "fr:en": "ollama:mistral", // フランス語から英語
    "de:en": "ollama:phi3", // ドイツ語から英語

    // 未指定のペアのフォールバック
    "*:*": "ollama:llama3.1",
  },
});