Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
poc-api
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
poc
poc-api
Commits
35fdab75
Commit
35fdab75
authored
Aug 12, 2025
by
R10
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'release_gdghg' of
ssh://gitlab.gsstcloud.com:10022/poc/poc-api
into release_gdghg
parents
9d028122
6c4e6a66
Show whitespace changes
Inline
Side-by-side
Showing
73 changed files
with
5488 additions
and
24 deletions
+5488
-24
output.docx
output.docx
+0
-0
AiDialoguesTypeEnum.java
...cn/com/poc/ai_dialogues/constant/AiDialoguesTypeEnum.java
+2
-0
BizAiDialoguesService.java
...n/com/poc/ai_dialogues/service/BizAiDialoguesService.java
+2
-2
BizAiDialoguesServiceImpl.java
.../ai_dialogues/service/impl/BizAiDialoguesServiceImpl.java
+2
-2
DefaultSegmentation.java
...a/cn/com/poc/common/segmentation/DefaultSegmentation.java
+85
-0
NumberOfWordSegmentation.java
...com/poc/common/segmentation/NumberOfWordSegmentation.java
+91
-0
SegmentationAbstract.java
.../cn/com/poc/common/segmentation/SegmentationAbstract.java
+31
-0
SegmentationBuilder.java
...a/cn/com/poc/common/segmentation/SegmentationBuilder.java
+65
-0
SegmentationEnum.java
...om/poc/common/segmentation/contents/SegmentationEnum.java
+42
-0
SegmentationConfig.java
...om/poc/common/segmentation/domain/SegmentationConfig.java
+86
-0
SegmentationResult.java
...om/poc/common/segmentation/domain/SegmentationResult.java
+34
-0
LongTextDialoguesService.java
...poc/long_document/aggregate/LongTextDialoguesService.java
+1
-1
LongTextDialoguesServiceImpl.java
...document/aggregate/impl/LongTextDialoguesServiceImpl.java
+66
-5
LongTextDialoguesCallDto.java
...n/com/poc/long_document/dto/LongTextDialoguesCallDto.java
+27
-2
LongTextDialoguesRestImpl.java
...oc/long_document/rest/impl/LongTextDialoguesRestImpl.java
+1
-1
AiMeetingAssistantService.java
.../com/poc/meeting/aggregate/AiMeetingAssistantService.java
+43
-0
AiMeetingAssistantServiceImpl.java
...meeting/aggregate/impl/AiMeetingAssistantServiceImpl.java
+555
-0
FeaturedQuestionAnalyzer.java
...cn/com/poc/meeting/analysis/FeaturedQuestionAnalyzer.java
+120
-0
KeyWordAnalyzer.java
...ain/java/cn/com/poc/meeting/analysis/KeyWordAnalyzer.java
+120
-0
MeetingContentAnalysisAbstract.java
.../poc/meeting/analysis/MeetingContentAnalysisAbstract.java
+24
-0
SummaryAnalyzer.java
...ain/java/cn/com/poc/meeting/analysis/SummaryAnalyzer.java
+101
-0
ThemeAnalyzer.java
src/main/java/cn/com/poc/meeting/analysis/ThemeAnalyzer.java
+47
-0
KeyWordCounter.java
src/main/java/cn/com/poc/meeting/cache/KeyWordCounter.java
+93
-0
MeetingAssistantConstantEnum.java
...m/poc/meeting/constants/MeetingAssistantConstantEnum.java
+26
-0
BizMeetingAssistantAnalysisTaskConvert.java
...eting/convert/BizMeetingAssistantAnalysisTaskConvert.java
+141
-0
BizMeetingAssistantAsrTaskConvert.java
...oc/meeting/convert/BizMeetingAssistantAsrTaskConvert.java
+77
-0
AiMeetingAssistantDto.java
...in/java/cn/com/poc/meeting/dto/AiMeetingAssistantDto.java
+56
-0
AnalysisTaskDetailDto.java
...in/java/cn/com/poc/meeting/dto/AnalysisTaskDetailDto.java
+181
-0
BizMeetingAssistantAnalysisTaskDto.java
...m/poc/meeting/dto/BizMeetingAssistantAnalysisTaskDto.java
+223
-0
BizMeetingAssistantAsrTaskDto.java
...cn/com/poc/meeting/dto/BizMeetingAssistantAsrTaskDto.java
+151
-0
AnalysisTaskDetailEntity.java
...a/cn/com/poc/meeting/entity/AnalysisTaskDetailEntity.java
+193
-0
BizMeetingAssistantAnalysisTaskEntity.java
...meeting/entity/BizMeetingAssistantAnalysisTaskEntity.java
+248
-0
BizMeetingAssistantAsrTaskEntity.java
.../poc/meeting/entity/BizMeetingAssistantAsrTaskEntity.java
+151
-0
BizMeetingAssistantAnalysisTaskModel.java
...c/meeting/model/BizMeetingAssistantAnalysisTaskModel.java
+318
-0
BizMeetingAssistantAsrTaskModel.java
...om/poc/meeting/model/BizMeetingAssistantAsrTaskModel.java
+222
-0
BizMeetingAssistantAnalysisTaskRepository.java
...repository/BizMeetingAssistantAnalysisTaskRepository.java
+6
-0
BizMeetingAssistantAsrTaskRepository.java
...ting/repository/BizMeetingAssistantAsrTaskRepository.java
+6
-0
AiMeetingAssistantRest.java
.../java/cn/com/poc/meeting/rest/AiMeetingAssistantRest.java
+43
-0
AiMeetingAssistantRestImpl.java
...com/poc/meeting/rest/impl/AiMeetingAssistantRestImpl.java
+57
-0
MeetingAssistantScheduler.java
.../com/poc/meeting/scheduler/MeetingAssistantScheduler.java
+129
-0
BizMeetingAssistantAnalysisTaskService.java
...eting/service/BizMeetingAssistantAnalysisTaskService.java
+21
-0
BizMeetingAssistantAsrTaskService.java
...oc/meeting/service/BizMeetingAssistantAsrTaskService.java
+22
-0
BizMeetingAssistantAnalysisTaskServiceImpl.java
...vice/impl/BizMeetingAssistantAnalysisTaskServiceImpl.java
+135
-0
BizMeetingAssistantAsrTaskServiceImpl.java
...g/service/impl/BizMeetingAssistantAsrTaskServiceImpl.java
+117
-0
AnalysisTaskUpdateMessage.java
...poc/message/entity/meeting/AnalysisTaskUpdateMessage.java
+206
-0
MeetingAssistantAnalysisMessage.java
...ssage/entity/meeting/MeetingAssistantAnalysisMessage.java
+35
-0
MeetingAssistantGenerateAnalysisContentMessage.java
...eting/MeetingAssistantGenerateAnalysisContentMessage.java
+24
-0
MeetingAssistantAnalysisConsumerService.java
...sage/service/MeetingAssistantAnalysisConsumerService.java
+41
-0
MeetingAssistantAnalysisProducerService.java
...sage/service/MeetingAssistantAnalysisProducerService.java
+42
-0
MeetingAssistantAnalysisConsumerServiceImpl.java
...ice/impl/MeetingAssistantAnalysisConsumerServiceImpl.java
+304
-0
MeetingAssistantAnalysisProducerServiceImpl.java
...ice/impl/MeetingAssistantAnalysisProducerServiceImpl.java
+49
-0
MeetingAssistantTopic.java
.../java/cn/com/poc/message/topic/MeetingAssistantTopic.java
+38
-0
PortalDialoguesDto.java
src/main/java/cn/com/poc/portal/dto/PortalDialoguesDto.java
+4
-4
BaiduTextDiffApi.java
...m/poc/thirdparty/resource/baidu/api/BaiduTextDiffApi.java
+0
-1
ASRApi.java
...party/resource/simultanous_interpretation/api/ASRApi.java
+91
-0
AsrOfflineDetailResult.java
...ltanous_interpretation/entity/AsrOfflineDetailResult.java
+47
-0
BaseResult.java
...esource/simultanous_interpretation/entity/BaseResult.java
+24
-0
GetDetailResult.java
...ce/simultanous_interpretation/entity/GetDetailResult.java
+14
-0
SpeechToTextResult.java
...simultanous_interpretation/entity/SpeechToTextResult.java
+14
-0
Translation.java
...source/simultanous_interpretation/entity/Translation.java
+58
-0
ASRService.java
...source/simultanous_interpretation/service/ASRService.java
+39
-0
ASRServiceImpl.java
...multanous_interpretation/service/impl/ASRServiceImpl.java
+60
-0
AiWritingService.java
...n/java/cn/com/poc/writing/aggregate/AiWritingService.java
+3
-1
AiWritingServiceImpl.java
.../com/poc/writing/aggregate/impl/AiWritingServiceImpl.java
+64
-4
AiWritingDto.java
src/main/java/cn/com/poc/writing/dto/AiWritingDto.java
+28
-0
AiWritingRestImpl.java
.../java/cn/com/poc/writing/rest/impl/AiWritingRestImpl.java
+2
-1
simultanous-interpretation-dev.properties
...framemax-config/simultanous-interpretation-dev.properties
+1
-0
simultanous-interpretation-prod.properties
...ramemax-config/simultanous-interpretation-prod.properties
+1
-0
simultanous-interpretation-sit.properties
...framemax-config/simultanous-interpretation-sit.properties
+1
-0
simultanous-interpretation-uat.properties
...framemax-config/simultanous-interpretation-uat.properties
+1
-0
ASRTest.java
src/test/java/cn/com/poc/meeting/ASRTest.java
+40
-0
AnalysisTest.java
src/test/java/cn/com/poc/meeting/AnalysisTest.java
+81
-0
MeetingTest.java
src/test/java/cn/com/poc/meeting/MeetingTest.java
+15
-0
No files found.
output.docx
deleted
100644 → 0
View file @
9d028122
src/main/java/cn/com/poc/ai_dialogues/constant/AiDialoguesTypeEnum.java
View file @
35fdab75
...
@@ -26,6 +26,8 @@ public enum AiDialoguesTypeEnum {
...
@@ -26,6 +26,8 @@ public enum AiDialoguesTypeEnum {
TRAVEL_BUSINESS
(
"travel_business"
,
"旅游业务"
),
TRAVEL_BUSINESS
(
"travel_business"
,
"旅游业务"
),
MEETING_ASSISTANT
(
"meeting_assistant"
,
"会议助手"
),
;
;
private
final
String
type
;
private
final
String
type
;
...
...
src/main/java/cn/com/poc/ai_dialogues/service/BizAiDialoguesService.java
View file @
35fdab75
...
@@ -22,11 +22,11 @@ public interface BizAiDialoguesService extends BaseService {
...
@@ -22,11 +22,11 @@ public interface BizAiDialoguesService extends BaseService {
BizAiDialoguesEntity
get
(
java
.
lang
.
Long
id
)
throws
Exception
;
BizAiDialoguesEntity
get
(
java
.
lang
.
Long
id
)
throws
Exception
;
List
<
BizAiDialoguesEntity
>
findByExample
(
BizAiDialoguesEntity
example
,
PagingInfo
pagingInfo
)
throws
Exception
;
List
<
BizAiDialoguesEntity
>
findByExample
(
BizAiDialoguesEntity
example
,
PagingInfo
pagingInfo
);
BizAiDialoguesEntity
save
(
BizAiDialoguesEntity
entity
)
throws
Exception
;
BizAiDialoguesEntity
save
(
BizAiDialoguesEntity
entity
)
throws
Exception
;
BizAiDialoguesEntity
update
(
BizAiDialoguesEntity
entity
)
throws
Exception
;
BizAiDialoguesEntity
update
(
BizAiDialoguesEntity
entity
)
;
void
deletedById
(
java
.
lang
.
Long
id
)
throws
Exception
;
void
deletedById
(
java
.
lang
.
Long
id
)
throws
Exception
;
...
...
src/main/java/cn/com/poc/ai_dialogues/service/impl/BizAiDialoguesServiceImpl.java
View file @
35fdab75
...
@@ -64,7 +64,7 @@ public class BizAiDialoguesServiceImpl extends BaseServiceImpl
...
@@ -64,7 +64,7 @@ public class BizAiDialoguesServiceImpl extends BaseServiceImpl
}
}
public
List
<
BizAiDialoguesEntity
>
findByExample
(
BizAiDialoguesEntity
example
,
PagingInfo
pagingInfo
)
throws
Exception
{
public
List
<
BizAiDialoguesEntity
>
findByExample
(
BizAiDialoguesEntity
example
,
PagingInfo
pagingInfo
)
{
List
<
BizAiDialoguesEntity
>
result
=
new
ArrayList
<
BizAiDialoguesEntity
>();
List
<
BizAiDialoguesEntity
>
result
=
new
ArrayList
<
BizAiDialoguesEntity
>();
BizAiDialoguesModel
model
=
new
BizAiDialoguesModel
();
BizAiDialoguesModel
model
=
new
BizAiDialoguesModel
();
if
(
example
!=
null
)
{
if
(
example
!=
null
)
{
...
@@ -87,7 +87,7 @@ public class BizAiDialoguesServiceImpl extends BaseServiceImpl
...
@@ -87,7 +87,7 @@ public class BizAiDialoguesServiceImpl extends BaseServiceImpl
return
BizAiDialoguesConvert
.
modelToEntity
(
saveModel
);
return
BizAiDialoguesConvert
.
modelToEntity
(
saveModel
);
}
}
public
BizAiDialoguesEntity
update
(
BizAiDialoguesEntity
entity
)
throws
Exception
{
public
BizAiDialoguesEntity
update
(
BizAiDialoguesEntity
entity
)
{
Assert
.
notNull
(
entity
);
Assert
.
notNull
(
entity
);
Assert
.
notNull
(
entity
.
getId
(),
"update pk can not be null"
);
Assert
.
notNull
(
entity
.
getId
(),
"update pk can not be null"
);
BizAiDialoguesModel
model
=
this
.
repository
.
get
(
entity
.
getId
());
BizAiDialoguesModel
model
=
this
.
repository
.
get
(
entity
.
getId
());
...
...
src/main/java/cn/com/poc/common/segmentation/DefaultSegmentation.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
common
.
segmentation
;
import
cn.com.poc.common.segmentation.domain.SegmentationConfig
;
import
cn.com.poc.common.segmentation.domain.SegmentationResult
;
import
cn.com.poc.common.utils.DocumentLoad
;
import
org.springframework.util.Assert
;
import
java.io.File
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 【默认分割】
* <p>
* 默认分割根据【大切分长度】和【子切分长度】进行分割,每个大切片包含多个子切片
* 通过配置RepetitionRate参数来控制重复率【上下分块重复大小】
*
* @author alex.yao
* @version 1.0
* @Date 2024/9/3
*/
public
class
DefaultSegmentation
extends
SegmentationAbstract
{
@Override
public
List
<
SegmentationResult
>
scrap
(
SegmentationConfig
config
)
{
try
{
// 校验配置
paramVerification
(
config
);
// 下载文档
File
file
=
DocumentLoad
.
downloadURLDocument
(
this
.
documentUrl
);
// 加载文档内容
String
content
=
DocumentLoad
.
documentToText
(
file
);
// 分割内容
return
contentSplitters
(
config
,
content
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"文档加载失败"
);
}
}
private
static
void
paramVerification
(
SegmentationConfig
config
)
{
Assert
.
notNull
(
config
);
Assert
.
notNull
(
config
.
getChunkSize
());
Assert
.
notNull
(
config
.
getScrapSize
());
Assert
.
notNull
(
config
.
getRepetitionRate
());
Assert
.
isTrue
(
config
.
getRepetitionRate
()
>
0
&&
config
.
getRepetitionRate
()
<=
50
,
"重复率参数错误,必须大于0和小于50"
);
Assert
.
isTrue
(
config
.
getChunkSize
()
>
0
&&
config
.
getScrapSize
()
>
0
,
"切块大小参数错误"
);
Assert
.
isTrue
(
config
.
getChunkSize
()
>=
config
.
getScrapSize
(),
"【子切片】长度必须小于【大切片】长度"
);
}
public
List
<
SegmentationResult
>
contentSplitters
(
SegmentationConfig
config
,
String
documentContents
)
{
List
<
SegmentationResult
>
result
=
new
ArrayList
<>();
int
CHUNK_SIZE
=
300
;
int
CHUNK_REDUNDANT_VALUE
=
CHUNK_SIZE
/
5
;
int
SCRAP_SIZE
=
80
;
int
SCRAP_REDUNDANT_VALUE
=
SCRAP_SIZE
/
5
;
int
left
=
CHUNK_REDUNDANT_VALUE
-
CHUNK_SIZE
,
right
=
0
;
//初始化左右指针
//切分大块
while
(
right
<
documentContents
.
length
())
{
left
=
left
+
CHUNK_SIZE
-
CHUNK_REDUNDANT_VALUE
;
//更新大块左指针
right
=
Math
.
min
(
left
+
CHUNK_SIZE
,
documentContents
.
length
());
//更新大块右指针
String
chunkContent
=
documentContents
.
substring
(
left
,
right
);
//大块内容
//大块分割成多小块
int
scrapLeft
=
SCRAP_REDUNDANT_VALUE
-
SCRAP_SIZE
;
// 小块 左指针
int
scrapRight
=
0
;
//小块 右指针
List
<
String
>
scrapChunkContent
=
new
ArrayList
<>();
while
(
scrapRight
<
chunkContent
.
length
())
{
scrapLeft
=
scrapLeft
+
SCRAP_SIZE
-
SCRAP_REDUNDANT_VALUE
;
//更新左指针
scrapRight
=
Math
.
min
(
scrapLeft
+
SCRAP_SIZE
,
chunkContent
.
length
());
//更新右指针
String
scrapChunk
=
chunkContent
.
substring
(
scrapLeft
,
scrapRight
);
//小块内容
scrapChunkContent
.
add
(
scrapChunk
);
}
SegmentationResult
segmentationResult
=
new
SegmentationResult
();
segmentationResult
.
setChunkContent
(
chunkContent
);
segmentationResult
.
setScrapChunkContent
(
scrapChunkContent
);
result
.
add
(
segmentationResult
);
}
return
result
;
}
}
src/main/java/cn/com/poc/common/segmentation/NumberOfWordSegmentation.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
common
.
segmentation
;
import
cn.com.poc.common.segmentation.domain.SegmentationConfig
;
import
cn.com.poc.common.segmentation.domain.SegmentationResult
;
import
cn.com.poc.common.utils.DocumentLoad
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.util.Assert
;
import
java.io.File
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 【字数分割】
* <p>
* 默认分割根据【大切分长度】和【子切分长度】进行分割,每个大切片包含多个子切片
* 通过配置RepetitionRate参数来控制重复率【上下分块重复大小】
*
* @author alex.yao
* @version 1.0
* @Date 2024/9/3
*/
public
class
NumberOfWordSegmentation
extends
SegmentationAbstract
{
@Override
public
List
<
SegmentationResult
>
scrap
(
SegmentationConfig
config
)
{
try
{
// 校验配置
paramVerification
(
config
);
String
content
=
this
.
content
;
if
(
StringUtils
.
isNotBlank
(
this
.
documentUrl
))
{
// 下载文档
File
file
=
DocumentLoad
.
downloadURLDocument
(
this
.
documentUrl
);
// 加载文档内容
content
=
DocumentLoad
.
documentToText
(
file
);
}
// 分割内容
return
contentSplitters
(
config
,
content
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"文档加载失败"
);
}
}
private
static
void
paramVerification
(
SegmentationConfig
config
)
{
Assert
.
notNull
(
config
);
Assert
.
notNull
(
config
.
getChunkSize
());
Assert
.
notNull
(
config
.
getScrapSize
());
Assert
.
notNull
(
config
.
getRepetitionRate
());
Assert
.
isTrue
(
config
.
getRepetitionRate
()
>
0
&&
config
.
getRepetitionRate
()
<=
50
,
"重复率参数错误,必须大于0和小于50"
);
Assert
.
isTrue
(
config
.
getChunkSize
()
>
0
&&
config
.
getScrapSize
()
>
0
,
"切块大小参数错误"
);
Assert
.
isTrue
(
config
.
getChunkSize
()
>=
config
.
getScrapSize
(),
"【子切片】长度必须小于【大切片】长度"
);
}
public
List
<
SegmentationResult
>
contentSplitters
(
SegmentationConfig
config
,
String
documentContents
)
{
List
<
SegmentationResult
>
result
=
new
ArrayList
<>();
int
CHUNK_SIZE
=
config
.
getChunkSize
();
int
CHUNK_REDUNDANT_VALUE
=
(
int
)
(
CHUNK_SIZE
*
(
config
.
getRepetitionRate
()
/
100
D
));
int
SCRAP_SIZE
=
config
.
getScrapSize
();
int
SCRAP_REDUNDANT_VALUE
=
(
int
)
(
SCRAP_SIZE
*
(
config
.
getRepetitionRate
()
/
100
D
));
int
left
=
CHUNK_REDUNDANT_VALUE
-
CHUNK_SIZE
,
right
=
0
;
//初始化左右指针
//切分大块
while
(
right
<
documentContents
.
length
())
{
left
=
left
+
CHUNK_SIZE
-
CHUNK_REDUNDANT_VALUE
;
//更新大块左指针
right
=
Math
.
min
(
left
+
CHUNK_SIZE
,
documentContents
.
length
());
//更新大块右指针
String
chunkContent
=
documentContents
.
substring
(
left
,
right
);
//大块内容
//大块分割成多小块
int
scrapLeft
=
SCRAP_REDUNDANT_VALUE
-
SCRAP_SIZE
;
// 小块 左指针
int
scrapRight
=
0
;
//小块 右指针
List
<
String
>
scrapChunkContent
=
new
ArrayList
<>();
while
(
scrapRight
<
chunkContent
.
length
())
{
scrapLeft
=
scrapLeft
+
SCRAP_SIZE
-
SCRAP_REDUNDANT_VALUE
;
//更新左指针
scrapRight
=
Math
.
min
(
scrapLeft
+
SCRAP_SIZE
,
chunkContent
.
length
());
//更新右指针
String
scrapChunk
=
chunkContent
.
substring
(
scrapLeft
,
scrapRight
);
//小块内容
scrapChunkContent
.
add
(
scrapChunk
);
}
SegmentationResult
segmentationResult
=
new
SegmentationResult
();
segmentationResult
.
setChunkContent
(
chunkContent
);
segmentationResult
.
setScrapChunkContent
(
scrapChunkContent
);
result
.
add
(
segmentationResult
);
}
return
result
;
}
}
src/main/java/cn/com/poc/common/segmentation/SegmentationAbstract.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
common
.
segmentation
;
import
cn.com.poc.common.segmentation.domain.SegmentationConfig
;
import
cn.com.poc.common.segmentation.domain.SegmentationResult
;
import
java.util.List
;
public
abstract
class
SegmentationAbstract
{
protected
String
documentName
;
protected
String
content
;
protected
String
documentUrl
;
public
List
<
SegmentationResult
>
scrap
(
SegmentationConfig
config
)
{
return
null
;
}
public
void
setDocumentName
(
String
documentName
)
{
this
.
documentName
=
documentName
;
}
public
void
setDocumentUrl
(
String
documentUrl
)
{
this
.
documentUrl
=
documentUrl
;
}
public
void
setContent
(
String
content
)
{
this
.
content
=
content
;
}
}
src/main/java/cn/com/poc/common/segmentation/SegmentationBuilder.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
common
.
segmentation
;
import
cn.com.poc.common.segmentation.contents.SegmentationEnum
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
org.apache.commons.lang3.StringUtils
;
/**
* @author alex
*/
public
class
SegmentationBuilder
{
private
String
content
;
private
String
documentUrl
;
private
String
documentName
;
private
String
segmentationType
;
public
SegmentationBuilder
content
(
String
content
)
{
this
.
content
=
content
;
return
this
;
}
public
SegmentationBuilder
documentUrl
(
String
documentUrl
)
{
this
.
documentUrl
=
documentUrl
;
return
this
;
}
public
SegmentationBuilder
documentName
(
String
documentName
)
{
this
.
documentName
=
documentName
;
return
this
;
}
public
SegmentationBuilder
segmentationType
(
String
segmentationType
)
{
this
.
segmentationType
=
segmentationType
;
return
this
;
}
public
SegmentationAbstract
build
()
{
try
{
if
(
StringUtils
.
isBlank
(
this
.
documentUrl
)
&&
StringUtils
.
isBlank
(
content
))
{
throw
new
BusinessException
(
"文本分割器不能为空"
);
}
if
(
StringUtils
.
isBlank
(
this
.
segmentationType
))
{
throw
new
BusinessException
(
"文本分割器类型不能为空"
);
}
Class
<?
extends
SegmentationAbstract
>
segmentationClass
=
SegmentationEnum
.
matchSegmentationClass
(
this
.
segmentationType
);
if
(
segmentationClass
==
null
)
{
throw
new
BusinessException
(
"未找到该类型文本分割器"
);
}
SegmentationAbstract
segmentationAbstract
=
segmentationClass
.
newInstance
();
segmentationAbstract
.
setDocumentUrl
(
this
.
documentUrl
);
segmentationAbstract
.
setContent
(
this
.
content
);
segmentationAbstract
.
setDocumentName
(
this
.
documentName
);
return
segmentationAbstract
;
}
catch
(
InstantiationException
|
IllegalAccessException
e
)
{
throw
new
BusinessException
(
"文本分割器初始化失败"
);
}
}
}
src/main/java/cn/com/poc/common/segmentation/contents/SegmentationEnum.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
common
.
segmentation
.
contents
;
import
cn.com.poc.common.segmentation.DefaultSegmentation
;
import
cn.com.poc.common.segmentation.NumberOfWordSegmentation
;
import
cn.com.poc.common.segmentation.SegmentationAbstract
;
/**
* 内容分片枚举
*
* @author alex.yao
*/
public
enum
SegmentationEnum
{
/**
* 默认-分片大小
*/
DEFAULT
(
DefaultSegmentation
.
class
),
/**
* 按字数
*/
NUMBER_Of_WORDS
(
NumberOfWordSegmentation
.
class
),
;
private
final
Class
<?
extends
SegmentationAbstract
>
clazz
;
SegmentationEnum
(
Class
<?
extends
SegmentationAbstract
>
clazz
)
{
this
.
clazz
=
clazz
;
}
public
static
Class
<?
extends
SegmentationAbstract
>
matchSegmentationClass
(
String
type
)
{
for
(
SegmentationEnum
segmentation
:
SegmentationEnum
.
values
())
{
if
(
segmentation
.
name
().
equalsIgnoreCase
(
type
))
{
return
segmentation
.
clazz
;
}
}
return
null
;
}
}
src/main/java/cn/com/poc/common/segmentation/domain/SegmentationConfig.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
common
.
segmentation
.
domain
;
import
java.util.List
;
public
class
SegmentationConfig
{
/**
* 大分片大小
*/
private
int
chunkSize
;
/**
* 小分片大小
*/
private
int
scrapSize
;
/**
* 分片重复率
*/
private
int
repetitionRate
;
/**
* 关联信息
*/
private
List
<
String
>
relationInfo
;
/**
* 自定义正则
*/
private
String
regex
;
/**
* 标点符号
*/
private
List
<
String
>
punctuations
;
public
List
<
String
>
getPunctuations
()
{
return
punctuations
;
}
public
void
setPunctuations
(
List
<
String
>
punctuations
)
{
this
.
punctuations
=
punctuations
;
}
public
String
getRegex
()
{
return
regex
;
}
public
void
setRegex
(
String
regex
)
{
this
.
regex
=
regex
;
}
public
int
getChunkSize
()
{
return
chunkSize
;
}
public
void
setChunkSize
(
int
chunkSize
)
{
this
.
chunkSize
=
chunkSize
;
}
public
int
getScrapSize
()
{
return
scrapSize
;
}
public
void
setScrapSize
(
int
scrapSize
)
{
this
.
scrapSize
=
scrapSize
;
}
public
int
getRepetitionRate
()
{
return
repetitionRate
;
}
public
void
setRepetitionRate
(
int
repetitionRate
)
{
this
.
repetitionRate
=
repetitionRate
;
}
public
List
<
String
>
getRelationInfo
()
{
return
relationInfo
;
}
public
void
setRelationInfo
(
List
<
String
>
relationInfo
)
{
this
.
relationInfo
=
relationInfo
;
}
}
src/main/java/cn/com/poc/common/segmentation/domain/SegmentationResult.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
common
.
segmentation
.
domain
;
import
java.util.List
;
public
class
SegmentationResult
{
private
String
chunkContent
;
private
List
<
String
>
scrapChunkContent
;
public
String
getChunkContent
()
{
return
chunkContent
;
}
public
void
setChunkContent
(
String
chunkContent
)
{
this
.
chunkContent
=
chunkContent
;
}
public
List
<
String
>
getScrapChunkContent
()
{
return
scrapChunkContent
;
}
public
void
setScrapChunkContent
(
List
<
String
>
scrapChunkContent
)
{
this
.
scrapChunkContent
=
scrapChunkContent
;
}
@Override
public
String
toString
()
{
return
"SegmentationResult{"
+
"chunkContent='"
+
chunkContent
+
'\''
+
", scrapChunkContent="
+
scrapChunkContent
+
'}'
;
}
}
src/main/java/cn/com/poc/long_document/aggregate/LongTextDialoguesService.java
View file @
35fdab75
...
@@ -12,7 +12,7 @@ import java.util.List;
...
@@ -12,7 +12,7 @@ import java.util.List;
public
interface
LongTextDialoguesService
{
public
interface
LongTextDialoguesService
{
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
)
throws
Exception
;
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
,
Boolean
enableSearchEngine
,
Boolean
enableDeepThinking
)
throws
Exception
;
LongTextSummaryDto
summary
(
String
dialoguesId
,
Long
userId
)
throws
Exception
;
LongTextSummaryDto
summary
(
String
dialoguesId
,
Long
userId
)
throws
Exception
;
...
...
src/main/java/cn/com/poc/long_document/aggregate/impl/LongTextDialoguesServiceImpl.java
View file @
35fdab75
...
@@ -2,13 +2,14 @@ package cn.com.poc.long_document.aggregate.impl;
...
@@ -2,13 +2,14 @@ package cn.com.poc.long_document.aggregate.impl;
import
cn.com.poc.agent_application.entity.BizAgentApplicationDialoguesRecordEntity
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationDialoguesRecordEntity
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity
;
import
cn.com.poc.agent_application.entity.CheckPluginUseEntity
;
import
cn.com.poc.agent_application.entity.KnowledgeContentResult
;
import
cn.com.poc.agent_application.entity.KnowledgeContentResult
;
import
cn.com.poc.agent_application.service.BizAgentApplicationDialoguesRecordService
;
import
cn.com.poc.agent_application.service.BizAgentApplicationDialoguesRecordService
;
import
cn.com.poc.agent_application.service.BizAgentApplicationGcConfigService
;
import
cn.com.poc.agent_application.service.BizAgentApplicationGcConfigService
;
import
cn.com.poc.agent_application.utils.AgentApplicationTools
;
import
cn.com.poc.ai_dialogues.entity.BizAiDialoguesEntity
;
import
cn.com.poc.ai_dialogues.entity.BizAiDialoguesEntity
;
import
cn.com.poc.ai_dialogues.service.BizAiDialoguesService
;
import
cn.com.poc.ai_dialogues.service.BizAiDialoguesService
;
import
cn.com.poc.common.constant.CommonConstant
;
import
cn.com.poc.common.constant.CommonConstant
;
import
cn.com.poc.common.constant.FmxParamConfigConstant
;
import
cn.com.poc.common.model.BizFileUploadRecordModel
;
import
cn.com.poc.common.model.BizFileUploadRecordModel
;
import
cn.com.poc.common.service.BizFileUploadRecordService
;
import
cn.com.poc.common.service.BizFileUploadRecordService
;
import
cn.com.poc.common.utils.DocumentLoad
;
import
cn.com.poc.common.utils.DocumentLoad
;
...
@@ -30,10 +31,17 @@ import cn.com.poc.long_document.service.BizLongTextSummaryCacheService;
...
@@ -30,10 +31,17 @@ import cn.com.poc.long_document.service.BizLongTextSummaryCacheService;
import
cn.com.poc.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService
;
import
cn.com.poc.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.KnowledgeSearchTypeEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.KnowledgeSearchTypeEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.LLMRoleEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.LLMRoleEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.FunctionCall
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.ToolFunction
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.SearchKnowledgeResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.SearchKnowledgeResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.web_seach.WebSearchFunction
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.web_seach.WebSearchFunctionResult
;
import
cn.com.poc.thirdparty.service.LLMService
;
import
cn.com.poc.thirdparty.service.LLMService
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
cn.com.yict.framemax.frame.service.FmxParamConfigService
;
import
cn.com.yict.framemax.frame.service.FmxParamConfigService
;
...
@@ -97,9 +105,12 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
...
@@ -97,9 +105,12 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
@Resource
@Resource
private
FmxParamConfigService
fmxParamConfigService
;
private
FmxParamConfigService
fmxParamConfigService
;
@Resource
private
WebSearchFunction
webSearchFunction
;
@Override
@Override
public
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
)
throws
Exception
{
public
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
,
Boolean
enableSearchEngine
,
Boolean
enableDeepThinking
)
throws
Exception
{
BizAiDialoguesEntity
bizAiDialoguesEntity
=
new
BizAiDialoguesEntity
();
BizAiDialoguesEntity
bizAiDialoguesEntity
=
new
BizAiDialoguesEntity
();
bizAiDialoguesEntity
.
setDialoguesId
(
dialoguesId
);
bizAiDialoguesEntity
.
setDialoguesId
(
dialoguesId
);
bizAiDialoguesEntity
.
setMemberId
(
userId
);
bizAiDialoguesEntity
.
setMemberId
(
userId
);
...
@@ -165,9 +176,15 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
...
@@ -165,9 +176,15 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
}
}
String
longTextDialoguesModel
=
fmxParamConfigService
.
getParam
(
"longtext.dialogues_model"
);
String
longTextDialoguesModel
=
enableDeepThinking
?
fmxParamConfigService
.
getParam
(
"longtext.dialogues_model_think"
)
:
fmxParamConfigService
.
getParam
(
"longtext.dialogues_model"
);
// 插件调用
ToolFunction
toolFunction
=
getToolFunction
(
dialoguesId
,
input
,
enableSearchEngine
,
sseUtil
);
//组装请求参数
//组装请求参数
List
<
Message
>
messages
=
buildMessages
(
dialoguesId
,
userId
,
input
,
fileUrl
,
knowledgeResult
);
List
<
Message
>
messages
=
buildMessages
(
dialoguesId
,
userId
,
input
,
fileUrl
,
knowledgeResult
,
toolFunction
);
LargeModelResponse
largeModelResponse
=
new
LargeModelResponse
();
LargeModelResponse
largeModelResponse
=
new
LargeModelResponse
();
largeModelResponse
.
setModel
(
longTextDialoguesModel
);
largeModelResponse
.
setModel
(
longTextDialoguesModel
);
largeModelResponse
.
setMessages
(
messages
.
toArray
(
new
Message
[
0
]));
largeModelResponse
.
setMessages
(
messages
.
toArray
(
new
Message
[
0
]));
...
@@ -292,7 +309,7 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
...
@@ -292,7 +309,7 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
}
}
private
List
<
Message
>
buildMessages
(
String
dialogsId
,
Long
userId
,
String
input
,
String
fileUrl
,
List
<
KnowledgeContentResult
>
knowledgeContentResults
)
throws
Exception
{
private
List
<
Message
>
buildMessages
(
String
dialogsId
,
Long
userId
,
String
input
,
String
fileUrl
,
List
<
KnowledgeContentResult
>
knowledgeContentResults
,
ToolFunction
toolFunction
)
throws
Exception
{
// 获取对话提示词
// 获取对话提示词
String
promptCode
=
"DocumentDialoguePrompt"
;
String
promptCode
=
"DocumentDialoguePrompt"
;
BizAgentApplicationGcConfigEntity
documentDialoguePrompt
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
promptCode
);
BizAgentApplicationGcConfigEntity
documentDialoguePrompt
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
promptCode
);
...
@@ -315,6 +332,10 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
...
@@ -315,6 +332,10 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
prompt
=
prompt
.
replace
(
"${knowledgeContent}"
,
StringUtils
.
EMPTY
);
prompt
=
prompt
.
replace
(
"${knowledgeContent}"
,
StringUtils
.
EMPTY
);
}
}
if
(
toolFunction
!=
null
)
{
prompt
=
prompt
.
replace
(
"${toolFunction}"
,
JsonUtils
.
serialize
(
toolFunction
));
}
// 配置message
// 配置message
List
<
Message
>
messages
=
new
ArrayList
<>();
List
<
Message
>
messages
=
new
ArrayList
<>();
Message
systemMessage
=
new
Message
();
Message
systemMessage
=
new
Message
();
...
@@ -577,4 +598,44 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
...
@@ -577,4 +598,44 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
throw
new
BusinessException
(
"获取核心观点失败"
);
throw
new
BusinessException
(
"获取核心观点失败"
);
}
}
}
}
private
ToolFunction
getToolFunction
(
String
dialoguesId
,
String
input
,
Boolean
enableSearchEngine
,
SSEUtil
sseUtil
)
throws
IOException
{
ToolFunction
toolFunction
=
null
;
if
(
enableSearchEngine
)
{
List
<
Message
>
messages
=
new
ArrayList
<>();
Message
message
=
new
Message
();
message
.
setRole
(
"user"
);
message
.
setContent
(
input
);
messages
.
add
(
message
);
String
[]
unitIds
=
new
String
[
1
];
unitIds
[
0
]
=
"web_search"
;
List
<
Tool
>
tools
=
AgentApplicationTools
.
buildFunctionConfig
(
null
,
"N"
,
dialoguesId
,
dialoguesId
,
unitIds
,
"N"
);
CheckPluginUseEntity
checkPluginUseEntity
=
AgentApplicationTools
.
checkPluginUse
(
messages
,
tools
,
null
);
FunctionCallResult
functionCallResult
=
checkPluginUseEntity
.
getFunctionCallResult
();
if
(
functionCallResult
!=
null
)
{
FunctionCall
functionCall
=
functionCallResult
.
getFunctionCall
();
if
(
functionCallResult
.
isNeed
()
&&
functionCall
!=
null
&&
"web_search"
.
equals
(
functionCall
.
getName
()))
{
AbstractFunctionResult
<
List
<
WebSearchFunctionResult
>>
functionResult
=
webSearchFunction
.
doFunction
(
functionCall
.
getArguments
(),
dialoguesId
,
null
,
null
);
if
(
functionResult
!=
null
&&
CollectionUtils
.
isNotEmpty
(
functionResult
.
getFunctionResult
()))
{
List
<
WebSearchFunctionResult
>
webSearchFunctionResults
=
functionResult
.
getFunctionResult
();
if
(
CollectionUtils
.
isNotEmpty
(
webSearchFunctionResults
))
{
toolFunction
=
new
ToolFunction
();
toolFunction
.
setResult
(
JsonUtils
.
serialize
(
webSearchFunctionResults
));
toolFunction
.
setName
(
"web_search"
);
toolFunction
.
setArguments
(
functionCall
.
getArguments
());
toolFunction
.
setDisplayFormat
(
"json"
);
LargeModelDemandResult
result
=
new
LargeModelDemandResult
();
result
.
setCode
(
"0"
);
result
.
setFunction
(
toolFunction
);
result
.
setDbChainResult
(
null
);
result
.
setKnowledgeContentResult
(
null
);
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
}
}
}
}
}
return
toolFunction
;
}
}
}
src/main/java/cn/com/poc/long_document/dto/LongTextDialoguesCallDto.java
View file @
35fdab75
package
cn
.
com
.
poc
.
long_document
.
dto
;
package
cn
.
com
.
poc
.
long_document
.
dto
;
import
java.util.List
;
/**
/**
* @author alex.yao
* @author alex.yao
* @date 2025/6/3
* @date 2025/6/3
...
@@ -28,6 +26,33 @@ public class LongTextDialoguesCallDto {
...
@@ -28,6 +26,33 @@ public class LongTextDialoguesCallDto {
*/
*/
private
Integer
[]
knowledgeIds
;
private
Integer
[]
knowledgeIds
;
/**
* 是否启用搜索引擎
*/
private
boolean
enableSearchEngine
;
/**
* 是否开启深度思考
*/
private
boolean
enableDeepThinking
;
public
boolean
getEnableSearchEngine
()
{
return
enableSearchEngine
;
}
public
void
setEnableSearchEngine
(
boolean
enableSearchEngine
)
{
this
.
enableSearchEngine
=
enableSearchEngine
;
}
public
boolean
getEnableDeepThinking
()
{
return
enableDeepThinking
;
}
public
void
setEnableDeepThinking
(
boolean
enableDeepThinking
)
{
this
.
enableDeepThinking
=
enableDeepThinking
;
}
public
String
getDialoguesId
()
{
public
String
getDialoguesId
()
{
return
dialoguesId
;
return
dialoguesId
;
}
}
...
...
src/main/java/cn/com/poc/long_document/rest/impl/LongTextDialoguesRestImpl.java
View file @
35fdab75
...
@@ -40,7 +40,7 @@ public class LongTextDialoguesRestImpl implements LongTextDialoguesRest {
...
@@ -40,7 +40,7 @@ public class LongTextDialoguesRestImpl implements LongTextDialoguesRest {
dto
.
getFileUrl
(),
dto
.
getFileUrl
(),
dto
.
getInput
(),
dto
.
getInput
(),
dto
.
getKnowledgeIds
(),
dto
.
getKnowledgeIds
(),
userBaseEntity
.
getUserId
());
userBaseEntity
.
getUserId
()
,
dto
.
getEnableSearchEngine
(),
dto
.
getEnableDeepThinking
()
);
}
}
@Override
@Override
...
...
src/main/java/cn/com/poc/meeting/aggregate/AiMeetingAssistantService.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
aggregate
;
import
cn.com.poc.meeting.entity.AnalysisTaskDetailEntity
;
/**
* AI会议助手服务
*/
public
interface
AiMeetingAssistantService
{
/**
* 创建会议解析任务
*
* @param fileUrl 音频文件地址
* @param dialoguesId 会议ID
* @param userId 用户ID
* @return 任务状态
*/
String
createTask
(
String
fileUrl
,
String
dialoguesId
,
Long
userId
);
/**
* 获取会议解析任务详情
*
* @param dialoguesId
* @param userId
* @return
*/
AnalysisTaskDetailEntity
getTaskDetail
(
String
dialoguesId
,
Long
userId
);
/**
* 调用AI助手对话
*
* @param dialoguesId
* @param fileUrl
* @param input
* @param knowledgeIds
* @param userId
*/
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
)
throws
Exception
;
}
src/main/java/cn/com/poc/meeting/aggregate/impl/AiMeetingAssistantServiceImpl.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
aggregate
.
impl
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationDialoguesRecordEntity
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity
;
import
cn.com.poc.agent_application.entity.KnowledgeContentResult
;
import
cn.com.poc.agent_application.service.BizAgentApplicationDialoguesRecordService
;
import
cn.com.poc.agent_application.service.BizAgentApplicationGcConfigService
;
import
cn.com.poc.ai_dialogues.constant.AiDialoguesTypeEnum
;
import
cn.com.poc.ai_dialogues.entity.BizAiDialoguesEntity
;
import
cn.com.poc.ai_dialogues.service.BizAiDialoguesService
;
import
cn.com.poc.common.constant.CommonConstant
;
import
cn.com.poc.common.service.BizFileUploadRecordService
;
import
cn.com.poc.common.utils.*
;
import
cn.com.poc.knowledge.aggregate.KnowledgeService
;
import
cn.com.poc.knowledge.constant.KnowledgeConstant
;
import
cn.com.poc.knowledge.entity.BizKnowledgeDocumentEntity
;
import
cn.com.poc.knowledge.query.KnowledgeDocumentRelationQueryItem
;
import
cn.com.poc.knowledge.service.BizKnowledgeDocumentService
;
import
cn.com.poc.long_document.domain.LongtextDialoguesResult
;
import
cn.com.poc.meeting.aggregate.AiMeetingAssistantService
;
import
cn.com.poc.meeting.cache.KeyWordCounter
;
import
cn.com.poc.meeting.constants.MeetingAssistantConstantEnum
;
import
cn.com.poc.meeting.convert.BizMeetingAssistantAnalysisTaskConvert
;
import
cn.com.poc.meeting.entity.AnalysisTaskDetailEntity
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAsrTaskEntity
;
import
cn.com.poc.meeting.service.BizMeetingAssistantAnalysisTaskService
;
import
cn.com.poc.meeting.service.BizMeetingAssistantAsrTaskService
;
import
cn.com.poc.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.KnowledgeSearchTypeEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.LLMRoleEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.SearchKnowledgeResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.AsrOfflineDetailResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.Translation
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.service.ASRService
;
import
cn.com.poc.thirdparty.service.LLMService
;
import
cn.com.poc.writing.dto.AiWritingTitleGenerationDto
;
import
cn.com.poc.writing.entity.BizAiWritingDialoguesRecordEntity
;
import
cn.com.poc.writing.service.BizAiWritingDialoguesRecordService
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
com.alibaba.fastjson.TypeReference
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.io.BufferedReader
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Service
public
class
AiMeetingAssistantServiceImpl
implements
AiMeetingAssistantService
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
AiMeetingAssistantServiceImpl
.
class
);
@Resource
private
ASRService
asrService
;
@Resource
private
BizAiDialoguesService
bizAiDialoguesService
;
@Resource
private
BizFileUploadRecordService
bizFileUploadRecordService
;
@Resource
private
BizMeetingAssistantAsrTaskService
bizMeetingAssistantAsrTaskService
;
@Resource
private
BizMeetingAssistantAnalysisTaskService
bizMeetingAssistantAnalysisTaskService
;
@Resource
private
BizAgentApplicationDialoguesRecordService
bizAgentApplicationDialoguesRecordService
;
@Resource
private
KnowledgeService
knowledgeService
;
@Resource
private
BizKnowledgeDocumentService
bizKnowledgeDocumentService
;
@Resource
private
DemandKnowledgeService
demandKnowledgeService
;
@Resource
private
LLMService
llmService
;
@Resource
private
BizAgentApplicationGcConfigService
bizAgentApplicationGcConfigService
;
@Override
public
String
createTask
(
String
fileUrl
,
String
dialoguesId
,
Long
userId
)
{
logger
.
info
(
"创建会议解析任务,fileUrl:{},dialoguesId:{}"
,
fileUrl
,
dialoguesId
);
// 1. 查询dialoguesId 是否存在并且会话标题使用文件名
checkIsExistAndUpdateTitle
(
fileUrl
,
dialoguesId
,
userId
);
// 2. 调用语音识别任务 [异步]
asrTask
(
fileUrl
,
dialoguesId
,
userId
);
// 3. 保存会议内容分析状态
saveAnalysisTask
(
dialoguesId
,
userId
);
return
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
();
}
private
void
checkIsExistAndUpdateTitle
(
String
fileUrl
,
String
dialoguesId
,
Long
userId
)
{
// 1. 查询dialoguesId 是否存在
BizAiDialoguesEntity
bizAiDialoguesEntity
=
new
BizAiDialoguesEntity
();
bizAiDialoguesEntity
.
setDialoguesId
(
dialoguesId
);
bizAiDialoguesEntity
.
setMemberId
(
userId
);
bizAiDialoguesEntity
.
setDialoguesType
(
AiDialoguesTypeEnum
.
MEETING_ASSISTANT
.
getType
());
bizAiDialoguesEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizAiDialoguesEntity
>
aiDialoguesEntities
=
bizAiDialoguesService
.
findByExample
(
bizAiDialoguesEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
aiDialoguesEntities
))
{
throw
new
BusinessException
(
"会话不存在,查看会话ID是否正确"
);
}
//2. 获取文件名,更新标题
String
fileName
=
bizFileUploadRecordService
.
getFileNameByFileUrl
(
fileUrl
);
if
(
StringUtils
.
isBlank
(
fileName
))
{
throw
new
BusinessException
(
"获取文件失败,重新上传文件"
);
}
try
{
BizAiDialoguesEntity
updateAiDialoguesTitleEntity
=
aiDialoguesEntities
.
get
(
0
);
updateAiDialoguesTitleEntity
.
setTitle
(
fileName
);
bizAiDialoguesService
.
update
(
updateAiDialoguesTitleEntity
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"------ update ai dialogues title error :"
,
e
);
throw
new
BusinessException
(
"更新对话标题异常"
);
}
}
private
void
saveAnalysisTask
(
String
dialoguesId
,
Long
userId
)
{
// 若存在旧数据则删除旧数据
BizMeetingAssistantAnalysisTaskEntity
findMeetingAssistantAnalysisTaskLegacyDataEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
findMeetingAssistantAnalysisTaskLegacyDataEntity
.
setDiaguesId
(
dialoguesId
);
findMeetingAssistantAnalysisTaskLegacyDataEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAnalysisTaskEntity
>
analysisTaskEntities
=
bizMeetingAssistantAnalysisTaskService
.
findByExample
(
findMeetingAssistantAnalysisTaskLegacyDataEntity
,
null
);
if
(
CollectionUtils
.
isNotEmpty
(
analysisTaskEntities
))
{
BizMeetingAssistantAnalysisTaskEntity
taskEntity
=
analysisTaskEntities
.
get
(
0
);
bizMeetingAssistantAnalysisTaskService
.
deletedById
(
taskEntity
.
getId
());
logger
.
info
(
"------ 会议内容分析存在旧任务,已删除旧任务 id:{}---------"
,
taskEntity
.
getId
());
}
try
{
BizMeetingAssistantAnalysisTaskEntity
saveAnalysisTaskEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
saveAnalysisTaskEntity
.
setDiaguesId
(
dialoguesId
);
saveAnalysisTaskEntity
.
setMemberId
(
userId
);
saveAnalysisTaskEntity
.
setAnalysisStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
bizMeetingAssistantAnalysisTaskService
.
save
(
saveAnalysisTaskEntity
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"--------- save meeting assistant analysis task error :"
,
e
);
throw
new
BusinessException
(
"保存分析任务失败"
);
}
}
private
void
asrTask
(
String
fileUrl
,
String
dialoguesId
,
Long
userId
)
{
String
sessionId
=
UUIDTool
.
getUUID
();
String
status
=
asrService
.
speechToText
(
sessionId
,
fileUrl
);
if
(
StringUtils
.
isBlank
(
status
)
||
!
"success"
.
equals
(
status
))
{
throw
new
BusinessException
(
"语音识别任务创建失败"
);
}
try
{
BizMeetingAssistantAsrTaskEntity
bizMeetingAssistantAsrTaskEntity
=
new
BizMeetingAssistantAsrTaskEntity
();
bizMeetingAssistantAsrTaskEntity
.
setGenerateStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
bizMeetingAssistantAsrTaskEntity
.
setSessionId
(
sessionId
);
bizMeetingAssistantAsrTaskEntity
.
setDiaguesId
(
dialoguesId
);
bizMeetingAssistantAsrTaskEntity
.
setMemberId
(
userId
);
bizMeetingAssistantAsrTaskService
.
save
(
bizMeetingAssistantAsrTaskEntity
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"-------- save meeting assistant asr task error :"
,
e
);
throw
new
BusinessException
(
"保存语音识别任务状态异常"
);
}
}
@Override
public
AnalysisTaskDetailEntity
getTaskDetail
(
String
dialoguesId
,
Long
userId
)
{
AnalysisTaskDetailEntity
analysisTaskDetailEntity
=
new
AnalysisTaskDetailEntity
();
// 1. 查询dialoguesId 是否存在
BizAiDialoguesEntity
bizAiDialoguesEntity
=
new
BizAiDialoguesEntity
();
bizAiDialoguesEntity
.
setDialoguesId
(
dialoguesId
);
bizAiDialoguesEntity
.
setMemberId
(
userId
);
bizAiDialoguesEntity
.
setDialoguesType
(
AiDialoguesTypeEnum
.
MEETING_ASSISTANT
.
getType
());
bizAiDialoguesEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizAiDialoguesEntity
>
aiDialoguesEntities
=
bizAiDialoguesService
.
findByExample
(
bizAiDialoguesEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
aiDialoguesEntities
))
{
throw
new
BusinessException
(
"会话不存在,查看会话ID是否正确"
);
}
// 内容分析任务
BizMeetingAssistantAnalysisTaskEntity
meetingAssistantAnalysisTaskEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
meetingAssistantAnalysisTaskEntity
.
setDiaguesId
(
dialoguesId
);
meetingAssistantAnalysisTaskEntity
.
setMemberId
(
userId
);
meetingAssistantAnalysisTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAnalysisTaskEntity
>
entities
=
bizMeetingAssistantAnalysisTaskService
.
findByExample
(
meetingAssistantAnalysisTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
entities
))
{
throw
new
BusinessException
(
"无法找到对应解析任务,请重新生成"
);
}
BizMeetingAssistantAnalysisTaskEntity
bizMeetingAssistantAnalysisTaskEntity
=
entities
.
get
(
0
);
// 语音识别任务
BizMeetingAssistantAsrTaskEntity
bizMeetingAssistantAsrTaskEntity
=
new
BizMeetingAssistantAsrTaskEntity
();
bizMeetingAssistantAsrTaskEntity
.
setDiaguesId
(
dialoguesId
);
bizMeetingAssistantAsrTaskEntity
.
setMemberId
(
userId
);
bizMeetingAssistantAsrTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAsrTaskEntity
>
asrTaskEntities
=
bizMeetingAssistantAsrTaskService
.
findByExample
(
bizMeetingAssistantAsrTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
asrTaskEntities
))
{
throw
new
BusinessException
(
"获取语音识别任务异常"
);
}
BizMeetingAssistantAsrTaskEntity
asrTaskEntity
=
asrTaskEntities
.
get
(
0
);
if
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
asrTaskEntity
.
getGenerateStatus
()))
{
analysisTaskDetailEntity
.
setAnalysisStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
analysisTaskDetailEntity
.
setAsrStatus
(
asrTaskEntity
.
getGenerateStatus
());
logger
.
error
(
"-------------- 语音识别任务失败 ,sessionId:{}--------------------"
,
asrTaskEntity
.
getSessionId
());
return
analysisTaskDetailEntity
;
}
else
if
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
().
equals
(
asrTaskEntity
.
getGenerateStatus
()))
{
analysisTaskDetailEntity
.
setAnalysisStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
analysisTaskDetailEntity
.
setAsrStatus
(
asrTaskEntity
.
getGenerateStatus
());
logger
.
error
(
"-------------- 语音识别任务执行中 ,sessionId:{}--------------------"
,
asrTaskEntity
.
getSessionId
());
return
analysisTaskDetailEntity
;
}
// 构造返回参数
analysisTaskDetailEntity
=
BizMeetingAssistantAnalysisTaskConvert
.
bizEntityToDetailEntity
(
bizMeetingAssistantAnalysisTaskEntity
);
// 获取对话内容
AsrOfflineDetailResult
asrServiceDetail
=
asrService
.
getDetail
(
asrTaskEntity
.
getSessionId
());
List
<
Translation
>
translations
=
asrServiceDetail
.
getTranslation
();
analysisTaskDetailEntity
.
setTranslations
(
translations
);
// 获取说话人列表
Set
<
Long
>
spkSets
=
new
HashSet
<>();
for
(
Translation
translation
:
translations
)
{
spkSets
.
add
(
translation
.
getSpk
());
}
analysisTaskDetailEntity
.
setSpkSets
(
spkSets
);
return
analysisTaskDetailEntity
;
}
@Override
public
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
)
throws
Exception
{
BizAiDialoguesEntity
bizAiDialoguesEntity
=
new
BizAiDialoguesEntity
();
bizAiDialoguesEntity
.
setDialoguesId
(
dialoguesId
);
bizAiDialoguesEntity
.
setMemberId
(
userId
);
bizAiDialoguesEntity
.
setDialoguesType
(
AiDialoguesTypeEnum
.
MEETING_ASSISTANT
.
getType
());
bizAiDialoguesEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizAiDialoguesEntity
>
bizAiDialoguesEntities
=
bizAiDialoguesService
.
findByExample
(
bizAiDialoguesEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
bizAiDialoguesEntities
))
{
throw
new
BusinessException
(
"对话ID不存在"
);
}
BizAiDialoguesEntity
aiDialoguesEntity
=
bizAiDialoguesEntities
.
get
(
0
);
// 初始化文件
BizAgentApplicationDialoguesRecordEntity
dialoguesRecordEntity
=
new
BizAgentApplicationDialoguesRecordEntity
();
dialoguesRecordEntity
.
setDialogsId
(
dialoguesId
);
dialoguesRecordEntity
.
setMemberId
(
userId
);
dialoguesRecordEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizAgentApplicationDialoguesRecordEntity
>
dialoguesRecordEntities
=
bizAgentApplicationDialoguesRecordService
.
findByExample
(
dialoguesRecordEntity
,
null
);
boolean
isInit
=
false
;
if
(
CollectionUtils
.
isEmpty
(
dialoguesRecordEntities
))
{
if
(
StringUtils
.
isNoneBlank
(
aiDialoguesEntity
.
getFileUrl
())
&&
StringUtils
.
isBlank
(
fileUrl
))
{
fileUrl
=
aiDialoguesEntity
.
getFileUrl
();
}
isInit
=
true
;
}
// 文件是否变更
boolean
isFileUrlChanged
=
(
StringUtils
.
isNotBlank
(
fileUrl
)
&&
!
fileUrl
.
equals
(
aiDialoguesEntity
.
getFileUrl
()))
||
isInit
;
if
(
StringUtils
.
isBlank
(
fileUrl
))
{
fileUrl
=
aiDialoguesEntity
.
getFileUrl
();
}
// 更新文件URL
if
(
isFileUrlChanged
)
{
if
(!
isInit
&&
StringUtils
.
isNotBlank
(
fileUrl
))
{
aiDialoguesEntity
.
setFileUrl
(
fileUrl
);
bizAiDialoguesService
.
update
(
aiDialoguesEntity
);
}
}
//获取会议语音内容
List
<
Translation
>
translations
=
getASRTranslations
(
dialoguesId
,
userId
);
//记录提问时间
long
inputTimestamp
=
System
.
currentTimeMillis
();
SSEUtil
sseUtil
=
new
SSEUtil
();
// 知识库
//获取知识库配置
List
<
Integer
>
kdIds
=
knowledgeService
.
getKdIdsByKnowledgeInfoIds
(
knowledgeIds
);
List
<
KnowledgeContentResult
>
knowledgeResult
=
knowledge
(
kdIds
,
input
,
5
,
0.5
,
KnowledgeSearchTypeEnum
.
MIX
);
if
(
CollectionUtils
.
isNotEmpty
(
knowledgeResult
))
{
LargeModelDemandResult
result
=
new
LargeModelDemandResult
();
result
.
setCode
(
"0"
);
result
.
setFunction
(
null
);
result
.
setDbChainResult
(
null
);
result
.
setKnowledgeContentResult
(
knowledgeResult
);
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
}
// 获取大模型配置
String
promptCode
=
"AiMeetingAssistantPrompt"
;
BizAgentApplicationGcConfigEntity
documentDialoguePrompt
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
promptCode
);
if
(
documentDialoguePrompt
==
null
||
StringUtils
.
isBlank
(
documentDialoguePrompt
.
getConfigSystem
()))
{
logger
.
error
(
"获取对话提示词失败 , configCode:{}"
,
promptCode
);
throw
new
BusinessException
(
"获取对话提示词失败"
);
}
//组装请求参数
List
<
Message
>
messages
=
buildMessages
(
documentDialoguePrompt
,
dialoguesId
,
userId
,
input
,
fileUrl
,
knowledgeResult
,
translations
);
LargeModelResponse
largeModelResponse
=
new
LargeModelResponse
();
largeModelResponse
.
setModel
(
documentDialoguePrompt
.
getLargeModel
());
largeModelResponse
.
setMessages
(
messages
.
toArray
(
new
Message
[
0
]));
largeModelResponse
.
setStream
(
true
);
BufferedReader
bufferedReader
=
llmService
.
chatChunk
(
largeModelResponse
);
LongtextDialoguesResult
longtextDialoguesResult
=
textOutputStream
(
sseUtil
,
bufferedReader
);
// 保存用户输入记录
BizAgentApplicationDialoguesRecordEntity
inputRecord
=
new
BizAgentApplicationDialoguesRecordEntity
();
inputRecord
.
setMemberId
(
userId
);
inputRecord
.
setContent
(
input
);
if
(
isFileUrlChanged
)
{
inputRecord
.
setFileUrl
(
fileUrl
);
}
inputRecord
.
setDialogsId
(
dialoguesId
);
inputRecord
.
setRole
(
LLMRoleEnum
.
USER
.
getRole
());
inputRecord
.
setTimestamp
(
inputTimestamp
);
// 保存AI回复记录
BizAgentApplicationDialoguesRecordEntity
assistantRecord
=
new
BizAgentApplicationDialoguesRecordEntity
();
assistantRecord
.
setMemberId
(
userId
);
assistantRecord
.
setContent
(
longtextDialoguesResult
.
getMessage
());
assistantRecord
.
setReasoningContent
(
longtextDialoguesResult
.
getReasoningContent
());
assistantRecord
.
setDialogsId
(
dialoguesId
);
assistantRecord
.
setRole
(
LLMRoleEnum
.
ASSISTANT
.
getRole
());
assistantRecord
.
setTimestamp
(
System
.
currentTimeMillis
());
bizAgentApplicationDialoguesRecordService
.
save
(
inputRecord
);
bizAgentApplicationDialoguesRecordService
.
save
(
assistantRecord
);
}
private
List
<
Translation
>
getASRTranslations
(
String
dialoguesId
,
Long
userId
)
{
// 获取会议分析内容
BizMeetingAssistantAnalysisTaskEntity
bizMeetingAssistantAnalysisTaskEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
bizMeetingAssistantAnalysisTaskEntity
.
setDiaguesId
(
dialoguesId
);
bizMeetingAssistantAnalysisTaskEntity
.
setMemberId
(
userId
);
bizMeetingAssistantAnalysisTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAnalysisTaskEntity
>
bizMeetingAssistantAnalysisTaskEntities
=
bizMeetingAssistantAnalysisTaskService
.
findByExample
(
bizMeetingAssistantAnalysisTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
bizMeetingAssistantAnalysisTaskEntities
))
{
throw
new
BusinessException
(
"获取会议分析内容失败"
);
}
if
(
bizMeetingAssistantAnalysisTaskEntities
.
get
(
0
).
getAnalysisStatus
().
equals
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
()))
{
throw
new
BusinessException
(
"会议内容正在解析,待解析完成后才可进行对话"
);
}
if
(
bizMeetingAssistantAnalysisTaskEntities
.
get
(
0
).
getAnalysisStatus
().
equals
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
()))
{
throw
new
BusinessException
(
"会议内容解析失败,无法进行对话"
);
}
//获取会议语音识别内容
BizMeetingAssistantAsrTaskEntity
bizMeetingAssistantAsrTaskEntity
=
new
BizMeetingAssistantAsrTaskEntity
();
bizMeetingAssistantAsrTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
bizMeetingAssistantAsrTaskEntity
.
setDiaguesId
(
dialoguesId
);
bizMeetingAssistantAsrTaskEntity
.
setMemberId
(
userId
);
List
<
BizMeetingAssistantAsrTaskEntity
>
asrTaskEntities
=
bizMeetingAssistantAsrTaskService
.
findByExample
(
bizMeetingAssistantAsrTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
asrTaskEntities
))
{
throw
new
BusinessException
(
"获取语音识别内容异常"
);
}
String
sessionId
=
asrTaskEntities
.
get
(
0
).
getSessionId
();
AsrOfflineDetailResult
asrServiceDetail
=
asrService
.
getDetail
(
sessionId
);
return
asrServiceDetail
.
getTranslation
();
}
/**
* 文本输出结果
*
* @param sseUtil
* @param bufferedReader
* @throws IOException
*/
private
LongtextDialoguesResult
textOutputStream
(
SSEUtil
sseUtil
,
BufferedReader
bufferedReader
)
throws
IOException
{
String
res
=
""
;
StringBuilder
output
=
new
StringBuilder
();
StringBuilder
reasoningContent
=
new
StringBuilder
();
try
{
while
((
res
=
bufferedReader
.
readLine
())
!=
null
)
{
if
(
StringUtils
.
isEmpty
(
res
))
{
continue
;
}
res
=
StringUtils
.
replace
(
res
,
"data: "
,
StringUtils
.
EMPTY
);
LargeModelDemandResult
result
=
JsonUtils
.
deSerialize
(
res
,
LargeModelDemandResult
.
class
);
if
(!
"0"
.
equals
(
result
.
getCode
()))
{
logger
.
error
(
"LLM Error,code:{}"
,
result
.
getCode
());
BusinessException
ex
=
new
BusinessException
(
"exception/call.failure"
);
result
.
setMessage
(
ex
.
getMessage
());
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
sseUtil
.
send
(
"[DONE]"
);
sseUtil
.
complete
();
throw
ex
;
}
result
.
setFunction
(
null
);
result
.
setDbChainResult
(
null
);
result
.
setKnowledgeContentResult
(
null
);
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
if
(
StringUtils
.
isNotEmpty
(
result
.
getMessage
()))
{
output
.
append
(
result
.
getMessage
());
}
if
(
StringUtils
.
isNotEmpty
(
result
.
getReasoningContent
()))
{
reasoningContent
.
append
(
result
.
getReasoningContent
());
}
}
// 关闭资源
sseUtil
.
send
(
"[DONE]"
);
sseUtil
.
complete
();
LongtextDialoguesResult
longtextDialoguesResult
=
new
LongtextDialoguesResult
();
longtextDialoguesResult
.
setMessage
(
output
.
toString
());
longtextDialoguesResult
.
setReasoningContent
(
reasoningContent
.
toString
());
return
longtextDialoguesResult
;
}
catch
(
IOException
e
)
{
logger
.
error
(
"连接断开,code:{}"
,
e
.
getMessage
());
sseUtil
.
completeByError
(
"连接断开"
);
throw
new
BusinessException
(
"连接断开"
);
}
finally
{
bufferedReader
.
close
();
}
}
private
List
<
KnowledgeContentResult
>
knowledge
(
List
<
Integer
>
kdIds
,
String
input
,
Integer
topK
,
Double
score
,
KnowledgeSearchTypeEnum
searchTypeEnum
)
{
List
<
KnowledgeContentResult
>
knowledgeContentResults
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
kdIds
))
{
return
knowledgeContentResults
;
}
List
<
String
>
knowledgeIds
=
new
ArrayList
<>();
for
(
Integer
kdId
:
kdIds
)
{
BizKnowledgeDocumentEntity
knowledgeDocumentEntity
=
bizKnowledgeDocumentService
.
get
(
kdId
);
// 筛选训练完成的文档,否则跳过该文档
if
(
null
==
knowledgeDocumentEntity
&&
KnowledgeConstant
.
TrainStatus
.
COMPLETE
.
equals
(
knowledgeDocumentEntity
.
getTrainStatus
()))
{
continue
;
}
knowledgeIds
.
add
(
knowledgeDocumentEntity
.
getKnowledgeId
());
}
SearchKnowledgeResult
searchKnowledgeResult
=
demandKnowledgeService
.
searchKnowledge
(
input
,
knowledgeIds
,
topK
,
score
,
searchTypeEnum
);
if
(
CollectionUtils
.
isNotEmpty
(
searchKnowledgeResult
.
getDocuments
()))
{
for
(
int
i
=
1
;
i
<=
searchKnowledgeResult
.
getDocuments
().
size
();
i
++)
{
KnowledgeContentResult
knowledgeContentResult
=
new
KnowledgeContentResult
();
knowledgeContentResult
.
setContent
(
searchKnowledgeResult
.
getDocuments
().
get
(
i
-
1
));
knowledgeContentResult
.
setKnowledgeId
(
searchKnowledgeResult
.
getKnowledgeIds
().
get
(
i
-
1
));
knowledgeContentResult
.
setScore
(
searchKnowledgeResult
.
getScore
().
get
(
i
-
1
));
knowledgeContentResults
.
add
(
knowledgeContentResult
);
}
// 根据knowledgeId获取知识库名和文档名
knowledgeIds
=
knowledgeContentResults
.
stream
().
map
(
KnowledgeContentResult:
:
getKnowledgeId
).
distinct
().
collect
(
Collectors
.
toList
());
List
<
KnowledgeDocumentRelationQueryItem
>
knowledgeDocumentRelationQueryItems
=
bizKnowledgeDocumentService
.
knowledgeDocumentRelationQuery
(
knowledgeIds
,
null
);
for
(
KnowledgeContentResult
result
:
knowledgeContentResults
)
{
String
knowledgeId
=
result
.
getKnowledgeId
();
KnowledgeDocumentRelationQueryItem
item
=
knowledgeDocumentRelationQueryItems
.
stream
().
filter
(
v
->
v
.
getKnowledgeId
().
equals
(
knowledgeId
)).
findFirst
().
get
();
result
.
setKnowledgeName
(
item
.
getKnowledgeName
());
result
.
setKdId
(
item
.
getKdId
());
result
.
setDocumentName
(
item
.
getDocumentName
());
}
}
return
knowledgeContentResults
;
}
private
List
<
Message
>
buildMessages
(
BizAgentApplicationGcConfigEntity
documentDialoguePrompt
,
String
dialogsId
,
Long
userId
,
String
input
,
String
fileUrl
,
List
<
KnowledgeContentResult
>
knowledgeContentResults
,
List
<
Translation
>
translations
)
throws
Exception
{
// 加载文件
String
fileContent
=
StringUtils
.
EMPTY
;
if
(
StringUtils
.
isNoneBlank
(
fileUrl
))
{
File
file
=
DocumentLoad
.
downloadURLDocument
(
fileUrl
);
fileContent
=
DocumentLoad
.
documentToText
(
file
);
}
// 加载对话提示词
String
prompt
=
documentDialoguePrompt
.
getConfigSystem
();
if
(
CollectionUtils
.
isNotEmpty
(
knowledgeContentResults
))
{
String
knowledgeContent
=
JsonUtils
.
serialize
(
knowledgeContentResults
);
prompt
=
prompt
.
replace
(
"${knowledgeContent}"
,
knowledgeContent
);
}
else
{
prompt
=
prompt
.
replace
(
"${knowledgeContent}"
,
StringUtils
.
EMPTY
);
}
if
(
CollectionUtils
.
isNotEmpty
(
translations
))
{
StringBuilder
contentsBuilder
=
new
StringBuilder
();
for
(
Translation
translation
:
translations
)
{
Long
spk
=
translation
.
getSpk
();
String
content
=
translation
.
getContent
();
contentsBuilder
.
append
(
spk
).
append
(
":"
).
append
(
content
).
append
(
cn
.
com
.
poc
.
common
.
utils
.
StringUtils
.
LF
);
}
prompt
=
prompt
.
replace
(
"${meeting_content}"
,
contentsBuilder
.
toString
().
length
()
>
25000
?
contentsBuilder
.
substring
(
0
,
25000
)
:
contentsBuilder
);
}
else
{
prompt
=
prompt
.
replace
(
"${meeting_content}"
,
StringUtils
.
EMPTY
);
}
prompt
=
prompt
.
replace
(
"${fileContent}"
,
fileContent
);
// 配置message
List
<
Message
>
messages
=
new
ArrayList
<>();
Message
systemMessage
=
new
Message
();
systemMessage
.
setContent
(
prompt
);
systemMessage
.
setRole
(
LLMRoleEnum
.
SYSTEM
.
getRole
());
messages
.
add
(
systemMessage
);
// 对话记录
BizAgentApplicationDialoguesRecordEntity
recordEntity
=
new
BizAgentApplicationDialoguesRecordEntity
();
recordEntity
.
setDialogsId
(
dialogsId
);
recordEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
recordEntity
.
setMemberId
(
userId
);
List
<
BizAgentApplicationDialoguesRecordEntity
>
recordEntities
=
bizAgentApplicationDialoguesRecordService
.
findByExample
(
recordEntity
,
null
);
if
(
CollectionUtils
.
isNotEmpty
(
recordEntities
))
{
for
(
BizAgentApplicationDialoguesRecordEntity
entity
:
recordEntities
)
{
Message
message
=
new
Message
();
message
.
setContent
(
entity
.
getContent
());
message
.
setRole
(
entity
.
getRole
());
messages
.
add
(
message
);
}
}
//判断最后是否为User,若是则删除。
if
(
CollectionUtils
.
isNotEmpty
(
messages
))
{
if
(
LLMRoleEnum
.
USER
.
getRole
().
equals
(
messages
.
get
(
messages
.
size
()
-
1
).
getRole
()))
{
Long
recordId
=
recordEntities
.
get
(
recordEntities
.
size
()
-
1
).
getId
();
bizAgentApplicationDialoguesRecordService
.
deletedById
(
recordId
);
messages
.
remove
(
messages
.
size
()
-
1
);
}
}
// 用户输入
Message
message
=
new
Message
();
message
.
setContent
(
input
);
message
.
setRole
(
LLMRoleEnum
.
USER
.
getRole
());
messages
.
add
(
message
);
logger
.
info
(
"--------- Build Messages dialogsId:{},messages:{}--------------"
,
dialogsId
,
messages
);
return
messages
;
}
}
src/main/java/cn/com/poc/meeting/analysis/FeaturedQuestionAnalyzer.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
analysis
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity
;
import
cn.com.poc.common.segmentation.SegmentationBuilder
;
import
cn.com.poc.common.segmentation.contents.SegmentationEnum
;
import
cn.com.poc.common.segmentation.domain.SegmentationConfig
;
import
cn.com.poc.common.segmentation.domain.SegmentationResult
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.common.utils.StringUtils
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
/**
* 会议助手-推荐问生成处理器
*/
public
class
FeaturedQuestionAnalyzer
extends
MeetingContentAnalysisAbstract
<
List
<
String
>>
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
FeaturedQuestionAnalyzer
.
class
);
private
final
String
FIRST_GENERATE_GC_CONFIG_CODE
=
"MEETING_FEATURED_QUESTION_FIRST"
;
private
final
String
MULTI_GENERATE_GC_CONFIG_CODE
=
"MEETING_FEATURED_QUESTION_MULTI"
;
@Override
public
List
<
String
>
run
(
String
content
)
{
BizAgentApplicationGcConfigEntity
firstGcConfigEntity
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
FIRST_GENERATE_GC_CONFIG_CODE
);
BizAgentApplicationGcConfigEntity
multiGcConfigEntity
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
MULTI_GENERATE_GC_CONFIG_CODE
);
if
(
firstGcConfigEntity
==
null
||
multiGcConfigEntity
==
null
)
{
throw
new
BusinessException
(
"无法找到生成推荐问配置"
);
}
// 配置prompt参数
String
firstPrompt
=
firstGcConfigEntity
.
getConfigSystem
();
String
firstModel
=
firstGcConfigEntity
.
getLargeModel
();
String
multiPrompt
=
multiGcConfigEntity
.
getConfigSystem
();
String
multiModel
=
multiGcConfigEntity
.
getLargeModel
();
// 内容分片
SegmentationConfig
segmentationConfig
=
new
SegmentationConfig
();
segmentationConfig
.
setPunctuations
(
new
ArrayList
<>());
segmentationConfig
.
setChunkSize
(
25000
);
segmentationConfig
.
setScrapSize
(
25000
);
segmentationConfig
.
setRepetitionRate
(
5
);
segmentationConfig
.
setRelationInfo
(
new
ArrayList
<>());
List
<
SegmentationResult
>
segmentationResultList
=
new
SegmentationBuilder
()
.
segmentationType
(
SegmentationEnum
.
NUMBER_Of_WORDS
.
name
())
.
content
(
content
)
.
build
().
scrap
(
segmentationConfig
);
// 生成推荐问
String
generateContent
=
""
;
try
{
for
(
int
i
=
0
;
i
<
segmentationResultList
.
size
();
i
++)
{
if
(
i
==
0
)
{
generateContent
=
firstGenerate
(
segmentationResultList
.
get
(
i
).
getChunkContent
(),
firstPrompt
,
firstModel
);
}
else
{
generateContent
=
multiGenerate
(
segmentationResultList
.
get
(
i
).
getChunkContent
(),
generateContent
,
multiPrompt
,
multiModel
);
}
double
progress
=
((
double
)
(
i
+
1
)
/
segmentationResultList
.
size
())
*
100
D
;
logger
.
info
(
"-------------推荐问生成进度 {} %--------------"
,
progress
);
}
}
catch
(
Exception
e
)
{
logger
.
error
(
"推荐问生成失败"
,
e
);
return
Collections
.
emptyList
();
}
if
(
StringUtils
.
isBlank
(
generateContent
))
{
return
Collections
.
emptyList
();
}
// 转换格式 json to list
int
start
=
generateContent
.
lastIndexOf
(
"["
);
int
end
=
generateContent
.
lastIndexOf
(
"]"
);
return
JsonUtils
.
deSerialize
(
generateContent
.
substring
(
start
,
end
+
1
),
new
TypeReference
<
List
<
String
>>()
{
}.
getType
());
}
private
String
firstGenerate
(
String
content
,
String
prompt
,
String
model
)
{
LargeModelResponse
largeResponse
=
new
LargeModelResponse
();
largeResponse
.
setModel
(
model
);
Message
[]
messages
=
new
Message
[
1
];
Message
message1
=
new
Message
();
message1
.
setContent
(
prompt
.
replace
(
"{content}"
,
content
));
message1
.
setRole
(
"user"
);
messages
[
0
]
=
message1
;
largeResponse
.
setMessages
(
messages
);
largeResponse
.
setStream
(
false
);
largeResponse
.
setUser
(
"MEETING_FEATURED_QUESTION"
);
LargeModelDemandResult
chatResult
=
llmService
.
chat
(
largeResponse
);
return
chatResult
.
getMessage
();
}
private
String
multiGenerate
(
String
content
,
String
summaries
,
String
prompt
,
String
model
)
{
LargeModelResponse
largeResponse
=
new
LargeModelResponse
();
largeResponse
.
setModel
(
model
);
Message
[]
messages
=
new
Message
[
1
];
Message
message1
=
new
Message
();
message1
.
setContent
(
prompt
.
replace
(
"{content}"
,
content
).
replace
(
"{summaries}"
,
summaries
));
message1
.
setRole
(
"user"
);
messages
[
0
]
=
message1
;
largeResponse
.
setMessages
(
messages
);
largeResponse
.
setStream
(
false
);
largeResponse
.
setUser
(
"MEETING_FEATURED_QUESTION"
);
LargeModelDemandResult
chatResult
=
llmService
.
chat
(
largeResponse
);
return
chatResult
.
getMessage
();
}
}
src/main/java/cn/com/poc/meeting/analysis/KeyWordAnalyzer.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
analysis
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity
;
import
cn.com.poc.common.segmentation.SegmentationBuilder
;
import
cn.com.poc.common.segmentation.contents.SegmentationEnum
;
import
cn.com.poc.common.segmentation.domain.SegmentationConfig
;
import
cn.com.poc.common.segmentation.domain.SegmentationResult
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.common.utils.StringUtils
;
import
cn.com.poc.meeting.cache.KeyWordCounter
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
/**
* 会议助手-提取关键词执行器
*/
public
class
KeyWordAnalyzer
extends
MeetingContentAnalysisAbstract
<
List
<
String
>>
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
KeyWordAnalyzer
.
class
);
private
final
String
FIRST_GENERATE_GC_CONFIG_CODE
=
"MEETING_KEYWORD_FIRST"
;
private
final
String
MULTI_GENERATE_GC_CONFIG_CODE
=
"MEETING_KEYWORD_MULTI"
;
@Override
public
List
<
String
>
run
(
String
content
)
{
BizAgentApplicationGcConfigEntity
firstGcConfigEntity
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
FIRST_GENERATE_GC_CONFIG_CODE
);
BizAgentApplicationGcConfigEntity
multiGcConfigEntity
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
MULTI_GENERATE_GC_CONFIG_CODE
);
if
(
firstGcConfigEntity
==
null
||
multiGcConfigEntity
==
null
)
{
throw
new
BusinessException
(
"无法找到提取关键字配置"
);
}
// 配置prompt参数
String
firstPrompt
=
firstGcConfigEntity
.
getConfigSystem
();
String
firstModel
=
firstGcConfigEntity
.
getLargeModel
();
String
multiPrompt
=
multiGcConfigEntity
.
getConfigSystem
();
String
multiModel
=
multiGcConfigEntity
.
getLargeModel
();
// 内容分片
SegmentationConfig
segmentationConfig
=
new
SegmentationConfig
();
segmentationConfig
.
setPunctuations
(
new
ArrayList
<>());
segmentationConfig
.
setChunkSize
(
25000
);
segmentationConfig
.
setScrapSize
(
25000
);
segmentationConfig
.
setRepetitionRate
(
5
);
segmentationConfig
.
setRelationInfo
(
new
ArrayList
<>());
List
<
SegmentationResult
>
segmentationResultList
=
new
SegmentationBuilder
()
.
segmentationType
(
SegmentationEnum
.
NUMBER_Of_WORDS
.
name
())
.
content
(
content
)
.
build
().
scrap
(
segmentationConfig
);
// 提取关键字
String
generateContent
=
""
;
try
{
for
(
int
i
=
0
;
i
<
segmentationResultList
.
size
();
i
++)
{
if
(
i
==
0
)
{
generateContent
=
firstGenerate
(
segmentationResultList
.
get
(
i
).
getChunkContent
(),
firstPrompt
,
firstModel
);
}
else
{
generateContent
=
multiGenerate
(
segmentationResultList
.
get
(
i
).
getChunkContent
(),
generateContent
,
multiPrompt
,
multiModel
);
}
double
progress
=
((
double
)
(
i
+
1
)
/
segmentationResultList
.
size
())
*
100
D
;
logger
.
info
(
"-------------关键词提取进度 {} %--------------"
,
progress
);
}
}
catch
(
Exception
e
)
{
logger
.
error
(
"关键词提取失败"
,
e
);
return
Collections
.
emptyList
();
}
if
(
StringUtils
.
isBlank
(
generateContent
))
{
return
Collections
.
emptyList
();
}
// 转换格式 json to list
int
start
=
generateContent
.
lastIndexOf
(
"["
);
int
end
=
generateContent
.
lastIndexOf
(
"]"
);
List
<
String
>
res
=
JsonUtils
.
deSerialize
(
generateContent
.
substring
(
start
,
end
+
1
),
new
TypeReference
<
List
<
String
>>()
{
}.
getType
());
return
res
;
}
private
String
firstGenerate
(
String
content
,
String
prompt
,
String
model
)
{
LargeModelResponse
largeResponse
=
new
LargeModelResponse
();
largeResponse
.
setModel
(
model
);
Message
[]
messages
=
new
Message
[
1
];
Message
message1
=
new
Message
();
message1
.
setContent
(
prompt
.
replace
(
"{content}"
,
content
));
message1
.
setRole
(
"user"
);
messages
[
0
]
=
message1
;
largeResponse
.
setMessages
(
messages
);
largeResponse
.
setStream
(
false
);
largeResponse
.
setUser
(
"MEETING_KEY_WORD"
);
LargeModelDemandResult
chatResult
=
llmService
.
chat
(
largeResponse
);
return
chatResult
.
getMessage
();
}
private
String
multiGenerate
(
String
content
,
String
summaries
,
String
prompt
,
String
model
)
{
LargeModelResponse
largeResponse
=
new
LargeModelResponse
();
largeResponse
.
setModel
(
model
);
Message
[]
messages
=
new
Message
[
1
];
Message
message1
=
new
Message
();
message1
.
setContent
(
prompt
.
replace
(
"{content}"
,
content
).
replace
(
"{summaries}"
,
summaries
));
message1
.
setRole
(
"user"
);
messages
[
0
]
=
message1
;
largeResponse
.
setMessages
(
messages
);
largeResponse
.
setStream
(
false
);
largeResponse
.
setUser
(
"MEETING_KEY_WORD"
);
LargeModelDemandResult
chatResult
=
llmService
.
chat
(
largeResponse
);
return
chatResult
.
getMessage
();
}
}
src/main/java/cn/com/poc/meeting/analysis/MeetingContentAnalysisAbstract.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
analysis
;
import
cn.com.poc.agent_application.service.BizAgentApplicationGcConfigService
;
import
cn.com.poc.common.utils.SpringUtils
;
import
cn.com.poc.thirdparty.service.LLMService
;
/**
* 会议内容分析处理器抽象类
*/
public
abstract
class
MeetingContentAnalysisAbstract
<
T
>
{
protected
LLMService
llmService
;
protected
BizAgentApplicationGcConfigService
bizAgentApplicationGcConfigService
;
public
MeetingContentAnalysisAbstract
()
{
llmService
=
SpringUtils
.
getBean
(
LLMService
.
class
);
bizAgentApplicationGcConfigService
=
SpringUtils
.
getBean
(
BizAgentApplicationGcConfigService
.
class
);
}
public
abstract
T
run
(
String
content
);
}
src/main/java/cn/com/poc/meeting/analysis/SummaryAnalyzer.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
analysis
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity
;
import
cn.com.poc.common.segmentation.SegmentationBuilder
;
import
cn.com.poc.common.segmentation.contents.SegmentationEnum
;
import
cn.com.poc.common.segmentation.domain.SegmentationConfig
;
import
cn.com.poc.common.segmentation.domain.SegmentationResult
;
import
cn.com.poc.common.utils.StringUtils
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
SummaryAnalyzer
extends
MeetingContentAnalysisAbstract
<
String
>
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
SummaryAnalyzer
.
class
);
private
final
String
FIRST_GENERATE_GC_CONFIG_CODE
=
"MEETING_SUMMARY_FIRST"
;
private
final
String
MULTI_GENERATE_GC_CONFIG_CODE
=
"MEETING_SUMMARY_MULTI"
;
@Override
public
String
run
(
String
content
)
{
BizAgentApplicationGcConfigEntity
firstGcConfigEntity
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
FIRST_GENERATE_GC_CONFIG_CODE
);
BizAgentApplicationGcConfigEntity
multiGcConfigEntity
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
MULTI_GENERATE_GC_CONFIG_CODE
);
if
(
firstGcConfigEntity
==
null
||
multiGcConfigEntity
==
null
)
{
throw
new
BusinessException
(
"无法找到生成会议摘要配置"
);
}
// 配置prompt参数
String
firstPrompt
=
firstGcConfigEntity
.
getConfigSystem
();
String
firstModel
=
firstGcConfigEntity
.
getLargeModel
();
String
multiPrompt
=
multiGcConfigEntity
.
getConfigSystem
();
String
multiModel
=
multiGcConfigEntity
.
getLargeModel
();
// 内容分片
SegmentationConfig
segmentationConfig
=
new
SegmentationConfig
();
segmentationConfig
.
setPunctuations
(
new
ArrayList
<>());
segmentationConfig
.
setChunkSize
(
25000
);
segmentationConfig
.
setScrapSize
(
25000
);
segmentationConfig
.
setRepetitionRate
(
5
);
segmentationConfig
.
setRelationInfo
(
new
ArrayList
<>());
List
<
SegmentationResult
>
segmentationResultList
=
new
SegmentationBuilder
()
.
segmentationType
(
SegmentationEnum
.
NUMBER_Of_WORDS
.
name
())
.
content
(
content
)
.
build
().
scrap
(
segmentationConfig
);
// 会议摘要生成
String
generateContent
=
""
;
try
{
for
(
int
i
=
0
;
i
<
segmentationResultList
.
size
();
i
++)
{
if
(
i
==
0
)
{
generateContent
=
firstGenerate
(
segmentationResultList
.
get
(
i
).
getChunkContent
(),
firstPrompt
,
firstModel
);
}
else
{
generateContent
=
multiGenerate
(
segmentationResultList
.
get
(
i
).
getChunkContent
(),
generateContent
,
multiPrompt
,
multiModel
);
}
double
progress
=
((
double
)
(
i
+
1
)
/
segmentationResultList
.
size
())
*
100
D
;
logger
.
info
(
"-------------会议摘要生成进度 {} %--------------"
,
progress
);
}
}
catch
(
Exception
e
)
{
logger
.
error
(
"会议摘要生成失败"
,
e
);
return
StringUtils
.
EMPTY
;
}
return
generateContent
;
}
private
String
firstGenerate
(
String
content
,
String
prompt
,
String
model
)
{
LargeModelResponse
largeResponse
=
new
LargeModelResponse
();
largeResponse
.
setModel
(
model
);
Message
[]
messages
=
new
Message
[
1
];
Message
message1
=
new
Message
();
message1
.
setContent
(
prompt
.
replace
(
"{content}"
,
content
));
message1
.
setRole
(
"user"
);
messages
[
0
]
=
message1
;
largeResponse
.
setMessages
(
messages
);
largeResponse
.
setStream
(
false
);
largeResponse
.
setUser
(
"MEETING_SUMMARY"
);
LargeModelDemandResult
chatResult
=
llmService
.
chat
(
largeResponse
);
return
chatResult
.
getMessage
();
}
private
String
multiGenerate
(
String
content
,
String
summaries
,
String
prompt
,
String
model
)
{
LargeModelResponse
largeResponse
=
new
LargeModelResponse
();
largeResponse
.
setModel
(
model
);
Message
[]
messages
=
new
Message
[
1
];
Message
message1
=
new
Message
();
message1
.
setContent
(
prompt
.
replace
(
"{content}"
,
content
).
replace
(
"{summaries}"
,
summaries
));
message1
.
setRole
(
"user"
);
messages
[
0
]
=
message1
;
largeResponse
.
setMessages
(
messages
);
largeResponse
.
setStream
(
false
);
largeResponse
.
setUser
(
"MEETING_SUMMARY"
);
LargeModelDemandResult
chatResult
=
llmService
.
chat
(
largeResponse
);
return
chatResult
.
getMessage
();
}
}
src/main/java/cn/com/poc/meeting/analysis/ThemeAnalyzer.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
analysis
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
public
class
ThemeAnalyzer
extends
MeetingContentAnalysisAbstract
<
String
>
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ThemeAnalyzer
.
class
);
private
final
String
GC_CONFIG_CODE
=
"MEETING_THEME"
;
@Override
public
String
run
(
String
content
)
{
BizAgentApplicationGcConfigEntity
firstGcConfigEntity
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
GC_CONFIG_CODE
);
if
(
firstGcConfigEntity
==
null
)
{
throw
new
BusinessException
(
"无法找到生成会议主题配置"
);
}
// 配置prompt参数
String
prompt
=
firstGcConfigEntity
.
getConfigSystem
();
String
model
=
firstGcConfigEntity
.
getLargeModel
();
// 会议主题生成
return
generateTheme
(
content
,
prompt
,
model
);
}
private
String
generateTheme
(
String
content
,
String
prompt
,
String
model
)
{
LargeModelResponse
largeResponse
=
new
LargeModelResponse
();
largeResponse
.
setModel
(
model
);
Message
[]
messages
=
new
Message
[
1
];
Message
message1
=
new
Message
();
message1
.
setContent
(
prompt
.
replace
(
"{content}"
,
content
));
message1
.
setRole
(
"user"
);
messages
[
0
]
=
message1
;
largeResponse
.
setMessages
(
messages
);
largeResponse
.
setStream
(
false
);
largeResponse
.
setUser
(
"MEETING_THEME"
);
LargeModelDemandResult
chatResult
=
llmService
.
chat
(
largeResponse
);
return
chatResult
.
getMessage
();
}
}
src/main/java/cn/com/poc/meeting/cache/KeyWordCounter.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
cache
;
import
cn.com.poc.common.service.RedisService
;
import
cn.com.poc.common.utils.SpringUtils
;
import
org.jetbrains.annotations.NotNull
;
import
java.util.*
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
/**
* 关键词计数器
*/
public
class
KeyWordCounter
{
private
final
static
String
REDIS_PREFIX
=
"MEETING_KEY_WORD_COUNT:"
;
/**
* 关键词计数统计
*
* @param content 文本
* @param keywords 关键词
* @return 关键词:数量
*/
public
static
Map
<
String
,
Integer
>
keywordCount
(
String
content
,
List
<
String
>
keywords
)
{
Map
<
String
,
Integer
>
resMap
=
new
LinkedHashMap
<>();
for
(
String
keyword
:
keywords
)
{
Pattern
compile
=
Pattern
.
compile
(
keyword
);
Matcher
matcher
=
compile
.
matcher
(
content
);
int
count
=
0
;
while
(
matcher
.
find
())
{
count
++;
}
resMap
.
put
(
keyword
,
count
);
}
Map
<
String
,
Integer
>
sortedMap
=
getSortedMap
(
resMap
);
return
sortedMap
;
}
/**
* 缓存关键词计数
*/
public
static
void
cacheKeyWordCount
(
String
key
,
Map
<
String
,
Integer
>
map
)
{
String
redisKey
=
REDIS_PREFIX
+
key
;
RedisService
redisService
=
SpringUtils
.
getBean
(
RedisService
.
class
);
Map
<
String
,
Object
>
saveMap
=
new
LinkedHashMap
<>();
for
(
String
k
:
map
.
keySet
())
{
Integer
count
=
map
.
get
(
k
);
saveMap
.
put
(
k
,
count
);
}
redisService
.
hmset
(
redisKey
,
saveMap
);
}
/**
* 获取关键词计数缓存
*/
public
static
Map
<
String
,
Integer
>
getKeywordCountCache
(
String
key
)
{
Map
<
String
,
Integer
>
resMap
=
new
LinkedHashMap
<>();
String
redisKey
=
REDIS_PREFIX
+
key
;
RedisService
redisService
=
SpringUtils
.
getBean
(
RedisService
.
class
);
if
(!
redisService
.
hasKey
(
redisKey
))
{
return
resMap
;
}
Map
<
Object
,
Object
>
map
=
redisService
.
hmget
(
redisKey
);
for
(
Object
k
:
map
.
keySet
())
{
Integer
count
=
(
Integer
)
map
.
get
(
k
);
resMap
.
put
(
String
.
valueOf
(
k
),
count
);
}
return
getSortedMap
(
resMap
);
}
private
static
@NotNull
Map
<
String
,
Integer
>
getSortedMap
(
Map
<
String
,
Integer
>
resMap
)
{
// 将Map转换为List
List
<
Map
.
Entry
<
String
,
Integer
>>
list
=
new
ArrayList
<>(
resMap
.
entrySet
());
// 使用自定义Comparator按value排序
list
.
sort
((
o1
,
o2
)
->
{
return
o2
.
getValue
().
compareTo
(
o1
.
getValue
());
// 降序
});
// 将排序后的结果存入LinkedHashMap (可选,如果需要保持插入顺序)
Map
<
String
,
Integer
>
sortedMap
=
new
LinkedHashMap
<>();
for
(
Map
.
Entry
<
String
,
Integer
>
entry
:
list
)
{
sortedMap
.
put
(
entry
.
getKey
(),
entry
.
getValue
());
}
return
sortedMap
;
}
}
src/main/java/cn/com/poc/meeting/constants/MeetingAssistantConstantEnum.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
constants
;
/**
* 会议助手-状态枚举类
*/
public
enum
MeetingAssistantConstantEnum
{
GENERATE
(
"generate"
),
COMPLETED
(
"completed"
),
FAILED
(
"failed"
);
private
String
status
;
public
String
getStatus
()
{
return
status
;
}
public
void
setStatus
(
String
status
)
{
this
.
status
=
status
;
}
MeetingAssistantConstantEnum
(
String
status
)
{
this
.
status
=
status
;
}
}
src/main/java/cn/com/poc/meeting/convert/BizMeetingAssistantAnalysisTaskConvert.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
convert
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.meeting.cache.KeyWordCounter
;
import
cn.com.poc.meeting.constants.MeetingAssistantConstantEnum
;
import
cn.com.poc.meeting.entity.AnalysisTaskDetailEntity
;
import
cn.com.poc.meeting.model.BizMeetingAssistantAnalysisTaskModel
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity
;
import
cn.com.poc.meeting.dto.BizMeetingAssistantAnalysisTaskDto
;
import
com.alibaba.fastjson.TypeReference
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
public
class
BizMeetingAssistantAnalysisTaskConvert
{
public
static
BizMeetingAssistantAnalysisTaskEntity
modelToEntity
(
BizMeetingAssistantAnalysisTaskModel
model
)
{
BizMeetingAssistantAnalysisTaskEntity
entity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
entity
.
setId
(
model
.
getId
());
entity
.
setMemberId
(
model
.
getMemberId
());
entity
.
setDiaguesId
(
model
.
getDiaguesId
());
entity
.
setAnalysisStatus
(
model
.
getAnalysisStatus
());
entity
.
setThemeContent
(
model
.
getThemeContent
());
entity
.
setThemeGenerateStatus
(
model
.
getThemeGenerateStatus
());
entity
.
setKeyWordContent
(
model
.
getKeyWordContent
());
entity
.
setKeyWordGenerateStatus
(
model
.
getKeyWordGenerateStatus
());
entity
.
setMeetingSummaryContent
(
model
.
getMeetingSummaryContent
());
entity
.
setMeetingSummaryGenerateStatus
(
model
.
getMeetingSummaryGenerateStatus
());
entity
.
setFeaturedQuestionsGenerateStatus
(
model
.
getFeaturedQuestionsGenerateStatus
());
entity
.
setFeaturedQuestions
(
model
.
getFeaturedQuestions
());
entity
.
setIsDeleted
(
model
.
getIsDeleted
());
entity
.
setCreator
(
model
.
getCreator
());
entity
.
setCreatedTime
(
model
.
getCreatedTime
());
entity
.
setModifier
(
model
.
getModifier
());
entity
.
setModifiedTime
(
model
.
getModifiedTime
());
entity
.
setSysVersion
(
model
.
getSysVersion
());
return
entity
;
}
public
static
BizMeetingAssistantAnalysisTaskModel
entityToModel
(
BizMeetingAssistantAnalysisTaskEntity
entity
)
{
BizMeetingAssistantAnalysisTaskModel
model
=
new
BizMeetingAssistantAnalysisTaskModel
();
model
.
setId
(
entity
.
getId
());
model
.
setMemberId
(
entity
.
getMemberId
());
model
.
setDiaguesId
(
entity
.
getDiaguesId
());
model
.
setAnalysisStatus
(
entity
.
getAnalysisStatus
());
model
.
setThemeContent
(
entity
.
getThemeContent
());
model
.
setThemeGenerateStatus
(
entity
.
getThemeGenerateStatus
());
model
.
setKeyWordContent
(
entity
.
getKeyWordContent
());
model
.
setKeyWordGenerateStatus
(
entity
.
getKeyWordGenerateStatus
());
model
.
setMeetingSummaryContent
(
entity
.
getMeetingSummaryContent
());
model
.
setMeetingSummaryGenerateStatus
(
entity
.
getMeetingSummaryGenerateStatus
());
model
.
setFeaturedQuestionsGenerateStatus
(
entity
.
getFeaturedQuestionsGenerateStatus
());
model
.
setFeaturedQuestions
(
entity
.
getFeaturedQuestions
());
model
.
setIsDeleted
(
entity
.
getIsDeleted
());
model
.
setCreator
(
entity
.
getCreator
());
model
.
setCreatedTime
(
entity
.
getCreatedTime
());
model
.
setModifier
(
entity
.
getModifier
());
model
.
setModifiedTime
(
entity
.
getModifiedTime
());
model
.
setSysVersion
(
entity
.
getSysVersion
());
return
model
;
}
public
static
BizMeetingAssistantAnalysisTaskDto
entityToDto
(
BizMeetingAssistantAnalysisTaskEntity
entity
)
{
BizMeetingAssistantAnalysisTaskDto
dto
=
new
BizMeetingAssistantAnalysisTaskDto
();
dto
.
setId
(
entity
.
getId
());
dto
.
setMemberId
(
entity
.
getMemberId
());
dto
.
setDiaguesId
(
entity
.
getDiaguesId
());
dto
.
setAnalysisStatus
(
entity
.
getAnalysisStatus
());
dto
.
setThemeContent
(
entity
.
getThemeContent
());
dto
.
setThemeGenerateStatus
(
entity
.
getThemeGenerateStatus
());
dto
.
setKeyWordContent
(
entity
.
getKeyWordContent
());
dto
.
setKeyWordGenerateStatus
(
entity
.
getKeyWordGenerateStatus
());
dto
.
setMeetingSummaryContent
(
entity
.
getMeetingSummaryContent
());
dto
.
setMeetingSummaryGenerateStatus
(
entity
.
getMeetingSummaryGenerateStatus
());
dto
.
setFeaturedQuestionsGenerateStatus
(
entity
.
getFeaturedQuestionsGenerateStatus
());
dto
.
setFeaturedQuestions
(
entity
.
getFeaturedQuestions
());
dto
.
setIsDeleted
(
entity
.
getIsDeleted
());
dto
.
setCreator
(
entity
.
getCreator
());
dto
.
setCreatedTime
(
entity
.
getCreatedTime
());
dto
.
setModifier
(
entity
.
getModifier
());
dto
.
setModifiedTime
(
entity
.
getModifiedTime
());
dto
.
setSysVersion
(
entity
.
getSysVersion
());
return
dto
;
}
public
static
BizMeetingAssistantAnalysisTaskEntity
dtoToEntity
(
BizMeetingAssistantAnalysisTaskDto
dto
)
{
BizMeetingAssistantAnalysisTaskEntity
entity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
entity
.
setId
(
dto
.
getId
());
entity
.
setMemberId
(
dto
.
getMemberId
());
entity
.
setDiaguesId
(
dto
.
getDiaguesId
());
entity
.
setAnalysisStatus
(
dto
.
getAnalysisStatus
());
entity
.
setThemeContent
(
dto
.
getThemeContent
());
entity
.
setThemeGenerateStatus
(
dto
.
getThemeGenerateStatus
());
entity
.
setKeyWordContent
(
dto
.
getKeyWordContent
());
entity
.
setKeyWordGenerateStatus
(
dto
.
getKeyWordGenerateStatus
());
entity
.
setMeetingSummaryContent
(
dto
.
getMeetingSummaryContent
());
entity
.
setMeetingSummaryGenerateStatus
(
dto
.
getMeetingSummaryGenerateStatus
());
entity
.
setFeaturedQuestionsGenerateStatus
(
dto
.
getFeaturedQuestionsGenerateStatus
());
entity
.
setFeaturedQuestions
(
dto
.
getFeaturedQuestions
());
entity
.
setIsDeleted
(
dto
.
getIsDeleted
());
entity
.
setCreator
(
dto
.
getCreator
());
entity
.
setCreatedTime
(
dto
.
getCreatedTime
());
entity
.
setModifier
(
dto
.
getModifier
());
entity
.
setModifiedTime
(
dto
.
getModifiedTime
());
entity
.
setSysVersion
(
dto
.
getSysVersion
());
return
entity
;
}
public
static
AnalysisTaskDetailEntity
bizEntityToDetailEntity
(
BizMeetingAssistantAnalysisTaskEntity
entity
)
{
AnalysisTaskDetailEntity
analysisTaskDetailEntity
=
new
AnalysisTaskDetailEntity
();
analysisTaskDetailEntity
.
setAnalysisStatus
(
entity
.
getAnalysisStatus
());
analysisTaskDetailEntity
.
setThemeContent
(
entity
.
getThemeContent
());
analysisTaskDetailEntity
.
setThemeGenerateStatus
(
entity
.
getThemeGenerateStatus
());
analysisTaskDetailEntity
.
setKeyWordGenerateStatus
(
entity
.
getKeyWordGenerateStatus
());
//获取关键字计数
if
(
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
().
equals
(
entity
.
getKeyWordGenerateStatus
()))
{
Map
<
String
,
Integer
>
keywordCountMap
=
KeyWordCounter
.
getKeywordCountCache
(
entity
.
getDiaguesId
());
analysisTaskDetailEntity
.
setKeyWordCount
(
keywordCountMap
);
if
(
StringUtils
.
isNotBlank
(
entity
.
getKeyWordContent
()))
{
List
<
String
>
keyWords
=
new
ArrayList
<>(
keywordCountMap
.
keySet
());
analysisTaskDetailEntity
.
setKeyWordContent
(
keyWords
);
}
}
analysisTaskDetailEntity
.
setMeetingSummaryContent
(
entity
.
getMeetingSummaryContent
());
analysisTaskDetailEntity
.
setMeetingSummaryGenerateStatus
(
entity
.
getMeetingSummaryGenerateStatus
());
analysisTaskDetailEntity
.
setFeaturedQuestionsGenerateStatus
(
entity
.
getFeaturedQuestionsGenerateStatus
());
if
(
StringUtils
.
isNotBlank
(
entity
.
getFeaturedQuestions
()))
{
List
<
String
>
featuredQuestions
=
JsonUtils
.
deSerialize
(
entity
.
getFeaturedQuestions
(),
new
TypeReference
<
List
<
String
>>()
{
}.
getType
());
analysisTaskDetailEntity
.
setFeaturedQuestions
(
featuredQuestions
);
}
return
analysisTaskDetailEntity
;
}
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/convert/BizMeetingAssistantAsrTaskConvert.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
convert
;
import
cn.com.poc.meeting.dto.BizMeetingAssistantAsrTaskDto
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAsrTaskEntity
;
import
cn.com.poc.meeting.model.BizMeetingAssistantAsrTaskModel
;
public
class
BizMeetingAssistantAsrTaskConvert
{
public
static
BizMeetingAssistantAsrTaskEntity
modelToEntity
(
BizMeetingAssistantAsrTaskModel
model
){
BizMeetingAssistantAsrTaskEntity
entity
=
new
BizMeetingAssistantAsrTaskEntity
();
entity
.
setId
(
model
.
getId
());
entity
.
setMemberId
(
model
.
getMemberId
());
entity
.
setDiaguesId
(
model
.
getDiaguesId
());
entity
.
setSessionId
(
model
.
getSessionId
());
entity
.
setGenerateStatus
(
model
.
getGenerateStatus
());
entity
.
setMessage
(
model
.
getMessage
());
entity
.
setIsDeleted
(
model
.
getIsDeleted
());
entity
.
setCreator
(
model
.
getCreator
());
entity
.
setCreatedTime
(
model
.
getCreatedTime
());
entity
.
setModifier
(
model
.
getModifier
());
entity
.
setModifiedTime
(
model
.
getModifiedTime
());
entity
.
setSysVersion
(
model
.
getSysVersion
());
return
entity
;
}
public
static
BizMeetingAssistantAsrTaskModel
entityToModel
(
BizMeetingAssistantAsrTaskEntity
entity
){
BizMeetingAssistantAsrTaskModel
model
=
new
BizMeetingAssistantAsrTaskModel
();
model
.
setId
(
entity
.
getId
());
model
.
setMemberId
(
entity
.
getMemberId
());
model
.
setDiaguesId
(
entity
.
getDiaguesId
());
model
.
setSessionId
(
entity
.
getSessionId
());
model
.
setGenerateStatus
(
entity
.
getGenerateStatus
());
model
.
setMessage
(
entity
.
getMessage
());
model
.
setIsDeleted
(
entity
.
getIsDeleted
());
model
.
setCreator
(
entity
.
getCreator
());
model
.
setCreatedTime
(
entity
.
getCreatedTime
());
model
.
setModifier
(
entity
.
getModifier
());
model
.
setModifiedTime
(
entity
.
getModifiedTime
());
model
.
setSysVersion
(
entity
.
getSysVersion
());
return
model
;
}
public
static
BizMeetingAssistantAsrTaskDto
entityToDto
(
BizMeetingAssistantAsrTaskEntity
entity
){
BizMeetingAssistantAsrTaskDto
dto
=
new
BizMeetingAssistantAsrTaskDto
();
dto
.
setId
(
entity
.
getId
());
dto
.
setMemberId
(
entity
.
getMemberId
());
dto
.
setDiaguesId
(
entity
.
getDiaguesId
());
dto
.
setSessionId
(
entity
.
getSessionId
());
dto
.
setGenerateStatus
(
entity
.
getGenerateStatus
());
dto
.
setMessage
(
entity
.
getMessage
());
dto
.
setIsDeleted
(
entity
.
getIsDeleted
());
dto
.
setCreator
(
entity
.
getCreator
());
dto
.
setCreatedTime
(
entity
.
getCreatedTime
());
dto
.
setModifier
(
entity
.
getModifier
());
dto
.
setModifiedTime
(
entity
.
getModifiedTime
());
dto
.
setSysVersion
(
entity
.
getSysVersion
());
return
dto
;
}
public
static
BizMeetingAssistantAsrTaskEntity
dtoToEntity
(
BizMeetingAssistantAsrTaskDto
dto
){
BizMeetingAssistantAsrTaskEntity
entity
=
new
BizMeetingAssistantAsrTaskEntity
();
entity
.
setId
(
dto
.
getId
());
entity
.
setMemberId
(
dto
.
getMemberId
());
entity
.
setDiaguesId
(
dto
.
getDiaguesId
());
entity
.
setSessionId
(
dto
.
getSessionId
());
entity
.
setGenerateStatus
(
dto
.
getGenerateStatus
());
entity
.
setMessage
(
dto
.
getMessage
());
entity
.
setIsDeleted
(
dto
.
getIsDeleted
());
entity
.
setCreator
(
dto
.
getCreator
());
entity
.
setCreatedTime
(
dto
.
getCreatedTime
());
entity
.
setModifier
(
dto
.
getModifier
());
entity
.
setModifiedTime
(
dto
.
getModifiedTime
());
entity
.
setSysVersion
(
dto
.
getSysVersion
());
return
entity
;
}
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/dto/AiMeetingAssistantDto.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
dto
;
public
class
AiMeetingAssistantDto
{
/**
* 对话id
*/
private
String
dialoguesId
;
/**
* 文件地址
*/
private
String
fileUrl
;
/**
* 输入内容
*/
private
String
input
;
/**
* 知识库id
*/
private
Integer
[]
knowledgeIds
;
public
Integer
[]
getKnowledgeIds
()
{
return
knowledgeIds
;
}
public
void
setKnowledgeIds
(
Integer
[]
knowledgeIds
)
{
this
.
knowledgeIds
=
knowledgeIds
;
}
public
String
getDialoguesId
()
{
return
dialoguesId
;
}
public
void
setDialoguesId
(
String
dialoguesId
)
{
this
.
dialoguesId
=
dialoguesId
;
}
public
String
getFileUrl
()
{
return
fileUrl
;
}
public
void
setFileUrl
(
String
fileUrl
)
{
this
.
fileUrl
=
fileUrl
;
}
public
String
getInput
()
{
return
input
;
}
public
void
setInput
(
String
input
)
{
this
.
input
=
input
;
}
}
src/main/java/cn/com/poc/meeting/dto/AnalysisTaskDetailDto.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
dto
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.Translation
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
AnalysisTaskDetailDto
{
/**
* analysis_status
* 内容分析总状态 generate-生成中 completed-完成 failed-失败
*/
private
java
.
lang
.
String
analysisStatus
;
public
java
.
lang
.
String
getAnalysisStatus
()
{
return
this
.
analysisStatus
;
}
public
void
setAnalysisStatus
(
java
.
lang
.
String
analysisStatus
)
{
this
.
analysisStatus
=
analysisStatus
;
}
/**
* theme_content
* 会议主题
*/
private
java
.
lang
.
String
themeContent
;
public
java
.
lang
.
String
getThemeContent
()
{
return
this
.
themeContent
;
}
public
void
setThemeContent
(
java
.
lang
.
String
themeContent
)
{
this
.
themeContent
=
themeContent
;
}
/**
* theme_generate_status
* 会议主题生成状态
*/
private
java
.
lang
.
String
themeGenerateStatus
;
public
java
.
lang
.
String
getThemeGenerateStatus
()
{
return
this
.
themeGenerateStatus
;
}
public
void
setThemeGenerateStatus
(
java
.
lang
.
String
themeGenerateStatus
)
{
this
.
themeGenerateStatus
=
themeGenerateStatus
;
}
/**
* key_word_content
* 关键词
*/
private
List
<
String
>
keyWordContent
;
public
List
<
String
>
getKeyWordContent
()
{
return
keyWordContent
;
}
public
void
setKeyWordContent
(
List
<
String
>
keyWordContent
)
{
this
.
keyWordContent
=
keyWordContent
;
}
/**
* key_word_generate_status
* 关键词生成状态
*/
private
java
.
lang
.
String
keyWordGenerateStatus
;
public
java
.
lang
.
String
getKeyWordGenerateStatus
()
{
return
this
.
keyWordGenerateStatus
;
}
public
void
setKeyWordGenerateStatus
(
java
.
lang
.
String
keyWordGenerateStatus
)
{
this
.
keyWordGenerateStatus
=
keyWordGenerateStatus
;
}
/**
* 关键词计数
*/
private
Map
<
String
,
Integer
>
keyWordCount
;
public
Map
<
String
,
Integer
>
getKeyWordCount
()
{
return
keyWordCount
;
}
public
void
setKeyWordCount
(
Map
<
String
,
Integer
>
keyWordCount
)
{
this
.
keyWordCount
=
keyWordCount
;
}
/**
* meeting_summary_content
* 会议摘要
*/
private
java
.
lang
.
String
meetingSummaryContent
;
public
java
.
lang
.
String
getMeetingSummaryContent
()
{
return
this
.
meetingSummaryContent
;
}
public
void
setMeetingSummaryContent
(
java
.
lang
.
String
meetingSummaryContent
)
{
this
.
meetingSummaryContent
=
meetingSummaryContent
;
}
/**
* meeting_summary_generate_status
* 会议摘要生成状态
*/
private
java
.
lang
.
String
meetingSummaryGenerateStatus
;
public
java
.
lang
.
String
getMeetingSummaryGenerateStatus
()
{
return
this
.
meetingSummaryGenerateStatus
;
}
public
void
setMeetingSummaryGenerateStatus
(
java
.
lang
.
String
meetingSummaryGenerateStatus
)
{
this
.
meetingSummaryGenerateStatus
=
meetingSummaryGenerateStatus
;
}
/**
* featured_questions_generate_status
* 推荐问生成状态
*/
private
java
.
lang
.
String
featuredQuestionsGenerateStatus
;
public
java
.
lang
.
String
getFeaturedQuestionsGenerateStatus
()
{
return
this
.
featuredQuestionsGenerateStatus
;
}
public
void
setFeaturedQuestionsGenerateStatus
(
java
.
lang
.
String
featuredQuestionsGenerateStatus
)
{
this
.
featuredQuestionsGenerateStatus
=
featuredQuestionsGenerateStatus
;
}
/**
* featured_questions
* 推荐问
*/
private
List
<
String
>
featuredQuestions
;
public
List
<
String
>
getFeaturedQuestions
()
{
return
featuredQuestions
;
}
public
void
setFeaturedQuestions
(
List
<
String
>
featuredQuestions
)
{
this
.
featuredQuestions
=
featuredQuestions
;
}
/**
* spk_sets
* 说话人列表
*/
private
Set
<
Long
>
spkSets
;
public
Set
<
Long
>
getSpkSets
()
{
return
spkSets
;
}
public
void
setSpkSets
(
Set
<
Long
>
spkSets
)
{
this
.
spkSets
=
spkSets
;
}
/**
* 语音识别内容
* translation
*/
private
List
<
Translation
>
translations
;
public
List
<
Translation
>
getTranslations
()
{
return
translations
;
}
public
void
setTranslations
(
List
<
Translation
>
translations
)
{
this
.
translations
=
translations
;
}
}
src/main/java/cn/com/poc/meeting/dto/BizMeetingAssistantAnalysisTaskDto.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
dto
;
public
class
BizMeetingAssistantAnalysisTaskDto
{
private
static
final
long
serialVersionUID
=
1L
;
/** id
*
*/
private
java
.
lang
.
Long
id
;
public
java
.
lang
.
Long
getId
(){
return
this
.
id
;
}
public
void
setId
(
java
.
lang
.
Long
id
){
this
.
id
=
id
;
}
/** member_id
*用户id
*/
private
java
.
lang
.
Long
memberId
;
public
java
.
lang
.
Long
getMemberId
(){
return
this
.
memberId
;
}
public
void
setMemberId
(
java
.
lang
.
Long
memberId
){
this
.
memberId
=
memberId
;
}
/** diagues_id
*会话id
*/
private
java
.
lang
.
String
diaguesId
;
public
java
.
lang
.
String
getDiaguesId
(){
return
this
.
diaguesId
;
}
public
void
setDiaguesId
(
java
.
lang
.
String
diaguesId
){
this
.
diaguesId
=
diaguesId
;
}
/** analysis_status
*内容分析总状态 generate-生成中 completed-完成 failed-失败
*/
private
java
.
lang
.
String
analysisStatus
;
public
java
.
lang
.
String
getAnalysisStatus
(){
return
this
.
analysisStatus
;
}
public
void
setAnalysisStatus
(
java
.
lang
.
String
analysisStatus
){
this
.
analysisStatus
=
analysisStatus
;
}
/** theme_content
*会议主题
*/
private
java
.
lang
.
String
themeContent
;
public
java
.
lang
.
String
getThemeContent
(){
return
this
.
themeContent
;
}
public
void
setThemeContent
(
java
.
lang
.
String
themeContent
){
this
.
themeContent
=
themeContent
;
}
/** theme_generate_status
*会议主题生成状态
*/
private
java
.
lang
.
String
themeGenerateStatus
;
public
java
.
lang
.
String
getThemeGenerateStatus
(){
return
this
.
themeGenerateStatus
;
}
public
void
setThemeGenerateStatus
(
java
.
lang
.
String
themeGenerateStatus
){
this
.
themeGenerateStatus
=
themeGenerateStatus
;
}
/** key_word_content
*关键词
*/
private
java
.
lang
.
String
keyWordContent
;
public
java
.
lang
.
String
getKeyWordContent
(){
return
this
.
keyWordContent
;
}
public
void
setKeyWordContent
(
java
.
lang
.
String
keyWordContent
){
this
.
keyWordContent
=
keyWordContent
;
}
/** key_word_generate_status
*关键词生成状态
*/
private
java
.
lang
.
String
keyWordGenerateStatus
;
public
java
.
lang
.
String
getKeyWordGenerateStatus
(){
return
this
.
keyWordGenerateStatus
;
}
public
void
setKeyWordGenerateStatus
(
java
.
lang
.
String
keyWordGenerateStatus
){
this
.
keyWordGenerateStatus
=
keyWordGenerateStatus
;
}
/** meeting_summary_content
*会议摘要
*/
private
java
.
lang
.
String
meetingSummaryContent
;
public
java
.
lang
.
String
getMeetingSummaryContent
(){
return
this
.
meetingSummaryContent
;
}
public
void
setMeetingSummaryContent
(
java
.
lang
.
String
meetingSummaryContent
){
this
.
meetingSummaryContent
=
meetingSummaryContent
;
}
/** meeting_summary_generate_status
*会议摘要生成状态
*/
private
java
.
lang
.
String
meetingSummaryGenerateStatus
;
public
java
.
lang
.
String
getMeetingSummaryGenerateStatus
(){
return
this
.
meetingSummaryGenerateStatus
;
}
public
void
setMeetingSummaryGenerateStatus
(
java
.
lang
.
String
meetingSummaryGenerateStatus
){
this
.
meetingSummaryGenerateStatus
=
meetingSummaryGenerateStatus
;
}
/** featured_questions_generate_status
*推荐问生成状态
*/
private
java
.
lang
.
String
featuredQuestionsGenerateStatus
;
public
java
.
lang
.
String
getFeaturedQuestionsGenerateStatus
(){
return
this
.
featuredQuestionsGenerateStatus
;
}
public
void
setFeaturedQuestionsGenerateStatus
(
java
.
lang
.
String
featuredQuestionsGenerateStatus
){
this
.
featuredQuestionsGenerateStatus
=
featuredQuestionsGenerateStatus
;
}
/** featured_questions
*推荐问
*/
private
java
.
lang
.
String
featuredQuestions
;
public
java
.
lang
.
String
getFeaturedQuestions
(){
return
this
.
featuredQuestions
;
}
public
void
setFeaturedQuestions
(
java
.
lang
.
String
featuredQuestions
){
this
.
featuredQuestions
=
featuredQuestions
;
}
/** is_deleted
*是否删除 Y 是 N 否
*/
private
java
.
lang
.
String
isDeleted
;
public
java
.
lang
.
String
getIsDeleted
(){
return
this
.
isDeleted
;
}
public
void
setIsDeleted
(
java
.
lang
.
String
isDeleted
){
this
.
isDeleted
=
isDeleted
;
}
/** CREATOR
*创建人
*/
private
java
.
lang
.
String
creator
;
public
java
.
lang
.
String
getCreator
(){
return
this
.
creator
;
}
public
void
setCreator
(
java
.
lang
.
String
creator
){
this
.
creator
=
creator
;
}
/** CREATED_TIME
*创建时间
*/
private
java
.
util
.
Date
createdTime
;
public
java
.
util
.
Date
getCreatedTime
(){
return
this
.
createdTime
;
}
public
void
setCreatedTime
(
java
.
util
.
Date
createdTime
){
this
.
createdTime
=
createdTime
;
}
/** MODIFIER
*修改人
*/
private
java
.
lang
.
String
modifier
;
public
java
.
lang
.
String
getModifier
(){
return
this
.
modifier
;
}
public
void
setModifier
(
java
.
lang
.
String
modifier
){
this
.
modifier
=
modifier
;
}
/** MODIFIED_TIME
*修改时间
*/
private
java
.
util
.
Date
modifiedTime
;
public
java
.
util
.
Date
getModifiedTime
(){
return
this
.
modifiedTime
;
}
public
void
setModifiedTime
(
java
.
util
.
Date
modifiedTime
){
this
.
modifiedTime
=
modifiedTime
;
}
/** SYS_VERSION
*乐观锁,版本号
*/
private
java
.
lang
.
Integer
sysVersion
;
public
java
.
lang
.
Integer
getSysVersion
(){
return
this
.
sysVersion
;
}
public
void
setSysVersion
(
java
.
lang
.
Integer
sysVersion
){
this
.
sysVersion
=
sysVersion
;
}
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/dto/BizMeetingAssistantAsrTaskDto.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
dto
;
public
class
BizMeetingAssistantAsrTaskDto
{
private
static
final
long
serialVersionUID
=
1L
;
/** id
*主键ID
*/
private
java
.
lang
.
Long
id
;
public
java
.
lang
.
Long
getId
(){
return
this
.
id
;
}
public
void
setId
(
java
.
lang
.
Long
id
){
this
.
id
=
id
;
}
/** member_id
*用户id
*/
private
java
.
lang
.
Long
memberId
;
public
java
.
lang
.
Long
getMemberId
(){
return
this
.
memberId
;
}
public
void
setMemberId
(
java
.
lang
.
Long
memberId
){
this
.
memberId
=
memberId
;
}
/** diagues_id
*会话id
*/
private
java
.
lang
.
String
diaguesId
;
public
java
.
lang
.
String
getDiaguesId
(){
return
this
.
diaguesId
;
}
public
void
setDiaguesId
(
java
.
lang
.
String
diaguesId
){
this
.
diaguesId
=
diaguesId
;
}
/** session_id
*语音识别任务ID
*/
private
java
.
lang
.
String
sessionId
;
public
java
.
lang
.
String
getSessionId
(){
return
this
.
sessionId
;
}
public
void
setSessionId
(
java
.
lang
.
String
sessionId
){
this
.
sessionId
=
sessionId
;
}
/** generate_status
*任务状态 generate-生成中 completed-完成 failed-异常
*/
private
java
.
lang
.
String
generateStatus
;
public
java
.
lang
.
String
getGenerateStatus
(){
return
this
.
generateStatus
;
}
public
void
setGenerateStatus
(
java
.
lang
.
String
generateStatus
){
this
.
generateStatus
=
generateStatus
;
}
/** message
*异常信息
*/
private
java
.
lang
.
String
message
;
public
java
.
lang
.
String
getMessage
(){
return
this
.
message
;
}
public
void
setMessage
(
java
.
lang
.
String
message
){
this
.
message
=
message
;
}
/** is_deleted
*是否删除 Y 是 N 否
*/
private
java
.
lang
.
String
isDeleted
;
public
java
.
lang
.
String
getIsDeleted
(){
return
this
.
isDeleted
;
}
public
void
setIsDeleted
(
java
.
lang
.
String
isDeleted
){
this
.
isDeleted
=
isDeleted
;
}
/** CREATOR
*创建人
*/
private
java
.
lang
.
String
creator
;
public
java
.
lang
.
String
getCreator
(){
return
this
.
creator
;
}
public
void
setCreator
(
java
.
lang
.
String
creator
){
this
.
creator
=
creator
;
}
/** CREATED_TIME
*创建时间
*/
private
java
.
util
.
Date
createdTime
;
public
java
.
util
.
Date
getCreatedTime
(){
return
this
.
createdTime
;
}
public
void
setCreatedTime
(
java
.
util
.
Date
createdTime
){
this
.
createdTime
=
createdTime
;
}
/** MODIFIER
*修改人
*/
private
java
.
lang
.
String
modifier
;
public
java
.
lang
.
String
getModifier
(){
return
this
.
modifier
;
}
public
void
setModifier
(
java
.
lang
.
String
modifier
){
this
.
modifier
=
modifier
;
}
/** MODIFIED_TIME
*修改时间
*/
private
java
.
util
.
Date
modifiedTime
;
public
java
.
util
.
Date
getModifiedTime
(){
return
this
.
modifiedTime
;
}
public
void
setModifiedTime
(
java
.
util
.
Date
modifiedTime
){
this
.
modifiedTime
=
modifiedTime
;
}
/** SYS_VERSION
*乐观锁,版本号
*/
private
java
.
lang
.
Integer
sysVersion
;
public
java
.
lang
.
Integer
getSysVersion
(){
return
this
.
sysVersion
;
}
public
void
setSysVersion
(
java
.
lang
.
Integer
sysVersion
){
this
.
sysVersion
=
sysVersion
;
}
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/entity/AnalysisTaskDetailEntity.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
entity
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.Translation
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
public
class
AnalysisTaskDetailEntity
{
/**
* analysis_status
* 内容分析总状态 generate-生成中 completed-完成 failed-失败
*/
private
String
analysisStatus
;
public
String
getAnalysisStatus
()
{
return
this
.
analysisStatus
;
}
public
void
setAnalysisStatus
(
String
analysisStatus
)
{
this
.
analysisStatus
=
analysisStatus
;
}
/**
* theme_content
* 会议主题
*/
private
String
themeContent
;
public
String
getThemeContent
()
{
return
this
.
themeContent
;
}
public
void
setThemeContent
(
String
themeContent
)
{
this
.
themeContent
=
themeContent
;
}
/**
* theme_generate_status
* 会议主题生成状态
*/
private
String
themeGenerateStatus
;
public
String
getThemeGenerateStatus
()
{
return
this
.
themeGenerateStatus
;
}
public
void
setThemeGenerateStatus
(
String
themeGenerateStatus
)
{
this
.
themeGenerateStatus
=
themeGenerateStatus
;
}
/**
* key_word_content
* 关键词
*/
private
List
<
String
>
keyWordContent
;
public
List
<
String
>
getKeyWordContent
()
{
return
keyWordContent
;
}
public
void
setKeyWordContent
(
List
<
String
>
keyWordContent
)
{
this
.
keyWordContent
=
keyWordContent
;
}
/**
* key_word_generate_status
* 关键词生成状态
*/
private
String
keyWordGenerateStatus
;
public
String
getKeyWordGenerateStatus
()
{
return
this
.
keyWordGenerateStatus
;
}
public
void
setKeyWordGenerateStatus
(
String
keyWordGenerateStatus
)
{
this
.
keyWordGenerateStatus
=
keyWordGenerateStatus
;
}
/**
* 关键词计数
*/
private
Map
<
String
,
Integer
>
keyWordCount
;
public
Map
<
String
,
Integer
>
getKeyWordCount
()
{
return
keyWordCount
;
}
public
void
setKeyWordCount
(
Map
<
String
,
Integer
>
keyWordCount
)
{
this
.
keyWordCount
=
keyWordCount
;
}
/**
* meeting_summary_content
* 会议摘要
*/
private
String
meetingSummaryContent
;
public
String
getMeetingSummaryContent
()
{
return
this
.
meetingSummaryContent
;
}
public
void
setMeetingSummaryContent
(
String
meetingSummaryContent
)
{
this
.
meetingSummaryContent
=
meetingSummaryContent
;
}
/**
* meeting_summary_generate_status
* 会议摘要生成状态
*/
private
String
meetingSummaryGenerateStatus
;
public
String
getMeetingSummaryGenerateStatus
()
{
return
this
.
meetingSummaryGenerateStatus
;
}
public
void
setMeetingSummaryGenerateStatus
(
String
meetingSummaryGenerateStatus
)
{
this
.
meetingSummaryGenerateStatus
=
meetingSummaryGenerateStatus
;
}
/**
* featured_questions_generate_status
* 推荐问生成状态
*/
private
String
featuredQuestionsGenerateStatus
;
public
String
getFeaturedQuestionsGenerateStatus
()
{
return
this
.
featuredQuestionsGenerateStatus
;
}
public
void
setFeaturedQuestionsGenerateStatus
(
String
featuredQuestionsGenerateStatus
)
{
this
.
featuredQuestionsGenerateStatus
=
featuredQuestionsGenerateStatus
;
}
/**
* featured_questions
* 推荐问
*/
private
List
<
String
>
featuredQuestions
;
public
List
<
String
>
getFeaturedQuestions
()
{
return
featuredQuestions
;
}
public
void
setFeaturedQuestions
(
List
<
String
>
featuredQuestions
)
{
this
.
featuredQuestions
=
featuredQuestions
;
}
/**
* asr_status
* 语音识别任务状态
*/
private
String
asrStatus
;
public
String
getAsrStatus
()
{
return
asrStatus
;
}
public
void
setAsrStatus
(
String
asrStatus
)
{
this
.
asrStatus
=
asrStatus
;
}
/**
* spk_sets
* 说话人列表
*/
private
Set
<
Long
>
spkSets
;
public
Set
<
Long
>
getSpkSets
()
{
return
spkSets
;
}
public
void
setSpkSets
(
Set
<
Long
>
spkSets
)
{
this
.
spkSets
=
spkSets
;
}
/**
* 语音识别内容
* translation
*/
private
List
<
Translation
>
translations
;
public
List
<
Translation
>
getTranslations
()
{
return
translations
;
}
public
void
setTranslations
(
List
<
Translation
>
translations
)
{
this
.
translations
=
translations
;
}
}
src/main/java/cn/com/poc/meeting/entity/BizMeetingAssistantAnalysisTaskEntity.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
entity
;
public
class
BizMeetingAssistantAnalysisTaskEntity
{
private
static
final
long
serialVersionUID
=
1L
;
/** id
*
*/
private
java
.
lang
.
Long
id
;
public
java
.
lang
.
Long
getId
(){
return
this
.
id
;
}
public
void
setId
(
java
.
lang
.
Long
id
){
this
.
id
=
id
;
}
/** member_id
*用户id
*/
private
java
.
lang
.
Long
memberId
;
public
java
.
lang
.
Long
getMemberId
(){
return
this
.
memberId
;
}
public
void
setMemberId
(
java
.
lang
.
Long
memberId
){
this
.
memberId
=
memberId
;
}
/** diagues_id
*会话id
*/
private
java
.
lang
.
String
diaguesId
;
public
java
.
lang
.
String
getDiaguesId
(){
return
this
.
diaguesId
;
}
public
void
setDiaguesId
(
java
.
lang
.
String
diaguesId
){
this
.
diaguesId
=
diaguesId
;
}
/** analysis_status
*内容分析总状态 generate-生成中 completed-完成 failed-失败
*/
private
java
.
lang
.
String
analysisStatus
;
public
java
.
lang
.
String
getAnalysisStatus
(){
return
this
.
analysisStatus
;
}
public
void
setAnalysisStatus
(
java
.
lang
.
String
analysisStatus
){
this
.
analysisStatus
=
analysisStatus
;
}
/** theme_content
*会议主题
*/
private
java
.
lang
.
String
themeContent
;
public
java
.
lang
.
String
getThemeContent
(){
return
this
.
themeContent
;
}
public
void
setThemeContent
(
java
.
lang
.
String
themeContent
){
this
.
themeContent
=
themeContent
;
}
/** theme_generate_status
*会议主题生成状态
*/
private
java
.
lang
.
String
themeGenerateStatus
;
public
java
.
lang
.
String
getThemeGenerateStatus
(){
return
this
.
themeGenerateStatus
;
}
public
void
setThemeGenerateStatus
(
java
.
lang
.
String
themeGenerateStatus
){
this
.
themeGenerateStatus
=
themeGenerateStatus
;
}
/** key_word_content
*关键词
*/
private
java
.
lang
.
String
keyWordContent
;
public
java
.
lang
.
String
getKeyWordContent
(){
return
this
.
keyWordContent
;
}
public
void
setKeyWordContent
(
java
.
lang
.
String
keyWordContent
){
this
.
keyWordContent
=
keyWordContent
;
}
/** key_word_generate_status
*关键词生成状态
*/
private
java
.
lang
.
String
keyWordGenerateStatus
;
public
java
.
lang
.
String
getKeyWordGenerateStatus
(){
return
this
.
keyWordGenerateStatus
;
}
public
void
setKeyWordGenerateStatus
(
java
.
lang
.
String
keyWordGenerateStatus
){
this
.
keyWordGenerateStatus
=
keyWordGenerateStatus
;
}
/** meeting_summary_content
*会议摘要
*/
private
java
.
lang
.
String
meetingSummaryContent
;
public
java
.
lang
.
String
getMeetingSummaryContent
(){
return
this
.
meetingSummaryContent
;
}
public
void
setMeetingSummaryContent
(
java
.
lang
.
String
meetingSummaryContent
){
this
.
meetingSummaryContent
=
meetingSummaryContent
;
}
/** meeting_summary_generate_status
*会议摘要生成状态
*/
private
java
.
lang
.
String
meetingSummaryGenerateStatus
;
public
java
.
lang
.
String
getMeetingSummaryGenerateStatus
(){
return
this
.
meetingSummaryGenerateStatus
;
}
public
void
setMeetingSummaryGenerateStatus
(
java
.
lang
.
String
meetingSummaryGenerateStatus
){
this
.
meetingSummaryGenerateStatus
=
meetingSummaryGenerateStatus
;
}
/** featured_questions_generate_status
*推荐问生成状态
*/
private
java
.
lang
.
String
featuredQuestionsGenerateStatus
;
public
java
.
lang
.
String
getFeaturedQuestionsGenerateStatus
(){
return
this
.
featuredQuestionsGenerateStatus
;
}
public
void
setFeaturedQuestionsGenerateStatus
(
java
.
lang
.
String
featuredQuestionsGenerateStatus
){
this
.
featuredQuestionsGenerateStatus
=
featuredQuestionsGenerateStatus
;
}
/** featured_questions
*推荐问
*/
private
java
.
lang
.
String
featuredQuestions
;
public
java
.
lang
.
String
getFeaturedQuestions
(){
return
this
.
featuredQuestions
;
}
public
void
setFeaturedQuestions
(
java
.
lang
.
String
featuredQuestions
){
this
.
featuredQuestions
=
featuredQuestions
;
}
/** is_deleted
*是否删除 Y 是 N 否
*/
private
java
.
lang
.
String
isDeleted
;
public
java
.
lang
.
String
getIsDeleted
(){
return
this
.
isDeleted
;
}
public
void
setIsDeleted
(
java
.
lang
.
String
isDeleted
){
this
.
isDeleted
=
isDeleted
;
}
/** CREATOR
*创建人
*/
private
java
.
lang
.
String
creator
;
public
java
.
lang
.
String
getCreator
(){
return
this
.
creator
;
}
public
void
setCreator
(
java
.
lang
.
String
creator
){
this
.
creator
=
creator
;
}
/** CREATED_TIME
*创建时间
*/
private
java
.
util
.
Date
createdTime
;
public
java
.
util
.
Date
getCreatedTime
(){
return
this
.
createdTime
;
}
public
void
setCreatedTime
(
java
.
util
.
Date
createdTime
){
this
.
createdTime
=
createdTime
;
}
/** MODIFIER
*修改人
*/
private
java
.
lang
.
String
modifier
;
public
java
.
lang
.
String
getModifier
(){
return
this
.
modifier
;
}
public
void
setModifier
(
java
.
lang
.
String
modifier
){
this
.
modifier
=
modifier
;
}
/** MODIFIED_TIME
*修改时间
*/
private
java
.
util
.
Date
modifiedTime
;
public
java
.
util
.
Date
getModifiedTime
(){
return
this
.
modifiedTime
;
}
public
void
setModifiedTime
(
java
.
util
.
Date
modifiedTime
){
this
.
modifiedTime
=
modifiedTime
;
}
/** SYS_VERSION
*乐观锁,版本号
*/
private
java
.
lang
.
Integer
sysVersion
;
public
java
.
lang
.
Integer
getSysVersion
(){
return
this
.
sysVersion
;
}
public
void
setSysVersion
(
java
.
lang
.
Integer
sysVersion
){
this
.
sysVersion
=
sysVersion
;
}
@Override
public
String
toString
()
{
return
"BizMeetingAssistantAnalysisTaskEntity{"
+
"id="
+
id
+
", memberId="
+
memberId
+
", diaguesId='"
+
diaguesId
+
'\''
+
", analysisStatus='"
+
analysisStatus
+
'\''
+
", themeContent='"
+
themeContent
+
'\''
+
", themeGenerateStatus='"
+
themeGenerateStatus
+
'\''
+
", keyWordContent='"
+
keyWordContent
+
'\''
+
", keyWordGenerateStatus='"
+
keyWordGenerateStatus
+
'\''
+
", meetingSummaryContent='"
+
meetingSummaryContent
+
'\''
+
", meetingSummaryGenerateStatus='"
+
meetingSummaryGenerateStatus
+
'\''
+
", featuredQuestionsGenerateStatus='"
+
featuredQuestionsGenerateStatus
+
'\''
+
", featuredQuestions='"
+
featuredQuestions
+
'\''
+
", isDeleted='"
+
isDeleted
+
'\''
+
", creator='"
+
creator
+
'\''
+
", createdTime="
+
createdTime
+
", modifier='"
+
modifier
+
'\''
+
", modifiedTime="
+
modifiedTime
+
", sysVersion="
+
sysVersion
+
'}'
;
}
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/entity/BizMeetingAssistantAsrTaskEntity.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
entity
;
public
class
BizMeetingAssistantAsrTaskEntity
{
private
static
final
long
serialVersionUID
=
1L
;
/** id
*主键ID
*/
private
java
.
lang
.
Long
id
;
public
java
.
lang
.
Long
getId
(){
return
this
.
id
;
}
public
void
setId
(
java
.
lang
.
Long
id
){
this
.
id
=
id
;
}
/** member_id
*用户id
*/
private
java
.
lang
.
Long
memberId
;
public
java
.
lang
.
Long
getMemberId
(){
return
this
.
memberId
;
}
public
void
setMemberId
(
java
.
lang
.
Long
memberId
){
this
.
memberId
=
memberId
;
}
/** diagues_id
*会话id
*/
private
java
.
lang
.
String
diaguesId
;
public
java
.
lang
.
String
getDiaguesId
(){
return
this
.
diaguesId
;
}
public
void
setDiaguesId
(
java
.
lang
.
String
diaguesId
){
this
.
diaguesId
=
diaguesId
;
}
/** session_id
*语音识别任务ID
*/
private
java
.
lang
.
String
sessionId
;
public
java
.
lang
.
String
getSessionId
(){
return
this
.
sessionId
;
}
public
void
setSessionId
(
java
.
lang
.
String
sessionId
){
this
.
sessionId
=
sessionId
;
}
/** generate_status
*任务状态 generate-生成中 completed-完成 failed-异常
*/
private
java
.
lang
.
String
generateStatus
;
public
java
.
lang
.
String
getGenerateStatus
(){
return
this
.
generateStatus
;
}
public
void
setGenerateStatus
(
java
.
lang
.
String
generateStatus
){
this
.
generateStatus
=
generateStatus
;
}
/** message
*异常信息
*/
private
java
.
lang
.
String
message
;
public
java
.
lang
.
String
getMessage
(){
return
this
.
message
;
}
public
void
setMessage
(
java
.
lang
.
String
message
){
this
.
message
=
message
;
}
/** is_deleted
*是否删除 Y 是 N 否
*/
private
java
.
lang
.
String
isDeleted
;
public
java
.
lang
.
String
getIsDeleted
(){
return
this
.
isDeleted
;
}
public
void
setIsDeleted
(
java
.
lang
.
String
isDeleted
){
this
.
isDeleted
=
isDeleted
;
}
/** CREATOR
*创建人
*/
private
java
.
lang
.
String
creator
;
public
java
.
lang
.
String
getCreator
(){
return
this
.
creator
;
}
public
void
setCreator
(
java
.
lang
.
String
creator
){
this
.
creator
=
creator
;
}
/** CREATED_TIME
*创建时间
*/
private
java
.
util
.
Date
createdTime
;
public
java
.
util
.
Date
getCreatedTime
(){
return
this
.
createdTime
;
}
public
void
setCreatedTime
(
java
.
util
.
Date
createdTime
){
this
.
createdTime
=
createdTime
;
}
/** MODIFIER
*修改人
*/
private
java
.
lang
.
String
modifier
;
public
java
.
lang
.
String
getModifier
(){
return
this
.
modifier
;
}
public
void
setModifier
(
java
.
lang
.
String
modifier
){
this
.
modifier
=
modifier
;
}
/** MODIFIED_TIME
*修改时间
*/
private
java
.
util
.
Date
modifiedTime
;
public
java
.
util
.
Date
getModifiedTime
(){
return
this
.
modifiedTime
;
}
public
void
setModifiedTime
(
java
.
util
.
Date
modifiedTime
){
this
.
modifiedTime
=
modifiedTime
;
}
/** SYS_VERSION
*乐观锁,版本号
*/
private
java
.
lang
.
Integer
sysVersion
;
public
java
.
lang
.
Integer
getSysVersion
(){
return
this
.
sysVersion
;
}
public
void
setSysVersion
(
java
.
lang
.
Integer
sysVersion
){
this
.
sysVersion
=
sysVersion
;
}
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/model/BizMeetingAssistantAnalysisTaskModel.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
model
;
import
java.io.Serializable
;
import
cn.com.yict.framemax.data.model.BaseModelClass
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.Table
;
import
javax.persistence.Id
;
import
org.hibernate.annotations.DynamicInsert
;
import
org.hibernate.annotations.DynamicUpdate
;
import
javax.persistence.Version
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
/**
* Model class for biz_meeting_assistant_analysis_task
* 会议助手-会议内容分析任务表
*/
@Entity
@Table
(
name
=
"biz_meeting_assistant_analysis_task"
)
@DynamicInsert
@DynamicUpdate
public
class
BizMeetingAssistantAnalysisTaskModel
extends
BaseModelClass
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/** id
*
*/
private
java
.
lang
.
Long
id
;
@Column
(
name
=
"id"
,
length
=
19
)
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
public
java
.
lang
.
Long
getId
(){
return
this
.
id
;
}
public
void
setId
(
java
.
lang
.
Long
id
){
this
.
id
=
id
;
super
.
addValidField
(
"id"
);
}
/** member_id
*用户id
*/
private
java
.
lang
.
Long
memberId
;
@Column
(
name
=
"member_id"
,
length
=
19
)
public
java
.
lang
.
Long
getMemberId
(){
return
this
.
memberId
;
}
public
void
setMemberId
(
java
.
lang
.
Long
memberId
){
this
.
memberId
=
memberId
;
super
.
addValidField
(
"memberId"
);
}
/** diagues_id
*会话id
*/
private
java
.
lang
.
String
diaguesId
;
@Column
(
name
=
"diagues_id"
,
length
=
120
)
public
java
.
lang
.
String
getDiaguesId
(){
return
this
.
diaguesId
;
}
public
void
setDiaguesId
(
java
.
lang
.
String
diaguesId
){
this
.
diaguesId
=
diaguesId
;
super
.
addValidField
(
"diaguesId"
);
}
/** analysis_status
*内容分析总状态 generate-生成中 completed-完成 failed-失败
*/
private
java
.
lang
.
String
analysisStatus
;
@Column
(
name
=
"analysis_status"
,
length
=
15
)
public
java
.
lang
.
String
getAnalysisStatus
(){
return
this
.
analysisStatus
;
}
public
void
setAnalysisStatus
(
java
.
lang
.
String
analysisStatus
){
this
.
analysisStatus
=
analysisStatus
;
super
.
addValidField
(
"analysisStatus"
);
}
/** theme_content
*会议主题
*/
private
java
.
lang
.
String
themeContent
;
@Column
(
name
=
"theme_content"
,
length
=
2147483647
)
public
java
.
lang
.
String
getThemeContent
(){
return
this
.
themeContent
;
}
public
void
setThemeContent
(
java
.
lang
.
String
themeContent
){
this
.
themeContent
=
themeContent
;
super
.
addValidField
(
"themeContent"
);
}
/** theme_generate_status
*会议主题生成状态
*/
private
java
.
lang
.
String
themeGenerateStatus
;
@Column
(
name
=
"theme_generate_status"
,
length
=
15
)
public
java
.
lang
.
String
getThemeGenerateStatus
(){
return
this
.
themeGenerateStatus
;
}
public
void
setThemeGenerateStatus
(
java
.
lang
.
String
themeGenerateStatus
){
this
.
themeGenerateStatus
=
themeGenerateStatus
;
super
.
addValidField
(
"themeGenerateStatus"
);
}
/** key_word_content
*关键词
*/
private
java
.
lang
.
String
keyWordContent
;
@Column
(
name
=
"key_word_content"
,
length
=
1073741824
)
public
java
.
lang
.
String
getKeyWordContent
(){
return
this
.
keyWordContent
;
}
public
void
setKeyWordContent
(
java
.
lang
.
String
keyWordContent
){
this
.
keyWordContent
=
keyWordContent
;
super
.
addValidField
(
"keyWordContent"
);
}
/** key_word_generate_status
*关键词生成状态
*/
private
java
.
lang
.
String
keyWordGenerateStatus
;
@Column
(
name
=
"key_word_generate_status"
,
length
=
15
)
public
java
.
lang
.
String
getKeyWordGenerateStatus
(){
return
this
.
keyWordGenerateStatus
;
}
public
void
setKeyWordGenerateStatus
(
java
.
lang
.
String
keyWordGenerateStatus
){
this
.
keyWordGenerateStatus
=
keyWordGenerateStatus
;
super
.
addValidField
(
"keyWordGenerateStatus"
);
}
/** meeting_summary_content
*会议摘要
*/
private
java
.
lang
.
String
meetingSummaryContent
;
@Column
(
name
=
"meeting_summary_content"
,
length
=
2147483647
)
public
java
.
lang
.
String
getMeetingSummaryContent
(){
return
this
.
meetingSummaryContent
;
}
public
void
setMeetingSummaryContent
(
java
.
lang
.
String
meetingSummaryContent
){
this
.
meetingSummaryContent
=
meetingSummaryContent
;
super
.
addValidField
(
"meetingSummaryContent"
);
}
/** meeting_summary_generate_status
*会议摘要生成状态
*/
private
java
.
lang
.
String
meetingSummaryGenerateStatus
;
@Column
(
name
=
"meeting_summary_generate_status"
,
length
=
15
)
public
java
.
lang
.
String
getMeetingSummaryGenerateStatus
(){
return
this
.
meetingSummaryGenerateStatus
;
}
public
void
setMeetingSummaryGenerateStatus
(
java
.
lang
.
String
meetingSummaryGenerateStatus
){
this
.
meetingSummaryGenerateStatus
=
meetingSummaryGenerateStatus
;
super
.
addValidField
(
"meetingSummaryGenerateStatus"
);
}
/** featured_questions_generate_status
*推荐问生成状态
*/
private
java
.
lang
.
String
featuredQuestionsGenerateStatus
;
@Column
(
name
=
"featured_questions_generate_status"
,
length
=
15
)
public
java
.
lang
.
String
getFeaturedQuestionsGenerateStatus
(){
return
this
.
featuredQuestionsGenerateStatus
;
}
public
void
setFeaturedQuestionsGenerateStatus
(
java
.
lang
.
String
featuredQuestionsGenerateStatus
){
this
.
featuredQuestionsGenerateStatus
=
featuredQuestionsGenerateStatus
;
super
.
addValidField
(
"featuredQuestionsGenerateStatus"
);
}
/** featured_questions
*推荐问
*/
private
java
.
lang
.
String
featuredQuestions
;
@Column
(
name
=
"featured_questions"
,
length
=
1073741824
)
public
java
.
lang
.
String
getFeaturedQuestions
(){
return
this
.
featuredQuestions
;
}
public
void
setFeaturedQuestions
(
java
.
lang
.
String
featuredQuestions
){
this
.
featuredQuestions
=
featuredQuestions
;
super
.
addValidField
(
"featuredQuestions"
);
}
/** is_deleted
*是否删除 Y 是 N 否
*/
private
java
.
lang
.
String
isDeleted
;
@Column
(
name
=
"is_deleted"
,
length
=
1
)
public
java
.
lang
.
String
getIsDeleted
(){
return
this
.
isDeleted
;
}
public
void
setIsDeleted
(
java
.
lang
.
String
isDeleted
){
this
.
isDeleted
=
isDeleted
;
super
.
addValidField
(
"isDeleted"
);
}
/** CREATOR
*创建人
*/
private
java
.
lang
.
String
creator
;
@Column
(
name
=
"CREATOR"
,
length
=
50
)
public
java
.
lang
.
String
getCreator
(){
return
this
.
creator
;
}
public
void
setCreator
(
java
.
lang
.
String
creator
){
this
.
creator
=
creator
;
super
.
addValidField
(
"creator"
);
}
/** CREATED_TIME
*创建时间
*/
private
java
.
util
.
Date
createdTime
;
@Column
(
name
=
"CREATED_TIME"
,
length
=
19
)
public
java
.
util
.
Date
getCreatedTime
(){
return
this
.
createdTime
;
}
public
void
setCreatedTime
(
java
.
util
.
Date
createdTime
){
this
.
createdTime
=
createdTime
;
super
.
addValidField
(
"createdTime"
);
}
/** MODIFIER
*修改人
*/
private
java
.
lang
.
String
modifier
;
@Column
(
name
=
"MODIFIER"
,
length
=
50
)
public
java
.
lang
.
String
getModifier
(){
return
this
.
modifier
;
}
public
void
setModifier
(
java
.
lang
.
String
modifier
){
this
.
modifier
=
modifier
;
super
.
addValidField
(
"modifier"
);
}
/** MODIFIED_TIME
*修改时间
*/
private
java
.
util
.
Date
modifiedTime
;
@Column
(
name
=
"MODIFIED_TIME"
,
length
=
19
)
public
java
.
util
.
Date
getModifiedTime
(){
return
this
.
modifiedTime
;
}
public
void
setModifiedTime
(
java
.
util
.
Date
modifiedTime
){
this
.
modifiedTime
=
modifiedTime
;
super
.
addValidField
(
"modifiedTime"
);
}
/** SYS_VERSION
*乐观锁,版本号
*/
private
java
.
lang
.
Integer
sysVersion
;
@Column
(
name
=
"SYS_VERSION"
,
length
=
10
)
@Version
public
java
.
lang
.
Integer
getSysVersion
(){
return
this
.
sysVersion
;
}
public
void
setSysVersion
(
java
.
lang
.
Integer
sysVersion
){
this
.
sysVersion
=
sysVersion
;
super
.
addValidField
(
"sysVersion"
);
}
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/model/BizMeetingAssistantAsrTaskModel.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
model
;
import
java.io.Serializable
;
import
cn.com.yict.framemax.data.model.BaseModelClass
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.Table
;
import
javax.persistence.Id
;
import
org.hibernate.annotations.DynamicInsert
;
import
org.hibernate.annotations.DynamicUpdate
;
import
javax.persistence.Version
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
/**
* Model class for biz_meeting_assistant_asr_task
* 会议助手-语音识别任务表
*/
@Entity
@Table
(
name
=
"biz_meeting_assistant_asr_task"
)
@DynamicInsert
@DynamicUpdate
public
class
BizMeetingAssistantAsrTaskModel
extends
BaseModelClass
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/** id
*主键ID
*/
private
java
.
lang
.
Long
id
;
@Column
(
name
=
"id"
,
length
=
19
)
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
public
java
.
lang
.
Long
getId
(){
return
this
.
id
;
}
public
void
setId
(
java
.
lang
.
Long
id
){
this
.
id
=
id
;
super
.
addValidField
(
"id"
);
}
/** member_id
*用户id
*/
private
java
.
lang
.
Long
memberId
;
@Column
(
name
=
"member_id"
,
length
=
19
)
public
java
.
lang
.
Long
getMemberId
(){
return
this
.
memberId
;
}
public
void
setMemberId
(
java
.
lang
.
Long
memberId
){
this
.
memberId
=
memberId
;
super
.
addValidField
(
"memberId"
);
}
/** diagues_id
*会话id
*/
private
java
.
lang
.
String
diaguesId
;
@Column
(
name
=
"diagues_id"
,
length
=
120
)
public
java
.
lang
.
String
getDiaguesId
(){
return
this
.
diaguesId
;
}
public
void
setDiaguesId
(
java
.
lang
.
String
diaguesId
){
this
.
diaguesId
=
diaguesId
;
super
.
addValidField
(
"diaguesId"
);
}
/** session_id
*语音识别任务ID
*/
private
java
.
lang
.
String
sessionId
;
@Column
(
name
=
"session_id"
,
length
=
200
)
public
java
.
lang
.
String
getSessionId
(){
return
this
.
sessionId
;
}
public
void
setSessionId
(
java
.
lang
.
String
sessionId
){
this
.
sessionId
=
sessionId
;
super
.
addValidField
(
"sessionId"
);
}
/** generate_status
*任务状态 generate-生成中 completed-完成 failed-异常
*/
private
java
.
lang
.
String
generateStatus
;
@Column
(
name
=
"generate_status"
,
length
=
15
)
public
java
.
lang
.
String
getGenerateStatus
(){
return
this
.
generateStatus
;
}
public
void
setGenerateStatus
(
java
.
lang
.
String
generateStatus
){
this
.
generateStatus
=
generateStatus
;
super
.
addValidField
(
"generateStatus"
);
}
/** message
*异常信息
*/
private
java
.
lang
.
String
message
;
@Column
(
name
=
"message"
,
length
=
2147483647
)
public
java
.
lang
.
String
getMessage
(){
return
this
.
message
;
}
public
void
setMessage
(
java
.
lang
.
String
message
){
this
.
message
=
message
;
super
.
addValidField
(
"message"
);
}
/** is_deleted
*是否删除 Y 是 N 否
*/
private
java
.
lang
.
String
isDeleted
;
@Column
(
name
=
"is_deleted"
,
length
=
1
)
public
java
.
lang
.
String
getIsDeleted
(){
return
this
.
isDeleted
;
}
public
void
setIsDeleted
(
java
.
lang
.
String
isDeleted
){
this
.
isDeleted
=
isDeleted
;
super
.
addValidField
(
"isDeleted"
);
}
/** CREATOR
*创建人
*/
private
java
.
lang
.
String
creator
;
@Column
(
name
=
"CREATOR"
,
length
=
50
)
public
java
.
lang
.
String
getCreator
(){
return
this
.
creator
;
}
public
void
setCreator
(
java
.
lang
.
String
creator
){
this
.
creator
=
creator
;
super
.
addValidField
(
"creator"
);
}
/** CREATED_TIME
*创建时间
*/
private
java
.
util
.
Date
createdTime
;
@Column
(
name
=
"CREATED_TIME"
,
length
=
19
)
public
java
.
util
.
Date
getCreatedTime
(){
return
this
.
createdTime
;
}
public
void
setCreatedTime
(
java
.
util
.
Date
createdTime
){
this
.
createdTime
=
createdTime
;
super
.
addValidField
(
"createdTime"
);
}
/** MODIFIER
*修改人
*/
private
java
.
lang
.
String
modifier
;
@Column
(
name
=
"MODIFIER"
,
length
=
50
)
public
java
.
lang
.
String
getModifier
(){
return
this
.
modifier
;
}
public
void
setModifier
(
java
.
lang
.
String
modifier
){
this
.
modifier
=
modifier
;
super
.
addValidField
(
"modifier"
);
}
/** MODIFIED_TIME
*修改时间
*/
private
java
.
util
.
Date
modifiedTime
;
@Column
(
name
=
"MODIFIED_TIME"
,
length
=
19
)
public
java
.
util
.
Date
getModifiedTime
(){
return
this
.
modifiedTime
;
}
public
void
setModifiedTime
(
java
.
util
.
Date
modifiedTime
){
this
.
modifiedTime
=
modifiedTime
;
super
.
addValidField
(
"modifiedTime"
);
}
/** SYS_VERSION
*乐观锁,版本号
*/
private
java
.
lang
.
Integer
sysVersion
;
@Column
(
name
=
"SYS_VERSION"
,
length
=
10
)
@Version
public
java
.
lang
.
Integer
getSysVersion
(){
return
this
.
sysVersion
;
}
public
void
setSysVersion
(
java
.
lang
.
Integer
sysVersion
){
this
.
sysVersion
=
sysVersion
;
super
.
addValidField
(
"sysVersion"
);
}
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/repository/BizMeetingAssistantAnalysisTaskRepository.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
repository
;
import
cn.com.yict.framemax.data.repository.Repository
;
import
cn.com.poc.meeting.model.BizMeetingAssistantAnalysisTaskModel
;
public
interface
BizMeetingAssistantAnalysisTaskRepository
extends
Repository
<
BizMeetingAssistantAnalysisTaskModel
,
java
.
lang
.
Long
>
{
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/repository/BizMeetingAssistantAsrTaskRepository.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
repository
;
import
cn.com.yict.framemax.data.repository.Repository
;
import
cn.com.poc.meeting.model.BizMeetingAssistantAsrTaskModel
;
public
interface
BizMeetingAssistantAsrTaskRepository
extends
Repository
<
BizMeetingAssistantAsrTaskModel
,
java
.
lang
.
Long
>
{
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/rest/AiMeetingAssistantRest.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
rest
;
import
cn.com.poc.meeting.dto.AiMeetingAssistantDto
;
import
cn.com.poc.meeting.dto.AnalysisTaskDetailDto
;
import
cn.com.yict.framemax.core.rest.BaseRest
;
import
cn.com.yict.framemax.web.permission.Access
;
import
cn.com.yict.framemax.web.permission.Permission
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestParam
;
/**
* AI会议助手接口
*/
@Permission
(
Access
.
Safety
)
public
interface
AiMeetingAssistantRest
extends
BaseRest
{
/**
* 创建语音文件解析任务
*
* @param fileUrl 语音文件地址
* @param dialoguesId 会话ID
* @return 任务创建状态
*/
String
createTask
(
@RequestParam
String
fileUrl
,
@RequestParam
String
dialoguesId
);
/**
* 查询会议内容分析详情
*
* @param dialoguesId 会话ID
* @return 任务执行状态
*/
AnalysisTaskDetailDto
getTaskDetail
(
@RequestParam
String
dialoguesId
);
/**
* 会议助手对话
*
* @param dto
* @throws Exception
*/
void
call
(
@RequestBody
AiMeetingAssistantDto
dto
)
throws
Exception
;
}
src/main/java/cn/com/poc/meeting/rest/impl/AiMeetingAssistantRestImpl.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
rest
.
impl
;
import
cn.com.poc.common.utils.Assert
;
import
cn.com.poc.common.utils.BlContext
;
import
cn.com.poc.meeting.aggregate.AiMeetingAssistantService
;
import
cn.com.poc.meeting.dto.AiMeetingAssistantDto
;
import
cn.com.poc.meeting.dto.AnalysisTaskDetailDto
;
import
cn.com.poc.meeting.entity.AnalysisTaskDetailEntity
;
import
cn.com.poc.meeting.rest.AiMeetingAssistantRest
;
import
cn.com.poc.support.security.oauth.entity.UserBaseEntity
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
@Component
public
class
AiMeetingAssistantRestImpl
implements
AiMeetingAssistantRest
{
@Resource
private
AiMeetingAssistantService
aiMeetingAssistantService
;
@Override
public
AnalysisTaskDetailDto
getTaskDetail
(
String
dialoguesId
)
{
Assert
.
notBlank
(
dialoguesId
,
"会话ID不能为空"
);
UserBaseEntity
userBaseEntity
=
BlContext
.
getCurrentUserNotException
();
if
(
userBaseEntity
==
null
)
{
throw
new
BusinessException
(
"用户未登录"
);
}
AnalysisTaskDetailDto
result
=
new
AnalysisTaskDetailDto
();
AnalysisTaskDetailEntity
analysisTaskDetailEntity
=
aiMeetingAssistantService
.
getTaskDetail
(
dialoguesId
,
userBaseEntity
.
getUserId
());
BeanUtils
.
copyProperties
(
analysisTaskDetailEntity
,
result
);
return
result
;
}
@Override
public
String
createTask
(
String
fileUrl
,
String
dialoguesId
)
{
Assert
.
notBlank
(
fileUrl
,
"文件不能为空"
);
Assert
.
notBlank
(
dialoguesId
,
"会话ID不能为空"
);
UserBaseEntity
userBaseEntity
=
BlContext
.
getCurrentUserNotException
();
if
(
userBaseEntity
==
null
)
{
throw
new
BusinessException
(
"用户未登录"
);
}
return
aiMeetingAssistantService
.
createTask
(
fileUrl
,
dialoguesId
,
userBaseEntity
.
getUserId
());
}
@Override
public
void
call
(
AiMeetingAssistantDto
dto
)
throws
Exception
{
Assert
.
notBlank
(
dto
.
getDialoguesId
(),
"会话ID不能为空"
);
Assert
.
notBlank
(
dto
.
getInput
(),
"输入内容不能为空"
);
UserBaseEntity
userBaseEntity
=
BlContext
.
getCurrentUserNotException
();
if
(
userBaseEntity
==
null
)
{
throw
new
BusinessException
(
"用户未登录"
);
}
aiMeetingAssistantService
.
call
(
dto
.
getDialoguesId
(),
dto
.
getFileUrl
(),
dto
.
getInput
(),
dto
.
getKnowledgeIds
(),
userBaseEntity
.
getUserId
());
}
}
src/main/java/cn/com/poc/meeting/scheduler/MeetingAssistantScheduler.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
scheduler
;
import
cn.com.poc.common.constant.CommonConstant
;
import
cn.com.poc.common.utils.DateUtils
;
import
cn.com.poc.meeting.constants.MeetingAssistantConstantEnum
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAsrTaskEntity
;
import
cn.com.poc.meeting.service.BizMeetingAssistantAnalysisTaskService
;
import
cn.com.poc.meeting.service.BizMeetingAssistantAsrTaskService
;
import
cn.com.poc.message.entity.meeting.MeetingAssistantAnalysisMessage
;
import
cn.com.poc.message.service.MeetingAssistantAnalysisProducerService
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.AsrOfflineDetailResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.GetDetailResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.service.ASRService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.util.Date
;
import
java.util.List
;
/**
* 会议助手-定时任务
*/
@Component
public
class
MeetingAssistantScheduler
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
MeetingAssistantScheduler
.
class
);
@Resource
private
MeetingAssistantAnalysisProducerService
meetingAssistantAnalysisProducerService
;
@Resource
private
BizMeetingAssistantAsrTaskService
bizMeetingAssistantAsrTaskService
;
@Resource
private
BizMeetingAssistantAnalysisTaskService
bizMeetingAssistantAnalysisTaskService
;
@Resource
private
ASRService
asrService
;
/**
* 语音识别任务状态查询
*/
@Scheduled
(
fixedDelay
=
15000
)
public
void
taskStatusUpdate
()
{
logger
.
info
(
"------- 执行[语音识别任务状态查询]定时任务 -------"
);
BizMeetingAssistantAsrTaskEntity
bizMeetingAssistantAsrTaskEntity
=
new
BizMeetingAssistantAsrTaskEntity
();
bizMeetingAssistantAsrTaskEntity
.
setGenerateStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
bizMeetingAssistantAsrTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAsrTaskEntity
>
taskEntities
=
bizMeetingAssistantAsrTaskService
.
findByExample
(
bizMeetingAssistantAsrTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
taskEntities
))
{
return
;
}
for
(
BizMeetingAssistantAsrTaskEntity
taskEntity
:
taskEntities
)
{
String
sessionId
=
taskEntity
.
getSessionId
();
GetDetailResult
getDetailResult
=
asrService
.
getDetailByFullInformation
(
sessionId
);
if
(
getDetailResult
==
null
)
{
logger
.
error
(
"--------- 查询语音识别任务异常,响应结果为空,sessionId:{}---------"
,
sessionId
);
continue
;
}
if
(
0
!=
getDetailResult
.
getCode
())
{
logger
.
error
(
"------ 查询语音识别任务异常,sessionId:{},code:{} ,message:{}"
,
sessionId
,
getDetailResult
.
getCode
(),
getDetailResult
.
getMessage
());
continue
;
}
if
(
null
==
getDetailResult
.
getData
())
{
logger
.
error
(
"---------- 查询语音识别任务异常,data为空 -----------"
);
continue
;
}
AsrOfflineDetailResult
data
=
getDetailResult
.
getData
();
if
(
data
!=
null
)
{
if
(
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
().
equals
(
data
.
getGenerateStatus
()))
{
if
(
CollectionUtils
.
isEmpty
(
data
.
getTranslation
()))
{
logger
.
warn
(
"-------- 语音识别任务已完成,但 Translation 内容为空 ----------"
);
taskEntity
.
setGenerateStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
taskEntity
.
setMessage
(
"translation is null"
);
bizMeetingAssistantAsrTaskService
.
update
(
taskEntity
);
}
else
{
taskEntity
.
setGenerateStatus
(
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
());
bizMeetingAssistantAsrTaskService
.
update
(
taskEntity
);
//执行内容分析任务
MeetingAssistantAnalysisMessage
meetingAssistantAnalysisMessage
=
new
MeetingAssistantAnalysisMessage
();
meetingAssistantAnalysisMessage
.
setDiaguesId
(
taskEntity
.
getDiaguesId
());
meetingAssistantAnalysisMessage
.
setTranslations
(
data
.
getTranslation
());
meetingAssistantAnalysisProducerService
.
analysisTask
(
meetingAssistantAnalysisMessage
);
}
}
else
if
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
data
.
getGenerateStatus
()))
{
taskEntity
.
setGenerateStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
bizMeetingAssistantAsrTaskService
.
update
(
taskEntity
);
// 更新会议内容分析任务状态
updateAnalysisTaskToFailed
(
taskEntity
);
}
else
{
//判断执行时长,若超过15分钟则判断为失败.
Date
now
=
new
Date
();
long
diffTwoDate
=
DateUtils
.
diffTwoDate
(
now
,
taskEntity
.
getCreatedTime
());
if
(
diffTwoDate
>
15
*
60
*
1000
){
taskEntity
.
setGenerateStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
taskEntity
.
setMessage
(
"Time Out"
);
bizMeetingAssistantAsrTaskService
.
update
(
taskEntity
);
// 更新会议内容分析任务状态
updateAnalysisTaskToFailed
(
taskEntity
);
}
}
}
}
}
private
void
updateAnalysisTaskToFailed
(
BizMeetingAssistantAsrTaskEntity
taskEntity
)
{
BizMeetingAssistantAnalysisTaskEntity
bizMeetingAssistantAnalysisTaskEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
bizMeetingAssistantAnalysisTaskEntity
.
setDiaguesId
(
taskEntity
.
getDiaguesId
());
bizMeetingAssistantAnalysisTaskEntity
.
setMemberId
(
taskEntity
.
getMemberId
());
bizMeetingAssistantAnalysisTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
bizMeetingAssistantAnalysisTaskEntity
.
setAnalysisStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
List
<
BizMeetingAssistantAnalysisTaskEntity
>
bizMeetingAssistantAnalysisTaskEntities
=
bizMeetingAssistantAnalysisTaskService
.
findByExample
(
bizMeetingAssistantAnalysisTaskEntity
,
null
);
if
(
CollectionUtils
.
isNotEmpty
(
bizMeetingAssistantAnalysisTaskEntities
))
{
logger
.
info
(
"---------- 更新会议内容分析任务为 failed 状态, diaguesId:{}----------"
,
taskEntity
.
getDiaguesId
());
BizMeetingAssistantAnalysisTaskEntity
analysisTaskEntity
=
bizMeetingAssistantAnalysisTaskEntities
.
get
(
0
);
analysisTaskEntity
.
setAnalysisStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
bizMeetingAssistantAnalysisTaskService
.
update
(
analysisTaskEntity
);
}
else
{
logger
.
warn
(
"------------ 无法找到对应的内容分析任务数据,diaguesId:{} -----------"
,
taskEntity
.
getDiaguesId
());
}
}
}
src/main/java/cn/com/poc/meeting/service/BizMeetingAssistantAnalysisTaskService.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
service
;
import
cn.com.yict.framemax.core.service.BaseService
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity
;
import
cn.com.yict.framemax.data.model.PagingInfo
;
import
java.util.List
;
public
interface
BizMeetingAssistantAnalysisTaskService
extends
BaseService
{
BizMeetingAssistantAnalysisTaskEntity
get
(
java
.
lang
.
Long
id
)
;
List
<
BizMeetingAssistantAnalysisTaskEntity
>
findByExample
(
BizMeetingAssistantAnalysisTaskEntity
example
,
PagingInfo
pagingInfo
)
;
BizMeetingAssistantAnalysisTaskEntity
save
(
BizMeetingAssistantAnalysisTaskEntity
entity
)
throws
Exception
;
BizMeetingAssistantAnalysisTaskEntity
update
(
BizMeetingAssistantAnalysisTaskEntity
entity
)
;
void
deletedById
(
java
.
lang
.
Long
id
)
;
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/service/BizMeetingAssistantAsrTaskService.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
service
;
import
cn.com.yict.framemax.core.service.BaseService
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAsrTaskEntity
;
import
cn.com.yict.framemax.data.model.PagingInfo
;
import
java.util.Collection
;
import
java.util.List
;
public
interface
BizMeetingAssistantAsrTaskService
extends
BaseService
{
BizMeetingAssistantAsrTaskEntity
get
(
java
.
lang
.
Long
id
)
throws
Exception
;
List
<
BizMeetingAssistantAsrTaskEntity
>
findByExample
(
BizMeetingAssistantAsrTaskEntity
example
,
PagingInfo
pagingInfo
);
BizMeetingAssistantAsrTaskEntity
save
(
BizMeetingAssistantAsrTaskEntity
entity
)
throws
Exception
;
BizMeetingAssistantAsrTaskEntity
update
(
BizMeetingAssistantAsrTaskEntity
entity
)
;
void
deletedById
(
java
.
lang
.
Long
id
)
throws
Exception
;
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/service/impl/BizMeetingAssistantAnalysisTaskServiceImpl.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
service
.
impl
;
import
cn.com.yict.framemax.core.service.impl.BaseServiceImpl
;
import
cn.com.poc.meeting.service.BizMeetingAssistantAnalysisTaskService
;
import
cn.com.poc.meeting.model.BizMeetingAssistantAnalysisTaskModel
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity
;
import
cn.com.poc.meeting.convert.BizMeetingAssistantAnalysisTaskConvert
;
import
cn.com.poc.meeting.repository.BizMeetingAssistantAnalysisTaskRepository
;
import
cn.com.yict.framemax.data.model.PagingInfo
;
import
org.springframework.stereotype.Service
;
import
org.apache.commons.collections4.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.stream.Collectors
;
import
java.util.List
;
import
javax.annotation.Resource
;
import
org.springframework.util.Assert
;
@Service
public
class
BizMeetingAssistantAnalysisTaskServiceImpl
extends
BaseServiceImpl
implements
BizMeetingAssistantAnalysisTaskService
{
@Resource
private
BizMeetingAssistantAnalysisTaskRepository
repository
;
public
BizMeetingAssistantAnalysisTaskEntity
get
(
java
.
lang
.
Long
id
)
{
Assert
.
notNull
(
id
);
BizMeetingAssistantAnalysisTaskModel
model
=
this
.
repository
.
get
(
id
);
if
(
model
==
null
)
{
return
null
;
}
if
(
"Y"
.
equals
(
model
.
getIsDeleted
()))
{
return
null
;
}
return
BizMeetingAssistantAnalysisTaskConvert
.
modelToEntity
(
model
);
}
public
List
<
BizMeetingAssistantAnalysisTaskEntity
>
findByExample
(
BizMeetingAssistantAnalysisTaskEntity
example
,
PagingInfo
pagingInfo
)
{
List
<
BizMeetingAssistantAnalysisTaskEntity
>
result
=
new
ArrayList
<
BizMeetingAssistantAnalysisTaskEntity
>();
BizMeetingAssistantAnalysisTaskModel
model
=
new
BizMeetingAssistantAnalysisTaskModel
();
if
(
example
!=
null
)
{
model
=
BizMeetingAssistantAnalysisTaskConvert
.
entityToModel
(
example
);
}
model
.
setIsDeleted
(
"N"
);
List
<
BizMeetingAssistantAnalysisTaskModel
>
models
=
this
.
repository
.
findByExample
(
model
,
pagingInfo
);
if
(
CollectionUtils
.
isNotEmpty
(
models
))
{
result
=
models
.
stream
().
map
(
BizMeetingAssistantAnalysisTaskConvert:
:
modelToEntity
).
collect
(
Collectors
.
toList
());
}
return
result
;
}
public
BizMeetingAssistantAnalysisTaskEntity
save
(
BizMeetingAssistantAnalysisTaskEntity
entity
)
throws
Exception
{
Assert
.
notNull
(
entity
);
entity
.
setId
(
null
);
entity
.
setIsDeleted
(
"N"
);
BizMeetingAssistantAnalysisTaskModel
model
=
BizMeetingAssistantAnalysisTaskConvert
.
entityToModel
(
entity
);
BizMeetingAssistantAnalysisTaskModel
saveModel
=
this
.
repository
.
save
(
model
);
return
BizMeetingAssistantAnalysisTaskConvert
.
modelToEntity
(
saveModel
);
}
public
BizMeetingAssistantAnalysisTaskEntity
update
(
BizMeetingAssistantAnalysisTaskEntity
entity
)
{
Assert
.
notNull
(
entity
);
Assert
.
notNull
(
entity
.
getId
(),
"update pk can not be null"
);
BizMeetingAssistantAnalysisTaskModel
model
=
this
.
repository
.
get
(
entity
.
getId
());
if
(
entity
.
getDiaguesId
()
!=
null
)
{
model
.
setDiaguesId
(
entity
.
getDiaguesId
());
}
if
(
entity
.
getAnalysisStatus
()
!=
null
)
{
model
.
setAnalysisStatus
(
entity
.
getAnalysisStatus
());
}
if
(
entity
.
getThemeContent
()
!=
null
)
{
model
.
setThemeContent
(
entity
.
getThemeContent
());
}
if
(
entity
.
getThemeGenerateStatus
()
!=
null
)
{
model
.
setThemeGenerateStatus
(
entity
.
getThemeGenerateStatus
());
}
if
(
entity
.
getKeyWordContent
()
!=
null
)
{
model
.
setKeyWordContent
(
entity
.
getKeyWordContent
());
}
if
(
entity
.
getKeyWordGenerateStatus
()
!=
null
)
{
model
.
setKeyWordGenerateStatus
(
entity
.
getKeyWordGenerateStatus
());
}
if
(
entity
.
getMeetingSummaryContent
()
!=
null
)
{
model
.
setMeetingSummaryContent
(
entity
.
getMeetingSummaryContent
());
}
if
(
entity
.
getMeetingSummaryGenerateStatus
()
!=
null
)
{
model
.
setMeetingSummaryGenerateStatus
(
entity
.
getMeetingSummaryGenerateStatus
());
}
if
(
entity
.
getFeaturedQuestions
()
!=
null
)
{
model
.
setFeaturedQuestions
(
entity
.
getFeaturedQuestions
());
}
if
(
entity
.
getFeaturedQuestionsGenerateStatus
()
!=
null
)
{
model
.
setFeaturedQuestionsGenerateStatus
(
entity
.
getFeaturedQuestionsGenerateStatus
());
}
if
(
entity
.
getMemberId
()
!=
null
)
{
model
.
setMemberId
(
entity
.
getMemberId
());
}
if
(
entity
.
getIsDeleted
()
!=
null
)
{
model
.
setIsDeleted
(
entity
.
getIsDeleted
());
}
if
(
entity
.
getCreator
()
!=
null
)
{
model
.
setCreator
(
entity
.
getCreator
());
}
if
(
entity
.
getCreatedTime
()
!=
null
)
{
model
.
setCreatedTime
(
entity
.
getCreatedTime
());
}
if
(
entity
.
getModifier
()
!=
null
)
{
model
.
setModifier
(
entity
.
getModifier
());
}
if
(
entity
.
getModifiedTime
()
!=
null
)
{
model
.
setModifiedTime
(
entity
.
getModifiedTime
());
}
if
(
entity
.
getSysVersion
()
!=
null
)
{
model
.
setSysVersion
(
entity
.
getSysVersion
());
}
BizMeetingAssistantAnalysisTaskModel
saveModel
=
this
.
repository
.
save
(
model
);
return
BizMeetingAssistantAnalysisTaskConvert
.
modelToEntity
(
saveModel
);
}
public
void
deletedById
(
java
.
lang
.
Long
id
)
{
Assert
.
notNull
(
id
);
BizMeetingAssistantAnalysisTaskModel
model
=
this
.
repository
.
get
(
id
);
if
(
model
!=
null
)
{
if
(
"N"
.
equals
(
model
.
getIsDeleted
()))
{
model
.
setIsDeleted
(
"Y"
);
this
.
repository
.
save
(
model
);
}
}
}
}
\ No newline at end of file
src/main/java/cn/com/poc/meeting/service/impl/BizMeetingAssistantAsrTaskServiceImpl.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
.
service
.
impl
;
import
cn.com.yict.framemax.core.service.impl.BaseServiceImpl
;
import
cn.com.poc.meeting.service.BizMeetingAssistantAsrTaskService
;
import
cn.com.poc.meeting.model.BizMeetingAssistantAsrTaskModel
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAsrTaskEntity
;
import
cn.com.poc.meeting.convert.BizMeetingAssistantAsrTaskConvert
;
import
cn.com.poc.meeting.repository.BizMeetingAssistantAsrTaskRepository
;
import
cn.com.yict.framemax.data.model.PagingInfo
;
import
org.springframework.stereotype.Service
;
import
org.apache.commons.collections4.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.stream.Collectors
;
import
java.util.List
;
import
javax.annotation.Resource
;
import
org.springframework.util.Assert
;
@Service
public
class
BizMeetingAssistantAsrTaskServiceImpl
extends
BaseServiceImpl
implements
BizMeetingAssistantAsrTaskService
{
@Resource
private
BizMeetingAssistantAsrTaskRepository
repository
;
public
BizMeetingAssistantAsrTaskEntity
get
(
java
.
lang
.
Long
id
)
throws
Exception
{
Assert
.
notNull
(
id
);
BizMeetingAssistantAsrTaskModel
model
=
this
.
repository
.
get
(
id
);
if
(
model
==
null
)
{
return
null
;
}
if
(
"Y"
.
equals
(
model
.
getIsDeleted
()))
{
return
null
;
}
return
BizMeetingAssistantAsrTaskConvert
.
modelToEntity
(
model
);
}
public
List
<
BizMeetingAssistantAsrTaskEntity
>
findByExample
(
BizMeetingAssistantAsrTaskEntity
example
,
PagingInfo
pagingInfo
)
{
List
<
BizMeetingAssistantAsrTaskEntity
>
result
=
new
ArrayList
<
BizMeetingAssistantAsrTaskEntity
>();
BizMeetingAssistantAsrTaskModel
model
=
new
BizMeetingAssistantAsrTaskModel
();
if
(
example
!=
null
)
{
model
=
BizMeetingAssistantAsrTaskConvert
.
entityToModel
(
example
);
}
model
.
setIsDeleted
(
"N"
);
List
<
BizMeetingAssistantAsrTaskModel
>
models
=
this
.
repository
.
findByExample
(
model
,
pagingInfo
);
if
(
CollectionUtils
.
isNotEmpty
(
models
))
{
result
=
models
.
stream
().
map
(
BizMeetingAssistantAsrTaskConvert:
:
modelToEntity
).
collect
(
Collectors
.
toList
());
}
return
result
;
}
public
BizMeetingAssistantAsrTaskEntity
save
(
BizMeetingAssistantAsrTaskEntity
entity
)
throws
Exception
{
Assert
.
notNull
(
entity
);
entity
.
setId
(
null
);
entity
.
setIsDeleted
(
"N"
);
BizMeetingAssistantAsrTaskModel
model
=
BizMeetingAssistantAsrTaskConvert
.
entityToModel
(
entity
);
BizMeetingAssistantAsrTaskModel
saveModel
=
this
.
repository
.
save
(
model
);
return
BizMeetingAssistantAsrTaskConvert
.
modelToEntity
(
saveModel
);
}
public
BizMeetingAssistantAsrTaskEntity
update
(
BizMeetingAssistantAsrTaskEntity
entity
)
{
Assert
.
notNull
(
entity
);
Assert
.
notNull
(
entity
.
getId
(),
"update pk can not be null"
);
BizMeetingAssistantAsrTaskModel
model
=
this
.
repository
.
get
(
entity
.
getId
());
if
(
entity
.
getMemberId
()
!=
null
)
{
model
.
setMemberId
(
entity
.
getMemberId
());
}
if
(
entity
.
getDiaguesId
()
!=
null
)
{
model
.
setDiaguesId
(
entity
.
getDiaguesId
());
}
if
(
entity
.
getSessionId
()
!=
null
)
{
model
.
setSessionId
(
entity
.
getSessionId
());
}
if
(
entity
.
getGenerateStatus
()
!=
null
)
{
model
.
setGenerateStatus
(
entity
.
getGenerateStatus
());
}
if
(
entity
.
getMessage
()
!=
null
)
{
model
.
setMessage
(
entity
.
getMessage
());
}
if
(
entity
.
getIsDeleted
()
!=
null
)
{
model
.
setIsDeleted
(
entity
.
getIsDeleted
());
}
if
(
entity
.
getCreator
()
!=
null
)
{
model
.
setCreator
(
entity
.
getCreator
());
}
if
(
entity
.
getCreatedTime
()
!=
null
)
{
model
.
setCreatedTime
(
entity
.
getCreatedTime
());
}
if
(
entity
.
getModifier
()
!=
null
)
{
model
.
setModifier
(
entity
.
getModifier
());
}
if
(
entity
.
getModifiedTime
()
!=
null
)
{
model
.
setModifiedTime
(
entity
.
getModifiedTime
());
}
if
(
entity
.
getSysVersion
()
!=
null
)
{
model
.
setSysVersion
(
entity
.
getSysVersion
());
}
BizMeetingAssistantAsrTaskModel
saveModel
=
this
.
repository
.
save
(
model
);
return
BizMeetingAssistantAsrTaskConvert
.
modelToEntity
(
saveModel
);
}
public
void
deletedById
(
java
.
lang
.
Long
id
)
throws
Exception
{
Assert
.
notNull
(
id
);
BizMeetingAssistantAsrTaskModel
model
=
this
.
repository
.
get
(
id
);
if
(
model
!=
null
)
{
if
(
"N"
.
equals
(
model
.
getIsDeleted
()))
{
model
.
setIsDeleted
(
"Y"
);
this
.
repository
.
save
(
model
);
}
}
}
}
\ No newline at end of file
src/main/java/cn/com/poc/message/entity/meeting/AnalysisTaskUpdateMessage.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
message
.
entity
.
meeting
;
public
class
AnalysisTaskUpdateMessage
{
/**
* id
*
*/
private
java
.
lang
.
Long
id
;
public
java
.
lang
.
Long
getId
()
{
return
this
.
id
;
}
public
void
setId
(
java
.
lang
.
Long
id
)
{
this
.
id
=
id
;
}
/**
* member_id
* 用户id
*/
private
java
.
lang
.
Long
memberId
;
public
java
.
lang
.
Long
getMemberId
()
{
return
this
.
memberId
;
}
public
void
setMemberId
(
java
.
lang
.
Long
memberId
)
{
this
.
memberId
=
memberId
;
}
/**
* diagues_id
* 会话id
*/
private
java
.
lang
.
String
diaguesId
;
public
java
.
lang
.
String
getDiaguesId
()
{
return
this
.
diaguesId
;
}
public
void
setDiaguesId
(
java
.
lang
.
String
diaguesId
)
{
this
.
diaguesId
=
diaguesId
;
}
/**
* analysis_status
* 内容分析总状态 generate-生成中 completed-完成 failed-失败
*/
private
java
.
lang
.
String
analysisStatus
;
public
java
.
lang
.
String
getAnalysisStatus
()
{
return
this
.
analysisStatus
;
}
public
void
setAnalysisStatus
(
java
.
lang
.
String
analysisStatus
)
{
this
.
analysisStatus
=
analysisStatus
;
}
/**
* theme_content
* 会议主题
*/
private
java
.
lang
.
String
themeContent
;
public
java
.
lang
.
String
getThemeContent
()
{
return
this
.
themeContent
;
}
public
void
setThemeContent
(
java
.
lang
.
String
themeContent
)
{
this
.
themeContent
=
themeContent
;
}
/**
* theme_generate_status
* 会议主题生成状态
*/
private
java
.
lang
.
String
themeGenerateStatus
;
public
java
.
lang
.
String
getThemeGenerateStatus
()
{
return
this
.
themeGenerateStatus
;
}
public
void
setThemeGenerateStatus
(
java
.
lang
.
String
themeGenerateStatus
)
{
this
.
themeGenerateStatus
=
themeGenerateStatus
;
}
/**
* key_word_content
* 关键词
*/
private
java
.
lang
.
String
keyWordContent
;
public
java
.
lang
.
String
getKeyWordContent
()
{
return
this
.
keyWordContent
;
}
public
void
setKeyWordContent
(
java
.
lang
.
String
keyWordContent
)
{
this
.
keyWordContent
=
keyWordContent
;
}
/**
* key_word_generate_status
* 关键词生成状态
*/
private
java
.
lang
.
String
keyWordGenerateStatus
;
public
java
.
lang
.
String
getKeyWordGenerateStatus
()
{
return
this
.
keyWordGenerateStatus
;
}
public
void
setKeyWordGenerateStatus
(
java
.
lang
.
String
keyWordGenerateStatus
)
{
this
.
keyWordGenerateStatus
=
keyWordGenerateStatus
;
}
/**
* meeting_summary_content
* 会议摘要
*/
private
java
.
lang
.
String
meetingSummaryContent
;
public
java
.
lang
.
String
getMeetingSummaryContent
()
{
return
this
.
meetingSummaryContent
;
}
public
void
setMeetingSummaryContent
(
java
.
lang
.
String
meetingSummaryContent
)
{
this
.
meetingSummaryContent
=
meetingSummaryContent
;
}
/**
* meeting_summary_generate_status
* 会议摘要生成状态
*/
private
java
.
lang
.
String
meetingSummaryGenerateStatus
;
public
java
.
lang
.
String
getMeetingSummaryGenerateStatus
()
{
return
this
.
meetingSummaryGenerateStatus
;
}
public
void
setMeetingSummaryGenerateStatus
(
java
.
lang
.
String
meetingSummaryGenerateStatus
)
{
this
.
meetingSummaryGenerateStatus
=
meetingSummaryGenerateStatus
;
}
/**
* featured_questions_generate_status
* 推荐问生成状态
*/
private
java
.
lang
.
String
featuredQuestionsGenerateStatus
;
public
java
.
lang
.
String
getFeaturedQuestionsGenerateStatus
()
{
return
this
.
featuredQuestionsGenerateStatus
;
}
public
void
setFeaturedQuestionsGenerateStatus
(
java
.
lang
.
String
featuredQuestionsGenerateStatus
)
{
this
.
featuredQuestionsGenerateStatus
=
featuredQuestionsGenerateStatus
;
}
/**
* featured_questions
* 推荐问
*/
private
java
.
lang
.
String
featuredQuestions
;
public
java
.
lang
.
String
getFeaturedQuestions
()
{
return
this
.
featuredQuestions
;
}
public
void
setFeaturedQuestions
(
java
.
lang
.
String
featuredQuestions
)
{
this
.
featuredQuestions
=
featuredQuestions
;
}
/**
* is_deleted
* 是否删除 Y 是 N 否
*/
private
java
.
lang
.
String
isDeleted
;
public
java
.
lang
.
String
getIsDeleted
()
{
return
this
.
isDeleted
;
}
public
void
setIsDeleted
(
java
.
lang
.
String
isDeleted
)
{
this
.
isDeleted
=
isDeleted
;
}
@Override
public
String
toString
()
{
return
"AnalysisTaskUpdateMessage{"
+
"id="
+
id
+
", memberId="
+
memberId
+
", diaguesId='"
+
diaguesId
+
'\''
+
", analysisStatus='"
+
analysisStatus
+
'\''
+
", themeContent='"
+
themeContent
+
'\''
+
", themeGenerateStatus='"
+
themeGenerateStatus
+
'\''
+
", keyWordContent='"
+
keyWordContent
+
'\''
+
", keyWordGenerateStatus='"
+
keyWordGenerateStatus
+
'\''
+
", meetingSummaryContent='"
+
meetingSummaryContent
+
'\''
+
", meetingSummaryGenerateStatus='"
+
meetingSummaryGenerateStatus
+
'\''
+
", featuredQuestionsGenerateStatus='"
+
featuredQuestionsGenerateStatus
+
'\''
+
", featuredQuestions='"
+
featuredQuestions
+
'\''
+
", isDeleted='"
+
isDeleted
+
'\''
+
'}'
;
}
}
src/main/java/cn/com/poc/message/entity/meeting/MeetingAssistantAnalysisMessage.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
message
.
entity
.
meeting
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.Translation
;
import
java.util.List
;
public
class
MeetingAssistantAnalysisMessage
{
/**
* 会话id
*/
private
String
diaguesId
;
/**
* 会议识别内容
*/
private
List
<
Translation
>
translations
;
public
String
getDiaguesId
()
{
return
diaguesId
;
}
public
void
setDiaguesId
(
String
diaguesId
)
{
this
.
diaguesId
=
diaguesId
;
}
public
List
<
Translation
>
getTranslations
()
{
return
translations
;
}
public
void
setTranslations
(
List
<
Translation
>
translations
)
{
this
.
translations
=
translations
;
}
}
src/main/java/cn/com/poc/message/entity/meeting/MeetingAssistantGenerateAnalysisContentMessage.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
message
.
entity
.
meeting
;
public
class
MeetingAssistantGenerateAnalysisContentMessage
{
private
String
diaguesId
;
private
String
content
;
public
String
getDiaguesId
()
{
return
diaguesId
;
}
public
void
setDiaguesId
(
String
diaguesId
)
{
this
.
diaguesId
=
diaguesId
;
}
public
String
getContent
()
{
return
content
;
}
public
void
setContent
(
String
content
)
{
this
.
content
=
content
;
}
}
src/main/java/cn/com/poc/message/service/MeetingAssistantAnalysisConsumerService.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
message
.
service
;
import
cn.com.poc.message.entity.meeting.AnalysisTaskUpdateMessage
;
import
cn.com.poc.message.entity.meeting.MeetingAssistantAnalysisMessage
;
import
cn.com.poc.message.entity.meeting.MeetingAssistantGenerateAnalysisContentMessage
;
import
cn.com.yict.framemax.core.service.BaseService
;
public
interface
MeetingAssistantAnalysisConsumerService
extends
BaseService
{
/**
* 执行会议内容分析任务
*/
void
analysisTask
(
MeetingAssistantAnalysisMessage
meetingAssistantAnalysisMessage
)
throws
Exception
;
/**
* 更新会议内容分析任务状态
*/
void
analysisTaskUpdate
(
AnalysisTaskUpdateMessage
message
);
/**
* 生成主题
*/
void
generateTheme
(
MeetingAssistantGenerateAnalysisContentMessage
message
);
/**
* 获取关键词
*/
void
keyWord
(
MeetingAssistantGenerateAnalysisContentMessage
message
);
/**
* 生成摘要
*/
void
generateSummry
(
MeetingAssistantGenerateAnalysisContentMessage
message
);
/**
* 生成推荐问
*/
void
generateFeaturedQuestion
(
MeetingAssistantGenerateAnalysisContentMessage
message
);
}
src/main/java/cn/com/poc/message/service/MeetingAssistantAnalysisProducerService.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
message
.
service
;
import
cn.com.poc.message.entity.meeting.AnalysisTaskUpdateMessage
;
import
cn.com.poc.message.entity.meeting.MeetingAssistantAnalysisMessage
;
import
cn.com.poc.message.entity.meeting.MeetingAssistantGenerateAnalysisContentMessage
;
import
cn.com.yict.framemax.core.service.BaseService
;
public
interface
MeetingAssistantAnalysisProducerService
extends
BaseService
{
/**
* 会议内容分析
*
*/
MeetingAssistantAnalysisMessage
analysisTask
(
MeetingAssistantAnalysisMessage
meetingAssistantAnalysisMessage
);
/**
* 更新会议内容分析任务状态
*/
AnalysisTaskUpdateMessage
analysisTaskUpdate
(
AnalysisTaskUpdateMessage
message
);
/**
* 生成主题
*/
MeetingAssistantGenerateAnalysisContentMessage
generateTheme
(
MeetingAssistantGenerateAnalysisContentMessage
message
);
/**
* 获取关键词
*/
MeetingAssistantGenerateAnalysisContentMessage
keyWord
(
MeetingAssistantGenerateAnalysisContentMessage
message
);
/**
* 生成摘要
*/
MeetingAssistantGenerateAnalysisContentMessage
generateSummry
(
MeetingAssistantGenerateAnalysisContentMessage
message
);
/**
* 生成推荐问
*/
MeetingAssistantGenerateAnalysisContentMessage
generateFeaturedQuestion
(
MeetingAssistantGenerateAnalysisContentMessage
message
);
}
src/main/java/cn/com/poc/message/service/impl/MeetingAssistantAnalysisConsumerServiceImpl.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
message
.
service
.
impl
;
import
cn.com.poc.ai_dialogues.constant.AiDialoguesTypeEnum
;
import
cn.com.poc.ai_dialogues.entity.BizAiDialoguesEntity
;
import
cn.com.poc.ai_dialogues.service.BizAiDialoguesService
;
import
cn.com.poc.common.constant.CommonConstant
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.common.utils.StringUtils
;
import
cn.com.poc.meeting.analysis.FeaturedQuestionAnalyzer
;
import
cn.com.poc.meeting.analysis.KeyWordAnalyzer
;
import
cn.com.poc.meeting.analysis.SummaryAnalyzer
;
import
cn.com.poc.meeting.analysis.ThemeAnalyzer
;
import
cn.com.poc.meeting.cache.KeyWordCounter
;
import
cn.com.poc.meeting.constants.MeetingAssistantConstantEnum
;
import
cn.com.poc.meeting.entity.BizMeetingAssistantAnalysisTaskEntity
;
import
cn.com.poc.meeting.service.BizMeetingAssistantAnalysisTaskService
;
import
cn.com.poc.message.entity.meeting.AnalysisTaskUpdateMessage
;
import
cn.com.poc.message.entity.meeting.MeetingAssistantAnalysisMessage
;
import
cn.com.poc.message.entity.meeting.MeetingAssistantGenerateAnalysisContentMessage
;
import
cn.com.poc.message.service.MeetingAssistantAnalysisConsumerService
;
import
cn.com.poc.message.service.MeetingAssistantAnalysisProducerService
;
import
cn.com.poc.message.topic.MeetingAssistantTopic
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.Translation
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
cn.com.yict.framemax.tumbleweed.client.annotation.Consumer
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.copier.CopyOptions
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
java.util.Map
;
@Service
public
class
MeetingAssistantAnalysisConsumerServiceImpl
implements
MeetingAssistantAnalysisConsumerService
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
MeetingAssistantAnalysisConsumerServiceImpl
.
class
);
@Resource
private
BizMeetingAssistantAnalysisTaskService
bizMeetingAssistantAnalysisTaskService
;
@Resource
private
MeetingAssistantAnalysisProducerService
meetingAssistantAnalysisProducerService
;
@Resource
private
BizAiDialoguesService
bizAiDialoguesService
;
@Override
@Consumer
(
topic
=
MeetingAssistantTopic
.
CONTENT_ANALYSIS
,
scale
=
2
)
public
void
analysisTask
(
MeetingAssistantAnalysisMessage
meetingAssistantAnalysisMessage
)
{
//更新状态
BizMeetingAssistantAnalysisTaskEntity
bizMeetingAssistantAnalysisTaskEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
bizMeetingAssistantAnalysisTaskEntity
.
setDiaguesId
(
meetingAssistantAnalysisMessage
.
getDiaguesId
());
bizMeetingAssistantAnalysisTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAnalysisTaskEntity
>
taskEntities
=
bizMeetingAssistantAnalysisTaskService
.
findByExample
(
bizMeetingAssistantAnalysisTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
taskEntities
))
{
throw
new
BusinessException
(
"无法找到对应的会议内容分析任务"
);
}
BizMeetingAssistantAnalysisTaskEntity
taskEntity
=
taskEntities
.
get
(
0
);
if
(
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
().
equals
(
taskEntity
.
getAnalysisStatus
()))
{
logger
.
info
(
"------------ 任务已完成,无需重复生成 ,diaguesId:{}------------"
,
meetingAssistantAnalysisMessage
.
getDiaguesId
());
return
;
}
StringBuilder
contentsBuilder
=
new
StringBuilder
();
List
<
Translation
>
translations
=
meetingAssistantAnalysisMessage
.
getTranslations
();
for
(
Translation
translation
:
translations
)
{
Long
spk
=
translation
.
getSpk
();
String
content
=
translation
.
getContent
();
contentsBuilder
.
append
(
spk
).
append
(
":"
).
append
(
content
).
append
(
StringUtils
.
LF
);
}
MeetingAssistantGenerateAnalysisContentMessage
analysisContentMessage
=
new
MeetingAssistantGenerateAnalysisContentMessage
();
analysisContentMessage
.
setContent
(
contentsBuilder
.
toString
());
analysisContentMessage
.
setDiaguesId
(
meetingAssistantAnalysisMessage
.
getDiaguesId
());
if
(
StringUtils
.
isBlank
(
taskEntity
.
getFeaturedQuestionsGenerateStatus
())
||
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
taskEntity
.
getFeaturedQuestionsGenerateStatus
()))
{
meetingAssistantAnalysisProducerService
.
generateFeaturedQuestion
(
analysisContentMessage
);
taskEntity
.
setFeaturedQuestionsGenerateStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
}
// if (StringUtils.isBlank(taskEntity.getThemeGenerateStatus())
// || MeetingAssistantConstantEnum.FAILED.getStatus().equals(taskEntity.getThemeGenerateStatus())) {
// meetingAssistantAnalysisProducerService.generateTheme(analysisContentMessage);
// taskEntity.setThemeGenerateStatus(MeetingAssistantConstantEnum.GENERATE.getStatus());
// }
if
(
StringUtils
.
isBlank
(
taskEntity
.
getMeetingSummaryGenerateStatus
())
||
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
taskEntity
.
getMeetingSummaryGenerateStatus
()))
{
meetingAssistantAnalysisProducerService
.
generateSummry
(
analysisContentMessage
);
taskEntity
.
setMeetingSummaryGenerateStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
}
if
(
StringUtils
.
isBlank
(
taskEntity
.
getKeyWordGenerateStatus
())
||
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
taskEntity
.
getKeyWordGenerateStatus
()))
{
meetingAssistantAnalysisProducerService
.
keyWord
(
analysisContentMessage
);
taskEntity
.
setKeyWordGenerateStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
}
logger
.
info
(
"---- 更新会议内容分析任务状态 ,entity:{}------"
,
JsonUtils
.
serialize
(
bizMeetingAssistantAnalysisTaskEntity
));
taskEntity
.
setAnalysisStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
bizMeetingAssistantAnalysisTaskService
.
update
(
taskEntity
);
}
@Override
@Consumer
(
topic
=
MeetingAssistantTopic
.
UPDATE_ANALYSIS
,
retry
=
true
)
public
void
analysisTaskUpdate
(
AnalysisTaskUpdateMessage
message
)
{
logger
.
info
(
"-------- update meeting assistant analysis task , message:{} "
,
message
);
Long
id
=
message
.
getId
();
BizMeetingAssistantAnalysisTaskEntity
bizMeetingAssistantAnalysisTaskEntity
=
bizMeetingAssistantAnalysisTaskService
.
get
(
id
);
if
(
bizMeetingAssistantAnalysisTaskEntity
==
null
)
{
logger
.
error
(
"------------- can not find meeting assistant analysis task , id:{} -------------"
,
id
);
return
;
}
CopyOptions
copyOptions
=
new
CopyOptions
();
copyOptions
.
setIgnoreNullValue
(
true
);
BeanUtil
.
copyProperties
(
message
,
bizMeetingAssistantAnalysisTaskEntity
,
copyOptions
);
logger
.
info
(
"-------- update meeting meeting assistant analysis , entity:{}----------"
,
bizMeetingAssistantAnalysisTaskEntity
);
if
(
checkAllIsCompleted
(
bizMeetingAssistantAnalysisTaskEntity
))
{
bizMeetingAssistantAnalysisTaskEntity
.
setAnalysisStatus
(
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
());
}
else
if
(
checkExistFaild
(
bizMeetingAssistantAnalysisTaskEntity
))
{
bizMeetingAssistantAnalysisTaskEntity
.
setAnalysisStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
}
bizMeetingAssistantAnalysisTaskService
.
update
(
bizMeetingAssistantAnalysisTaskEntity
);
//更新会话标题
logger
.
info
(
"-------- update dialogues title -------------"
);
BizAiDialoguesEntity
bizAiDialoguesEntity
=
new
BizAiDialoguesEntity
();
bizAiDialoguesEntity
.
setDialoguesId
(
bizMeetingAssistantAnalysisTaskEntity
.
getDiaguesId
());
bizAiDialoguesEntity
.
setDialoguesType
(
AiDialoguesTypeEnum
.
MEETING_ASSISTANT
.
getType
());
bizAiDialoguesEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizAiDialoguesEntity
>
aiDialoguesEntities
=
bizAiDialoguesService
.
findByExample
(
bizAiDialoguesEntity
,
null
);
if
(
CollectionUtils
.
isNotEmpty
(
aiDialoguesEntities
))
{
BizAiDialoguesEntity
updateAiDialoguesEntity
=
aiDialoguesEntities
.
get
(
0
);
if
(
StringUtils
.
isNotBlank
(
bizMeetingAssistantAnalysisTaskEntity
.
getThemeContent
())
&&
!
bizMeetingAssistantAnalysisTaskEntity
.
getThemeContent
().
equals
(
updateAiDialoguesEntity
.
getTitle
()))
{
updateAiDialoguesEntity
.
setTitle
(
bizMeetingAssistantAnalysisTaskEntity
.
getThemeContent
());
bizAiDialoguesService
.
update
(
updateAiDialoguesEntity
);
logger
.
info
(
"------- update dialogues title success , title:{} -----------"
,
updateAiDialoguesEntity
.
getTitle
());
}
}
}
@Override
@Consumer
(
topic
=
MeetingAssistantTopic
.
GENERATE_FEATURED_QUESTION
,
retry
=
true
,
scale
=
2
)
public
void
generateFeaturedQuestion
(
MeetingAssistantGenerateAnalysisContentMessage
message
)
{
// 执行处理器
FeaturedQuestionAnalyzer
featuredQuestionAnalyzer
=
new
FeaturedQuestionAnalyzer
();
List
<
String
>
featuredQuestionList
=
featuredQuestionAnalyzer
.
run
(
message
.
getContent
());
// 更新状态
BizMeetingAssistantAnalysisTaskEntity
bizMeetingAssistantAnalysisTaskEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
bizMeetingAssistantAnalysisTaskEntity
.
setDiaguesId
(
message
.
getDiaguesId
());
bizMeetingAssistantAnalysisTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAnalysisTaskEntity
>
taskEntities
=
bizMeetingAssistantAnalysisTaskService
.
findByExample
(
bizMeetingAssistantAnalysisTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
taskEntities
))
{
throw
new
BusinessException
(
"无法找到对应的会议内容分析任务"
);
}
BizMeetingAssistantAnalysisTaskEntity
taskEntity
=
taskEntities
.
get
(
0
);
// 发送更新消息
AnalysisTaskUpdateMessage
updateMessage
=
new
AnalysisTaskUpdateMessage
();
updateMessage
.
setId
(
taskEntity
.
getId
());
if
(
CollectionUtils
.
isNotEmpty
(
featuredQuestionList
))
{
updateMessage
.
setFeaturedQuestionsGenerateStatus
(
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
());
updateMessage
.
setFeaturedQuestions
(
JsonUtils
.
serialize
(
featuredQuestionList
));
}
else
{
updateMessage
.
setFeaturedQuestionsGenerateStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
}
meetingAssistantAnalysisProducerService
.
analysisTaskUpdate
(
updateMessage
);
}
@Override
@Consumer
(
topic
=
MeetingAssistantTopic
.
GENERATE_SUMMARY
,
scale
=
2
)
public
void
generateSummry
(
MeetingAssistantGenerateAnalysisContentMessage
message
)
{
SummaryAnalyzer
summaryAnalyzer
=
new
SummaryAnalyzer
();
String
summary
=
summaryAnalyzer
.
run
(
message
.
getContent
());
// 更新状态
BizMeetingAssistantAnalysisTaskEntity
bizMeetingAssistantAnalysisTaskEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
bizMeetingAssistantAnalysisTaskEntity
.
setDiaguesId
(
message
.
getDiaguesId
());
bizMeetingAssistantAnalysisTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAnalysisTaskEntity
>
taskEntities
=
bizMeetingAssistantAnalysisTaskService
.
findByExample
(
bizMeetingAssistantAnalysisTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
taskEntities
))
{
throw
new
BusinessException
(
"无法找到对应的会议内容分析任务"
);
}
BizMeetingAssistantAnalysisTaskEntity
taskEntity
=
taskEntities
.
get
(
0
);
// 发送更新消息
AnalysisTaskUpdateMessage
updateMessage
=
new
AnalysisTaskUpdateMessage
();
updateMessage
.
setId
(
taskEntity
.
getId
());
if
(
StringUtils
.
isNotBlank
(
summary
))
{
updateMessage
.
setMeetingSummaryGenerateStatus
(
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
());
updateMessage
.
setMeetingSummaryContent
(
summary
);
}
else
{
updateMessage
.
setMeetingSummaryGenerateStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
}
meetingAssistantAnalysisProducerService
.
analysisTaskUpdate
(
updateMessage
);
if
(
StringUtils
.
isBlank
(
taskEntity
.
getThemeGenerateStatus
())
||
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
taskEntity
.
getThemeGenerateStatus
()))
{
MeetingAssistantGenerateAnalysisContentMessage
meetingAssistantGenerateAnalysisContentMessage
=
new
MeetingAssistantGenerateAnalysisContentMessage
();
meetingAssistantGenerateAnalysisContentMessage
.
setContent
(
summary
);
meetingAssistantGenerateAnalysisContentMessage
.
setDiaguesId
(
message
.
getDiaguesId
());
meetingAssistantAnalysisProducerService
.
generateTheme
(
meetingAssistantGenerateAnalysisContentMessage
);
taskEntity
.
setThemeGenerateStatus
(
MeetingAssistantConstantEnum
.
GENERATE
.
getStatus
());
}
}
@Override
@Consumer
(
topic
=
MeetingAssistantTopic
.
GENERATE_KEYWORD
,
scale
=
2
)
public
void
keyWord
(
MeetingAssistantGenerateAnalysisContentMessage
message
)
{
KeyWordAnalyzer
keyWordAnalyzer
=
new
KeyWordAnalyzer
();
List
<
String
>
keyWords
=
keyWordAnalyzer
.
run
(
message
.
getContent
());
BizMeetingAssistantAnalysisTaskEntity
bizMeetingAssistantAnalysisTaskEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
bizMeetingAssistantAnalysisTaskEntity
.
setDiaguesId
(
message
.
getDiaguesId
());
bizMeetingAssistantAnalysisTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAnalysisTaskEntity
>
taskEntities
=
bizMeetingAssistantAnalysisTaskService
.
findByExample
(
bizMeetingAssistantAnalysisTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
taskEntities
))
{
throw
new
BusinessException
(
"无法找到对应的会议内容分析任务"
);
}
BizMeetingAssistantAnalysisTaskEntity
taskEntity
=
taskEntities
.
get
(
0
);
// 发送更新消息
AnalysisTaskUpdateMessage
updateMessage
=
new
AnalysisTaskUpdateMessage
();
updateMessage
.
setId
(
taskEntity
.
getId
());
if
(
CollectionUtils
.
isNotEmpty
(
keyWords
))
{
// 关键词计数
Map
<
String
,
Integer
>
countMap
=
KeyWordCounter
.
keywordCount
(
message
.
getContent
(),
keyWords
);
KeyWordCounter
.
cacheKeyWordCount
(
message
.
getDiaguesId
(),
countMap
);
updateMessage
.
setKeyWordGenerateStatus
(
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
());
updateMessage
.
setKeyWordContent
(
JsonUtils
.
serialize
(
countMap
.
entrySet
()));
}
else
{
updateMessage
.
setKeyWordGenerateStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
}
meetingAssistantAnalysisProducerService
.
analysisTaskUpdate
(
updateMessage
);
}
@Override
@Consumer
(
topic
=
MeetingAssistantTopic
.
GENERATE_THEME
,
scale
=
2
)
public
void
generateTheme
(
MeetingAssistantGenerateAnalysisContentMessage
message
)
{
ThemeAnalyzer
themeAnalyzer
=
new
ThemeAnalyzer
();
String
theme
=
themeAnalyzer
.
run
(
message
.
getContent
());
// 更新状态
BizMeetingAssistantAnalysisTaskEntity
bizMeetingAssistantAnalysisTaskEntity
=
new
BizMeetingAssistantAnalysisTaskEntity
();
bizMeetingAssistantAnalysisTaskEntity
.
setDiaguesId
(
message
.
getDiaguesId
());
bizMeetingAssistantAnalysisTaskEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizMeetingAssistantAnalysisTaskEntity
>
taskEntities
=
bizMeetingAssistantAnalysisTaskService
.
findByExample
(
bizMeetingAssistantAnalysisTaskEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
taskEntities
))
{
throw
new
BusinessException
(
"无法找到对应的会议内容分析任务"
);
}
BizMeetingAssistantAnalysisTaskEntity
taskEntity
=
taskEntities
.
get
(
0
);
// 发送更新消息
AnalysisTaskUpdateMessage
updateMessage
=
new
AnalysisTaskUpdateMessage
();
updateMessage
.
setId
(
taskEntity
.
getId
());
if
(
StringUtils
.
isNotBlank
(
theme
))
{
updateMessage
.
setThemeGenerateStatus
(
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
());
updateMessage
.
setThemeContent
(
theme
);
}
else
{
updateMessage
.
setThemeGenerateStatus
(
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
());
}
meetingAssistantAnalysisProducerService
.
analysisTaskUpdate
(
updateMessage
);
}
/**
* 检查是否全部已经完成
*
* @param taskEntity
* @return
*/
private
boolean
checkAllIsCompleted
(
BizMeetingAssistantAnalysisTaskEntity
taskEntity
)
{
// 所有皆完成
return
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
().
equals
(
taskEntity
.
getFeaturedQuestionsGenerateStatus
())
&&
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
().
equals
(
taskEntity
.
getMeetingSummaryGenerateStatus
())
&&
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
().
equals
(
taskEntity
.
getKeyWordGenerateStatus
())
&&
MeetingAssistantConstantEnum
.
COMPLETED
.
getStatus
().
equals
(
taskEntity
.
getThemeGenerateStatus
());
}
/**
* 检查是否存在失败任务
*
* @param taskEntity
* @return
*/
private
boolean
checkExistFaild
(
BizMeetingAssistantAnalysisTaskEntity
taskEntity
)
{
return
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
taskEntity
.
getFeaturedQuestionsGenerateStatus
())
||
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
taskEntity
.
getMeetingSummaryGenerateStatus
())
||
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
taskEntity
.
getKeyWordGenerateStatus
())
||
MeetingAssistantConstantEnum
.
FAILED
.
getStatus
().
equals
(
taskEntity
.
getThemeGenerateStatus
());
}
}
src/main/java/cn/com/poc/message/service/impl/MeetingAssistantAnalysisProducerServiceImpl.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
message
.
service
.
impl
;
import
cn.com.poc.message.entity.meeting.AnalysisTaskUpdateMessage
;
import
cn.com.poc.message.entity.meeting.MeetingAssistantAnalysisMessage
;
import
cn.com.poc.message.entity.meeting.MeetingAssistantGenerateAnalysisContentMessage
;
import
cn.com.poc.message.service.MeetingAssistantAnalysisProducerService
;
import
cn.com.poc.message.topic.MeetingAssistantTopic
;
import
cn.com.yict.framemax.tumbleweed.client.annotation.Producer
;
import
org.springframework.stereotype.Service
;
@Service
public
class
MeetingAssistantAnalysisProducerServiceImpl
implements
MeetingAssistantAnalysisProducerService
{
@Override
@Producer
(
topic
=
MeetingAssistantTopic
.
CONTENT_ANALYSIS
)
public
MeetingAssistantAnalysisMessage
analysisTask
(
MeetingAssistantAnalysisMessage
meetingAssistantAnalysisMessage
)
{
return
meetingAssistantAnalysisMessage
;
}
@Override
@Producer
(
topic
=
MeetingAssistantTopic
.
UPDATE_ANALYSIS
)
public
AnalysisTaskUpdateMessage
analysisTaskUpdate
(
AnalysisTaskUpdateMessage
message
)
{
return
message
;
}
@Override
@Producer
(
topic
=
MeetingAssistantTopic
.
GENERATE_FEATURED_QUESTION
)
public
MeetingAssistantGenerateAnalysisContentMessage
generateFeaturedQuestion
(
MeetingAssistantGenerateAnalysisContentMessage
message
)
{
return
message
;
}
@Override
@Producer
(
topic
=
MeetingAssistantTopic
.
GENERATE_SUMMARY
)
public
MeetingAssistantGenerateAnalysisContentMessage
generateSummry
(
MeetingAssistantGenerateAnalysisContentMessage
message
)
{
return
message
;
}
@Override
@Producer
(
topic
=
MeetingAssistantTopic
.
GENERATE_KEYWORD
)
public
MeetingAssistantGenerateAnalysisContentMessage
keyWord
(
MeetingAssistantGenerateAnalysisContentMessage
message
)
{
return
message
;
}
@Override
@Producer
(
topic
=
MeetingAssistantTopic
.
GENERATE_THEME
)
public
MeetingAssistantGenerateAnalysisContentMessage
generateTheme
(
MeetingAssistantGenerateAnalysisContentMessage
message
)
{
return
message
;
}
}
src/main/java/cn/com/poc/message/topic/MeetingAssistantTopic.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
message
.
topic
;
/**
* 会议助手-消息主题
*/
public
interface
MeetingAssistantTopic
{
/**
* 更新分析任务状态
*/
String
UPDATE_ANALYSIS
=
"UPDATE_ANALYSIS"
;
/**
* 会议内容分析任务
*/
String
CONTENT_ANALYSIS
=
"MEETING_ASSISTANT_CONTENT_ANALYSIS"
;
/**
* 生成主题
*/
String
GENERATE_THEME
=
"GENERATE_THEME"
;
/**
* 提取关键词
*/
String
GENERATE_KEYWORD
=
"GENERATE_KEYWORD"
;
/**
* 生成会议摘要
*/
String
GENERATE_SUMMARY
=
"GENERATE_SUMMARY"
;
/**
* 生成推荐问
*/
String
GENERATE_FEATURED_QUESTION
=
"GENERATE_FEATURED_QUESTION"
;
}
src/main/java/cn/com/poc/portal/dto/PortalDialoguesDto.java
View file @
35fdab75
...
@@ -28,12 +28,12 @@ public class PortalDialoguesDto {
...
@@ -28,12 +28,12 @@ public class PortalDialoguesDto {
/**
/**
* 是否启用搜索引擎
* 是否启用搜索引擎
*/
*/
private
B
oolean
enableSearchEngine
;
private
b
oolean
enableSearchEngine
;
/**
/**
* 是否开启深度思考
* 是否开启深度思考
*/
*/
private
B
oolean
enableDeepThinking
;
private
b
oolean
enableDeepThinking
;
/**
/**
* 文件地址
* 文件地址
...
@@ -69,11 +69,11 @@ public class PortalDialoguesDto {
...
@@ -69,11 +69,11 @@ public class PortalDialoguesDto {
this
.
dialoguesId
=
dialoguesId
;
this
.
dialoguesId
=
dialoguesId
;
}
}
public
B
oolean
getEnableSearchEngine
()
{
public
b
oolean
getEnableSearchEngine
()
{
return
enableSearchEngine
;
return
enableSearchEngine
;
}
}
public
void
setEnableSearchEngine
(
B
oolean
enableSearchEngine
)
{
public
void
setEnableSearchEngine
(
b
oolean
enableSearchEngine
)
{
this
.
enableSearchEngine
=
enableSearchEngine
;
this
.
enableSearchEngine
=
enableSearchEngine
;
}
}
...
...
src/main/java/cn/com/poc/thirdparty/resource/baidu/api/BaiduTextDiffApi.java
View file @
35fdab75
...
@@ -53,7 +53,6 @@ public class BaiduTextDiffApi implements BaiduBaseApi {
...
@@ -53,7 +53,6 @@ public class BaiduTextDiffApi implements BaiduBaseApi {
.
addFormDataPart
(
"baseFileURL"
,
response
.
getBaseFileURL
())
.
addFormDataPart
(
"baseFileURL"
,
response
.
getBaseFileURL
())
.
addFormDataPart
(
"compareFileURL"
,
response
.
getCompareFileURL
());
.
addFormDataPart
(
"compareFileURL"
,
response
.
getCompareFileURL
());
}
else
{
}
else
{
;
RequestBody
baseFile
=
RequestBody
.
create
(
MediaType
.
parse
(
Objects
.
requireNonNull
(
Files
.
probeContentType
(
response
.
getBaseFile
().
toPath
()))),
response
.
getBaseFile
());
RequestBody
baseFile
=
RequestBody
.
create
(
MediaType
.
parse
(
Objects
.
requireNonNull
(
Files
.
probeContentType
(
response
.
getBaseFile
().
toPath
()))),
response
.
getBaseFile
());
RequestBody
compareFile
=
RequestBody
.
create
(
MediaType
.
parse
(
Objects
.
requireNonNull
(
Files
.
probeContentType
(
response
.
getBaseFile
().
toPath
()))),
response
.
getCompareFile
());
RequestBody
compareFile
=
RequestBody
.
create
(
MediaType
.
parse
(
Objects
.
requireNonNull
(
Files
.
probeContentType
(
response
.
getBaseFile
().
toPath
()))),
response
.
getCompareFile
());
builder
=
builder
.
addFormDataPart
(
"baseFile"
,
response
.
getBaseFile
().
getName
(),
baseFile
)
builder
=
builder
.
addFormDataPart
(
"baseFile"
,
response
.
getBaseFile
().
getName
(),
baseFile
)
...
...
src/main/java/cn/com/poc/thirdparty/resource/simultanous_interpretation/api/ASRApi.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
simultanous_interpretation
.
api
;
import
cn.com.poc.common.utils.Assert
;
import
cn.com.poc.common.utils.http.LocalHttpClient
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.AsrOfflineDetailResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.GetDetailResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.SpeechToTextResult
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
com.google.gson.Gson
;
import
okhttp3.*
;
import
org.apache.http.HttpHeaders
;
import
org.apache.http.client.methods.HttpUriRequest
;
import
org.apache.http.client.methods.RequestBuilder
;
import
org.apache.http.entity.ContentType
;
import
org.apache.http.message.BasicHeader
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.io.File
;
import
java.io.IOException
;
import
java.nio.file.Files
;
import
java.util.Objects
;
import
java.util.concurrent.TimeUnit
;
/**
* 语音识别接口
*/
@Component
public
class
ASRApi
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ASRApi
.
class
);
@Value
(
"${simultanous_interpretation.endpoint}"
)
private
String
ENDPOINT
;
private
String
SPEECH_TO_TEXT_API
=
"/api/rest/asrRest/speechToText.json"
;
private
String
GET_DETAIL_API
=
"/api/rest/asrRest/getDetail.json"
;
public
final
OkHttpClient
HTTP_CLIENT
=
new
OkHttpClient
().
newBuilder
()
.
readTimeout
(
15
,
TimeUnit
.
SECONDS
)
.
build
();
/**
* 语音识别 / 离线文件
*
* @param sessionId 唯一主键ID 长度不超过200位字符
* @param file 音频文件 不超过500M
* @return "success"提交成功
*/
public
SpeechToTextResult
speechToText
(
String
sessionId
,
File
file
)
{
Assert
.
notBlank
(
sessionId
);
Assert
.
notNull
(
file
);
MultipartBody
.
Builder
builder
=
new
MultipartBody
.
Builder
().
setType
(
MultipartBody
.
FORM
);
try
{
RequestBody
baseFile
=
RequestBody
.
create
(
MediaType
.
parse
(
Objects
.
requireNonNull
(
Files
.
probeContentType
(
file
.
toPath
()))),
file
);
builder
.
addFormDataPart
(
"sessionId"
,
sessionId
);
builder
.
addFormDataPart
(
"audio"
,
file
.
getName
(),
baseFile
);
MultipartBody
body
=
builder
.
build
();
Request
request
=
new
Request
.
Builder
()
.
url
(
ENDPOINT
+
SPEECH_TO_TEXT_API
)
.
method
(
"POST"
,
body
)
.
addHeader
(
"Content-Type"
,
"multipart/form-data"
)
.
build
();
String
result
=
Objects
.
requireNonNull
(
HTTP_CLIENT
.
newCall
(
request
).
execute
().
body
()).
string
();
Gson
gson
=
new
Gson
();
return
gson
.
fromJson
(
result
,
SpeechToTextResult
.
class
);
}
catch
(
IOException
e
)
{
logger
.
error
(
"调用ASR失败"
,
e
);
throw
new
BusinessException
(
"调用ASR失败"
);
}
}
/**
* 获取离线语音识别状态
*
* @param sessionId 唯一主键
* @return
*/
public
GetDetailResult
getDetail
(
String
sessionId
)
{
Assert
.
notBlank
(
sessionId
);
HttpUriRequest
httpUriRequest
=
RequestBuilder
.
post
()
.
setUri
(
ENDPOINT
+
GET_DETAIL_API
)
// .addHeader(new BasicHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()))
.
addParameter
(
"sessionId"
,
sessionId
)
.
build
();
return
LocalHttpClient
.
executeJsonResult
(
httpUriRequest
,
GetDetailResult
.
class
);
}
}
src/main/java/cn/com/poc/thirdparty/resource/simultanous_interpretation/entity/AsrOfflineDetailResult.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
simultanous_interpretation
.
entity
;
import
java.util.List
;
/**
* 离线语音识别状态
*
* @author alex.yao
* @date 2025/7/22
*/
public
class
AsrOfflineDetailResult
{
private
String
sessionId
;
/**
* 生成状态
* MeetingAssistantConstantEnum
*/
private
String
generateStatus
;
private
List
<
Translation
>
translation
;
public
String
getSessionId
()
{
return
sessionId
;
}
public
void
setSessionId
(
String
sessionId
)
{
this
.
sessionId
=
sessionId
;
}
public
String
getGenerateStatus
()
{
return
generateStatus
;
}
public
void
setGenerateStatus
(
String
generateStatus
)
{
this
.
generateStatus
=
generateStatus
;
}
public
List
<
Translation
>
getTranslation
()
{
return
translation
;
}
public
void
setTranslation
(
List
<
Translation
>
translation
)
{
this
.
translation
=
translation
;
}
}
src/main/java/cn/com/poc/thirdparty/resource/simultanous_interpretation/entity/BaseResult.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
simultanous_interpretation
.
entity
;
public
class
BaseResult
{
private
Long
code
;
private
String
message
;
public
Long
getCode
()
{
return
code
;
}
public
void
setCode
(
Long
code
)
{
this
.
code
=
code
;
}
public
String
getMessage
()
{
return
message
;
}
public
void
setMessage
(
String
message
)
{
this
.
message
=
message
;
}
}
src/main/java/cn/com/poc/thirdparty/resource/simultanous_interpretation/entity/GetDetailResult.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
simultanous_interpretation
.
entity
;
public
class
GetDetailResult
extends
BaseResult
{
private
AsrOfflineDetailResult
data
;
public
AsrOfflineDetailResult
getData
()
{
return
data
;
}
public
void
setData
(
AsrOfflineDetailResult
data
)
{
this
.
data
=
data
;
}
}
src/main/java/cn/com/poc/thirdparty/resource/simultanous_interpretation/entity/SpeechToTextResult.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
simultanous_interpretation
.
entity
;
public
class
SpeechToTextResult
extends
BaseResult
{
private
String
data
;
public
String
getData
()
{
return
data
;
}
public
void
setData
(
String
data
)
{
this
.
data
=
data
;
}
}
src/main/java/cn/com/poc/thirdparty/resource/simultanous_interpretation/entity/Translation.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
simultanous_interpretation
.
entity
;
/**
* @author alex.yao
* @date 2025/7/22
*/
public
class
Translation
{
private
Long
number
;
private
Long
startTime
;
private
Long
endTime
;
private
Long
spk
;
private
String
content
;
public
Long
getNumber
()
{
return
number
;
}
public
void
setNumber
(
Long
number
)
{
this
.
number
=
number
;
}
public
Long
getStartTime
()
{
return
startTime
;
}
public
void
setStartTime
(
Long
startTime
)
{
this
.
startTime
=
startTime
;
}
public
Long
getEndTime
()
{
return
endTime
;
}
public
void
setEndTime
(
Long
endTime
)
{
this
.
endTime
=
endTime
;
}
public
Long
getSpk
()
{
return
spk
;
}
public
void
setSpk
(
Long
spk
)
{
this
.
spk
=
spk
;
}
public
String
getContent
()
{
return
content
;
}
public
void
setContent
(
String
content
)
{
this
.
content
=
content
;
}
}
src/main/java/cn/com/poc/thirdparty/resource/simultanous_interpretation/service/ASRService.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
simultanous_interpretation
.
service
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.AsrOfflineDetailResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.GetDetailResult
;
/**
* 语音识别服务
*/
public
interface
ASRService
{
/**
* 语音识别 / 离线文件
*
* @param sessionId 唯一主键ID 长度不超过200位字符
* @param fileUrl 音频文件地址 文件不超过500M
* @return "success"提交成功
*/
String
speechToText
(
String
sessionId
,
String
fileUrl
);
/**
* 获取离线语音识别状态
*
* @param sessionId 唯一主键
* @return
*/
AsrOfflineDetailResult
getDetail
(
String
sessionId
);
/**
* 获取离线语音识别状态 - 响应所有信息 [code,message,data]
*
* @param sessionId 唯一主键
* @return
*/
GetDetailResult
getDetailByFullInformation
(
String
sessionId
);
}
src/main/java/cn/com/poc/thirdparty/resource/simultanous_interpretation/service/impl/ASRServiceImpl.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
simultanous_interpretation
.
service
.
impl
;
import
cn.com.poc.common.utils.DocumentLoad
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.api.ASRApi
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.AsrOfflineDetailResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.GetDetailResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.SpeechToTextResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.service.ASRService
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.io.File
;
@Service
public
class
ASRServiceImpl
implements
ASRService
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ASRServiceImpl
.
class
);
@Resource
private
ASRApi
asrApi
;
@Override
public
AsrOfflineDetailResult
getDetail
(
String
sessionId
)
{
GetDetailResult
detail
=
asrApi
.
getDetail
(
sessionId
);
if
(
detail
==
null
)
{
logger
.
error
(
"---- 查询语音识别任务异常,响应结果为空 --------"
);
throw
new
BusinessException
(
"查询语音识别任务异常"
);
}
if
(
0
!=
detail
.
getCode
())
{
logger
.
error
(
"---- 查询语音识别任务异常,message:{} -----"
,
detail
.
getMessage
());
throw
new
BusinessException
(
"查询语音识别任务异常"
);
}
return
detail
.
getData
();
}
@Override
public
GetDetailResult
getDetailByFullInformation
(
String
sessionId
)
{
return
asrApi
.
getDetail
(
sessionId
);
}
@Override
public
String
speechToText
(
String
sessionId
,
String
fileUrl
)
{
File
file
=
DocumentLoad
.
downloadURLDocument
(
fileUrl
);
SpeechToTextResult
speechToTextResult
=
asrApi
.
speechToText
(
sessionId
,
file
);
if
(
speechToTextResult
==
null
)
{
logger
.
error
(
"-------- 语音识别任务异常,响应结果为空 ---------"
);
throw
new
BusinessException
(
"语音识别任务异常"
);
}
if
(
0
!=
speechToTextResult
.
getCode
())
{
logger
.
error
(
"---- 语音识别任务异常,message:{} -----"
,
speechToTextResult
.
getMessage
());
throw
new
BusinessException
(
"语音识别任务异常"
);
}
return
speechToTextResult
.
getData
();
}
}
src/main/java/cn/com/poc/writing/aggregate/AiWritingService.java
View file @
35fdab75
...
@@ -22,8 +22,10 @@ public interface AiWritingService {
...
@@ -22,8 +22,10 @@ public interface AiWritingService {
* @param input
* @param input
* @param knowledgeIds
* @param knowledgeIds
* @param userId
* @param userId
* @param enableSearchEngine
* @param enableDeepThinking
*/
*/
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
)
throws
Exception
;
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
,
Boolean
enableSearchEngine
,
Boolean
enableDeepThinking
)
throws
Exception
;
/**
/**
...
...
src/main/java/cn/com/poc/writing/aggregate/impl/AiWritingServiceImpl.java
View file @
35fdab75
package
cn
.
com
.
poc
.
writing
.
aggregate
.
impl
;
package
cn
.
com
.
poc
.
writing
.
aggregate
.
impl
;
import
cn.com.poc.agent_application.entity.CheckPluginUseEntity
;
import
cn.com.poc.agent_application.utils.AgentApplicationTools
;
import
cn.com.poc.expose.dto.DialoguesContextDto
;
import
cn.com.poc.expose.dto.DialoguesContextDto
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.FunctionCall
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.ToolFunction
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.web_seach.WebSearchFunction
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.web_seach.WebSearchFunctionResult
;
import
cn.com.poc.writing.dto.AiWritingDialoguesContextDto
;
import
cn.com.poc.writing.dto.AiWritingDialoguesContextDto
;
import
cn.com.poc.writing.entity.BizAiWritingDialoguesRecordEntity
;
import
cn.com.poc.writing.entity.BizAiWritingDialoguesRecordEntity
;
import
cn.com.poc.writing.query.AiWritingDialoguesRecordQueryItem
;
import
cn.com.poc.writing.query.AiWritingDialoguesRecordQueryItem
;
...
@@ -42,6 +51,7 @@ import cn.com.poc.writing.service.BizAiWritingExampleTypeService;
...
@@ -42,6 +51,7 @@ import cn.com.poc.writing.service.BizAiWritingExampleTypeService;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.jetbrains.annotations.Nullable
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -92,9 +102,12 @@ public class AiWritingServiceImpl implements AiWritingService {
...
@@ -92,9 +102,12 @@ public class AiWritingServiceImpl implements AiWritingService {
@Resource
@Resource
private
BizAiWritingExampleTypeService
bizAiWritingExampleTypeService
;
private
BizAiWritingExampleTypeService
bizAiWritingExampleTypeService
;
@Resource
private
WebSearchFunction
webSearchFunction
;
@Override
@Override
public
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
)
throws
Exception
{
public
void
call
(
String
dialoguesId
,
String
fileUrl
,
String
input
,
Integer
[]
knowledgeIds
,
Long
userId
,
Boolean
enableSearchEngine
,
Boolean
enableDeepThinking
)
throws
Exception
{
BizAiDialoguesEntity
bizAiDialoguesEntity
=
new
BizAiDialoguesEntity
();
BizAiDialoguesEntity
bizAiDialoguesEntity
=
new
BizAiDialoguesEntity
();
bizAiDialoguesEntity
.
setDialoguesId
(
dialoguesId
);
bizAiDialoguesEntity
.
setDialoguesId
(
dialoguesId
);
bizAiDialoguesEntity
.
setMemberId
(
userId
);
bizAiDialoguesEntity
.
setMemberId
(
userId
);
...
@@ -168,10 +181,14 @@ public class AiWritingServiceImpl implements AiWritingService {
...
@@ -168,10 +181,14 @@ public class AiWritingServiceImpl implements AiWritingService {
sseUtil
.
send
(
JsonUtils
.
serialize
(
aiWritingTitleGenerationDto
));
sseUtil
.
send
(
JsonUtils
.
serialize
(
aiWritingTitleGenerationDto
));
}
}
// 插件调用
ToolFunction
toolFunction
=
getToolFunction
(
dialoguesId
,
input
,
enableSearchEngine
,
sseUtil
);
//组装请求参数
//组装请求参数
List
<
Message
>
messages
=
buildMessages
(
dialoguesId
,
userId
,
input
,
fileUrl
,
knowledgeResult
,
aiWritingTitleGenerationDto
);
List
<
Message
>
messages
=
buildMessages
(
dialoguesId
,
userId
,
input
,
fileUrl
,
knowledgeResult
,
aiWritingTitleGenerationDto
,
toolFunction
);
LargeModelResponse
largeModelResponse
=
new
LargeModelResponse
();
LargeModelResponse
largeModelResponse
=
new
LargeModelResponse
();
largeModelResponse
.
setModel
(
"deepseek-chat
"
);
largeModelResponse
.
setModel
(
enableDeepThinking
?
"deepseek-chat"
:
"deepseek-v3
"
);
largeModelResponse
.
setMessages
(
messages
.
toArray
(
new
Message
[
0
]));
largeModelResponse
.
setMessages
(
messages
.
toArray
(
new
Message
[
0
]));
largeModelResponse
.
setStream
(
true
);
largeModelResponse
.
setStream
(
true
);
BufferedReader
bufferedReader
=
llmService
.
chatChunk
(
largeModelResponse
);
BufferedReader
bufferedReader
=
llmService
.
chatChunk
(
largeModelResponse
);
...
@@ -205,6 +222,46 @@ public class AiWritingServiceImpl implements AiWritingService {
...
@@ -205,6 +222,46 @@ public class AiWritingServiceImpl implements AiWritingService {
bizAiWritingDialoguesRecordService
.
save
(
assistantRecord
);
bizAiWritingDialoguesRecordService
.
save
(
assistantRecord
);
}
}
private
ToolFunction
getToolFunction
(
String
dialoguesId
,
String
input
,
Boolean
enableSearchEngine
,
SSEUtil
sseUtil
)
throws
IOException
{
ToolFunction
toolFunction
=
null
;
if
(
enableSearchEngine
)
{
List
<
Message
>
messages
=
new
ArrayList
<>();
Message
message
=
new
Message
();
message
.
setRole
(
"user"
);
message
.
setContent
(
input
);
messages
.
add
(
message
);
String
[]
unitIds
=
new
String
[
1
];
unitIds
[
0
]
=
"web_search"
;
List
<
Tool
>
tools
=
AgentApplicationTools
.
buildFunctionConfig
(
null
,
"N"
,
dialoguesId
,
dialoguesId
,
unitIds
,
"N"
);
CheckPluginUseEntity
checkPluginUseEntity
=
AgentApplicationTools
.
checkPluginUse
(
messages
,
tools
,
null
);
FunctionCallResult
functionCallResult
=
checkPluginUseEntity
.
getFunctionCallResult
();
if
(
functionCallResult
!=
null
)
{
FunctionCall
functionCall
=
functionCallResult
.
getFunctionCall
();
if
(
functionCallResult
.
isNeed
()
&&
functionCall
!=
null
&&
"web_search"
.
equals
(
functionCall
.
getName
()))
{
AbstractFunctionResult
<
List
<
WebSearchFunctionResult
>>
functionResult
=
webSearchFunction
.
doFunction
(
functionCall
.
getArguments
(),
dialoguesId
,
null
,
null
);
if
(
functionResult
!=
null
&&
CollectionUtils
.
isNotEmpty
(
functionResult
.
getFunctionResult
()))
{
List
<
WebSearchFunctionResult
>
webSearchFunctionResults
=
functionResult
.
getFunctionResult
();
if
(
CollectionUtils
.
isNotEmpty
(
webSearchFunctionResults
))
{
toolFunction
=
new
ToolFunction
();
toolFunction
.
setResult
(
JsonUtils
.
serialize
(
webSearchFunctionResults
));
toolFunction
.
setName
(
"web_search"
);
toolFunction
.
setArguments
(
functionCall
.
getArguments
());
toolFunction
.
setDisplayFormat
(
"json"
);
LargeModelDemandResult
result
=
new
LargeModelDemandResult
();
result
.
setCode
(
"0"
);
result
.
setFunction
(
toolFunction
);
result
.
setDbChainResult
(
null
);
result
.
setKnowledgeContentResult
(
null
);
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
}
}
}
}
}
return
toolFunction
;
}
@Override
@Override
public
List
<
AiWritingExampleDto
>
example
(
String
type
)
throws
Exception
{
public
List
<
AiWritingExampleDto
>
example
(
String
type
)
throws
Exception
{
...
@@ -295,7 +352,7 @@ public class AiWritingServiceImpl implements AiWritingService {
...
@@ -295,7 +352,7 @@ public class AiWritingServiceImpl implements AiWritingService {
return
aiWritingTitleGenerationDto
;
return
aiWritingTitleGenerationDto
;
}
}
private
List
<
Message
>
buildMessages
(
String
dialogsId
,
Long
userId
,
String
input
,
String
fileUrl
,
List
<
KnowledgeContentResult
>
knowledgeContentResults
,
AiWritingTitleGenerationDto
aiWritingTitleGenerationDto
)
throws
Exception
{
private
List
<
Message
>
buildMessages
(
String
dialogsId
,
Long
userId
,
String
input
,
String
fileUrl
,
List
<
KnowledgeContentResult
>
knowledgeContentResults
,
AiWritingTitleGenerationDto
aiWritingTitleGenerationDto
,
ToolFunction
toolFunction
)
throws
Exception
{
// 获取对话提示词
// 获取对话提示词
String
promptCode
=
"AiWritingPrompt"
;
String
promptCode
=
"AiWritingPrompt"
;
BizAgentApplicationGcConfigEntity
documentDialoguePrompt
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
promptCode
);
BizAgentApplicationGcConfigEntity
documentDialoguePrompt
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
promptCode
);
...
@@ -325,6 +382,9 @@ public class AiWritingServiceImpl implements AiWritingService {
...
@@ -325,6 +382,9 @@ public class AiWritingServiceImpl implements AiWritingService {
}
else
{
}
else
{
prompt
=
prompt
.
replace
(
"${title}"
,
StringUtils
.
EMPTY
);
prompt
=
prompt
.
replace
(
"${title}"
,
StringUtils
.
EMPTY
);
}
}
if
(
toolFunction
!=
null
)
{
prompt
=
prompt
.
replace
(
"${toolFunction}"
,
JsonUtils
.
serialize
(
toolFunction
));
}
prompt
=
prompt
.
replace
(
"${fileContent}"
,
fileContent
);
prompt
=
prompt
.
replace
(
"${fileContent}"
,
fileContent
);
...
...
src/main/java/cn/com/poc/writing/dto/AiWritingDto.java
View file @
35fdab75
...
@@ -26,6 +26,34 @@ public class AiWritingDto {
...
@@ -26,6 +26,34 @@ public class AiWritingDto {
*/
*/
private
Integer
[]
knowledgeIds
;
private
Integer
[]
knowledgeIds
;
/**
* 是否启用搜索引擎
*/
private
boolean
enableSearchEngine
;
/**
* 是否开启深度思考
*/
private
boolean
enableDeepThinking
;
public
boolean
getEnableSearchEngine
()
{
return
enableSearchEngine
;
}
public
void
setEnableSearchEngine
(
boolean
enableSearchEngine
)
{
this
.
enableSearchEngine
=
enableSearchEngine
;
}
public
boolean
getEnableDeepThinking
()
{
return
enableDeepThinking
;
}
public
void
setEnableDeepThinking
(
boolean
enableDeepThinking
)
{
this
.
enableDeepThinking
=
enableDeepThinking
;
}
public
String
getDialoguesId
()
{
public
String
getDialoguesId
()
{
return
dialoguesId
;
return
dialoguesId
;
}
}
...
...
src/main/java/cn/com/poc/writing/rest/impl/AiWritingRestImpl.java
View file @
35fdab75
...
@@ -33,7 +33,8 @@ public class AiWritingRestImpl implements AiWritingRest {
...
@@ -33,7 +33,8 @@ public class AiWritingRestImpl implements AiWritingRest {
throw
new
BusinessException
(
"用户未登录"
);
throw
new
BusinessException
(
"用户未登录"
);
}
}
aiWritingService
.
call
(
aiWritingDto
.
getDialoguesId
(),
aiWritingDto
.
getFileUrl
(),
aiWritingService
.
call
(
aiWritingDto
.
getDialoguesId
(),
aiWritingDto
.
getFileUrl
(),
aiWritingDto
.
getInput
(),
aiWritingDto
.
getKnowledgeIds
(),
userBaseEntity
.
getUserId
());
aiWritingDto
.
getInput
(),
aiWritingDto
.
getKnowledgeIds
(),
userBaseEntity
.
getUserId
(),
aiWritingDto
.
getEnableSearchEngine
(),
aiWritingDto
.
getEnableDeepThinking
());
}
}
...
...
src/main/resources/framemax-config/simultanous-interpretation-dev.properties
0 → 100644
View file @
35fdab75
simultanous_interpretation.endpoint
=
http://192.168.21.102:48100
\ No newline at end of file
src/main/resources/framemax-config/simultanous-interpretation-prod.properties
0 → 100644
View file @
35fdab75
simultanous_interpretation.endpoint
=
http://192.168.21.102:48100
\ No newline at end of file
src/main/resources/framemax-config/simultanous-interpretation-sit.properties
0 → 100644
View file @
35fdab75
simultanous_interpretation.endpoint
=
http://192.168.21.102:48100
\ No newline at end of file
src/main/resources/framemax-config/simultanous-interpretation-uat.properties
0 → 100644
View file @
35fdab75
simultanous_interpretation.endpoint
=
http://192.168.21.102:48100
\ No newline at end of file
src/test/java/cn/com/poc/meeting/ASRTest.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.common.utils.UUIDTool
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.entity.AsrOfflineDetailResult
;
import
cn.com.poc.thirdparty.resource.simultanous_interpretation.service.ASRService
;
import
cn.com.yict.framemax.core.spring.SingleContextInitializer
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.test.context.web.WebAppConfiguration
;
import
javax.annotation.Resource
;
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@ContextConfiguration
(
initializers
=
SingleContextInitializer
.
class
)
@WebAppConfiguration
public
class
ASRTest
{
@Resource
private
ASRService
asrService
;
@Test
public
void
test_speechToText
()
{
String
fileUrl
=
"https://gsst-poe-sit.gz.bcebos.com/data/20250811/1754897064286.wav"
;
String
uuid
=
UUIDTool
.
getUUID
();
System
.
out
.
println
(
"sessionId : "
+
uuid
);
String
result
=
asrService
.
speechToText
(
uuid
,
fileUrl
);
System
.
out
.
println
(
result
);
}
@Test
public
void
test_asrGetDetail
()
{
String
sessionId
=
"meeting_assistant_c9c7021dd0db4ecda6bf7eb3a325e745_4"
;
AsrOfflineDetailResult
asrServiceDetail
=
asrService
.
getDetail
(
sessionId
);
System
.
out
.
println
(
JsonUtils
.
serialize
(
asrServiceDetail
));
}
}
src/test/java/cn/com/poc/meeting/AnalysisTest.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
;
import
cn.com.poc.meeting.analysis.FeaturedQuestionAnalyzer
;
import
cn.com.poc.meeting.analysis.KeyWordAnalyzer
;
import
cn.com.poc.meeting.analysis.SummaryAnalyzer
;
import
cn.com.poc.meeting.analysis.ThemeAnalyzer
;
import
cn.com.poc.meeting.cache.KeyWordCounter
;
import
cn.com.yict.framemax.core.spring.SingleContextInitializer
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.test.context.web.WebAppConfiguration
;
import
java.util.List
;
import
java.util.Map
;
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@ContextConfiguration
(
initializers
=
SingleContextInitializer
.
class
)
@WebAppConfiguration
public
class
AnalysisTest
{
@Test
public
void
test_summaryAnalysis
()
{
String
content
=
"要帮忙讲一下啊。哎,好,哎,吴老师你好,,就我大概给您介绍一下。\uD83D\uDE0A呃,那个就是我们其实需要用训练的那个数据,主要是两部分啊,一部分是呃咱们现在的那个录音的音频啊,另外一部分是这个基于这个录音音频转的那个文本啊,然后拿这个两部分的数据呢,其实那个模型它在训练的时候,它会提取其中的一些特征啊,主要是发音和识别的结果。因为我们其实是有base的模型的,然后需要去拿这个数据去在这个base模型上啊做进一步的用。优化,所以其实并不会用到这个呃数据里面的真实的数据啊啊,如果咱们自己有这个呃音频或者是转好了文本,我们也可以只提取这个特征,然后呃拿来做训练的这样的一个过程。嗯。这个是技术上,其实我们是不会去保证这个呃数据会泄露出去的这个问题啊。然后我们训练完了,其实并不需要留存这个数据。然后这因为它那个模型基于这个特征学完了之后,它自己就能具备这样识别的能力啊,只有当咱们还需要需要优化的时候,才还在会去做这个进一步的新一轮的训练啊。如果不需要优化的情况下,那么咱们就不需要再去训练它,也不需要依赖于原有的训练数据。啊,是这样的一个情况。\uD83C\uDFBC然后那个第二个就是刚才这那个张宇跟我沟通的时候,也提到了,咱们可能希望能签署保密协议啊,我们拿到这个数据之后,肯定会可以跟他们去配合签这个保密协议啊。然后我们整体的这个工就是处理这个数据的流程,就是我们拿到音频,然后会呃先给到我们自己的这个标注团队去标注这个语音转文本。然后就进入刚才说的这个训练的过程。训练了之后,我们就可以把这个数据给删除了。大概是这样的一个过程,就是整个的数据也不会出百度,都在百度的范围内。所以我们可以以百度的名义来签这个保密协议,来保证您们的这个数据安全。大概是这样的一个呃流程。您看有没有什么问题。呃老师我了解一下说如果签保密协议的话,咱这个流程大概要走多久啊。就咱们百度内部的话。啊,我们可以尽快推,就是我们其实也挺着急的对,但是呃我之前没走过,所以我也不太清楚大概要走多久啊。咱们有保密协议吗?就是呃我刚刚听张宇说,好像之前是有签过了。如果咱们有现成的保密协议,可能我们这边就是去走一下那个呃签署跟盖章的流程,应该就可以了。之前客户是跟我们签的,然后。可能不太一样,我们得跟客户再再讨论一下,说他们有没有针对于语音这一块的呃,之前签的不是语音的是吧,对,是整个整个数据保护的嗯嗯可能是针对语音。Oh.嗯嗯,那我这边大概对是这样,就是对,您可以先先问问客户,他们是不是有现成的一些保密协议。如果没有的话,我们也可以看看嗯,给一个模板或者怎么样的。行啊行啊,没问题啊。这里可以跟客户沟通一下。好嘞,哎,贾俊,我再问一下,就是他现在准备了多少个小时来着。然后刚才尹雪也跟我沟通,他说好像比如说一两百的话,不知道会不会我们模型的效果会不会好。所以这个他有跟我们讲说夫期可以给多少吗?\uD83D\uDE0A呃,目前还没有,就我们期望是说一两百还是太少是吧?嗯,对我们前面是说的要1500,后面好像要那六说有点难度,1500收据起嗯。然后银雪,咱们这边有一个最小值吗?是如果那个没有那个就是测试题的情况下,我们现在很难评估那个大概的量子是多少。因为这个结构呢。对以就是。看看能不能也和客户沟通一下,就是如果他能先找一些就是不含那个客户的这些敏感信息,像他的那个身份啊,然后他的业务的一些什么呃核心数据的那种。然后就看能不能先给我们两个小时的那个嗯就是这种脱敏的数据,然后我们先去摸一下那个base的模型的效果,如果我们大概知道这个再看那个业务上的表现是什么样的,然后我们大概能评估一些量级。区分明白就是老师我再问一下说呃你们对这个。音频有什么比较特别的要求吗?就类似于说呃一些呃音轨呀,或者说一些别的参数之类块嗯,嗯,应该就是那个8K的,然后就是咱们拿出来应该是。。什么格式我还忘了,就是呃可以是双轨的啊,就是我不知道咱们现在是双轨还是单轨,对应该嗯应该应该问题不太大啊,就是双轨还是单轨,主要是8K的这个数据就是没什么问题的那老师那里面如果夹杂一些呃英文呢。因为呃香港那边很多都是粤语和英文去夹杂着说的这种嗯,这这种没有影响。对我们这次其实也是希望因为。其实是那个实际的用户的交互情况本身就是会有这样很多的情况。所以我们也希望能够去正常识别,可以直接把这个数据给过来。然后我们在标注的时候也会对应的去标注,然后让这个模型能够去学习这种加答的问法。尽量把这个效果做上去的。嗯,好,明白了。嗯,就是说呃刚才您是提到说先有两个小时的一个素材给你们去评估一下,说后续大概是需要多。真正的粤语对对,是的,就如果现在咱如果要同步走保密流程,可能也还需要一点时间嘛。就是看能不能他先给出来两个小时脱敏的这样或者量就比较小,他是不是容易走这个流程,我们可以先评估。对要不然这样能比较准的给到这个数据,他可能就后续只有一次流程嘛。如果第一次拿了不够,后续还得再有第二次可能也比较麻烦。。哎,老师,那我理解一下,说,其实如果是普通的粤语素材,呃,在公网上其实有很多这种。这种素材的这种有什么不一样呢?就一定是要客户那边提供嘛哦,因为场景不一样,就是你最终实现的那个效果会差异还挺大的。就是呃我举一下就是非粤语的例子,就是普通话的例子哈,就是我们其实最开始有的那个呃语音的模型也是基于公网,包括像百度自身一些自己的业务。就是百度APP上也有很多那种呃语音搜索的场景的这样的数据,我们其实是会有一个大的这个模型的b的版本的。但是我们一开始去做这个客服业务的场景的时候,他因为像客服的业务里面会有一些专词。然后呃他的那个。大K的数据的一些表现可能还都会不一样。所以我们其实在呃一开始也是先在国内的这个运营商的行业先去做的这个训练,然后再迁移到比如说像金融的行业的时候,呃,就是量级会小很多。然后我们会也还会再去优化一个经营的版本出来。就是你如果希望在这个行业的这个场景下,它的效果能够能够达到比较好的这样的效果,还是需要它的这个实际的业务数据去做迭代和优化的这样一个过。就如果是那种通用的大模型,他可能只能打一个就是基本分及格分,这很难做到比较好。对像我们现在都要求这个自主在80%到85%这样的一个呃效果的指标上面。.哦,明白了,那他需不需要有一些呃,比如说一些客服行业的一些词汇的的素材啊,就是要材呃,对,这个最好是能有了,就是呃我们那个模型,就是训练完了之后,它其实在上层还有一个IDG的模块那个模块其实就是做一些热词。就比如说我们把一些这个行业里面的专词放进去。呃,你可以去相当于一个词。权重的作用,就是他会在这个权重这个词的权重上加强。然后再遇到这个query识别的时候,就会倾向于往这个词上面的这个识别的结果,就是会有一些这样的调优给到客户。但这个就就可以是部署到他那以后,他自己来作优化,就是可以不走这个b的基础模型。对,明白了嗯。好的,那我那我大概明白老师的意思这边的话就呃我们再去跟用户沟通一下,说他前期能提供一些什么样的素材出来。然后方便我们后期的预估啊或者说后期的训练。对,我们我们还是希望这个数据能尽快拿到。就是就是按刚才说的,如果大批量的数据,他们可能会流程或者周期比较长,我可以先看看能不能先给一点,你们先去看看效果。嗯,好的好的,这边我再跟用户沟通一下,就包括已知协议,我们也跟用户再沟通一下,看他什么样的方式是比较方便的。好嘞好嘞嗯,好的。好的,那谢谢需要,谢谢佳俊啊。问题再聊啊。好拜拜拜拜嗯嗯。"
;
SummaryAnalyzer
summaryAnalyzer
=
new
SummaryAnalyzer
();
String
summary
=
summaryAnalyzer
.
run
(
content
);
System
.
out
.
println
(
summary
);
}
@Test
public
void
test_themeAnalysis
()
{
String
content
=
"数据训练及保密流程说明 \n"
+
"(一)训练数据需求 \n"
+
"需要两部分数据:录音音频和对应的转写文本。模型训练时仅提取发音特征和识别结果,不会使用真实数据内容。若有现成的音频或文本数据,可直接提取特征用于训练。 \n"
+
"\n"
+
"(二)数据安全与保密 \n"
+
"训练完成后不保留原始数据,模型仅基于学到的特征进行识别。百度内部全程处理数据,可签署保密协议保障数据安全。若需优化模型,需重新训练但无需依赖旧数据。 \n"
+
"\n"
+
"(三)保密协议签署流程 \n"
+
"需确认客户是否有现成保密协议模板(尤其是语音相关条款)。若没有,可提供百度模板或协商新协议。签署周期未明确,但会优先推进。 \n"
+
"\n"
+
"(四)数据量评估与测试 \n"
+
"当前期望1500小时数据,但客户提供难度较大。建议先提供2小时脱敏数据(不含敏感信息)用于测试模型效果,再评估实际需求量。若数据不足可能需多次流程。 \n"
+
"\n"
+
"(五)音频技术要求 \n"
+
"要求8K采样率,单轨/双轨均可。接受粤语与英文混杂的真实场景语音,标注时将保留混合表达以优化模型识别能力。 \n"
+
"\n"
+
"(六)行业数据特殊性 \n"
+
"公网通用数据无法满足特定场景(如客服行业)效果,需客户提供实际业务数据。行业专词可通过独立模块(IDG)后期优化,但基础模型仍需行业数据训练以达到80%-85%准确率。"
;
ThemeAnalyzer
themeAnalyzer
=
new
ThemeAnalyzer
();
String
theme
=
themeAnalyzer
.
run
(
content
);
System
.
out
.
println
(
theme
);
}
@Test
public
void
test_keywordAnalysis
()
{
String
content
=
"要帮忙讲一下啊。哎,好,哎,吴老师你好,,就我大概给您介绍一下。\uD83D\uDE0A呃,那个就是我们其实需要用训练的那个数据,主要是两部分啊,一部分是呃咱们现在的那个录音的音频啊,另外一部分是这个基于这个录音音频转的那个文本啊,然后拿这个两部分的数据呢,其实那个模型它在训练的时候,它会提取其中的一些特征啊,主要是发音和识别的结果。因为我们其实是有base的模型的,然后需要去拿这个数据去在这个base模型上啊做进一步的用。优化,所以其实并不会用到这个呃数据里面的真实的数据啊啊,如果咱们自己有这个呃音频或者是转好了文本,我们也可以只提取这个特征,然后呃拿来做训练的这样的一个过程。嗯。这个是技术上,其实我们是不会去保证这个呃数据会泄露出去的这个问题啊。然后我们训练完了,其实并不需要留存这个数据。然后这因为它那个模型基于这个特征学完了之后,它自己就能具备这样识别的能力啊,只有当咱们还需要需要优化的时候,才还在会去做这个进一步的新一轮的训练啊。如果不需要优化的情况下,那么咱们就不需要再去训练它,也不需要依赖于原有的训练数据。啊,是这样的一个情况。\uD83C\uDFBC然后那个第二个就是刚才这那个张宇跟我沟通的时候,也提到了,咱们可能希望能签署保密协议啊,我们拿到这个数据之后,肯定会可以跟他们去配合签这个保密协议啊。然后我们整体的这个工就是处理这个数据的流程,就是我们拿到音频,然后会呃先给到我们自己的这个标注团队去标注这个语音转文本。然后就进入刚才说的这个训练的过程。训练了之后,我们就可以把这个数据给删除了。大概是这样的一个过程,就是整个的数据也不会出百度,都在百度的范围内。所以我们可以以百度的名义来签这个保密协议,来保证您们的这个数据安全。大概是这样的一个呃流程。您看有没有什么问题。呃老师我了解一下说如果签保密协议的话,咱这个流程大概要走多久啊。就咱们百度内部的话。啊,我们可以尽快推,就是我们其实也挺着急的对,但是呃我之前没走过,所以我也不太清楚大概要走多久啊。咱们有保密协议吗?就是呃我刚刚听张宇说,好像之前是有签过了。如果咱们有现成的保密协议,可能我们这边就是去走一下那个呃签署跟盖章的流程,应该就可以了。之前客户是跟我们签的,然后。可能不太一样,我们得跟客户再再讨论一下,说他们有没有针对于语音这一块的呃,之前签的不是语音的是吧,对,是整个整个数据保护的嗯嗯可能是针对语音。Oh.嗯嗯,那我这边大概对是这样,就是对,您可以先先问问客户,他们是不是有现成的一些保密协议。如果没有的话,我们也可以看看嗯,给一个模板或者怎么样的。行啊行啊,没问题啊。这里可以跟客户沟通一下。好嘞,哎,贾俊,我再问一下,就是他现在准备了多少个小时来着。然后刚才尹雪也跟我沟通,他说好像比如说一两百的话,不知道会不会我们模型的效果会不会好。所以这个他有跟我们讲说夫期可以给多少吗?\uD83D\uDE0A呃,目前还没有,就我们期望是说一两百还是太少是吧?嗯,对我们前面是说的要1500,后面好像要那六说有点难度,1500收据起嗯。然后银雪,咱们这边有一个最小值吗?是如果那个没有那个就是测试题的情况下,我们现在很难评估那个大概的量子是多少。因为这个结构呢。对以就是。看看能不能也和客户沟通一下,就是如果他能先找一些就是不含那个客户的这些敏感信息,像他的那个身份啊,然后他的业务的一些什么呃核心数据的那种。然后就看能不能先给我们两个小时的那个嗯就是这种脱敏的数据,然后我们先去摸一下那个base的模型的效果,如果我们大概知道这个再看那个业务上的表现是什么样的,然后我们大概能评估一些量级。区分明白就是老师我再问一下说呃你们对这个。音频有什么比较特别的要求吗?就类似于说呃一些呃音轨呀,或者说一些别的参数之类块嗯,嗯,应该就是那个8K的,然后就是咱们拿出来应该是。。什么格式我还忘了,就是呃可以是双轨的啊,就是我不知道咱们现在是双轨还是单轨,对应该嗯应该应该问题不太大啊,就是双轨还是单轨,主要是8K的这个数据就是没什么问题的那老师那里面如果夹杂一些呃英文呢。因为呃香港那边很多都是粤语和英文去夹杂着说的这种嗯,这这种没有影响。对我们这次其实也是希望因为。其实是那个实际的用户的交互情况本身就是会有这样很多的情况。所以我们也希望能够去正常识别,可以直接把这个数据给过来。然后我们在标注的时候也会对应的去标注,然后让这个模型能够去学习这种加答的问法。尽量把这个效果做上去的。嗯,好,明白了。嗯,就是说呃刚才您是提到说先有两个小时的一个素材给你们去评估一下,说后续大概是需要多。真正的粤语对对,是的,就如果现在咱如果要同步走保密流程,可能也还需要一点时间嘛。就是看能不能他先给出来两个小时脱敏的这样或者量就比较小,他是不是容易走这个流程,我们可以先评估。对要不然这样能比较准的给到这个数据,他可能就后续只有一次流程嘛。如果第一次拿了不够,后续还得再有第二次可能也比较麻烦。。哎,老师,那我理解一下,说,其实如果是普通的粤语素材,呃,在公网上其实有很多这种。这种素材的这种有什么不一样呢?就一定是要客户那边提供嘛哦,因为场景不一样,就是你最终实现的那个效果会差异还挺大的。就是呃我举一下就是非粤语的例子,就是普通话的例子哈,就是我们其实最开始有的那个呃语音的模型也是基于公网,包括像百度自身一些自己的业务。就是百度APP上也有很多那种呃语音搜索的场景的这样的数据,我们其实是会有一个大的这个模型的b的版本的。但是我们一开始去做这个客服业务的场景的时候,他因为像客服的业务里面会有一些专词。然后呃他的那个。大K的数据的一些表现可能还都会不一样。所以我们其实在呃一开始也是先在国内的这个运营商的行业先去做的这个训练,然后再迁移到比如说像金融的行业的时候,呃,就是量级会小很多。然后我们会也还会再去优化一个经营的版本出来。就是你如果希望在这个行业的这个场景下,它的效果能够能够达到比较好的这样的效果,还是需要它的这个实际的业务数据去做迭代和优化的这样一个过。就如果是那种通用的大模型,他可能只能打一个就是基本分及格分,这很难做到比较好。对像我们现在都要求这个自主在80%到85%这样的一个呃效果的指标上面。.哦,明白了,那他需不需要有一些呃,比如说一些客服行业的一些词汇的的素材啊,就是要材呃,对,这个最好是能有了,就是呃我们那个模型,就是训练完了之后,它其实在上层还有一个IDG的模块那个模块其实就是做一些热词。就比如说我们把一些这个行业里面的专词放进去。呃,你可以去相当于一个词。权重的作用,就是他会在这个权重这个词的权重上加强。然后再遇到这个query识别的时候,就会倾向于往这个词上面的这个识别的结果,就是会有一些这样的调优给到客户。但这个就就可以是部署到他那以后,他自己来作优化,就是可以不走这个b的基础模型。对,明白了嗯。好的,那我那我大概明白老师的意思这边的话就呃我们再去跟用户沟通一下,说他前期能提供一些什么样的素材出来。然后方便我们后期的预估啊或者说后期的训练。对,我们我们还是希望这个数据能尽快拿到。就是就是按刚才说的,如果大批量的数据,他们可能会流程或者周期比较长,我可以先看看能不能先给一点,你们先去看看效果。嗯,好的好的,这边我再跟用户沟通一下,就包括已知协议,我们也跟用户再沟通一下,看他什么样的方式是比较方便的。好嘞好嘞嗯,好的。好的,那谢谢需要,谢谢佳俊啊。问题再聊啊。好拜拜拜拜嗯嗯。"
;
KeyWordAnalyzer
keyWordAnalyzer
=
new
KeyWordAnalyzer
();
List
<
String
>
keywords
=
keyWordAnalyzer
.
run
(
content
);
keywords
.
forEach
(
System
.
out
::
println
);
Map
<
String
,
Integer
>
map
=
KeyWordCounter
.
keywordCount
(
content
,
keywords
);
System
.
out
.
println
(
"计数:"
+
map
);
}
@Test
public
void
test_featuredQuestionAnalysis
()
{
String
content
=
"要帮忙讲一下啊。哎,好,哎,吴老师你好,,就我大概给您介绍一下。\uD83D\uDE0A呃,那个就是我们其实需要用训练的那个数据,主要是两部分啊,一部分是呃咱们现在的那个录音的音频啊,另外一部分是这个基于这个录音音频转的那个文本啊,然后拿这个两部分的数据呢,其实那个模型它在训练的时候,它会提取其中的一些特征啊,主要是发音和识别的结果。因为我们其实是有base的模型的,然后需要去拿这个数据去在这个base模型上啊做进一步的用。优化,所以其实并不会用到这个呃数据里面的真实的数据啊啊,如果咱们自己有这个呃音频或者是转好了文本,我们也可以只提取这个特征,然后呃拿来做训练的这样的一个过程。嗯。这个是技术上,其实我们是不会去保证这个呃数据会泄露出去的这个问题啊。然后我们训练完了,其实并不需要留存这个数据。然后这因为它那个模型基于这个特征学完了之后,它自己就能具备这样识别的能力啊,只有当咱们还需要需要优化的时候,才还在会去做这个进一步的新一轮的训练啊。如果不需要优化的情况下,那么咱们就不需要再去训练它,也不需要依赖于原有的训练数据。啊,是这样的一个情况。\uD83C\uDFBC然后那个第二个就是刚才这那个张宇跟我沟通的时候,也提到了,咱们可能希望能签署保密协议啊,我们拿到这个数据之后,肯定会可以跟他们去配合签这个保密协议啊。然后我们整体的这个工就是处理这个数据的流程,就是我们拿到音频,然后会呃先给到我们自己的这个标注团队去标注这个语音转文本。然后就进入刚才说的这个训练的过程。训练了之后,我们就可以把这个数据给删除了。大概是这样的一个过程,就是整个的数据也不会出百度,都在百度的范围内。所以我们可以以百度的名义来签这个保密协议,来保证您们的这个数据安全。大概是这样的一个呃流程。您看有没有什么问题。呃老师我了解一下说如果签保密协议的话,咱这个流程大概要走多久啊。就咱们百度内部的话。啊,我们可以尽快推,就是我们其实也挺着急的对,但是呃我之前没走过,所以我也不太清楚大概要走多久啊。咱们有保密协议吗?就是呃我刚刚听张宇说,好像之前是有签过了。如果咱们有现成的保密协议,可能我们这边就是去走一下那个呃签署跟盖章的流程,应该就可以了。之前客户是跟我们签的,然后。可能不太一样,我们得跟客户再再讨论一下,说他们有没有针对于语音这一块的呃,之前签的不是语音的是吧,对,是整个整个数据保护的嗯嗯可能是针对语音。Oh.嗯嗯,那我这边大概对是这样,就是对,您可以先先问问客户,他们是不是有现成的一些保密协议。如果没有的话,我们也可以看看嗯,给一个模板或者怎么样的。行啊行啊,没问题啊。这里可以跟客户沟通一下。好嘞,哎,贾俊,我再问一下,就是他现在准备了多少个小时来着。然后刚才尹雪也跟我沟通,他说好像比如说一两百的话,不知道会不会我们模型的效果会不会好。所以这个他有跟我们讲说夫期可以给多少吗?\uD83D\uDE0A呃,目前还没有,就我们期望是说一两百还是太少是吧?嗯,对我们前面是说的要1500,后面好像要那六说有点难度,1500收据起嗯。然后银雪,咱们这边有一个最小值吗?是如果那个没有那个就是测试题的情况下,我们现在很难评估那个大概的量子是多少。因为这个结构呢。对以就是。看看能不能也和客户沟通一下,就是如果他能先找一些就是不含那个客户的这些敏感信息,像他的那个身份啊,然后他的业务的一些什么呃核心数据的那种。然后就看能不能先给我们两个小时的那个嗯就是这种脱敏的数据,然后我们先去摸一下那个base的模型的效果,如果我们大概知道这个再看那个业务上的表现是什么样的,然后我们大概能评估一些量级。区分明白就是老师我再问一下说呃你们对这个。音频有什么比较特别的要求吗?就类似于说呃一些呃音轨呀,或者说一些别的参数之类块嗯,嗯,应该就是那个8K的,然后就是咱们拿出来应该是。。什么格式我还忘了,就是呃可以是双轨的啊,就是我不知道咱们现在是双轨还是单轨,对应该嗯应该应该问题不太大啊,就是双轨还是单轨,主要是8K的这个数据就是没什么问题的那老师那里面如果夹杂一些呃英文呢。因为呃香港那边很多都是粤语和英文去夹杂着说的这种嗯,这这种没有影响。对我们这次其实也是希望因为。其实是那个实际的用户的交互情况本身就是会有这样很多的情况。所以我们也希望能够去正常识别,可以直接把这个数据给过来。然后我们在标注的时候也会对应的去标注,然后让这个模型能够去学习这种加答的问法。尽量把这个效果做上去的。嗯,好,明白了。嗯,就是说呃刚才您是提到说先有两个小时的一个素材给你们去评估一下,说后续大概是需要多。真正的粤语对对,是的,就如果现在咱如果要同步走保密流程,可能也还需要一点时间嘛。就是看能不能他先给出来两个小时脱敏的这样或者量就比较小,他是不是容易走这个流程,我们可以先评估。对要不然这样能比较准的给到这个数据,他可能就后续只有一次流程嘛。如果第一次拿了不够,后续还得再有第二次可能也比较麻烦。。哎,老师,那我理解一下,说,其实如果是普通的粤语素材,呃,在公网上其实有很多这种。这种素材的这种有什么不一样呢?就一定是要客户那边提供嘛哦,因为场景不一样,就是你最终实现的那个效果会差异还挺大的。就是呃我举一下就是非粤语的例子,就是普通话的例子哈,就是我们其实最开始有的那个呃语音的模型也是基于公网,包括像百度自身一些自己的业务。就是百度APP上也有很多那种呃语音搜索的场景的这样的数据,我们其实是会有一个大的这个模型的b的版本的。但是我们一开始去做这个客服业务的场景的时候,他因为像客服的业务里面会有一些专词。然后呃他的那个。大K的数据的一些表现可能还都会不一样。所以我们其实在呃一开始也是先在国内的这个运营商的行业先去做的这个训练,然后再迁移到比如说像金融的行业的时候,呃,就是量级会小很多。然后我们会也还会再去优化一个经营的版本出来。就是你如果希望在这个行业的这个场景下,它的效果能够能够达到比较好的这样的效果,还是需要它的这个实际的业务数据去做迭代和优化的这样一个过。就如果是那种通用的大模型,他可能只能打一个就是基本分及格分,这很难做到比较好。对像我们现在都要求这个自主在80%到85%这样的一个呃效果的指标上面。.哦,明白了,那他需不需要有一些呃,比如说一些客服行业的一些词汇的的素材啊,就是要材呃,对,这个最好是能有了,就是呃我们那个模型,就是训练完了之后,它其实在上层还有一个IDG的模块那个模块其实就是做一些热词。就比如说我们把一些这个行业里面的专词放进去。呃,你可以去相当于一个词。权重的作用,就是他会在这个权重这个词的权重上加强。然后再遇到这个query识别的时候,就会倾向于往这个词上面的这个识别的结果,就是会有一些这样的调优给到客户。但这个就就可以是部署到他那以后,他自己来作优化,就是可以不走这个b的基础模型。对,明白了嗯。好的,那我那我大概明白老师的意思这边的话就呃我们再去跟用户沟通一下,说他前期能提供一些什么样的素材出来。然后方便我们后期的预估啊或者说后期的训练。对,我们我们还是希望这个数据能尽快拿到。就是就是按刚才说的,如果大批量的数据,他们可能会流程或者周期比较长,我可以先看看能不能先给一点,你们先去看看效果。嗯,好的好的,这边我再跟用户沟通一下,就包括已知协议,我们也跟用户再沟通一下,看他什么样的方式是比较方便的。好嘞好嘞嗯,好的。好的,那谢谢需要,谢谢佳俊啊。问题再聊啊。好拜拜拜拜嗯嗯。"
;
FeaturedQuestionAnalyzer
featuredQuestionAnalyzer
=
new
FeaturedQuestionAnalyzer
();
List
<
String
>
featuredQuestions
=
featuredQuestionAnalyzer
.
run
(
content
);
featuredQuestions
.
forEach
(
System
.
out
::
println
);
}
}
src/test/java/cn/com/poc/meeting/MeetingTest.java
0 → 100644
View file @
35fdab75
package
cn
.
com
.
poc
.
meeting
;
import
cn.com.yict.framemax.core.spring.SingleContextInitializer
;
import
org.junit.runner.RunWith
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.test.context.web.WebAppConfiguration
;
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@ContextConfiguration
(
initializers
=
SingleContextInitializer
.
class
)
@WebAppConfiguration
public
class
MeetingTest
{
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment