💻 源码
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)