package com.vincent.rsf.server.ai.service.impl.chat;
|
|
import com.vincent.rsf.server.ai.dto.AiChatMemoryDto;
|
import com.vincent.rsf.server.ai.dto.AiChatMessageDto;
|
import com.vincent.rsf.server.ai.entity.AiPrompt;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.ai.chat.messages.Message;
|
import org.springframework.ai.chat.messages.SystemMessage;
|
import org.springframework.ai.chat.messages.UserMessage;
|
|
import java.util.List;
|
import java.util.Map;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
|
class AiPromptMessageBuilderTest {
|
|
private final AiPromptMessageBuilder builder = new AiPromptMessageBuilder();
|
|
@Test
|
void shouldBuildPromptMessagesInExpectedOrderAndRenderLastUserPrompt() {
|
AiChatMemoryDto memory = AiChatMemoryDto.builder()
|
.memorySummary("summary")
|
.memoryFacts("facts")
|
.build();
|
AiPrompt prompt = new AiPrompt()
|
.setSystemPrompt("system")
|
.setUserPromptTemplate("用户问题: {{input}} | 仓库: {{warehouse}}");
|
List<AiChatMessageDto> messages = List.of(
|
message("user", "old question"),
|
message("assistant", "old answer"),
|
message("user", "latest question")
|
);
|
|
List<Message> built = builder.buildPromptMessages(memory, messages, prompt, Map.of("warehouse", "WH1"));
|
|
assertEquals(6, built.size());
|
assertInstanceOf(SystemMessage.class, built.get(0));
|
assertEquals("system", built.get(0).getText());
|
assertEquals("历史摘要:\nsummary", built.get(1).getText());
|
assertEquals("关键事实:\nfacts", built.get(2).getText());
|
assertInstanceOf(UserMessage.class, built.get(3));
|
assertEquals("old question", built.get(3).getText());
|
assertEquals("old answer", built.get(4).getText());
|
assertInstanceOf(UserMessage.class, built.get(5));
|
assertEquals("用户问题: latest question | 仓库: WH1", built.get(5).getText());
|
}
|
|
@Test
|
void shouldMergePersistedAndMemoryMessages() {
|
List<AiChatMessageDto> merged = builder.mergeMessages(
|
List.of(message("user", "persisted")),
|
List.of(message("assistant", "memory"))
|
);
|
|
assertEquals(2, merged.size());
|
assertEquals("persisted", merged.get(0).getContent());
|
assertEquals("memory", merged.get(1).getContent());
|
}
|
|
private AiChatMessageDto message(String role, String content) {
|
AiChatMessageDto dto = new AiChatMessageDto();
|
dto.setRole(role);
|
dto.setContent(content);
|
return dto;
|
}
|
}
|