@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,150 @@
|
|
|
1
|
+
# 快速开始
|
|
2
|
+
|
|
3
|
+
::: info 翻译说明
|
|
4
|
+
所有非英文文档均使用 Claude Sonnet 4 自动翻译。
|
|
5
|
+
:::
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
### npm(推荐)
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g @llm-translate/cli
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### 从源码安装
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
git clone https://github.com/selenehyun/llm-translate.git
|
|
19
|
+
cd llm-translate
|
|
20
|
+
npm install
|
|
21
|
+
npm run build
|
|
22
|
+
npm link
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 前置要求
|
|
26
|
+
|
|
27
|
+
- Node.js 24 或更高版本
|
|
28
|
+
- 至少一个 LLM 提供商的 API 密钥:
|
|
29
|
+
- Anthropic (Claude)
|
|
30
|
+
- OpenAI
|
|
31
|
+
- Ollama(本地运行,无需 API 密钥)
|
|
32
|
+
|
|
33
|
+
## 配置
|
|
34
|
+
|
|
35
|
+
### 1. 设置 API 密钥
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# For Claude (recommended)
|
|
39
|
+
export ANTHROPIC_API_KEY=sk-ant-xxxxx
|
|
40
|
+
|
|
41
|
+
# For OpenAI
|
|
42
|
+
export OPENAI_API_KEY=sk-xxxxx
|
|
43
|
+
|
|
44
|
+
# For Ollama (no key needed, just ensure server is running)
|
|
45
|
+
# See the Ollama guide for setup: ./ollama
|
|
46
|
+
export OLLAMA_BASE_URL=http://localhost:11434
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 2. 初始化配置(可选)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
llm-translate init
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
这将创建一个包含默认设置的 `.translaterc.json` 文件:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"provider": {
|
|
60
|
+
"name": "claude",
|
|
61
|
+
"model": "claude-haiku-4-5-20251001"
|
|
62
|
+
},
|
|
63
|
+
"translation": {
|
|
64
|
+
"qualityThreshold": 85,
|
|
65
|
+
"maxIterations": 4
|
|
66
|
+
},
|
|
67
|
+
"paths": {
|
|
68
|
+
"glossary": "./glossary.json"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 第一次翻译
|
|
74
|
+
|
|
75
|
+
### 基本用法
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Translate a markdown file to Korean
|
|
79
|
+
llm-translate file README.md -o README.ko.md -s en -t ko
|
|
80
|
+
|
|
81
|
+
# Using long option names
|
|
82
|
+
llm-translate file docs/guide.md -o docs/guide.ja.md --source-lang en --target-lang ja
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 使用术语表
|
|
86
|
+
|
|
87
|
+
1. 创建一个 `glossary.json` 文件:
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"sourceLanguage": "en",
|
|
92
|
+
"terms": [
|
|
93
|
+
{
|
|
94
|
+
"source": "component",
|
|
95
|
+
"targets": { "ko": "컴포넌트" },
|
|
96
|
+
"context": "UI component"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"source": "prop",
|
|
100
|
+
"targets": { "ko": "프롭" },
|
|
101
|
+
"context": "React prop"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"source": "TypeScript",
|
|
105
|
+
"doNotTranslate": true
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
2. 使用术语表进行翻译:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
llm-translate file README.md -o README.ko.md -s en -t ko --glossary glossary.json
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 批量翻译
|
|
118
|
+
|
|
119
|
+
翻译整个目录:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
llm-translate dir ./docs ./docs-ko -s en -t ko --glossary glossary.json
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 理解输出结果
|
|
126
|
+
|
|
127
|
+
翻译完成后,您将看到:
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
✓ Translation complete
|
|
131
|
+
Quality: 92/85 (threshold met)
|
|
132
|
+
Iterations: 2
|
|
133
|
+
Tokens: 1,234 input / 1,456 output
|
|
134
|
+
Cache: 890 read / 234 written (78% hit rate)
|
|
135
|
+
Duration: 3.2s
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
- **Quality**:最终得分与质量阈值的对比
|
|
139
|
+
- **Iterations**:优化迭代次数
|
|
140
|
+
- **Tokens**:API 令牌使用量
|
|
141
|
+
- **Cache**:提示缓存统计(仅限 Claude)
|
|
142
|
+
- **Duration**:总处理时间
|
|
143
|
+
|
|
144
|
+
## 下一步
|
|
145
|
+
|
|
146
|
+
- [配置您的项目](./configuration) 以获得最佳设置
|
|
147
|
+
- [设置术语表](./glossary) 确保术语一致性
|
|
148
|
+
- [了解质量控制](./quality-control) 和调优
|
|
149
|
+
- [优化成本](./cost-optimization) 适用于大型项目
|
|
150
|
+
- [使用 Ollama 本地运行](./ollama) 进行私密的离线翻译
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# 术语表
|
|
2
|
+
|
|
3
|
+
::: info 翻译说明
|
|
4
|
+
所有非英文文档均使用 Claude Sonnet 4 自动翻译。
|
|
5
|
+
:::
|
|
6
|
+
|
|
7
|
+
术语表功能确保所有翻译中术语的一致性。定义一次术语,它们每次都会以相同的方式翻译。
|
|
8
|
+
|
|
9
|
+
## 术语表文件格式
|
|
10
|
+
|
|
11
|
+
创建一个 `glossary.json` 文件:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"sourceLanguage": "en",
|
|
16
|
+
"version": "1.0.0",
|
|
17
|
+
"terms": [
|
|
18
|
+
{
|
|
19
|
+
"source": "component",
|
|
20
|
+
"targets": {
|
|
21
|
+
"ko": "컴포넌트",
|
|
22
|
+
"ja": "コンポーネント",
|
|
23
|
+
"zh": "组件"
|
|
24
|
+
},
|
|
25
|
+
"context": "UI component in React/Vue"
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 术语结构
|
|
32
|
+
|
|
33
|
+
### 基本术语
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"source": "endpoint",
|
|
38
|
+
"targets": {
|
|
39
|
+
"ko": "엔드포인트",
|
|
40
|
+
"ja": "エンドポイント"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 带上下文
|
|
46
|
+
|
|
47
|
+
上下文帮助 LLM 理解如何使用术语:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"source": "state",
|
|
52
|
+
"targets": { "ko": "상태" },
|
|
53
|
+
"context": "Application state in state management"
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 不翻译
|
|
58
|
+
|
|
59
|
+
保持技术术语为英文:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"source": "Kubernetes",
|
|
64
|
+
"doNotTranslate": true
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 特定语言不翻译
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"source": "React",
|
|
73
|
+
"doNotTranslateFor": ["ko", "ja"],
|
|
74
|
+
"targets": {
|
|
75
|
+
"zh": "React框架"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 大小写敏感性
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"source": "API",
|
|
85
|
+
"targets": { "ko": "API" },
|
|
86
|
+
"caseSensitive": true
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## 完整示例
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"sourceLanguage": "en",
|
|
95
|
+
"version": "1.0.0",
|
|
96
|
+
"description": "Technical documentation glossary",
|
|
97
|
+
"terms": [
|
|
98
|
+
{
|
|
99
|
+
"source": "component",
|
|
100
|
+
"targets": { "ko": "컴포넌트", "ja": "コンポーネント" },
|
|
101
|
+
"context": "UI component"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"source": "prop",
|
|
105
|
+
"targets": { "ko": "프롭", "ja": "プロップ" },
|
|
106
|
+
"context": "React component property"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"source": "hook",
|
|
110
|
+
"targets": { "ko": "훅", "ja": "フック" },
|
|
111
|
+
"context": "React hook (useState, useEffect, etc.)"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"source": "state",
|
|
115
|
+
"targets": { "ko": "상태", "ja": "ステート" },
|
|
116
|
+
"context": "Component or application state"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"source": "TypeScript",
|
|
120
|
+
"doNotTranslate": true
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"source": "JavaScript",
|
|
124
|
+
"doNotTranslate": true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"source": "npm",
|
|
128
|
+
"doNotTranslate": true
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"source": "API",
|
|
132
|
+
"doNotTranslate": true,
|
|
133
|
+
"caseSensitive": true
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## CLI 命令
|
|
140
|
+
|
|
141
|
+
### 列出术语表术语
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
llm-translate glossary list --glossary glossary.json
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 验证术语表
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
llm-translate glossary validate --glossary glossary.json
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 添加术语
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
llm-translate glossary add "container" --target ko="컨테이너" --glossary glossary.json
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 删除术语
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
llm-translate glossary remove "container" --glossary glossary.json
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## 最佳实践
|
|
166
|
+
|
|
167
|
+
### 1. 从常见技术术语开始
|
|
168
|
+
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"terms": [
|
|
172
|
+
{ "source": "API", "doNotTranslate": true },
|
|
173
|
+
{ "source": "SDK", "doNotTranslate": true },
|
|
174
|
+
{ "source": "CLI", "doNotTranslate": true },
|
|
175
|
+
{ "source": "URL", "doNotTranslate": true },
|
|
176
|
+
{ "source": "JSON", "doNotTranslate": true }
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 2. 包含产品特定术语
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"source": "Workspace",
|
|
186
|
+
"targets": { "ko": "워크스페이스" },
|
|
187
|
+
"context": "Product-specific workspace feature"
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 3. 为歧义术语添加上下文
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"source": "run",
|
|
196
|
+
"targets": { "ko": "실행" },
|
|
197
|
+
"context": "Execute a command or script"
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 4. 对品牌名称使用 `doNotTranslate`
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"source": "GitHub",
|
|
206
|
+
"doNotTranslate": true
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### 5. 版本化您的术语表
|
|
211
|
+
|
|
212
|
+
跟踪术语表变更与您的文档一起。
|
|
213
|
+
|
|
214
|
+
## 术语应用方式
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 什么是 llm-translate?
|
|
2
|
+
|
|
3
|
+
::: info 翻译说明
|
|
4
|
+
所有非英文文档均使用 Claude Sonnet 4 自动翻译。
|
|
5
|
+
:::
|
|
6
|
+
|
|
7
|
+
llm-translate 是一个使用大型语言模型翻译文档的 CLI 工具。它专为技术文档设计,在一致性、准确性和格式保持方面至关重要。
|
|
8
|
+
|
|
9
|
+
## 主要功能
|
|
10
|
+
|
|
11
|
+
### 术语表强制执行
|
|
12
|
+
|
|
13
|
+
定义一次特定领域的术语,确保在所有文档中保持一致的翻译。
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"terms": [
|
|
18
|
+
{
|
|
19
|
+
"source": "API endpoint",
|
|
20
|
+
"targets": { "ko": "API 엔드포인트", "ja": "APIエンドポイント" }
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"source": "Kubernetes",
|
|
24
|
+
"doNotTranslate": true
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Self-Refine质量控制
|
|
31
|
+
|
|
32
|
+
llm-translate 不只是翻译一次就完事。它使用迭代改进过程:
|