Update server.js via upload script - 2026-08-07 16:54:04

This commit is contained in:
mike 2026-08-07 16:54:20 +08:00
parent b2d708f278
commit b1e889dbe2
1 changed files with 8 additions and 1 deletions

View File

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