Ollama

Локальный перевод ИИ с помощью Ollama и компилятора Lingo.dev

Что такое 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

Шаг 3. Загрузите модель

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",
  },
});