@Component
@AcpAgent(name = "spring-ai-chatbot", version = "1.0")
public class ChatbotAgentBean {
private final ChatClient chatClient;
// Spring AI autoconfigures ChatClient.Builder from the model starter on the classpath
public ChatbotAgentBean(ChatClient.Builder builder) {
ChatMemory chatMemory = MessageWindowChatMemory.builder().maxMessages(20).build();
this.chatClient = builder
.defaultSystem("You are a concise, friendly assistant running as an ACP agent inside an IDE.")
.defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())
.build();
}
@Initialize
public InitializeResponse initialize(InitializeRequest request) {
return InitializeResponse.ok();
}
@NewSession
public NewSessionResponse newSession(NewSessionRequest request) {
return new NewSessionResponse(UUID.randomUUID().toString(), null, null);
}
@Prompt
public PromptResponse prompt(PromptRequest request, SyncPromptContext context) {
// CONVERSATION_ID scopes the memory window to this ACP session
String answer = chatClient.prompt()
.user(request.text())
.advisors(a -> a.param(ChatMemory.CONVERSATION_ID, context.getSessionId()))
.call()
.content();
context.sendMessage(answer);
return PromptResponse.endTurn();
}
}