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