翻译三语锁定: 提示词显式声明只在中/日/英间翻译(非三语输入输出空串),targetLangOk对西里尔/阿拉伯/希伯来/泰/韩等三语外文字零容忍(任何目标语直接拒收→MISS langdrift→重试)

This commit is contained in:
liwenhao2 2026-09-15 10:59:36 +08:00
parent 635a06e1c5
commit c25f40927e
1 changed files with 12 additions and 1 deletions

View File

@ -2113,7 +2113,8 @@ class MainActivity : AppCompatActivity() {
engine.generate(
systemPrompt = "你是专业翻译。把给出的句子翻译成" + targetName +
"。只输出译文本身,不要解释、不要引号、不要抄写原文。" +
langHint + "。",
"你只在中文、日本語、English 三种语言之间翻译;" +
"输入不属于这三种语言时输出空字符串。" + langHint + "。",
userPrompt = segKeys[0].second,
maxNewTokens = budget, temperature = temp,
)
@ -2134,6 +2135,7 @@ class MainActivity : AppCompatActivity() {
"只输出JSON对象,键是编号字符串,值是译文," +
"例如 {\"1\":\"…\",\"2\":\"…\"}。不得增删编号。" +
"严禁把原文照抄为译文;无法翻译的段值输出空字符串。" +
"你只在中文、日本語、English 三种语言之间翻译。" +
langHint + "。",
userPrompt = "【文本】\n" + numbered,
maxNewTokens = budget, temperature = temp,
@ -2160,6 +2162,7 @@ class MainActivity : AppCompatActivity() {
e2.generate(
systemPrompt = "你是专业翻译。把给出的文本翻译成" +
targetName + "。只输出译文本身,不要解释。" +
"你只在中文、日本語、English 三种语言之间翻译。" +
langHint + "。",
userPrompt = st.second,
maxNewTokens = (st.second.length * 2 + 96)
@ -2242,6 +2245,14 @@ class MainActivity : AppCompatActivity() {
// ja 必须含足量假名;zh 不得有假名且繁体专用字 ≤1;en 不得含 CJK。
private val tradOnlyChars = "們這來說對學體豐華讓裡國變顯點單據觀"
private fun targetLangOk(tr: String): Boolean {
// 三语以外文字零容忍(漂移成俄语/韩语/阿语/泰语等时任何目标语都不该放行)
tr.forEach { c ->
val cp = c.code
if (cp in 0x400..0x4FF || cp in 0x600..0x6FF || cp in 0x590..0x5FF ||
cp in 0xE00..0xE7F || cp in 0x3130..0x318F ||
cp in 0xAC00..0xD7AF || cp in 0x1100..0x11FF
) return false
}
if (tr.length < 12) return true
return when (uiLanguage()) {
"ja" -> {