Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
poc-api
Project
Project
Details
Activity
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
poc
poc-api
Commits
5d0ce83f
Commit
5d0ce83f
authored
Jul 02, 2025
by
alex yao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 门户页修改对话Agent流程
parent
b5897bfe
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
295 additions
and
99 deletions
+295
-99
PortalServiceImpl.java
...a/cn/com/poc/portal/aggregate/impl/PortalServiceImpl.java
+295
-99
No files found.
src/main/java/cn/com/poc/portal/aggregate/impl/PortalServiceImpl.java
View file @
5d0ce83f
...
...
@@ -2,32 +2,45 @@ package cn.com.poc.portal.aggregate.impl;
import
cn.com.poc.agent_application.aggregate.AgentApplicationService
;
import
cn.com.poc.agent_application.constant.AgentApplicationDialoguesRecordConstants
;
import
cn.com.poc.agent_application.domain.FunctionResult
;
import
cn.com.poc.agent_application.entity.*
;
import
cn.com.poc.agent_application.service.BizAgentApplicationDialoguesRecordService
;
import
cn.com.poc.agent_application.service.BizAgentApplicationInfoService
;
import
cn.com.poc.agent_application.service.BizAgentApplicationPublishService
;
import
cn.com.poc.agent_application.service.*
;
import
cn.com.poc.agent_application.utils.AgentApplicationTools
;
import
cn.com.poc.ai_dialogues.entity.BizAiDialoguesEntity
;
import
cn.com.poc.ai_dialogues.service.BizAiDialoguesService
;
import
cn.com.poc.common.constant.CommonConstant
;
import
cn.com.poc.common.constant.FmxParamConfigConstant
;
import
cn.com.poc.common.utils.SSEUtil
;
import
cn.com.poc.common.utils.StringUtils
;
import
cn.com.poc.common.utils.UUIDTool
;
import
cn.com.poc.common.utils.*
;
import
cn.com.poc.knowledge.aggregate.KnowledgeService
;
import
cn.com.poc.knowledge.constant.KnowledgeConstant
;
import
cn.com.poc.knowledge.entity.BizKnowledgeDocumentEntity
;
import
cn.com.poc.knowledge.query.KnowledgeDocumentRelationQueryItem
;
import
cn.com.poc.knowledge.service.BizKnowledgeDocumentService
;
import
cn.com.poc.long_document.domain.LongtextDialoguesResult
;
import
cn.com.poc.portal.aggregate.PortalService
;
import
cn.com.poc.portal.entity.BizPortalDialoguesEntity
;
import
cn.com.poc.portal.entity.PortalDialoguesCallEntity
;
import
cn.com.poc.portal.service.BizPortalDialoguesService
;
import
cn.com.poc.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.KnowledgeSearchTypeEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.LLMRoleEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.*
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.function.FunctionCallResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.SearchKnowledgeResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.web_seach.WebSearchFunction
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.web_seach.WebSearchFunctionResult
;
import
cn.com.poc.thirdparty.service.LLMService
;
import
cn.com.poc.writing.dto.AiWritingTitleGenerationDto
;
import
cn.com.poc.writing.entity.BizAiWritingDialoguesRecordEntity
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
cn.com.yict.framemax.frame.service.FmxParamConfigService
;
import
cn.hutool.core.collection.CollectionUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
...
...
@@ -36,8 +49,14 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.BufferedReader
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
static
cn
.
com
.
poc
.
common
.
constant
.
XLangConstant
.*;
/**
* @author alex.yao
...
...
@@ -48,128 +67,305 @@ public class PortalServiceImpl implements PortalService {
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
PortalService
.
class
);
private
final
String
FMX_PARAM_AGENT_ID_CODE
=
"portal.agent_id"
;
@Resource
private
BizAgentApplicationGcConfigService
bizAgentApplicationGcConfigService
;
@Resource
private
FmxParamConfigService
fmxParamConfig
Service
;
private
KnowledgeService
knowledge
Service
;
@Resource
private
Biz
AiDialoguesService
bizAiDialogues
Service
;
private
Biz
KnowledgeDocumentService
bizKnowledgeDocument
Service
;
@Resource
private
AgentApplicationService
agentApplication
Service
;
private
DemandKnowledgeService
demandKnowledge
Service
;
@Resource
private
KnowledgeService
knowledge
Service
;
private
BizAgentApplicationDialoguesRecordService
bizAgentApplicationDialoguesRecord
Service
;
@Resource
private
BizAgentApplicationInfoService
bizAgentApplicationInfo
Service
;
private
LLMService
llm
Service
;
@Resource
private
WebSearchFunction
webSearchFunction
;
@Resource
private
BizAgentApplication
DialoguesRecordService
bizAgentApplicationDialoguesRecord
Service
;
private
BizAgentApplication
PluginService
bizAgentApplicationPlugin
Service
;
@Override
public
void
call
(
PortalDialoguesCallEntity
callEntity
,
Long
userId
)
throws
Exception
{
//记录提问时间
long
inputTimestamp
=
System
.
currentTimeMillis
();
SSEUtil
sseUtil
=
new
SSEUtil
();
// 知识库
//获取知识库配置
List
<
Integer
>
kdIds
=
knowledgeService
.
getKdIdsByKnowledgeInfoIds
(
callEntity
.
getKnowledgeIds
());
List
<
KnowledgeContentResult
>
knowledgeResult
=
knowledge
(
kdIds
,
callEntity
.
getInput
(),
5
,
0.5
,
KnowledgeSearchTypeEnum
.
MIX
);
String
agentId
=
StringUtils
.
isBlank
(
callEntity
.
getAgentId
())
?
fmxParamConfigService
.
getParam
(
FMX_PARAM_AGENT_ID_CODE
)
:
callEntity
.
getAgentId
();
if
(
StringUtils
.
isBlank
(
agentId
))
{
logger
.
error
(
"获取门户首页对话agentId失败"
);
throw
new
BusinessException
(
"对话异常"
);
}
// 获取Agent基本信息
BizAgentApplicationInfoEntity
infoEntity
=
bizAgentApplicationInfoService
.
getByAgentId
(
agentId
);
if
(
infoEntity
==
null
)
{
logger
.
error
(
"获取对话agent信息失败"
);
throw
new
BusinessException
(
"对话异常"
);
}
// 保存对话基础信息
BizAiDialoguesEntity
bizAiDialoguesEntity
=
new
BizAiDialoguesEntity
();
bizAiDialoguesEntity
.
setMemberId
(
userId
);
bizAiDialoguesEntity
.
setDialoguesId
(
callEntity
.
getDialoguesId
());
bizAiDialoguesEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizAiDialoguesEntity
>
bizAiDialoguesEntities
=
bizAiDialoguesService
.
findByExample
(
bizAiDialoguesEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
bizAiDialoguesEntities
))
{
logger
.
error
(
"dialogues id 不存在,请重新创建"
);
throw
new
BusinessException
(
"对话异常"
);
}
// 保存标题信息
if
(
StringUtils
.
isBlank
(
bizAiDialoguesEntities
.
get
(
0
).
getTitle
()))
{
BizAiDialoguesEntity
portalDialoguesEntity
=
bizAiDialoguesEntities
.
get
(
0
);
portalDialoguesEntity
.
setTitle
(
callEntity
.
getInput
());
bizAiDialoguesService
.
update
(
portalDialoguesEntity
);
}
// 获取对话配置
String
largeModel
=
callEntity
.
getEnableDeepThinking
()
?
"DeepSeek"
:
"DeepSeek-v3"
;
//获取模型
String
agentSystem
=
infoEntity
.
getAgentSystem
();
//获取Agent角色词
List
<
Integer
>
kdIds
=
knowledgeService
.
getKdIdsByKnowledgeInfoIds
(
callEntity
.
getKnowledgeIds
());
//获取知识库ids
List
<
Message
>
messages
=
AgentApplicationTools
.
buildMessage
(
callEntity
.
getDialoguesId
(),
agentId
,
userId
,
callEntity
.
getInput
());
//构建消息
List
<
Tool
>
tools
;
if
(
callEntity
.
getEnableSearchEngine
()
||
StringUtils
.
isNotBlank
(
callEntity
.
getFileUrl
()))
{
tools
=
AgentApplicationTools
.
buildFunctionConfig
(
infoEntity
.
getVariableStructure
(),
infoEntity
.
getIsLongMemory
(),
callEntity
.
getDialoguesId
(),
agentId
,
infoEntity
.
getUnitIds
(),
infoEntity
.
getIsDocumentParsing
());
//构建函数配置
}
else
{
tools
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
knowledgeResult
))
{
LargeModelDemandResult
result
=
new
LargeModelDemandResult
();
result
.
setCode
(
"0"
);
result
.
setFunction
(
null
);
result
.
setDbChainResult
(
null
);
result
.
setKnowledgeContentResult
(
knowledgeResult
);
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
}
// 插件调用
ToolFunction
toolFunction
=
null
;
if
(
callEntity
.
getEnableSearchEngine
())
{
List
<
Message
>
messages
=
new
ArrayList
<>();
Message
message
=
new
Message
();
message
.
setRole
(
"user"
);
message
.
setContent
(
callEntity
.
getInput
());
messages
.
add
(
message
);
String
[]
unitIds
=
new
String
[
1
];
unitIds
[
0
]
=
"web_search"
;
List
<
Tool
>
tools
=
AgentApplicationTools
.
buildFunctionConfig
(
null
,
"N"
,
callEntity
.
getDialoguesId
(),
callEntity
.
getDialoguesId
(),
unitIds
,
"N"
);
CheckPluginUseEntity
checkPluginUseEntity
=
AgentApplicationTools
.
checkPluginUse
(
messages
,
tools
,
null
);
FunctionCallResult
functionCallResult
=
checkPluginUseEntity
.
getFunctionCallResult
();
if
(
functionCallResult
!=
null
)
{
FunctionCall
functionCall
=
functionCallResult
.
getFunctionCall
();
if
(
"web_search"
.
equals
(
functionCall
.
getName
()))
{
AbstractFunctionResult
<
List
<
WebSearchFunctionResult
>>
functionResult
=
webSearchFunction
.
doFunction
(
functionCall
.
getArguments
(),
callEntity
.
getDialoguesId
(),
null
,
null
);
if
(
functionResult
!=
null
&&
CollectionUtils
.
isNotEmpty
(
functionResult
.
getFunctionResult
()))
{
List
<
WebSearchFunctionResult
>
webSearchFunctionResults
=
functionResult
.
getFunctionResult
();
if
(
CollectionUtils
.
isNotEmpty
(
webSearchFunctionResults
))
{
toolFunction
=
new
ToolFunction
();
toolFunction
.
setResult
(
JsonUtils
.
serialize
(
webSearchFunctionResults
));
toolFunction
.
setName
(
"web_search"
);
toolFunction
.
setArguments
(
functionCall
.
getArguments
());
toolFunction
.
setDisplayFormat
(
"json"
);
LargeModelDemandResult
result
=
new
LargeModelDemandResult
();
result
.
setCode
(
"0"
);
result
.
setFunction
(
toolFunction
);
result
.
setDbChainResult
(
null
);
result
.
setKnowledgeContentResult
(
null
);
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
}
}
List
<
String
>
fileUrls
=
new
ArrayList
<>();
//构建文件链接
if
(
StringUtils
.
isNotBlank
(
callEntity
.
getFileUrl
()))
{
fileUrls
.
add
(
callEntity
.
getFileUrl
());
}
CheckPluginUseEntity
checkPluginUseEntity
=
AgentApplicationTools
.
checkPluginUse
(
messages
,
tools
,
fileUrls
);
//检查插件使用
FunctionCallResult
functionCallResult
=
checkPluginUseEntity
.
getFunctionCallResult
();
//函数调用结果
boolean
stream
=
true
;
//是否流式输出
KnowledgeSearchTypeEnum
knowledgeSearchTypeEnum
=
KnowledgeSearchTypeEnum
.
valueOf
(
infoEntity
.
getKnowledgeSearchType
());
//知识库检索方式
KnowledgeSuperclassProblemConfig
knowledgeSuperclassProblemConfig
=
new
KnowledgeSuperclassProblemConfig
();
//知识库超纲配置
knowledgeSuperclassProblemConfig
.
setKnowledgeResponseType
(
infoEntity
.
getKnowledgeResponseType
());
knowledgeSuperclassProblemConfig
.
setKnowledgeCustomResponse
(
infoEntity
.
getKnowledgeCustomResponse
());
}
}
//组装请求参数
List
<
Message
>
messages
=
buildMessages
(
callEntity
.
getDialoguesId
(),
userId
,
callEntity
.
getInput
(),
callEntity
.
getFileUrl
(),
knowledgeResult
,
toolFunction
);
LargeModelResponse
largeModelResponse
=
new
LargeModelResponse
();
largeModelResponse
.
setModel
(
callEntity
.
getEnableDeepThinking
()
?
"deepseek-chat"
:
"deepseek-v3"
);
//获取模型);
largeModelResponse
.
setMessages
(
messages
.
toArray
(
new
Message
[
0
]));
largeModelResponse
.
setStream
(
true
);
BufferedReader
bufferedReader
=
llmService
.
chatChunk
(
largeModelResponse
);
LongtextDialoguesResult
longtextDialoguesResult
=
textOutputStream
(
sseUtil
,
bufferedReader
);
// 保存用户输入记录
Long
inputTimestamp
=
System
.
currentTimeMillis
();
// 调用对话Agent
ServletRequestAttributes
servletRequestAttributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
HttpServletResponse
response
=
servletRequestAttributes
.
getResponse
();
AgentResultEntity
agentResultEntity
=
agentApplicationService
.
callAgentApplication
(
agentId
,
callEntity
.
getDialoguesId
(),
largeModel
,
agentSystem
,
kdIds
.
toArray
(
new
Integer
[
0
]),
null
,
infoEntity
.
getCommunicationTurn
(),
infoEntity
.
getTopP
(),
infoEntity
.
getTemperature
(),
messages
,
tools
,
functionCallResult
,
stream
,
infoEntity
.
getKnowledgeSimilarity
(),
infoEntity
.
getKnowledgeNResult
(),
knowledgeSearchTypeEnum
,
knowledgeSuperclassProblemConfig
,
response
);
//保存对话记录
BizAgentApplicationDialoguesRecordEntity
inputRecord
=
new
BizAgentApplicationDialoguesRecordEntity
();
inputRecord
.
setAgentId
(
agentId
);
inputRecord
.
setMemberId
(
userId
);
inputRecord
.
setContent
(
callEntity
.
getInput
());
inputRecord
.
setDialogsId
(
callEntity
.
getDialoguesId
());
inputRecord
.
setRole
(
AgentApplicationDialoguesRecordConstants
.
ROLE
.
USER
);
inputRecord
.
setRole
(
LLMRoleEnum
.
USER
.
getRole
()
);
inputRecord
.
setTimestamp
(
inputTimestamp
);
// 保存AI回复记录
BizAgentApplicationDialoguesRecordEntity
assistantRecord
=
new
BizAgentApplicationDialoguesRecordEntity
();
assistantRecord
.
setMemberId
(
userId
);
assistantRecord
.
setContent
(
longtextDialoguesResult
.
getMessage
());
assistantRecord
.
setReasoningContent
(
longtextDialoguesResult
.
getReasoningContent
());
assistantRecord
.
setDialogsId
(
callEntity
.
getDialoguesId
());
assistantRecord
.
setRole
(
LLMRoleEnum
.
ASSISTANT
.
getRole
());
assistantRecord
.
setTimestamp
(
System
.
currentTimeMillis
());
bizAgentApplicationDialoguesRecordService
.
save
(
inputRecord
);
bizAgentApplicationDialoguesRecordService
.
save
(
assistantRecord
);
}
private
List
<
Message
>
buildMessages
(
String
dialogsId
,
Long
userId
,
String
input
,
String
fileUrl
,
List
<
KnowledgeContentResult
>
knowledgeContentResults
,
ToolFunction
toolFunction
)
throws
Exception
{
// 获取对话提示词
String
promptCode
=
"AiPortalPrompt"
;
BizAgentApplicationGcConfigEntity
documentDialoguePrompt
=
bizAgentApplicationGcConfigService
.
getByConfigCode
(
promptCode
);
if
(
documentDialoguePrompt
==
null
||
StringUtils
.
isBlank
(
documentDialoguePrompt
.
getConfigSystem
()))
{
logger
.
error
(
"获取对话提示词失败 , configCode:{}"
,
promptCode
);
throw
new
BusinessException
(
"获取对话提示词失败"
);
}
// 加载文件
String
fileContent
=
StringUtils
.
EMPTY
;
if
(
StringUtils
.
isNoneBlank
(
fileUrl
))
{
File
file
=
DocumentLoad
.
downloadURLDocument
(
fileUrl
);
fileContent
=
DocumentLoad
.
documentToText
(
file
);
}
BizAgentApplicationDialoguesRecordEntity
outputRecord
=
new
BizAgentApplicationDialoguesRecordEntity
();
outputRecord
.
setRole
(
AgentApplicationDialoguesRecordConstants
.
ROLE
.
ASSISTANT
);
outputRecord
.
setAgentId
(
infoEntity
.
getAgentId
());
outputRecord
.
setDialogsId
(
callEntity
.
getDialoguesId
());
outputRecord
.
setMemberId
(
userId
);
outputRecord
.
setTimestamp
(
System
.
currentTimeMillis
());
outputRecord
.
setContent
(
agentResultEntity
.
getMessage
());
outputRecord
.
setReasoningContent
(
agentResultEntity
.
getReasoningContent
());
bizAgentApplicationDialoguesRecordService
.
save
(
outputRecord
);
// 加载对话提示词
String
prompt
=
documentDialoguePrompt
.
getConfigSystem
();
if
(
CollectionUtils
.
isNotEmpty
(
knowledgeContentResults
))
{
String
knowledgeContent
=
JsonUtils
.
serialize
(
knowledgeContentResults
);
prompt
=
prompt
.
replace
(
"${knowledgeContent}"
,
knowledgeContent
);
}
else
{
prompt
=
prompt
.
replace
(
"${knowledgeContent}"
,
StringUtils
.
EMPTY
);
}
if
(
toolFunction
!=
null
)
{
prompt
=
prompt
.
replace
(
"${toolFunction}"
,
JsonUtils
.
serialize
(
toolFunction
));
}
prompt
=
prompt
.
replace
(
"${question}"
,
input
).
replace
(
"${fileContent}"
,
fileContent
);
// 配置message
List
<
Message
>
messages
=
new
ArrayList
<>();
Message
systemMessage
=
new
Message
();
systemMessage
.
setContent
(
prompt
);
systemMessage
.
setRole
(
LLMRoleEnum
.
SYSTEM
.
getRole
());
messages
.
add
(
systemMessage
);
// 对话记录
BizAgentApplicationDialoguesRecordEntity
recordEntity
=
new
BizAgentApplicationDialoguesRecordEntity
();
recordEntity
.
setDialogsId
(
dialogsId
);
recordEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
recordEntity
.
setMemberId
(
userId
);
List
<
BizAgentApplicationDialoguesRecordEntity
>
recordEntities
=
bizAgentApplicationDialoguesRecordService
.
findByExample
(
recordEntity
,
null
);
if
(
CollectionUtils
.
isNotEmpty
(
recordEntities
))
{
for
(
BizAgentApplicationDialoguesRecordEntity
entity
:
recordEntities
)
{
Message
message
=
new
Message
();
message
.
setContent
(
entity
.
getContent
());
message
.
setRole
(
entity
.
getRole
());
messages
.
add
(
message
);
}
}
//判断最后是否为User,若是则删除。
if
(
CollectionUtils
.
isNotEmpty
(
messages
))
{
if
(
LLMRoleEnum
.
USER
.
getRole
().
equals
(
messages
.
get
(
messages
.
size
()
-
1
).
getRole
()))
{
Long
recordId
=
recordEntities
.
get
(
recordEntities
.
size
()
-
1
).
getId
();
bizAgentApplicationDialoguesRecordService
.
deletedById
(
recordId
);
messages
.
remove
(
messages
.
size
()
-
1
);
}
}
// 用户输入
Message
message
=
new
Message
();
message
.
setContent
(
input
);
message
.
setRole
(
LLMRoleEnum
.
USER
.
getRole
());
messages
.
add
(
message
);
logger
.
info
(
"--------- Build Messages dialogsId:{},messages:{}--------------"
,
dialogsId
,
messages
);
return
messages
;
}
private
List
<
KnowledgeContentResult
>
knowledge
(
List
<
Integer
>
kdIds
,
String
input
,
Integer
topK
,
Double
score
,
KnowledgeSearchTypeEnum
searchTypeEnum
)
{
List
<
KnowledgeContentResult
>
knowledgeContentResults
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
kdIds
))
{
return
knowledgeContentResults
;
}
List
<
String
>
knowledgeIds
=
new
ArrayList
<>();
for
(
Integer
kdId
:
kdIds
)
{
BizKnowledgeDocumentEntity
knowledgeDocumentEntity
=
bizKnowledgeDocumentService
.
get
(
kdId
);
// 筛选训练完成的文档,否则跳过该文档
if
(
null
==
knowledgeDocumentEntity
&&
KnowledgeConstant
.
TrainStatus
.
COMPLETE
.
equals
(
knowledgeDocumentEntity
.
getTrainStatus
()))
{
continue
;
}
knowledgeIds
.
add
(
knowledgeDocumentEntity
.
getKnowledgeId
());
}
SearchKnowledgeResult
searchKnowledgeResult
=
demandKnowledgeService
.
searchKnowledge
(
input
,
knowledgeIds
,
topK
,
score
,
searchTypeEnum
);
if
(
CollectionUtils
.
isNotEmpty
(
searchKnowledgeResult
.
getDocuments
()))
{
for
(
int
i
=
1
;
i
<=
searchKnowledgeResult
.
getDocuments
().
size
();
i
++)
{
KnowledgeContentResult
knowledgeContentResult
=
new
KnowledgeContentResult
();
knowledgeContentResult
.
setContent
(
searchKnowledgeResult
.
getDocuments
().
get
(
i
-
1
));
knowledgeContentResult
.
setKnowledgeId
(
searchKnowledgeResult
.
getKnowledgeIds
().
get
(
i
-
1
));
knowledgeContentResult
.
setScore
(
searchKnowledgeResult
.
getScore
().
get
(
i
-
1
));
knowledgeContentResults
.
add
(
knowledgeContentResult
);
}
// 根据knowledgeId获取知识库名和文档名
knowledgeIds
=
knowledgeContentResults
.
stream
().
map
(
KnowledgeContentResult:
:
getKnowledgeId
).
distinct
().
collect
(
Collectors
.
toList
());
List
<
KnowledgeDocumentRelationQueryItem
>
knowledgeDocumentRelationQueryItems
=
bizKnowledgeDocumentService
.
knowledgeDocumentRelationQuery
(
knowledgeIds
,
null
);
for
(
KnowledgeContentResult
result
:
knowledgeContentResults
)
{
String
knowledgeId
=
result
.
getKnowledgeId
();
KnowledgeDocumentRelationQueryItem
item
=
knowledgeDocumentRelationQueryItems
.
stream
().
filter
(
v
->
v
.
getKnowledgeId
().
equals
(
knowledgeId
)).
findFirst
().
get
();
result
.
setKnowledgeName
(
item
.
getKnowledgeName
());
result
.
setKdId
(
item
.
getKdId
());
result
.
setDocumentName
(
item
.
getDocumentName
());
}
}
return
knowledgeContentResults
;
}
/**
* 文本输出结果
*
* @param sseUtil
* @param bufferedReader
* @throws IOException
*/
private
LongtextDialoguesResult
textOutputStream
(
SSEUtil
sseUtil
,
BufferedReader
bufferedReader
)
throws
IOException
{
String
res
=
""
;
StringBuilder
output
=
new
StringBuilder
();
StringBuilder
reasoningContent
=
new
StringBuilder
();
try
{
while
((
res
=
bufferedReader
.
readLine
())
!=
null
)
{
if
(
StringUtils
.
isEmpty
(
res
))
{
continue
;
}
res
=
StringUtils
.
replace
(
res
,
"data: "
,
StringUtils
.
EMPTY
);
LargeModelDemandResult
result
=
JsonUtils
.
deSerialize
(
res
,
LargeModelDemandResult
.
class
);
if
(!
"0"
.
equals
(
result
.
getCode
()))
{
logger
.
error
(
"LLM Error,code:{}"
,
result
.
getCode
());
BusinessException
ex
=
new
BusinessException
(
"exception/call.failure"
);
result
.
setMessage
(
ex
.
getMessage
());
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
sseUtil
.
send
(
"[DONE]"
);
sseUtil
.
complete
();
throw
ex
;
}
result
.
setFunction
(
null
);
result
.
setDbChainResult
(
null
);
result
.
setKnowledgeContentResult
(
null
);
sseUtil
.
send
(
JsonUtils
.
serialize
(
result
));
if
(
StringUtils
.
isNotEmpty
(
result
.
getMessage
()))
{
output
.
append
(
result
.
getMessage
());
}
if
(
StringUtils
.
isNotEmpty
(
result
.
getReasoningContent
()))
{
reasoningContent
.
append
(
result
.
getReasoningContent
());
}
}
// 关闭资源
sseUtil
.
send
(
"[DONE]"
);
sseUtil
.
complete
();
LongtextDialoguesResult
longtextDialoguesResult
=
new
LongtextDialoguesResult
();
longtextDialoguesResult
.
setMessage
(
output
.
toString
());
longtextDialoguesResult
.
setReasoningContent
(
reasoningContent
.
toString
());
return
longtextDialoguesResult
;
}
catch
(
IOException
e
)
{
logger
.
error
(
"连接断开,code:{}"
,
e
.
getMessage
());
sseUtil
.
completeByError
(
"连接断开"
);
throw
new
BusinessException
(
"连接断开"
);
}
finally
{
bufferedReader
.
close
();
}
}
private
ToolFunction
functionResultConvertToolFunction
(
FunctionResult
functionResult
)
{
ToolFunction
toolFunction
=
new
ToolFunction
();
BizAgentApplicationPluginEntity
bizAgentApplicationPluginEntity
=
bizAgentApplicationPluginService
.
getInfoByPluginId
(
functionResult
.
getFunctionName
());
if
(
bizAgentApplicationPluginEntity
!=
null
&&
!
bizAgentApplicationPluginEntity
.
getClassification
().
equals
(
"system"
))
{
String
lang
=
BlContext
.
getCurrentLocaleLanguageToLowerCase
();
switch
(
lang
)
{
case
ZH_CN:
toolFunction
.
setName
(
bizAgentApplicationPluginEntity
.
getZhCnTitle
());
break
;
case
ZH_TW:
toolFunction
.
setName
(
bizAgentApplicationPluginEntity
.
getZhTwTitle
());
break
;
case
EN:
toolFunction
.
setName
(
bizAgentApplicationPluginEntity
.
getEnTitle
());
break
;
}
toolFunction
.
setDisplayFormat
(
bizAgentApplicationPluginEntity
.
getDisplayFormat
());
}
toolFunction
.
setArguments
(
functionResult
.
getFunctionArg
());
String
functionResultStr
=
functionResult
.
getFunctionResult
()
instanceof
String
?
String
.
valueOf
(
functionResult
.
getFunctionResult
())
:
JsonUtils
.
serialize
(
functionResult
.
getFunctionResult
());
toolFunction
.
setResult
(
functionResultStr
);
return
toolFunction
;
}
}
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