Your Name 478562c312
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
feat: migrate product planning workspace
2026-03-26 16:38:48 +08:00

128 lines
4.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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");
}