---
title: rewrite2-27b-fp8
canonical_url: "https://www.modelscope.cn/models/alkaid55555/rewrite2-27b-fp8"
md_url: "https://www.modelscope.cn/models/alkaid55555/rewrite2-27b-fp8.md"
repository: alkaid55555/rewrite2-27b-fp8
last_updated: 2026-10-25
pipeline_tag: text-generation
tasks:
  - text-generation
model_type:
  - qwen3_5_text
architectures:
  - Qwen3_5ForCausalLM
parameters: 26.9B
tensor_type:
  - F32
  - BF16
  - F8_E4M3
library_name:
  - safetensors
language:
  - zh
downloads: 16
stars: 0
tags:
  - rewrite2
  - novel-rewrite
  - novel-expansion
  - chinese
  - fp8
---

# rewrite2-27b-fp8

> rewrite2-27b-fp8 - alkaid55555 在 ModelScope 开源的模型。Rewrite2 27B · FP8 W8A8

- **Repository**: alkaid55555/rewrite2-27b-fp8
- **Tasks**: text-generation
- **Parameters**: 26.9B
- **Tags**: rewrite2, novel-rewrite, novel-expansion, chinese, fp8
- **Downloads**: 16
- **Stars**: 0
- **Last updated**: 2026-10-25

Source: https://www.modelscope.cn/models/alkaid55555/rewrite2-27b-fp8

---

# Rewrite2 27B · FP8 W8A8

> **中文小说改写 / 扩写专用模型。** 输入一段小说原文或删减草稿，输出情节与人物不变、表达更自然的正文。  
> 本仓库是 Rewrite2 27B 的 **FP8 W8A8**：NVIDIA ModelOpt FP8 W8A8 量化版，适合 48GB 级部署。

> **长度与切分：单次原文建议 500–800 汉字（约 330–530 tokens），固定提示词另加 81 tokens。**
>
> 训练样本的「提示词 + 原文 + 输出」合计中位数约 1,000 tokens；按原文算，中位数约 800 汉字，输出中位数约 540 汉字。模型默认是**压缩式改写**：800–950 汉字的输入，训练目标输出中位数约 539 字（约为原文的 0.63 倍），不是等长改写。
>
> 长文请按下面的「长文怎么切」分段处理；只调大 `max_tokens` 不会改变这个长度先验。

> **可能出现复读 / 死循环。** 模型不保证自然收尾，可能连续重复短语或整句，直到达到输出上限。部署时必须启用重复惩罚，建议从 `repetition_penalty=1.08` 开始（llama.cpp 对应 `--repeat-penalty 1.08`），同时设置硬性 `max_tokens` 和超时作为兜底。重复惩罚只能降低概率，不能完全消除。

## 30 秒判断

- **它做什么**：小说文字改写；把删减草稿扩写成完整正文。
- **它不做什么**：通用聊天、自由续写、凭空编情节、翻译、跨章节长篇一致性维护。
- **怎么调用**：一条 `user` 消息，内容必须是「固定任务提示词 + 正文」，见下一节。
- **建议输入**：单次原文 **500–800 汉字（约 330–530 tokens）**，另加固定提示词 81 tokens；长文按场景/段落切成 500–700 字的小段，逐段改写。
- **稳定性**：有概率复读或死循环，必须启用重复惩罚（建议从 1.08 起调）并限制输出长度。
- **本版定位**：显存不够跑 BF16，但希望尽量保留原精度。
- **权重与显存**：约 29.5 GB（27.5 GiB）；建议 48GB 级。

## 必用提示词

这个模型是任务特化 SFT 模型，**不是通用润色助手**。训练时只使用一条 `user` 消息，没有额外 system prompt，也没有 thinking 包裹。请直接使用下面的固定提示词；改成“帮我润色一下”会偏离训练分布。

### 改写

