Spring AI 2.0.0-RC1 출시! 도구 호출 및 메모리 기능 강화

by DD
6일 전
조회수 0

Spring AI 2.0.0-RC1이 Maven Central에 출시되어 2.0.0 GA를 향한 API 안정화 마일스톤 달성함

도구 호출(Tool Calling) 기능 대폭 개선으로 모든 모델에서 통합된 도구 실행 로직 제공함

채팅 메모리(Chat Memory) 기능 향상으로 대화 턴(Turn) 분할 방지 및 중복 메모리 방지 기능 추가됨

구조화된 출력(Structured Output) 기능 강화로 엔티티 파라미터 설정을 통한 유연한 구성 지원함

도구 호출(Tool Calling) 아키텍처 재설계

Spring AI 2.0.0-RC1에서는 모든 LLM 모델에 대한 도구 실행 로직을 통합하여 일관성을 높였다.

기존 ChatModel의 내장 루프 제거: OpenAI, Ollama, Anthropic 등 다양한 모델에서 외부 도구 실행(External Tool Execution) 처리로 변경됨

ToolCallingAdvisor 도입: ChatClient와 ToolCallingAdvisor를 통해 도구 호출 관리가 권장되며, `internalToolExecutionEnabled` 옵션이 제거됨

명시적 ToolCallback 빈 등록: `toolNames()` API와 `SpringBeanToolCallbackResolver`가 제거되고, 명시적인 ToolCallback 빈으로 도구를 등록해야 함

`ChatClient.tools()` 개선: ToolCallback, ToolCallbackProvider 등을 직접 전달할 수 있게 되어 API 사용 편의성 증대

이러한 변경은 도구 호출의 유연성(Flexibility)과 확장성(Scalability)을 크게 향상시키는 것을 목표로 함.

온디맨드 도구 검색(On-Demand Tool Discovery) 기능

새로운 `ToolSearchToolCallingAdvisor`는 필요 시점에 LLM이 도구를 동적으로 검색하도록 지원한다.

세 가지 ToolIndex 구현: 벡터 스토어(Vector Store), Lucene, 정규식(Regex)을 활용하여 도구 인덱싱 및 검색 가능

기존 방식 대비 장점: 모든 도구 정의를 미리 로드할 필요 없이 필요한 도구만 동적으로 호출하여 메모리 사용량(Memory Usage) 감소 및 응답 속도 개선 기대

`spring-ai-advisors-vector-store` 명칭 변경: `spring-ai-vector-store-advisor`로 변경되어 벡터 스토어 관련 기능의 명확성 강화

이 기능은 동적이고 복잡한 LLM 애플리케이션 개발에 필수적인 요소로 작용할 것으로 보임.

채팅 메모리(Chat Memory)의 턴(Turn) 경계 처리 개선

MessageWindowChatMemory에서 메시지 창 오버플로우 시 턴 분할을 방지하는 로직이 추가되었다.

Turn-boundary snapping: 메시지 창이 가득 찼을 때, 가장 가까운 사용자 메시지(User Message)까지 경계선을 이동시켜 대화 턴이 분리되는 현상 방지

도구 프롬프트에서의 중복 메모리 방지: 현재 프롬프트에 이미 저장된 메모리 메시지가 포함된 경우, 채팅 메모리 중복 추가를 방지하여 효율성 증대

`JdbcChatMemoryRepositoryDialect` 개선: 기본 메서드(Default Methods)를 사용하여 커스텀 방언 구현의 복잡성 감소

이러한 개선은 대화의 연속성(Conversational Continuity)을 유지하고 사용자 경험을 향상시키는 데 기여함.

구조화된 출력(Structured Output) 설정 간소화

ChatClient의 `entity()` 메서드에 `EntityParamSpec`이 추가되어 콜별 구조화된 출력 설정을 직접 제어할 수 있게 되었다.

기존 방식 대비 간소화: 이전에는 별도의 Advisor 파라미터나 수동 설정이 필요했으나, 이제는 `entity()` 호출 시점에 네이티브 구조화 출력 활성화 또는 스키마 검증 설정이 가능함

향상된 검증 기능: `toolContext()` 메서드가 강화되어 구조화된 출력 관련 파라미터의 유효성 검증이 용이해짐

이는 LLM 응답을 특정 스키마에 맞춰 안정적으로 파싱해야 하는 애플리케이션에서 개발 편의성을 크게 높여줄 것으로 기대됨.

모델별 API 및 코드 정리

이번 릴리스에서는 기존 API의 정제 및 코드 클린업 작업이 다수 포함되었다.

모델 옵션 기본값 제거: 기본값(Default Values) 관리를 옵션 레벨로 이관하여 미묘한 버그 발생 가능성 감소

명명 규칙 변경: `N()` 빌더 메서드를 `n()`으로 변경하여 Java 네이밍 컨벤션 준수

`ToolCallingAdvisor` 빌더 강제화: `toolCallAdvisorBuilder`가 null이 아니도록 변경되어 안정적인 Advisor 체인 구성 지원

JSON 유틸리티 리팩토링: 동시 접근 제어 강화를 통해 스레드 안전성(Thread Safety) 확보

이러한 변경은 코드의 유지보수성(Maintainability)과 안정성(Stability)을 향상시키는 데 중점을 둠.

모델 지원 업데이트 및 통합

다양한 LLM 모델에 대한 지원이 업데이트되고 통합되었다.

Mistral AI 모델 업데이트: deprecated 모델 제거 및 최신 모델로 재구성, 모델 제공사의 은퇴 일정에 맞춰 관리

DeepSeek V4 모델 상수 추가: 모델 식별자 문자열 하드코딩 대신 상수(Constants)를 사용하여 관리

MiniMax 지원 제거: Anthropic 통합을 통해 MiniMax 지원을 Anthropic 호환 방식으로 전환

Pixtral Large 모델 은퇴: Mistral AI의 일정에 따라 해당 모델 지원 중단

이러한 모델 지원 업데이트는 최신 LLM 기술 동향을 반영하고 통합 관리의 효율성을 높이기 위한 조치임.

Spring AI 2.0.0-RC1 Available Now