Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Pangea-Agent
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
2
Merge Requests
2
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
Gavin-Group
Pangea-Agent
Commits
2a2462fd
Commit
2a2462fd
authored
Dec 29, 2025
by
youxiaoji
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
+ [针对访客预约智能体增加会话记录,任务完成后,会话删除;这个应该是一个针对所有智能体的功能,目前DEMO阶段只针对单个智能体]
parent
02e20c33
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
62 additions
and
14 deletions
+62
-14
DefaultReactExecutor.java
...java/pangea/hiagent/agent/react/DefaultReactExecutor.java
+21
-13
VisitorAppointmentTool.java
...java/pangea/hiagent/tool/impl/VisitorAppointmentTool.java
+7
-1
ChatService.java
...src/main/java/pangea/hiagent/web/service/ChatService.java
+34
-0
No files found.
backend/src/main/java/pangea/hiagent/agent/react/DefaultReactExecutor.java
View file @
2a2462fd
...
@@ -17,6 +17,7 @@ import pangea.hiagent.model.Agent;
...
@@ -17,6 +17,7 @@ import pangea.hiagent.model.Agent;
import
pangea.hiagent.model.UserToken
;
import
pangea.hiagent.model.UserToken
;
import
pangea.hiagent.tool.AgentToolManager
;
import
pangea.hiagent.tool.AgentToolManager
;
import
pangea.hiagent.common.utils.UserUtils
;
import
pangea.hiagent.common.utils.UserUtils
;
import
pangea.hiagent.web.service.ChatService
;
import
pangea.hiagent.web.service.UserTokenService
;
import
pangea.hiagent.web.service.UserTokenService
;
import
java.util.List
;
import
java.util.List
;
...
@@ -32,6 +33,7 @@ import java.util.function.Consumer;
...
@@ -32,6 +33,7 @@ import java.util.function.Consumer;
public
class
DefaultReactExecutor
implements
ReactExecutor
{
public
class
DefaultReactExecutor
implements
ReactExecutor
{
private
final
UserSseService
userSseService
;
private
final
UserSseService
userSseService
;
private
final
ChatService
chatService
;
@Value
(
"${hiagent.react.system-prompt}"
)
@Value
(
"${hiagent.react.system-prompt}"
)
private
String
defaultSystemPrompt
;
private
String
defaultSystemPrompt
;
...
@@ -46,16 +48,15 @@ public class DefaultReactExecutor implements ReactExecutor {
...
@@ -46,16 +48,15 @@ public class DefaultReactExecutor implements ReactExecutor {
private
final
AgentToolManager
agentToolManager
;
private
final
AgentToolManager
agentToolManager
;
private
final
UserTokenService
userTokenService
;
public
DefaultReactExecutor
(
EventSplitter
eventSplitter
,
AgentToolManager
agentToolManager
,
public
DefaultReactExecutor
(
EventSplitter
eventSplitter
,
AgentToolManager
agentToolManager
,
MemoryService
memoryService
,
ErrorHandlerService
errorHandlerService
,
UserSseService
userSseService
,
UserTokenService
userToken
Service
)
{
MemoryService
memoryService
,
ErrorHandlerService
errorHandlerService
,
UserSseService
userSseService
,
ChatService
chat
Service
)
{
this
.
eventSplitter
=
eventSplitter
;
this
.
eventSplitter
=
eventSplitter
;
this
.
agentToolManager
=
agentToolManager
;
this
.
agentToolManager
=
agentToolManager
;
this
.
memoryService
=
memoryService
;
this
.
memoryService
=
memoryService
;
this
.
errorHandlerService
=
errorHandlerService
;
this
.
errorHandlerService
=
errorHandlerService
;
this
.
userSseService
=
userSseService
;
this
.
userSseService
=
userSseService
;
this
.
userTokenService
=
userToken
Service
;
this
.
chatService
=
chat
Service
;
}
}
@Override
@Override
...
@@ -79,7 +80,7 @@ public class DefaultReactExecutor implements ReactExecutor {
...
@@ -79,7 +80,7 @@ public class DefaultReactExecutor implements ReactExecutor {
List
<
Object
>
agentTools
=
getAgentTools
(
agent
);
List
<
Object
>
agentTools
=
getAgentTools
(
agent
);
try
{
try
{
Prompt
prompt
=
buildPromptWithHistory
(
defaultSystemPrompt
,
userInput
,
agent
,
userId
);
Prompt
prompt
=
buildPromptWithHistory
(
defaultSystemPrompt
,
userInput
,
agent
,
userId
,
false
);
ChatResponse
response
=
chatClient
.
prompt
(
prompt
)
ChatResponse
response
=
chatClient
.
prompt
(
prompt
)
.
tools
(
agentTools
.
toArray
())
.
tools
(
agentTools
.
toArray
())
...
@@ -120,7 +121,7 @@ public class DefaultReactExecutor implements ReactExecutor {
...
@@ -120,7 +121,7 @@ public class DefaultReactExecutor implements ReactExecutor {
* @param userId 用户ID(可选,如果为null则自动获取)
* @param userId 用户ID(可选,如果为null则自动获取)
* @return 构建好的提示词对象
* @return 构建好的提示词对象
*/
*/
private
Prompt
buildPromptWithHistory
(
String
systemPrompt
,
String
userInput
,
Agent
agent
,
String
userId
)
{
private
Prompt
buildPromptWithHistory
(
String
systemPrompt
,
String
userInput
,
Agent
agent
,
String
userId
,
boolean
newChat
)
{
List
<
org
.
springframework
.
ai
.
chat
.
messages
.
Message
>
messages
=
new
ArrayList
<>();
List
<
org
.
springframework
.
ai
.
chat
.
messages
.
Message
>
messages
=
new
ArrayList
<>();
messages
.
add
(
new
SystemMessage
(
systemPrompt
));
messages
.
add
(
new
SystemMessage
(
systemPrompt
));
...
@@ -137,8 +138,9 @@ public class DefaultReactExecutor implements ReactExecutor {
...
@@ -137,8 +138,9 @@ public class DefaultReactExecutor implements ReactExecutor {
List
<
org
.
springframework
.
ai
.
chat
.
messages
.
Message
>
historyMessages
=
List
<
org
.
springframework
.
ai
.
chat
.
messages
.
Message
>
historyMessages
=
memoryService
.
getHistoryMessages
(
sessionId
,
historyLength
);
memoryService
.
getHistoryMessages
(
sessionId
,
historyLength
);
if
(!
newChat
)
{
// messages.addAll(historyMessages);
messages
.
addAll
(
historyMessages
);
}
memoryService
.
addUserMessageToMemory
(
sessionId
,
userInput
);
memoryService
.
addUserMessageToMemory
(
sessionId
,
userInput
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
@@ -147,8 +149,8 @@ public class DefaultReactExecutor implements ReactExecutor {
...
@@ -147,8 +149,8 @@ public class DefaultReactExecutor implements ReactExecutor {
}
}
messages
.
add
(
new
UserMessage
(
userInput
));
messages
.
add
(
new
UserMessage
(
userInput
));
for
(
Message
message
:
messages
)
{
for
(
Message
message
:
messages
)
{
log
.
info
(
"message is {}"
,
message
);
log
.
info
(
"message is {}"
,
message
);
}
}
return
new
Prompt
(
messages
);
return
new
Prompt
(
messages
);
}
}
...
@@ -169,15 +171,21 @@ public class DefaultReactExecutor implements ReactExecutor {
...
@@ -169,15 +171,21 @@ public class DefaultReactExecutor implements ReactExecutor {
StringBuilder
fullResponse
=
new
StringBuilder
();
StringBuilder
fullResponse
=
new
StringBuilder
();
try
{
try
{
Prompt
prompt
=
buildPromptWithHistory
(
defaultSystemPrompt
,
userInput
,
agent
,
userId
);
log
.
info
(
"agent id {}"
,
agent
.
getId
());
log
.
info
(
"agentTools {}"
,
agentTools
);
SseTokenEmitter
sseTokenEmitter
=
(
SseTokenEmitter
)
tokenConsumer
;
SseTokenEmitter
sseTokenEmitter
=
(
SseTokenEmitter
)
tokenConsumer
;
String
emitterId
=
sseTokenEmitter
.
getEmitterId
();
String
emitterId
=
sseTokenEmitter
.
getEmitterId
();
String
tmpUserId
=
sseTokenEmitter
.
getUserId
();
Prompt
prompt
=
buildPromptWithHistory
(
defaultSystemPrompt
,
userInput
,
agent
,
tmpUserId
,
false
);
log
.
info
(
"agent id {}"
,
agent
.
getId
());
log
.
info
(
"agentTools {}"
,
agentTools
);
if
(
agent
.
getId
().
compareToIgnoreCase
(
"agent-8"
)
==
0
)
{
if
(
agent
.
getId
().
compareToIgnoreCase
(
"agent-8"
)
==
0
)
{
if
(!
chatService
.
chatExists
(
tmpUserId
,
agent
.
getId
()))
{
log
.
info
(
"new chat for {} {} "
,
userId
,
agent
.
getId
());
prompt
=
buildPromptWithHistory
(
defaultSystemPrompt
,
userInput
,
agent
,
tmpUserId
,
true
);
}
chatClient
.
prompt
(
prompt
)
chatClient
.
prompt
(
prompt
)
.
tools
(
agentTools
.
toArray
())
.
tools
(
agentTools
.
toArray
())
.
toolContext
(
Map
.
of
(
"emitterId"
,
emitterId
,
"userId"
,
sseTokenEmitter
.
getUserId
()))
.
toolContext
(
Map
.
of
(
"emitterId"
,
emitterId
,
"userId"
,
sseTokenEmitter
.
getUserId
()
,
"agentId"
,
agent
.
getId
()
))
.
stream
()
.
stream
()
.
chatResponse
()
.
chatResponse
()
.
subscribe
(
.
subscribe
(
...
...
backend/src/main/java/pangea/hiagent/tool/impl/VisitorAppointmentTool.java
View file @
2a2462fd
...
@@ -23,6 +23,7 @@ import pangea.hiagent.common.utils.InputCodeGenerator;
...
@@ -23,6 +23,7 @@ import pangea.hiagent.common.utils.InputCodeGenerator;
import
pangea.hiagent.model.Agent
;
import
pangea.hiagent.model.Agent
;
import
pangea.hiagent.model.UserToken
;
import
pangea.hiagent.model.UserToken
;
import
pangea.hiagent.web.service.AgentService
;
import
pangea.hiagent.web.service.AgentService
;
import
pangea.hiagent.web.service.ChatService
;
import
pangea.hiagent.web.service.InfoCollectorService
;
import
pangea.hiagent.web.service.InfoCollectorService
;
import
pangea.hiagent.web.service.UserTokenService
;
import
pangea.hiagent.web.service.UserTokenService
;
...
@@ -67,18 +68,20 @@ public class VisitorAppointmentTool {
...
@@ -67,18 +68,20 @@ public class VisitorAppointmentTool {
private
InfoCollectorService
infoCollectorService
;
private
InfoCollectorService
infoCollectorService
;
private
UserSseService
userSseService
;
private
UserSseService
userSseService
;
private
UserTokenService
userTokenService
;
private
UserTokenService
userTokenService
;
private
ChatService
chatService
;
// 登录状态有效期(毫秒),设置为30分钟
// 登录状态有效期(毫秒),设置为30分钟
private
static
final
long
LOGIN_VALIDITY_PERIOD
=
30
*
60
*
1000
;
private
static
final
long
LOGIN_VALIDITY_PERIOD
=
30
*
60
*
1000
;
public
VisitorAppointmentTool
(
UserTokenService
userTokenService
,
AgentService
agentService
,
InfoCollectorService
infoCollectorService
,
UserSseService
userSseService
)
{
public
VisitorAppointmentTool
(
UserTokenService
userTokenService
,
AgentService
agentService
,
InfoCollectorService
infoCollectorService
,
UserSseService
userSseService
,
ChatService
chatService
)
{
this
.
agentService
=
agentService
;
this
.
agentService
=
agentService
;
this
.
infoCollectorService
=
infoCollectorService
;
this
.
infoCollectorService
=
infoCollectorService
;
this
.
ssoToken
=
"33f667865c395f164d29487c15fe74bf76b463f2941ef6af55d14a35a11d60b1"
;
this
.
ssoToken
=
"33f667865c395f164d29487c15fe74bf76b463f2941ef6af55d14a35a11d60b1"
;
this
.
ldapToken
=
"AAECAzY5NDRBNTQ1Njk0NTRFMDV5b3V4aWFvamlaLv+jUGNEEORN24GLIC3OlqcCdw=="
;
this
.
ldapToken
=
"AAECAzY5NDRBNTQ1Njk0NTRFMDV5b3V4aWFvamlaLv+jUGNEEORN24GLIC3OlqcCdw=="
;
this
.
userSseService
=
userSseService
;
this
.
userSseService
=
userSseService
;
this
.
userTokenService
=
userTokenService
;
this
.
userTokenService
=
userTokenService
;
this
.
chatService
=
chatService
;
}
}
@PostConstruct
@PostConstruct
...
@@ -273,6 +276,9 @@ public class VisitorAppointmentTool {
...
@@ -273,6 +276,9 @@ public class VisitorAppointmentTool {
}
}
infoCollectorService
.
clearValue
();
infoCollectorService
.
clearValue
();
infoCollectorService
.
clearInfo
(
pageId
);
infoCollectorService
.
clearInfo
(
pageId
);
String
userId
=
toolContext
.
getContext
().
get
(
"userId"
).
toString
();
String
agentId
=
toolContext
.
getContext
().
get
(
"agentId"
).
toString
();
chatService
.
removeChat
(
userId
,
agentId
);
// sharedContext.tracing().stop(new Tracing.StopOptions()
// sharedContext.tracing().stop(new Tracing.StopOptions()
// .setPath(Paths.get("trace1.zip")));
// .setPath(Paths.get("trace1.zip")));
}
}
...
...
backend/src/main/java/pangea/hiagent/web/service/ChatService.java
0 → 100644
View file @
2a2462fd
package
pangea
.
hiagent
.
web
.
service
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentMap
;
@Slf4j
@Service
public
class
ChatService
{
private
final
ConcurrentMap
<
String
,
String
>
chatList
=
new
ConcurrentHashMap
<>(
1024
);
public
boolean
chatExists
(
String
userId
,
String
agentId
)
{
String
chatId
=
buildChatId
(
userId
,
agentId
);
boolean
exists
=
chatList
.
containsKey
(
chatId
);
if
(!
exists
){
log
.
info
(
"put chatId:{}"
,
chatId
);
chatList
.
put
(
chatId
,
"exists"
);
}
return
exists
;
}
public
void
removeChat
(
String
userId
,
String
agentId
)
{
String
chatId
=
buildChatId
(
userId
,
agentId
);
log
.
info
(
"remove chatId:{}"
,
chatId
);
chatList
.
remove
(
chatId
);
}
private
String
buildChatId
(
String
userId
,
String
agentId
)
{
return
userId
+
"-"
+
agentId
;
}
}
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