```text
你是一位小说编辑，正在帮作者改文。请把下面这段小说片段改写成自然、有作者个人风格的中文，保持情节走向、人物设定和主要事件不变。无论原文是否通顺、AI味是轻是重，都要重新组织语言，禁止连续照抄原文超过15字；原文越好，越要用同义改写而不是照搬。

原文：
```

### 扩写

```text
你是一位小说编辑，正在帮作者改文。请把下面这段经过删减的小说片段扩写成自然、有作者个人风格的中文，{tier_hint}。保持情节走向、人物设定和对话内容不变；补回被删掉的环境、动作、心理、神态等细节，同时允许重新组织、改写原有的句子和描写，把简略处展开、把生硬的句子重塑得更舒展自然，不要只在原句后面做加法；不得新增或改变情节；禁止连续照抄原文超过15字，直接输出扩写后的正文。

草稿：
```

`{tier_hint}` 必须替换成具体倍率说明。例如：

- 1.5 倍：`目标长度约为现在的 1.5 倍，属于中等幅度扩写`
- 1.6 倍：`目标长度约为现在的 1.6 倍，属于中等幅度扩写`
- 1.8 倍：`目标长度约为现在的 1.8 倍，属于中等幅度扩写`

**拼接规则**：

```text
改写：INSTRUCTION_rewrite.txt 的内容 + 原文
扩写：INSTRUCTION_expand.txt 替换 {tier_hint} 后 + 草稿
```

提示词末尾的「原文：」「草稿：」已经是格式的一部分，正文直接接在后面，不要再加一轮角色说明或思维链。仓库内附 `INSTRUCTION_rewrite.txt` 和 `INSTRUCTION_expand.txt`。

## 快速开始

### 1. 启动服务

```bash
vllm serve aikexue170/rewrite2-27b-fp8 \
  --served-model-name rewrite2 \
  --trust-remote-code \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.90
```

- 格式：ModelOpt FP8 W8A8（权重和激活均为 FP8），3 个 safetensors 分片。
- 推理：vLLM 会根据 `hf_quant_config.json` 自动选择量化路径。
- 验证：已在本机 vLLM 中实际加载并生成，曾用于改写站点的 27B 部署。

### 2. 调用

```python
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:8080/v1",
    api_key="EMPTY",
)

# 改写
rewrite_instruction = Path("INSTRUCTION_rewrite.txt").read_text(encoding="utf-8")
text = """把这里换成需要改写的小说原文。"""
prompt = rewrite_instruction + text

response = client.chat.completions.create(
    model="rewrite2",
    messages=[{"role": "user", "content": prompt}],
    temperature=0.7,
    top_p=0.9,
    max_tokens=1200,
    extra_body={"repetition_penalty": 1.08},
)
print(response.choices[0].message.content)

# 扩写：把 INSTRUCTION_expand.txt 的 {tier_hint} 换成具体倍率
expand_instruction = Path("INSTRUCTION_expand.txt").read_text(encoding="utf-8")
expand_instruction = expand_instruction.replace(
    "{tier_hint}", "目标长度约为现在的 1.6 倍，属于中等幅度扩写"
)
prompt = expand_instruction + text
```

> `model` 参数填服务启动时设置的名称即可；llama.cpp 服务会使用其 OpenAI 兼容接口。

## 长文怎么切

这个模型是按「约 800 汉字原文 → 约 540 汉字压缩改写」的训练分布学的，默认不是等长改写。上下文有 4096 tokens，塞得下 1,500–3,000 字，但模型不会因此覆盖全文：它往往展开开头、压缩后半，长度不够时补写。

**做法：按自然段/场景切，每段 500–700 汉字，逐段改写。** 大多数小说段落本身就在这个长度内；按空行、场景转换、对话轮次结束处切即可。每段都完整带「固定提示词 + 本段原文」，改完按顺序拼接。

### 最小实现

