69 lines
2.8 KiB
JavaScript
69 lines
2.8 KiB
JavaScript
#!/usr/bin/env node
|
||
import fs from 'fs';
|
||
|
||
const baseUrl = process.env.XIANHU_BASE_URL || 'http://127.0.0.1:3000';
|
||
const args = process.argv.slice(2);
|
||
|
||
console.error('提示:Hermes 主控模式优先使用 tools/xianyu_ops.mjs create/run;本脚本保留为兼容入口。');
|
||
|
||
function usage() {
|
||
console.log(`Usage:
|
||
node tools/create_monitor_task.mjs --name <name> --queries <q1,q2> [--price-min N] [--price-max N] [--region 地区] [--pages N] --requirements <需求>
|
||
|
||
Environment:
|
||
XIANHU_BASE_URL=http://127.0.0.1:3000
|
||
|
||
Example:
|
||
node tools/create_monitor_task.mjs --name 'Mac mini M4 监测' --queries 'Mac mini M4,macmini m4' --price-max 3300 --region 成都 --pages 2 --requirements '自用,国行,成色好,无拆修,预算3300以内,只做筛选分析,不联系卖家,交给 Hermes 分析'
|
||
`);
|
||
}
|
||
|
||
function take(flag) {
|
||
const i = args.indexOf(flag);
|
||
if (i === -1) return undefined;
|
||
return args[i + 1];
|
||
}
|
||
|
||
if (args.includes('-h') || args.includes('--help')) {
|
||
usage();
|
||
process.exit(0);
|
||
}
|
||
|
||
const name = take('--name') || `闲鱼监测-${new Date().toISOString().slice(0, 10)}`;
|
||
const queriesRaw = take('--queries');
|
||
const requirements = take('--requirements') || take('--req');
|
||
if (!queriesRaw || !requirements) {
|
||
usage();
|
||
process.exit(2);
|
||
}
|
||
|
||
const payload = {
|
||
name,
|
||
queries: queriesRaw.split(/[,,]/).map(s => s.trim()).filter(Boolean),
|
||
priceMin: take('--price-min') ? Number(take('--price-min')) : null,
|
||
priceMax: take('--price-max') ? Number(take('--price-max')) : null,
|
||
region: take('--region') || '',
|
||
personalSeller: args.includes('--personal-seller'),
|
||
maxPages: take('--pages') ? Number(take('--pages')) : 3,
|
||
customRequirements: requirements,
|
||
coarsePrompt: `你是闲鱼商品监测助手。只做标题相关性初筛,目标是帮用户发现值得进一步分析的候选商品。只有标题与需求明确矛盾、明显是配件/维修/求购/租赁/广告时才排除;拿不准必须保留。返回纯JSON数组。`,
|
||
finePrompt: `你是闲鱼商品风险分析助手。根据商品详情判断是否值得用户人工查看。只做采集后的分析准备,实际深度分析由 Hermes 完成。优先标记:型号/规格不符、价格异常、疑似商家批量、维修/配件/求购、描述矛盾、成色/保修/拆修风险。拿不准可以保留,但理由必须提示待人工确认。`,
|
||
};
|
||
|
||
const res = await fetch(`${baseUrl}/api/tasks`, {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify(payload),
|
||
});
|
||
const text = await res.text();
|
||
if (!res.ok) {
|
||
console.error(`HTTP ${res.status}: ${text}`);
|
||
process.exit(1);
|
||
}
|
||
try {
|
||
const data = JSON.parse(text);
|
||
console.log(JSON.stringify({ ok: true, task: { id: data.id, name: data.name, stage: data.stage }, url: `${baseUrl}/` }, null, 2));
|
||
} catch {
|
||
console.log(text);
|
||
}
|