提交 a546e977 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 cdf9c380
......@@ -25,7 +25,13 @@ const listOptions = {
filters: [{ label: '商品品类名称', prop: 'name', type: 'input', placeholder: '请输入类别名称' }],
columns: [
{ label: '商品品类名称', prop: 'name', align: 'left' },
{ label: '层级', prop: 'level' },
{
label: '层级',
prop: 'level',
computed({ row }) {
return parseInt(row.level) + 1
},
},
{
label: '状态',
prop: 'status',
......
......@@ -269,7 +269,13 @@ function batchSetReferencePrice() {
</el-button>
</div>
</div>
<el-button type="primary" plain :icon="Plus" @click="addSpec" :disabled="specCount >= maxSpecCount">
<el-button
type="primary"
plain
:icon="Plus"
@click="addSpec"
:disabled="specCount >= maxSpecCount"
v-if="specCount < 1">
添加规格({{ specCount }}/{{ maxSpecCount }}
</el-button>
</div>
......@@ -285,7 +291,7 @@ function batchSetReferencePrice() {
<el-form-item label="价格与库存" required>
<div class="form-tips" v-if="hasSpecs">根据规格自动生成,请为每个SKU填写价格和库存</div>
<div class="form-tips" v-else>请填写商品价格和库存</div>
<div class="batch-set-container" v-if="form.info.sku && form.info.sku.length > 0">
<div class="batch-set-container" v-if="form.info.sku && form.info.sku.length > 0" v-show="false">
<div class="batch-set-item">
<el-input v-model="batchPrice" placeholder="批量设置价格" type="number" style="width: 200px">
<template #prefix>¥</template>
......
......@@ -84,7 +84,7 @@ const handleChatSave = (url) => {
<div v-for="(item, i) in props.limit" :key="i">
<el-popover placement="top" width="220px" trigger="hover">
<ul class="upload-popover">
<li @click="handleOpen(i)">
<li @click="handleOpen(i)" v-if="false">
<i class="el-icon"><UploadFilled /></i>本地上传
</li>
<li @click="handleOpenDesign(i)" v-if="!isVideo">
......@@ -117,7 +117,7 @@ const handleChatSave = (url) => {
<template v-else>
<el-popover placement="top" width="160px" trigger="hover">
<ul class="upload-popover">
<li @click="handleOpen">
<li @click="handleOpen" v-if="false">
<i class="el-icon"><UploadFilled /></i>本地上传
</li>
<li @click="handleOpenDesign" v-if="!isVideo">
......
......@@ -4,6 +4,7 @@ import Demo from '../components/Demo.vue'
import ImprovementPlan from '../components/ImprovementPlan.vue'
import { getRecord, updateRecord } from '../api'
import { useChat } from '@ezijing/ai-vue'
import RecordViewText from './RecordViewText.vue'
const { isLoading, generateText } = useChat({ provider: 'volcano' })
......@@ -13,11 +14,12 @@ const props = defineProps({
})
const detail = ref(null)
const timelines = ref([])
const fetchRecord = async () => {
const res = await getRecord({ id: props.recordId })
const resDetail = res.data.detail
detail.value = { ...resDetail, live_info: JSON.parse(resDetail.live_info) }
timelines.value = JSON.parse(resDetail.subtitle)?.Result?.Sentences || []
try {
if (!resDetail.ai_analyze) {
handleAIScore()
......@@ -86,12 +88,16 @@ const handleAIScore = async () => {
const messages = [
{
role: 'system',
content: '你是一位专业的直播电商分析师,需要为选手的直播演练生成一份全面、详细的AI评价报告。',
content: `你是一位专业的直播电商分析师,现在需要你基于我给你的输入信息,为直播练习生成一份全面、详细、准确的直播评价报告。
**核心要求:**
1. 所有数据统计必须基于实际输入内容进行精确计算,不得估算或编造
2. 严格遵循输出格式规范,保持结构一致性
3. 分析客观专业,建议具体可执行`,
},
{
role: 'user',
content: `
[输入信息]
一、输入信息
- 直播时长:${detail.value?.live_duration}
- 字幕文本:${detail.value?.subtitle}
- 直播话术脚本:${detail.value?.live_practice_info.live_speech.content}
......@@ -99,313 +105,795 @@ const handleAIScore = async () => {
- 营销活动:${detail.value?.live_practice_info.live_speech.marketing_campaign}
- 商品信息:${JSON.stringify(detail.value?.live_practice_info.live_commodity)}
【输出要求】
二、输出要求与规则
2.1 输出格式
JSON 结构(必须严格遵守):
请基于以上信息生成结构化的 Markdown 报告,并保证 JSON 字段与现有前端对接保持一致:
{
"sellingPoints": "...卖点讲解覆盖情况的总结内容...",
"forbiddenWords": "...违禁词分析报告的 Markdown 内容...",
"speechSpeed": "...语速分析报告的 Markdown 内容...",
"optimizationTips": "...直播优化建议的 Markdown 内容..."
"sellingPoints": "...卖点讲解覆盖情况的完整 Markdown 内容...",
"forbiddenWords": "...违禁词分析报告的完整 Markdown 内容...",
"speechSpeed": "...语速分析报告的完整 Markdown 内容...",
"optimizationTips": "...直播优化建议的完整 Markdown 内容..."
}
报告中必须覆盖以下四大板块,并按照既定标题层级输出,避免新增或删除节点:
注意:
四个字段必须全部返回,值为字符串类型
每个字段的值为对应板块的完整 Markdown 内容
不允许修改字段名称,以保证前端对接一致性
2.2 数据统计规则(重要)
规则 1:口播字数统计
统计方法:
基于【字幕文本】内容进行统计
统计所有汉字、字母、数字的总数(不含标点符号和空格)
计算公式:口播字数 = len(re.sub(r'[^\w\u4e00-\u9fff]', '', 字幕文本))
示例:
字幕文本:"大家好,欢迎来到直播间!今天给大家带来一款超值面膜。"
口播字数:25 字(不含标点和空格)
规则 2:卖点讲解判断标准
判断方法:
逐一对比【预设卖点】和【字幕文本】
如果字幕中出现卖点的关键词(至少 3 个连续汉字匹配),则认为该卖点已讲解
如果卖点被提及且有相关描述(超过 15 字),则认为是有效讲解
示例:
预设卖点:"三重玻尿酸深层补水"
字幕中出现:"这款面膜含有三重玻尿酸,能够深层补水" 已讲解
字幕中出现:"含有玻尿酸成分" 未充分讲解 ✗(描述不足 15 字)
覆盖率计算:
覆盖率 = (已讲解卖点数量 / 预设卖点总数量) × 100%
规则 3:语速计算规则
计算方法:
基于【字幕文本】和【直播时长】计算
平均语速 = 口播字数 ÷ 直播时长(分钟)
分段语速:将直播时长按分钟切分,分别统计每分钟的字数
示例:
直播时长:15 分钟
口播字数:3000
平均语速:3000 ÷ 15 = 200 /分钟
语速评价标准:
正常:180-220 /分钟
偏快:221-240 /分钟
过快:>240 /分钟
⚠️ 偏慢:150-179 /分钟
过慢:<150 /分钟
规则 4:违禁词检测规则
检测方法:
基于【违禁词对照表】逐个检测【字幕文本】
记录每个违禁词的出现位置、次数、上下文
标注违禁词在原文中的位置(使用 ↑违禁 标记)
违禁词对照表(共 65 个):
| 类别 | 违禁词列表 |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| 绝对化用语(20个) | 最、最佳、最好、最优、最大、最小、最新、最先进、第一、首个、首选、唯一、独一无二、前无古人、极致、完美、顶级、至尊、终极、巅峰 |
| 夸大宣传(15个) | 100%、百分百、保证、必然、绝对、肯定、立竿见影、立即见效、马上见效、即刻、永久、终身、永远、一劳永逸、彻底 |
| 医疗用语(20个) | 治疗、治愈、医治、疗效、药用、处方、抗炎、消炎、杀菌、灭菌、防癌、抗癌、降血压、降血糖、降血脂、治痤疮、祛痘、去斑、修复、再生 |
| 虚假宣传(10个) | 国家级、世界级、全球级、宇宙级、最高级、最低价、史无前例、前所未有、销量第一、市场占有率第一 |
严重程度评估标准:
严重:≥5 个违禁词
中等:3-4 个违禁词
轻微:1-2 个违禁词
零违禁:0 个违禁词
三、输出示例
示例 1sellingPoints(卖点讲解覆盖情况)
## 卖点讲解覆盖情况
### 卖点讲解综合评价
**【整体表现】**
本次直播时长 15 分钟,累计口播 2847 字,平均语速约 190 /分钟。本次直播共讲解了 4 个卖点,覆盖率达到 80%(预设 5 个卖点)。
**已讲解卖点:**
1. 三重玻尿酸深层补水(讲解时长约 45 秒,内容充分)
2. 烟酰胺提亮肤色(讲解时长约 30 秒,内容充分)
3. 48 小时持久保湿(讲解时长约 35 秒,内容充分)
4. 医研共创配方(讲解时长约 25 秒,内容简略)
**未讲解卖点:**
1. 神经酰胺和角鲨烷修护屏障(完全未提及)
**整体评价:**
卖点讲解较为全面,重点突出,但遗漏了"神经酰胺和角鲨烷"这一重要卖点。前 3 个卖点讲解深入,但第 4 个卖点"医研共创配方"仅简单带过,缺乏具体说明。建议在二次直播中补充遗漏卖点,并对"医研共创配方"进行更详细的讲解,增加品牌背书和专业性。
示例 2forbiddenWords(违禁词分析报告)
情况 A:发现违禁词
## 违禁词分析报告
### 检测结果总览
- **共发现**3 个违禁词/敏感词
- **严重程度评估**:轻微
---
### 违禁词详细列表
**【违禁词 #1**
━━━━━━━━━━━━
- **违禁词**"最好"
- **类型**:绝对化用语
- **出现时间**:第 3 25
- **出现次数**1
- **上下文原文**"这款面膜效果最好,市场上独一无二的配方..."
↑违禁 ↑违禁
**【违禁词 #2**
━━━━━━━━━━━━
- **违禁词**"独一无二"
- **类型**:绝对化用语
- **出现时间**:第 3 27
- **出现次数**1
- **上下文原文**"这款面膜效果最好,市场上独一无二的配方..."
↑违禁 ↑违禁
**【违禁词 #3**
━━━━━━━━━━━━
- **违禁词**"100%"
- **类型**:夸大宣传
- **出现时间**:第 8 15
- **出现次数**1
- **上下文原文**"使用后 100% 能看到效果,保证满意..."
↑违禁 ↑违禁
---
### 违规情况统计
- **违禁词总数**3
- **违禁词出现总次数**3
**类型分布:**
- 绝对化用语:2 个(最好、独一无二)
- 夸大宣传:1 个(100%
- 医疗用语:0
- 虚假宣传:0
**高频违禁词:**
1. "最好" - 出现 1
2. "独一无二" - 出现 1
3. "100%" - 出现 1
情况 B:零违禁(无违禁词)
## 违禁词分析报告
### 检测结果总览
- **共发现**0 个违禁词/敏感词
- **严重程度评估**:零违禁
**【评价】**
本次直播用词规范,未发现任何违禁词或敏感词,合规性良好。继续保持专业、准确的表达方式。
示例 3speechSpeed(语速分析报告)
## 语速分析报告
### (一)语速分析
**整体语速数据:**
- **平均语速**195 /分钟
- **最快语速**258 /分钟(出现在第 5 30 秒)
- **最慢语速**142 /分钟(出现在第 9 15 秒)
- **语速波动**:±35 /分钟(标准差)
---
### (二)语速标准参考
1. **理想语速**180-220 /分钟
2. **偏快语速**221-240 /分钟
3. **过快语速**>240 /分钟
4. **偏慢语速**150-179 /分钟 ⚠️
5. **过慢语速**<150 /分钟
---
### (三)语速曲线分析
**【语速统计区间】**
| 时间段 | 语速(/) | 评价 | 对应环节 |
|:---:|:---:|:---:|:---:|
| 00:00-01:00 | 188 | ✅正常 | 开场白 |
| 01:00-02:00 | 192 | ✅正常 | 品牌介绍 |
| 02:00-03:00 | 165 | ⚠️偏慢 | 品牌介绍 |
| 03:00-04:00 | 195 | ✅正常 | 产品讲解-开始 |
| 04:00-05:00 | 225 | ⚡偏快 | 产品讲解-成分 |
| 05:00-06:00 | 258 | ❌过快 | 产品讲解-卖点 |
| 06:00-07:00 | 210 | ✅正常 | 产品讲解-效果 |
| 07:00-08:00 | 198 | ✅正常 | 产品讲解-价格 |
| 08:00-09:00 | 155 | ⚠️偏慢 | 互动环节 |
| 09:00-10:00 | 235 | ⚡偏快 | 促销推动 |
| 10:00-11:00 | 228 | ⚡偏快 | 促销推动 |
| 11:00-12:00 | 205 | ✅正常 | 催单话术 |
| 12:00-13:00 | 190 | ✅正常 | 组合优惠 |
| 13:00-14:00 | 185 | ✅正常 | 结束语 |
| 14:00-15:00 | 178 | ⚠️偏慢 | 结束语 |
---
### (四)语速异常时间段详细分析
**【异常片段 #1**
━━━━━━━━━━━━
- **时间**05:00-06:001 分钟)
- **问题**:语速过快
- **数据**258 /分钟(超标准 38 /分钟)
- **对应内容**:产品卖点讲解-三重玻尿酸成分介绍
**【异常片段 #2**
━━━━━━━━━━━━
- **时间**09:00-11:002 分钟)
- **问题**:持续偏快
- **数据**231 /分钟(超标准 11 /分钟)
- **对应内容**:促销推动环节
**【异常片段 #3**
━━━━━━━━━━━━
- **时间**02:00-03:001 分钟)
- **问题**:语速偏慢
- **数据**165 /分钟(低于标准 15 /分钟)
- **对应内容**:品牌介绍环节
**【异常片段 #4**
━━━━━━━━━━━━
- **时间**08:00-09:001 分钟)
- **问题**:语速偏慢
- **数据**155 /分钟(低于标准 25 /分钟)
- **对应内容**:互动环节
---
### (五)语速变化趋势分析
**【整体趋势】**
本次直播语速呈现"波浪形"变化。开场语速正常(188-192 /分钟),品牌介绍后段出现偏慢(165 /分钟)。在产品讲解环节(4-6 分钟)明显加快,尤其在卖点讲解时达到 258 /分钟的峰值。互动环节放慢至 155 /分钟,促销环节再次加快至 231 /分钟,结束语恢复正常但略显拖沓(178 /分钟)。整体语速波动较大(±35 /分钟),稳定性不足。
**【问题诊断】**
- **主要问题**:在需要重点讲解的环节(产品卖点)语速反而过快(258 /分钟),导致观众难以吸收关键信息,影响转化效果。
- **次要问题**:语速波动过大(±35 /分钟),缺乏整体节奏控制,部分环节过快、部分环节过慢,观看体验不够流畅。
示例 4optimizationTips(直播优化建议)
## 直播优化建议
### 综合评价
本次直播整体表现良好,在卖点讲解和品牌介绍方面表现突出,但在语速控制、互动频率和促单技巧方面还有较大提升空间。以下从 5 个维度提出具体优化建议:
---
### 1、语速与节奏
**【现状描述】**
平均语速约 195 /分钟,整体适中。但在产品讲解环节(4-6 分钟)语速明显过快,达到 258 /分钟,在互动环节又过于缓慢(155 /分钟)。语速波动较大(±35 /分钟),节奏不够稳定。
**【存在问题】**
- **问题 1**:产品讲解环节(5:00-6:00)语速过快,达到 258 /分钟,观众可能跟不上,尤其是"三重玻尿酸"等专业术语
- **问题 2**:停顿不当,在关键卖点"48 小时持久保湿"后没有留出思考时间,直接进入下一个卖点
- **问题 3**:节奏不稳定,从产品讲解的 258 /分钟突然降到互动环节的 155 /分钟,时快时慢,影响观看体验
**【改进建议】**
- **具体建议 1**:在讲解"三重玻尿酸成分"等专业内容时,有意识放慢语速至 200 /分钟以内,并在关键数据(如"48 小时")后停顿 1-2 秒,让观众充分理解
- **具体建议 2**:使用"那么""接下来""大家注意"等连接词自然控制节奏,在卖点之间增加过渡,避免讲解过于密集
- **具体建议 3**:提前充分练习话术脚本,熟记核心内容,避免因不熟练导致语速失控。建议每天练习 2-3 遍,直到能够流畅表达
---
### 2、互动能力
**【现状描述】**
互动频率不足,整场 15 分钟直播共发起 3 次互动,回应了 1 条观众评论。互动形式单一,主要为"点赞破万送福利",缺乏创意和吸引力。
**【存在问题】**
- **问题 1**:互动频率过低,平均每 5 分钟才有 1 次互动,直播间氛围不够活跃,观众参与感不强
- **问题 2**:互动问题设计不够吸引人,"点赞破万"的门槛过高(当前仅 3500 点赞),观众参与度不高
- **问题 3**:对观众评论回应不够及时,评论区有 5 "敏感肌能用吗"的提问,但直播中未及时回应,错过了互动机会
- **问题 4**:抽奖活动执行不到位,仅在开场提了一次"点赞破万抽奖",后续未再强调,未能充分调动观众积极性
**【改进建议】**
- **具体建议 1**:增加互动频率,建议每 3-5 分钟发起一次互动,如"有宝宝用过玻尿酸面膜吗?效果如何?扣 1 分享一下"
- **具体建议 2**:设计更有趣的互动问题和阶梯式目标,如"猜猜这款面膜的秒杀价是多少?猜中送小样!""点赞 5000 抽 1 人,点赞 8000 抽 3 人"
- **具体建议 3**:安排专人实时监控评论区,对高频问题立即回应,如"敏感肌能用吗?可以的,这款面膜不含酒精和香精,敏感肌友好"
- **具体建议 4**:在点赞数接近目标时,实时播报进度并强调"还差 500 个就到 5000 啦,大家帮忙点一下,马上抽奖!"营造紧迫感和参与感
---
### 3、卖点讲解能力
**【现状描述】**
共讲解了 4 个卖点,覆盖率 80%(预设 5 个)。讲解较为清晰,逻辑性强,但遗漏了 1 个重要卖点,部分卖点讲解深度不够。
**【存在问题】**
- **问题 1**:卖点讲解不够深入,对"三重玻尿酸"的概念仅说"含有三重玻尿酸",未解释"大中小分子"的具体作用
- **问题 2**:缺少具体案例和数据支撑,"48 小时持久保湿"未引用"真人实测数据",说服力不足
- **问题 3**:遗漏重要卖点"神经酰胺和角鲨烷修护屏障",导致产品价值传达不完整
- **问题 4**"医研共创配方"仅简单带过,未说明具体合作机构或背书,专业性不足
**【改进建议】**
- **具体建议 1**:讲解"三重玻尿酸",要详细说明"大中小分子玻尿酸,分别作用于肌肤不同层次:大分子在表面锁水、中分子在中层补水、小分子深层渗透"
- **具体建议 2**:引用具体数据增强说服力,如"真人实测 48 小时后肌肤水润度依然提升 40%,持久保湿看得见"
- **具体建议 3**:补充遗漏卖点,在下次直播中加入"神经酰胺和角鲨烷双重修护,强韧肌肤屏障,敏感肌也能安心用"
- **具体建议 4**:将所有 5 个卖点都讲解到位,每个卖点至少讲解 30 秒,按照"成分→功效→效果→数据支撑"的逻辑顺序展开
---
### 4、促单能力
**【现状描述】**
促单环节共 2 次(8 分钟和 10 分钟各 1 次),促单话术包括"秒杀价 69 元""限时限量"。促单话术力度一般,缺乏紧迫感营造。
**【存在问题】**
- **问题 1**:促单话术力度不够,缺乏紧迫感营造,仅说"秒杀价 69 元",未强调"限时""限量"
- **问题 2**:未充分强调价格优惠对比,"秒杀价 69 元"只提了 1 次,未与原价 99 元形成对比,价值感不足
- **问题 3**:限时限量信息传达不清,未说明"秒杀还剩多少时间""还剩多少库存",未能激发购买欲望
- **问题 4**:组合优惠活动讲解不够清晰,"买 10 片装送 2 片"未强调"相当于 12 片只要 69 元",观众可能不理解优惠力度
**【改进建议】**
- **具体建议 1**:在秒杀环节强调紧迫感,"只剩最后 5 分钟!只有 100 份!现在还剩 37 份!手慢无!"配合倒计时营造氛围
- **具体建议 2**:多次强调价格对比,"平时 99 元,今天秒杀只要 69 元,一片才 6.9 元,比超市便宜一半,太划算了!"
- **具体建议 3**:在促销环节使用催单话术,实时播报"已经有 156 位宝宝下单了,还在犹豫的宝宝抓紧啦!"营造从众心理
- **具体建议 4**:清晰讲解组合优惠,"买 10 片装送 2 片,相当于 12 片只要 69 元,平均一片不到 6 块钱,比单买划算多了!"
---
### 5、整体表现力
**【现状描述】**
仪表整洁,妆容得体,符合直播要求。肢体语言略显僵硬,镜头感一般,眼神交流不够。整体略显紧张,自信度有待提升。
**【存在问题】**
- **问题 1**:肢体语言不够丰富,全程较为僵硬,双手多数时间放在身体两侧,缺乏手势配合
- **问题 2**:眼神交流不够,经常低头看脚本或商品,与镜头(观众)的眼神交流不足,亲和力不够
- **问题 3**:产品展示不够充分,讲解"三重玻尿酸"时未将产品包装靠近镜头展示成分表和文字说明
- **问题 4**:整体略显紧张,语气不够自信,多次出现"嗯""那个"等口头禅,影响专业度
**【改进建议】**
一、卖点讲解覆盖情况
卖点讲解综合评价:
【整体表现】
【用几句话总结卖点讲解的整体情况,如:本次直播时长XX,累计口播XX字,本次直播共讲解了X个卖点,覆盖率达到XX%。讲解较为全面/部分遗漏,重点突出/略显平淡。建议在二次直播中...
- **具体建议 1**:增加手势配合讲解,如讲"三重玻尿酸"时用手势比划"三层",讲"深层补水"时做由外向内的手势,增强表现力
- **具体建议 2**:尽量看镜头而不是脚本,熟记话术核心内容,眼神交流要自然,把镜头想象成一位朋友,用对话的方式讲解
- **具体建议 3**:展示产品时,将产品正面靠近镜头 5-10 秒,展示包装细节、品牌 logo 和成分表文字说明,增强信任感
二、违禁词分析报告
- **具体建议 4**:直播前做好充分准备,深呼吸放松,告诉自己"我准备充分,一定可以"。减少口头禅,可以用短暂停顿代替"嗯""那个"
检测结果总览:
共发现:X 个违禁词/敏感词
重程度评估:严重/中等/轻微/零违禁
四、特别注意事项
4.1 数据准确性要求
格统计:所有数字必须基于实际输入数据精确计算,不得估算
(严重程度评估标准:严重≥5 个,中等 3-4 个,轻微 1-2 个,零违禁 0 个。此说明不写入报告。)
逻辑一致:卖点覆盖率、语速数据、违禁词数量必须前后一致
违禁词详细列表:(若为零违禁,则不展示下面的统计内容)
可验证性:统计结果应可通过输入数据反向验证
【违禁词 #1】━━━━━━━━━━━━
违禁词:"【具体违禁词】"
类型:绝对化用语 夸大宣传 医疗用语 虚假宣传
出现时间:第XX
出现次数:X
4.2 格式规范要求
标题层级:严格按照示例中的标题层级(#、##、###)输出
上下文原文:
"【引用完整句子,用红色标注违禁词】"
例:"这款面膜效果最好,市场上独一无二的配方..."
↑违禁 ↑违禁
符号一致:使用相同的分隔符(━━━)和图标(✅、❌、⚡、⚠️)
【违禁词 #2】━━━━━━━━━━━━
违禁词:"【具体违禁词】"
类型:绝对化用语 夸大宣传 医疗用语 虚假宣传
出现时间:第XX
出现次数:X
表格对齐:表格内容居中对齐(:---: 语法)
上下文原文:
"【引用完整句子】"
例:"这款面膜能够治疗痘痘,快速修复受损肌肤..."
↑违禁
不增不减:不允许新增或删除节点,保持结构一致
【违禁词 #3】━━━━━━━━━━━━
违禁词:"【具体违禁词】"
类型:绝对化用语 夸大宣传 医疗用语 虚假宣传
出现时间:第XX
出现次数:X
4.3 零违禁词特殊处理
当违禁词数量为 0 时:
上下文原文:
"【引用完整句子】"
例:"使用后100%能看到效果,保证满意..."
↑违禁 ↑违禁
(依此类推,列出所有违禁词...
隐藏内容:不展示"违禁词详细列表""违规情况统计""高频违禁词"
保留内容:保留"检测结果总览"并显示"零违禁"评价
违规情况统计(若为零违禁,则不展示下面的统计内容)
正向激励:给予正面评价"本次直播用词规范"
违禁词总数:X
违禁词出现总次数:X
4.4 风格要求
语言风格:专业、客观、具体,避免空泛和模糊表达
类型分布:
- 绝对化用语:X个(如:最、第一、唯一、极致、顶级、完美等)
- 夸大宣传:X个(如:100%、必然、保证、绝对、立即见效等)
- 医疗用语:X个(如:治疗、疗效、药用、治愈、医治等)
- 虚假宣传:X个(如:国家级、世界级、最高级、最低价等)
数据支撑:每个观点必须有具体数据或案例支撑
高频违禁词:
1. "【违禁词】" - 出现X
2. "【违禁词】" - 出现X
3. "【违禁词】" - 出现X
建议可执行:优化建议必须具体可操作,避免"注意""努力"等模糊建议
避免编造:如遇缺失信息,使用"暂无数据",不得编造
完整生成流程
数据统计阶段
常见违禁词快速对照表(不需要体现在报告里面)
类别1:绝对化用语(共20个)
最、最佳、最好、最优、最大、最小、最新、最先进
第一、首个、首选、唯一、独一无二、前无古人
极致、完美、顶级、至尊、终极、巅峰
统计字幕文本总字数(口播字数)
类别2:夸大宣传(共15个)
100%、百分百、保证、必然、绝对、肯定
立竿见影、立即见效、马上见效、即刻
永久、终身、永远、一劳永逸、彻底
计算平均语速和分段语速
类别3:医疗用语(共20个)
治疗、治愈、医治、疗效、药用、处方
抗炎、消炎、杀菌、灭菌、防癌、抗癌
降血压、降血糖、降血脂、治痤疮、祛痘、去斑
修复、再生(需谨慎使用)
检测违禁词并记录位置
类别4:虚假宣传(共10个)
国家级、世界级、全球级、宇宙级
最高级、最低价、史无前例、前所未有
销量第一、市场占有率第一
判断卖点讲解情况并计算覆盖率
内容生成阶段
按照输出示例生成四个板块的 Markdown 内容
三、直播优化建议
保证数据的一致性和准确性
综合评价:
【用几句话总结本次直播的整体表现,如:本次直播整体表现良好/一般/优秀,在卖点讲解和互动方面表现突出,但在语速控制和促单技巧方面还有提升空间。
遵循格式规范
以下 5 个维度需逐项输出:
1、语速与节奏
JSON 封装阶段
【现状描述】详细描述当前语速和节奏的表现,如:平均语速约XXX/分钟,整体偏快/适中/偏慢。在产品讲解环节语速过快,在互动环节节奏较好。
将四个板块内容分别赋值给对应字段
【存在问题】示例如下:
问题1,如:产品讲解环节(XX-XX秒)语速过快,达到XXX/分钟,观众可能跟不上
问题2,如:停顿不当,关键信息没有留出思考时间
问题3,如:节奏不稳定,时快时慢,影响观看体验
检查 JSON 格式正确性
【改进建议】示例如下:
具体建议1,如:在讲解三重玻尿酸成分时,有意识放慢语速至200/分钟以内,并在关键数据后 停顿1-2
具体建议2,如:使用"那么""接下来"等连接词自然控制节奏
具体建议3,如:提前充分练习话术脚本,避免因不熟练导致语速失控
返回完整 JSON 对象
(语速标准参考内容需保留原文,不写入报告主体)
语速标准参考
理想语速:180-220 /分钟
- 观众能够轻松跟上
- 有足够时间理解信息
- 节奏舒适,不紧不慢
偏快语速:221-240 /分钟
- 部分观众可能跟不上
- 影响信息吸收效果
- 建议适当放慢
过快语速:>240 /分钟
- 大部分观众难以跟上
- 严重影响直播效果
- 必须改进
偏慢语速:150-179 /分钟
- 节奏稍显拖沓
- 可能影响直播间活跃度
- 建议适当加快
过慢语速:<150 /分钟
- 节奏过于拖沓
- 观众容易失去耐心
- 必须改进
输出质量检查清单
在生成最终结果前,请自检:
[ ] 口播字数是否基于字幕文本精确统计?
2、互动能力
[ ] 卖点讲解数量与实际分析是否一致?
【现状描述】详细描述当前互动情况,如:互动频率一般/良好/不足,共发起X次互动,回应了X条观众评论。互动形式包括...
[ ] 语速数据计算是否正确(字数÷时长)?
【存在问题】示例如下:
问题1,如:互动频率过低,整场 直播仅发起X次互动,直播间氛围不够活跃
问题2,如:互动问题设计不够吸引人,观众参与度不高
问题3,如:对观众评论回应不够及时,错过了多次互动机会
问题4,如:抽奖活动执行不到位,未能充分调动观众积极性
[ ] 违禁词数量统计是否准确?
【改进建议】示例如下:
具体建议1,如:增加互动频率,建议每3-5分钟发起一次互动,如"有宝宝用过玻尿酸面膜吗?效果如何?"
具体建议2,如:设计更有趣的互动问题,如"猜猜这款面膜的秒杀价是多少?猜中送小样!"
具体建议3,如:及时关注评论区,对高频问题立即回应,如"敏感肌能用吗?"
具体建议4,如:在点赞数接近目标时,强调"还差XX个就到10000啦,大家帮忙点一下!"营造参与感
[ ] 四个 JSON 字段是否全部返回?
[ ] Markdown 格式是否符合示例规范?
[ ] 表格是否居中对齐?
3、卖点讲解能力
【现状描述】详细描述当前卖点讲解情况,如:共讲解了X个卖点,覆盖率XX%。讲解较为清晰/逻辑性强/略显混乱。
【存在问题】示例如下:
问题1,如:卖点讲解不够深入,对"三重玻尿酸"的概念解释不清
问题2,如:缺少具体案例和数据支撑,说服力不足
问题3,如:卖点讲解顺序混乱,没有逻辑层次
问题4,如:遗漏重要卖点"神经酰胺和角鲨烷",影响产品价值传达
【改进建议】示例如下:
具体建议1,如:讲解"三重玻尿酸"时,要说明"大中小分子玻尿酸,分别作用于肌肤不同层次,大分子锁水、中分子补水、小分子深层渗透"
具体建议2,如:引用具体数据"真人实测48小时后肌肤水润度依然提升40%"增强说服力
具体建议3,如:按照"成分→功效→效果→价格"的逻辑顺序讲解卖点
具体建议4,如:将所有5个卖点都讲解到位,每个卖点至少讲解30
4、促单能力
【现状描述】详细描述当前促单话术使用情况,如:促单环节共X次,促单话术包括...促单效果一般/良好/不足。
【存在问题】示例如下:
问题1,如:促单话术力度不够,缺乏紧迫感营造
问题2,如:未充分强调价格优惠,"秒杀价69元"只提了一次
问题3,如:限时限量信息传达不清,未能激发购买欲望
问题4,如:组合优惠活动讲解不够清晰,观众可能不理解
【改进建议】示例如下:
具体建议1,如:在秒杀环节强调"只剩最后5分钟!只有100份!现在还剩XX份!"营造紧迫感
具体建议2,如:多次强调价格对比"平时99元,今天秒杀只要69元,一片才6.9元,太划算了!"
具体建议3,如:在促销环节使用催单话术"已经有XX位宝宝下单了,还在犹豫的宝宝抓紧啦!"
具体建议4,如:清晰讲解组合优惠"买10片装送2片,相当于12片只要69元,比单买划算多了!"
5、整体表现力
【现状描述】详细描述整体表现,如:仪表整洁,妆容得体。肢体语言自然/略显僵硬。镜头感良好/需加强。整体自信度较好/略显紧张。
【存在问题】示例如下:
问题1,如:肢体语言不够丰富,全程较为僵硬
问题2,如:眼神交流不够,经常低头看脚本
问题3,如:产品展示不够充分,没有特写展示
问题4,如:整体略显紧张,影响自信度
【改进建议】示例如下:
具体建议1,如:增加手势配合讲解,如讲"三重玻尿酸"时用手势比划"三层"
具体建议2,如:尽量看镜头而不是脚本,熟记话术内容
具体建议3,如:展示产品时,将产品靠近镜头,展示包装细节和文字说明
具体建议4,如:直播前深呼吸放松,告诉自己"我准备充分,一定可以"
四、语速分析报告
(一)语速分析
整体语速数据
平均语速:XXX /分钟
最快语速:XXX /分钟(出现在第XX秒)
最慢语速:XXX /分钟(出现在第XX秒)
语速波动:XX /分钟(标准差)
(二)语速标准参考
1、理想语速:180-220 /分钟
2、偏快语速:221-240 /分钟
3、过快语速:>240 /分钟
4、偏慢语速:150-179 /分钟
5、过慢语速:<150 /分钟
(三)语速曲线分析
【语速统计区间】(输出为表格,表头保持不变,以直播实际实际的语速数据来进行展示,展示每分钟的语速分布情况,下表为展示表格的示例内容,表格里面的内容居中对齐)
时间段 | 语速(/) | 评价 | 对应环节
---------------|-------------|--------|-------------
00:00-01:00 | XXX | ✅正常 | 开场白
01:00-02:00 | XXX | ✅正常 | 品牌介绍
02:00-03:00 | XXX | ⚠️偏慢 | 品牌介绍
03:00-04:00 | XXX | ✅正常 | 产品讲解-开始
04:00-05:00 | XXX | ⚡偏快 | 产品讲解-成分
05:00-06:00 | XXX | ❌过快 | 产品讲解-卖点
06:00-07:00 | XXX | ✅正常 | 产品讲解-效果
07:00-08:00 | XXX | ✅正常 | 产品讲解-价格
08:00-09:00 | XXX | ⚠️偏慢 | 互动环节
09:00-10:00 | XXX | ⚡偏快 | 促销推动
10:00-11:00 | XXX | ⚡偏快 | 促销推动
11:00-12:00 | XXX | ✅正常 | 催单话术
12:00-13:00 | XXX | ✅正常 | 组合优惠
13:00-14:00 | XXX | ✅正常 | 结束语
14:00-15:00 | XXX | ✅正常 | 结束语
(四)语速异常时间段详细分析
示例如下:
【异常片段 #1】━━━━━━━━━━━━
时间:XX:XX-XX:XXX分钟)
问题:语速过快
数据:XXX /分钟(超标准XX/分钟)
对应内容:【具体内容,如:产品卖点讲解-三重玻尿酸成分介绍】
【异常片段 #2】━━━━━━━━━━━━
时间:XX:XX-XX:XXX分钟)
问题:语速过快/持续偏快
数据:XXX /分钟(超标准XX/分钟)
对应内容:【具体内容,如:促销推动环节】
【异常片段 #3】━━━━━━━━━━━━
时间:XX:XX-XX:XXX分钟)
问题:语速过慢
数据:XXX /分钟(低于标准XX/分钟)
对应内容:【具体内容,如:品牌介绍环节】
【异常片段 #4】━━━━━━━━━━━━
时间:XX:XX-XX:XXX分钟)
问题:语速过慢
数据:XXX /分钟(低于标准XX/分钟)
对应内容:【具体内容,如:互动环节】
(五)语速变化趋势分析
【整体趋势】描述语速在整场直播中的变化趋势,如:开场语速正常,在产品讲解环节(4-6分钟)明显加快,互动环节放慢,促销环节又再次加快,结束语恢复正常。整体呈现"波浪形"变化,稳定性不足。
【问题诊断】示例如下:
主要问题:【如:在需要重点讲解的环节(产品卖点)语速反而过快,影响效果】
次要问题:【如:语速波动过大,缺乏整体节奏控制】
# 风格与注意事项
- 语言保持专业、客观、具体,结合提供的数据或示例描述。
- 如遇缺失信息,可使用“暂无数据”或根据上下文合理推断,但避免胡乱编造。
- 若违禁词为零,自动隐藏“违禁词详细列表”“违规情况统计”“高频违禁词”等相关段落。
- JSON 输出中的四个字段必须全部返回,值为字符串类型,内容为对应 Markdown 片段。
- 不允许调整前端依赖的标题、排版符号、表格结构与占位变量名称。`,
[ ] 数据前后是否一致无矛盾?`,
},
]
const result = await generateText({ messages, response_format: { type: 'json_object' } })
const aiAnalyze = result.content
.replaceAll('一、卖点讲解覆盖情况', '')
.replaceAll('二、违禁词分析报告', '')
.replaceAll('三、直播优化建议', '')
.replaceAll('四、语速分析报告', '')
.replaceAll('卖点讲解覆盖情况', '')
.replaceAll('违禁词分析报告', '')
.replaceAll('直播优化建议', '')
.replaceAll('语速分析报告', '')
await updateRecord({ id: props.recordId, ai_analyze: aiAnalyze })
fetchRecord()
}
......@@ -418,7 +906,11 @@ function formatDuration(seconds) {
</script>
<template>
<div class="live-view" v-if="detail" v-loading="isLoading" element-loading-text="AI分析中...">
<div
class="live-view"
v-if="detail"
v-loading="isLoading"
element-loading-text="AI分析中,大约需要1分钟,请耐心等待...">
<AppCard>
<div class="live-info">
<div class="live-info-header">
......@@ -492,7 +984,10 @@ function formatDuration(seconds) {
</div>
</AppCard>
<AppCard title="卖点讲解覆盖情况">
<ul class="live-ul">
<template #header-aside>
<RecordViewText :timelines="timelines" />
</template>
<ul class="live-ul" v-if="false">
<li>已讲解:{{ successWords.length }}个卖点</li>
<li>未讲解:{{ failedWords.length }}个卖点</li>
<li>覆盖率:{{ ((successWords.length / detail.words?.length) * 100).toFixed(2) }}%</li>
......@@ -500,6 +995,7 @@ function formatDuration(seconds) {
<div class="live-markdown">
<MarkdownRender :source="result.sellingPoints" v-if="result.sellingPoints" />
</div>
<template v-if="false">
<h2 class="live-title">已讲解卖点:</h2>
<el-steps direction="vertical" :active="1">
<el-step v-for="(item, index) in successWords" :key="index" :title="item.name" status="success">
......@@ -512,6 +1008,7 @@ function formatDuration(seconds) {
<template #description> {{ item.time }} {{ item.subtitle }} </template>
</el-step>
</el-steps>
</template>
</AppCard>
<AppCard title="违禁词分析">
<div class="live-markdown">
......
<script setup>
defineProps({
timelines: { type: Array, default: () => [] },
})
const dialogVisible = ref(false)
const handleClick = () => {
dialogVisible.value = true
}
// 毫秒转分钟 00:00,需要补0
const formatTime = (time) => {
const minutes = Math.floor(time / 1000 / 60)
const seconds = Math.floor((time / 1000) % 60)
return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`
}
</script>
<template>
<el-button type="primary" @click="handleClick">查看口播文字</el-button>
<el-dialog v-model="dialogVisible" title="口播文字" width="600px">
<el-timeline>
<el-timeline-item
placement="top"
v-for="(item, index) in timelines"
:key="index"
:timestamp="formatTime(item.BeginTime)">
{{ item.Text }}
</el-timeline-item>
</el-timeline>
</el-dialog>
</template>
......@@ -83,7 +83,7 @@ const handleDelete = (url) => {
<p>图片格式为png/jpg/jpeg,图片大小不能超过2M</p>
</div>
<div v-if="item.isVideo" class="upload-tips">
<p>视频分辨率不能超过1080p,视频文件大小不能超过200M</p>
<p>视频分辨率不能超过1080p,视频文件大小不能超过500M</p>
<p>视频帧率25fps,视频文件格式为mp4</p>
</div>
</template>
......
......@@ -70,7 +70,13 @@ const secondLivePracticeRecord = computed(() => {
const categoryTableOptions = {
columns: [
{ label: '商品品类名称', prop: 'name', align: 'left' },
{ label: '层级', prop: 'level' },
{
label: '层级',
prop: 'level',
computed({ row }) {
return parseInt(row.level) + 1
},
},
{
label: '状态',
prop: 'status',
......
......@@ -71,7 +71,13 @@ const secondLivePracticeRecord = computed(() => {
const categoryTableOptions = {
columns: [
{ label: '商品品类名称', prop: 'name', align: 'left' },
{ label: '层级', prop: 'level' },
{
label: '层级',
prop: 'level',
computed({ row }) {
return parseInt(row.level) + 1
},
},
{
label: '状态',
prop: 'status',
......
......@@ -531,13 +531,6 @@ export const generatePracticeRecord2Prompt = (data: any) => {
`
}
export const generateReportPrompt = (data: any) => {
return `请根据选手提交的直播总结报告进行评分(满分15分)
选手提交内容:
${JSON.stringify(data.reports)}
`
}
export const generatePrompt = (data: any) => {
return `
${generateCommodityTypePrompt(data)}
......@@ -546,7 +539,6 @@ export const generatePrompt = (data: any) => {
${generateSpeechPrompt(data)}
${generatePracticeRecordPrompt(data)}
${generateImprovementPlanPrompt(data)}
${generateReportPrompt(data)}
EXAMPLE JSON OUTPUT:
{
"commodity_type": {
......@@ -577,10 +569,6 @@ EXAMPLE JSON OUTPUT:
"score": 5,
"comment": "这是评语"
},
"report": {
"score": 5,
"comment": "这是评语"
},
}
`
}
......@@ -108,59 +108,1184 @@ ${JSON.stringify(data.commodity_attrs)}
export const generateCommoditiesPrompt = (data: any) => {
return `
请根据选手提交的商品信息维护内容进行评分(满分10分)
一、角色定位(Role)
你是一位专业的电商运营评分专家,负责对选手的商品信息维护操作进行客观、准确的评分(满分10分)。
选手提交内容:
核心原则:
严格证据链原则:所有评分必须基于输入信息中的实际内容,不得推测、臆断或补充
有据可查原则:每一项得分或扣分都必须明确指出依据来源
客观公正原则:仅评价可见的、已配置的内容,未配置的不扣分、不臆测
二、任务说明(Task)
根据选手实际的答题结果(商品详情配置页导出或截图、媒体素材清单),结合试题要求,对商品信息维护的完成情况进行评分。
输入信息
${JSON.stringify(data.commodities)}
评分规则
试题要求:主推商品为"襄阳牛肉面2桶装(有牛肉)",完成5个板块的全面维护
三、评分目标(Goal)
准确、公正地评价选手在以下5个板块的操作完成情况,总分10分:
商品类目关联(1分)
商品主图配置(2分)
3:4比例主图配置(1分)
价格库存配置(4分)
服务履约配置(2分)
四、详细评分规则(Objective)
4.1 商品类目关联(1分)
判定标准
必须检查项:
一级品类:"襄阳牛肉面2桶装(有牛肉)"应关联到"速食面品类"
二级品类:应关联到"速食面品类"下的"复合式速煮面"
计分规则
| 情况 | 得分 | 判定依据 |
| ------------------------------ | ----- | ----------------------------------------------------- |
| 一级品类 ✅ 且 二级品类 ✅ | 1分 | 在商品详情配置页中明确显示"速食面品类 > 复合式速煮面" |
| 仅一级品类 ✅ 或 仅二级品类 ✅ | 0.5分 | 仅显示其中一项正确 |
| 两者都错误或缺失 | 0分 | 未找到类目信息,或类目错误 |
评分示例
✅ 得1分:配置页显示"类目:速食面品类 > 复合式速煮面"
⚠️ 得0.5分:配置页显示"类目:速食面品类"(缺少二级分类)
❌ 得0分:配置页显示"类目:方便食品"(一级分类错误)
4.2 商品主图配置(2分)
判定标准
必须检查项:
图片数量:至少2张
图片比例:必须为1:1比例
图片来源:从"媒体素材清单"或"商品详情配置页"中统计
计分规则
| 图片数量 | 得分 | 判定依据 |
| ------------- | ----------- | ---------------------------------------------------------- |
| ≥2张 1:1主图 | 2分 | 媒体素材清单或配置页中显示≥2张标注为"1:1"或"正方形"的图片 |
| 仅1张 1:1主图 | 1分(-1分) | 仅找到1张1:1图片 |
| 0张 1:1主图 | 0分(-2分) | 未找到任何1:1图片 |
评分示例
✅ 得2分:媒体素材清单显示"主图1.jpg (1:1)"、"主图2.jpg (1:1)"
⚠️ 得1分:媒体素材清单仅显示"主图1.jpg (1:1)"
❌ 得0分:媒体素材清单中所有图片均为"3:4"或未标注比例
特别说明
图片比例判定:仅根据素材清单中的标注或图片尺寸信息判断(如800x800、1080x1080为1:1)
不判定质量:仅统计数量和比例,不评价图片内容质量
4.3 3:4比例主图配置(1分)
判定标准
必须检查项:
图片数量:至少1张
图片比例:必须为3:4比例
图片来源:从"媒体素材清单"或"商品详情配置页"中统计
计分规则
| 图片数量 | 得分 | 判定依据 |
| ------------- | ---- | -------------------------------------------------------------------------------- |
| ≥1张 3:4主图 | 1分 | 媒体素材清单或配置页中显示≥1张标注为"3:4"或"竖版"的图片(如750x1000、900x1200) |
| 0张 3:4主图 | 0分 | 未找到任何3:4图片 |
评分示例
✅ 得1分:媒体素材清单显示"主图3.jpg (3:4)"或"750x1000"
❌ 得0分:所有图片均为其他比例
4.4 价格库存配置(4分)
判定标准
必须检查项(共4项,每项1分):
| 检查项 | 判定依据 | 扣分规则 |
| ------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
| ① 商品规格 | 商品详情配置页中明确显示规格列表(如"口味:原味/辣味"、"颜色:红/蓝"等),或显示"SKU列表"、"规格管理"等模块 | 未配置规格或规格信息缺失,扣1分 |
| ② 价格 | 每个规格都配置了"销售价格"或"价格"字段,且数值>0 | 任一规格缺失价格或=0,扣1分 |
| ③ 参考价(划线价) | 每个规格都配置了"原价"或"市场价"或"参考价"字段,且数值>0 | 任一规格缺失参考价或=0,扣1分 |
| ④ 库存数量 | 每个规格都配置了"库存"或"可售数量"字段,且数值>0 | 任一规格缺失库存或=0,扣1分 |
⚠️ 特别说明:
发货模式已从本项移除,归入"服务履约配置"板块统一管理
规格是必检项:不同规格对应不同的价格、参考价、库存,必须检查规格配置情况
计分规则
起评分:4分
累计扣分:每缺少一项扣1分
最低得分:0分(扣完为止)
规格判定标准详解(防止臆测)
✅ 判定为"已配置规格"的证据(必须满足以下任一条件):
明确的规格列表:配置页中显示规格名称和选项
示例:规格:口味(原味、辣味)
示例:SKU规格:颜色(红、蓝、黑)/ 尺码(S、M、L)
SKU管理表格:配置页中有SKU列表,每行代表一个规格组合
SKU列表:
- 原味/2桶装:价格29.9元,库存500件
- 辣味/2桶装:价格32.9元,库存300件
规格管理模块:配置页中有"规格管理"、"SKU管理"、"多规格设置"等明确标识
❌ 不能判定为"已配置规格"的情况(严禁臆测):
❌ 仅看到商品名称包含"2桶装",但配置页中无规格模块 → 未配置规格
❌ 仅看到一个价格,未显示规格列表 → 未配置规格
❌ 配置页中无"规格"相关字段或模块 → 未配置规格
❌ 主观推测"商品应该有规格" → 严禁臆测,必须以实际显示为准
评分示例
情况A:单规格商品(已配置规格)
✅ 得4分(满分):
商品配置页显示:
━━━━━━━━━━━━━━━
【规格管理】
规格:口味
选项:原味
【SKU列表】
- 原味:
· 销售价格:29.9元 ✓
· 参考价:49.9元 ✓
· 库存:500件 ✓
━━━━━━━━━━━━━━━
评分:
① 规格:已配置(1个规格"原味")✓
② 价格:已配置(29.9元)✓
③ 参考价:已配置(49.9元)✓
④ 库存:已配置(500件)✓
得分:4/4分
情况B:多规格商品(已配置规格)
✅ 得4分(满分):
商品配置页显示:
━━━━━━━━━━━━━━━
【规格管理】
规格:口味
选项:原味、辣味
【SKU列表】
- 原味:价格29.9元,参考价49.9元,库存500件 ✓
- 辣味:价格32.9元,参考价52.9元,库存300件 ✓
━━━━━━━━━━━━━━━
评分:
① 规格:已配置(2个规格"原味、辣味")✓
② 价格:已配置(所有规格都有价格)✓
③ 参考价:已配置(所有规格都有参考价)✓
④ 库存:已配置(所有规格都有库存)✓
得分:4/4分
情况C:未配置规格(错误案例)
❌ 得0分(-4分):
商品配置页显示:
━━━━━━━━━━━━━━━
【商品信息】
商品名称:襄阳牛肉面2桶装(有牛肉)
商品图片:已上传
⚠️ 未找到"规格管理"、"SKU列表"等模块
⚠️ 未显示任何规格信息
━━━━━━━━━━━━━━━
评分:
① 规格:未配置 ✗(扣1分)
② 价格:因未配置规格,无法填写价格 ✗(扣1分)
③ 参考价:因未配置规格,无法填写参考价 ✗(扣1分)
④ 库存:因未配置规格,无法填写库存 ✗(扣1分)
得分:0/4分
扣分原因:商品配置页中未找到规格管理模块,未配置任何规格信息,导致价格、参考价、库存无法配置。
情况D:配置了规格,但部分规格缺失价格
⚠️ 得3分(-1分):
商品配置页显示:
━━━━━━━━━━━━━━━
【规格管理】
规格:口味
选项:原味、辣味
【SKU列表】
- 原味:价格29.9元,参考价49.9元,库存500件 ✓
- 辣味:价格未填写,参考价52.9元,库存300件 ✗
━━━━━━━━━━━━━━━
评分:
① 规格:已配置 ✓
② 价格:部分缺失("辣味"规格未填写价格)✗(扣1分)
③ 参考价:已配置 ✓
④ 库存:已配置 ✓
得分:3/4分
扣分原因:"辣味"规格未配置销售价格。
严格评分要求(防止AI臆测)
评分时必须回答以下问题(证据链检查):
规格证据问题:
❓ 在配置页的哪个位置看到了规格信息?
❓ 规格名称是什么?(如"口味"、"颜色"、"尺码"等)
❓ 有几个规格选项?分别是什么?
价格证据问题:
❓ 每个规格的价格分别是多少?
❓ 是否所有规格都配置了价格?
参考价证据问题:
❓ 每个规格的参考价分别是多少?
❓ 是否所有规格都配置了参考价?
库存证据问题:
❓ 每个规格的库存分别是多少?
❓ 是否所有规格都配置了库存?
⚠️ 如果以上任何一个问题无法从配置页中找到明确答案,则该项判定为"未配置",不得臆测!
4.5 服务履约配置(2分)
判定标准
必须检查项(3项):
| 检查项 | 判定依据 | 分值 |
| ----------- | ------------------------------------------------ | ----- |
| ① 发货模式 | 商品详情配置页中明确显示"现货发货"或"48小时发货" | 0.5分 |
| ② 运费模板 | 从指定选项中至少配置1项 | 1分 |
| ③ 售后政策 | 从指定选项中至少配置1项 | 0.5分 |
② 运费模板选项(至少配置1项):
阶梯计价运费
固定运费
卖家包邮
指定条件包邮
限制买家下单区域
按件数计价
按重量计价
指定地区运费
③ 售后政策选项(至少配置1项):
7天无理由退换货
全额退款
仅退款政策
预付邮费标签
全球购物保障计划
无忧退换货
闪电退货
售后补寄
计分规则
起评分:2分
累计扣分:每缺少一项按对应分值扣分
最低得分:0分(扣完为止)
评分示例
✅ 得2分(满分):
商品配置页显示:
- 发货模式:现货发货 ✓(0.5分)
- 运费模板:卖家包邮 ✓(1分)
- 售后政策:7天无理由退换货 ✓(0.5分)
得分:2/2分
⚠️ 得1.5分(-0.5分):
商品配置页显示:
- 发货模式:现货发货 ✓(0.5分)
- 运费模板:固定运费 ✓(1分)
- 售后政策:未设置 ✗(扣0.5分)
得分:1.5/2分
扣分原因:未配置售后政策。
⚠️ 得0.5分(-1.5分):
商品配置页显示:
- 发货模式:预售发货 ✗(扣0.5分,应为"现货发货")
- 运费模板:未设置 ✗(扣1分)
- 售后政策:7天无理由退换货 ✓(0.5分)
得分:0.5/2分
扣分原因:发货模式错误,应设置为"现货发货";未配置运费模板。
❌ 得0分(-2分):
商品配置页显示:
- 发货模式:未设置 ✗(扣0.5分)
- 运费模板:未设置 ✗(扣1分)
- 售后政策:未设置 ✗(扣0.5分)
得分:0/2分
扣分原因:发货模式、运费模板、售后政策均未配置。
五、评分输出模板
5.1 评分记录(结构化格式)
【商品信息维护评分报告】
━━━━━━━━━━━━━━━━━━━━━━━━
【1. 商品类目关联】
━━━━━━━━━━━━━━━━━━━━━━━━
得分:___/1分
判定依据:
- 一级品类:【已配置/未配置/配置错误】:__________
- 二级品类:【已配置/未配置/配置错误】:__________
扣分原因:__________(如无扣分,填"无")
━━━━━━━━━━━━━━━━━━━━━━━━
【2. 商品主图配置】
━━━━━━━━━━━━━━━━━━━━━━━━
得分:___/2分
判定依据:
- 1:1主图数量:____张
- 图片来源:【媒体素材清单/商品配置页】
- 图片信息:__________
扣分原因:__________(如无扣分,填"无")
━━━━━━━━━━━━━━━━━━━━━━━━
【3. 3:4比例主图】
━━━━━━━━━━━━━━━━━━━━━━━━
得分:___/1分
判定依据:
- 3:4主图数量:____张
- 图片来源:【媒体素材清单/商品配置页】
- 图片信息:__________
扣分原因:__________(如无扣分,填"无")
━━━━━━━━━━━━━━━━━━━━━━━━
【4. 价格库存配置】
━━━━━━━━━━━━━━━━━━━━━━━━
得分:___/4分
判定依据(必须回答证据链问题):
**① 商品规格(1分)**
- 是否配置规格:【已配置/未配置】
- 规格信息位置:在配置页的________位置找到
- 规格名称:________(如"口味"、"颜色"等)
- 规格选项:________(如"原味、辣味")
- 规格数量:共____个规格
**② 价格配置(1分)**
- 是否配置价格:【已配置/部分配置/未配置】
- 价格信息:
* 规格1(______):价格______元
* 规格2(______):价格______元
* (如有更多规格,请列出)
**③ 参考价配置(1分)**
- 是否配置参考价:【已配置/部分配置/未配置】
- 参考价信息:
* 规格1(______):参考价______元
* 规格2(______):参考价______元
* (如有更多规格,请列出)
**④ 库存配置(1分)**
- 是否配置库存:【已配置/部分配置/未配置】
- 库存信息:
* 规格1(______):库存______件
* 规格2(______):库存______件
* (如有更多规格,请列出)
扣分原因:__________(如无扣分,填"无")
⚠️ 评分检查:如果无法从配置页中明确回答上述问题,则该项判定为"未配置",不得臆测!
━━━━━━━━━━━━━━━━━━━━━━━━
【5. 服务履约配置】
━━━━━━━━━━━━━━━━━━━━━━━━
得分:___/2分
判定依据:
- ① 发货模式(0.5分):【现货发货/其他/未配置】:__________
- ② 运费模板(1分):【已配置/未配置】:__________
- ③ 售后政策(0.5分):【已配置/未配置】:__________
扣分原因:__________(如无扣分,填"无")
━━━━━━━━━━━━━━━━━━━━━━━━
【总分统计】
━━━━━━━━━━━━━━━━━━━━━━━━
本模块总分:___/10分
各板块得分明细:
- 商品类目关联:___/1分
- 商品主图配置:___/2分
- 3:4比例主图:___/1分
- 价格库存配置:___/4分
- 服务履约配置:___/2分
5.2 综合评价(质性分析)
━━━━━━━━━━━━━━━━━━━━━━━━
【整体评价】
━━━━━━━━━━━━━━━━━━━━━━━━
1. 商品类目关联(1分)
判定标准:
●一级品类判定:
○"襄阳牛肉面2桶装(有牛肉)"应关联到"速食面品类"一级品类
●二级品类判定:
○应关联到"速食面品类"下的“复合式速煮面”二级品类
计分规则:
●同时正确关联一级品类和二级品类:1分
●只关联一级品类或只关联二级品类:0.5分
●错误或缺失:0分
________________________________________
2. 商品主图(2分)
判定标准:
●每个商品至少2张1:1比例主图
●仅以张数为准,不要求质量
(100-150字,客观描述选手的整体表现)
计分规则:
●满足2张及以上1:1主图:2分
●只有1张:-1分(得1分)
●不足1张:-2分(得0分)
3. 3:4比例主图(1分)
判定标准:
●每个商品至少1张3:4比例主图
●仅以张数为准,不要求质量
计分规则:
●满足要求:1分
●否则:0分
4. 价格库存配置(4分)
判定标准与计分:
商品的规格、价格、库存、发货设置等信息配置完整准确。
●包含:价格、参考价、库存数量;每缺一要素-1分
●发货模式:必须为"现货发货";不符合-1分
●扣分累计,但本项最低0分
5. 服务履约配置(2分)
判定标准与计分:
●运费模板:从以下选项中任选一项即可得分:阶梯计价运费、固定运费、卖家包邮、指定条件包邮、限制买家下单区域、按件数计价、按重量计价、指定地区运费;缺失-1分。
●售后政策:从以下选项中任选一项即可得分:7天无理由退换货、全额退款、仅退款政策、预付邮费标签、全球购物保障计划、无忧退换货、闪电退货、售后补寄;缺失-1分。
●扣分累计,但本项最低0分
━━━━━━━━━━━━━━━━━━━━━━━━
【整体评价】
(请对选手整体表现进行1-2句总结性评价)`
【亮点】
━━━━━━━━━━━━━━━━━━━━━━━━
1. __________________
2. __________________
━━━━━━━━━━━━━━━━━━━━━━━━
【不足】
━━━━━━━━━━━━━━━━━━━━━━━━
1. __________________
2. __________________
━━━━━━━━━━━━━━━━━━━━━━━━
【改进建议】
━━━━━━━━━━━━━━━━━━━━━━━━
1. __________________
2. __________________
六、评分核心要求(Critical Rules)
⚠️ 严格遵守以下规则
规则1:证据链原则
✅ 正确做法:
判定依据:配置页中明确显示"销售价格:29.9元"
得分:1分(价格已配置)
❌ 错误做法:
判定依据:商品应该配置了价格
得分:1分(臆测)
规则2:有据可查原则
✅ 正确做法:
扣分原因:配置页中未找到"参考价"字段,扣1分
❌ 错误做法:
扣分原因:参考价可能没配置,扣1分
规则3:不臆测原则
✅ 正确做法:
判定依据:配置页中未显示规格信息
⚠️ 本项不检查规格,不影响得分
❌ 错误做法:
判定依据:商品应该有规格但未看到,扣分
(严禁!规格不在评分范围内)
规则4:信息缺失处理原则
当输入信息不完整时:
| 情况 | 处理方式 |
| ------------------------------------ | ---------------------------------- |
| 配置页截图模糊,无法判断某项是否配置 | 标注"因截图模糊无法判断,暂不扣分" |
| 素材清单缺失,无法统计图片数量 | 标注"因素材清单缺失,无法评分" |
| 配置页中明确显示"未配置"或字段为空 | 按规则扣分 |
七、评分流程(Workflow)
步骤1:信息审查
检查输入信息是否完整(商品配置页 + 媒体素材清单)
确认商品名称是否为"襄阳牛肉面2桶装(有牛肉)"
如有缺失,在评分报告中标注
步骤2:逐项评分
按照5个板块的顺序,逐项检查并记录:
在输入信息中寻找对应的证据
记录判定依据(具体字段名称和值)
根据计分规则给出得分
如有扣分,明确写出扣分原因
步骤3:交叉验证
检查各板块得分相加是否等于总分
确认所有"判定依据"都有具体来源
确认未出现臆测或推断性表述
步骤4:输出报告
按照"5.1 评分记录"模板填写结构化数据
按照"5.2 综合评价"模板填写质性分析
最终输出完整的评分报告
八、常见错误示例与纠正
错误示例1:臆测规格存在(最常见错误)
❌ 错误评分:
【4. 价格库存配置】得分:4/4分
判定依据:
- ① 规格:已配置(应该有规格)✓
- ② 价格:已配置 ✓
- ③ 参考价:已配置 ✓
- ④ 库存:已配置 ✓
扣分原因:无
错误原因:未在配置页中找到明确的规格信息,主观臆测"应该有规格"
✅ 正确评分:
【4. 价格库存配置】得分:0/4分
判定依据(证据链检查):
① 商品规格(1分)
- 是否配置规格:未配置 ✗
- 规格信息位置:配置页中未找到"规格管理"、"SKU列表"等模块
- 规格名称:无
- 规格选项:无
- 规格数量:0个
② 价格配置(1分)
- 是否配置价格:未配置 ✗
- 原因:因未配置规格,无法填写价格
③ 参考价配置(1分)
- 是否配置参考价:未配置 ✗
- 原因:因未配置规格,无法填写参考价
④ 库存配置(1分)
- 是否配置库存:未配置 ✗
- 原因:因未配置规格,无法填写库存
扣分原因:商品配置页中未找到规格管理模块,未配置任何规格信息,导致价格、参考价、库存无法配置。
纠正说明:必须在配置页中看到明确的规格列表或SKU管理模块,才能判定为"已配置规格"
错误示例2:将商品名称中的描述当作规格
❌ 错误评分:
【4. 价格库存配置】得分:4/4分
判定依据:
- ① 规格:已配置(商品名称中有"2桶装")✓
错误原因:将商品名称"襄阳牛肉面2桶装(有牛肉)"中的"2桶装"误认为是规格
✅ 正确评分:
【4. 价格库存配置】得分:0/4分
判定依据:
① 商品规格
- 是否配置规格:未配置 ✗
- ⚠️ 说明:商品名称中的"2桶装"是商品描述,不是配置的规格
- ⚠️ 判定标准:必须在配置页中看到"规格管理"模块或"SKU列表"
纠正说明:商品名称中的描述(如"2桶装")不等于规格配置,必须在配置页中有明确的规格管理模块
错误示例3:缺乏判定依据
❌ 错误评分:
【1. 商品类目关联】得分:1/1分
判定依据:类目配置正确
错误原因:未说明在哪里看到类目信息,无法验证
✅ 正确评分:
【1. 商品类目关联】得分:1/1分
判定依据:
- 一级品类:已配置:配置页显示"速食面品类"
- 二级品类:已配置:配置页显示"复合式速煮面"
扣分原因:无
错误示例4:未看到SKU列表却判定价格已配置
❌ 错误评分:
【4. 价格库存配置】得分:4/4分
判定依据:
- ② 价格:已配置 ✓(应该有价格)
错误原因:未说明价格的具体数值和来源,无法验证
✅ 正确评分方式A(已配置规格的情况):
【4. 价格库存配置】得分:4/4分
判定依据:
② 价格配置
- 是否配置价格:已配置 ✓
- 价格信息:
* 原味规格:价格29.9元(见配置页SKU列表第1行)
* 辣味规格:价格32.9元(见配置页SKU列表第2行)
✅ 正确评分方式B(未配置规格的情况):
【4. 价格库存配置】得分:0/4分
判定依据:
② 价格配置
- 是否配置价格:未配置 ✗
- 原因:配置页中未找到SKU列表或价格字段
错误示例5:信息缺失时的错误处理
❌ 错误评分:
【2. 商品主图配置】得分:0/2分
扣分原因:未提供素材清单,判断为未配置
错误原因:信息缺失不应扣分,应标注"无法评分"
✅ 正确评分:
【2. 商品主图配置】得分:无法评分
扣分原因:因未提供媒体素材清单,无法统计主图数量,建议补充素材信息后重新评分
九、质量检查清单
在提交评分报告前,请自检:
证据链检查
[ ] 每一项得分都有明确的"判定依据",且能在输入信息中找到对应内容
[ ] "判定依据"中引用了具体的字段名称、位置和数值
[ ] 所有扣分原因都具体、明确,无"可能""应该""大概"等模糊表述
[ ] 未出现臆测、推断、补充信息的情况
规格判定检查(重点)
[ ] 必须回答:在配置页的哪个位置看到了规格信息?
[ ] 必须回答:规格名称是什么?有几个规格选项?
[ ] 必须回答:每个规格的价格、参考价、库存分别是多少?
[ ] 严禁臆测:如果配置页中未显示规格管理模块或SKU列表,则判定为"未配置规格"
[ ] 严禁臆测:不能根据商品名称(如"2桶装")推测规格已配置
数据一致性检查
[ ] 各板块得分相加等于总分(商品类目1分+主图2分+3:4主图1分+价格库存4分+服务履约2分=10分)
[ ] 如果"规格"判定为"未配置",则"价格、参考价、库存"也应判定为"未配置"
[ ] 如果"规格"判定为"已配置",必须列出每个规格的详细信息
信息缺失处理检查
[ ] 如有信息缺失(如素材清单缺失),已明确标注"无法评分"而非扣分
[ ] 如有截图模糊无法判断,已标注"因截图模糊无法判断,暂不扣分"
反臆测检查(最重要)
以下情况严禁判定为"已配置",请再次确认:
[ ] ❌ 仅看到商品名称包含"2桶装",但配置页中无规格模块 → 未配置规格
[ ] ❌ 仅看到一个价格,未显示规格列表 → 未配置规格
[ ] ❌ 配置页中无"规格管理"、"SKU列表"、"SKU管理"等字段或模块 → 未配置规格
[ ] ❌ 主观推测"商品应该有规格" → 严禁臆测,必须以实际显示为准
十、规格判定快速诊断工具
使用方法:在评分"价格库存配置"板块前,先用此工具诊断规格配置情况
诊断流程图
开始评分"价格库存配置"
【问题1】配置页中是否有"规格管理"、"SKU管理"、"规格设置"等模块?
├─ 是 → 继续【问题2】
└─ 否 → ❌ 判定为"未配置规格",得0分
【问题2】是否能明确看到规格名称(如"口味"、"颜色"、"尺码")?
├─ 是 → 继续【问题3】
└─ 否 → ❌ 判定为"未配置规格",得0分
【问题3】是否能明确看到规格选项(如"原味、辣味")?
├─ 是 → 继续【问题4】
└─ 否 → ❌ 判定为"未配置规格",得0分
【问题4】是否有SKU列表,且每个规格都有价格、参考价、库存?
├─ 全部有 → ✅ 判定为"已配置规格",得4分
├─ 部分有 → ⚠️ 判定为"部分配置",按缺失项扣分
└─ 全部无 → ❌ 判定为"未配置规格",得0分
快速判定表
| 配置页显示内容 | 判定结果 | 得分 |
| ----------------------------------------------- | ---------- | -------------- |
| ✅ 有"规格管理"模块 + 规格列表 + SKU价格/库存表 | 已配置规格 | 4分(满分) |
| ⚠️ 有"规格管理"模块,但部分规格缺失价格/库存 | 部分配置 | 按缺失项扣分 |
| ❌ 无"规格管理"模块,仅有商品名称 | 未配置规格 | 0分 |
| ❌ 仅看到一个价格,无规格列表 | 未配置规格 | 0分 |
| ❌ 商品名称包含"2桶装",但无规格模块 | 未配置规格 | 0分 |
| ❓ 信息缺失,无法判断 | 无法评分 | 标注"无法评分" |
典型错误案例对照
| 错误判定 ✗ | 正确判定 ✓ | 原因 |
| -------------------------------- | -------------------------------- | ------------------------------ |
| "商品名称有'2桶装',规格已配置" | "未配置规格"(商品名称不是规格) | 商品名称中的描述不等于规格配置 |
| "应该有规格,判定为已配置" | "未配置规格"(未看到规格模块) | 主观臆测,缺乏证据 |
| "看到一个价格29.9元,规格已配置" | "未配置规格"(未看到规格列表) | 单独的价格不代表配置了规格 |
| "商品肯定有颜色,规格已配置" | "未配置规格"(未看到规格列表) | 主观推测,缺乏证据 |
`
}
export const generateSpeechPrompt = (data: any) => {
......@@ -566,13 +1691,6 @@ export const generatePracticeRecord2Prompt = (data: any) => {
`
}
export const generateReportPrompt = (data: any) => {
return `请根据选手提交的直播总结报告进行评分(满分10分)
选手提交内容:
${JSON.stringify(data.reports)}
`
}
export const generatePrompt = (data: any) => {
return `
${generateCommodityTypePrompt(data)}
......@@ -581,7 +1699,6 @@ export const generatePrompt = (data: any) => {
${generateSpeechPrompt(data)}
${generatePracticeRecordPrompt(data)}
${generateImprovementPlanPrompt(data)}
${generateReportPrompt(data)}
EXAMPLE JSON OUTPUT:
{
"commodity_type": {
......@@ -612,10 +1729,6 @@ EXAMPLE JSON OUTPUT:
"score": 5,
"comment": "这是评语"
},
"report": {
"score": 5,
"comment": "这是评语"
},
}
`
}
......@@ -39,8 +39,8 @@ const listOptions = computed(() => {
{ label: '序号', type: 'index', width: 60 },
{ label: 'ID', prop: 'id' },
{ label: '姓名', prop: 'student_name' },
{ label: '专业', prop: 'specialty_name' },
{ label: '班级', prop: 'class_name' },
// { label: '专业', prop: 'specialty_name' },
// { label: '班级', prop: 'class_name' },
{ label: '成绩', prop: 'score_display' },
{ label: '状态', prop: 'check_status_name' },
{ label: '评分人', prop: 'checker_name' },
......@@ -55,7 +55,7 @@ const handleExport = () => {
window.open(`/api/lab/v1/experiment/live-student-record/export?experiment_id=${route.query.experiment_id}`)
}
const { isLoading, generateText } = useChat({ provider: 'siliconflow' })
const { isLoading, generateText } = useChat({ provider: 'volcano' })
const handleAIScore = async () => {
console.log('AI一键评分')
......
......@@ -11,7 +11,7 @@ const CompetitionOperations = defineAsyncComponent(() => import('../components/C
const route = useRoute()
const id = route.query.id
const { isLoading, generateText } = useChat({ provider: 'siliconflow' })
const { isLoading, generateText } = useChat({ provider: 'volcano' })
const detail = ref(null)
......@@ -41,7 +41,7 @@ const handleAIScore = async () => {
try {
const parsed = JSON.parse(result.content)
Object.assign(scoreDetails, parsed)
commitScore(1).then(() => {
commitScore().then(() => {
ElMessage.success('保存成功')
})
} catch (error) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论