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
10c477ab
Commit
10c477ab
authored
Oct 22, 2024
by
陈立彬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
知识库管理
parent
151e5a2b
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
388 additions
and
0 deletions
+388
-0
KbRequestDto.java
...n/breeze/elleai/application/dto/request/KbRequestDto.java
+30
-0
KbSaveDto.java
...a/cn/breeze/elleai/application/dto/request/KbSaveDto.java
+36
-0
KbDto.java
...java/cn/breeze/elleai/application/dto/response/KbDto.java
+42
-0
KbTagDto.java
...a/cn/breeze/elleai/application/dto/response/KbTagDto.java
+34
-0
AppKbService.java
...va/cn/breeze/elleai/application/service/AppKbService.java
+146
-0
KbController.java
.../java/cn/breeze/elleai/controller/admin/KbController.java
+100
-0
No files found.
src/main/java/cn/breeze/elleai/application/dto/request/KbRequestDto.java
0 → 100644
View file @
10c477ab
package
cn
.
breeze
.
elleai
.
application
.
dto
.
request
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
KbRequestDto
implements
Serializable
{
@Schema
(
description
=
"页码"
)
@JsonProperty
(
"page_no"
)
private
Integer
pageNo
=
1
;
@Schema
(
description
=
"分页数量"
)
@JsonProperty
(
"page_size"
)
private
Integer
pageSize
=
10
;
@Schema
(
description
=
"名称"
)
private
String
name
;
@Schema
(
description
=
"状态(0禁用 1启用)"
)
private
Integer
status
;
@Schema
(
description
=
"分类ID"
)
@JsonProperty
(
"tag_id"
)
private
Integer
tagId
;
}
src/main/java/cn/breeze/elleai/application/dto/request/KbSaveDto.java
0 → 100644
View file @
10c477ab
package
cn
.
breeze
.
elleai
.
application
.
dto
.
request
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
@Data
public
class
KbSaveDto
implements
Serializable
{
private
Long
id
;
/**
* 知识分类ID
*/
private
Long
tagId
;
/**
* 问题
*/
private
String
question
;
/**
* 答案
*/
private
String
answer
;
/**
* 状态0停用,1启用
*/
private
Integer
status
;
}
src/main/java/cn/breeze/elleai/application/dto/response/KbDto.java
0 → 100644
View file @
10c477ab
package
cn
.
breeze
.
elleai
.
application
.
dto
.
response
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
@Data
public
class
KbDto
implements
Serializable
{
private
Long
id
;
/**
* 知识分类ID
*/
private
Long
tagId
;
/**
* 问题
*/
private
String
question
;
/**
* 答案
*/
private
String
answer
;
/**
* 状态0停用,1启用
*/
private
Integer
status
;
/**
* 创建时间
*/
private
Date
createAt
;
/**
* 更新时间
*/
private
Date
updateAt
;
}
src/main/java/cn/breeze/elleai/application/dto/response/KbTagDto.java
0 → 100644
View file @
10c477ab
package
cn
.
breeze
.
elleai
.
application
.
dto
.
response
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
@Data
public
class
KbTagDto
implements
Serializable
{
private
Long
id
;
/**
* 分类名称
*/
private
String
name
;
private
String
description
;
/**
* 状态0停用,1启用
*/
private
Integer
status
;
/**
* 创建时间
*/
private
Date
createAt
;
/**
* 父级ID(1级为0)
*/
private
Long
parentId
;
}
src/main/java/cn/breeze/elleai/application/service/AppKbService.java
0 → 100644
View file @
10c477ab
package
cn
.
breeze
.
elleai
.
application
.
service
;
import
cn.breeze.elleai.application.dto.PageResult
;
import
cn.breeze.elleai.application.dto.langchain.VectorSegment
;
import
cn.breeze.elleai.application.dto.request.KbRequestDto
;
import
cn.breeze.elleai.application.dto.request.KbSaveDto
;
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.response.KbResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.KbVectorResponseModel
;
import
cn.breeze.elleai.domain.sparring.service.KbService
;
import
cn.breeze.elleai.domain.sparring.service.KbTagService
;
import
cn.breeze.elleai.domain.sparring.service.KbVectorService
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.collection.CollectionUtil
;
import
com.mybatisflex.core.paginate.Page
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
/**
* 应用服务
*/
@Slf4j
@Component
@RequiredArgsConstructor
public
class
AppKbService
{
private
final
KbService
kbService
;
private
final
KbTagService
kbTagService
;
private
final
KbVectorService
kbVectorService
;
private
final
AIService
aiService
;
/************************************************** 知识库 **************************************************/
/**
* 更新知识库
* @param id
* @param status
*/
public
void
updateKbStatus
(
Integer
id
,
Integer
status
)
{
KbResponseModel
kbResponseModel
=
kbService
.
kbDetail
(
id
);
if
(
Objects
.
nonNull
(
kbResponseModel
))
{
kbService
.
updateKbStatus
(
id
,
status
);
// 启用/禁用 同步更新向量数据库
KbVectorResponseModel
vectorResponseModel
=
kbVectorService
.
kbVectorDetail
(
id
);
if
(
Objects
.
equals
(
status
,
0
))
{
aiService
.
removeSegments
(
List
.
of
(
String
.
valueOf
(
vectorResponseModel
.
getVectorId
())));
}
else
{
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
(
"tag_id"
,
kbResponseModel
.
getTagId
());
metadata
.
put
(
"question"
,
kbResponseModel
.
getQuestion
());
metadata
.
put
(
"answer"
,
kbResponseModel
.
getAnswer
());
vectorSegment
.
setMetadata
(
metadata
);
aiService
.
addVectorSegments
(
List
.
of
(
vectorSegment
));
}
}
}
/**
* 删除知识库
* @param id
*/
public
void
deleteKb
(
Integer
id
)
{
kbService
.
deleteKb
(
id
);
KbVectorResponseModel
vectorResponseModel
=
kbVectorService
.
kbVectorDetail
(
id
);
aiService
.
removeSegments
(
List
.
of
(
String
.
valueOf
(
vectorResponseModel
.
getVectorId
())));
}
/**
* 获取知识库详情
* @param id
* @return
*/
public
KbDto
kbDetail
(
Integer
id
)
{
KbResponseModel
model
=
kbService
.
kbDetail
(
id
);
KbDto
result
=
BeanUtil
.
copyProperties
(
model
,
KbDto
.
class
);
return
result
;
}
/**
* 保存知识库
* @param dto
*/
public
void
saveKb
(
KbSaveDto
dto
)
{
KbSaveModel
model
=
BeanUtil
.
copyProperties
(
dto
,
KbSaveModel
.
class
);
kbService
.
saveKb
(
model
);
}
/**
* 知识库分页查询
* @param request
* @return
*/
public
PageResult
<
KbDto
>
kbPaginQuery
(
KbRequestDto
request
)
{
KbRequestModel
requestModel
=
BeanUtil
.
copyProperties
(
request
,
KbRequestModel
.
class
);
Page
<
KbResponseModel
>
page
=
kbService
.
kbPaginQuery
(
requestModel
);
PageResult
<
KbDto
>
pageResult
=
PageResult
.
of
(
request
.
getPageNo
(),
request
.
getPageSize
(),
(
int
)
page
.
getTotalRow
(),
null
);
if
(
CollectionUtil
.
isNotEmpty
(
page
.
getRecords
()))
{
List
<
KbDto
>
dtoList
=
page
.
getRecords
().
stream
().
map
(
v
->
{
KbDto
dto
=
BeanUtil
.
copyProperties
(
v
,
KbDto
.
class
);
return
dto
;
}).
collect
(
Collectors
.
toList
());
pageResult
.
setItems
(
dtoList
);
}
return
pageResult
;
}
/**
* 知识库分类列表
* @return
*/
public
List
<
KbTagDto
>
kbTagList
()
{
// DataDicResponseModel dataDicByCode = commonService.getDataDicByCode(Codes.DATA_DIC_KDB_CATEGORY_LIST);
// if(Objects.nonNull(dataDicByCode) && StrUtil.isNotEmpty(dataDicByCode.getDataValue())) {
// return JSONObject.parseArray(dataDicByCode.getDataValue(), KnowledgeDataBaseCategoryDto.class);
// }
return
null
;
}
}
src/main/java/cn/breeze/elleai/controller/admin/KbController.java
0 → 100644
View file @
10c477ab
package
cn
.
breeze
.
elleai
.
controller
.
admin
;
import
cn.breeze.elleai.application.dto.ApiResponse
;
import
cn.breeze.elleai.application.dto.PageResult
;
import
cn.breeze.elleai.application.dto.request.KbRequestDto
;
import
cn.breeze.elleai.application.dto.request.KbSaveDto
;
import
cn.breeze.elleai.application.dto.request.WikiCategoryRequestDto
;
import
cn.breeze.elleai.application.dto.request.WikiCategorySaveDto
;
import
cn.breeze.elleai.application.dto.response.KbDto
;
import
cn.breeze.elleai.application.dto.response.WikiCategoryDto
;
import
cn.breeze.elleai.application.service.AppKbService
;
import
cn.breeze.elleai.config.QueryParam
;
import
io.swagger.v3.oas.annotations.Operation
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
io.swagger.v3.oas.annotations.tags.Tag
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.web.bind.annotation.*
;
@RestController
@RequestMapping
(
value
=
"/admin/kb"
)
@Tag
(
name
=
"管理端-知识库"
,
description
=
"知识库"
)
@RequiredArgsConstructor
public
class
KbController
{
private
final
AppKbService
kbService
;
@Operation
(
summary
=
"知识库详情"
)
@GetMapping
(
"/detail/{id}"
)
public
ApiResponse
<
KbDto
>
detail
(
@Schema
(
description
=
"知识库ID"
)
@PathVariable
(
"id"
)
Integer
id
)
{
KbDto
detail
=
kbService
.
kbDetail
(
id
);
return
ApiResponse
.
ok
(
detail
);
}
@Operation
(
summary
=
"启用/禁用知识库"
)
@PostMapping
(
"/update_status/{id}/{status}"
)
public
ApiResponse
<
String
>
updateStatus
(
@Schema
(
description
=
"知识库ID"
)
@PathVariable
(
"id"
)
Integer
id
,
@Schema
(
description
=
"状态(0禁用 1启用)"
)
@PathVariable
(
"status"
)
Integer
status
)
{
kbService
.
updateKbStatus
(
id
,
status
);
return
ApiResponse
.
ok
(
"ok"
);
}
@Operation
(
summary
=
"删除知识库"
)
@PostMapping
(
"/delete/{id}"
)
public
ApiResponse
<
String
>
delete
(
@Schema
(
description
=
"知识库ID"
)
@PathVariable
(
"id"
)
Integer
id
)
{
kbService
.
deleteKb
(
id
);
return
ApiResponse
.
ok
(
"ok"
);
}
@Operation
(
summary
=
"保存知识库"
)
@PostMapping
(
"/save"
)
public
ApiResponse
<
String
>
saveOrUpdate
(
@RequestBody
KbSaveDto
dto
)
{
kbService
.
saveKb
(
dto
);
return
ApiResponse
.
ok
(
"ok"
);
}
@Operation
(
summary
=
"知识库列表"
)
@GetMapping
(
"/list"
)
public
ApiResponse
<
PageResult
<
KbDto
>>
list
(
@QueryParam
KbRequestDto
request
)
{
PageResult
<
KbDto
>
pageResult
=
kbService
.
kbPaginQuery
(
request
);
return
ApiResponse
.
ok
(
pageResult
);
}
// @Operation(summary = "知识库分类详情")
// @GetMapping("/tag/detail/{id}")
// public ApiResponse<WikiCategoryDto> categoryDetail(@Schema(description = "知识库分类ID") @PathVariable("id") Integer id) {
// WikiCategoryDto detail = examineService.wikiCategoryDetail(id);
// return ApiResponse.ok(detail);
// }
//
// @Operation(summary = "启用/禁用知识库分类")
// @PostMapping("/tag/update_status/{id}/{status}")
// public ApiResponse<String> updateCategoryStatus(@Schema(description = "知识库分类ID") @PathVariable("id") Integer id,
// @Schema(description = "状态(0禁用 1启用)") @PathVariable("status") Integer status) {
// examineService.updateWikiCategoryStatus(id, status);
// return ApiResponse.ok("ok");
// }
//
// @Operation(summary = "删除知识库分类")
// @PostMapping("/tag/delete/{id}")
// public ApiResponse<String> deleteCategory(@Schema(description = "知识库分类ID") @PathVariable("id") Integer id) {
// examineService.deleteWikiCategory(id);
// return ApiResponse.ok("ok");
// }
//
// @Operation(summary = "保存知识库分类")
// @PostMapping("/tag/save")
// public ApiResponse<String> saveOrUpdateCategory(@RequestBody WikiCategorySaveDto dto) {
// examineService.saveWikiCategory(dto);
// return ApiResponse.ok("ok");
// }
//
// @Operation(summary = "知识库分类列表")
// @GetMapping("/tag/list]")
// public ApiResponse<PageResult<WikiCategoryDto>> categoryList(@QueryParam WikiCategoryRequestDto request) {
// PageResult<WikiCategoryDto> pageResult = examineService.wikiCategoryPaginQuery(request);
// return ApiResponse.ok(pageResult);
// }
}
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