|
|
@ -851,7 +851,10 @@ class MeetingTaskService2 extends GetxService { |
|
|
// 使用统一的总结服务生成概览与总结 |
|
|
// 使用统一的总结服务生成概览与总结 |
|
|
final String tplPrompt = ((templateData?['prompt']) ?? '').toString(); |
|
|
final String tplPrompt = ((templateData?['prompt']) ?? '').toString(); |
|
|
final String tplOutline = ((templateData?['outline']) ?? '').toString(); |
|
|
final String tplOutline = ((templateData?['outline']) ?? '').toString(); |
|
|
final String outCode = (((templateData?['targetLanguage']) ?? (templateData?['language']) ?? '') as String).toLowerCase(); |
|
|
final String outCode = (((templateData?['targetLanguage']) ?? |
|
|
|
|
|
(templateData?['language']) ?? |
|
|
|
|
|
'') as String) |
|
|
|
|
|
.toLowerCase(); |
|
|
String langDesc = ''; |
|
|
String langDesc = ''; |
|
|
if (outCode.startsWith('zh')) { |
|
|
if (outCode.startsWith('zh')) { |
|
|
langDesc = '中文'; |
|
|
langDesc = '中文'; |
|
|
@ -892,7 +895,8 @@ class MeetingTaskService2 extends GetxService { |
|
|
: (langDesc.isEmpty |
|
|
: (langDesc.isEmpty |
|
|
? tplOutline |
|
|
? tplOutline |
|
|
: tplOutline + ' 输出语言:' + langDesc + '。请全程使用' + langDesc + '输出。'); |
|
|
: tplOutline + ' 输出语言:' + langDesc + '。请全程使用' + langDesc + '输出。'); |
|
|
_summaryTaskService.addTaskList(id, summarySourceText, promptToUse, outlineToUse); |
|
|
_summaryTaskService.addTaskList( |
|
|
|
|
|
id, summarySourceText, promptToUse, outlineToUse); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -988,168 +992,4 @@ class MeetingTaskService2 extends GetxService { |
|
|
} catch (_) {} |
|
|
} catch (_) {} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void aiServiceMessage(int id, String text, [Map? templateData]) { |
|
|
|
|
|
int awaitQuantity = 0; |
|
|
|
|
|
String summaryText = ''; |
|
|
|
|
|
String overviewText = ''; |
|
|
|
|
|
// 模板参数透传 |
|
|
|
|
|
final bool tplIsSpeaker = ((templateData?['isSpeaker']) ?? false) as bool; |
|
|
|
|
|
final String tplLanguage = ((templateData?['language']) ?? '').toString(); |
|
|
|
|
|
final String tplOutline = ((templateData?['outline']) ?? '').toString(); |
|
|
|
|
|
final String tplPrompt = ((templateData?['prompt']) ?? '').toString(); |
|
|
|
|
|
final String tplTargetLang = |
|
|
|
|
|
((templateData?['targetLanguage']) ?? '').toString(); |
|
|
|
|
|
|
|
|
|
|
|
// 构建系统prompt,如果有模板数据则整合模板prompt |
|
|
|
|
|
String systemPrompt = |
|
|
|
|
|
'您将扮演一名会议总结专家,拥有超强的信息归纳与细分能力。不仅能高效处理各类通用场景会议,精准提炼会议核心内容,为后续思维导图生成奠定坚实基础。若涉及人员,人员名称保留[]。'; |
|
|
|
|
|
if (templateData != null) { |
|
|
|
|
|
if (tplPrompt.isNotEmpty) { |
|
|
|
|
|
systemPrompt += ' 特别要求:' + tplPrompt; |
|
|
|
|
|
} |
|
|
|
|
|
if (tplOutline.isNotEmpty) { |
|
|
|
|
|
systemPrompt += ' 大纲:' + tplOutline; |
|
|
|
|
|
} |
|
|
|
|
|
// 当目标语言为空(自动识别)时,使用录音语言作为输出语言约束;否则使用目标语言 |
|
|
|
|
|
final String outCode = |
|
|
|
|
|
tplTargetLang.isNotEmpty ? tplTargetLang : tplLanguage; |
|
|
|
|
|
if (outCode.isNotEmpty) { |
|
|
|
|
|
final String t = outCode.toLowerCase(); |
|
|
|
|
|
String langDesc = '目标语言'; |
|
|
|
|
|
if (t.startsWith('zh')) { |
|
|
|
|
|
langDesc = '中文'; |
|
|
|
|
|
} else if (t.startsWith('en')) { |
|
|
|
|
|
langDesc = '英文'; |
|
|
|
|
|
} else if (t.startsWith('ja')) { |
|
|
|
|
|
langDesc = '日文'; |
|
|
|
|
|
} else if (t.startsWith('ko')) { |
|
|
|
|
|
langDesc = '韩文'; |
|
|
|
|
|
} else if (t.startsWith('fr')) { |
|
|
|
|
|
langDesc = '法文'; |
|
|
|
|
|
} else if (t.startsWith('de')) { |
|
|
|
|
|
langDesc = '德文'; |
|
|
|
|
|
} else if (t.startsWith('es')) { |
|
|
|
|
|
langDesc = '西班牙文'; |
|
|
|
|
|
} else if (t.startsWith('ru')) { |
|
|
|
|
|
langDesc = '俄文'; |
|
|
|
|
|
} else if (t.startsWith('it')) { |
|
|
|
|
|
langDesc = '意大利文'; |
|
|
|
|
|
} else if (t.startsWith('pt')) { |
|
|
|
|
|
langDesc = '葡萄牙文'; |
|
|
|
|
|
} else if (t.startsWith('hi')) { |
|
|
|
|
|
langDesc = '印地文'; |
|
|
|
|
|
} else if (t.startsWith('th')) { |
|
|
|
|
|
langDesc = '泰文'; |
|
|
|
|
|
} else if (t.startsWith('vi')) { |
|
|
|
|
|
langDesc = '越南文'; |
|
|
|
|
|
} |
|
|
|
|
|
systemPrompt += ' 输出语言:' + langDesc + '。请全程使用' + langDesc + '输出。'; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
DeapsoundAIService().sendMessage( |
|
|
|
|
|
messages: [ |
|
|
|
|
|
{ |
|
|
|
|
|
'role': 'system', |
|
|
|
|
|
'content': systemPrompt, |
|
|
|
|
|
}, |
|
|
|
|
|
{'role': 'user', 'content': text}, |
|
|
|
|
|
], |
|
|
|
|
|
).then((value) { |
|
|
|
|
|
awaitQuantity++; |
|
|
|
|
|
summaryText = value ?? ''; |
|
|
|
|
|
if (awaitQuantity >= 2) { |
|
|
|
|
|
_aiServiceValue(id, summaryText, overviewText); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
// 构建第二个系统prompt,如果有模板数据则整合模板prompt |
|
|
|
|
|
String systemPrompt2 = '您将扮演一名会议事件归纳专家,能准确抓住会议中事件的关键点,并每个事件只需一句话精简总结。'; |
|
|
|
|
|
if (templateData != null) { |
|
|
|
|
|
if (tplPrompt.isNotEmpty) { |
|
|
|
|
|
systemPrompt2 += ' 特别要求:' + tplPrompt; |
|
|
|
|
|
} |
|
|
|
|
|
if (tplOutline.isNotEmpty) { |
|
|
|
|
|
systemPrompt2 += ' 大纲:' + tplOutline; |
|
|
|
|
|
} |
|
|
|
|
|
final String outCode2 = |
|
|
|
|
|
tplTargetLang.isNotEmpty ? tplTargetLang : tplLanguage; |
|
|
|
|
|
if (outCode2.isNotEmpty) { |
|
|
|
|
|
final String t = outCode2.toLowerCase(); |
|
|
|
|
|
String langDesc = '目标语言'; |
|
|
|
|
|
if (t.startsWith('zh')) { |
|
|
|
|
|
langDesc = '中文'; |
|
|
|
|
|
} else if (t.startsWith('en')) { |
|
|
|
|
|
langDesc = '英文'; |
|
|
|
|
|
} else if (t.startsWith('ja')) { |
|
|
|
|
|
langDesc = '日文'; |
|
|
|
|
|
} else if (t.startsWith('ko')) { |
|
|
|
|
|
langDesc = '韩文'; |
|
|
|
|
|
} else if (t.startsWith('fr')) { |
|
|
|
|
|
langDesc = '法文'; |
|
|
|
|
|
} else if (t.startsWith('de')) { |
|
|
|
|
|
langDesc = '德文'; |
|
|
|
|
|
} else if (t.startsWith('es')) { |
|
|
|
|
|
langDesc = '西班牙文'; |
|
|
|
|
|
} else if (t.startsWith('ru')) { |
|
|
|
|
|
langDesc = '俄文'; |
|
|
|
|
|
} else if (t.startsWith('it')) { |
|
|
|
|
|
langDesc = '意大利文'; |
|
|
|
|
|
} else if (t.startsWith('pt')) { |
|
|
|
|
|
langDesc = '葡萄牙文'; |
|
|
|
|
|
} else if (t.startsWith('hi')) { |
|
|
|
|
|
langDesc = '印地文'; |
|
|
|
|
|
} else if (t.startsWith('th')) { |
|
|
|
|
|
langDesc = '泰文'; |
|
|
|
|
|
} else if (t.startsWith('vi')) { |
|
|
|
|
|
langDesc = '越南文'; |
|
|
|
|
|
} |
|
|
|
|
|
systemPrompt2 += ' 输出语言:' + langDesc + '。请全程使用' + langDesc + '输出。'; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
DeapsoundAIService().sendMessage( |
|
|
|
|
|
messages: [ |
|
|
|
|
|
{ |
|
|
|
|
|
'role': 'system', |
|
|
|
|
|
'content': systemPrompt2, |
|
|
|
|
|
}, |
|
|
|
|
|
{'role': 'user', 'content': text}, |
|
|
|
|
|
], |
|
|
|
|
|
).then((value) { |
|
|
|
|
|
awaitQuantity++; |
|
|
|
|
|
overviewText = value ?? ''; |
|
|
|
|
|
if (awaitQuantity >= 2) { |
|
|
|
|
|
_aiServiceValue(id, summaryText, overviewText); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void _aiServiceValue(int id, String summaryText, String overviewText) { |
|
|
|
|
|
SqfliteApi.editMeeting(id, { |
|
|
|
|
|
'tasktype': 3, |
|
|
|
|
|
'summary': summaryText, |
|
|
|
|
|
'overview': overviewText, |
|
|
|
|
|
}); |
|
|
|
|
|
if (id == meetingId) { |
|
|
|
|
|
summary = summaryText; |
|
|
|
|
|
overview = overviewText; |
|
|
|
|
|
tasktype.value = 3; |
|
|
|
|
|
} |
|
|
|
|
|
try { |
|
|
|
|
|
final s1 = Get.find<MeetingTaskService>(); |
|
|
|
|
|
if (id == s1.meetingId) { |
|
|
|
|
|
s1.tasktype.value = 3; |
|
|
|
|
|
} |
|
|
|
|
|
} catch (_) {} |
|
|
|
|
|
Map taskFinishData = taskFinishList.firstWhere( |
|
|
|
|
|
(element) => element['id'] == id, |
|
|
|
|
|
orElse: () => {}, |
|
|
|
|
|
); |
|
|
|
|
|
if (taskFinishData.isNotEmpty) { |
|
|
|
|
|
taskFinishData['tasktype'] = 3; |
|
|
|
|
|
taskFinishList.refresh(); |
|
|
|
|
|
} |
|
|
|
|
|
_storage.write("meeting_task_finish_list_v2", taskFinishList); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|