‘’‘plantext
def retrieve_relevant_poems(problem: str, knowledge_base: List[Dict], top_k: int = 3):
import re
# 定义标点符号模式
punctuation_pattern = r'[,。、;:!?""''()【】\s,._]'
# 提取核心诗句:第一行至少有3个下划线才使用第一行,否则保留全文
lines = problem.split('\n')
first_line = lines[0] if lines else problem
core_line = first_line if first_line.count('_') >= 3 else problem
clean_core = re.sub(punctuation_pattern, '', core_line)
# 生成3-gram
generate_trigrams = lambda text: [text[i:i+3] for i in range(len(text)-2)]
core_trigrams = set(generate_trigrams(clean_core))
candidates = []
for knowledge in knowledge_base:
paragraphs = knowledge["paragraphs"]
score = 0
# 3-gram匹配
for paragraph in paragraphs:
clean_paragraph = re.sub(punctuation_pattern, '', paragraph)
paragraph_trigrams = set(generate_trigrams(clean_paragraph))
overlap = len(core_trigrams & paragraph_trigrams)
score += overlap
candidates.append({"score": score, "poem": knowledge})
# 按相关度排序并返回top_k
candidates = sorted(candidates, key=lambda x: x["score"], reverse=True)
retrieved = []
for i in range(min(top_k, len(candidates))):
retrieved.append(candidates[i]["poem"])
return retrieved
’‘’
‘’‘plantext
def build_user_message(problem: str, retrieved_poems: List[Dict]) -> str:
if not retrieved_poems:
return problem
# 组装参考知识(只保留诗句)
user_msg = ""
for i, knowledge in enumerate(retrieved_poems, 1):
paragraphs = knowledge["paragraphs"]
user_msg += f"{i}. "
for para in paragraphs:
user_msg += para
user_msg += "\n"
# 组装完整消息
return f"【参考知识】\n{user_msg}\n【题目】\n{problem}"
’‘’
• 清晰标识"参考知识"和"题⽬"两个部分
• 只保留诗句内容,去除诗名和作者(避免⼲扰)
• 使⽤序号便于引⽤
• 简洁明了,让模型专注于诗句内容本⾝
参考实现:
代码块
‘’‘plantext
def build_system_prompt() -> str:
return """你是古诗词助⼿。请根据参考知识回答问题。
要求:
关键参数推荐:
• enable_thinking: True - 开启思考模式
• max_new_tokens: 4096 - 给予⾜够的⽣成空间
◦ 智能核⼼诗句提取:根据下划线数量判断是否只⽤第⼀⾏
◦ 完整标点清理:包含中英⽂标点和下划线,避免⽆⽤3-gram
◦ 只⽤核⼼诗句匹配:避免选项中诗名/作者的⼲扰
◦ 让模型基于提供的知识⽽⾮⾃⾝记忆
◦ 即使模型不熟悉某些诗词也能正确回答
◦ 答案有据可查,可追溯到具体诗词
◦ 明确要求 [Answer]: X 格式
◦ 禁⽌输出其他解释或说明
◦ 便于程序⾃动提取答案
◦ 强调"忽略题⽬中的提⽰性信息"
◦ 避免被题⽬中的误导信息影响
◦ 专注于参考知识和题⽬本⾝
• 每题 5 分,共 50 分(10道题 × 5分)
• 评测⽅式:提取的答案与期望答案完全匹配才得分
• 必须满⾜:
a. 模型输出包含 [Answer]: X 格式
b. 提取的答案与期望答案完全⼀致