Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
elleai
Project
Project
Details
Activity
Releases
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
ai-tech
E
ellehuis-group
backend
elleai
Commits
91c2614d
Commit
91c2614d
authored
Oct 23, 2024
by
杨翌文
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feature: 热门问题
parent
d48260ed
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
79 additions
and
6 deletions
+79
-6
HotQaMobileDto.java
...reeze/elleai/application/dto/response/HotQaMobileDto.java
+4
-0
AiPlatformExtensionService.java
...lleai/application/service/AiPlatformExtensionService.java
+12
-1
AppChatCompletionService.java
.../elleai/application/service/AppChatCompletionService.java
+12
-0
ChatCompletionMobileController.java
...leai/controller/front/ChatCompletionMobileController.java
+1
-4
KbService.java
...a/cn/breeze/elleai/domain/sparring/service/KbService.java
+11
-0
KbServiceImpl.java
.../breeze/elleai/domain/sparring/service/KbServiceImpl.java
+33
-0
KbTableDef.java
.../java/cn/breeze/elleai/infra/entity/table/KbTableDef.java
+6
-1
No files found.
src/main/java/cn/breeze/elleai/application/dto/response/HotQaMobileDto.java
View file @
91c2614d
...
@@ -2,12 +2,16 @@ package cn.breeze.elleai.application.dto.response;
...
@@ -2,12 +2,16 @@ package cn.breeze.elleai.application.dto.response;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.Date
;
@Data
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
HotQaMobileDto
implements
Serializable
{
public
class
HotQaMobileDto
implements
Serializable
{
@Schema
(
description
=
"问题"
)
@Schema
(
description
=
"问题"
)
...
...
src/main/java/cn/breeze/elleai/application/service/AiPlatformExtensionService.java
View file @
91c2614d
...
@@ -7,6 +7,7 @@ import cn.breeze.elleai.application.dto.langchain.VectorSearchRequest;
...
@@ -7,6 +7,7 @@ import cn.breeze.elleai.application.dto.langchain.VectorSearchRequest;
import
cn.breeze.elleai.application.dto.langchain.VectorSegment
;
import
cn.breeze.elleai.application.dto.langchain.VectorSegment
;
import
cn.breeze.elleai.domain.sparring.model.response.QaAssistantResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.QaAssistantResponseModel
;
import
cn.breeze.elleai.domain.sparring.service.ChatCompletionService
;
import
cn.breeze.elleai.domain.sparring.service.ChatCompletionService
;
import
cn.breeze.elleai.domain.sparring.service.KbService
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONArray
;
...
@@ -42,6 +43,8 @@ public class AiPlatformExtensionService {
...
@@ -42,6 +43,8 @@ public class AiPlatformExtensionService {
private
final
AIService
aiService
;
private
final
AIService
aiService
;
private
final
KbService
kbService
;
private
final
ChatCompletionService
chatCompletionService
;
private
final
ChatCompletionService
chatCompletionService
;
...
@@ -207,12 +210,20 @@ public class AiPlatformExtensionService {
...
@@ -207,12 +210,20 @@ public class AiPlatformExtensionService {
StringBuilder
sb
=
new
StringBuilder
();
StringBuilder
sb
=
new
StringBuilder
();
List
<
VectorSegment
>
vectorSegments
=
aiService
.
searchWithRerank
(
request
);
List
<
VectorSegment
>
vectorSegments
=
aiService
.
searchWithRerank
(
request
);
if
(
CollUtil
.
isNotEmpty
(
vectorSegments
))
{
if
(
CollUtil
.
isNotEmpty
(
vectorSegments
))
{
//todo 统计命中的知识,更新统计数据
//结果不为空,组装结果
//结果不为空,组装结果
for
(
VectorSegment
vectorSegment
:
vectorSegments
)
{
for
(
VectorSegment
vectorSegment
:
vectorSegments
)
{
sb
.
append
(
vectorSegment
.
getContent
()
+
"\n\n"
);
sb
.
append
(
vectorSegment
.
getContent
()
+
"\n\n"
);
}
}
updateKbHitStat
(
vectorSegments
);
}
}
return
sb
.
toString
();
return
sb
.
toString
();
}
}
/**
* 重排后统计热门问题
* @param segments
*/
private
void
updateKbHitStat
(
List
<
VectorSegment
>
segments
)
{
kbService
.
updateHotQuestion
(
CollUtil
.
map
(
segments
,
VectorSegment:
:
getId
,
true
));
}
}
}
src/main/java/cn/breeze/elleai/application/service/AppChatCompletionService.java
View file @
91c2614d
...
@@ -13,6 +13,7 @@ import cn.breeze.elleai.domain.sparring.model.response.QaAssistantResponseModel;
...
@@ -13,6 +13,7 @@ import cn.breeze.elleai.domain.sparring.model.response.QaAssistantResponseModel;
import
cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionHistoryResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionHistoryResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionResponseModel
;
import
cn.breeze.elleai.domain.sparring.service.ChatCompletionService
;
import
cn.breeze.elleai.domain.sparring.service.ChatCompletionService
;
import
cn.breeze.elleai.domain.sparring.service.KbService
;
import
cn.breeze.elleai.util.UserPrincipal
;
import
cn.breeze.elleai.util.UserPrincipal
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.collection.CollectionUtil
;
...
@@ -52,6 +53,8 @@ public class AppChatCompletionService {
...
@@ -52,6 +53,8 @@ public class AppChatCompletionService {
private
final
ChatCompletionService
chatCompletionService
;
private
final
ChatCompletionService
chatCompletionService
;
private
final
KbService
kbService
;
/************************************************** AI助手 **************************************************/
/************************************************** AI助手 **************************************************/
...
@@ -406,4 +409,13 @@ public class AppChatCompletionService {
...
@@ -406,4 +409,13 @@ public class AppChatCompletionService {
}
}
return
null
;
return
null
;
}
}
/**
* 热门提问
* @param request
* @return
*/
public
PageResult
<
HotQaMobileDto
>
hotQaList
(
QaAssistantRequestDto
request
)
{
return
kbService
.
hotQaList
(
request
);
}
}
}
src/main/java/cn/breeze/elleai/controller/front/ChatCompletionMobileController.java
View file @
91c2614d
...
@@ -36,10 +36,7 @@ public class ChatCompletionMobileController {
...
@@ -36,10 +36,7 @@ public class ChatCompletionMobileController {
@Operation
(
summary
=
"热门提问"
)
@Operation
(
summary
=
"热门提问"
)
@GetMapping
(
"/hot/list"
)
@GetMapping
(
"/hot/list"
)
public
ApiResponse
<
PageResult
<
HotQaMobileDto
>>
hotList
(
@QueryParam
QaAssistantRequestDto
request
)
{
public
ApiResponse
<
PageResult
<
HotQaMobileDto
>>
hotList
(
@QueryParam
QaAssistantRequestDto
request
)
{
PageResult
<
HotQaMobileDto
>
pageResult
=
new
PageResult
<>();
return
ApiResponse
.
ok
(
chatCompletionService
.
hotQaList
(
request
));
String
json
=
"{\"items\": [{\"question\": \"热门提问1\"},{\"question\": \"热门提问2\"},{\"question\": \"热门提问3\"},{\"question\": \"热门提问4\"},{\"question\": \"热门提问5\"},{\"question\": \"热门提问6\"},{\"question\": \"热门提问7\"},{\"question\": \"热门提问8\"},{\"question\": \"热门提问9\"},{\"question\": \"热门提问10\"}],\"total\": 10,\"total_page\": 1,\"page_no\": 1,\"page_size\": 10}"
;
pageResult
=
JSON
.
parseObject
(
json
,
PageResult
.
class
);
return
ApiResponse
.
ok
(
pageResult
);
}
}
@Operation
(
summary
=
"历史对话"
)
@Operation
(
summary
=
"历史对话"
)
...
...
src/main/java/cn/breeze/elleai/domain/sparring/service/KbService.java
View file @
91c2614d
package
cn
.
breeze
.
elleai
.
domain
.
sparring
.
service
;
package
cn
.
breeze
.
elleai
.
domain
.
sparring
.
service
;
import
cn.breeze.elleai.application.dto.PageResult
;
import
cn.breeze.elleai.application.dto.request.QaAssistantRequestDto
;
import
cn.breeze.elleai.application.dto.response.HotQaMobileDto
;
import
cn.breeze.elleai.domain.sparring.model.request.KbRequestModel
;
import
cn.breeze.elleai.domain.sparring.model.request.KbRequestModel
;
import
cn.breeze.elleai.domain.sparring.model.request.KbSaveModel
;
import
cn.breeze.elleai.domain.sparring.model.request.KbSaveModel
;
import
cn.breeze.elleai.domain.sparring.model.response.KbResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.KbResponseModel
;
...
@@ -28,4 +31,12 @@ public interface KbService extends IService<KbEntity> {
...
@@ -28,4 +31,12 @@ public interface KbService extends IService<KbEntity> {
void
deleteKb
(
Integer
id
);
void
deleteKb
(
Integer
id
);
void
saveKb
(
KbSaveModel
dto
);
void
saveKb
(
KbSaveModel
dto
);
/**
* 更新热门问题
* @param vectorIds
*/
void
updateHotQuestion
(
List
<
String
>
vectorIds
);
PageResult
<
HotQaMobileDto
>
hotQaList
(
QaAssistantRequestDto
request
);
}
}
src/main/java/cn/breeze/elleai/domain/sparring/service/KbServiceImpl.java
View file @
91c2614d
package
cn
.
breeze
.
elleai
.
domain
.
sparring
.
service
;
package
cn
.
breeze
.
elleai
.
domain
.
sparring
.
service
;
import
cn.breeze.elleai.application.dto.PageResult
;
import
cn.breeze.elleai.application.dto.request.QaAssistantRequestDto
;
import
cn.breeze.elleai.application.dto.response.HotQaMobileDto
;
import
cn.breeze.elleai.domain.sparring.model.request.KbRequestModel
;
import
cn.breeze.elleai.domain.sparring.model.request.KbRequestModel
;
import
cn.breeze.elleai.domain.sparring.model.request.KbSaveModel
;
import
cn.breeze.elleai.domain.sparring.model.request.KbSaveModel
;
import
cn.breeze.elleai.domain.sparring.model.response.KbResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.KbResponseModel
;
import
cn.breeze.elleai.infra.entity.KbEntity
;
import
cn.breeze.elleai.infra.entity.KbEntity
;
import
cn.breeze.elleai.infra.mapper.KbMapper
;
import
cn.breeze.elleai.infra.mapper.KbMapper
;
import
cn.breeze.elleai.infra.mapper.KbVectorMapper
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.mybatisflex.core.paginate.Page
;
import
com.mybatisflex.core.paginate.Page
;
...
@@ -20,6 +25,7 @@ import java.util.List;
...
@@ -20,6 +25,7 @@ import java.util.List;
import
java.util.Objects
;
import
java.util.Objects
;
import
static
cn
.
breeze
.
elleai
.
infra
.
entity
.
table
.
KbTableDef
.
KB_ENTITY
;
import
static
cn
.
breeze
.
elleai
.
infra
.
entity
.
table
.
KbTableDef
.
KB_ENTITY
;
import
static
cn
.
breeze
.
elleai
.
infra
.
entity
.
table
.
KbVectorTableDef
.
KB_VECTOR_ENTITY
;
/**
/**
* 服务层实现。
* 服务层实现。
...
@@ -33,6 +39,8 @@ public class KbServiceImpl extends ServiceImpl<KbMapper, KbEntity> implements Kb
...
@@ -33,6 +39,8 @@ public class KbServiceImpl extends ServiceImpl<KbMapper, KbEntity> implements Kb
private
final
KbMapper
kbMapper
;
private
final
KbMapper
kbMapper
;
private
final
KbVectorMapper
kbVectorMapper
;
@Override
@Override
public
Page
<
KbResponseModel
>
kbPaginQuery
(
KbRequestModel
request
)
{
public
Page
<
KbResponseModel
>
kbPaginQuery
(
KbRequestModel
request
)
{
Integer
pageNo
=
ObjectUtil
.
defaultIfNull
(
request
.
getPageNo
(),
1
);
Integer
pageNo
=
ObjectUtil
.
defaultIfNull
(
request
.
getPageNo
(),
1
);
...
@@ -109,4 +117,29 @@ public class KbServiceImpl extends ServiceImpl<KbMapper, KbEntity> implements Kb
...
@@ -109,4 +117,29 @@ public class KbServiceImpl extends ServiceImpl<KbMapper, KbEntity> implements Kb
}
}
kbMapper
.
insertOrUpdateSelective
(
entity
);
kbMapper
.
insertOrUpdateSelective
(
entity
);
}
}
@Override
public
void
updateHotQuestion
(
List
<
String
>
vectorIds
)
{
QueryWrapper
qw
=
QueryWrapper
.
create
()
.
select
(
KB_VECTOR_ENTITY
.
KB_ID
)
.
where
(
KB_VECTOR_ENTITY
.
VECTOR_ID
.
in
(
vectorIds
));
List
<
Integer
>
kbIds
=
kbVectorMapper
.
selectObjectListByQueryAs
(
qw
,
Integer
.
class
);
if
(
CollUtil
.
isNotEmpty
(
kbIds
))
{
UpdateChain
.
of
(
KbEntity
.
class
)
.
set
(
KB_ENTITY
.
HINT
,
KB_ENTITY
.
HINT
.
add
(
1
))
.
where
(
KB_ENTITY
.
ID
.
in
(
kbIds
))
.
update
();
}
}
@Override
public
PageResult
<
HotQaMobileDto
>
hotQaList
(
QaAssistantRequestDto
request
)
{
QueryWrapper
qw
=
QueryWrapper
.
create
()
.
select
(
KB_ENTITY
.
QUESTION
)
.
where
(
KB_ENTITY
.
STATUS
.
eq
(
1
).
and
(
KB_ENTITY
.
DELETED
.
eq
(
0
)))
.
orderBy
(
KB_ENTITY
.
HINT
.
desc
())
.
limit
(
10
);
List
<
String
>
questions
=
kbMapper
.
selectObjectListByQueryAs
(
qw
,
String
.
class
);
return
PageResult
.
of
(
1
,
10
,
questions
.
size
(),
CollUtil
.
map
(
questions
,
HotQaMobileDto:
:
new
,
true
));
}
}
}
src/main/java/cn/breeze/elleai/infra/entity/table/KbTableDef.java
View file @
91c2614d
...
@@ -44,6 +44,11 @@ public class KbTableDef extends TableDef {
...
@@ -44,6 +44,11 @@ public class KbTableDef extends TableDef {
*/
*/
public
final
QueryColumn
DELETED
=
new
QueryColumn
(
this
,
"deleted"
);
public
final
QueryColumn
DELETED
=
new
QueryColumn
(
this
,
"deleted"
);
/**
* 统计次数
*/
public
final
QueryColumn
HINT
=
new
QueryColumn
(
this
,
"hint"
);
/**
/**
* 创建时间
* 创建时间
*/
*/
...
@@ -67,7 +72,7 @@ public class KbTableDef extends TableDef {
...
@@ -67,7 +72,7 @@ public class KbTableDef extends TableDef {
/**
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
*/
public
final
QueryColumn
[]
DEFAULT_COLUMNS
=
new
QueryColumn
[]{
ID
,
TAG_ID
,
QUESTION
,
ANSWER
,
STATUS
,
DELETED
,
CREATE_AT
,
UPDATE_AT
};
public
final
QueryColumn
[]
DEFAULT_COLUMNS
=
new
QueryColumn
[]{
ID
,
TAG_ID
,
HINT
,
QUESTION
,
ANSWER
,
STATUS
,
DELETED
,
CREATE_AT
,
UPDATE_AT
};
public
KbTableDef
()
{
public
KbTableDef
()
{
super
(
""
,
"cs_kb"
);
super
(
""
,
"cs_kb"
);
...
...
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