---
license: apache-2.0
language:
- ja
- zh
base_model:
- 3tic/Orion-Qwen3-1.7B-CPT-v2603
pipeline_tag: text-generation
tags:
- lightnovel
---
# Orion-Qwen3-1.7B-SFT-v2603


基于 [Orion-Qwen3-1.7B-CPT-v2603](https://huggingface.co/3tic/Orion-Qwen3-1.7B-CPT-v2603) 在轻小说、游戏、动漫文本数据上训练的翻译模型，支持术语表。

* 本版模型优化了术语表使用和上下文关系处理


## Prompt 结构

```
[上文]         ← 可选，每 chunk 不同
[术语表]       ← 可选，同文档共享，仅包含当前 chunk 命中的术语
[提示词]       ← 根据有无上文/术语表选择措辞
[JSONL 内容]   ← 待翻译文本
```

---

## 模板 1: plain（无术语表，无上文）

### user

```
将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果，不要额外解释：
{"1":"原文1"}
{"2":"原文2"}
```

### assistant

```
{"1":"译文1"}
{"2":"译文2"}
```

### 示例

**user:**

```
将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果，不要额外解释：
{"1":"まだなにか、話すべきことがあっただろうか。"}
```

**assistant:**

```
{"1":"还有什么，需要说的事情吗。"}
```

---

## 模板 2: glossary（有术语表，无上文）

### user

```
术语表：
実体A→译名A
実体B→译名B

参考术语表中的译法，将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果：
{"1":"原文1"}
{"2":"原文2"}
```

### assistant

```
{"1":"译文1"}
{"2":"译文2"}
```

### 示例

**user:**

```
术语表：
クトゥリフ→库托莉芙
サーフェちゃん→莎妃
ライム→莉姆

参考术语表中的译法，将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果：
{"1":"「思い出話をしましょう、と言っているのよ。私もグレンとは話せないし」"}
{"2":"うにょん！ と楕円形に広がっていたライムが、あっという間に人の形に戻った。"}
{"3":"「いいんデスか！ サーフェちゃん」"}
```

---

## 模板 3: context（无术语表，有上文）

### user

```
上文行1
上文行2
上文行3

参考上文信息，将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果：
{"1":"原文1"}
{"2":"原文2"}
```

### assistant

```
{"1":"译文1"}
{"2":"译文2"}
```

### 示例

**user:**

```
「え……だっテ、グレンくんは教室でも浮いてましたシ……みんなと仲良くなれるきっかけになればと思ったんデス……」
サーフェとしては。
ライムがやったことは、サーフェの考えと似てはいても、もう少し先を見ていた。

参考上文信息，将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果：
{"1":"「医学部学生ではあるけど、身体の悩みを聞きます……というのは評判になりましたね」"}
{"2":"「エヘヘ！ 噂を流した甲斐がありましター！」"}
{"3":"「それも貴女の仕業だったのね」"}
```

---

## 模板 4: glossary_context（有术语表，有上文）

### user

```
上文行1
上文行2
上文行3

术语表：
実体A→译名A
実体B→译名B

参考上文和术语表，将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果：
{"1":"原文1"}
{"2":"原文2"}
```

### assistant

```
{"1":"译文1"}
{"2":"译文2"}
```

### 示例

**user:**

```
アカデミーは多数の学部に分かれ、大陸各地から有能な学者が招聘された。
ある日、アカデミーに一人の少年が留学した。
新入生の名はグレン・リトバイト。

术语表：
クトゥリフ→库托莉芙
グレン・リトバイト→格伦·利特贝特
ネメア→涅米亚
ネメア・アカデミー→涅米亚·学院

参考上文和术语表，将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果：
{"1":"ネメア・アカデミー。"}
{"2":"魔族領首都ネメア。その大都市が誇る、最大の教育機関。"}
{"3":"名前はグレン。"}
{"4":"手にしているのは、教授であるクトゥリフからの通知である。"}
```

---

## Transformers 推理示例

```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_path = "3tic/Orion-Qwen3-1.7B-CPT-v2603"

tokenizer = AutoTokenizer.from_pretrained(
    model_path,
    trust_remote_code=True,
    padding_side="left",
)
if tokenizer.pad_token is None:
    tokenizer.pad_token = tokenizer.eos_token

model = AutoModelForCausalLM.from_pretrained(
    model_path,
    trust_remote_code=True,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

prompt = (
    "将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果，不要额外解释：\n"
    '{"1": "おはようございます"}\n'
)

text = tokenizer.apply_chat_template(
    [{"role": "user", "content": prompt}],
    tokenize=False,
    add_generation_prompt=True,
)

inputs = tokenizer(text, return_tensors="pt").to(model.device)

outputs = model.generate(
    **inputs,
    max_new_tokens=128,
    do_sample=False,
    temperature=1.0,
    pad_token_id=tokenizer.pad_token_id,
)

generated_ids = outputs[0][inputs["input_ids"].shape[-1]:]
response = tokenizer.decode(generated_ids, skip_special_tokens=True)
print(response)
```


## vLLM 推理示例


```python
from vllm import LLM, SamplingParams

model_path = "3tic/Orion-Qwen3-1.7B-CPT-v2603"

llm = LLM(model=model_path, tensor_parallel_size=1, max_model_len=1024)

prompt = (
    "将以下文本翻译为简体中文，使用JSONLINE格式输出翻译结果，只需输出翻译结果，不要额外解释：\n"
    '{"1": "おはようございます"}\n'
)

outputs = llm.chat(
    messages=[[{"role": "user", "content": prompt}]],
    sampling_params=SamplingParams(max_tokens=128, temperature=0.0),
)

print(outputs[0].outputs[0].text)
```


