Add File
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
* Copyright (c) 2023-2025, Agents-Flex (fuhai999@gmail.com).
|
||||
* <p>
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* <p>
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* <p>
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.agentsflex.core.prompt;
|
||||
|
||||
import com.agentsflex.core.memory.ChatMemory;
|
||||
import com.agentsflex.core.memory.DefaultChatMemory;
|
||||
import com.agentsflex.core.message.AbstractTextMessage;
|
||||
import com.agentsflex.core.message.Message;
|
||||
import com.agentsflex.core.message.SystemMessage;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class HistoriesPrompt extends Prompt {
|
||||
|
||||
private ChatMemory memory = new DefaultChatMemory();
|
||||
|
||||
private SystemMessage systemMessage;
|
||||
|
||||
private int maxAttachedMessageCount = 10;
|
||||
|
||||
private boolean historyMessageTruncateEnable = false;
|
||||
private int historyMessageTruncateLength = 1000;
|
||||
private Function<String, String> historyMessageTruncateProcessor;
|
||||
|
||||
// 临时消息不回存入 memory,只会当做 “过程消息” 参与大模型交互
|
||||
// 比如用于 Function call 等场景
|
||||
private List<Message> temporaryMessages;
|
||||
|
||||
public SystemMessage getSystemMessage() {
|
||||
return systemMessage;
|
||||
}
|
||||
|
||||
public void setSystemMessage(SystemMessage systemMessage) {
|
||||
this.systemMessage = systemMessage;
|
||||
}
|
||||
|
||||
public int getMaxAttachedMessageCount() {
|
||||
return maxAttachedMessageCount;
|
||||
}
|
||||
|
||||
public void setMaxAttachedMessageCount(int maxAttachedMessageCount) {
|
||||
this.maxAttachedMessageCount = maxAttachedMessageCount;
|
||||
}
|
||||
|
||||
public boolean isHistoryMessageTruncateEnable() {
|
||||
return historyMessageTruncateEnable;
|
||||
}
|
||||
|
||||
public void setHistoryMessageTruncateEnable(boolean historyMessageTruncateEnable) {
|
||||
this.historyMessageTruncateEnable = historyMessageTruncateEnable;
|
||||
}
|
||||
|
||||
public int getHistoryMessageTruncateLength() {
|
||||
return historyMessageTruncateLength;
|
||||
}
|
||||
|
||||
public void setHistoryMessageTruncateLength(int historyMessageTruncateLength) {
|
||||
this.historyMessageTruncateLength = historyMessageTruncateLength;
|
||||
}
|
||||
|
||||
public Function<String, String> getHistoryMessageTruncateProcessor() {
|
||||
return historyMessageTruncateProcessor;
|
||||
}
|
||||
|
||||
public void setHistoryMessageTruncateProcessor(Function<String, String> historyMessageTruncateProcessor) {
|
||||
this.historyMessageTruncateProcessor = historyMessageTruncateProcessor;
|
||||
}
|
||||
|
||||
public HistoriesPrompt() {
|
||||
}
|
||||
|
||||
public HistoriesPrompt(ChatMemory memory) {
|
||||
this.memory = memory;
|
||||
}
|
||||
|
||||
public void addMessage(Message message) {
|
||||
memory.addMessage(message);
|
||||
}
|
||||
|
||||
public void addMessageTemporary(Message message) {
|
||||
if (temporaryMessages == null) {
|
||||
temporaryMessages = new ArrayList<>();
|
||||
}
|
||||
temporaryMessages.add(message);
|
||||
}
|
||||
|
||||
public void addMessages(Collection<Message> messages) {
|
||||
memory.addMessages(messages);
|
||||
}
|
||||
|
||||
public ChatMemory getMemory() {
|
||||
return memory;
|
||||
}
|
||||
|
||||
public void setMemory(ChatMemory memory) {
|
||||
this.memory = memory;
|
||||
}
|
||||
|
||||
public List<Message> getTemporaryMessages() {
|
||||
return temporaryMessages;
|
||||
}
|
||||
|
||||
public void setTemporaryMessages(List<Message> temporaryMessages) {
|
||||
this.temporaryMessages = temporaryMessages;
|
||||
}
|
||||
|
||||
public void clearTemporaryMessages() {
|
||||
temporaryMessages.clear();
|
||||
temporaryMessages = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Message> toMessages() {
|
||||
List<Message> messages = memory.getMessages();
|
||||
if (messages == null) messages = new ArrayList<>();
|
||||
|
||||
if (messages.size() > maxAttachedMessageCount) {
|
||||
messages = messages.subList(messages.size() - maxAttachedMessageCount, messages.size());
|
||||
}
|
||||
|
||||
if (historyMessageTruncateEnable) {
|
||||
for (Message message : messages) {
|
||||
if (message instanceof AbstractTextMessage) {
|
||||
String content = ((AbstractTextMessage) message).getContent();
|
||||
if (historyMessageTruncateProcessor != null) {
|
||||
content = historyMessageTruncateProcessor.apply(content);
|
||||
} else if (content.length() > historyMessageTruncateLength) {
|
||||
content = content.substring(0, historyMessageTruncateLength);
|
||||
}
|
||||
((AbstractTextMessage) message).setContent(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Message firstMessage = messages.get(0);
|
||||
if (!(firstMessage instanceof SystemMessage) && systemMessage != null) {
|
||||
messages.add(0, systemMessage);
|
||||
}
|
||||
|
||||
if (temporaryMessages != null) {
|
||||
messages.addAll(temporaryMessages);
|
||||
}
|
||||
|
||||
return messages;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user