feat: fix product suite reference prompt rule

This commit is contained in:
chengma
2026-07-17 17:27:08 +08:00
parent e4f0733333
commit e77b16ae2e
6 changed files with 48 additions and 39 deletions
+34 -24
View File
@@ -156,22 +156,44 @@ class ProductSuiteTests(unittest.TestCase):
self.assertEqual([11, 11], [spec["source_asset_id"] for spec in specs])
self.assertEqual([[12, 13], [12, 13]], [spec["reference_asset_ids"] for spec in specs])
def test_job_specs_use_fixed_reference_rule_for_one_three_and_eight_images(self):
settings = product_suite.default_suite_settings()
settings.update(
{
"per_image_primary": False,
"categories": {"白底图": 1, "场景图": 0, "卖点图": 0},
}
)
fixed_rule = "参考图规则:使用第一張上傳圖作為主商品圖,其餘圖片只作為參考。"
for image_count in (1, 3, 8):
specs = product_suite.build_job_specs(
[SimpleNamespace(id=index) for index in range(1, image_count + 1)],
"卖点",
settings,
"51100639510",
template_text=prompts.load_default_product_suite_prompt(),
)
self.assertEqual(1, len(specs))
self.assertIn(fixed_rule, specs[0]["prompt"])
self.assertNotIn("第2至", specs[0]["prompt"])
def test_reference_rule_follows_per_image_primary_setting(self):
template = prompts.load_default_product_suite_prompt()
settings = product_suite.default_suite_settings()
single_primary = product_suite.build_suite_prompt(
"卖点",
settings,
"场景图",
"51100639510",
template_text=template,
)
self.assertIn(
"参考图规则:当前上传图片是本任务唯一主参考图;保持商品主体、款式、颜色和关键细节准确;不编造用户与参考图均未提供的信息。",
single_primary,
)
self.assertNotIn("第2至", single_primary)
fixed_rule = "参考图规则:使用第一張上傳圖作為主商品圖,其餘圖片只作為參考。"
for reference_count in (0, 2, 7):
not_per_image_primary = product_suite.build_suite_prompt(
"卖点",
settings,
"场景图",
"51100639510",
reference_asset_count=reference_count,
template_text=template,
)
self.assertIn(fixed_rule, not_per_image_primary)
self.assertNotIn("第2至", not_per_image_primary)
settings["per_image_primary"] = True
per_image_primary = product_suite.build_suite_prompt(
@@ -189,18 +211,6 @@ class ProductSuiteTests(unittest.TestCase):
self.assertNotIn("第2至", per_image_primary)
self.assertNotIn("序号2", per_image_primary)
multi_reference = product_suite.build_suite_prompt(
"卖点",
product_suite.default_suite_settings(),
"场景图",
"51100639510",
reference_asset_count=2,
template_text=template,
)
self.assertIn(
"参考图规则:第1张为主商品图,请保持其主体、款式、颜色和关键细节准确;第2至3张仅作为风格、构图、场景或排版参考,不得替换主商品;不编造用户与参考图均未提供的信息。",
multi_reference,
)
self.assertEqual(7, product_suite.reference_asset_count({}, 9))
def test_product_suite_template_validation_and_custom_category_rendering(self):