@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.
Files changed (157) hide show
  1. package/.dockerignore +51 -0
  2. package/.env.example +33 -0
  3. package/.github/workflows/docs-pages.yml +57 -0
  4. package/.github/workflows/release.yml +49 -0
  5. package/.translaterc.json +44 -0
  6. package/CLAUDE.md +243 -0
  7. package/Dockerfile +55 -0
  8. package/README.md +371 -0
  9. package/RFC.md +1595 -0
  10. package/dist/cli/index.d.ts +2 -0
  11. package/dist/cli/index.js +4494 -0
  12. package/dist/cli/index.js.map +1 -0
  13. package/dist/index.d.ts +1152 -0
  14. package/dist/index.js +3841 -0
  15. package/dist/index.js.map +1 -0
  16. package/docker-compose.yml +56 -0
  17. package/docs/.vitepress/config.ts +161 -0
  18. package/docs/api/agent.md +262 -0
  19. package/docs/api/engine.md +274 -0
  20. package/docs/api/index.md +171 -0
  21. package/docs/api/providers.md +304 -0
  22. package/docs/changelog.md +64 -0
  23. package/docs/cli/dir.md +243 -0
  24. package/docs/cli/file.md +213 -0
  25. package/docs/cli/glossary.md +273 -0
  26. package/docs/cli/index.md +129 -0
  27. package/docs/cli/init.md +158 -0
  28. package/docs/cli/serve.md +211 -0
  29. package/docs/glossary.json +235 -0
  30. package/docs/guide/chunking.md +272 -0
  31. package/docs/guide/configuration.md +139 -0
  32. package/docs/guide/cost-optimization.md +237 -0
  33. package/docs/guide/docker.md +371 -0
  34. package/docs/guide/getting-started.md +150 -0
  35. package/docs/guide/glossary.md +241 -0
  36. package/docs/guide/index.md +86 -0
  37. package/docs/guide/ollama.md +515 -0
  38. package/docs/guide/prompt-caching.md +221 -0
  39. package/docs/guide/providers.md +232 -0
  40. package/docs/guide/quality-control.md +206 -0
  41. package/docs/guide/vitepress-integration.md +265 -0
  42. package/docs/index.md +63 -0
  43. package/docs/ja/api/agent.md +262 -0
  44. package/docs/ja/api/engine.md +274 -0
  45. package/docs/ja/api/index.md +171 -0
  46. package/docs/ja/api/providers.md +304 -0
  47. package/docs/ja/changelog.md +64 -0
  48. package/docs/ja/cli/dir.md +243 -0
  49. package/docs/ja/cli/file.md +213 -0
  50. package/docs/ja/cli/glossary.md +273 -0
  51. package/docs/ja/cli/index.md +111 -0
  52. package/docs/ja/cli/init.md +158 -0
  53. package/docs/ja/guide/chunking.md +271 -0
  54. package/docs/ja/guide/configuration.md +139 -0
  55. package/docs/ja/guide/cost-optimization.md +30 -0
  56. package/docs/ja/guide/getting-started.md +150 -0
  57. package/docs/ja/guide/glossary.md +214 -0
  58. package/docs/ja/guide/index.md +32 -0
  59. package/docs/ja/guide/ollama.md +410 -0
  60. package/docs/ja/guide/prompt-caching.md +221 -0
  61. package/docs/ja/guide/providers.md +232 -0
  62. package/docs/ja/guide/quality-control.md +137 -0
  63. package/docs/ja/guide/vitepress-integration.md +265 -0
  64. package/docs/ja/index.md +58 -0
  65. package/docs/ko/api/agent.md +262 -0
  66. package/docs/ko/api/engine.md +274 -0
  67. package/docs/ko/api/index.md +171 -0
  68. package/docs/ko/api/providers.md +304 -0
  69. package/docs/ko/changelog.md +64 -0
  70. package/docs/ko/cli/dir.md +243 -0
  71. package/docs/ko/cli/file.md +213 -0
  72. package/docs/ko/cli/glossary.md +273 -0
  73. package/docs/ko/cli/index.md +111 -0
  74. package/docs/ko/cli/init.md +158 -0
  75. package/docs/ko/guide/chunking.md +271 -0
  76. package/docs/ko/guide/configuration.md +139 -0
  77. package/docs/ko/guide/cost-optimization.md +30 -0
  78. package/docs/ko/guide/getting-started.md +150 -0
  79. package/docs/ko/guide/glossary.md +214 -0
  80. package/docs/ko/guide/index.md +32 -0
  81. package/docs/ko/guide/ollama.md +410 -0
  82. package/docs/ko/guide/prompt-caching.md +221 -0
  83. package/docs/ko/guide/providers.md +232 -0
  84. package/docs/ko/guide/quality-control.md +137 -0
  85. package/docs/ko/guide/vitepress-integration.md +265 -0
  86. package/docs/ko/index.md +58 -0
  87. package/docs/zh/api/agent.md +262 -0
  88. package/docs/zh/api/engine.md +274 -0
  89. package/docs/zh/api/index.md +171 -0
  90. package/docs/zh/api/providers.md +304 -0
  91. package/docs/zh/changelog.md +64 -0
  92. package/docs/zh/cli/dir.md +243 -0
  93. package/docs/zh/cli/file.md +213 -0
  94. package/docs/zh/cli/glossary.md +273 -0
  95. package/docs/zh/cli/index.md +111 -0
  96. package/docs/zh/cli/init.md +158 -0
  97. package/docs/zh/guide/chunking.md +271 -0
  98. package/docs/zh/guide/configuration.md +139 -0
  99. package/docs/zh/guide/cost-optimization.md +30 -0
  100. package/docs/zh/guide/getting-started.md +150 -0
  101. package/docs/zh/guide/glossary.md +214 -0
  102. package/docs/zh/guide/index.md +32 -0
  103. package/docs/zh/guide/ollama.md +410 -0
  104. package/docs/zh/guide/prompt-caching.md +221 -0
  105. package/docs/zh/guide/providers.md +232 -0
  106. package/docs/zh/guide/quality-control.md +137 -0
  107. package/docs/zh/guide/vitepress-integration.md +265 -0
  108. package/docs/zh/index.md +58 -0
  109. package/package.json +91 -0
  110. package/release.config.mjs +15 -0
  111. package/schemas/glossary.schema.json +110 -0
  112. package/src/cli/commands/dir.ts +469 -0
  113. package/src/cli/commands/file.ts +291 -0
  114. package/src/cli/commands/glossary.ts +221 -0
  115. package/src/cli/commands/init.ts +68 -0
  116. package/src/cli/commands/serve.ts +60 -0
  117. package/src/cli/index.ts +64 -0
  118. package/src/cli/options.ts +59 -0
  119. package/src/core/agent.ts +1119 -0
  120. package/src/core/chunker.ts +391 -0
  121. package/src/core/engine.ts +634 -0
  122. package/src/errors.ts +188 -0
  123. package/src/index.ts +147 -0
  124. package/src/integrations/vitepress.ts +549 -0
  125. package/src/parsers/markdown.ts +383 -0
  126. package/src/providers/claude.ts +259 -0
  127. package/src/providers/interface.ts +109 -0
  128. package/src/providers/ollama.ts +379 -0
  129. package/src/providers/openai.ts +308 -0
  130. package/src/providers/registry.ts +153 -0
  131. package/src/server/index.ts +152 -0
  132. package/src/server/middleware/auth.ts +93 -0
  133. package/src/server/middleware/logger.ts +90 -0
  134. package/src/server/routes/health.ts +84 -0
  135. package/src/server/routes/translate.ts +210 -0
  136. package/src/server/types.ts +138 -0
  137. package/src/services/cache.ts +899 -0
  138. package/src/services/config.ts +217 -0
  139. package/src/services/glossary.ts +247 -0
  140. package/src/types/analysis.ts +164 -0
  141. package/src/types/index.ts +265 -0
  142. package/src/types/modes.ts +121 -0
  143. package/src/types/mqm.ts +157 -0
  144. package/src/utils/logger.ts +141 -0
  145. package/src/utils/tokens.ts +116 -0
  146. package/tests/fixtures/glossaries/ml-glossary.json +53 -0
  147. package/tests/fixtures/input/lynq-installation.ko.md +350 -0
  148. package/tests/fixtures/input/lynq-installation.md +350 -0
  149. package/tests/fixtures/input/simple.ko.md +27 -0
  150. package/tests/fixtures/input/simple.md +27 -0
  151. package/tests/unit/chunker.test.ts +229 -0
  152. package/tests/unit/glossary.test.ts +146 -0
  153. package/tests/unit/markdown.test.ts +205 -0
  154. package/tests/unit/tokens.test.ts +81 -0
  155. package/tsconfig.json +28 -0
  156. package/tsup.config.ts +34 -0
  157. 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분 창 내에서 처리