Advisor
Spring의 Filter와 비슷한 기능으로 Filter는 Spring application을 Advisor는 ChatModel을 감싸는 형태로 구현되어있다. ChatClientRequest, ChatClientResponse를 관찰, 조작할 수 있다.

Order
- Advisor는 Ordered의 구현체이다.
- Advisor chain의 실행 순서를 지정하는 역할을 한다.
- 상수
Ordered.HIGHEST_PRECEDENCE: 가장 먼저 실행되는 OrderOrdered.LOWEST_PRECEDENCE: 가장 늦게 실행되는 Order
구현
-
Call, Stream
- Advisor는 Stream(Flux), Call 두 가지 방식으로 구현된다.
-
아래는 spring ai에서 구현되어있는 간단한 예제이다.
public class SimpleLoggerAdvisor implements CallAdvisor, StreamAdvisor {
private static final Logger logger = LoggerFactory.getLogger(SimpleLoggerAdvisor.class);
@Override
public String getName() {
return this.getClass().getSimpleName();
}
@Override
public int getOrder() {
return 0;
}
@Override
public ChatClientResponse adviseCall(ChatClientRequest chatClientRequest, CallAdvisorChain callAdvisorChain) {
logRequest(chatClientRequest);
ChatClientResponse chatClientResponse = callAdvisorChain.nextCall(chatClientRequest);
logResponse(chatClientResponse);
return chatClientResponse;
}
@Override
public Flux<ChatClientResponse> adviseStream(ChatClientRequest chatClientRequest,
StreamAdvisorChain streamAdvisorChain) {
logRequest(chatClientRequest);
Flux<ChatClientResponse> chatClientResponses = streamAdvisorChain.nextStream(chatClientRequest);
return new ChatClientMessageAggregator().aggregateChatClientResponse(chatClientResponses, this::logResponse);
}
private void logRequest(ChatClientRequest request) {
logger.debug("request: {}", request);
}
private void logResponse(ChatClientResponse chatClientResponse) {
logger.debug("response: {}", chatClientResponse);
}
}