```python
import re

def split_long_text(text, max_chars=700):
    """按换行/自然段切；单段超长时在句号/问号/感叹号处再切。"""
    paras = [p.strip() for p in re.split(r"\n+", text) if p.strip()]
    chunks, buf = [], ""
    for p in paras:
        while len(p) > max_chars:
            cut = max(p.rfind("。", 0, max_chars),
                      p.rfind("！", 0, max_chars),
                      p.rfind("？", 0, max_chars))
            cut = cut + 1 if cut > 0 else max_chars
            if buf:
                chunks.append(buf)
                buf = ""
            chunks.append(p[:cut].strip())
            p = p[cut:].strip()
        if len(buf) + len(p) + 1 <= max_chars:
            buf = (buf + "\n" + p).strip()
        else:
            if buf:
                chunks.append(buf)
            buf = p
    if buf:
        chunks.append(buf)
    return chunks

# 每段都要带完整固定提示词；这里只示意切分
chunks = split_long_text(original_text)
outputs = [rewrite_with_fixed_prompt(chunk) for chunk in chunks]
final = "\n\n".join(outputs)
```

> `rewrite_with_fixed_prompt` 就是「`INSTRUCTION_rewrite.txt` + 该段正文」发一次请求。代码只保证不超过 `max_chars`，短段按自然段保留，不要把相邻短段强行凑长。

### 切分参考

| 原文长度 | 建议段数 | 每段 |
|---|---:|---|
| ≤ 800 字 | 1 段 | 直接输入 |
| 800–1,500 字 | 2 段 | 400–700 字 |
| 1,500–3,000 字 | 3–5 段 | 500–700 字 |
| > 3,000 字 | 先按章/场分，再切 | 每段 500–700 字 |

### 如果必须整段一次输出等长正文

当前模型没有做“等长改写”训练，默认会压缩。可以在固定提示词后追加一句强约束，先小样本验证：

```text
本次必须逐段覆盖原文全部内容，不得省略、压缩或合并后半部分；输出长度应与原文相当，约 N 字。
```

这只是提示词层面的补救，不保证一定听话；生产环境仍建议按 500–700 字切段。若等长改写是硬需求，下一版需要用「输出/输入 0.9–1.1」的数据做微调。


## 推荐参数

| 项目 | 建议 |
|---|---|
| temperature | `0.7`；固定复现实验用 `0` |
| top_p | `0.9` |
| top_k | `50`（llama.cpp / vLLM 支持时） |
| max_tokens | 改写建议 ≤1200；扩写建议 ≤1600；不要设 300–500 的小上限 |
| 重复惩罚 | **建议 `repetition_penalty=1.08` 起步**；llama.cpp 使用 `--repeat-penalty 1.08` |
| 原文长度 | **500–800 汉字（约 330–530 tokens）**，另加 81 tokens 固定提示词；长文按 500–700 字切段 |
| 长文切分 | 按场景/段落切 500–700 字；不要整章一次性输入 |
| 输出长度 | 默认压缩改写，约为原文的 0.6–0.8 倍；要等长需显式要求并抽查 |

训练时 `max_length=2048` tokens，这是上下文上限，不是最佳工作区间。按训练分布，单次原文 500–800 汉字、输出 500–1,000 字最稳；原文超过 1,000 汉字后，照抄、复读、跑题、压缩和收尾不稳的风险都会上升。模型默认会压缩改写，不做等长保证；需要等长时按「长文怎么切」里的方法显式要求并抽查。

即使设置了重复惩罚，也必须把 `max_tokens` 作为硬上限；仍出现连续复读时，直接截断并重试或更换随机种子。不要只靠降低温度解决死循环。

## 格式与显存

| 项 | 本仓库 |
|---|---|
| 版本 | **FP8 W8A8** |
| 权重体积 | 约 29.5 GB（27.5 GiB） |
| 部署参考 | 建议 48GB 级 |
| 推理格式 | Hugging Face safetensors / vLLM |

