@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,158 @@
1
+ # llm-translate init
2
+
3
+ ::: info 번역
4
+ 모든 비영어 문서는 Claude Sonnet 4를 사용하여 자동으로 번역됩니다.
5
+ :::
6
+
7
+ 프로젝트를 위한 설정 파일을 초기화합니다.
8
+
9
+ ## 개요
10
+
11
+ ```bash
12
+ llm-translate init [options]
13
+ ```
14
+
15
+ ## 옵션
16
+
17
+ | 옵션 | 기본값 | 설명 |
18
+ |--------|---------|-------------|
19
+ |`--provider `,`-p`| claude | 기본 제공자 |
20
+ |`--model `,`-m`| 다양함 | 기본 모델 |
21
+ |`--quality`| 85 | 기본 품질 임계값 |
22
+ |`--glossary`| 없음 | 용어집 템플릿 생성 |
23
+ |`--force `,`-f`| false | 기존 설정 덮어쓰기 |
24
+
25
+ ## 예제
26
+
27
+ ### 기본 초기화
28
+
29
+ ```bash
30
+ llm-translate init
31
+ ```
32
+
33
+ `.translaterc.json` 를 생성합니다:
34
+
35
+ ```json
36
+ {
37
+ "provider": {
38
+ "name": "claude",
39
+ "model": "claude-haiku-4-5-20251001"
40
+ },
41
+ "translation": {
42
+ "qualityThreshold": 85,
43
+ "maxIterations": 4
44
+ },
45
+ "paths": {}
46
+ }
47
+ ```
48
+
49
+ ### 제공자 지정
50
+
51
+ ```bash
52
+ llm-translate init --provider openai --model gpt-4o
53
+ ```
54
+
55
+ ### 용어집 템플릿과 함께
56
+
57
+ ```bash
58
+ llm-translate init --glossary
59
+ ```
60
+
61
+ 또한 `glossary.json` 를 생성합니다:
62
+
63
+ ```json
64
+ {
65
+ "sourceLanguage": "en",
66
+ "version": "1.0.0",
67
+ "terms": [
68
+ {
69
+ "source": "example",
70
+ "targets": {
71
+ "ko": "예시"
72
+ },
73
+ "context": "Replace with your terms"
74
+ }
75
+ ]
76
+ }
77
+ ```
78
+
79
+ ### 사용자 정의 품질
80
+
81
+ ```bash
82
+ llm-translate init --quality 95
83
+ ```
84
+
85
+ ## 대화형 모드
86
+
87
+ 옵션 없이 실행하면 init가 대화형으로 실행됩니다:
88
+
89
+ ```
90
+ $ llm-translate init
91
+
92
+ llm-translate Configuration Setup
93
+
94
+ ? Select provider: (Use arrow keys)
95
+ ❯ claude
96
+ openai
97
+ ollama
98
+
99
+ ? Select model: (Use arrow keys)
100
+ ❯ claude-haiku-4-5-20251001 (fast, cost-effective)
101
+ claude-sonnet-4-5-20250929 (balanced)
102
+ claude-opus-4-5-20251101 (highest quality)
103
+
104
+ ? Quality threshold: (85)
105
+ ? Create glossary template? (y/N)
106
+
107
+ ✓ Created .translaterc.json
108
+ ```
109
+
110
+ ## 출력 파일
111
+
112
+ ### .translaterc.json
113
+
114
+ ```json
115
+ {
116
+ "$schema": "https://llm-translate.dev/schema.json",
117
+ "provider": {
118
+ "name": "claude",
119
+ "model": "claude-haiku-4-5-20251001"
120
+ },
121
+ "translation": {
122
+ "qualityThreshold": 85,
123
+ "maxIterations": 4,
124
+ "preserveFormatting": true
125
+ },
126
+ "chunking": {
127
+ "maxTokens": 1024,
128
+ "overlapTokens": 150
129
+ },
130
+ "paths": {
131
+ "glossary": "./glossary.json",
132
+ "cache": "./.translate-cache"
133
+ }
134
+ }
135
+ ```
136
+
137
+ ### glossary.json (--glossary와 함께)
138
+
139
+ ```json
140
+ {
141
+ "$schema": "https://llm-translate.dev/glossary-schema.json",
142
+ "sourceLanguage": "en",
143
+ "version": "1.0.0",
144
+ "description": "Project glossary",
145
+ "terms": []
146
+ }
147
+ ```
148
+
149
+ ## 기존 설정 덮어쓰기
150
+
151
+ ```bash
152
+ # Will fail if config exists
153
+ llm-translate init
154
+ # Error: .translaterc.json already exists. Use --force to overwrite.
155
+
156
+ # Force overwrite
157
+ llm-translate init --force
158
+ ```
@@ -0,0 +1,271 @@
1
+ # Chunking 전략
2
+
3
+ ::: info 번역
4
+ 모든 비영어 문서는 Claude Sonnet 4를 사용하여 자동으로 번역됩니다.
5
+ :::
6
+
7
+ 대용량 문서는 번역을 위해 청크로 분할됩니다. Chunking을 이해하면 품질과 비용을 최적화하는 데 도움이 됩니다.
8
+
9
+ ## 왜 Chunking인가?
10
+
11
+ LLM은 컨텍스트 제한이 있으며 집중된 콘텐츠에서 더 나은 성능을 발휘합니다:
12
+
13
+ | 이유 | 설명 |
14
+ |--------|-------------|
15
+ | **컨텍스트 제한** | 모델에는 최대 입력 크기가 있습니다 |
16
+ | **품질** | 작은 청크는 더 집중된 주의를 받습니다 |
17
+ | **비용** | 반복되는 콘텐츠의 캐싱을 허용합니다 |
18
+ | **진행률** | 진행률 추적 및 재개를 가능하게 합니다 |
19
+
20
+ ## 기본 구성
21
+
22
+ ```json
23
+ {
24
+ "chunking": {
25
+ "maxTokens": 1024,
26
+ "overlapTokens": 150
27
+ }
28
+ }
29
+ ```
30
+
31
+ ## 청크 크기 옵션
32
+
33
+ ### maxTokens
34
+
35
+ 청크당 최대 토큰 수(프롬프트 오버헤드 제외).
36
+
37
+ | 크기 | 최적 용도 | 트레이드오프 |
38
+ |------|----------|-----------|
39
+ | 512 | 높은 품질 요구사항 | 더 많은 API 호출 |
40
+ | **1024** | 일반 사용 (기본값) | 균형 잡힌 |
41
+ | 2048 | 비용 최적화 | 품질이 저하될 수 있음 |
42
+
43
+ ### overlapTokens
44
+
45
+ 이전 청크의 컨텍스트가 경계 간 연속성을 보장합니다.
46
+
47
+ ```
48
+ Chunk 1: [Content A ]
49
+ Chunk 2: [overlap][Content B ]
50
+ Chunk 3: [overlap][Content C ]
51
+ ```
52
+
53
+ ::: tip 권장 오버랩
54
+ `maxTokens` 값의 10-15%를 사용하세요. 1024 토큰의 경우 100-150 오버랩 토큰이 잘 작동합니다.
55
+ :::
56
+
57
+ ## Markdown 인식 Chunking
58
+
59
+ llm-translate는 문서 구조를 존중하는 AST 기반 chunking을 사용합니다.
60
+
61
+ ### 보존되는 경계
62
+
63
+ 청크 분할기는 다음 요소들을 절대 분할하지 않습니다:
64
+
65
+ | 요소 | 동작 |
66
+ |---------|----------|
67
+ | 헤더 | 섹션 경계가 보존됨 |
68
+ | 코드 블록 | 항상 온전하게 유지됨 |
69
+ | 목록 | 가능한 경우 항목들이 그룹화됨 |
70
+ | 테이블 | 청크 간에 절대 분할되지 않음 |
71
+ | 단락 | 자연스러운 경계에서 분할됨 |
72
+
73
+ ### 예시
74
+
75
+ ::: details 클릭하여 chunking 예시 보기
76
+
77
+ **입력 문서:**
78
+
79
+ ```markdown
80
+ # Introduction
81
+
82
+ This is the introduction paragraph that explains
83
+ the purpose of the document.
84
+
85
+ ## Getting Started
86
+
87
+ ### Prerequisites
88
+
89
+ - Node.js 20+
90
+ - npm or yarn
91
+
92
+ ### Installation
93
+
94
+ npm install @llm-translate/cli
95
+ ```
96
+
97
+ **결과:**
98
+
99
+ ```
100
+ Chunk 1: # Introduction + paragraph
101
+ Chunk 2: ## Getting Started + ### Prerequisites + list
102
+ Chunk 3: ### Installation + code block
103
+ ```
104
+
105
+ :::
106
+
107
+ ## 구성
108
+
109
+ ::: code-group
110
+
111
+ ```bash [CLI]
112
+ llm-translate file doc.md --target ko --chunk-size 2048
113
+ ```
114
+
115
+ ```json [.translaterc.json]
116
+ {
117
+ "chunking": {
118
+ "maxTokens": 2048,
119
+ "overlapTokens": 200,
120
+ "preservePatterns": [
121
+ "```[\\s\\S]*?```",
122
+ "\\|[^\\n]+\\|"
123
+ ]
124
+ }
125
+ }
126
+ ```
127
+
128
+ ```typescript [Programmatic]
129
+ import { chunkContent } from '@llm-translate/cli';
130
+
131
+ const chunks = chunkContent(content, {
132
+ maxTokens: 1024,
133
+ overlapTokens: 150,
134
+ });
135
+ ```
136
+
137
+ :::
138
+
139
+ ## 최적화 프리셋
140
+
141
+ 우선순위에 따라 선택하세요:
142
+
143
+ ::: code-group
144
+
145
+ ```json [Quality Focus]
146
+ {
147
+ "chunking": {
148
+ "maxTokens": 512,
149
+ "overlapTokens": 100
150
+ }
151
+ }
152
+ ```
153
+
154
+ ```json [Cost Focus]
155
+ {
156
+ "chunking": {
157
+ "maxTokens": 2048,
158
+ "overlapTokens": 50
159
+ }
160
+ }
161
+ ```
162
+
163
+ ```json [Long Documents]
164
+ {
165
+ "chunking": {
166
+ "maxTokens": 1500,
167
+ "overlapTokens": 150
168
+ },
169
+ "translation": {
170
+ "maxIterations": 3
171
+ }
172
+ }
173
+ ```
174
+
175
+ :::
176
+
177
+ ::: info 각 프리셋을 언제 사용할지
178
+ - **품질 중심**: 기술 문서, 법적 콘텐츠
179
+ - **비용 중심**: 블로그 포스트, 일반 콘텐츠
180
+ - **긴 문서**: 책, 포괄적인 가이드
181
+ :::
182
+
183
+ ## 콘텐츠 보존
184
+
185
+ ### 보호되는 것
186
+
187
+ llm-translate는 특정 콘텐츠를 번역에서 자동으로 보호합니다:
188
+
189
+ | 콘텐츠 유형 | 예시 | 동작 |
190
+ |--------------|---------|----------|
191
+ | 코드 블록 |` __INLINE_CODE_16__ `| 절대 번역되지 않음 |
192
+ | 인라인 코드 |`` ` variable ` ``| 보존됨 |
193
+ | URL |`https://...`| 보존됨 |
194
+ | 파일 경로 |`./path/to/file`| 보존됨 |
195
+
196
+ ### 링크 처리
197
+
198
+ 링크 URL은 보존되지만 링크 텍스트는 번역됩니다:
199
+
200
+ ```markdown
201
+ [Getting Started](./getting-started.md)
202
+
203
+ [시작하기](./getting-started.md)
204
+ ```
205
+
206
+ ## 디버깅
207
+
208
+ ### 청크 미리보기
209
+
210
+ `--dry-run` 를 사용하여 문서가 어떻게 청크로 나뉠지 확인하세요:
211
+
212
+ ```bash
213
+ llm-translate file doc.md --target ko --dry-run --verbose
214
+ ```
215
+
216
+ 출력:
217
+ ```
218
+ Document Analysis:
219
+ Total tokens: ~5,200
220
+ Chunks: 6
221
+ Average chunk size: ~867 tokens
222
+
223
+ Chunk breakdown:
224
+ [1] Lines 1-45 (Introduction) - 823 tokens
225
+ [2] Lines 46-89 (Getting Started) - 912 tokens
226
+ [3] Lines 90-134 (Configuration) - 878 tokens
227
+ ...
228
+ ```
229
+
230
+ ### 프로그래밍 방식 검사
231
+
232
+ ```typescript
233
+ import { chunkContent, getChunkStats } from '@llm-translate/cli';
234
+
235
+ const chunks = chunkContent(content, { maxTokens: 1024 });
236
+ const stats = getChunkStats(chunks);
237
+
238
+ console.log(`Total chunks: ${stats.count}`);
239
+ console.log(`Average size: ${stats.avgTokens} tokens`);
240
+ ```
241
+
242
+ ## 문제 해결
243
+
244
+ ::: warning 청크가 너무 작음
245
+ **증상**: 많은 작은 청크, 과도한 API 호출
246
+
247
+ **해결책**:`maxTokens` 를 증가시키세요
248
+ ```json
249
+ { "chunking": { "maxTokens": 2048 } }
250
+ ```
251
+ :::
252
+
253
+ ::: warning 청크 간 컨텍스트 손실
254
+ **증상**: 섹션 간 일관성 없는 용어
255
+
256
+ **해결책**: 오버랩을 증가시키거나 용어집을 사용하세요
257
+ ```json
258
+ { "chunking": { "overlapTokens": 300 } }
259
+ ```
260
+ :::
261
+
262
+ ::: danger 코드 블록이 분할됨
263
+ **증상**: 출력에서 구문 오류
264
+
265
+ **원인**: 이는 절대 발생해서는 안 됩니다. 발생한다면 [이슈를 신고](https://github.com/selenehyun/llm-translate/issues)해 주세요.
266
+ :::
267
+
268
+ ::: warning 테이블이 손상됨
269
+ **증상**: 깨진 테이블 형식
270
+
271
+ **해결책**: 테이블은 자동으로 온전하게 유지되어야 합니다. 매우 큰 테이블(100+ 행)의 경우 수동으로 분할하는 것을 고려하세요.
@@ -0,0 +1,139 @@
1
+ # 설정
2
+
3
+ ::: info 번역
4
+ 모든 비영어 문서는 Claude Sonnet 4를 사용하여 자동으로 번역됩니다.
5
+ :::
6
+
7
+ llm-translate는 계층화된 설정 시스템을 사용합니다. 설정은 다음 순서로 적용됩니다(나중 설정이 이전 설정을 덮어씁니다):
8
+
9
+ 1. 내장 기본값
10
+ 2. 설정 파일 (`.translaterc.json`)
11
+ 3. 환경 변수
12
+ 4. CLI 인수
13
+
14
+ ## 설정 파일
15
+
16
+ 프로젝트 루트에 `.translaterc.json` 를 생성하세요:
17
+
18
+ ```json
19
+ {
20
+ "provider": {
21
+ "name": "claude",
22
+ "model": "claude-haiku-4-5-20251001",
23
+ "apiKey": null
24
+ },
25
+ "translation": {
26
+ "qualityThreshold": 85,
27
+ "maxIterations": 4,
28
+ "preserveFormatting": true
29
+ },
30
+ "chunking": {
31
+ "maxTokens": 1024,
32
+ "overlapTokens": 150
33
+ },
34
+ "paths": {
35
+ "glossary": "./glossary.json",
36
+ "cache": "./.translate-cache"
37
+ }
38
+ }
39
+ ```
40
+
41
+ ### 제공자 설정
42
+
43
+ | 옵션 | 타입 | 기본값 | 설명 |
44
+ |--------|------|---------|-------------|
45
+ |`name `| string |`"claude"`| 제공자 이름:` claude `,` openai `,` ollama`|
46
+ |`model`| string | 다양함 | 모델 식별자 |
47
+ |`apiKey`| string | null | API 키 (환경 변수 권장) |
48
+ |`baseUrl`| string | null | 사용자 정의 API 엔드포인트 |
49
+
50
+ ### 번역 설정
51
+
52
+ | 옵션 | 타입 | 기본값 | 설명 |
53
+ |--------|------|---------|-------------|
54
+ |`qualityThreshold `| number |` 85`| 최소 품질 점수 (0-100) |
55
+ |`maxIterations `| number |` 4`| 최대 개선 반복 횟수 |
56
+ |`preserveFormatting `| boolean |` true`| Markdown/HTML 구조 보존 |
57
+
58
+ ### Chunking 설정
59
+
60
+ | 옵션 | 타입 | 기본값 | 설명 |
61
+ |--------|------|---------|-------------|
62
+ |`maxTokens `| number |` 1024`| 청크당 최대 토큰 수 |
63
+ |`overlapTokens `| number |` 150`| 청크 간 컨텍스트 중복 |
64
+
65
+ ### 경로 설정
66
+
67
+ | 옵션 | 타입 | 기본값 | 설명 |
68
+ |--------|------|---------|-------------|
69
+ |`glossary`| string | null | 용어집 파일 경로 |
70
+ |`cache`| string | null | 번역 캐시 경로 |
71
+
72
+ ## 환경 변수
73
+
74
+ ```bash
75
+ # API Keys
76
+ ANTHROPIC_API_KEY=sk-ant-xxxxx
77
+ OPENAI_API_KEY=sk-xxxxx
78
+ OLLAMA_BASE_URL=http://localhost:11434
79
+
80
+ # Default Settings
81
+ LLM_TRANSLATE_PROVIDER=claude
82
+ LLM_TRANSLATE_MODEL=claude-haiku-4-5-20251001
83
+ LLM_TRANSLATE_QUALITY_THRESHOLD=85
84
+ ```
85
+
86
+ ## CLI 재정의 예시
87
+
88
+ ```bash
89
+ # Override provider
90
+ llm-translate file doc.md -o doc.ko.md --target ko --provider openai
91
+
92
+ # Override model
93
+ llm-translate file doc.md -o doc.ko.md --target ko --model claude-sonnet-4-5-20250929
94
+
95
+ # Override quality threshold
96
+ llm-translate file doc.md -o doc.ko.md --target ko --quality 90
97
+
98
+ # Override max iterations
99
+ llm-translate file doc.md -o doc.ko.md --target ko --max-iterations 6
100
+ ```
101
+
102
+ ## 프로젝트별 설정
103
+
104
+ 모노레포나 다중 프로젝트 설정의 경우, 각 프로젝트 디렉토리에 `.translaterc.json` 을 배치하세요:
105
+
106
+ ```
107
+ my-monorepo/
108
+ ├── packages/
109
+ │ ├── frontend/
110
+ │ │ ├── .translaterc.json # Frontend-specific terms
111
+ │ │ └── docs/
112
+ │ └── backend/
113
+ │ ├── .translaterc.json # Backend-specific terms
114
+ │ └── docs/
115
+ └── .translaterc.json # Shared defaults
116
+ ```
117
+
118
+ llm-translate는 현재 디렉토리부터 상위로 설정 파일을 검색합니다.
119
+
120
+ ## 모델 선택 가이드
121
+
122
+ | 모델 | 속도 | 품질 | 비용 | 최적 용도 |
123
+ |-------|-------|---------|------|----------|
124
+ |`claude-haiku-4-5-20251001`| 빠름 | 좋음 | 낮음 | 일반 문서, 대용량 |
125
+ |`claude-sonnet-4-5-20250929`| 보통 | 우수 | 보통 | 기술 문서, 품질 중요 |
126
+ |`claude-opus-4-5-20251101`| 느림 | 최고 | 높음 | 복잡한 내용, 미묘한 텍스트 |
127
+ |`gpt-4o-mini`| 빠름 | 좋음 | 낮음 | Haiku 대안 |
128
+ |`gpt-4o`| 보통 | 우수 | 보통 | Sonnet 대안 |
129
+
130
+ ## 품질 임계값 가이드라인
131
+
132
+ | 임계값 | 사용 사례 |
133
+ |-----------|----------|
134
+ | 70-75 | 초안 번역, 내부 문서 |
135
+ | 80-85 | 표준 문서 (기본값) |
136
+ | 90-95 | 공개용, 마케팅 콘텐츠 |
137
+ | 95+ | 법률, 의료, 규제 콘텐츠 |
138
+
139
+ 높은 임계값은 더 많은 반복이 필요하며 비용이 더 많이 듭니다.
@@ -0,0 +1,30 @@
1
+ # 비용 최적화
2
+
3
+ ::: info 번역
4
+ 모든 비영어 문서는 Claude Sonnet 4.5를 사용하여 자동으로 번역됩니다.
5
+ :::
6
+
7
+ 이 가이드는 번역 품질을 유지하면서 API 비용을 최소화하는 전략을 다룹니다.
8
+
9
+ ## 비용 구조
10
+
11
+ ### 토큰 가격 (2025년 기준)
12
+
13
+ | 모델 | 입력 (1K) | 출력 (1K) | 캐시 읽기 | 캐시 쓰기 |
14
+ |-------|-----------|-------------|------------|-------------|
15
+ | Claude Haiku 4.5 | $0.001 | $0.005 | $0.0001 | $0.00125 |
16
+ | Claude Sonnet 4.5 | $0.003 | $0.015 | $0.0003 | $0.00375 |
17
+ | Claude Opus 4.5 | $0.015 | $0.075 | $0.0015 | $0.01875 |
18
+ | GPT-4o-mini | $0.00015 | $0.0006 | 자동 | 자동 |
19
+ | GPT-4o | $0.0025 | $0.01 | 자동 | 자동 |
20
+
21
+ ### 비용 요소
22
+
23
+ - [ ] 표준 문서에는 Haiku를 사용합니다
24
+ - [ ] 품질 임계값을 적절히 설정합니다 (필요 이상으로 높게 설정하지 않습니다)
25
+ - [ ] 프롬프트 캐싱을 활성화하고 최대화합니다
26
+ - [ ] 파일을 배치로 처리합니다
27
+ - [ ] 용어집을 간결하게 유지합니다
28
+ - [ ] 증분 업데이트를 위해 번역 캐시를 사용합니다
29
+ - [ ] 상세 출력으로 비용을 모니터링합니다
30
+ - [ ] 대규모 작업 전에 비용을 추정합니다