import requests
import time
import random
import json
categories = [
{"name": "结婚登记与条件", "desc": "涉及结婚年龄、自愿原则、禁止近亲结婚、疾病限制、登记程序及法律效力等。"},
{"name": "夫妻权利义务", "desc": "涵盖共同财产管理、相互扶养义务、姓名权、生育权及日常家事代理权等。"},
{"name": "离婚程序与条件", "desc": "包括协议离婚冷静期、诉讼离婚标准、分居认定、感情破裂证明及调解程序等。"},
{"name": "财产分割", "desc": "涉及共同财产界定、个人财产保护、债务承担、房产分割规则及隐匿财产追责等。"},
{"name": "子女抚养与监护权", "desc": "包含抚养费计算标准、探视权实施、非婚生子女权益、抚养关系变更及教育责任等。"},
{"name": "家庭暴力与保护令", "desc": "涵盖暴力行为认定、人身保护令申请、证据收集、紧急庇护措施及刑事责任关联等。"},
{"name": "继承权与婚姻关系", "desc": "涉及配偶继承顺位、遗嘱效力、遗产分割冲突、再婚继承权及代位继承问题等。"},
{"name": "无效婚姻与可撤销婚姻", "desc": "包括重婚无效、胁迫婚姻撤销、隐瞒疾病撤销的程序及法律后果等。"},
{"name": "涉外婚姻", "desc": "涉及跨国婚姻登记、域外结婚效力认定、财产跨境分割及国际子女抚养公约适用等。"},
{"name": "法律责任与救济措施", "desc": "包含虚假登记处罚、拒不执行判决后果、损害赔偿计算及强制执行程序等。"}
]
SYSTEM_PROMPT_TEMPLATE = (
"你是一位婚姻法方面的专家,根据【{category}】的定义,"
"针对其中{category}方面的规定,向学生提供20道练习题,"
"你能提出哪些问题?每个问题单独一行,"
"只允许输出问题本身,不允许输出任何其他字符。"
)
def callServer(systemPrompt, userPrompt, model="deepseek-ai/DeepSeek-R1"):
url = "https://api.siliconflow.cn/v1/chat/completions"
headers = {
"Authorization": f"Bearer sk-cgteigkshpgccdbsfzefmvdjpaicjmydidliorsnjorbqclg",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": [
{"role": "system", "content": systemPrompt},
{"role": "user", "content": userPrompt}
],
"temperature": 0.6,
"max_tokens": 4000
}
success = True
msg = "OK"
think = ""
result = ""
try:
response = requests.post(url, json=payload, headers=headers)
response.raise_for_status()
think = response.json()['choices'][0]['message']['reasoning_content']
result = response.json()['choices'][0]['message']['content']
except Exception as e:
success = False
msg = "API调用异常:" + str(e)
return success, msg, think, result
def callServerStimu(systemPrompt, userPrompt, model="deepseek-ai/DeepSeek-R1"):
time.sleep(random.randint(2, 5))
success = True
msg = "OK"
think = 'reasoning_content of ' + userPrompt
result = '\n'.join([f'问题{i+1}:关于{userPrompt[:20]}的练习题?' for i in range(20)])
return success, msg, think, result
def generateQuestions(targetFile, useStimu=False):
questionList = []
questionId = 1
for cat in categories:
systemPrompt = SYSTEM_PROMPT_TEMPLATE.format(category=cat["name"])
userPrompt = (
f"类别:{cat['name']}\n"
f"描述:{cat['desc']}\n\n"
f"请根据以上类别描述,针对{cat['name']}方面的规定,生成20道练习题。"
)
if useStimu:
success, msg, think, result = callServerStimu(systemPrompt, userPrompt)
else:
success, msg, think, result = callServer(systemPrompt, userPrompt)
print(f"类别[{cat['name']}]: success={success}, msg={msg}")
if success:
lines = result.strip().split('\n')
for line in lines:
line = line.strip()
if len(line) > 0:
questionList.append({
"instruction": line,
"id": questionId
})
questionId += 1
else:
print(f" think: {think}")
print(f" result: {result}")
time.sleep(1)
with open(targetFile, 'w', encoding='utf-8') as f:
for q in questionList:
f.write(json.dumps(q, ensure_ascii=False) + '\n')
print(f"共生成 {len(questionList)} 道题目,已保存到 {targetFile}")
return questionList
if __name__ == "__main__":
targetFile = "../data/testDataTemp/queryData.jsonl"
generateQuestions(targetFile)