Skip to content

Commit 2632ccc

Browse files
committed
refactor:Conversation以普通Class的形态出现,不再是Abstract class
1 parent f5dd089 commit 2632ccc

File tree

4 files changed

+29
-16
lines changed

4 files changed

+29
-16
lines changed

src/main/java/com/xiaozhi/dialogue/llm/memory/ChatMemory.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.xiaozhi.dialogue.llm.memory;
22

3-
import com.xiaozhi.entity.SysDevice;
43
import com.xiaozhi.entity.SysMessage;
5-
import com.xiaozhi.entity.SysRole;
64

75
import java.util.List;
86

@@ -16,9 +14,21 @@
1614
*/
1715
public interface ChatMemory {
1816

19-
// TODO 考虑将参数以Message对象传递,而不是多个参数。在再下一层Service层转换sparing ai的Message为Mapper需要的SysMessage对象
17+
/**
18+
* 添加消息
19+
* TODO 参数太多,后续考虑如何简化一些
20+
*/
2021
void addMessage(String deviceId, String sessionId, String sender, String content, Integer roleId, String messageType, Long timeMillis);
2122

23+
/**
24+
* 获取历史对话消息列表
25+
* TODO messageType参数,后续考虑是否需要。另外可重构为一个枚举类
26+
*
27+
* @param deviceId 设备ID
28+
* @param messageType 消息类型
29+
* @param limit 限制数量
30+
* @return 消息列表
31+
*/
2232
List<SysMessage> getMessages(String deviceId, String messageType, Integer limit);
2333

2434
/**

src/main/java/com/xiaozhi/dialogue/llm/memory/Conversation.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* 只有sessionID是真正挂在Conversation的属性。
2525
*
2626
*/
27-
public abstract class Conversation {
27+
public class Conversation {
2828
private final SysDevice device;
2929
private final SysRole role;
3030
private final String sessionId;
@@ -58,17 +58,27 @@ public List<Message> messages() {
5858
return messages;
5959
}
6060

61-
abstract public void clear();
61+
public void clear(){
62+
messages.clear();
63+
}
6264

63-
abstract public void addMessage(UserMessage userMessage, Long userTimeMillis,AssistantMessage assistantMessage, Long assistantTimeMillis);
65+
public void addMessage(UserMessage userMessage, Long userTimeMillis,AssistantMessage assistantMessage, Long assistantTimeMillis){
66+
messages.add(userMessage);
67+
messages.add(assistantMessage);
68+
}
6469

6570
/**
6671
* 获取适用于放入prompt提示词的多轮消息列表。
6772
* userMessage 不会因调用此方法而入库(或进入记忆)
6873
* @param userMessage 必须且不为空。
69-
* @return
74+
* @return 新的消息列表对象,避免污染原有的列表。
7075
*/
71-
abstract public List<Message> prompt(UserMessage userMessage);
76+
public List<Message> prompt(UserMessage userMessage){
77+
List<Message> newMessages = new ArrayList<>();
78+
newMessages.addAll(this.messages);
79+
newMessages.add(userMessage);
80+
return newMessages;
81+
}
7282

7383
/**
7484
* 将数据库记录的SysMessag转换为spring-ai的Message。

src/main/java/com/xiaozhi/dialogue/llm/memory/DatabaseChatMemory.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
import com.xiaozhi.common.web.PageFilter;
44
import com.xiaozhi.entity.Base;
5-
import com.xiaozhi.entity.SysDevice;
65
import com.xiaozhi.entity.SysMessage;
7-
import com.xiaozhi.entity.SysRole;
86
import com.xiaozhi.service.SysMessageService;
97

108
import org.slf4j.Logger;
@@ -19,11 +17,10 @@
1917
import java.util.Date;
2018
import java.util.List;
2119

22-
import static com.xiaozhi.dialogue.llm.memory.MessageWindowConversation.DEFAULT_HISTORY_LIMIT;
23-
2420
/**
2521
* 基于数据库的聊天记忆实现
2622
* 全局单例类,负责Conversatin里消息的获取、保存、清理。
23+
* 后续考虑:DatabaseChatMemory 是对 SysMessageService 的一层薄封装,未来或者有可能考虑合并这两者。
2724
*/
2825
@Service
2926
public class DatabaseChatMemory implements ChatMemory {

src/main/java/com/xiaozhi/dialogue/llm/memory/MessageWindowConversation.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,11 @@
44
import com.xiaozhi.entity.SysMessage;
55
import com.xiaozhi.entity.SysRole;
66
import org.springframework.ai.chat.messages.*;
7-
import org.springframework.beans.factory.annotation.Autowired;
87

9-
import org.springframework.util.Assert;
108
import org.springframework.util.StringUtils;
119

1210
import java.util.*;
1311

14-
import java.util.stream.Collectors;
15-
1612
/**
1713
* 限定消息条数(消息窗口)的Conversation实现。根据不同的策略,可实现聊天会话的持久化、加载、清除等功能。
1814
*/

0 commit comments

Comments
 (0)