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
d95c4735
Commit
d95c4735
authored
Oct 22, 2024
by
陈立彬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
知识库初始化,fix历史会话
parent
9aa9e0d7
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
105 additions
and
19 deletions
+105
-19
ElleaiApplication.java
src/main/java/cn/breeze/elleai/ElleaiApplication.java
+2
-0
AppKbService.java
...va/cn/breeze/elleai/application/service/AppKbService.java
+80
-9
KbController.java
.../java/cn/breeze/elleai/controller/admin/KbController.java
+6
-0
KbVectorSaveModel.java
...leai/domain/sparring/model/request/KbVectorSaveModel.java
+2
-2
KbResponseModel.java
...lleai/domain/sparring/model/response/KbResponseModel.java
+1
-1
KbVectorResponseModel.java
...domain/sparring/model/response/KbVectorResponseModel.java
+2
-2
ChatCompletionServiceImpl.java
...ai/domain/sparring/service/ChatCompletionServiceImpl.java
+1
-1
KbVectorService.java
...reeze/elleai/domain/sparring/service/KbVectorService.java
+2
-0
KbVectorServiceImpl.java
...e/elleai/domain/sparring/service/KbVectorServiceImpl.java
+6
-1
MilvusVectorStoreFacade.java
...java/cn/breeze/elleai/facade/MilvusVectorStoreFacade.java
+1
-1
KbVectorEntity.java
...in/java/cn/breeze/elleai/infra/entity/KbVectorEntity.java
+2
-2
No files found.
src/main/java/cn/breeze/elleai/ElleaiApplication.java
View file @
d95c4735
...
...
@@ -4,9 +4,11 @@ import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
;
import
org.springframework.scheduling.annotation.EnableAsync
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
@SpringBootApplication
(
exclude
=
{
SecurityAutoConfiguration
.
class
})
@EnableAsync
@EnableKnife4j
@EnableScheduling
public
class
ElleaiApplication
{
...
...
src/main/java/cn/breeze/elleai/application/service/AppKbService.java
View file @
d95c4735
...
...
@@ -8,6 +8,7 @@ import cn.breeze.elleai.application.dto.response.KbDto;
import
cn.breeze.elleai.application.dto.response.KbTagDto
;
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.KbVectorSaveModel
;
import
cn.breeze.elleai.domain.sparring.model.response.KbResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.KbVectorResponseModel
;
import
cn.breeze.elleai.domain.sparring.service.KbService
;
...
...
@@ -18,12 +19,10 @@ import cn.hutool.core.collection.CollectionUtil;
import
com.mybatisflex.core.paginate.Page
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Component
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -53,22 +52,32 @@ public class AppKbService {
KbResponseModel
kbResponseModel
=
kbService
.
kbDetail
(
id
);
if
(
Objects
.
nonNull
(
kbResponseModel
))
{
// 更新知识库状态
kbService
.
updateKbStatus
(
id
,
status
);
// 启用/禁用 同步更新向量数据库
KbVectorResponseModel
vectorResponseModel
=
kbVectorService
.
kbVectorDetail
(
id
);
if
(
Objects
.
equals
(
status
,
0
))
{
// 删除关联表
if
(
Objects
.
nonNull
(
vectorResponseModel
))
{
kbVectorService
.
deleteKbVector
(
id
);
aiService
.
removeSegments
(
List
.
of
(
String
.
valueOf
(
vectorResponseModel
.
getVectorId
())));
}
else
{
}
// 启用需要更新数据到向量数据库
if
(
Objects
.
equals
(
status
,
1
))
{
VectorSegment
vectorSegment
=
new
VectorSegment
();
vectorSegment
.
setContent
(
kbResponseModel
.
getQuestion
()
+
"\n"
+
kbResponseModel
.
getAnswer
());
Map
<
String
,
Object
>
metadata
=
new
HashMap
<>();
metadata
.
put
(
"kb_id"
,
kbResponseModel
.
getStatus
()
);
metadata
.
put
(
"kb_id"
,
id
);
metadata
.
put
(
"tag_id"
,
kbResponseModel
.
getTagId
());
metadata
.
put
(
"question"
,
kbResponseModel
.
getQuestion
());
metadata
.
put
(
"answer"
,
kbResponseModel
.
getAnswer
());
vectorSegment
.
setMetadata
(
metadata
);
aiService
.
addVectorSegments
(
List
.
of
(
vectorSegment
));
List
<
String
>
strings
=
aiService
.
addVectorSegments
(
List
.
of
(
vectorSegment
));
// 更新segmentId到vector
KbVectorSaveModel
saveModel
=
new
KbVectorSaveModel
();
saveModel
.
setVectorId
(
strings
.
get
(
0
));
saveModel
.
setKbId
(
id
);
kbVectorService
.
saveKbVector
(
saveModel
);
}
}
}
...
...
@@ -80,7 +89,9 @@ public class AppKbService {
public
void
deleteKb
(
Integer
id
)
{
kbService
.
deleteKb
(
id
);
KbVectorResponseModel
vectorResponseModel
=
kbVectorService
.
kbVectorDetail
(
id
);
aiService
.
removeSegments
(
List
.
of
(
String
.
valueOf
(
vectorResponseModel
.
getVectorId
())));
if
(
Objects
.
nonNull
(
vectorResponseModel
))
{
aiService
.
removeSegments
(
List
.
of
(
String
.
valueOf
(
vectorResponseModel
.
getVectorId
())));
}
}
/**
...
...
@@ -130,6 +141,66 @@ public class AppKbService {
}
/**
* 初始化数据到向量数据库
* @return
*/
public
void
syncStore
()
{
boolean
hasNext
;
Integer
pageNo
=
1
;
do
{
hasNext
=
this
.
syncStoreByPage
(
pageNo
);
pageNo
+=
1
;
}
while
(
hasNext
);
}
@Async
public
boolean
syncStoreByPage
(
Integer
pageNo
)
{
KbRequestModel
requestModel
=
new
KbRequestModel
();
requestModel
.
setStatus
(
1
);
requestModel
.
setPageNo
(
pageNo
);
requestModel
.
setPageSize
(
20
);
Page
<
KbResponseModel
>
page
=
kbService
.
kbPaginQuery
(
requestModel
);
if
(
CollectionUtil
.
isNotEmpty
(
page
.
getRecords
()))
{
List
<
VectorSegment
>
segmentList
=
new
ArrayList
<>();
page
.
getRecords
().
forEach
(
v
->
{
VectorSegment
vectorSegment
=
new
VectorSegment
();
vectorSegment
.
setContent
(
v
.
getQuestion
()
+
"\n"
+
v
.
getAnswer
());
Map
<
String
,
Object
>
metadata
=
new
HashMap
<>();
metadata
.
put
(
"kb_id"
,
v
.
getId
());
metadata
.
put
(
"tag_id"
,
v
.
getTagId
());
metadata
.
put
(
"question"
,
v
.
getQuestion
());
metadata
.
put
(
"answer"
,
v
.
getAnswer
());
vectorSegment
.
setMetadata
(
metadata
);
segmentList
.
add
(
vectorSegment
);
});
// 批量更新
List
<
KbVectorSaveModel
>
kbVectorList
=
new
ArrayList
<>();
// 更新向量ID
List
<
String
>
segmentIdList
=
aiService
.
addVectorSegments
(
segmentList
);
if
(
CollectionUtil
.
isNotEmpty
(
segmentIdList
))
{
for
(
int
i
=
0
;
i
<
segmentIdList
.
size
();
i
++)
{
KbResponseModel
kb
=
page
.
getRecords
().
get
(
i
);
if
(
Objects
.
nonNull
(
kb
))
{
// 中间表
KbVectorSaveModel
saveModel
=
new
KbVectorSaveModel
();
saveModel
.
setVectorId
(
segmentIdList
.
get
(
i
));
saveModel
.
setKbId
(
kb
.
getId
());
kbVectorList
.
add
(
saveModel
);
}
}
}
// 批量插入向量结果
kbVectorService
.
batchSaveKbVector
(
kbVectorList
);
return
true
;
}
return
false
;
}
/**
* 知识库分类列表
...
...
src/main/java/cn/breeze/elleai/controller/admin/KbController.java
View file @
d95c4735
...
...
@@ -61,6 +61,12 @@ public class KbController {
return
ApiResponse
.
ok
(
pageResult
);
}
@Operation
(
summary
=
"向量数据初始化"
)
@GetMapping
(
"/sync_store"
)
public
ApiResponse
<
String
>
syncStore
(){
kbService
.
syncStore
();
return
ApiResponse
.
ok
(
"SUCCESS"
);
}
// @Operation(summary = "知识库分类详情")
// @GetMapping("/tag/detail/{id}")
...
...
src/main/java/cn/breeze/elleai/domain/sparring/model/request/KbVectorSaveModel.java
View file @
d95c4735
...
...
@@ -13,12 +13,12 @@ public class KbVectorSaveModel implements Serializable {
/**
* 知识ID
*/
private
Long
kbId
;
private
Integer
kbId
;
/**
* 向量知识库数据ID
*/
private
Lo
ng
vectorId
;
private
Stri
ng
vectorId
;
/**
* 创建时间
...
...
src/main/java/cn/breeze/elleai/domain/sparring/model/response/KbResponseModel.java
View file @
d95c4735
...
...
@@ -8,7 +8,7 @@ import java.util.Date;
@Data
public
class
KbResponseModel
implements
Serializable
{
private
Long
id
;
private
Integer
id
;
/**
* 知识分类ID
...
...
src/main/java/cn/breeze/elleai/domain/sparring/model/response/KbVectorResponseModel.java
View file @
d95c4735
...
...
@@ -13,12 +13,12 @@ public class KbVectorResponseModel implements Serializable {
/**
* 知识ID
*/
private
Long
kbId
;
private
Integer
kbId
;
/**
* 向量知识库数据ID
*/
private
Lo
ng
vectorId
;
private
Stri
ng
vectorId
;
/**
* 创建时间
...
...
src/main/java/cn/breeze/elleai/domain/sparring/service/ChatCompletionServiceImpl.java
View file @
d95c4735
...
...
@@ -48,7 +48,7 @@ public class ChatCompletionServiceImpl implements ChatCompletionService{
if
(
StrUtil
.
isNotEmpty
(
request
.
getUserId
()))
{
queryWrapper
.
where
(
USER_CHAT_COMPLETION_ENTITY
.
USER_ID
.
eq
(
request
.
getUserId
()));
}
if
(
StrUtil
.
isNotEmpty
(
request
.
getUser
Id
()))
{
if
(
StrUtil
.
isNotEmpty
(
request
.
getUser
Name
()))
{
queryWrapper
.
where
(
USER_CHAT_COMPLETION_ENTITY
.
USER_NAME
.
like
(
"%"
+
request
.
getUserName
()+
"%"
));
}
if
(
Objects
.
nonNull
(
request
.
getStartTime
()))
{
...
...
src/main/java/cn/breeze/elleai/domain/sparring/service/KbVectorService.java
View file @
d95c4735
...
...
@@ -28,4 +28,6 @@ public interface KbVectorService extends IService<KbVectorEntity> {
void
saveKbVector
(
KbVectorSaveModel
dto
);
void
batchSaveKbVector
(
List
<
KbVectorSaveModel
>
list
);
}
src/main/java/cn/breeze/elleai/domain/sparring/service/KbVectorServiceImpl.java
View file @
d95c4735
...
...
@@ -80,5 +80,10 @@ public class KbVectorServiceImpl extends ServiceImpl<KbVectorMapper, KbVectorEnt
}
kbVectorMapper
.
insertOrUpdateSelective
(
entity
);
}
@Override
public
void
batchSaveKbVector
(
List
<
KbVectorSaveModel
>
list
)
{
List
<
KbVectorEntity
>
kbVectorEntities
=
BeanUtil
.
copyToList
(
list
,
KbVectorEntity
.
class
);
kbVectorMapper
.
insertBatchSelective
(
kbVectorEntities
);
}
}
src/main/java/cn/breeze/elleai/facade/MilvusVectorStoreFacade.java
View file @
d95c4735
...
...
@@ -29,7 +29,7 @@ public class MilvusVectorStoreFacade implements VectorStoreService {
@Value
(
"${milvus.dimension:1024}"
)
private
Integer
dimension
;
@Value
(
"${milvus.collection:embedding_store}"
)
@Value
(
"${milvus.collection:e
lle_e
mbedding_store}"
)
private
String
collection
;
private
EmbeddingStore
<
TextSegment
>
embeddingStore
;
...
...
src/main/java/cn/breeze/elleai/infra/entity/KbVectorEntity.java
View file @
d95c4735
...
...
@@ -35,12 +35,12 @@ public class KbVectorEntity implements Serializable {
/**
* 知识ID
*/
private
Long
kbId
;
private
Integer
kbId
;
/**
* 向量知识库数据ID
*/
private
Lo
ng
vectorId
;
private
Stri
ng
vectorId
;
/**
* 创建时间
...
...
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