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
d2f47dc8
Commit
d2f47dc8
authored
Nov 27, 2024
by
陈立彬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
单题答题改为流式返回
parent
1999bb9c
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
312 additions
and
5 deletions
+312
-5
SubmitAnswerStreamResultDto.java
...application/dto/response/SubmitAnswerStreamResultDto.java
+19
-0
AiPlatformExtensionService.java
...lleai/application/service/AiPlatformExtensionService.java
+41
-0
AppExamineService.java
.../breeze/elleai/application/service/AppExamineService.java
+202
-0
ExamineMobileController.java
...eeze/elleai/controller/front/ExamineMobileController.java
+44
-0
SingleJob.java
src/main/java/cn/breeze/elleai/job/SingleJob.java
+6
-5
No files found.
src/main/java/cn/breeze/elleai/application/dto/response/SubmitAnswerStreamResultDto.java
0 → 100644
View file @
d2f47dc8
package
cn
.
breeze
.
elleai
.
application
.
dto
.
response
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* AI单题点评结果
*/
@Data
public
class
SubmitAnswerStreamResultDto
implements
Serializable
{
@Schema
(
description
=
"评分"
)
private
Float
score
;
@Schema
(
description
=
"参考答案"
)
private
String
answer
;
}
src/main/java/cn/breeze/elleai/application/service/AiPlatformExtensionService.java
View file @
d2f47dc8
...
...
@@ -9,6 +9,7 @@ import cn.breeze.elleai.domain.sparring.model.response.QaAssistantResponseModel;
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.util.NumberUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
...
...
@@ -90,6 +91,46 @@ public class AiPlatformExtensionService {
return
null
;
}
/**
* 单题评分+点评
* @param sessionId
* @param userId
* @param businessId 单题答题记录ID
*/
public
AiSingleEvaluateResultDto
run4SingleQaScore
(
String
sessionId
,
String
userId
,
Integer
businessId
)
{
Map
<
String
,
String
>
inputs
=
new
HashMap
<>();
inputs
.
put
(
"scene"
,
"single_qa_score"
);
inputs
.
put
(
"business_id"
,
String
.
valueOf
(
businessId
));
JSONObject
param
=
new
JSONObject
();
param
.
put
(
"query"
,
businessId
);
param
.
put
(
"inputs"
,
inputs
);
param
.
put
(
"response_mode"
,
"blocking"
);
param
.
put
(
"conversation_id"
,
""
);
param
.
put
(
"user"
,
userId
);
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
setBearerAuth
(
apiKey
);
log
.
info
(
"异步请求参数1,sessionId = {}"
,
sessionId
);
log
.
info
(
"异步请求参数2,req = {}"
,
JSONObject
.
toJSONString
(
param
));
HttpEntity
<
String
>
postEntity
=
new
HttpEntity
<>(
param
.
toJSONString
(),
headers
);
ResponseEntity
<
String
>
response
=
restTemplate
.
postForEntity
(
difyBase
+
"/chat-messages"
,
postEntity
,
String
.
class
);
String
body
=
response
.
getBody
();
if
(
Objects
.
equals
(
response
.
getStatusCode
(),
HttpStatus
.
OK
))
{
JSONObject
bodyObject
=
JSONObject
.
parseObject
(
body
);
String
conversationId
=
bodyObject
.
getString
(
"conversation_id"
);
String
answer
=
bodyObject
.
getString
(
"answer"
);
if
(
NumberUtil
.
isNumber
(
answer
))
{
AiSingleEvaluateResultDto
result
=
new
AiSingleEvaluateResultDto
();
result
.
setScore
(
Float
.
valueOf
(
answer
));
result
.
setDifySessionId
(
conversationId
);
return
result
;
}
}
return
null
;
}
/**
* 考试总点评
* @param sessionId
...
...
src/main/java/cn/breeze/elleai/application/service/AppExamineService.java
View file @
d2f47dc8
This diff is collapsed.
Click to expand it.
src/main/java/cn/breeze/elleai/controller/front/ExamineMobileController.java
View file @
d2f47dc8
...
...
@@ -3,6 +3,7 @@ package cn.breeze.elleai.controller.front;
import
cn.breeze.elleai.application.dto.ApiResponse
;
import
cn.breeze.elleai.application.dto.PageResult
;
import
cn.breeze.elleai.application.dto.inner.AiSingleEvaluateResultDto
;
import
cn.breeze.elleai.application.dto.request.*
;
import
cn.breeze.elleai.application.dto.response.*
;
import
cn.breeze.elleai.application.service.AppExamineService
;
...
...
@@ -13,7 +14,14 @@ import io.swagger.v3.oas.annotations.Parameter;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
io.swagger.v3.oas.annotations.tags.Tag
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.http.codec.ServerSentEvent
;
import
org.springframework.web.bind.annotation.*
;
import
reactor.core.publisher.Flux
;
import
java.time.Duration
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.concurrent.atomic.AtomicInteger
;
@RestController
@RequestMapping
(
value
=
"/front/examine"
)
...
...
@@ -150,4 +158,40 @@ public class ExamineMobileController {
return
ApiResponse
.
ok
(
"SUCCESS"
);
}
@Operation
(
summary
=
"考试答题"
)
@PostMapping
(
value
=
"submit_answer_stream"
)
public
Flux
<
ServerSentEvent
<
SubmitAnswerStreamResultDto
>>
submitAnswerStream
(
@Parameter
(
hidden
=
true
)
UserPrincipal
userPrincipal
,
@RequestBody
SubmitAnswerMobileRequestDto
request
)
{
SubmitAnswerStreamResultDto
resultDto
=
examineService
.
submitAnswerStream
(
userPrincipal
,
request
);
// 拆分答案,流式返回
List
<
String
>
arrays
=
splitStringIntoArrays
(
resultDto
.
getAnswer
());
return
Flux
.
fromIterable
(
arrays
)
.
map
(
data
->
{
SubmitAnswerStreamResultDto
rs
=
new
SubmitAnswerStreamResultDto
();
rs
.
setAnswer
(
data
);
rs
.
setScore
(
resultDto
.
getScore
());
return
ServerSentEvent
.<
SubmitAnswerStreamResultDto
>
builder
().
data
(
rs
).
build
();
})
.
delayElements
(
Duration
.
ofMillis
(
100
))
.
take
(
arrays
.
size
());
}
/**
* 将答案拆分成最多10个数组
* @param input
* @return
*/
public
static
List
<
String
>
splitStringIntoArrays
(
String
input
)
{
int
maxArrays
=
10
;
List
<
String
>
arrays
=
new
ArrayList
<>();
int
length
=
input
.
length
();
int
step
=
Math
.
max
(
1
,
length
/
maxArrays
);
for
(
int
i
=
1
;
i
<=
length
&&
arrays
.
size
()
<
maxArrays
;
i
+=
step
)
{
arrays
.
add
(
input
.
substring
(
0
,
i
));
}
return
arrays
;
}
}
src/main/java/cn/breeze/elleai/job/SingleJob.java
View file @
d2f47dc8
...
...
@@ -7,10 +7,7 @@ import cn.breeze.elleai.domain.sparring.model.request.ExamineDetailRecordRequest
import
cn.breeze.elleai.domain.sparring.model.request.ExamineEvaluateJobSaveModel
;
import
cn.breeze.elleai.domain.sparring.model.request.ExamineRecordDetailSaveModel
;
import
cn.breeze.elleai.domain.sparring.model.request.ExamineRecordSaveModel
;
import
cn.breeze.elleai.domain.sparring.model.response.ExamineDetailRecordResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.ExamineEvaluateJobResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.ExamineQaResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.ExamineRecordDetailResponseModel
;
import
cn.breeze.elleai.domain.sparring.model.response.*
;
import
cn.breeze.elleai.domain.sparring.service.CommonService
;
import
cn.breeze.elleai.domain.sparring.service.ExamineService
;
import
cn.breeze.elleai.util.Codes
;
...
...
@@ -80,7 +77,11 @@ public class SingleJob extends QuartzJobBean {
// 更新答题点评信息
ExamineRecordDetailSaveModel
detailSaveModel
=
new
ExamineRecordDetailSaveModel
();
detailSaveModel
.
setId
(
businessId
);
detailSaveModel
.
setScore
(
evaluateResult
.
getScore
());
// 判断对练类型,对练类型需要更新AI评分分数
ExamineRecordResponseModel
model
=
examineService
.
examineRecordDetail
(
businessNo
);
if
(
Objects
.
equals
(
model
.
getExamineMode
(),
1
))
{
detailSaveModel
.
setScore
(
evaluateResult
.
getScore
());
}
detailSaveModel
.
setEvaluation
(
evaluateResult
.
getEvaluation
());
examineService
.
saveExamineRecordDetail
(
detailSaveModel
);
...
...
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