feat(data_process): 优化问题生成提示语,提升问题自然度

- 系统提示语注入问题风格规则:像真实用户自然提问、避免"请描述/
  请说明/根据文档"等模板化开头、多条问题交替句式,并附正反示例;
  服务端注入对存量任务即时生效。
- 未配置提示语时的后端兜底从一句话充实为与前端同信息量的完整默认。
- 前端标准/思维链/DPO 三套内置默认提示语新增"问题表述自然"要求,
  旧版归档为 _4 常量并注册进 isBuiltInGenerationPrompt 迁移映射,
  自定义提示语不受影响。
- 新增兜底提示语专项测试与风格规则断言,生成测试 32/32 通过。
This commit is contained in:
caoxiaozhu
2026-08-18 15:48:36 +08:00
parent 91b4ae2287
commit 78fb894307
3 changed files with 119 additions and 7 deletions

View File

@@ -35,6 +35,8 @@ def test_generate_model_records_uses_prompt_auth_and_stable_split() -> None:
assert "客户反馈页面加载慢" in payload["messages"][1]["content"]
assert "你正在生成标准监督微调问答数据" in payload["messages"][0]["content"]
assert "禁止输出分析、推理过程" in payload["messages"][0]["content"]
assert "真实用户自然提出的问题" in payload["messages"][0]["content"]
assert "模板化开头" in payload["messages"][0]["content"]
return httpx.Response(
200,
json={
@@ -88,6 +90,59 @@ def test_generate_model_records_uses_prompt_auth_and_stable_split() -> None:
assert progress_updates == [(1, 1)]
def test_generate_model_records_falls_back_to_rich_default_prompt() -> None:
captured: dict[str, str] = {}
def handler(request: httpx.Request) -> httpx.Response:
payload = json.loads(request.content)
captured["system"] = payload["messages"][0]["content"]
captured["user"] = payload["messages"][1]["content"]
return httpx.Response(
200,
json={
"choices": [
{
"message": {
"content": json.dumps(
{
"items": [
{
"instruction": "平台如何控制不同角色的菜单可见性?",
"input": "",
"output": "按角色分配权限。",
}
]
},
ensure_ascii=False,
)
}
}
]
},
)
client = httpx.Client(transport=httpx.MockTransport(handler))
records = generate_model_records(
[{"id": "preview-1", "edited_content": "平台按角色分配菜单权限。"}],
model={
"name": "Qwen",
"online_model_name": "qwen-plus",
"api_url": "model.example",
},
config={},
task_id="task-fallback",
split={"train": 100, "validation": 0, "test": 0},
qa_pairs_per_item=1,
client=client,
)
assert len(records) == 1
assert records[0]["status"] == "valid"
assert "数据生成专家" in captured["system"]
assert "真实用户自然提出的问题" in captured["system"]
assert "平台按角色分配菜单权限。" in captured["user"]
def test_generate_model_records_builds_native_dpo_pair() -> None:
def handler(request: httpx.Request) -> httpx.Response:
payload = json.loads(request.content)