Skip to content

Commit 6af739a

Browse files
committed
fix(chat-client): Fix incorrect prompt position for system messages
- First position of prompt to insert system message - Prioritize system messages in conversation history Signed-off-by: Ahoo Wang <[email protected]>
1 parent 59d2661 commit 6af739a

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/MessageChatMemoryAdvisor.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22+
import org.springframework.ai.chat.messages.MessageType;
23+
import org.springframework.ai.chat.messages.SystemMessage;
24+
import org.springframework.util.StringUtils;
2225
import reactor.core.publisher.Flux;
2326
import reactor.core.publisher.Mono;
2427
import reactor.core.scheduler.Scheduler;
@@ -83,8 +86,18 @@ public ChatClientRequest before(ChatClientRequest chatClientRequest, AdvisorChai
8386
List<Message> memoryMessages = this.chatMemory.get(conversationId);
8487

8588
// 2. Advise the request messages list.
86-
List<Message> processedMessages = new ArrayList<>(memoryMessages);
87-
processedMessages.addAll(chatClientRequest.prompt().getInstructions());
89+
SystemMessage systemMessage = chatClientRequest.prompt().getSystemMessage();
90+
List<Message> processedMessages = new ArrayList<>();
91+
if (StringUtils.hasText(systemMessage.getText())) {
92+
processedMessages.add(systemMessage);
93+
}
94+
processedMessages.addAll(memoryMessages);
95+
List<Message> instructions = chatClientRequest.prompt()
96+
.getInstructions()
97+
.stream()
98+
.filter(m -> m.getMessageType() != MessageType.SYSTEM)
99+
.toList();
100+
processedMessages.addAll(instructions);
88101

89102
// 3. Create a new request with the advised messages.
90103
ChatClientRequest processedChatClientRequest = chatClientRequest.mutate()

0 commit comments

Comments
 (0)