Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
pms-dispatch-assistant
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
姜耀祖
pms-dispatch-assistant
Commits
1cc303d1
Commit
1cc303d1
authored
Apr 23, 2025
by
赵灿灿
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加会话记录
parent
a54ffe7a
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
270 additions
and
28 deletions
+270
-28
LangChainController.java
...chassistant/controller/langchain/LangChainController.java
+45
-0
ChatService.java
.../dispatchassistant/domain/langchain/chat/ChatService.java
+141
-8
Conversations.java
...atchassistant/domain/langchain/history/Conversations.java
+1
-1
ConversationsCriteria.java
...stant/domain/langchain/history/ConversationsCriteria.java
+19
-0
Messages.java
.../dispatchassistant/domain/langchain/history/Messages.java
+12
-0
ConversationsRepository.java
...ant/infractructure/langchain/ConversationsRepository.java
+3
-0
MessagesRepository.java
...ssistant/infractructure/langchain/MessagesRepository.java
+11
-8
chat-expert.html
src/main/resources/static/pages/langchain/chat-expert.html
+1
-1
ai-chat-vue.js
src/main/resources/static/pages/langchain/js/ai-chat-vue.js
+37
-10
No files found.
src/main/java/com/infoepoch/pms/dispatchassistant/controller/langchain/LangChainController.java
View file @
1cc303d1
...
...
@@ -18,6 +18,9 @@ import com.infoepoch.pms.dispatchassistant.domain.langchain.chat.chat.ChatReques
import
com.infoepoch.pms.dispatchassistant.domain.langchain.chat.chat.ChatSuccessResponse
;
import
com.infoepoch.pms.dispatchassistant.domain.langchain.chat.knowledgeBaseChat.KnowledgeBaseChatRequest
;
import
com.infoepoch.pms.dispatchassistant.domain.langchain.chat.knowledgeBaseChat.KnowledgeBaseChatResponse
;
import
com.infoepoch.pms.dispatchassistant.domain.langchain.history.Conversations
;
import
com.infoepoch.pms.dispatchassistant.domain.langchain.history.IMessagesRepository
;
import
com.infoepoch.pms.dispatchassistant.domain.langchain.history.Messages
;
import
com.infoepoch.pms.dispatchassistant.domain.langchain.qwen.QwenLine
;
import
com.infoepoch.pms.dispatchassistant.domain.langchain.record.conversation.Conversation
;
import
com.infoepoch.pms.dispatchassistant.domain.langchain.record.conversation.ConversationCriteria
;
...
...
@@ -78,6 +81,7 @@ public class LangChainController {
@Autowired
private
RedisTool
redisTool
;
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
LangChainController
.
class
);
/**
...
...
@@ -375,6 +379,20 @@ public class LangChainController {
mes
.
put
(
"role"
,
"user"
);
mes
.
put
(
"content"
,
chatMessage
);
mesList
.
add
(
mes
);
Conversations
conversations
=
chatService
.
saveConversations
(
sessionId
,
chatMessage
,
"内部专家"
);
Messages
messagesQusetion
=
new
Messages
();
messagesQusetion
.
setRequestId
(
sessionId
);
messagesQusetion
.
setContent
(
chatMessage
);
messagesQusetion
.
setRole
(
"user"
);
messagesQusetion
.
setModelName
(
"qwen2.5-72b"
);
messagesQusetion
=
chatService
.
insertQuestionMessage
(
conversations
,
messagesQusetion
);
Messages
messagesContent
=
new
Messages
();
messagesContent
.
setRole
(
"assistant"
);
messagesContent
.
setModelName
(
"qwen2.5-72b"
);
messagesContent
.
setParentMsgId
(
messagesQusetion
.
getId
());
messagesContent
.
setSort
(
messagesQusetion
.
getSort
()+
1
);
chatService
.
insertMessage
(
conversations
,
messagesContent
);
if
(
historyList
!=
null
&&
historyList
.
size
()>
0
)
{
historyList
.
addAll
(
mesList
);
map
.
put
(
"messages"
,
historyList
);
...
...
@@ -401,6 +419,8 @@ public class LangChainController {
mapGet
.
put
(
"role"
,
"assistant"
);
mapGet
.
put
(
"content"
,
contentGet
.
toString
());
finalHistoryList
.
add
(
mapGet
);
messagesContent
.
setContent
(
contentGet
.
toString
());
chatService
.
updateMessage
(
messagesContent
);
redisTool
.
put
(
sessionId
,
JsonUtils
.
objectToJson
(
finalHistoryList
),
2
,
TimeUnit
.
HOURS
);
Thread
.
sleep
(
1000
);
emitter
.
complete
();
...
...
@@ -678,4 +698,29 @@ public class LangChainController {
String
currentDay
=
DateTool
.
format
(
new
Date
(),
"yyyyMMddHHmmssSSS"
);
return
Result
.
successData
(
currentDay
+
randomNum
.
toString
());
}
/**
* 会话记录列表
*
* @param
* @return
*/
@GetMapping
(
"/conversationHistory"
)
public
Result
conversationHistory
()
{
List
<
Map
<
String
,
Object
>>
mapList
=
chatService
.
conversationHistory
();
return
Result
.
successData
(
mapList
);
}
/**
* 会话记录列表
*
* @param
* @return
*/
@GetMapping
(
"/conversationMessages"
)
public
Result
conversationMessages
(
@RequestParam
String
sessionId
)
{
List
<
Map
<
String
,
Object
>>
mapList
=
chatService
.
conversationMessages
(
sessionId
);
return
Result
.
successData
(
mapList
);
}
}
src/main/java/com/infoepoch/pms/dispatchassistant/domain/langchain/chat/ChatService.java
View file @
1cc303d1
...
...
@@ -17,9 +17,8 @@ import lombok.Data;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
@Service
public
class
ChatService
{
...
...
@@ -114,13 +113,13 @@ public class ChatService {
* @param dialogId
* 新增会话
*/
p
rivate
Conversations
saveConversations
(
String
dialogId
,
String
question
,
String
aiType
)
{
p
ublic
Conversations
saveConversations
(
String
dialogId
,
String
question
,
String
aiType
)
{
Conversations
conversations
=
null
;
try
{
ConversationsCriteria
conversationsCriteria
=
new
ConversationsCriteria
();
conversationsCriteria
.
setSessionId
(
dialogId
);
List
<
Conversations
>
conversationsList
=
iConversationsRepository
.
selectByCriteria
(
conversationsCriteria
);
if
(
conversationsList
==
null
)
if
(
conversationsList
==
null
||
conversationsList
.
size
()<=
0
)
{
User
user
=
auth
.
getUserReq
();
conversations
=
new
Conversations
();
...
...
@@ -128,10 +127,14 @@ public class ChatService {
conversations
.
setUserId
(
user
.
getId
());
conversations
.
setUserName
(
user
.
getUsername
());
conversations
.
setName
(
user
.
getFullname
());
conversations
.
setFirstQuestion
(
question
);
if
(
question
.
length
()>
15000
)
conversations
.
setFirstQuestion
(
question
.
substring
(
0
,
15000
));
else
conversations
.
setFirstQuestion
(
question
);
conversations
.
setAiType
(
aiType
);
conversations
.
setSessionId
(
dialogId
);
conversations
.
setRecordTime
(
new
Date
());
conversations
.
setStatus
(
"1"
);
iConversationsRepository
.
insert
(
conversations
);
}
else
conversations
=
conversationsList
.
get
(
0
);
...
...
@@ -142,16 +145,22 @@ public class ChatService {
}
//新增问题信息
p
rivate
Messages
insertQuestionMessage
(
Conversations
conversations
,
Messages
questionMes
)
{
p
ublic
Messages
insertQuestionMessage
(
Conversations
conversations
,
Messages
questionMes
)
{
//查找当前对话的父对话
MessagesCriteria
messagesCriteria
=
new
MessagesCriteria
();
messagesCriteria
.
setSessionId
(
conversations
.
getSessionId
());
messagesCriteria
.
setCid
(
conversations
.
getId
());
Messages
messagesLast
=
iMessagesRepository
.
selectOneByCriteria
(
messagesCriteria
);
if
(
questionMes
.
getContent
().
length
()>
15000
)
questionMes
.
setContent
(
questionMes
.
getContent
().
substring
(
0
,
15000
));
try
{
if
(
messagesLast
!=
null
)
{
questionMes
.
setParentMsgId
(
messagesLast
.
getId
());
questionMes
.
setSort
(
messagesLast
.
getSort
()+
1
);
}
else
{
questionMes
.
setSort
(
1
);
}
String
id
=
SnowFlake
.
instant
().
nextId
().
toString
();
questionMes
.
setId
(
id
);
...
...
@@ -166,7 +175,7 @@ public class ChatService {
}
//新增回答信息
p
rivate
Messages
insertMessage
(
Conversations
conversations
,
Messages
contMes
)
{
p
ublic
Messages
insertMessage
(
Conversations
conversations
,
Messages
contMes
)
{
try
{
String
id
=
SnowFlake
.
instant
().
nextId
().
toString
();
contMes
.
setId
(
id
);
...
...
@@ -179,4 +188,128 @@ public class ChatService {
}
return
contMes
;
}
//更新回答信息
public
Messages
updateMessage
(
Messages
contMes
)
{
try
{
if
(
contMes
.
getContent
().
length
()>
15000
)
contMes
.
setContent
(
contMes
.
getContent
().
substring
(
0
,
15000
));
iMessagesRepository
.
update
(
contMes
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
contMes
;
}
//查询近7天的会话信息
public
List
<
Map
<
String
,
Object
>>
conversationHistory
()
{
List
<
Map
<
String
,
Object
>>
mapList
=
new
ArrayList
<>();
try
{
User
user
=
auth
.
getUserReq
();
ConversationsCriteria
conversationsCriteria
=
new
ConversationsCriteria
();
conversationsCriteria
.
setUserId
(
user
.
getId
());
conversationsCriteria
.
setConversationsDays
(
7
);
List
<
Conversations
>
conversationsList
=
iConversationsRepository
.
selectByCriteria
(
conversationsCriteria
);
if
(
conversationsList
!=
null
&&
conversationsList
.
size
()>
0
)
{
Date
todayDate
=
getToday
();
Date
yesterday
=
getYesterday
();
Map
<
String
,
Object
>
todayMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
yesterdayMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
sevendayMap
=
new
HashMap
<>();
List
<
Map
<
String
,
Object
>>
todayMapList
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
yesterdayMapList
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
sevendayMapList
=
new
ArrayList
<>();
todayMap
.
put
(
"label"
,
"今天"
);
yesterdayMap
.
put
(
"label"
,
"昨天"
);
sevendayMap
.
put
(
"label"
,
"7天内"
);
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"HH:mm"
);
for
(
Conversations
conversations:
conversationsList
)
{
if
(
conversations
.
getRecordTime
().
after
(
todayDate
))
{
Map
<
String
,
Object
>
td
=
new
HashMap
<>();
td
.
put
(
"id"
,
conversations
.
getSessionId
());
td
.
put
(
"title"
,
conversations
.
getFirstQuestion
());
td
.
put
(
"time"
,
simpleDateFormat
.
format
(
conversations
.
getRecordTime
()));
td
.
put
(
"active"
,
false
);
td
.
put
(
"showMenu"
,
false
);
todayMapList
.
add
(
td
);
}
else
if
(
conversations
.
getRecordTime
().
before
(
todayDate
)&&
conversations
.
getRecordTime
().
after
(
yesterday
))
{
Map
<
String
,
Object
>
yd
=
new
HashMap
<>();
yd
.
put
(
"id"
,
conversations
.
getSessionId
());
yd
.
put
(
"title"
,
conversations
.
getFirstQuestion
());
yd
.
put
(
"time"
,
simpleDateFormat
.
format
(
conversations
.
getRecordTime
()));
yd
.
put
(
"active"
,
true
);
yd
.
put
(
"showMenu"
,
false
);
yesterdayMapList
.
add
(
yd
);
}
else
{
Map
<
String
,
Object
>
sd
=
new
HashMap
<>();
sd
.
put
(
"id"
,
conversations
.
getSessionId
());
sd
.
put
(
"title"
,
conversations
.
getFirstQuestion
());
sd
.
put
(
"time"
,
simpleDateFormat
.
format
(
conversations
.
getRecordTime
()));
sd
.
put
(
"active"
,
true
);
sd
.
put
(
"showMenu"
,
false
);
sevendayMapList
.
add
(
sd
);
}
}
todayMap
.
put
(
"items"
,
todayMapList
);
yesterdayMap
.
put
(
"items"
,
yesterdayMapList
);
sevendayMap
.
put
(
"items"
,
sevendayMapList
);
mapList
.
add
(
todayMap
);
mapList
.
add
(
yesterdayMap
);
mapList
.
add
(
sevendayMap
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
mapList
;
}
//查询会话内容通过会话id
public
List
<
Map
<
String
,
Object
>>
conversationMessages
(
String
sessionId
)
{
List
<
Map
<
String
,
Object
>>
mapList
=
new
ArrayList
<>();
try
{
MessagesCriteria
messagesCriteria
=
new
MessagesCriteria
();
messagesCriteria
.
setSessionId
(
sessionId
);
List
<
Messages
>
messagesList
=
iMessagesRepository
.
selectByCriteria
(
messagesCriteria
);
for
(
Messages
mes:
messagesList
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"role"
,
mes
.
getRole
());
map
.
put
(
"content"
,
mes
.
getContent
());
mapList
.
add
(
map
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
mapList
;
}
public
Date
getToday
()
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
// 设置小时为 0
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
// 分钟归零
calendar
.
set
(
Calendar
.
SECOND
,
0
);
// 秒归零
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
// 毫秒归零
return
calendar
.
getTime
();
}
public
Date
getYesterday
()
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
add
(
Calendar
.
DAY_OF_YEAR
,
-
1
);
// 减 1 天
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
// 小时归零
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
// 分钟归零
calendar
.
set
(
Calendar
.
SECOND
,
0
);
// 秒归零
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
// 毫秒归零
return
calendar
.
getTime
();
}
}
src/main/java/com/infoepoch/pms/dispatchassistant/domain/langchain/history/Conversations.java
View file @
1cc303d1
...
...
@@ -117,7 +117,7 @@ public class Conversations {
return
updateTime
;
}
public
void
setUpdateTime
(
Date
updateTime
)
{
this
.
record
Time
=
updateTime
;
this
.
update
Time
=
updateTime
;
}
public
String
getAiType
()
{
return
aiType
;
...
...
src/main/java/com/infoepoch/pms/dispatchassistant/domain/langchain/history/ConversationsCriteria.java
View file @
1cc303d1
...
...
@@ -141,4 +141,23 @@ public class ConversationsCriteria extends AbstractCriteria {
}
//endregion
//region 查询近几天会话
public
boolean
byConversationsDays
()
{
return
this
.
andMap
.
containsKey
(
"ConversationsDays"
);
}
private
Integer
conversationsDays
;
public
Integer
getConversationsDays
()
{
if
(
byConversationsDays
())
return
conversationsDays
;
return
null
;
}
public
void
setConversationsDays
(
Integer
value
)
{
this
.
conversationsDays
=
value
;
this
.
andMap
.
put
(
"ConversationsDays"
,
value
);
}
//endregion
}
\ No newline at end of file
src/main/java/com/infoepoch/pms/dispatchassistant/domain/langchain/history/Messages.java
View file @
1cc303d1
...
...
@@ -53,6 +53,9 @@ public class Messages {
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
recordTime
;
/**
* 排序
*/
public
String
getId
()
{
return
id
;
...
...
@@ -118,4 +121,13 @@ public class Messages {
public
void
setRecordTime
(
Date
recordTime
)
{
this
.
recordTime
=
recordTime
;
}
private
Integer
sort
;
public
Integer
getSort
()
{
return
sort
;
}
public
void
setSort
(
Integer
sort
)
{
this
.
sort
=
sort
;
}
}
\ No newline at end of file
src/main/java/com/infoepoch/pms/dispatchassistant/infractructure/langchain/ConversationsRepository.java
View file @
1cc303d1
...
...
@@ -274,6 +274,9 @@ public class ConversationsRepository implements IConversationsRepository {
//条件1
if
(
criteria
.
byCondition1
())
andMap
.
put
(
criteria
.
getCondition1
()
==
null
?
" C_CONDITION1 IS NULL "
:
" C_CONDITION1 = ? "
,
criteria
.
getCondition1
());
//查询近几天会话
if
(
criteria
.
byConversationsDays
())
andMap
.
put
(
criteria
.
getConversationsDays
()
==
null
?
" C_RECORD_TIME IS NULL "
:
"C_RECORD_TIME>=sysdate-? "
,
criteria
.
getConversationsDays
());
return
andMap
;
}
...
...
src/main/java/com/infoepoch/pms/dispatchassistant/infractructure/langchain/MessagesRepository.java
View file @
1cc303d1
...
...
@@ -46,10 +46,10 @@ public class MessagesRepository implements IMessagesRepository {
*/
@Override
public
boolean
insert
(
Messages
entity
)
{
String
sql
=
"INSERT INTO T_MESSAGES(M_ID, M_CID, M_SESSION_ID, M_REQUEST_ID, M_ROLE, M_CONTENT, M_PARENT_MSG_ID, M_KEY_WORDS, M_MODEL_NAME, M_RECORD_TIME
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?,
?)"
;
String
sql
=
"INSERT INTO T_MESSAGES(M_ID, M_CID, M_SESSION_ID, M_REQUEST_ID, M_ROLE, M_CONTENT, M_PARENT_MSG_ID, M_KEY_WORDS, M_MODEL_NAME, M_RECORD_TIME
,M_SORT) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?)"
;
int
result
=
0
;
try
{
result
=
jdbcTemplate
.
update
(
sql
,
entity
.
getId
(),
entity
.
getCid
(),
entity
.
getSessionId
(),
entity
.
getRequestId
(),
entity
.
getRole
(),
entity
.
getContent
(),
entity
.
getParentMsgId
(),
entity
.
getKeyWords
(),
entity
.
getModelName
(),
entity
.
getRecordTime
());
result
=
jdbcTemplate
.
update
(
sql
,
entity
.
getId
(),
entity
.
getCid
(),
entity
.
getSessionId
(),
entity
.
getRequestId
(),
entity
.
getRole
(),
entity
.
getContent
(),
entity
.
getParentMsgId
(),
entity
.
getKeyWords
(),
entity
.
getModelName
(),
entity
.
getRecordTime
()
,
entity
.
getSort
()
);
}
catch
(
Exception
e
)
{
LogHelper
.
info
(
e
.
getMessage
());
// throw new ServiceException("新增 数据 失败。");
...
...
@@ -62,10 +62,10 @@ public class MessagesRepository implements IMessagesRepository {
*/
@Override
public
boolean
update
(
Messages
entity
)
{
String
sql
=
"UPDATE T_MESSAGES SET M_CID = ?, M_SESSION_ID = ?, M_REQUEST_ID = ?, M_ROLE = ?, M_CONTENT = ?, M_PARENT_MSG_ID = ?, M_KEY_WORDS = ?, M_MODEL_NAME = ?, M_RECORD_TIME = ? WHERE M_ID = ?"
;
String
sql
=
"UPDATE T_MESSAGES SET M_CID = ?, M_SESSION_ID = ?, M_REQUEST_ID = ?, M_ROLE = ?, M_CONTENT = ?, M_PARENT_MSG_ID = ?, M_KEY_WORDS = ?, M_MODEL_NAME = ?, M_RECORD_TIME = ?
,M_SORT=?
WHERE M_ID = ?"
;
int
result
=
0
;
try
{
result
=
jdbcTemplate
.
update
(
sql
,
entity
.
getCid
(),
entity
.
getSessionId
(),
entity
.
getRequestId
(),
entity
.
getRole
(),
entity
.
getContent
(),
entity
.
getParentMsgId
(),
entity
.
getKeyWords
(),
entity
.
getModelName
(),
entity
.
getRecordTime
(),
entity
.
getId
());
result
=
jdbcTemplate
.
update
(
sql
,
entity
.
getCid
(),
entity
.
getSessionId
(),
entity
.
getRequestId
(),
entity
.
getRole
(),
entity
.
getContent
(),
entity
.
getParentMsgId
(),
entity
.
getKeyWords
(),
entity
.
getModelName
(),
entity
.
getRecordTime
(),
entity
.
getSort
(),
entity
.
getId
());
}
catch
(
Exception
e
)
{
LogHelper
.
info
(
e
.
getMessage
());
// throw new ServiceException("更新 数据 失败。");
...
...
@@ -77,7 +77,7 @@ public class MessagesRepository implements IMessagesRepository {
* 批量新增
*/
public
int
[]
batchInsert
(
List
<
Messages
>
list
)
{
String
sql
=
"INSERT INTO T_MESSAGES(M_ID, M_CID, M_SESSION_ID, M_REQUEST_ID, M_ROLE, M_CONTENT, M_PARENT_MSG_ID, M_KEY_WORDS, M_MODEL_NAME, M_RECORD_TIME
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?,
?)"
;
String
sql
=
"INSERT INTO T_MESSAGES(M_ID, M_CID, M_SESSION_ID, M_REQUEST_ID, M_ROLE, M_CONTENT, M_PARENT_MSG_ID, M_KEY_WORDS, M_MODEL_NAME, M_RECORD_TIME
,M_SORT) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?)"
;
int
[]
result
=
jdbcTemplate
.
batchUpdate
(
sql
,
new
BatchPreparedStatementSetter
()
{
@Override
public
void
setValues
(
PreparedStatement
ps
,
int
i
)
throws
SQLException
{
...
...
@@ -93,6 +93,7 @@ public class MessagesRepository implements IMessagesRepository {
ps
.
setString
(++
j
,
item
.
getKeyWords
());
ps
.
setString
(++
j
,
item
.
getModelName
());
ps
.
setTimestamp
(++
j
,
item
.
getRecordTime
()
!=
null
?
new
Timestamp
(
item
.
getRecordTime
().
getTime
())
:
null
);
ps
.
setInt
(++
j
,
item
.
getSort
());
}
@Override
...
...
@@ -107,7 +108,7 @@ public class MessagesRepository implements IMessagesRepository {
* 批量更新
*/
public
int
[]
batchUpdate
(
List
<
Messages
>
list
)
{
String
sql
=
"UPDATE T_MESSAGES SET M_CID = ?, M_SESSION_ID = ?, M_REQUEST_ID = ?, M_ROLE = ?, M_CONTENT = ?, M_PARENT_MSG_ID = ?, M_KEY_WORDS = ?, M_MODEL_NAME = ?, M_RECORD_TIME = ? WHERE M_ID = ? "
;
String
sql
=
"UPDATE T_MESSAGES SET M_CID = ?, M_SESSION_ID = ?, M_REQUEST_ID = ?, M_ROLE = ?, M_CONTENT = ?, M_PARENT_MSG_ID = ?, M_KEY_WORDS = ?, M_MODEL_NAME = ?, M_RECORD_TIME = ?
,M_SORT=?
WHERE M_ID = ? "
;
int
[]
result
=
jdbcTemplate
.
batchUpdate
(
sql
,
new
BatchPreparedStatementSetter
()
{
@Override
public
void
setValues
(
PreparedStatement
ps
,
int
i
)
throws
SQLException
{
...
...
@@ -122,6 +123,7 @@ public class MessagesRepository implements IMessagesRepository {
ps
.
setString
(++
j
,
item
.
getKeyWords
());
ps
.
setString
(++
j
,
item
.
getModelName
());
ps
.
setTimestamp
(++
j
,
item
.
getRecordTime
()
!=
null
?
new
Timestamp
(
item
.
getRecordTime
().
getTime
())
:
null
);
ps
.
setInt
(++
j
,
item
.
getSort
());
ps
.
setString
(++
j
,
item
.
getId
());
}
...
...
@@ -169,7 +171,7 @@ public class MessagesRepository implements IMessagesRepository {
@Override
public
Messages
selectOneByCriteria
(
MessagesCriteria
criteria
)
{
StringBuffer
buffer
=
new
StringBuffer
(
"SELECT * FROM T_MESSAGES "
);
List
<
Object
>
list
=
OracleUtils
.
combinationSql
(
buffer
,
createCriteriaSql
(
criteria
),
1
,
1
,
"M_
RECORD_TIME
"
,
true
);
List
<
Object
>
list
=
OracleUtils
.
combinationSql
(
buffer
,
createCriteriaSql
(
criteria
),
1
,
1
,
"M_
SORT
"
,
true
);
try
{
return
jdbcTemplate
.
queryForObject
(
buffer
.
toString
(),
list
.
toArray
(),
new
MessagesRowMapper
());
}
catch
(
Exception
e
)
{
...
...
@@ -184,7 +186,7 @@ public class MessagesRepository implements IMessagesRepository {
@Override
public
List
<
Messages
>
selectByCriteria
(
MessagesCriteria
criteria
)
{
StringBuffer
buffer
=
new
StringBuffer
(
"SELECT * FROM T_MESSAGES "
);
List
<
Object
>
list
=
OracleUtils
.
combinationSql
(
buffer
,
createCriteriaSql
(
criteria
));
List
<
Object
>
list
=
OracleUtils
.
combinationSql
(
buffer
,
createCriteriaSql
(
criteria
)
,
"M_SORT"
,
false
);
try
{
return
jdbcTemplate
.
query
(
buffer
.
toString
(),
list
.
toArray
(),
new
MessagesRowMapper
());
}
catch
(
Exception
e
)
{
...
...
@@ -236,6 +238,7 @@ public class MessagesRepository implements IMessagesRepository {
messages
.
setKeyWords
(
rs
.
getString
(
"M_KEY_WORDS"
));
messages
.
setModelName
(
rs
.
getString
(
"M_MODEL_NAME"
));
messages
.
setRecordTime
(
rs
.
getTimestamp
(
"M_RECORD_TIME"
));
messages
.
setSort
(
rs
.
getInt
(
"M_SORT"
));
return
messages
;
}
}
...
...
src/main/resources/static/pages/langchain/chat-expert.html
View file @
1cc303d1
...
...
@@ -201,7 +201,7 @@
const
messagesDiv
=
document
.
getElementById
(
'chat-messages'
);
aiMessageDiv
.
className
=
'message ai-message'
;
document
.
getElementById
(
'chat-messages'
).
appendChild
(
aiMessageDiv
);
const
eventSource
=
new
EventSource
(
'../../api/langchain/s
seBigTwo
?chatMessage='
+
chatMessage
+
"&sessionId="
+
sessionId
);
const
eventSource
=
new
EventSource
(
'../../api/langchain/s
imulate
?chatMessage='
+
chatMessage
+
"&sessionId="
+
sessionId
);
eventSource
.
onmessage
=
(
event
)
=>
{
const
data
=
JSON
.
parse
(
event
.
data
);
const
content
=
data
.
dataToSend
[
1
].
data
;
...
...
src/main/resources/static/pages/langchain/js/ai-chat-vue.js
View file @
1cc303d1
...
...
@@ -89,6 +89,7 @@ require(['jquery', 'vue', 'utils','marked','markdown', 'global'], function ($, V
created
:
function
()
{
this
.
currentUser
();
this
.
getSessionId
();
this
.
getConversationHistory
();
},
mounted
:
function
()
{
// 监听输入框的键盘事件
...
...
@@ -99,12 +100,12 @@ require(['jquery', 'vue', 'utils','marked','markdown', 'global'], function ($, V
}
// 添加全局点击事件以关闭菜单
document
.
addEventListener
(
'click'
,
(
event
)
=>
{
// 检查点击是否在菜单按钮上
if
(
!
event
.
target
.
closest
(
'.menu-btn'
)
&&
!
event
.
target
.
closest
(
'.menu-dropdown'
))
{
this
.
closeAllMenus
();
}
});
//
document.addEventListener('click', (event) => {
//
// 检查点击是否在菜单按钮上
//
if (!event.target.closest('.menu-btn') && !event.target.closest('.menu-dropdown')) {
//
this.closeAllMenus();
//
}
//
});
});
},
methods
:
{
...
...
@@ -140,6 +141,16 @@ require(['jquery', 'vue', 'utils','marked','markdown', 'global'], function ($, V
console
.
error
(
'会话ID获取失败'
,
error
);
}
},
async
getConversationHistory
()
{
try
{
//const response = await fetch('../../api/langchain/getSessionId');
const
response
=
await
fetch
(
'../../api/langchain/conversationHistory'
);
const
dataJson
=
await
response
.
json
();
this
.
historySections
=
dataJson
.
data
;
}
catch
(
error
)
{
console
.
error
(
'会话获取失败'
,
error
);
}
},
// 聊天相关方法
handleKeyPress
(
e
)
{
...
...
@@ -306,22 +317,38 @@ require(['jquery', 'vue', 'utils','marked','markdown', 'global'], function ($, V
},
loadChatHistory
(
chatId
)
{
var
that
=
this
// 关闭所有菜单
this
.
historySections
.
forEach
(
section
=>
{
section
.
items
.
forEach
(
item
=>
{
item
.
showMenu
=
false
;
});
});
//this.addMessage('user', "123456");
// 设置活跃状态
this
.
historySections
.
forEach
(
section
=>
{
section
.
items
.
forEach
(
item
=>
{
item
.
active
=
(
item
.
id
===
chatId
);
});
});
// 这里添加加载对应对话历史的逻辑
// 实际实现时可以调用API获取历史记录
//
this
.
sessionId
=
chatId
;
// this.clearChat();
//这里添加加载对应对话历史的逻辑
//实际实现时可以调用API获取历史记录
$
.
ajax
({
url
:
"../../api/langchain/conversationMessages?sessionId="
+
chatId
,
type
:
"get"
,
dataType
:
"json"
,
contentType
:
"application/json;charset=UTF-8"
,
async
:
false
,
success
:
function
(
data
)
{
var
mes
=
data
.
data
;
mes
.
forEach
(
section
=>
{
that
.
addMessage
(
section
.
role
,
section
.
content
);
});
}
});
},
// 删除对话
deleteChat
(
chatId
)
{
...
...
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