@llm-translate/cli 1.0.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +51 -0
- package/.env.example +33 -0
- package/.github/workflows/docs-pages.yml +57 -0
- package/.github/workflows/release.yml +49 -0
- package/.translaterc.json +44 -0
- package/CLAUDE.md +243 -0
- package/Dockerfile +55 -0
- package/README.md +371 -0
- package/RFC.md +1595 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +4494 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +1152 -0
- package/dist/index.js +3841 -0
- package/dist/index.js.map +1 -0
- package/docker-compose.yml +56 -0
- package/docs/.vitepress/config.ts +161 -0
- package/docs/api/agent.md +262 -0
- package/docs/api/engine.md +274 -0
- package/docs/api/index.md +171 -0
- package/docs/api/providers.md +304 -0
- package/docs/changelog.md +64 -0
- package/docs/cli/dir.md +243 -0
- package/docs/cli/file.md +213 -0
- package/docs/cli/glossary.md +273 -0
- package/docs/cli/index.md +129 -0
- package/docs/cli/init.md +158 -0
- package/docs/cli/serve.md +211 -0
- package/docs/glossary.json +235 -0
- package/docs/guide/chunking.md +272 -0
- package/docs/guide/configuration.md +139 -0
- package/docs/guide/cost-optimization.md +237 -0
- package/docs/guide/docker.md +371 -0
- package/docs/guide/getting-started.md +150 -0
- package/docs/guide/glossary.md +241 -0
- package/docs/guide/index.md +86 -0
- package/docs/guide/ollama.md +515 -0
- package/docs/guide/prompt-caching.md +221 -0
- package/docs/guide/providers.md +232 -0
- package/docs/guide/quality-control.md +206 -0
- package/docs/guide/vitepress-integration.md +265 -0
- package/docs/index.md +63 -0
- package/docs/ja/api/agent.md +262 -0
- package/docs/ja/api/engine.md +274 -0
- package/docs/ja/api/index.md +171 -0
- package/docs/ja/api/providers.md +304 -0
- package/docs/ja/changelog.md +64 -0
- package/docs/ja/cli/dir.md +243 -0
- package/docs/ja/cli/file.md +213 -0
- package/docs/ja/cli/glossary.md +273 -0
- package/docs/ja/cli/index.md +111 -0
- package/docs/ja/cli/init.md +158 -0
- package/docs/ja/guide/chunking.md +271 -0
- package/docs/ja/guide/configuration.md +139 -0
- package/docs/ja/guide/cost-optimization.md +30 -0
- package/docs/ja/guide/getting-started.md +150 -0
- package/docs/ja/guide/glossary.md +214 -0
- package/docs/ja/guide/index.md +32 -0
- package/docs/ja/guide/ollama.md +410 -0
- package/docs/ja/guide/prompt-caching.md +221 -0
- package/docs/ja/guide/providers.md +232 -0
- package/docs/ja/guide/quality-control.md +137 -0
- package/docs/ja/guide/vitepress-integration.md +265 -0
- package/docs/ja/index.md +58 -0
- package/docs/ko/api/agent.md +262 -0
- package/docs/ko/api/engine.md +274 -0
- package/docs/ko/api/index.md +171 -0
- package/docs/ko/api/providers.md +304 -0
- package/docs/ko/changelog.md +64 -0
- package/docs/ko/cli/dir.md +243 -0
- package/docs/ko/cli/file.md +213 -0
- package/docs/ko/cli/glossary.md +273 -0
- package/docs/ko/cli/index.md +111 -0
- package/docs/ko/cli/init.md +158 -0
- package/docs/ko/guide/chunking.md +271 -0
- package/docs/ko/guide/configuration.md +139 -0
- package/docs/ko/guide/cost-optimization.md +30 -0
- package/docs/ko/guide/getting-started.md +150 -0
- package/docs/ko/guide/glossary.md +214 -0
- package/docs/ko/guide/index.md +32 -0
- package/docs/ko/guide/ollama.md +410 -0
- package/docs/ko/guide/prompt-caching.md +221 -0
- package/docs/ko/guide/providers.md +232 -0
- package/docs/ko/guide/quality-control.md +137 -0
- package/docs/ko/guide/vitepress-integration.md +265 -0
- package/docs/ko/index.md +58 -0
- package/docs/zh/api/agent.md +262 -0
- package/docs/zh/api/engine.md +274 -0
- package/docs/zh/api/index.md +171 -0
- package/docs/zh/api/providers.md +304 -0
- package/docs/zh/changelog.md +64 -0
- package/docs/zh/cli/dir.md +243 -0
- package/docs/zh/cli/file.md +213 -0
- package/docs/zh/cli/glossary.md +273 -0
- package/docs/zh/cli/index.md +111 -0
- package/docs/zh/cli/init.md +158 -0
- package/docs/zh/guide/chunking.md +271 -0
- package/docs/zh/guide/configuration.md +139 -0
- package/docs/zh/guide/cost-optimization.md +30 -0
- package/docs/zh/guide/getting-started.md +150 -0
- package/docs/zh/guide/glossary.md +214 -0
- package/docs/zh/guide/index.md +32 -0
- package/docs/zh/guide/ollama.md +410 -0
- package/docs/zh/guide/prompt-caching.md +221 -0
- package/docs/zh/guide/providers.md +232 -0
- package/docs/zh/guide/quality-control.md +137 -0
- package/docs/zh/guide/vitepress-integration.md +265 -0
- package/docs/zh/index.md +58 -0
- package/package.json +91 -0
- package/release.config.mjs +15 -0
- package/schemas/glossary.schema.json +110 -0
- package/src/cli/commands/dir.ts +469 -0
- package/src/cli/commands/file.ts +291 -0
- package/src/cli/commands/glossary.ts +221 -0
- package/src/cli/commands/init.ts +68 -0
- package/src/cli/commands/serve.ts +60 -0
- package/src/cli/index.ts +64 -0
- package/src/cli/options.ts +59 -0
- package/src/core/agent.ts +1119 -0
- package/src/core/chunker.ts +391 -0
- package/src/core/engine.ts +634 -0
- package/src/errors.ts +188 -0
- package/src/index.ts +147 -0
- package/src/integrations/vitepress.ts +549 -0
- package/src/parsers/markdown.ts +383 -0
- package/src/providers/claude.ts +259 -0
- package/src/providers/interface.ts +109 -0
- package/src/providers/ollama.ts +379 -0
- package/src/providers/openai.ts +308 -0
- package/src/providers/registry.ts +153 -0
- package/src/server/index.ts +152 -0
- package/src/server/middleware/auth.ts +93 -0
- package/src/server/middleware/logger.ts +90 -0
- package/src/server/routes/health.ts +84 -0
- package/src/server/routes/translate.ts +210 -0
- package/src/server/types.ts +138 -0
- package/src/services/cache.ts +899 -0
- package/src/services/config.ts +217 -0
- package/src/services/glossary.ts +247 -0
- package/src/types/analysis.ts +164 -0
- package/src/types/index.ts +265 -0
- package/src/types/modes.ts +121 -0
- package/src/types/mqm.ts +157 -0
- package/src/utils/logger.ts +141 -0
- package/src/utils/tokens.ts +116 -0
- package/tests/fixtures/glossaries/ml-glossary.json +53 -0
- package/tests/fixtures/input/lynq-installation.ko.md +350 -0
- package/tests/fixtures/input/lynq-installation.md +350 -0
- package/tests/fixtures/input/simple.ko.md +27 -0
- package/tests/fixtures/input/simple.md +27 -0
- package/tests/unit/chunker.test.ts +229 -0
- package/tests/unit/glossary.test.ts +146 -0
- package/tests/unit/markdown.test.ts +205 -0
- package/tests/unit/tokens.test.ts +81 -0
- package/tsconfig.json +28 -0
- package/tsup.config.ts +34 -0
- package/vitest.config.ts +16 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
# Ollama를 사용한 로컬 번역
|
|
2
|
+
|
|
3
|
+
::: info 번역
|
|
4
|
+
모든 비영어 문서는 Claude Sonnet 4를 사용하여 자동으로 번역됩니다.
|
|
5
|
+
:::
|
|
6
|
+
|
|
7
|
+
Ollama를 사용하여 llm-translate를 완전히 오프라인으로 실행합니다. API 키가 필요하지 않으며, 민감한 문서에 대한 완전한 프라이버시를 제공합니다.
|
|
8
|
+
|
|
9
|
+
::: warning 모델에 따라 품질이 달라집니다
|
|
10
|
+
Ollama 번역 품질은 **모델 선택에 크게 의존합니다**. 신뢰할 수 있는 번역 결과를 위해서는:
|
|
11
|
+
|
|
12
|
+
- **최소**: 14B+ 매개변수 모델 (예:`qwen2.5:14b `,` llama3.1:8b`)
|
|
13
|
+
- **권장**: 32B+ 모델 (예:`qwen2.5:32b `,` llama3.3:70b`)
|
|
14
|
+
- **권장하지 않음**: 7B 미만 모델은 일관성이 없고 종종 사용할 수 없는 번역을 생성합니다
|
|
15
|
+
|
|
16
|
+
작은 모델(3B, 7B)은 간단한 콘텐츠에서는 작동할 수 있지만 기술 문서에서는 자주 실패하고, 불완전한 출력을 생성하거나, 형식 지침을 무시합니다.
|
|
17
|
+
:::
|
|
18
|
+
|
|
19
|
+
## Ollama를 사용하는 이유는?
|
|
20
|
+
|
|
21
|
+
- **프라이버시**: 문서가 컴퓨터를 떠나지 않습니다
|
|
22
|
+
- **API 비용 없음**: 초기 설정 후 무제한 번역
|
|
23
|
+
- **오프라인**: 인터넷 연결 없이 작동
|
|
24
|
+
- **사용자 정의 가능**: 도메인에 맞게 모델 미세 조정
|
|
25
|
+
|
|
26
|
+
## 시스템 요구사항
|
|
27
|
+
|
|
28
|
+
### 최소 요구사항 (14B 모델)
|
|
29
|
+
|
|
30
|
+
- **RAM**: 16GB (qwen2.5:14b와 같은 14B 모델용)
|
|
31
|
+
- **저장공간**: 20GB 여유 공간
|
|
32
|
+
- **CPU**: 최신 멀티코어 프로세서
|
|
33
|
+
|
|
34
|
+
### 권장 사양
|
|
35
|
+
|
|
36
|
+
- **RAM**: 32GB+ (qwen2.5:32b와 같은 대형 모델용)
|
|
37
|
+
- **GPU**: 16GB+ VRAM을 가진 NVIDIA 또는 Apple Silicon (M2/M3/M4)
|
|
38
|
+
- **저장공간**: 여러 모델을 위한 100GB+
|
|
39
|
+
|
|
40
|
+
### GPU 지원
|
|
41
|
+
|
|
42
|
+
| 플랫폼 | GPU | 지원 |
|
|
43
|
+
|----------|-----|---------|
|
|
44
|
+
| macOS | Apple Silicon (M1/M2/M3/M4) | 우수 |
|
|
45
|
+
| Linux | NVIDIA (CUDA) | 우수 |
|
|
46
|
+
| Linux | AMD (ROCm) | 양호 |
|
|
47
|
+
| Windows | NVIDIA (CUDA) | 양호 |
|
|
48
|
+
| Windows | AMD | 제한적 |
|
|
49
|
+
|
|
50
|
+
## 설치
|
|
51
|
+
|
|
52
|
+
### macOS
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Using Homebrew (recommended)
|
|
56
|
+
brew install ollama
|
|
57
|
+
|
|
58
|
+
# Or download from https://ollama.ai
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Linux
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# One-line installer
|
|
65
|
+
curl -fsSL https://ollama.ai/install.sh | sh
|
|
66
|
+
|
|
67
|
+
# Or using package managers
|
|
68
|
+
# Ubuntu/Debian
|
|
69
|
+
curl -fsSL https://ollama.ai/install.sh | sh
|
|
70
|
+
|
|
71
|
+
# Arch Linux
|
|
72
|
+
yay -S ollama
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Windows
|
|
76
|
+
|
|
77
|
+
[ollama.ai](https://ollama.ai/download/windows)에서 설치 프로그램을 다운로드하세요.
|
|
78
|
+
|
|
79
|
+
### Docker
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# CPU only
|
|
83
|
+
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
|
|
84
|
+
|
|
85
|
+
# With NVIDIA GPU
|
|
86
|
+
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 빠른 시작
|
|
90
|
+
|
|
91
|
+
### 1. Ollama 서버 시작
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Start the server (runs in background)
|
|
95
|
+
ollama serve
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
::: tip
|
|
99
|
+
macOS와 Windows에서는 설치 후 Ollama가 백그라운드 서비스로 자동 시작됩니다.
|
|
100
|
+
:::
|
|
101
|
+
|
|
102
|
+
### 2. 모델 다운로드
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Recommended: Qwen 2.5 14B (best multilingual support for local)
|
|
106
|
+
ollama pull qwen2.5:14b
|
|
107
|
+
|
|
108
|
+
# Alternative: Llama 3.2 (lighter, good for English-centric docs)
|
|
109
|
+
ollama pull llama3.2
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 3. 번역
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# Basic translation with qwen2.5:14b
|
|
116
|
+
llm-translate file README.md -o README.ko.md -s en -t ko --provider ollama --model qwen2.5:14b
|
|
117
|
+
|
|
118
|
+
# With specific model
|
|
119
|
+
llm-translate file doc.md -s en -t ja --provider ollama --model qwen2.5:14b
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
::: tip 번역을 위한 Qwen 2.5
|
|
123
|
+
Qwen 2.5는 한국어, 일본어, 중국어 및 모든 주요 유럽 언어를 포함한 29개 언어를 지원합니다. 14B 버전은 16GB RAM에서 실행되면서 번역 작업에 우수한 품질을 제공합니다.
|
|
124
|
+
:::
|
|
125
|
+
|
|
126
|
+
## 번역을 위한 권장 모델
|
|
127
|
+
|
|
128
|
+
### 최고 품질 (32B+)
|
|
129
|
+
|
|
130
|
+
| 모델 | 크기 | VRAM | 언어 | 품질 |
|
|
131
|
+
|-------|------|------|-----------|---------|
|
|
132
|
+
|`llama3.3`| 70B | 40GB+ | 100+ | 우수 |
|
|
133
|
+
|`qwen2.5:32b`| 32B | 20GB+ | 29 | 우수 |
|
|
134
|
+
|`llama3.1:70b`| 70B | 40GB+ | 8 | 매우 좋음 |
|
|
135
|
+
|
|
136
|
+
### 최고의 언어 지원을 가진 경량 모델
|
|
137
|
+
|
|
138
|
+
제한된 리소스를 가진 시스템의 경우, **Qwen2.5**가 최고의 다국어 지원(29개 언어)을 제공합니다.
|
|
139
|
+
|
|
140
|
+
| 모델 | 매개변수 | RAM | 언어 | 품질 | 최적 용도 |
|
|
141
|
+
|-------|-----------|-----|-----------|---------|----------|
|
|
142
|
+
|`qwen2.5:3b`| 3B | 3GB | 29 | 좋음 | **균형잡힌 (권장)** |
|
|
143
|
+
|`qwen2.5:7b`| 7B | 6GB | 29 | 매우 좋음 | 품질 우선 |
|
|
144
|
+
|`gemma3:4b`| 4B | 4GB | 다수 | 좋음 | 번역 최적화 |
|
|
145
|
+
|`llama3.2`| 3B | 4GB | 8 | 좋음 | 영어 중심 문서 |
|
|
146
|
+
|
|
147
|
+
### 초경량 (< 2GB RAM)
|
|
148
|
+
|
|
149
|
+
| 모델 | 매개변수 | RAM | 언어 | 품질 |
|
|
150
|
+
|-------|-----------|-----|-----------|---------|
|
|
151
|
+
|`qwen2.5:1.5b`| 1.5B | 2GB | 29 | 기본 |
|
|
152
|
+
|`qwen2.5:0.5b`| 0.5B | 1GB | 29 | 기본 |
|
|
153
|
+
|`gemma3:1b`| 1B | 1.5GB | 다수 | 기본 |
|
|
154
|
+
|`llama3.2:1b`| 1B | 2GB | 8 | 기본 |
|
|
155
|
+
|
|
156
|
+
::: tip 다국어를 위한 Qwen
|
|
157
|
+
Qwen2.5는 한국어, 일본어, 중국어 및 모든 주요 유럽 언어를 포함하여 29개 언어를 지원합니다. 영어가 아닌 번역 작업의 경우, Qwen이 종종 최고의 경량 선택입니다.
|
|
158
|
+
:::
|
|
159
|
+
|
|
160
|
+
### 모델 다운로드
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# List available models
|
|
164
|
+
ollama list
|
|
165
|
+
|
|
166
|
+
# Recommended for translation (14B+)
|
|
167
|
+
ollama pull qwen2.5:14b # Best multilingual (29 languages)
|
|
168
|
+
ollama pull qwen2.5:32b # Higher quality, needs 32GB RAM
|
|
169
|
+
ollama pull llama3.1:8b # Good quality, lighter
|
|
170
|
+
|
|
171
|
+
# Lightweight options (may have quality issues)
|
|
172
|
+
ollama pull qwen2.5:7b # Better quality than 3B
|
|
173
|
+
ollama pull llama3.2 # Good for English-centric docs
|
|
174
|
+
|
|
175
|
+
# Other options
|
|
176
|
+
ollama pull mistral-nemo
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## 구성
|
|
180
|
+
|
|
181
|
+
### 환경 변수
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Default server URL (optional, this is the default)
|
|
185
|
+
export OLLAMA_BASE_URL=http://localhost:11434
|
|
186
|
+
|
|
187
|
+
# Custom server location
|
|
188
|
+
export OLLAMA_BASE_URL=http://192.168.1.100:11434
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 구성 파일
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"provider": {
|
|
196
|
+
"name": "ollama",
|
|
197
|
+
"model": "qwen2.5:14b",
|
|
198
|
+
"baseUrl": "http://localhost:11434"
|
|
199
|
+
},
|
|
200
|
+
"translation": {
|
|
201
|
+
"qualityThreshold": 75,
|
|
202
|
+
"maxIterations": 3
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
::: tip
|
|
208
|
+
로컬 모델의 경우, 과도한 개선 반복을 피하기 위해 더 낮은 `qualityThreshold`(75)를 권장합니다. 안정적인 결과를 위해서는 14B+ 모델을 사용하세요.
|
|
209
|
+
:::
|
|
210
|
+
|
|
211
|
+
### 모델별 설정
|
|
212
|
+
|
|
213
|
+
다양한 문서 유형에 대해:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Best quality - qwen2.5:14b (recommended for most use cases)
|
|
217
|
+
llm-translate file api-spec.md -s en -t ko \
|
|
218
|
+
--provider ollama \
|
|
219
|
+
--model qwen2.5:14b \
|
|
220
|
+
--quality 75
|
|
221
|
+
|
|
222
|
+
# Higher quality with 32B model (requires 32GB RAM)
|
|
223
|
+
llm-translate file legal-doc.md -s en -t ko \
|
|
224
|
+
--provider ollama \
|
|
225
|
+
--model qwen2.5:32b \
|
|
226
|
+
--quality 80
|
|
227
|
+
|
|
228
|
+
# README files - lighter model for simple content
|
|
229
|
+
llm-translate file README.md -s en -t ko \
|
|
230
|
+
--provider ollama \
|
|
231
|
+
--model llama3.2 \
|
|
232
|
+
--quality 70
|
|
233
|
+
|
|
234
|
+
# Large documentation sets - balance speed and quality
|
|
235
|
+
llm-translate dir ./docs ./docs-ko -s en -t ko \
|
|
236
|
+
--provider ollama \
|
|
237
|
+
--model qwen2.5:14b \
|
|
238
|
+
--parallel 2
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## 성능 최적화
|
|
242
|
+
|
|
243
|
+
### GPU 가속
|
|
244
|
+
|
|
245
|
+
#### NVIDIA (Linux/Windows)
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
# Check CUDA availability
|
|
249
|
+
nvidia-smi
|
|
250
|
+
|
|
251
|
+
# Ollama automatically uses CUDA if available
|
|
252
|
+
ollama serve
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
#### Apple Silicon (macOS)
|
|
256
|
+
|
|
257
|
+
Metal 가속은 M1/M2/M3/M4 Mac에서 자동으로 적용됩니다.
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
# Check GPU usage
|
|
261
|
+
sudo powermetrics --samplers gpu_power
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### 메모리 관리
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
# Set GPU memory limit (Linux with NVIDIA)
|
|
268
|
+
CUDA_VISIBLE_DEVICES=0 ollama serve
|
|
269
|
+
|
|
270
|
+
# Limit CPU threads
|
|
271
|
+
OLLAMA_NUM_PARALLEL=2 ollama serve
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### 대용량 문서 최적화
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
# Reduce chunk size for memory-constrained systems
|
|
278
|
+
llm-translate file large-doc.md --target ko \
|
|
279
|
+
--provider ollama \
|
|
280
|
+
--chunk-size 512
|
|
281
|
+
|
|
282
|
+
# Disable caching to reduce memory usage
|
|
283
|
+
llm-translate file doc.md --target ko \
|
|
284
|
+
--provider ollama \
|
|
285
|
+
--no-cache
|
|
286
|
+
|
|
287
|
+
# Single-threaded processing for stability
|
|
288
|
+
llm-translate dir ./docs ./docs-ko --target ko \
|
|
289
|
+
--provider ollama \
|
|
290
|
+
--parallel 1
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## 원격 Ollama 서버
|
|
294
|
+
|
|
295
|
+
### 서버 설정
|
|
296
|
+
|
|
297
|
+
서버 머신에서:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# Allow external connections
|
|
301
|
+
OLLAMA_HOST=0.0.0.0 ollama serve
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
::: warning 보안
|
|
305
|
+
신뢰할 수 있는 네트워크에서만 Ollama를 노출하세요. 원격 접근을 위해서는 VPN 또는 SSH 터널 사용을 고려하세요.
|
|
306
|
+
:::
|
|
307
|
+
|
|
308
|
+
### SSH 터널 (권장)
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
# Create secure tunnel to remote server
|
|
312
|
+
ssh -L 11434:localhost:11434 user@remote-server
|
|
313
|
+
|
|
314
|
+
# Then use as normal
|
|
315
|
+
llm-translate file doc.md --target ko --provider ollama
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### 직접 연결
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
# Set remote server URL
|
|
322
|
+
export OLLAMA_BASE_URL=http://remote-server:11434
|
|
323
|
+
|
|
324
|
+
llm-translate file doc.md --target ko --provider ollama
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### 팀 서버용 Docker Compose
|
|
328
|
+
|
|
329
|
+
```yaml
|
|
330
|
+
# docker-compose.yml
|
|
331
|
+
version: '3.8'
|
|
332
|
+
services:
|
|
333
|
+
ollama:
|
|
334
|
+
image: ollama/ollama
|
|
335
|
+
ports:
|
|
336
|
+
- "11434:11434"
|
|
337
|
+
volumes:
|
|
338
|
+
- ollama_data:/root/.ollama
|
|
339
|
+
deploy:
|
|
340
|
+
resources:
|
|
341
|
+
reservations:
|
|
342
|
+
devices:
|
|
343
|
+
- driver: nvidia
|
|
344
|
+
count: 1
|
|
345
|
+
capabilities: [gpu]
|
|
346
|
+
restart: unless-stopped
|
|
347
|
+
|
|
348
|
+
volumes:
|
|
349
|
+
ollama_data:
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## 문제 해결
|
|
353
|
+
|
|
354
|
+
### 연결 오류
|
|
355
|
+
|
|
356
|
+
```
|
|
357
|
+
Error: Cannot connect to Ollama server at http://localhost:11434
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**해결책:**
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
# Check if Ollama is running
|
|
364
|
+
curl http://localhost:11434/api/tags
|
|
365
|
+
|
|
366
|
+
# Start the server
|
|
367
|
+
ollama serve
|
|
368
|
+
|
|
369
|
+
# Check for port conflicts
|
|
370
|
+
lsof -i :11434
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### 모델을 찾을 수 없음
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
Error: Model "llama3.2" not found. Pull it with: ollama pull llama3.2
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
**해결책:**
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
# Download the model
|
|
383
|
+
ollama pull llama3.2
|
|
384
|
+
|
|
385
|
+
# Verify installation
|
|
386
|
+
ollama list
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### 메모리 부족
|
|
390
|
+
|
|
391
|
+
```
|
|
392
|
+
Error: Out of memory. Try a smaller model or reduce chunk size.
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**해결책:**
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
# Use a smaller model
|
|
399
|
+
ollama pull llama3.2:1b
|
|
400
|
+
llm-translate file doc.md --target ko --provider ollama --model llama3.2:1b
|
|
401
|
+
|
|
402
|
+
# Reduce chunk size
|
|
403
|
+
llm-translate file doc.md --target ko --provider ollama --chunk-size 256
|
|
404
|
+
|
|
405
|
+
# Close other applications to free RAM
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### 느린 성능
|
|
409
|
+
|
|
410
|
+
**해결책:**
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# 프롬프트 캐싱
|
|
2
|
+
|
|
3
|
+
::: info 번역
|
|
4
|
+
모든 비영어 문서는 Claude Sonnet 4를 사용하여 자동으로 번역됩니다.
|
|
5
|
+
:::
|
|
6
|
+
|
|
7
|
+
프롬프트 캐싱은 반복되는 콘텐츠에 대해 API 비용을 최대 90%까지 절감하는 비용 최적화 기능입니다.
|
|
8
|
+
|
|
9
|
+
## 작동 원리
|
|
10
|
+
|
|
11
|
+
문서를 번역할 때 프롬프트의 특정 부분은 일정하게 유지됩니다:
|
|
12
|
+
|
|
13
|
+
- **시스템 지침**: 번역 규칙 및 가이드라인
|
|
14
|
+
- **용어집**: 도메인별 전문 용어
|
|
15
|
+
|
|
16
|
+
이러한 내용은 캐시되어 여러 청크에서 재사용되므로 상당한 비용을 절약할 수 있습니다.
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Request 1 (First Chunk):
|
|
20
|
+
┌─────────────────────────────────┐
|
|
21
|
+
│ System Instructions (CACHED) │ ◀─ Written to cache
|
|
22
|
+
├─────────────────────────────────┤
|
|
23
|
+
│ Glossary (CACHED) │ ◀─ Written to cache
|
|
24
|
+
├─────────────────────────────────┤
|
|
25
|
+
│ Source Text (NOT cached) │
|
|
26
|
+
└─────────────────────────────────┘
|
|
27
|
+
|
|
28
|
+
Request 2+ (Subsequent Chunks):
|
|
29
|
+
┌─────────────────────────────────┐
|
|
30
|
+
│ System Instructions (CACHED) │ ◀─ Read from cache (90% off)
|
|
31
|
+
├─────────────────────────────────┤
|
|
32
|
+
│ Glossary (CACHED) │ ◀─ Read from cache (90% off)
|
|
33
|
+
├─────────────────────────────────┤
|
|
34
|
+
│ Source Text (NOT cached) │
|
|
35
|
+
└─────────────────────────────────┘
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 비용 영향
|
|
39
|
+
|
|
40
|
+
### 가격 (Claude)
|
|
41
|
+
|
|
42
|
+
| 토큰 유형 | 비용 배수 |
|
|
43
|
+
|------------|-----------------|
|
|
44
|
+
| 일반 입력 | 1.0x |
|
|
45
|
+
| 캐시 쓰기 | 1.25x (첫 사용) |
|
|
46
|
+
| 캐시 읽기 | 0.1x (이후) |
|
|
47
|
+
| 출력 | 1.0x |
|
|
48
|
+
|
|
49
|
+
### 계산 예시
|
|
50
|
+
|
|
51
|
+
500토큰 용어집이 있는 10청크 문서의 경우:
|
|
52
|
+
|
|
53
|
+
**캐싱 없이:**
|
|
54
|
+
```
|
|
55
|
+
10 chunks × 500 glossary tokens = 5,000 tokens
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**캐싱 사용:**
|
|
59
|
+
```
|
|
60
|
+
First chunk: 500 × 1.25 = 625 tokens (cache write)
|
|
61
|
+
9 chunks: 500 × 0.1 × 9 = 450 tokens (cache read)
|
|
62
|
+
Total: 1,075 tokens (78% savings)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 요구사항
|
|
66
|
+
|
|
67
|
+
### 최소 토큰 임계값
|
|
68
|
+
|
|
69
|
+
프롬프트 캐싱에는 최소 콘텐츠 길이가 필요합니다:
|
|
70
|
+
|
|
71
|
+
| 모델 | 최소 토큰 |
|
|
72
|
+
|-------|---------------|
|
|
73
|
+
| Claude Haiku 4.5 | 4,096 |
|
|
74
|
+
| Claude Haiku 3.5 | 2,048 |
|
|
75
|
+
| Claude Sonnet | 1,024 |
|
|
76
|
+
| Claude Opus | 1,024 |
|
|
77
|
+
|
|
78
|
+
이 임계값 미만의 콘텐츠는 캐시되지 않습니다.
|
|
79
|
+
|
|
80
|
+
### 제공자 지원
|
|
81
|
+
|
|
82
|
+
| 제공자 | 캐싱 지원 |
|
|
83
|
+
|----------|-----------------|
|
|
84
|
+
| Claude | ✅ 완전 지원 |
|
|
85
|
+
| OpenAI | ✅ 자동 |
|
|
86
|
+
| Ollama | ❌ 사용 불가 |
|
|
87
|
+
|
|
88
|
+
## 구성
|
|
89
|
+
|
|
90
|
+
Claude의 경우 캐싱이 기본적으로 활성화됩니다. 비활성화하려면:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
llm-translate file doc.md -o doc.ko.md --target ko --no-cache
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
또는 설정에서:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"provider": {
|
|
101
|
+
"name": "claude",
|
|
102
|
+
"caching": false
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 캐시 성능 모니터링
|
|
108
|
+
|
|
109
|
+
### CLI 출력
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
✓ Translation complete
|
|
113
|
+
Cache: 890 read / 234 written (78% hit rate)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 상세 모드
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
llm-translate file doc.md -o doc.ko.md --target ko --verbose
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
청크별 캐시 통계를 표시합니다:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
[Chunk 1/10] Cache: 0 read / 890 written
|
|
126
|
+
[Chunk 2/10] Cache: 890 read / 0 written
|
|
127
|
+
[Chunk 3/10] Cache: 890 read / 0 written
|
|
128
|
+
...
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 프로그래밍 방식 접근
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
const result = await engine.translateFile({
|
|
135
|
+
input: 'doc.md',
|
|
136
|
+
output: 'doc.ko.md',
|
|
137
|
+
targetLang: 'ko',
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
console.log(result.metadata.tokensUsed);
|
|
141
|
+
// {
|
|
142
|
+
// input: 5000,
|
|
143
|
+
// output: 6000,
|
|
144
|
+
// cacheRead: 8000,
|
|
145
|
+
// cacheWrite: 1000
|
|
146
|
+
// }
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 캐시 효율성 극대화
|
|
150
|
+
|
|
151
|
+
### 1. 일관된 용어집 사용
|
|
152
|
+
|
|
153
|
+
동일한 용어집 콘텐츠 = 동일한 캐시 키
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Good: Same glossary for all files
|
|
157
|
+
llm-translate dir ./docs ./docs-ko --target ko --glossary glossary.json
|
|
158
|
+
|
|
159
|
+
# Less efficient: Different glossary per file
|
|
160
|
+
llm-translate file a.md --glossary a-glossary.json
|
|
161
|
+
llm-translate file b.md --glossary b-glossary.json
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### 2. 관련 파일 일괄 처리
|
|
165
|
+
|
|
166
|
+
캐시는 약 5분간 지속됩니다. 파일을 함께 처리하세요:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# Efficient: Sequential processing shares cache
|
|
170
|
+
llm-translate dir ./docs ./docs-ko --target ko
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 3. 크기별로 파일 정렬
|
|
174
|
+
|
|
175
|
+
캐시를 워밍하기 위해 큰 파일부터 시작하세요:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# Cache is populated by first file, reused by rest
|
|
179
|
+
llm-translate file large-doc.md ...
|
|
180
|
+
llm-translate file small-doc.md ...
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 4. 전략적으로 큰 용어집 사용
|
|
184
|
+
|
|
185
|
+
큰 용어집일수록 캐싱의 이점이 더 큽니다:
|
|
186
|
+
|
|
187
|
+
| 용어집 크기 | 캐시 절약 |
|
|
188
|
+
|---------------|---------------|
|
|
189
|
+
| 100 토큰 | ~70% |
|
|
190
|
+
| 500 토큰 | ~78% |
|
|
191
|
+
| 1000+ 토큰 | ~80%+ |
|
|
192
|
+
|
|
193
|
+
## 문제 해결
|
|
194
|
+
|
|
195
|
+
### 캐시가 작동하지 않음
|
|
196
|
+
|
|
197
|
+
**증상:**`cacheRead` 토큰이 보고되지 않음
|
|
198
|
+
|
|
199
|
+
**원인:**
|
|
200
|
+
1. 최소 임계값 미만의 콘텐츠
|
|
201
|
+
2. 요청 간 콘텐츠 변경
|
|
202
|
+
3. 캐시 TTL 만료 (5분)
|
|
203
|
+
|
|
204
|
+
**해결책:**
|
|
205
|
+
- 용어집 + 시스템 프롬프트가 최소 토큰을 초과하는지 확인
|
|
206
|
+
- 파일을 연속적으로 빠르게 처리
|
|
207
|
+
- 디버깅을 위해 상세 모드 사용
|
|
208
|
+
|
|
209
|
+
### 높은 캐시 쓰기 비용
|
|
210
|
+
|
|
211
|
+
**증상:** 예상보다 많은 `cacheWrite`
|
|
212
|
+
|
|
213
|
+
**원인:**
|
|
214
|
+
1. 많은 고유 용어집
|
|
215
|
+
2. 파일 처리 간격이 너무 긺
|
|
216
|
+
3. 실행 간 캐시 무효화
|
|
217
|
+
|
|
218
|
+
**해결책:**
|
|
219
|
+
- 용어집 통합
|
|
220
|
+
- 일괄 처리 사용
|
|
221
|
+
- 5분 창 내에서 처리
|