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
- ollama.com/download로 이동하세요.
- 설치 프로그램을 다운로드하고 실행하세요.
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",
},
});