fix(ai-outfit): 标题解析改为「按逗号分割」,避开 Markdown 表格坑 (§19.23)
实测模型常返回 Markdown 表格(編號/標題/字元數估算 三列),按行解析会把 表头/分隔线/带 | 数字的行当成标题,写进 Excel A 全是「| 編號 | 標題 | … |」。 改用「提示词约定标题逗号分隔 + 解析按逗号拆分」,简单可靠。 - ai_text_service._clean_titles:从按行拆改为按逗号拆(半角 , / 全角 ,, 换行作兜底分隔),每段走 _clean_title_line 去空白/序号/引号、丢空 - config_service.DEFAULT_TITLE_PROMPT:改逗号分隔风格,明确禁 Markdown 表格/ 换行/序号/編號/字元數/引号/表情 - extract_text_from_response(取首条)、generate_texts/generate_titles/ _TitleWorker 均不变 测试:逗号分隔(全角/半角)→ 多条;逗号+换行混用都拆开;逐段去序号/引号; Markdown 表头单行不再炸成多条垃圾。全套 py37 通过(test_config_service 的 packaging 模板失败属并行 §19.13,与本改动无关)。离屏冒烟:逗号响应解析 + 按序回填 Excel A。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -47,16 +47,33 @@ class TestExtractText(unittest.TestCase):
|
||||
self.assertEqual(extract_text_from_response({"choices": []}), "")
|
||||
self.assertEqual(extract_text_from_response({}), "")
|
||||
|
||||
def test_extract_titles_multiline_to_list_cleaned(self):
|
||||
"""§17.1: 多行 → 多条,逐行去序号/引号、丢空行。"""
|
||||
def test_extract_titles_comma_separated(self):
|
||||
"""§19.23: 逗号分隔(全角/半角)→ 多条,逐段去空白。"""
|
||||
from services.ai_text_service import extract_titles_from_response
|
||||
|
||||
full = {"choices": [{"message": {"content": "甲款,乙款,丙款,丁款"}}]}
|
||||
self.assertEqual(extract_titles_from_response(full),
|
||||
["甲款", "乙款", "丙款", "丁款"])
|
||||
half = {"choices": [{"message": {"content": "甲款, 乙款 ,丙款"}}]}
|
||||
self.assertEqual(extract_titles_from_response(half), ["甲款", "乙款", "丙款"])
|
||||
|
||||
def test_extract_titles_mixed_comma_newline_and_cleaning(self):
|
||||
"""§19.23: 逗号 + 换行混用都拆开;逐段去序号/引号。"""
|
||||
from services.ai_text_service import extract_titles_from_response
|
||||
|
||||
data = {"choices": [{"message": {"content":
|
||||
"1. 「韩版宽松卫衣」\n\n2) 复古工装外套\n- 简约百搭T恤\n "}}]}
|
||||
"1. 「韩版宽松卫衣」,2) 复古工装外套\n- 简约百搭T恤"}}]}
|
||||
self.assertEqual(
|
||||
extract_titles_from_response(data),
|
||||
["韩版宽松卫衣", "复古工装外套", "简约百搭T恤"])
|
||||
|
||||
def test_extract_titles_markdown_table_not_exploded(self):
|
||||
"""§19.23: 表头单行无逗号 → 至多 1 条,不再炸成表头/分隔/多行垃圾。"""
|
||||
from services.ai_text_service import extract_titles_from_response
|
||||
|
||||
data = {"choices": [{"message": {"content": "| 編號 | 標題 | 字元數估算 |"}}]}
|
||||
self.assertEqual(len(extract_titles_from_response(data)), 1)
|
||||
|
||||
def test_extract_titles_empty_when_no_text(self):
|
||||
from services.ai_text_service import extract_titles_from_response
|
||||
|
||||
|
||||
Reference in New Issue
Block a user