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
527191c3
Commit
527191c3
authored
Oct 22, 2024
by
yangyw
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feature: 增加DIFY扩展点
parent
d95c4735
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
140 additions
and
0 deletions
+140
-0
.gitignore
.gitignore
+1
-0
AiPlatformExtensionService.java
...lleai/application/service/AiPlatformExtensionService.java
+105
-0
AiPlatformExtensionController.java
...i/controller/extension/AiPlatformExtensionController.java
+34
-0
No files found.
.gitignore
View file @
527191c3
...
...
@@ -7,6 +7,7 @@ target/
### IntelliJ IDEA ###
.idea
.idea/**
*.iws
*.iml
*.ipr
...
...
src/main/java/cn/breeze/elleai/application/service/AiPlatformExtensionService.java
View file @
527191c3
...
...
@@ -2,7 +2,16 @@ package cn.breeze.elleai.application.service;
import
cn.breeze.elleai.application.dto.inner.AiSingleEvaluateResultDto
;
import
cn.breeze.elleai.application.dto.langchain.RagSearchRequest
;
import
cn.breeze.elleai.application.dto.langchain.VectorSearchRequest
;
import
cn.breeze.elleai.application.dto.langchain.VectorSegment
;
import
cn.breeze.elleai.domain.sparring.model.response.QaAssistantResponseModel
;
import
cn.breeze.elleai.domain.sparring.service.ChatCompletionService
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.alibaba.fastjson2.JSONValidator
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
...
...
@@ -11,6 +20,7 @@ import org.springframework.stereotype.Component;
import
org.springframework.web.client.RestTemplate
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
...
...
@@ -30,6 +40,10 @@ public class AiPlatformExtensionService {
private
final
RestTemplate
restTemplate
=
new
RestTemplate
();
private
final
AIService
aiService
;
private
final
ChatCompletionService
chatCompletionService
;
/**
* 单题评分+点评
...
...
@@ -110,4 +124,95 @@ public class AiPlatformExtensionService {
}
return
null
;
}
/**
* 同音词转换
* @param query
* @return
*/
public
String
wordSwitch
(
String
query
)
{
//todo 待实现
return
query
;
}
/**
* 向量搜索
* @param query
* @param assistantId
* @param topK
* @param score
* @return
*/
public
String
vectorSearch
(
String
query
,
Integer
assistantId
,
Integer
topK
,
Double
score
)
{
VectorSearchRequest
request
=
new
VectorSearchRequest
();
request
.
setQuery
(
query
);
request
.
setMinScore
(
ObjectUtil
.
defaultIfNull
(
score
,
0
d
));
request
.
setTopK
(
ObjectUtil
.
defaultIfNull
(
topK
,
5
));
if
(!
ObjectUtil
.
equals
(
assistantId
,
0
))
{
//需要过滤分类
QaAssistantResponseModel
qaAssistantResponseModel
=
chatCompletionService
.
qaAssistantDetail
(
assistantId
);
if
(
ObjectUtil
.
isNotNull
(
qaAssistantResponseModel
))
{
if
(
JSONValidator
.
from
(
qaAssistantResponseModel
.
getCategoryIds
()).
validate
())
{
List
<
Integer
>
categoryIds
=
JSONArray
.
parseArray
(
qaAssistantResponseModel
.
getCategoryIds
(),
Integer
.
class
);
if
(
CollUtil
.
isNotEmpty
(
categoryIds
))
{
Map
<
String
,
Object
>
metadata
=
new
HashMap
<>();
metadata
.
put
(
"tag_id"
,
categoryIds
);
request
.
setMetadata
(
metadata
);
}
}
}
}
StringBuilder
sb
=
new
StringBuilder
();
List
<
VectorSegment
>
vectorSegments
=
aiService
.
search
(
request
);
if
(
CollUtil
.
isNotEmpty
(
vectorSegments
))
{
//todo 统计命中的知识,更新统计数据
//结果不为空,组装结果
for
(
VectorSegment
vectorSegment
:
vectorSegments
)
{
sb
.
append
(
vectorSegment
.
getContent
()
+
"\n\n"
);
}
}
return
sb
.
toString
();
}
/**
* 向量搜索支持重排
* @param query
* @param assistantId
* @param topK
* @param score
* @return
*/
public
String
vectorSearchWithRerank
(
String
query
,
Integer
assistantId
,
Integer
topK
,
Double
score
,
Integer
rerankTopK
,
Double
rerankScore
)
{
RagSearchRequest
request
=
new
RagSearchRequest
();
request
.
setQuery
(
query
);
request
.
setMinScore
(
ObjectUtil
.
defaultIfNull
(
score
,
0
d
));
request
.
setTopK
(
ObjectUtil
.
defaultIfNull
(
topK
,
5
));
request
.
setEnableRerank
(
true
);
request
.
setTopKRerank
(
ObjectUtil
.
defaultIfNull
(
rerankTopK
,
5
));
request
.
setMinScoreRerank
(
ObjectUtil
.
defaultIfNull
(
rerankScore
,
0
d
));
if
(!
ObjectUtil
.
equals
(
assistantId
,
0
))
{
//需要过滤分类
QaAssistantResponseModel
qaAssistantResponseModel
=
chatCompletionService
.
qaAssistantDetail
(
assistantId
);
if
(
ObjectUtil
.
isNotNull
(
qaAssistantResponseModel
))
{
if
(
JSONValidator
.
from
(
qaAssistantResponseModel
.
getCategoryIds
()).
validate
())
{
List
<
Integer
>
categoryIds
=
JSONArray
.
parseArray
(
qaAssistantResponseModel
.
getCategoryIds
(),
Integer
.
class
);
if
(
CollUtil
.
isNotEmpty
(
categoryIds
))
{
Map
<
String
,
Object
>
metadata
=
new
HashMap
<>();
metadata
.
put
(
"tag_id"
,
categoryIds
);
request
.
setMetadata
(
metadata
);
}
}
}
}
StringBuilder
sb
=
new
StringBuilder
();
List
<
VectorSegment
>
vectorSegments
=
aiService
.
searchWithRerank
(
request
);
if
(
CollUtil
.
isNotEmpty
(
vectorSegments
))
{
//todo 统计命中的知识,更新统计数据
//结果不为空,组装结果
for
(
VectorSegment
vectorSegment
:
vectorSegments
)
{
sb
.
append
(
vectorSegment
.
getContent
()
+
"\n\n"
);
}
}
return
sb
.
toString
();
}
}
src/main/java/cn/breeze/elleai/controller/extension/AiPlatformExtensionController.java
View file @
527191c3
package
cn
.
breeze
.
elleai
.
controller
.
extension
;
import
cn.breeze.elleai.application.service.AiPlatformExtensionService
;
import
io.swagger.v3.oas.annotations.Operation
;
import
io.swagger.v3.oas.annotations.tags.Tag
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
/**
...
...
@@ -17,4 +20,35 @@ public class AiPlatformExtensionController {
private
final
AiPlatformExtensionService
extensionService
;
@Operation
(
summary
=
"同音转换"
)
@PostMapping
(
value
=
"/word_switch"
)
public
String
wordSwitch
(
@RequestParam
(
"query"
)
String
query
)
{
return
extensionService
.
wordSwitch
(
query
);
}
@Operation
(
summary
=
"向量搜索"
)
@PostMapping
(
value
=
"/vector_search"
)
public
String
vectorSearch
(
@RequestParam
(
"query"
)
String
query
,
@RequestParam
(
value
=
"assistant_id"
,
required
=
false
,
defaultValue
=
"0"
)
Integer
assistantId
,
@RequestParam
(
value
=
"top_k"
,
required
=
false
,
defaultValue
=
"5"
)
Integer
topK
,
@RequestParam
(
value
=
"score"
,
required
=
false
,
defaultValue
=
"0"
)
Double
score
)
{
return
extensionService
.
vectorSearch
(
query
,
assistantId
,
topK
,
score
);
}
@Operation
(
summary
=
"向量搜索"
)
@PostMapping
(
value
=
"/vector_search_with_rerank"
)
public
String
vectorSearchWithRerank
(
@RequestParam
(
"query"
)
String
query
,
@RequestParam
(
value
=
"assistant_id"
,
required
=
false
,
defaultValue
=
"0"
)
Integer
assistantId
,
@RequestParam
(
value
=
"top_k"
,
required
=
false
,
defaultValue
=
"5"
)
Integer
topK
,
@RequestParam
(
value
=
"score"
,
required
=
false
,
defaultValue
=
"0"
)
Double
score
,
@RequestParam
(
value
=
"rerank_top_k"
,
required
=
false
,
defaultValue
=
"5"
)
Integer
rerankTopK
,
@RequestParam
(
value
=
"rerank_score"
,
required
=
false
,
defaultValue
=
"0"
)
Double
rerankScore
)
{
return
extensionService
.
vectorSearchWithRerank
(
query
,
assistantId
,
topK
,
score
,
rerankTopK
,
rerankScore
);
}
}
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