- `model-00001-of-00003.safetensors` … `model-00003-of-00003.safetensors`：FP8 权重
- `config.json`、`hf_quant_config.json`、`model.safetensors.index.json`
- `tokenizer.json`、`tokenizer_config.json`、`chat_template.jinja`
- `INSTRUCTION_rewrite.txt`、`INSTRUCTION_expand.txt`、`SHA256SUMS`

## 已知限制

- **默认压缩改写，不是等长改写。** V12 训练数据里，800–950 汉字的输入，参考输出中位数约 539 字（约 0.63 倍）；模型会继承这个长度先验。输入 875 字输出 430–550 字属于训练分布内，不是上下文截断；要覆盖全文请按「长文怎么切」切段，或显式要求等长。
- 任务专用：不保证通用问答、代码、数学或其他领域能力。
- 改写可能保留过多原文，也可能压缩过度（尤其 800 字以上输入）；扩写也可能达不到请求倍率；应在目标文本上抽查。
- 长距离情节、人物关系和多章一致性需要上游切分与人工校对。
- 低比特量化可能放大复读、续写、照抄和压缩倾向。本次 Q3_K_M 的额外短输入测试出现了明显短句复读；IQ4_XS/Q3_K_M 也更容易提前收尾。先检查 `finish_reason` 和 `max_tokens`，再切小段。
- 本仓库不附带统一人工质量评测；请按自己的文体、篇幅和部署格式验收后再上线。

## 精度选择

BF16 是质量基准；FP8 和 NVFP4 已通过实际加载/生成，但本仓库暂不提供统一的人工质量分数。选择时优先看目标显存和实际文本验收。

## 全部版本

| 格式 | 定位 | 权重 | Hugging Face | ModelScope |
|---|---|---:|---|---|
| BF16 | 原精度基准 | 53.8 GB | [rewrite2-27b-bf16](https://huggingface.co/aikexue170/rewrite2-27b-bf16) | [rewrite2-27b-bf16](https://modelscope.cn/models/alkaid55555/rewrite2-27b-bf16) |
| FP8 W8A8 | 48GB 级部署 | 29.5 GB | [rewrite2-27b-fp8](https://huggingface.co/aikexue170/rewrite2-27b-fp8) | [rewrite2-27b-fp8](https://modelscope.cn/models/alkaid55555/rewrite2-27b-fp8) |
| NVFP4 W4A4 | 24GB 级 Blackwell | 18.9 GB | [rewrite2-27b-nvfp4](https://huggingface.co/aikexue170/rewrite2-27b-nvfp4) | [rewrite2-27b-nvfp4](https://modelscope.cn/models/alkaid55555/rewrite2-27b-nvfp4) |
| IQ4_XS GGUF | 16GB 优先质量 | 15.2 GB | [rewrite2-27b-iq4xs](https://huggingface.co/aikexue170/rewrite2-27b-iq4xs) | [rewrite2-27b-iq4xs](https://modelscope.cn/models/alkaid55555/rewrite2-27b-iq4xs) |
| Q3_K_M GGUF | 16GB 优先余量 | 13.3 GB | [rewrite2-27b-q3km](https://huggingface.co/aikexue170/rewrite2-27b-q3km) | [rewrite2-27b-q3km](https://modelscope.cn/models/alkaid55555/rewrite2-27b-q3km) |

## 训练概况

- 基座：Qwen3.8-27B 系列文本基座。
- 任务：中文小说改写与扩写。
- 数据：V12 SFT，50,293 对（25,647 改写 + 24,646 扩写）。
- 方法：LoRA rank 32、alpha 64，1 epoch，`max_length=2048`。
- 输出：合并后的 27B SFT 模型，再按各仓库格式量化或转换。

## 校验

交付文件清单和 SHA-256 见 `SHA256SUMS`。权重加载后建议先跑一条短改写、一条扩写，确认真实输出和显存占用，再接入生产。
