fix(canvas): 角色提取 - 兼容带推理文本的 JSON 输出 (#164)

This commit is contained in:
dyhhhhh
2026-08-07 10:27:02 +08:00
committed by GitHub
parent e8b18bdc1b
commit 2b0d56f8e3
3 changed files with 97 additions and 12 deletions

View File

@@ -0,0 +1,45 @@
import { describe, expect, test } from "bun:test";
import { parseCharacterBreakdown } from "../src/lib/canvas/canvas-character-reference";
describe("parseCharacterBreakdown", () => {
test("忽略推理文字中的 JSON 碎片,读取最终角色契约对象", () => {
const result = `让我先分析正文。\n\naliases: [](正文未提供别名)\n\n最终结果:\n\n\`\`\`json
{
"characters": [
{
"name": "林夏",
"aliases": [],
"role": "女主角,26岁,加班晚归的都市上班族",
"appearance": "26岁东亚女性,面带疲态",
"clothing": "米色风衣,背深色帆布工作包",
"physique": "年轻女性常规体态",
"personality": "善良内敛,观察力强",
"props": "深色帆布工作包,磁吸小夜灯",
"consistencyPrompt": "26岁东亚女性,米色风衣,深色帆布工作包",
"multiViewPrompt": "正面、侧面、背面保持风衣和帆布包一致",
"voiceLanguage": "中文普通话",
"voiceAge": "26岁青年女性",
"voiceTimbre": "温和、略带疲惫感"
},
{
"name": "吴奶奶",
"aliases": [],
"role": "林夏的对门邻居,七十岁出头老人",
"appearance": "七十岁出头东亚老年女性,银灰短发",
"clothing": "深绿色针织开衫",
"physique": "老年女性体态",
"personality": "独立谨慎,感恩含蓄",
"props": "米色布袋和钥匙",
"consistencyPrompt": "银灰短发,深绿色针织开衫,米色布袋",
"multiViewPrompt": "正面、侧面、背面保持短发和开衫一致",
"voiceLanguage": "中文普通话",
"voiceAge": "七十岁出头老年女性",
"voiceTimbre": "语速偏慢的老年女性声线"
}
]
}
\`\`\``;
expect(parseCharacterBreakdown(result).map((character) => character.name)).toEqual(["林夏", "吴奶奶"]);
});
});