本页面中所有模型参数、代码、提示词可能与当前实际使用的版本存在差异。
| 来源 | SiliconFlow |
|---|---|
| model | Qwen3/Qwen3-8B |
| temperature | 0 |
| enable_thinking | False |
| response_format | {"type": "json_object"} |
import re
from bot.recent_changes_bot import RecentChangesBot
from llm.ai_client import chat_json
from utils.logger import logger
SENTENCE_END_PATTERN = re.compile(r'[。!?\n]')
class JieZhiCorrectionBot(RecentChangesBot):
def treat(self, page):
target = "截止"
replace = "截至"
judge_replace = "截止到" # 经测试可提高准确率
# 修复已知的常见错误
post_replacements = {
"截至时间": "截止时间",
"截至日期": "截止日期",
"截至期": "截止期",
}
typo_corrector = TypoCorrector(target, replace, judge_replace=judge_replace)
old_text = page.text
page.text = typo_corrector.process_text(page.text)
for old, new in post_replacements.items():
page.text = page.text.replace(old, new)
if old_text != page.text:
page.save(summary=f"【AI】[[User:Kr-bot#基于语义修正笔误|基于语义修正笔误]]:{target}→{replace}")
class TypoCorrector:
def __init__(self, target, replace, judge_target=None, judge_replace=None):
self.target = target
self.replace = replace
self.judge_target = judge_target or target
self.judge_replace = judge_replace or replace
self.target_len = len(target)
def process_text(self, text):
result = []
i = 0
text_len = len(text)
while i < text_len:
pos = text.find(self.target, i)
if pos == -1:
result.append(text[i:])
break
else:
result.append(text[i:pos])
start, end = self._find_sentence_boundaries(text, pos)
context_before = text[start:pos].replace('\n', '')
context_after = text[pos + self.target_len:end].replace('\n', '')
if llm_judge(context_before, self.judge_target, context_after, self.judge_replace):
result.append(f"{self.replace}")
else:
result.append(f"{self.target}")
i = pos + self.target_len
return ''.join(result)
def _find_sentence_boundaries(self, text, pos):
# 向前查找上一个句末符号(不含)
start = pos
while start > 0 and not SENTENCE_END_PATTERN.match(text[start - 1]):
start -= 1
# 向后查找下一个句末符号(含)
end = pos + self.target_len
text_len = len(text)
while end < text_len and not SENTENCE_END_PATTERN.match(text[end]):
end += 1
if end < text_len:
end += 1
return start, end
def llm_judge(context_before, target, context_after, replace):
piece = (f"[1] {context_before}{target}{context_after}\n"
f"[2] {context_before}{replace}{context_after}")
logger.info(piece)
prompt = """请对用户提供的两个文本片段的语法规范程度打分(0~10)。
# 输出格式
你的回答必须以JSON结构输出,包含以下字段:
{
"note1": 版本[1]的问题, str,
"score1": 对版本[1]的评分, int,
"note2": 版本[2]的问题, str,
"score2": 对版本[2]的评分, int
}"""
json_output = chat_json(system=prompt, user=piece)
return json_output["score2"] > json_output["score1"]
if __name__ == "__main__":
bot = JieZhiCorrectionBot()
bot.run()
------ 2025-10-28 16:41:13 ------
[system]
请对用户提供的两个文本片段的语法规范程度打分(0~10)。
# 输出格式
你的回答必须以JSON结构输出,包含以下字段:
{
"note1": 版本[1]的问题, str,
"score1": 对版本[1]的评分, int,
"note2": 版本[2]的问题, str,
"score2": 对版本[2]的评分, int
}
[user]
[1] 截止2019年4月2日星光舞台实装双子偶像[[久川凪]]和[[久川飒]]后,目前三属性偶像共计190人(不含韩国版三人)。
[2] 截止到2019年4月2日星光舞台实装双子偶像[[久川凪]]和[[久川飒]]后,目前三属性偶像共计190人(不含韩国版三人)。
[assistant]
{
"note1": "版本[1]中'截止'的使用不够规范,通常应使用'截至'来表示时间的截止点。",
"score1": 7,
"note2": "版本[2]中'截止到'的使用是正确的,符合现代汉语规范,表达清晰。",
"score2": 10
}
------ 2025-10-28 16:41:17 ------
[system]
请对用户提供的两个文本片段的语法规范程度打分(0~10)。
# 输出格式
你的回答必须以JSON结构输出,包含以下字段:
{
"note1": 版本[1]的问题, str,
"score1": 对版本[1]的评分, int,
"note2": 版本[2]的问题, str,
"score2": 对版本[2]的评分, int
}
[user]
[1] # 知道这场试音的时候是在报名截止日3天前,为了决定高三毕业后的进路用电脑搜索时偶然看见的。
[2] # 知道这场试音的时候是在报名截止到日3天前,为了决定高三毕业后的进路用电脑搜索时偶然看见的。
[assistant]
{
"note1": "版本[1]的语法问题主要在于'报名截止日3天前'的表达不够清晰,'截止日'和'3天前'之间缺少必要的连接词,容易引起歧义。",
"score1": 6,
"note2": "版本[2]的语法问题在于'报名截止到日'这个短语不正确,'截止到'通常用于表示截止到某个时间点,而'截止日'是固定搭配,'截止到日'不符合语法规范。",
"score2": 5
}
------ 2025-10-28 16:41:19 ------
[system]
请对用户提供的两个文本片段的语法规范程度打分(0~10)。
# 输出格式
你的回答必须以JSON结构输出,包含以下字段:
{
"note1": 版本[1]的问题, str,
"score1": 对版本[1]的评分, int,
"note2": 版本[2]的问题, str,
"score2": 对版本[2]的评分, int
}
[user]
[1] # 在截止至2020年11月的全部三次有四星广町七深的抽卡中分别在活动开始后一小时、半小时、半小时内三次光速吃井获得广町七深。
[2] # 在截止到至2020年11月的全部三次有四星广町七深的抽卡中分别在活动开始后一小时、半小时、半小时内三次光速吃井获得广町七深。
[assistant]
{
"note1": "版本1的语法存在一些问题,主要体现在'截止至'的重复使用,以及句子结构不够清晰,容易引起歧义。",
"score1": 5,
"note2": "版本2的语法问题更为严重,'截止到至'重复且不正确,句子结构混乱,表达不清晰。",
"score2": 3
}