128 lines
4.0 KiB
TypeScript
128 lines
4.0 KiB
TypeScript
import type {
|
||
ProductPlanningAnalyzeRequest,
|
||
ProductPlanningSkuAnalyzeRequest,
|
||
TaobaoQaRow,
|
||
TaobaoReviewRow,
|
||
} from "./types";
|
||
import { truncateText } from "./utils";
|
||
|
||
const MAX_ROWS = 120;
|
||
|
||
function formatReviewRows(rows: TaobaoReviewRow[]) {
|
||
return rows
|
||
.slice(0, MAX_ROWS)
|
||
.map((row, index) =>
|
||
[
|
||
`### 评价 ${index + 1}`,
|
||
`- 商品ID:${row.itemId || "未知"}`,
|
||
`- 时间:${row.date || "未知"}`,
|
||
`- 用户:${row.userId || "未知"}`,
|
||
`- SKU:${row.sku || "未知"}`,
|
||
`- 内容:${truncateText(row.content, 220) || "无"}`,
|
||
row.appendComment ? `- 追评:${truncateText(row.appendComment, 180)}` : "",
|
||
]
|
||
.filter(Boolean)
|
||
.join("\n")
|
||
)
|
||
.join("\n\n");
|
||
}
|
||
|
||
function formatQaRows(rows: TaobaoQaRow[]) {
|
||
return rows
|
||
.slice(0, MAX_ROWS)
|
||
.map((row, index) =>
|
||
[
|
||
`### 问答 ${index + 1}`,
|
||
`- 商品ID:${row.itemId || "未知"}`,
|
||
`- 问题:${truncateText(row.question, 160) || "无"}`,
|
||
row.questionDetail ? `- 问题补充:${truncateText(row.questionDetail, 160)}` : "",
|
||
`- 回答:${truncateText(row.answer, 220) || "无"}`,
|
||
`- 回答用户:${row.answerUser || "未知"}`,
|
||
`- 回答时间:${row.answerDate || "未知"}`,
|
||
`- 官方回答:${row.isOfficial ? "是" : "否"}`,
|
||
]
|
||
.filter(Boolean)
|
||
.join("\n")
|
||
)
|
||
.join("\n\n");
|
||
}
|
||
|
||
function formatSkuRows(request: ProductPlanningSkuAnalyzeRequest) {
|
||
return request.skus
|
||
.slice(0, MAX_ROWS)
|
||
.map((sku, index) =>
|
||
[
|
||
`### SKU ${index + 1}`,
|
||
`- 名称:${truncateText(sku.name, 180) || "无"}`,
|
||
typeof sku.price === "number" ? `- 价格:${sku.price}` : "",
|
||
]
|
||
.filter(Boolean)
|
||
.join("\n")
|
||
)
|
||
.join("\n\n");
|
||
}
|
||
|
||
export function buildProductPlanningAnalyzePrompt(
|
||
request: ProductPlanningAnalyzeRequest
|
||
) {
|
||
if (request.kind === "review") {
|
||
return [
|
||
"# 淘宝评价数据分析",
|
||
"",
|
||
"请基于以下买家评价数据,输出一份适合商品策划与详情页优化使用的中文 Markdown 分析。",
|
||
"",
|
||
"输出要求:",
|
||
"1. 总结核心用户痛点",
|
||
"2. 提炼高频关注点和决策点",
|
||
"3. 按质量、做工、外观、功能、场景分别分析",
|
||
"4. 给出详情页文案与卖点强化建议",
|
||
"5. 如果数据中存在矛盾反馈,要单独指出",
|
||
"",
|
||
"评价数据:",
|
||
formatReviewRows(request.rows),
|
||
].join("\n");
|
||
}
|
||
|
||
return [
|
||
"# 淘宝问大家数据分析",
|
||
"",
|
||
"请基于以下问大家数据,输出一份适合商品策划与详情页优化使用的中文 Markdown 分析。",
|
||
"",
|
||
"输出要求:",
|
||
"1. 总结用户最关心的问题",
|
||
"2. 提炼最影响转化的疑虑",
|
||
"3. 区分官方回答与普通回答的价值差异",
|
||
"4. 给出详情页必须补强的信息点",
|
||
"5. 给出客服 FAQ 建议",
|
||
"",
|
||
"问大家数据:",
|
||
formatQaRows(request.rows),
|
||
].join("\n");
|
||
}
|
||
|
||
export function buildProductPlanningSkuAnalyzePrompt(
|
||
request: ProductPlanningSkuAnalyzeRequest
|
||
) {
|
||
return [
|
||
"# 商品 SKU 卖点分析",
|
||
"",
|
||
"请基于以下 SKU 命名数据,输出一份适合商品策划与详情页优化使用的中文 Markdown 分析。",
|
||
"",
|
||
`平台:${request.platform === "jd" ? "京东" : "淘宝/天猫"}`,
|
||
`商品ID:${request.itemId}`,
|
||
request.title ? `商品标题:${request.title}` : "",
|
||
"",
|
||
"输出要求:",
|
||
"1. 提炼 SKU 命名中正在强调的核心卖点与差异点",
|
||
"2. 判断 SKU 维度是否清晰,是否存在信息堆砌或命名混乱",
|
||
"3. 总结当前 SKU 命名对转化的帮助与不足",
|
||
"4. 给出更利于用户理解和转化的 SKU 命名优化建议",
|
||
"5. 如果适合,补充可同步到主图/详情页/标题的卖点表达",
|
||
"",
|
||
"SKU 数据:",
|
||
formatSkuRows(request),
|
||
]
|
||
.filter(Boolean)
|
||
.join("\n");
|
||
}
|