refactor: 收口技能与专员目录定义
统一 skill 与 specialist 清单,移除旧的 office 执行包与下线对象,并补入 text_to_speech、customer_followup 等当前目录定义与种子数据。
This commit is contained in:
@@ -49,13 +49,13 @@ export const projectTemplates = [
|
||||
skillKeys: ['report-generation'],
|
||||
},
|
||||
{
|
||||
id: 'training-delivery',
|
||||
id: 'internal-training',
|
||||
title: '培训交付',
|
||||
desc: '课件准备、现场记录到交付归档',
|
||||
icon: Reading,
|
||||
prompt:
|
||||
'本项目按培训交付流程走:课前确认学员与大纲,课中记录要点与答疑,课后 24 小时内出交付包。所有产出用统一模板,标题格式「〈客户〉-〈课程〉-〈环节〉」。',
|
||||
specialistKeys: ['training-delivery'],
|
||||
specialistKeys: [],
|
||||
skillKeys: ['document-translate', 'audio-transcribe'],
|
||||
},
|
||||
{
|
||||
@@ -96,7 +96,7 @@ export const projectTemplates = [
|
||||
prompt:
|
||||
'本项目按汇报交付口径推进:先确认汇报对象、场景、页数和主线,再生成页面结构、每页要点和讲稿备注。所有数字、时间和范围必须带口径;没有依据的地方明确标“待补”,不要为了好看自行补齐。',
|
||||
specialistKeys: ['presentation-briefing'],
|
||||
skillKeys: ['ppt-generation', 'proposal-summary', 'mind-map'],
|
||||
skillKeys: ['ppt-generation', 'mind-map'],
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
@@ -113,10 +113,10 @@ const workspaceDemoData = {
|
||||
},
|
||||
},
|
||||
},
|
||||
'training-delivery': {
|
||||
title: '培训交付专员',
|
||||
'internal-training': {
|
||||
title: '培训交付工作台',
|
||||
caseTitle: '新人销售训练营第 3 周',
|
||||
subtitle: '围绕班级运营、课程推进、考试与交付归档的训练营工作台。',
|
||||
subtitle: '围绕班级运营、课程推进、考试与交付归档的培训工作台。',
|
||||
cases: [
|
||||
{ id: 'td-01', title: '新人销售训练营第 3 周', owner: '班主任', priority: 'P1', due: '今天 20:00', summary: '日报、考试预警、复盘建议需要当天归档', status: '训练执行', contextPatch: { outputs: ['班级日报', '错题热点清单'], artifacts: ['训练营周报.pdf'], risks: ['考试规则待确认'], events: ['08:30 班级日报自动生成'] } },
|
||||
{ id: 'td-02', title: '华南销售陪练专项', owner: '培训经理', priority: 'P2', due: '周三', summary: '需要聚焦异议处理与高频错题复训', status: '课前准备', contextPatch: { outputs: ['陪练脚本包'], artifacts: ['陪练计划.xlsx'], risks: ['陪练素材还差两份'], events: ['09:05 生成陪练脚本初稿'] } },
|
||||
@@ -296,133 +296,90 @@ const workspaceDemoData = {
|
||||
},
|
||||
},
|
||||
},
|
||||
'logistics-fulfillment': {
|
||||
title: '履约跟单专员',
|
||||
caseTitle: '美西航线本周履约看板',
|
||||
subtitle: '围绕节点跟踪、单证、异常处置与客户通知的履约控制塔。',
|
||||
'customer-followup': {
|
||||
title: '客户跟进专员',
|
||||
caseTitle: '本周客户跟进与会议预约',
|
||||
subtitle: '围绕客户资料整理、意向分层、联系推进与会议预约的一体化跟进工作台。',
|
||||
cases: [
|
||||
{ id: 'lf-01', title: '美西航线本周履约看板', owner: '运营经理', priority: 'P1', due: '实时', summary: '2 单延迟、1 单甩柜,需统一在一个控制塔里处置', status: '异常处置', contextPatch: { outputs: ['异常说明', '最新 ETA 清单'], artifacts: ['客户状态报告.pdf'], risks: ['甩柜异常未关闭'], events: ['09:00 生成客户状态说明'] } },
|
||||
{ id: 'lf-02', title: '华东出口整柜周报', owner: '客服专员', priority: 'P2', due: '今天 16:00', summary: '需要同步对账草稿与客户状态说明', status: '节点跟踪', contextPatch: { outputs: ['对账草稿'], artifacts: ['周报对账.xlsx'], risks: ['一笔附加费待确认'], events: ['10:15 更新应收应付明细'] } },
|
||||
{ id: 'lf-03', title: '欧洲空运急件批次', owner: '项目客服', priority: 'P1', due: '今天 14:00', summary: '航班调整后要重新生成客户 ETA 和改单任务', status: '客户同步', contextPatch: { outputs: ['客户 ETA 更新'], artifacts: ['空运调整通知.md'], risks: ['新航班仍待确认'], events: ['08:45 拉取新航班计划'] } },
|
||||
{ id: 'cf-01', title: '本周客户线索优先级梳理', owner: '销售经理', priority: 'P1', due: '今天 18:00', summary: '8 个客户待分层,需明确优先联系顺序与本周触达计划', status: '意向分层', contextPatch: { outputs: ['客户优先级清单', '本周联系计划'], artifacts: ['客户跟进清单.xlsx'], risks: ['2 个客户资料不完整'], events: ['09:10 汇总 CRM 资料', '10:00 完成首轮意向分层'] } },
|
||||
{ id: 'cf-02', title: 'A 客户演示会议预约', owner: '售前经理', priority: 'P1', due: '明天 15:00', summary: '高意向客户已回复,需确认会议目标、时间与参会人', status: '会议预约', contextPatch: { outputs: ['会议邀约建议', '跟进纪要'], artifacts: ['A客户会议准备.md'], risks: ['客户参会人未最终确认'], events: ['11:20 生成邀约话术'] } },
|
||||
{ id: 'cf-03', title: '老客户续约回访推进', owner: '客户成功经理', priority: 'P2', due: '本周五', summary: '3 个续约客户需要补齐资料并确认下一轮回访节奏', status: '资料归档', contextPatch: { outputs: ['续约回访清单'], artifacts: ['续约客户跟进.md'], risks: ['一个客户历史沟通记录缺失'], events: ['14:30 补齐回访纪要'] } },
|
||||
],
|
||||
tabs: ['进度', '时间线', '异常', '回放'],
|
||||
tabs: ['进度', '时间线', '客户', '回放'],
|
||||
stageSummary: [
|
||||
{ name: '委托接入', status: 'completed' },
|
||||
{ name: '订舱执行', status: 'completed' },
|
||||
{ name: '节点跟踪', status: 'active' },
|
||||
{ name: '异常处置', status: 'active' },
|
||||
{ name: '对账结算', status: 'pending' },
|
||||
{ name: '资料归档', status: 'completed' },
|
||||
{ name: '意向分层', status: 'active' },
|
||||
{ name: '首轮触达', status: 'waiting' },
|
||||
{ name: '会议预约', status: 'active' },
|
||||
{ name: '跟进回写', status: 'pending' },
|
||||
],
|
||||
taskCards: [
|
||||
{ title: '节点跟踪', status: '进行中', detail: '本周 18 单在途,2 单延迟,1 单需改单', tone: 'primary' },
|
||||
{ title: '单证校验', status: '已完成', detail: '提单、装箱单、发票一致性校验通过', tone: 'success' },
|
||||
{ title: '异常升级', status: '待处理', detail: '甩柜异常等待船司回复与客户确认', tone: 'danger' },
|
||||
{ title: '资料归档', status: '已完成', detail: 'CRM、邮件和表格中的客户资料已整理进统一清单', tone: 'success' },
|
||||
{ title: '意向判断', status: '进行中', detail: '正在对 8 个客户做高、中、低意向分层', tone: 'primary' },
|
||||
{ title: '会议推进', status: '待处理', detail: '2 个高意向客户待确认演示时间与参会人', tone: 'warning' },
|
||||
],
|
||||
focusPanels: [
|
||||
{ title: '当前关注', content: '需要把船司节点、邮件和企微异常同步到一个履约事项里。' },
|
||||
{ title: '客户同步', content: '自动生成异常说明、下一步动作和最新 ETA。' },
|
||||
{ title: '下一步', content: '异常关闭后进入费用归集与对账。' },
|
||||
{ title: '当前关注', content: '本周新增客户线索较多,需要先整理资料,再确定优先跟进顺序。' },
|
||||
{ title: '推进焦点', content: '优先推动高意向客户进入会议预约,资料不全的客户先补齐背景。' },
|
||||
{ title: '下一步', content: '输出可直接发送的联系话术,并确认两场演示会议的时间。' },
|
||||
],
|
||||
quickViews: ['全部节点', '异常单', '客户通知', '对账状态'],
|
||||
relatedItems: ['本周舱位清单', '改单记录', '对账草稿'],
|
||||
quickViews: ['客户资料清单', '意向分层', '联系草稿', '会议安排'],
|
||||
relatedItems: ['CRM', '客户跟进表', '会议日程'],
|
||||
context: {
|
||||
outputs: ['异常说明', '最新 ETA 清单', '改单任务'],
|
||||
artifacts: ['客户状态报告.pdf', '提单资料包.zip', '对账草稿.xlsx'],
|
||||
evidence: ['e-7011 船司节点回执', 'e-7012 邮件往来', 'e-7013 单证扫描件'],
|
||||
risks: ['甩柜异常未关闭', '2 单节点延迟', '改单可能影响截关时间'],
|
||||
checkpoints: ['客户确认 ETA', '运营经理确认改单'],
|
||||
relatedObjects: ['Shipment: 美西航线-0816', 'Exception: 甩柜', 'Partner: XX 船司'],
|
||||
outputs: ['客户优先级清单', '联系话术建议', '会议邀约建议'],
|
||||
artifacts: ['客户跟进清单.xlsx', 'A客户会议准备.md', '续约客户跟进.md'],
|
||||
evidence: ['e-cf-01 CRM 客户资料', 'e-cf-02 历史沟通记录', 'e-cf-03 演示需求摘要'],
|
||||
risks: ['2 个客户资料不完整', '一个高意向客户会议时间未最终确认'],
|
||||
checkpoints: ['销售经理确认优先级', '售前经理确认会议目标'],
|
||||
relatedObjects: ['CRM: 客户库', 'Table: 客户跟进表', 'Calendar: 演示日程'],
|
||||
events: [
|
||||
'07:40 拉取船司节点',
|
||||
'08:15 识别异常邮件',
|
||||
'09:00 生成客户状态说明',
|
||||
'09:10 汇总 CRM 资料',
|
||||
'10:00 完成首轮意向分层',
|
||||
'11:20 生成邀约话术',
|
||||
],
|
||||
bottomPanel: {
|
||||
timeline: ['07:40 节点同步', '08:15 异常识别', '09:00 通知客户'],
|
||||
replay: ['回放节点 1: SyncMilestones', '回放节点 2: DetectException', '回放节点 3: NotifyCustomer'],
|
||||
trace: ['connector.carrier.pullMilestone()', 'plugin.logistics.detectException()', 'connector.wecom.sendNotice()'],
|
||||
logs: ['[INFO] 18 shipments synced', '[WARN] exception ship-002 delayed', '[INFO] notice sent to customer'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'hr-email-sorter': {
|
||||
title: 'HR 邮件整理专员',
|
||||
caseTitle: '招聘邮箱邮件处理',
|
||||
subtitle: '自动识别简历邮件、抽取候选人字段、去重归类并写入候选人表。',
|
||||
cases: [
|
||||
{ id: 'hes-01', title: '本周招聘邮箱邮件处理', owner: 'HR 专员', priority: 'P2', due: '今天 18:00', summary: '3 封待处理邮件需识别并归档', status: '邮件处理', contextPatch: { outputs: ['候选人提取清单'], artifacts: ['邮件处理日志.md'], risks: ['一封邮件附件格式不支持'], events: ['09:30 拉取未读邮件'] } },
|
||||
{ id: 'hes-02', title: '华南销售岗简历归档', owner: '招聘经理', priority: 'P2', due: '明天 12:00', summary: '需从收件箱批量提取候选人并去重', status: '批量提取', contextPatch: { outputs: ['批量候选人清单'], artifacts: ['华南销售候选人.xlsx'], risks: ['同候选人重复投递'], events: ['10:15 完成去重比对'] } },
|
||||
],
|
||||
tabs: ['进度', '时间线', '邮件列表', '回放'],
|
||||
stageSummary: [
|
||||
{ name: '邮件拉取', status: 'completed' },
|
||||
{ name: '简历识别', status: 'active' },
|
||||
{ name: '候选人提取', status: 'waiting' },
|
||||
{ name: '去重归档', status: 'pending' },
|
||||
],
|
||||
taskCards: [
|
||||
{ title: '邮件识别', status: '进行中', detail: '正在扫描 3 封新邮件中的简历特征', tone: 'primary' },
|
||||
{ title: '字段抽取', status: '待处理', detail: '识别完成后再抽取姓名、电话、岗位', tone: 'warning' },
|
||||
{ title: '去重写入', status: '待处理', detail: '抽取后与现有候选人表比对去重', tone: 'warning' },
|
||||
],
|
||||
focusPanels: [
|
||||
{ title: '当前关注', content: '招聘邮箱收到新邮件,需要判断是否为简历邮件。' },
|
||||
{ title: '处理焦点', content: '确保附件(pdf/doc)正确解析、同发件人附件做去重。' },
|
||||
{ title: '下一步', content: '抽取完成后写入候选人表,触发简历处理专员。' },
|
||||
],
|
||||
quickViews: ['待处理邮件', '已提取候选人', '去重记录', '归档日志'],
|
||||
relatedItems: ['招聘邮箱收件箱', '候选人表', '岗位需求表'],
|
||||
context: {
|
||||
outputs: ['候选人提取清单', '邮件处理日志'],
|
||||
artifacts: ['邮件处理日志.md', '候选人清单.xlsx'],
|
||||
evidence: ['e-hr-01 招聘邮件', 'e-hr-02 简历附件'],
|
||||
risks: ['一封邮件附件格式不支持', '同候选人重复投递'],
|
||||
checkpoints: ['HR 专员确认提取结果'],
|
||||
relatedObjects: ['Mailbox: HR 招聘邮箱', 'Table: 候选人表', 'Attachment: 简历 pdf/doc'],
|
||||
events: ['09:30 拉取未读邮件', '10:15 完成去重比对'],
|
||||
bottomPanel: {
|
||||
timeline: ['09:00 检查收件箱', '09:30 拉取 3 封新邮件', '10:15 去重比对完成'],
|
||||
replay: ['回放节点 1: FetchMails', '回放节点 2: IdentifyResumes', '回放节点 3: ExtractFields'],
|
||||
trace: ['connector.email.fetchInbox()', 'plugin.resume.identify()', 'plugin.resume.extract()'],
|
||||
logs: ['[INFO] 3 new emails fetched', '[WARN] 1 attachment format unsupported', '[INFO] dedup comparison done'],
|
||||
timeline: ['09:10 资料同步', '10:00 意向分层', '11:20 生成邀约建议'],
|
||||
replay: ['回放节点 1: CollectCustomerProfiles', '回放节点 2: ScoreIntent', '回放节点 3: DraftOutreach'],
|
||||
trace: ['connector.crm.sync()', 'plugin.followup.rank()', 'plugin.meeting.compose()'],
|
||||
logs: ['[INFO] customer profiles synced', '[WARN] 2 incomplete profiles detected', '[INFO] outreach draft generated'],
|
||||
},
|
||||
},
|
||||
},
|
||||
'resume-processor': {
|
||||
title: '简历处理专员',
|
||||
caseTitle: '候选人筛选与面试安排',
|
||||
subtitle: '基于候选人表筛选匹配岗位要求、评分排序并发起面试安排。',
|
||||
title: '招聘筛选专员',
|
||||
caseTitle: '招聘入口归档、候选人筛选与面试安排',
|
||||
subtitle: '先收拢招聘邮箱和候选人资料,再按岗位要求完成筛选、排序并推进面试安排。',
|
||||
cases: [
|
||||
{ id: 'rp-01', title: '华南销售岗候选人筛选', owner: '招聘经理', priority: 'P1', due: '今天 17:00', summary: '5 份待筛选简历需匹配岗位要求并排序', status: '简历筛选', contextPatch: { outputs: ['候选人评分表', '面试推荐清单'], artifacts: ['华南销售筛选报告.pdf'], risks: ['一个候选人经历与岗位不完全匹配'], events: ['09:45 拉取候选人表', '10:30 完成自动评分'] } },
|
||||
{ id: 'rp-01', title: '华南销售岗候选人筛选', owner: '招聘经理', priority: 'P1', due: '今天 17:00', summary: '3 封邮件待归档、5 份候选人待匹配岗位要求并排序', status: '候选人筛选', contextPatch: { outputs: ['候选人评分表', '面试推荐清单'], artifacts: ['华南销售筛选报告.pdf'], risks: ['一个候选人经历与岗位不完全匹配'], events: ['09:30 拉取招聘邮件', '09:45 拉取候选人表', '10:30 完成自动评分'] } },
|
||||
{ id: 'rp-02', title: '华东实施岗面试安排', owner: 'HR 主管', priority: 'P2', due: '明天 14:00', summary: '2 个候选人已通过初筛,需安排技术面试', status: '面试安排', contextPatch: { outputs: ['面试邀请草稿'], artifacts: ['面试安排表.xlsx'], risks: ['面试官时间待确认'], events: ['08:50 拉取通过名单'] } },
|
||||
],
|
||||
tabs: ['进度', '时间线', '候选人列表', '回放'],
|
||||
stageSummary: [
|
||||
{ name: '候选人拉取', status: 'completed' },
|
||||
{ name: '岗位匹配', status: 'active' },
|
||||
{ name: '招聘入口归档', status: 'completed' },
|
||||
{ name: '候选人整理', status: 'active' },
|
||||
{ name: '评分排序', status: 'waiting' },
|
||||
{ name: '面试安排', status: 'pending' },
|
||||
],
|
||||
taskCards: [
|
||||
{ title: '入口归档', status: '已完成', detail: '已把 3 封招聘邮件和附件整理进候选人清单', tone: 'success' },
|
||||
{ title: '岗位匹配', status: '进行中', detail: '正在对比 5 份候选人与华南销售岗要求', tone: 'primary' },
|
||||
{ title: '评分排序', status: '待处理', detail: '匹配完成后按综合评分排序', tone: 'warning' },
|
||||
{ title: '面试安排', status: '待处理', detail: '排序完成后发起面试邀请', tone: 'warning' },
|
||||
],
|
||||
focusPanels: [
|
||||
{ title: '当前关注', content: '销售岗位要求 3 年以上经验,有行业客户资源优先。' },
|
||||
{ title: '筛选焦点', content: '按经验年资、行业匹配度、沟通能力三个维度评分。' },
|
||||
{ title: '当前关注', content: '招聘邮件和附件已归档,当前要按岗位要求完成候选人筛选。' },
|
||||
{ title: '筛选焦点', content: '按经验年资、行业匹配度、沟通能力三个维度评分,并保留邮件来源。' },
|
||||
{ title: '下一步', content: '排序后生成推荐清单,等待招聘经理确认后发起面试。' },
|
||||
],
|
||||
quickViews: ['待筛选简历', '已评分候选人', '面试排期', '通过率统计'],
|
||||
relatedItems: ['岗位需求表', '候选人表', '面试安排表'],
|
||||
quickViews: ['待处理邮件', '待筛选简历', '已评分候选人', '面试排期'],
|
||||
relatedItems: ['招聘邮箱', '岗位需求表', '候选人表', '面试安排表'],
|
||||
context: {
|
||||
outputs: ['候选人评分表', '面试推荐清单', '面试邀请'],
|
||||
outputs: ['候选人归档清单', '候选人评分表', '面试推荐清单', '面试邀请'],
|
||||
artifacts: ['华南销售筛选报告.pdf', '面试安排表.xlsx'],
|
||||
evidence: ['e-rp-01 候选人简历', 'e-rp-02 岗位描述', 'e-rp-03 面试反馈模板'],
|
||||
evidence: ['e-rp-01 招聘邮件', 'e-rp-02 候选人简历', 'e-rp-03 岗位描述', 'e-rp-04 面试反馈模板'],
|
||||
risks: ['一个候选人经历与岗位不完全匹配', '面试官时间待确认'],
|
||||
checkpoints: ['招聘经理确认推荐清单', 'HR 主管确认面试安排'],
|
||||
relatedObjects: ['Position: 华南销售岗', 'Table: 候选人表', 'Interview: 面试安排表'],
|
||||
events: ['09:45 拉取候选人表', '10:30 完成自动评分', '10:50 生成面试推荐清单'],
|
||||
relatedObjects: ['Mailbox: 招聘邮箱', 'Position: 华南销售岗', 'Table: 候选人表', 'Interview: 面试安排表'],
|
||||
events: ['09:30 拉取招聘邮件', '09:45 拉取候选人表', '10:30 完成自动评分', '10:50 生成面试推荐清单'],
|
||||
bottomPanel: {
|
||||
timeline: ['09:00 拉取岗位需求', '09:45 获取候选人列表', '10:30 自动评分完成'],
|
||||
replay: ['回放节点 1: LoadCandidates', '回放节点 2: MatchRequirements', '回放节点 3: ScoreAndRank'],
|
||||
|
||||
@@ -10,18 +10,13 @@ import reportGenerationManifest from '@/skills/packages/report-generation/manife
|
||||
import pptGenerationManifest from '@/skills/packages/ppt-generation/manifest'
|
||||
import mindMapManifest from '@/skills/packages/mind-map/manifest'
|
||||
import longformWritingManifest from '@/skills/packages/longform-writing/manifest'
|
||||
import textToolkitManifest from '@/skills/packages/text-toolkit/manifest'
|
||||
import ocrUnderstandingManifest from '@/skills/packages/ocr-understanding/manifest'
|
||||
import meetingMinutesManifest from '@/skills/packages/meeting-minutes/manifest'
|
||||
import projectPlanningManifest from '@/skills/packages/project-planning/manifest'
|
||||
import emailDraftingManifest from '@/skills/packages/email-drafting/manifest'
|
||||
import tableCleanupManifest from '@/skills/packages/table-cleanup/manifest'
|
||||
import proposalSummaryManifest from '@/skills/packages/proposal-summary/manifest'
|
||||
import progressReportManifest from '@/skills/packages/progress-report/manifest'
|
||||
import contractBriefManifest from '@/skills/packages/contract-brief/manifest'
|
||||
import interviewSummaryManifest from '@/skills/packages/interview-summary/manifest'
|
||||
import policyRewriteManifest from '@/skills/packages/policy-rewrite/manifest'
|
||||
import surveySummaryManifest from '@/skills/packages/survey-summary/manifest'
|
||||
|
||||
// Register office skill execution builders (side-effect import).
|
||||
// This centralizes all package→execution imports into one place.
|
||||
@@ -38,18 +33,13 @@ export const builtinSkillManifests = [
|
||||
pptGenerationManifest,
|
||||
mindMapManifest,
|
||||
longformWritingManifest,
|
||||
textToolkitManifest,
|
||||
ocrUnderstandingManifest,
|
||||
meetingMinutesManifest,
|
||||
projectPlanningManifest,
|
||||
emailDraftingManifest,
|
||||
tableCleanupManifest,
|
||||
proposalSummaryManifest,
|
||||
progressReportManifest,
|
||||
contractBriefManifest,
|
||||
interviewSummaryManifest,
|
||||
policyRewriteManifest,
|
||||
surveySummaryManifest,
|
||||
]
|
||||
|
||||
const builtinSkillRegistry = createRegistry(builtinSkillManifests)
|
||||
|
||||
@@ -6,8 +6,9 @@ import {
|
||||
|
||||
export default createSkillManifest({
|
||||
key: 'audio-transcribe',
|
||||
label: '语音转写',
|
||||
caption: '转写 / 分段 / 重点整理',
|
||||
label: '会议音频分析(转写)',
|
||||
caption: '一小时录音,自动出纪要。',
|
||||
description: '一小时录音,自动出纪要。 操作:打开「会议音频分析」,上传音频(MP3/M4A/WAV)→ AI 自动转写(带说话人标签)→ 同时输出纪要 + 待办清单 + 思维导图',
|
||||
color: '#5263c3',
|
||||
skillTags: ['逐字转写', '说话人分段', '重点提炼', '纪要整理'],
|
||||
workflowSchema: [
|
||||
|
||||
@@ -6,8 +6,9 @@ import {
|
||||
|
||||
export default createSkillManifest({
|
||||
key: 'batch-extract',
|
||||
label: '批量提取',
|
||||
caption: '字段设计 / 批量抽取 / 异常复核',
|
||||
label: '批量字段提取 → Excel',
|
||||
caption: '上百份文件的关键信息,自动汇表。',
|
||||
description: '上百份文件的关键信息,自动汇表。 操作:在「智能助手」中选择目标知识库 → 用自然语言告诉 AI 需要哪些字段 → AI 自动遍历每份文件,逐项提取,保存为 Excel',
|
||||
color: '#39b07a',
|
||||
skillTags: ['字段抽取', '批量处理', '结构化输出', '异常回看'],
|
||||
workflowSchema: [
|
||||
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.contract-brief',
|
||||
code: 'EAI-T-212',
|
||||
key: 'contract-brief',
|
||||
label: '合同要点提炼',
|
||||
label: '合同批量审查与提取(提取)',
|
||||
category: 'document',
|
||||
artifactType: 'summary',
|
||||
fileFormat: 'md',
|
||||
color: '#dc2626',
|
||||
description: '把合同、协议和条款材料压缩成核心要点、风险提示和待确认事项,方便业务快速预读。',
|
||||
description: '几十份合同,自动提取甲方、乙方、金额、付款方式等关键字段,一键汇总成 Excel 总表。还能按条件筛选"百万以上合同"或"涉及公路运输的合同",并自动归纳违约金条款。',
|
||||
defaultPrompt: '把这份采购合同提炼成要点摘要和待确认项',
|
||||
resultTitle: '合同要点摘要',
|
||||
summary: '已提炼出合同核心条款、主要风险和待确认事项,方便快速预读和继续审查。',
|
||||
|
||||
@@ -6,8 +6,9 @@ import {
|
||||
|
||||
export default createSkillManifest({
|
||||
key: 'contract-review',
|
||||
label: '合同审查',
|
||||
caption: '条款识别 / 风险判断 / 审查交付',
|
||||
label: '合同批量审查与提取(审查)',
|
||||
caption: '几十份合同,自动提取关键字段,一键汇总成 Excel 总表。',
|
||||
description: '几十份合同,自动提取甲方、乙方、金额、付款方式等关键字段,一键汇总成 Excel 总表。还能按条件筛选"百万以上合同"或"涉及公路运输的合同",并自动归纳违约金条款。',
|
||||
color: '#f56c6c',
|
||||
skillTags: ['风险识别', '待确认项', '红线建议', '审查结果'],
|
||||
workflowSchema: [
|
||||
|
||||
@@ -7,7 +7,8 @@ import {
|
||||
export default createSkillManifest({
|
||||
key: 'copy-proofreading',
|
||||
label: '文案校对',
|
||||
caption: '问题定位 / 表达优化 / 风格收口',
|
||||
caption: '错别字、语病,一键标出。',
|
||||
description: '错别字、语病,一键标出。 操作:打开「文案校对」,上传文档 → AI 自动逐句检查,标注错别字、语法问题 → 返回带高亮修订版 + 修改建议,可一键采纳',
|
||||
color: '#e6a23c',
|
||||
skillTags: ['错别字检查', '语病修正', '语气统一', '风格优化'],
|
||||
workflowSchema: [
|
||||
|
||||
@@ -7,7 +7,8 @@ import {
|
||||
export default createSkillManifest({
|
||||
key: 'document-translate',
|
||||
label: '文档翻译',
|
||||
caption: '译文生成 / 术语统一 / 多格式导出',
|
||||
caption: '整份翻译,排版原封不动。',
|
||||
description: '整份翻译,排版原封不动。 操作:打开「文档翻译」,上传文件(Word/PDF/PPT/Excel)→ 选择目标语言 → 下载译文——排版、表格、图片位置全部保留',
|
||||
color: '#67c23a',
|
||||
skillTags: ['术语统一', '语气对齐', '格式保留', '双语摘要'],
|
||||
workflowSchema: [
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
import {
|
||||
buildEmailSubjectVariants,
|
||||
extractPoints,
|
||||
parseStructuredFields,
|
||||
pickTopic,
|
||||
slugify,
|
||||
splitSimpleList,
|
||||
} from '@/skills/shared/officeArtifacts'
|
||||
|
||||
export function buildExecution(inputText = '') {
|
||||
const { fields, bodyText } = parseStructuredFields(inputText, {
|
||||
recipient: ['收件人', '对象', 'recipient', 'to'],
|
||||
cc: ['抄送', '抄送人', 'cc'],
|
||||
topic: ['主题', '标题', 'topic', 'subject'],
|
||||
purpose: ['目的', '意图', 'purpose'],
|
||||
action: ['希望对方', '需要对方', 'action'],
|
||||
deadline: ['时间', '截止时间', 'deadline'],
|
||||
tone: ['语气', '风格', 'tone', 'style'],
|
||||
})
|
||||
const topic = fields.topic || pickTopic(bodyText || inputText, '邮件主题')
|
||||
const recipient = fields.recipient || '各位'
|
||||
const ccList = splitSimpleList(fields.cc)
|
||||
const purpose = fields.purpose || '同步背景和当前进展'
|
||||
const action = fields.action || '请协助确认并继续推进'
|
||||
const deadline = fields.deadline || '请尽快反馈'
|
||||
const tone = fields.tone || '正式、明确、礼貌'
|
||||
const points = extractPoints(bodyText || inputText, [
|
||||
'交代背景和当前情况',
|
||||
'说明希望对方配合或确认的事项',
|
||||
'给出时间点和下一步动作',
|
||||
'保持礼貌但结论清楚',
|
||||
])
|
||||
const subjectVariants = buildEmailSubjectVariants(topic, purpose)
|
||||
const subject = subjectVariants[0]
|
||||
const emailContent = [
|
||||
`主题:${subject}`,
|
||||
`收件人:${recipient}`,
|
||||
`抄送:${ccList.length ? ccList.join('、') : '无'}`,
|
||||
'',
|
||||
`${recipient}好,`,
|
||||
'',
|
||||
`${purpose}。${points[0] || '这边同步一下当前事项的背景和进展。'}`,
|
||||
`${action}。${points[1] || '目前需要大家协助确认相关事项。'}`,
|
||||
`${deadline}。${points[2] || '如无问题,请按约定时间继续推进。'}`,
|
||||
'',
|
||||
`语气建议:${tone}。如有问题,请直接回复沟通。`,
|
||||
'',
|
||||
'谢谢。',
|
||||
].join('\n').trim()
|
||||
const shortContent = [
|
||||
`【${topic}】`,
|
||||
`${points[1] || '请协助确认相关事项。'}`,
|
||||
`${points[2] || '如无问题请按时推进。'}`,
|
||||
].join('\n').trim()
|
||||
const briefContent = [
|
||||
'# 邮件要点',
|
||||
'',
|
||||
`- 主题:${subject}`,
|
||||
...points.slice(0, 4).map((item) => `- ${item}`),
|
||||
].join('\n').trim()
|
||||
const subjectContent = [
|
||||
'# 主题与抄送建议',
|
||||
'',
|
||||
`- 收件人:${recipient}`,
|
||||
`- 抄送建议:${ccList.length ? ccList.join('、') : '建议抄送直属负责人 / 相关协同方'}`,
|
||||
'',
|
||||
'## 可选主题',
|
||||
...subjectVariants.map((item, index) => `${index + 1}. ${item}`),
|
||||
].join('\n').trim()
|
||||
const slug = slugify(topic, 'email-drafting')
|
||||
|
||||
return {
|
||||
title: '邮件草稿',
|
||||
summary: `已按“${recipient} / ${topic}”生成正式邮件、短消息版和邮件要点摘要。`,
|
||||
highlights: ['适合通知、催办、确认和汇报邮件', '会识别收件人、抄送、目的、时间和语气', '新增可直接挑选的主题变体'],
|
||||
artifacts: [
|
||||
{
|
||||
key: 'email',
|
||||
title: '正式邮件',
|
||||
description: '可直接复制到邮箱发送的完整版本。',
|
||||
kind: 'text',
|
||||
fileFormat: 'txt',
|
||||
mimeType: 'text/plain;charset=utf-8',
|
||||
downloadName: `${slug}.txt`,
|
||||
content: emailContent,
|
||||
},
|
||||
{
|
||||
key: 'short-followup',
|
||||
title: '简短跟进版',
|
||||
description: '适合发到 IM 或群里的短消息版本。',
|
||||
kind: 'text',
|
||||
fileFormat: 'txt',
|
||||
mimeType: 'text/plain;charset=utf-8',
|
||||
downloadName: `${slug}-short.txt`,
|
||||
content: shortContent,
|
||||
},
|
||||
{
|
||||
key: 'brief',
|
||||
title: '邮件要点',
|
||||
description: '方便审批或复核邮件口径的要点版。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}-brief.md`,
|
||||
content: briefContent,
|
||||
},
|
||||
{
|
||||
key: 'subject-variants',
|
||||
title: '主题与抄送建议',
|
||||
description: '提供多版主题候选和抄送建议。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}-subject.md`,
|
||||
content: subjectContent,
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
import { createOfficeSkillManifest } from '@/skills/contracts/manifest'
|
||||
|
||||
export default createOfficeSkillManifest({
|
||||
id: 'eai.email-drafting',
|
||||
code: 'EAI-T-208',
|
||||
key: 'email-drafting',
|
||||
label: '邮件起草',
|
||||
category: 'communication',
|
||||
artifactType: 'document',
|
||||
fileFormat: 'txt',
|
||||
color: '#0f766e',
|
||||
description: '把沟通意图、背景和要求整理成可直接发送的正式邮件,并附带简短跟进版本。',
|
||||
defaultPrompt: '帮我起草一封推进客户回款的正式邮件',
|
||||
resultTitle: '邮件草稿',
|
||||
summary: '已生成一版可直接发送的邮件正文,并补了简短跟进版本和要点摘要。',
|
||||
highlights: ['适合汇报、催办、确认和通知', '兼顾正式语气与清晰表达', '默认沉淀长邮件和短消息版本'],
|
||||
taskPlanTitle: '邮件起草流程',
|
||||
planSteps: ['识别沟通目的', '整理背景与重点', '生成正式邮件', '补充简短跟进版本'],
|
||||
})
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.interview-summary',
|
||||
code: 'EAI-T-213',
|
||||
key: 'interview-summary',
|
||||
label: '访谈整理',
|
||||
label: '招聘简历助手',
|
||||
category: 'summary',
|
||||
artifactType: 'document',
|
||||
fileFormat: 'md',
|
||||
color: '#7c3aed',
|
||||
description: '把访谈记录、用户调研和深度沟通内容整理成主题摘要、洞察结论和后续动作。',
|
||||
description: '自然语言筛简历,多人对比。 操作:打开「招聘简历助手」,上传简历文件 → 用自然语言描述岗位需求 → AI 逐条匹配,自动生成多人对比表',
|
||||
defaultPrompt: '把这份用户访谈记录整理成主题摘要和洞察结论',
|
||||
resultTitle: '访谈整理稿',
|
||||
summary: '已把访谈内容收成主题摘要、洞察结论和后续建议,方便继续分析或汇报。',
|
||||
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.longform-writing',
|
||||
code: 'EAI-T-203',
|
||||
key: 'longform-writing',
|
||||
label: '长文创作',
|
||||
label: '公文辅助写作(长文)',
|
||||
category: 'writing',
|
||||
artifactType: 'document',
|
||||
fileFormat: 'docx',
|
||||
color: '#b45309',
|
||||
description: '统一承接论文、方案、制度文档、公众号长文等长文任务,先搭大纲,再分段生成正文。',
|
||||
description: '通知、报告、函,一键起草。 操作:选择「公文辅助写作」→ 用自然语言描述公文内容 → AI 自动生成符合规范的公文初稿,字体字号符合标准',
|
||||
defaultPrompt: '围绕企业 AI 落地写一篇完整方案',
|
||||
resultTitle: '长文草稿',
|
||||
summary: '已按长文写作流程生成大纲与正文骨架,适合继续细化为正式稿。',
|
||||
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.meeting-minutes',
|
||||
code: 'EAI-T-206',
|
||||
key: 'meeting-minutes',
|
||||
label: '会议纪要',
|
||||
label: '会议音频分析(纪要)',
|
||||
category: 'document',
|
||||
artifactType: 'document',
|
||||
fileFormat: 'md',
|
||||
color: '#7c3aed',
|
||||
description: '把会议记录、聊天记录和零散讨论整理成正式纪要、决议摘要和待办清单。',
|
||||
description: '一小时录音,自动出纪要。 操作:打开「会议音频分析」,上传音频(MP3/M4A/WAV)→ AI 自动转写(带说话人标签)→ 同时输出纪要 + 待办清单 + 思维导图',
|
||||
defaultPrompt: '把这段项目例会记录整理成正式会议纪要',
|
||||
resultTitle: '会议纪要草稿',
|
||||
summary: '已按会议纪要结构整理出主题、结论和待办,方便直接同步给参会人。',
|
||||
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.mind-map',
|
||||
code: 'EAI-T-202',
|
||||
key: 'mind-map',
|
||||
label: '思维导图',
|
||||
label: '会议音频分析(思维导图)',
|
||||
category: 'structure',
|
||||
artifactType: 'mindmap',
|
||||
fileFormat: 'svg',
|
||||
color: '#0f766e',
|
||||
description: '把一句话主题、会议纪要或长文本快速展开成结构化导图,适合梳理任务与知识结构。',
|
||||
description: '一小时录音,自动出纪要。 操作:打开「会议音频分析」,上传音频(MP3/M4A/WAV)→ AI 自动转写(带说话人标签)→ 同时输出纪要 + 待办清单 + 思维导图',
|
||||
defaultPrompt: '把这次项目启动会整理成一版思维导图',
|
||||
resultTitle: '导图结构草案',
|
||||
summary: '已把输入内容压缩成层级结构,方便继续扩展节点或导出成导图文件。',
|
||||
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.ocr-understanding',
|
||||
code: 'EAI-T-205',
|
||||
key: 'ocr-understanding',
|
||||
label: 'OCR / 图文理解',
|
||||
label: '图片/扫描件智能识别',
|
||||
category: 'vision',
|
||||
artifactType: 'document',
|
||||
fileFormat: 'md',
|
||||
color: '#0ea5e9',
|
||||
description: '识别图片、截图和扫描件中的文字与结构信息,并提炼为摘要或结构化字段。',
|
||||
description: '拍照即提取,长图也能问。 操作:把图片拖进聊天框(JPG/PNG/长图/扫描件均可)→ 用自然语言描述要提取什么 → AI 自动识别内容并结构化输出',
|
||||
defaultPrompt: '识别这张截图里的文字并整理成结构化摘要',
|
||||
resultTitle: '识别结果摘要',
|
||||
summary: '已按图文理解流程准备好识别与整理结果的第一版结构,方便继续抽字段或生成摘要。',
|
||||
|
||||
@@ -9,14 +9,12 @@
|
||||
import { registerOfficeExecution } from '@/skills/shared/officeExecutionRegistry'
|
||||
|
||||
// Communication skills
|
||||
import { buildExecution as buildEmailDraftingExecution } from '@/skills/packages/email-drafting/execution'
|
||||
import { buildExecution as buildMeetingMinutesExecution } from '@/skills/packages/meeting-minutes/execution'
|
||||
import { buildExecution as buildProgressReportExecution } from '@/skills/packages/progress-report/execution'
|
||||
|
||||
// Structure skills
|
||||
import { buildExecution as buildMindMapExecution } from '@/skills/packages/mind-map/execution'
|
||||
import { buildExecution as buildPptExecution } from '@/skills/packages/ppt-generation/execution'
|
||||
import { buildExecution as buildProjectPlanningExecution } from '@/skills/packages/project-planning/execution'
|
||||
import { buildExecution as buildTableCleanupExecution } from '@/skills/packages/table-cleanup/execution'
|
||||
|
||||
// Writing skills
|
||||
@@ -25,23 +23,15 @@ import { buildExecution as buildInterviewSummaryExecution } from '@/skills/packa
|
||||
import { buildExecution as buildLongformExecution } from '@/skills/packages/longform-writing/execution'
|
||||
import { buildExecution as buildOcrExecution } from '@/skills/packages/ocr-understanding/execution'
|
||||
import { buildExecution as buildPolicyRewriteExecution } from '@/skills/packages/policy-rewrite/execution'
|
||||
import { buildExecution as buildProposalSummaryExecution } from '@/skills/packages/proposal-summary/execution'
|
||||
import { buildExecution as buildSurveySummaryExecution } from '@/skills/packages/survey-summary/execution'
|
||||
import { buildExecution as buildTextToolkitExecution } from '@/skills/packages/text-toolkit/execution'
|
||||
|
||||
// Register all execution builders
|
||||
registerOfficeExecution('email-drafting', buildEmailDraftingExecution)
|
||||
registerOfficeExecution('meeting-minutes', buildMeetingMinutesExecution)
|
||||
registerOfficeExecution('progress-report', buildProgressReportExecution)
|
||||
registerOfficeExecution('mind-map', buildMindMapExecution)
|
||||
registerOfficeExecution('ppt-generation', buildPptExecution)
|
||||
registerOfficeExecution('project-planning', buildProjectPlanningExecution)
|
||||
registerOfficeExecution('table-cleanup', buildTableCleanupExecution)
|
||||
registerOfficeExecution('contract-brief', buildContractBriefExecution)
|
||||
registerOfficeExecution('interview-summary', buildInterviewSummaryExecution)
|
||||
registerOfficeExecution('longform-writing', buildLongformExecution)
|
||||
registerOfficeExecution('ocr-understanding', buildOcrExecution)
|
||||
registerOfficeExecution('policy-rewrite', buildPolicyRewriteExecution)
|
||||
registerOfficeExecution('proposal-summary', buildProposalSummaryExecution)
|
||||
registerOfficeExecution('survey-summary', buildSurveySummaryExecution)
|
||||
registerOfficeExecution('text-toolkit', buildTextToolkitExecution)
|
||||
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.policy-rewrite',
|
||||
code: 'EAI-T-214',
|
||||
key: 'policy-rewrite',
|
||||
label: '制度改写',
|
||||
label: '公文辅助写作(制度)',
|
||||
category: 'writing',
|
||||
artifactType: 'document',
|
||||
fileFormat: 'md',
|
||||
color: '#6d28d9',
|
||||
description: '把制度、规范和说明文本重写成更清楚、更统一的正式版本,并补出修订说明。',
|
||||
description: '通知、报告、函,一键起草。 操作:选择「公文辅助写作」→ 用自然语言描述公文内容 → AI 自动生成符合规范的公文初稿,字体字号符合标准',
|
||||
defaultPrompt: '把这份报销制度改写成更正式清晰的版本',
|
||||
resultTitle: '制度改写稿',
|
||||
summary: '已将原制度改写为更清楚统一的正式版本,并补了修订说明和执行提示。',
|
||||
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.ppt-generation',
|
||||
code: 'EAI-T-201',
|
||||
key: 'ppt-generation',
|
||||
label: 'PPT 生成',
|
||||
label: '一键生成 PPT',
|
||||
category: 'document',
|
||||
artifactType: 'presentation',
|
||||
fileFormat: 'pptx',
|
||||
color: '#4f46e5',
|
||||
description: '根据主题、受众和材料,先整理演示逻辑,再生成可继续细化的演示文稿骨架。',
|
||||
description: '从资料到演示文稿,一步到位。 操作:在「智能助手」中上传资料或录音 → 说"基于这份资料生成一份 8 页 PPT" → 下载 .pptx 文件,每页标题清晰、要点完整',
|
||||
defaultPrompt: '为季度经营复盘生成一版 8 页 PPT 大纲',
|
||||
resultTitle: '演示文稿骨架',
|
||||
summary: '已按主题、受众和页数要求整理出演示逻辑,并给出可继续细化的文稿骨架。',
|
||||
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.progress-report',
|
||||
code: 'EAI-T-211',
|
||||
key: 'progress-report',
|
||||
label: '周报 / 日报',
|
||||
label: '一键周报',
|
||||
category: 'report',
|
||||
artifactType: 'document',
|
||||
fileFormat: 'md',
|
||||
color: '#16a34a',
|
||||
description: '把工作记录、聊天记录和事项进展整理成日报、周报或阶段同步,补齐风险和下步计划。',
|
||||
description: '把一周的日报丢给智能体,自动归纳重点工作、进展与下周计划,生成结构化周报,直接提交。',
|
||||
defaultPrompt: '根据这些工作记录整理一版项目周报',
|
||||
resultTitle: '进展汇报草稿',
|
||||
summary: '已整理出本期进展、风险事项和下一步计划,方便直接同步给负责人。',
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
import {
|
||||
buildProjectStageRows,
|
||||
extractPoints,
|
||||
parseStructuredFields,
|
||||
pickTopic,
|
||||
slugify,
|
||||
} from '@/skills/shared/officeArtifacts'
|
||||
|
||||
export function buildExecution(inputText = '') {
|
||||
const { fields, bodyText } = parseStructuredFields(inputText, {
|
||||
topic: ['项目', '项目名称', '主题', 'topic'],
|
||||
deadline: ['时间要求', '截止时间', 'deadline'],
|
||||
owner: ['负责人', 'owner'],
|
||||
goal: ['目标', 'goal'],
|
||||
start: ['开始时间', '启动时间', 'start'],
|
||||
})
|
||||
const topic = fields.topic || pickTopic(bodyText || inputText, '项目规划')
|
||||
const deadline = fields.deadline || '待确认'
|
||||
const owner = fields.owner || '待指定'
|
||||
const goal = fields.goal || '先明确目标、阶段、依赖和协同方式'
|
||||
const start = fields.start || '尽快启动'
|
||||
const points = extractPoints(bodyText || inputText, [
|
||||
'明确目标、范围和成功标准',
|
||||
'梳理关键里程碑与交付节点',
|
||||
'安排执行分工与协同节奏',
|
||||
'识别风险与外部依赖',
|
||||
])
|
||||
const stageRows = buildProjectStageRows(points, owner, deadline)
|
||||
const planContent = [
|
||||
`# ${topic}`,
|
||||
'',
|
||||
'## 项目目标',
|
||||
`围绕“${topic}”整理一版可执行的项目规划,先确保目标、阶段和依赖都清楚。`,
|
||||
`- 负责人:${owner}`,
|
||||
`- 启动时间:${start}`,
|
||||
`- 时间要求:${deadline}`,
|
||||
`- 总体目标:${goal}`,
|
||||
'',
|
||||
'## 阶段安排',
|
||||
'### 阶段 1:启动与对齐',
|
||||
`- ${points[0] || '明确目标和边界'}`,
|
||||
'### 阶段 2:执行与推进',
|
||||
`- ${points[1] || '推进关键里程碑和核心交付'}`,
|
||||
'### 阶段 3:验收与收口',
|
||||
`- ${points[2] || '完成验收、复盘和沉淀'}`,
|
||||
].join('\n').trim()
|
||||
const milestoneContent = [
|
||||
'# 里程碑清单',
|
||||
'',
|
||||
...points.slice(0, 5).map((item, index) => `${index + 1}. M${index + 1}:${item}`),
|
||||
].join('\n').trim()
|
||||
const riskContent = [
|
||||
'# 风险与依赖',
|
||||
'',
|
||||
`- 风险 1:${points[3] || '关键依赖尚未完全明确'}`,
|
||||
'- 风险 2:跨团队协同节奏可能影响排期',
|
||||
'- 建议:将关键依赖提前前置到周会或启动会确认',
|
||||
].join('\n').trim()
|
||||
const ganttContent = [
|
||||
'# 阶段排期表',
|
||||
'',
|
||||
'| 阶段 | 时间窗 | 负责人 | 目标 | 交付物 |',
|
||||
'| --- | --- | --- | --- | --- |',
|
||||
...stageRows.map((item) => `| ${item.stage} | ${item.window} | ${item.owner} | ${item.goal} | ${item.output} |`),
|
||||
].join('\n').trim()
|
||||
const slug = slugify(topic, 'project-planning')
|
||||
|
||||
return {
|
||||
title: '项目规划草案',
|
||||
summary: `已按“${topic} / ${deadline}”整理出阶段计划、里程碑和风险清单。`,
|
||||
highlights: ['阶段计划清晰', '会识别负责人、时间要求和项目目标', '新增可直接评审的阶段排期表'],
|
||||
artifacts: [
|
||||
{
|
||||
key: 'project-plan',
|
||||
title: '项目计划',
|
||||
description: '适合直接评审和继续细化的主计划。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}.md`,
|
||||
content: planContent,
|
||||
},
|
||||
{
|
||||
key: 'milestones',
|
||||
title: '里程碑清单',
|
||||
description: '关键节点和交付节奏的简洁版列表。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}-milestones.md`,
|
||||
content: milestoneContent,
|
||||
},
|
||||
{
|
||||
key: 'risks',
|
||||
title: '风险清单',
|
||||
description: '项目推进前需要确认的风险与依赖。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}-risks.md`,
|
||||
content: riskContent,
|
||||
},
|
||||
{
|
||||
key: 'schedule',
|
||||
title: '阶段排期表',
|
||||
description: '更接近甘特视角的阶段、时间窗和交付物表。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}-schedule.md`,
|
||||
content: ganttContent,
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
import { createOfficeSkillManifest } from '@/skills/contracts/manifest'
|
||||
|
||||
export default createOfficeSkillManifest({
|
||||
id: 'eai.project-planning',
|
||||
code: 'EAI-T-207',
|
||||
key: 'project-planning',
|
||||
label: '项目规划',
|
||||
category: 'planning',
|
||||
artifactType: 'plan',
|
||||
fileFormat: 'md',
|
||||
color: '#2563eb',
|
||||
description: '根据目标、约束和现状整理项目阶段、里程碑、执行分工和风险清单。',
|
||||
defaultPrompt: '为新产品上线项目整理一版执行计划和里程碑',
|
||||
resultTitle: '项目规划草案',
|
||||
summary: '已把目标拆成阶段计划、里程碑和风险项,方便直接进入执行或评审。',
|
||||
highlights: ['适合启动、排期和推进对齐', '默认沉淀阶段计划与风险清单', '结果适合继续流转到任务治理'],
|
||||
taskPlanTitle: '项目规划流程',
|
||||
planSteps: ['明确目标边界', '拆解阶段路径', '整理里程碑', '补齐风险与依赖'],
|
||||
})
|
||||
@@ -1,78 +0,0 @@
|
||||
import {
|
||||
extractPoints,
|
||||
pickTopic,
|
||||
slugify,
|
||||
} from '@/skills/shared/officeArtifacts'
|
||||
|
||||
export function buildExecution(inputText = '') {
|
||||
const topic = pickTopic(inputText, '方案摘要')
|
||||
const points = extractPoints(inputText, [
|
||||
'明确方案目标和解决的问题',
|
||||
'提炼核心价值与收益',
|
||||
'压缩关键实施路径',
|
||||
'明确需要决策的事项',
|
||||
])
|
||||
const summaryContent = [
|
||||
`# ${topic}`,
|
||||
'',
|
||||
'## 核心结论',
|
||||
`${topic} 已压缩为适合汇报和快速预读的摘要版本,重点保留目标、价值点和实施建议。`,
|
||||
'',
|
||||
'## 关键亮点',
|
||||
...points.slice(0, 4).map((item) => `- ${item}`),
|
||||
'',
|
||||
'## 实施建议',
|
||||
'- 建议先确认资源与排期',
|
||||
'- 建议围绕高优先级场景先落一版 MVP',
|
||||
'- 建议同步关键负责人做进一步评审',
|
||||
].join('\n').trim()
|
||||
const highlightsContent = [
|
||||
'# 亮点清单',
|
||||
'',
|
||||
...points.slice(0, 5).map((item, index) => `${index + 1}. ${item}`),
|
||||
].join('\n').trim()
|
||||
const briefingContent = [
|
||||
`【${topic} 摘要】`,
|
||||
...points.slice(0, 3).map((item, index) => `${index + 1}. ${item}`),
|
||||
'建议按上述结论进入下一步决策或评审。',
|
||||
].join('\n').trim()
|
||||
const slug = slugify(topic, 'proposal-summary')
|
||||
|
||||
return {
|
||||
title: '方案摘要稿',
|
||||
summary: '已提炼出方案核心结论、价值亮点和实施建议,适合快速汇报或同步。',
|
||||
highlights: ['适合方案汇报和管理层预读', '自动压缩价值点与实施路径', '默认沉淀摘要正文和亮点清单'],
|
||||
artifacts: [
|
||||
{
|
||||
key: 'summary',
|
||||
title: '方案摘要',
|
||||
description: '适合直接汇报或继续细化的主摘要。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}.md`,
|
||||
content: summaryContent,
|
||||
},
|
||||
{
|
||||
key: 'highlights',
|
||||
title: '亮点清单',
|
||||
description: '压缩提炼后的价值点列表。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}-highlights.md`,
|
||||
content: highlightsContent,
|
||||
},
|
||||
{
|
||||
key: 'briefing',
|
||||
title: '汇报短版',
|
||||
description: '适合发群或口头汇报前快速同步的短摘要。',
|
||||
kind: 'text',
|
||||
fileFormat: 'txt',
|
||||
mimeType: 'text/plain;charset=utf-8',
|
||||
downloadName: `${slug}-briefing.txt`,
|
||||
content: briefingContent,
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
import { createOfficeSkillManifest } from '@/skills/contracts/manifest'
|
||||
|
||||
export default createOfficeSkillManifest({
|
||||
id: 'eai.proposal-summary',
|
||||
code: 'EAI-T-210',
|
||||
key: 'proposal-summary',
|
||||
label: '方案摘要',
|
||||
category: 'summary',
|
||||
artifactType: 'document',
|
||||
fileFormat: 'md',
|
||||
color: '#9333ea',
|
||||
description: '把长方案、材料包和售前文档压缩成高密度摘要,保留核心结论、价值点和实施建议。',
|
||||
defaultPrompt: '把这份解决方案压成一版管理层可读摘要',
|
||||
resultTitle: '方案摘要稿',
|
||||
summary: '已提炼出方案核心结论、价值亮点和实施建议,适合快速汇报或同步。',
|
||||
highlights: ['适合方案汇报和管理层预读', '自动压缩价值点与实施路径', '默认沉淀摘要正文和亮点清单'],
|
||||
taskPlanTitle: '方案摘要流程',
|
||||
planSteps: ['识别方案目标', '提炼核心亮点', '压缩实施路径', '输出摘要版本'],
|
||||
})
|
||||
@@ -6,8 +6,9 @@ import {
|
||||
|
||||
export default createSkillManifest({
|
||||
key: 'report-generation',
|
||||
label: '报告生成',
|
||||
caption: '材料归并 / 结构规划 / 正式输出',
|
||||
label: '一键生成报告',
|
||||
caption: '聊完天,PDF/Word 报告就写好了。',
|
||||
description: '聊完天,PDF/Word 报告就写好了。 操作:在「智能助手」中上传资料或讨论要点 → 说"帮我做成 PDF 报告"或"整理成 Word" → AI 自动生成结构化内容,排版为正式文档,一键下载',
|
||||
color: '#9c27b0',
|
||||
skillTags: ['日报周报', '复盘总结', '章节规划', '管理摘要'],
|
||||
workflowSchema: [
|
||||
|
||||
@@ -6,8 +6,9 @@ import {
|
||||
|
||||
export default createSkillManifest({
|
||||
key: 'smart-assistant',
|
||||
label: '通用助手',
|
||||
caption: '对话 / 任务拆解 / 文案生成',
|
||||
label: '智能助手',
|
||||
caption: '说句话,复杂任务自动完成。',
|
||||
description: '说句话,复杂任务自动完成。 操作:打开「智能助手」,用自然语言描述目标 → 可拖入多份文件、关联知识库 → 助手自动拆解为「计划→执行→验证→交付」,全程可见可控',
|
||||
color: '#409eff',
|
||||
skillTags: ['任务澄清', '方案拆解', '对象分派', '交付起步'],
|
||||
workflowSchema: [
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
import {
|
||||
extractPoints,
|
||||
pickTopic,
|
||||
slugify,
|
||||
} from '@/skills/shared/officeArtifacts'
|
||||
|
||||
export function buildExecution(inputText = '') {
|
||||
const topic = pickTopic(inputText, '问卷汇总')
|
||||
const points = extractPoints(inputText, [
|
||||
'参与者的主要反馈方向',
|
||||
'高频问题或不满意点',
|
||||
'值得保留的积极反馈',
|
||||
'后续改进建议',
|
||||
])
|
||||
const reportContent = [
|
||||
`# ${topic}`,
|
||||
'',
|
||||
'## 汇总结论',
|
||||
...points.slice(0, 4).map((item) => `- ${item}`),
|
||||
'',
|
||||
'## 汇总说明',
|
||||
'已把表单和问卷结果压缩成便于阅读和决策的汇总结论。',
|
||||
].join('\n').trim()
|
||||
const findingsContent = [
|
||||
'# 重点发现',
|
||||
'',
|
||||
`- 发现 1:${points[0] || '参与者主要关注体验和执行效果'}`,
|
||||
`- 发现 2:${points[1] || '部分问题集中在流程或内容安排上'}`,
|
||||
`- 发现 3:${points[2] || '已有若干积极反馈值得继续保留'}`,
|
||||
].join('\n').trim()
|
||||
const actionsContent = [
|
||||
'# 改进建议',
|
||||
'',
|
||||
`- [ ] ${points[3] || '根据汇总结果制定下一步改进动作'}`,
|
||||
'- [ ] 对高频问题安排专项优化',
|
||||
'- [ ] 向负责人同步汇总结论和优先级建议',
|
||||
].join('\n').trim()
|
||||
const slug = slugify(topic, 'survey-summary')
|
||||
|
||||
return {
|
||||
title: '问卷汇总稿',
|
||||
summary: '已整理出表单结果汇总、重点发现和改进建议,方便直接同步给负责人。',
|
||||
highlights: ['适合反馈表、报名表、调查问卷', '自动压缩重点发现和改进建议', '默认沉淀汇总报告和行动建议'],
|
||||
artifacts: [
|
||||
{
|
||||
key: 'report',
|
||||
title: '汇总报告',
|
||||
description: '适合直接汇报或继续细化的主报告。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}.md`,
|
||||
content: reportContent,
|
||||
},
|
||||
{
|
||||
key: 'findings',
|
||||
title: '重点发现',
|
||||
description: '从表单结果中提炼出的关键发现。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}-findings.md`,
|
||||
content: findingsContent,
|
||||
},
|
||||
{
|
||||
key: 'actions',
|
||||
title: '改进建议',
|
||||
description: '建议后续继续推进的改进行动。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}-actions.md`,
|
||||
content: actionsContent,
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
import { createOfficeSkillManifest } from '@/skills/contracts/manifest'
|
||||
|
||||
export default createOfficeSkillManifest({
|
||||
id: 'eai.survey-summary',
|
||||
code: 'EAI-T-215',
|
||||
key: 'survey-summary',
|
||||
label: '表单问卷汇总',
|
||||
category: 'report',
|
||||
artifactType: 'report',
|
||||
fileFormat: 'md',
|
||||
color: '#2563eb',
|
||||
description: '把问卷、报名表和收集表单结果整理成汇总报告、重点发现和后续动作建议。',
|
||||
defaultPrompt: '把这批培训反馈问卷整理成汇总结论和改进建议',
|
||||
resultTitle: '问卷汇总稿',
|
||||
summary: '已整理出表单结果汇总、重点发现和改进建议,方便直接同步给负责人。',
|
||||
highlights: ['适合反馈表、报名表、调查问卷', '自动压缩重点发现和改进建议', '默认沉淀汇总报告和行动建议'],
|
||||
taskPlanTitle: '问卷汇总流程',
|
||||
planSteps: ['归并表单结果', '提炼重点发现', '整理问题与建议', '输出汇总版本'],
|
||||
})
|
||||
@@ -4,12 +4,12 @@ export default createOfficeSkillManifest({
|
||||
id: 'eai.table-cleanup',
|
||||
code: 'EAI-T-209',
|
||||
key: 'table-cleanup',
|
||||
label: '表格整理',
|
||||
label: '知识库表格视图',
|
||||
category: 'data',
|
||||
artifactType: 'table',
|
||||
fileFormat: 'md',
|
||||
color: '#475569',
|
||||
description: '把零散字段、半结构化列表和杂乱数据整理成清晰表格,并补出字段说明与清洗备注。',
|
||||
description: '几十份文件秒变一张表。 操作:所有文件拖入知识库 → 切换到「表格视图」,AI 自动发现共有字段 → 自动生成表格,可排序、编辑、一键导出 Excel',
|
||||
defaultPrompt: '把这批客户跟进记录整理成结构化表格',
|
||||
resultTitle: '表格整理结果',
|
||||
summary: '已把输入内容整理成结构化表格,并补了字段说明和清洗备注。',
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
import {
|
||||
meaningfulLines,
|
||||
pickTopic,
|
||||
slugify,
|
||||
} from '@/skills/shared/officeArtifacts'
|
||||
|
||||
function stripMarkdown(text) {
|
||||
return meaningfulLines(String(text || '')
|
||||
.replace(/```[\s\S]*?```/g, '')
|
||||
.replace(/`([^`]+)`/g, '$1')
|
||||
.replace(/\[(.*?)\]\((.*?)\)/g, '$1')
|
||||
.replace(/[*_>#-]+/g, ' '))
|
||||
.join('\n')
|
||||
}
|
||||
|
||||
export function buildExecution(inputText = '') {
|
||||
const cleaned = stripMarkdown(inputText)
|
||||
const chars = cleaned.length
|
||||
const lines = meaningfulLines(cleaned).length
|
||||
const statsContent = [
|
||||
'# 文本统计',
|
||||
'',
|
||||
`- 字符数:${chars}`,
|
||||
`- 行数:${lines}`,
|
||||
`- 原始长度:${String(inputText || '').trim().length}`,
|
||||
'',
|
||||
'## 处理说明',
|
||||
'- 已移除常见 Markdown 标记',
|
||||
'- 已压缩多余空行',
|
||||
'- 已保留正文可读性',
|
||||
].join('\n')
|
||||
const topic = pickTopic(inputText, 'cleaned-text')
|
||||
const slug = slugify(topic, 'text-toolkit')
|
||||
|
||||
return {
|
||||
title: '清洗后文本',
|
||||
summary: '已完成 Markdown 去噪、格式整理和文本统计,可直接下载或复制结果。',
|
||||
highlights: ['去 Markdown 噪音', '输出文本统计', '适合高频复制到 Word / IM 场景'],
|
||||
artifacts: [
|
||||
{
|
||||
key: 'cleaned',
|
||||
title: '清洗后文本',
|
||||
description: '适合直接粘贴到文档或聊天工具。',
|
||||
kind: 'text',
|
||||
fileFormat: 'txt',
|
||||
mimeType: 'text/plain;charset=utf-8',
|
||||
downloadName: `${slug}.txt`,
|
||||
content: cleaned,
|
||||
},
|
||||
{
|
||||
key: 'stats',
|
||||
title: '文本统计',
|
||||
description: '记录本次清洗和统计结果。',
|
||||
kind: 'text',
|
||||
fileFormat: 'md',
|
||||
mimeType: 'text/markdown;charset=utf-8',
|
||||
downloadName: `${slug}-stats.md`,
|
||||
content: statsContent,
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
import { createOfficeSkillManifest } from '@/skills/contracts/manifest'
|
||||
|
||||
export default createOfficeSkillManifest({
|
||||
id: 'eai.text-toolkit',
|
||||
code: 'EAI-T-204',
|
||||
key: 'text-toolkit',
|
||||
label: '文本处理',
|
||||
category: 'text',
|
||||
artifactType: 'document',
|
||||
fileFormat: 'md',
|
||||
color: '#334155',
|
||||
description: '用于去 Markdown 符号、格式整理、文本统计与批量清洗,让复制出来的内容更适合继续使用。',
|
||||
defaultPrompt: '把这段 AI 回答清洗成适合粘贴到 Word 的纯文本',
|
||||
resultTitle: '清洗后文本',
|
||||
summary: '已按文本处理工具箱模式整理好内容,方便继续复制、统计或二次编辑。',
|
||||
highlights: ['去 Markdown 噪音', '统一段落和标点', '适合高频复制粘贴场景'],
|
||||
taskPlanTitle: '文本处理流程',
|
||||
planSteps: ['识别清洗目标', '去除噪音符号', '统一格式与标点', '输出可复用文本'],
|
||||
})
|
||||
@@ -171,38 +171,6 @@ export function buildCsvText(columns, rows) {
|
||||
.join('\n')
|
||||
}
|
||||
|
||||
export function splitSimpleList(value) {
|
||||
return [...new Set(
|
||||
String(value || '')
|
||||
.split(/[,,、/;;\n]/)
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean),
|
||||
)]
|
||||
}
|
||||
|
||||
export function buildProjectStageRows(points, owner, deadline) {
|
||||
const labels = ['阶段 1', '阶段 2', '阶段 3', '阶段 4']
|
||||
const windows = ['第 1 周', '第 2 周', '第 3 周', deadline || '收口前']
|
||||
return labels.map((label, index) => ({
|
||||
stage: label,
|
||||
window: windows[index] || `第 ${index + 1} 周`,
|
||||
goal: points[index] || `补充 ${label} 目标`,
|
||||
owner: owner || '待指定',
|
||||
output: index === 0 ? '目标确认' : index === 1 ? '阶段交付' : index === 2 ? '验收材料' : '收口结论',
|
||||
}))
|
||||
}
|
||||
|
||||
export function buildEmailSubjectVariants(topic, purpose) {
|
||||
const base = String(topic || '事项').trim()
|
||||
const context = String(purpose || '').trim()
|
||||
return [
|
||||
`${base} - 请协助确认`,
|
||||
`${base} - 需要回复`,
|
||||
`${base} - 进展同步`,
|
||||
context ? `${base} - ${context.slice(0, 12)}` : `${base} - 待处理提醒`,
|
||||
]
|
||||
}
|
||||
|
||||
export function splitFocusKeywords(value) {
|
||||
return [...new Set(
|
||||
String(value || '')
|
||||
|
||||
@@ -76,8 +76,26 @@ function normalizeSkillTags(remote, fallback) {
|
||||
].map((item) => String(item || '').trim()).filter(Boolean)
|
||||
}
|
||||
|
||||
function parseInteractionCard(item) {
|
||||
const raw = safeParse(item?.interaction_card_json, null)
|
||||
if (raw && typeof raw === 'object' && String(raw?.greeting || '').trim()) {
|
||||
return {
|
||||
greeting: String(raw.greeting || '').trim(),
|
||||
tagline: String(raw.tagline || '').trim(),
|
||||
openingPrompt: String(raw.opening_prompt || '').trim(),
|
||||
relationshipToUser: String(raw.relationship_to_user || '').trim(),
|
||||
tone: String(raw.tone || '').trim(),
|
||||
starterPrompts: Array.isArray(raw.starter_prompts)
|
||||
? raw.starter_prompts.map((p) => String(p || '').trim()).filter(Boolean)
|
||||
: [],
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
function normalizeSkill(item) {
|
||||
const fallback = getStaticSkillByKey(item?.key)
|
||||
const cardFromBackend = parseInteractionCard(item)
|
||||
const starterPrompts = safeParse(item?.starter_prompts_json, [])
|
||||
const remote = {
|
||||
...item,
|
||||
@@ -86,7 +104,7 @@ function normalizeSkill(item) {
|
||||
display_code: String(item?.display_code || '').trim() || String(fallback?.display_code || '').trim(),
|
||||
eailogic_code: String(item?.eailogic_code || '').trim() || String(fallback?.eailogic_code || '').trim(),
|
||||
caption: String(item?.description || '').trim() || String(fallback?.caption || '').trim(),
|
||||
color: String(fallback?.color || '#409eff').trim(),
|
||||
color: String(item?.color || fallback?.color || '#409eff').trim(),
|
||||
objectEntryRoute:
|
||||
String(item?.object_entry_route || '').trim() ||
|
||||
String(fallback?.objectEntryRoute || '').trim(),
|
||||
@@ -102,7 +120,16 @@ function normalizeSkill(item) {
|
||||
skillTags: normalizeSkillTags(item, fallback),
|
||||
workflowSchema: normalizeWorkflowSchema(item, fallback),
|
||||
artifactSchema: normalizeArtifactSchema(item?.artifact_schema_json, fallback),
|
||||
interactionCard: buildFallbackInteractionCard(remote, fallback),
|
||||
interactionCard: cardFromBackend
|
||||
? {
|
||||
...cardFromBackend,
|
||||
starterPrompts: cardFromBackend.starterPrompts.length
|
||||
? cardFromBackend.starterPrompts
|
||||
: (remote.starterPrompts.length
|
||||
? remote.starterPrompts
|
||||
: (fallback?.interactionCard?.starterPrompts || [])),
|
||||
}
|
||||
: buildFallbackInteractionCard(remote, fallback),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,28 +2,16 @@ import { withObjectCodes } from '@/utils/objectCode'
|
||||
import { createRegistry } from '@/specialists/core/registry'
|
||||
import contractReviewManifest from '@/specialists/packages/contract-review/manifest'
|
||||
import solutionProposalManifest from '@/specialists/packages/solution-proposal/manifest'
|
||||
import trainingDeliveryManifest from '@/specialists/packages/training-delivery/manifest'
|
||||
import knowledgeOperationsManifest from '@/specialists/packages/knowledge-operations/manifest'
|
||||
import processCoordinationManifest from '@/specialists/packages/process-coordination/manifest'
|
||||
import reportGenerationManifest from '@/specialists/packages/report-generation/manifest'
|
||||
import wechatOfficialAccountManifest from '@/specialists/packages/wechat-official-account/manifest'
|
||||
import logisticsFulfillmentManifest from '@/specialists/packages/logistics-fulfillment/manifest'
|
||||
import hrEmailSorterManifest from '@/specialists/packages/hr-email-sorter/manifest'
|
||||
import customerFollowupManifest from '@/specialists/packages/customer-followup/manifest'
|
||||
import resumeProcessorManifest from '@/specialists/packages/resume-processor/manifest'
|
||||
import presentationBriefingManifest from '@/specialists/packages/presentation-briefing/manifest'
|
||||
|
||||
const builtinSpecialistRegistry = createRegistry([
|
||||
contractReviewManifest,
|
||||
solutionProposalManifest,
|
||||
trainingDeliveryManifest,
|
||||
knowledgeOperationsManifest,
|
||||
processCoordinationManifest,
|
||||
reportGenerationManifest,
|
||||
wechatOfficialAccountManifest,
|
||||
logisticsFulfillmentManifest,
|
||||
hrEmailSorterManifest,
|
||||
customerFollowupManifest,
|
||||
resumeProcessorManifest,
|
||||
presentationBriefingManifest,
|
||||
])
|
||||
|
||||
export function getBuiltinSpecialistRegistry() {
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
import { createSpecialistManifest } from '@/specialists/contracts/manifest'
|
||||
|
||||
export default createSpecialistManifest({
|
||||
key: 'customer-followup',
|
||||
label: '客户跟进专员',
|
||||
tier: 'industry',
|
||||
specialistMode: 'adw',
|
||||
marketTag: '试用',
|
||||
summary: '整理客户资料、识别意向并推进会议预约',
|
||||
status: '3 个客户待联系',
|
||||
risk: '1 个高意向待确认',
|
||||
color: '#e6a23c',
|
||||
stage: '首轮触达',
|
||||
progress: 46,
|
||||
interactionCard: {
|
||||
greeting: '我是客户跟进专员,可以帮你整理客户资料、判断客户意向,并把联系和预约动作继续往前推。',
|
||||
tagline: '把客户线索、跟进动作和会议预约收在一条推进线上。',
|
||||
openingPrompt: '把客户资料、沟通背景和这轮目标发给我,我先帮你梳理跟进优先级。',
|
||||
relationshipToUser: '你的客户推进协作搭档',
|
||||
starterPrompts: [
|
||||
'先把这些客户资料整理成一张跟进清单',
|
||||
'帮我判断这些客户的意向等级',
|
||||
'给我一版首轮联系话术和会议邀约建议',
|
||||
'把本周待跟进客户排成优先级列表',
|
||||
],
|
||||
},
|
||||
})
|
||||
@@ -1,26 +0,0 @@
|
||||
import { createSpecialistManifest } from '@/specialists/contracts/manifest'
|
||||
|
||||
export default createSpecialistManifest({
|
||||
key: 'hr-email-sorter',
|
||||
label: 'HR 邮件整理专员',
|
||||
tier: 'industry',
|
||||
specialistMode: 'dw',
|
||||
marketTag: '试用',
|
||||
summary: '识别并整理招聘邮箱中的简历邮件',
|
||||
status: '3 封待处理',
|
||||
risk: '0 个异常',
|
||||
color: '#409eff',
|
||||
stage: '邮件处理',
|
||||
progress: 0,
|
||||
interactionCard: {
|
||||
greeting: '我是 HR 邮件整理专员,可以帮你识别、分类并整理招聘邮箱里的邮件。',
|
||||
tagline: '把招聘邮箱里的内容收成可继续处理的人才线索。',
|
||||
openingPrompt: '把邮件内容或整理目标告诉我,我先帮你分组归档。',
|
||||
relationshipToUser: '你的招聘整理协作搭档',
|
||||
starterPrompts: [
|
||||
'帮我整理今天收到的招聘邮件',
|
||||
'把这些邮件按岗位和优先级分类',
|
||||
'先筛出适合继续跟进的候选人邮件',
|
||||
],
|
||||
},
|
||||
})
|
||||
@@ -1,26 +0,0 @@
|
||||
import { createSpecialistManifest } from '@/specialists/contracts/manifest'
|
||||
|
||||
export default createSpecialistManifest({
|
||||
key: 'logistics-fulfillment',
|
||||
label: '履约跟单专员',
|
||||
tier: 'industry',
|
||||
specialistMode: 'adw',
|
||||
marketTag: '试用',
|
||||
summary: '美西航线本周履约看板',
|
||||
status: '1 个异常',
|
||||
risk: '2 个节点延迟',
|
||||
color: '#e6a23c',
|
||||
stage: '异常处置',
|
||||
progress: 49,
|
||||
interactionCard: {
|
||||
greeting: '我是履约跟单专员,可以帮你跟进节点、识别异常并整理处置建议。',
|
||||
tagline: '把履约过程里的异常、催办和交付节奏收在一条线上。',
|
||||
openingPrompt: '把当前订单、节点和异常情况发给我,我先帮你排查。',
|
||||
relationshipToUser: '你的履约协作搭档',
|
||||
starterPrompts: [
|
||||
'帮我梳理这票货当前的履约状态',
|
||||
'把这些延迟节点整理成跟单清单',
|
||||
'针对这次异常给我一版处置建议',
|
||||
],
|
||||
},
|
||||
})
|
||||
@@ -2,22 +2,23 @@ import { createSpecialistManifest } from '@/specialists/contracts/manifest'
|
||||
|
||||
export default createSpecialistManifest({
|
||||
key: 'resume-processor',
|
||||
label: '简历处理专员',
|
||||
label: '招聘筛选专员',
|
||||
tier: 'industry',
|
||||
specialistMode: 'dw',
|
||||
marketTag: '试用',
|
||||
summary: '筛选候选人并安排面试',
|
||||
status: '5 份待筛选',
|
||||
summary: '收拢招聘邮件、筛选候选人并推进面试',
|
||||
status: '5 份待筛选 / 3 封待归档',
|
||||
risk: '1 个匹配待确认',
|
||||
color: '#67c23a',
|
||||
stage: '简历筛选',
|
||||
stage: '候选人筛选',
|
||||
progress: 0,
|
||||
interactionCard: {
|
||||
greeting: '我是简历处理专员,可以帮你筛选候选人、整理匹配理由并安排后续动作。',
|
||||
tagline: '把简历筛选从海量阅读变成结构化判断。',
|
||||
openingPrompt: '告诉我岗位要求和筛选标准,我先帮你做一轮初筛。',
|
||||
greeting: '我是招聘筛选专员,可以先收拢招聘邮件与候选人资料,再完成筛选、排序和后续面试推进。',
|
||||
tagline: '把招聘入口整理、候选人筛选和后续推进收成一条闭环。',
|
||||
openingPrompt: '告诉我岗位要求、招聘邮箱情况和筛选标准,我先帮你做一轮归档与初筛。',
|
||||
relationshipToUser: '你的招聘筛选协作搭档',
|
||||
starterPrompts: [
|
||||
'先把今天收到的招聘邮件和附件归档成候选人清单',
|
||||
'根据这个 JD 帮我筛选一批候选人',
|
||||
'把这些简历按匹配度排序',
|
||||
'帮我整理一版面试建议和待确认点',
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
import { createSpecialistManifest } from '@/specialists/contracts/manifest'
|
||||
|
||||
export default createSpecialistManifest({
|
||||
key: 'training-delivery',
|
||||
label: '培训交付专员',
|
||||
tier: 'generic',
|
||||
specialistMode: 'dw',
|
||||
marketTag: '已安装',
|
||||
summary: '新人销售训练营第 3 周',
|
||||
status: '5 个进行中',
|
||||
risk: '0 个异常',
|
||||
color: '#67c23a',
|
||||
stage: '交付归档',
|
||||
progress: 84,
|
||||
interactionCard: {
|
||||
greeting: '我是培训交付专员,可以帮你推进训练计划、交付节点和归档结果。',
|
||||
tagline: '把培训交付从排期、推进到归档串成闭环。',
|
||||
openingPrompt: '把交付背景、学员范围和目标发给我,我来帮你推进。',
|
||||
relationshipToUser: '你的培训交付协作搭档',
|
||||
starterPrompts: [
|
||||
'帮我整理这期训练营的交付计划',
|
||||
'把这些交付节点汇总成执行清单',
|
||||
'根据培训记录生成交付归档说明',
|
||||
],
|
||||
},
|
||||
})
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { createSpecialistManifest } from '@/specialists/contracts/manifest'
|
||||
|
||||
export default createSpecialistManifest({
|
||||
key: 'wechat-official-account',
|
||||
label: '公众号助手',
|
||||
label: '公众号专员',
|
||||
tier: 'generic',
|
||||
specialistMode: 'dw',
|
||||
marketTag: '已安装',
|
||||
@@ -13,7 +13,7 @@ export default createSpecialistManifest({
|
||||
stage: '正文创作',
|
||||
progress: 0,
|
||||
interactionCard: {
|
||||
greeting: '我是公众号助手,可以帮你把选题、提纲、正文和发布准备串起来。',
|
||||
greeting: '我是公众号专员,可以帮你把选题、提纲、正文和发布准备串起来。',
|
||||
tagline: '把内容创作流程从想法推进到可发布。',
|
||||
openingPrompt: '告诉我主题、受众和语气,我先帮你起草内容结构。',
|
||||
relationshipToUser: '你的内容创作协作搭档',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* EAI 数字员工平台 — 全局样式 */
|
||||
/* 参考:docs/08_Design_Rules/DR01_Theme_System.md */
|
||||
/* 参考:docs/08_Design_Rules/DR01_主题系统.md */
|
||||
|
||||
:root {
|
||||
--nav-width: 189px;
|
||||
|
||||
Reference in New Issue
Block a user