From b1e889dbe214762eeb26f2420eadcb2c022cb57d Mon Sep 17 00:00:00 2001 From: mike Date: Fri, 7 Aug 2026 16:54:20 +0800 Subject: [PATCH] Update server.js via upload script - 2026-08-07 16:54:04 --- server.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index 8fa1a3f..0fdb01f 100644 --- a/server.js +++ b/server.js @@ -714,6 +714,12 @@ chargeCurrent(充电电流)、dimensions(尺寸)、netWeight(净重) 分成几组不同的值(比如1200/1600/2200共用一组尺寸,3000单独一组),这种情况必须先看清楚该行数值 和哪几个型号对齐,再把正确的那组数值填到对应型号的记录里,不能所有型号都填同一个值、也不能填错组。 +【特别注意不要丢弃"认不出属于哪个字段"的参数】上面这个JSON schema列出的都是已知产品类型常见的具名字段,但不同品牌、不同版本的规格表经常会出现一些没有被收录进这个schema的参数 +(比如"浮充电压"这种字段)。只要原文规格表里出现了某一行参数、但左侧标签在下面schema里找不到任何一个匹配的具名字段(也不属于机型拆分/两段式结构那些已经处理过的特殊情况), +绝对不能因为"没地方放"就把这行数据丢弃——把这一行的左侧原始标签和右侧数值原样填进 extraSpecs 数组里,格式为 {"label":"浮充电压","value":"13.7VDC/节"}, +表格里有几行匹配不上具名字段,就填几条。注意:如果某一行明明能对应上面某个具名字段(比如"20尺柜"对应container20ft),必须优先填那个具名字段, +不要重复放进extraSpecs;只有真的找不到对应具名字段的参数才放进extraSpecs。 + 【特别注意装箱数量容易被漏填】规格表如果出现"20尺柜/40尺柜/40高柜"这几行(通常在表格最下方,标注每种柜型能装多少台,如"1000PCS(无栈板)"), 必须提取到 container20ft / container40ft / container40hq 这三个字段里,不能因为在整个schema里排得靠后就跳过—— 提取完所有字段后,回头检查一遍原文里是否出现过"尺柜"或"PCS"这类字样,如果出现了但container20ft/container40ft/container40hq @@ -823,6 +829,7 @@ chargeCurrent(充电电流)、dimensions(尺寸)、netWeight(净重) "container20ft": "装箱数量:20尺柜能装多少台(无栈板),如 1000PCS;不适用/未提供就填空字符串", "container40ft": "装箱数量:40尺柜能装多少台(无栈板),如 2080PCS;不适用/未提供就填空字符串", "container40hq": "装箱数量:40高柜能装多少台(无栈板),如 2340PCS;不适用/未提供就填空字符串", + "extraSpecs": "数组,装那些在上面所有具名字段里都找不到匹配、但原文规格表里确实出现的参数行,每项格式 {\\"label\\":\\"原文左侧参数名\\",\\"value\\":\\"原文右侧数值\\"};没有这种情况就填空数组[],不要为了凑数编造内容", "sellingPoints": "如果原文里除了技术规格表之外,还有一些营销性质的卖点/主要特点描述(通常是几条带图标或项目符号的短句,比如\"Up-to-36A maximum input current\"、\"IP66 design\"这种面向客户宣传的亮点,不是纯技术参数表格里的数值),把这些提取出来,每条一行,用\\n分隔;如果原文只有技术规格表、没有这种营销卖点描述,就填空字符串,不要自己瞎编凑数", "notes": "其他有用但上面字段装不下的信息,一两句话,没有就填空字符串" } @@ -877,7 +884,7 @@ app.post('/api/ai/parse-catalog', requireAuth, aiLimiter, (req, res) => { const ocrText = imagePaths.length ? await ocrImages(imagePaths) : ''; const text = [ocrText, ...htmlTextParts].filter(Boolean).join('\n\n--- 下一份文件 ---\n\n'); - console.log('[AI导入] OCR文本长度:', text.length, '| 含"应用":', text.includes('应用'), '| 含"20尺柜":', text.includes('20尺柜'), '| 含"装箱":', text.includes('装箱')); + console.log('[AI导入] OCR/HTML文本长度:', text.length, '| 含"应用":', text.includes('应用'), '| 含"尺柜":', text.includes('尺柜')); if (!text) return res.status(400).json({ error: '没有识别/读取到任何文字内容,请确认文件清晰、内容完整' }); // 识别出来的文本太长就截断,避免超出模型输出预算;产品目录类文档核心信息通常靠前