5.Message 消息
在Spring AI提供的接口中,每条信息的角色总共分为三类:
-
SystemMessage
:系统限制信息,这种信息在对话中的权重很大,AI会优先依据SystemMessage里的内容进行回复; -
UserMessage
:用于表示用户发送的消息。它可能包含与用户消息相关的属性和方法。 -
AssistantMessage
:AI回复信息
这些Message均实现了一个Message
接口,如上图。
AbstractMessage
提供了对Message
接口的抽象实现,SystemMessage
、UserMessage
、AssistantMessage
等均继承了AbstractMessage
,是Message的具体实现。FunctionMessage,这类信息用于AI的函数调用。
而ChatMessage
是Message的扩展实现,用于创建其它大语言模型需要的Message。
5.1.对话上下文
通过单一的输入输出方式进行调用时,无法让AI具有记忆力, 第三句就不记得第一句的内容了
AssistantMessage assistantMessage = chatResponse.getResult().getOutput();
AssistantMessage 是 AI 回复的信息, 只需要使用一个List存储这些Message对象,并将这些Message对象一并发送给AI,AI拿到这些Message后,会结合这些Message里的内容进行回复。
不过,根据AI的计费规则,你的消息队列越长,单次问询需要的费用就会越高,因此我们需要对这个消息列表的长度进行限制。
代码实现
// 历史消息列表
static List<Message> historyMessage = new ArrayList<>();
// 历史消息列表的最大长度
static int maxLen = 10;
@GetMapping("/chat/chatContext")
public String chatContext( String message ) {
// 用户输入的文本是UserMessage
historyMessage.add(new UserMessage(message));
// 发给AI前对历史消息对列的长度进行检查
if(historyMessage.size() > maxLen){
historyMessage = historyMessage.