Spring AI 2.1.0-M1 공개, 메시지 구조 재설계·OpenAI Responses API 지원
최근 30일 조회수 — 좋아요 —핵심 요약
Spring AI 2.1.0-M1이 메시지를 순서 있는 파트 구조로 개편하고 OpenAI Responses API를 지원하며 스프링 부트 4.2 기반으로 전환됐다.
Spring AI 2.1.0-M1이 지난 25일 메이븐 센트럴에 올라왔다. 스프링 블로그에 따르면 이번 릴리스는 2.1 라인의 첫 마일스톤으로, 기반 프레임워크를 스프링 부트 4.2(현재는 4.2.0-M2 기준으로 빌드)로 옮겼고 세 가지 새 기능을 넣었다. 메시지 콘텐츠를 순서가 있는 구조로 다루는 초기 지원, OpenAI Responses API 연동, 그리고 미리 계산해둔 임베딩을 벡터 스토어에 바로 써넣는 기능이다.
가장 비중이 큰 변화는 메시지 구조 자체를 손댄 부분이다. 지금까지 스프링 AI의 메시지는 텍스트 하나에 도구 호출과 미디어가 별도 리스트로 붙는 형태였다. 문제는 최근 모델들이 실제로 내놓는 응답이 이 구조로는 표현이 안 된다는 점이다. 추론과 도구 호출이 섞여 나오거나, 이미지 사이에 텍스트가 끼거나, 다음 턴에 그대로 돌려보내야 하는 공급사별 블록이 있는 경우가 그렇다. 이번 마일스톤부터 AssistantMessage, UserMessage, ToolResponseMessage는 콘텐츠를 MessagePart의 순서 있는 목록으로 갖는다. TextPart, ReasoningPart, ToolCallPart, ToolResultPart, MediaPart, UnknownPart로 나뉘며, 공급사가 만든 순서를 그대로 유지해 대화가 왕복해도 형태가 흐트러지지 않는다. ReasoningPart나 ToolCallPart는 앤스로픽의 씽킹 시그니처나 제미나이의 사고 시그니처처럼 변형 없이 그대로 재전송해야 하는 데이터를 OpaquePayload로 담을 수 있고, 어댑터가 아직 모델링하지 못한 블록은 UnknownPart가 원본 JSON을 보존해 유실을 막는다.
기존에 쓰던 getText(), getMedia(), getToolCalls()와 새로 추가된 getReasoning()은 이 파트 목록 위에 올라간 뷰로 재구성됐고, 기존 생성자와 빌더는 예전과 같은 순서로 파트를 만들어내므로 하위 호환은 유지된다. 순서를 직접 제어하려면 UserMessage.builder()에 .part()로 TextPart와 MediaPart를 원하는 순서로 추가하면 된다. 스트리밍 모델의 경우 파트 하나가 여러 조각으로 나뉘어 도착할 수 있는데, 각 조각은 인덱스와 응답 ID를 갖고 MessageAggregator가 이를 완전한 파트로 재조립한다. getText()만 읽는 기존 코드는 예전과 같은 텍스트 델타를 그대로 받는다. 다만 이번 마일스톤에서 파트를 네이티브로 생성·소비하는 구현체는 새로 추가된 OpenAiResponsesChatModel 하나뿐이고, 나머지 ChatModel 구현체들은 2.1.0-RC1에서 파트 구조로 리팩터링될 예정이다.
두 번째 축은 OpenAI Responses API 지원이다. 기존 Chat Completions 기반 OpenAiChatModel과 별도로 /v1/responses 엔드포인트를 호출하는 OpenAiResponsesChatModel이 추가됐다. 스프링 블로그는 이를 쓸 이유로 정확성을 든다. GPT-5.4부터 Chat Completions는 추론 강도를 none 이외로 설정한 상태에서 도구 호출을 함께 쓸 수 없는데, Responses API는 이 조합을 지원한다는 것이다. 현재 OpenAI 플래그십 모델로 에이전트를 만든다면 Responses 쪽을 쓰는 게 맞는 선택이라고 설명한다. 전환은 spring.ai.openai.chat.api=responses 속성 하나로 끝나고, 나머지 연결 설정은 그대로 유지된다. OpenAiResponsesChatModel은 응답의 각 항목을 순서대로 하나의 파트로 변환하며, 암호화된 추론 내용은 ReasoningPart에 담겨 도구 호출 사이사이 그대로 되돌아가므로 도구 호출 루프 중에도 모델이 사고 흐름을 잃지 않는다. 이 모델은 의도적으로 상태를 갖지 않게 설계됐다. 매 호출마다 전체 Prompt를 통째로 보내는 방식이라 ChatMemory나 어드바이저, RAG 같은 기존 구성 요소와 함께 쓸 수 있다.
임베딩을 벡터 스토어에 직접 써넣는 기능에 대해서는 제공된 자료에 구체적인 설명이 들어 있지 않아, 이번 기사에서는 다루지 않는다. 스프링 블로그는 이번 마일스톤이 아직 GA 이전 단계이며 API가 정식 출시 전까지 바뀔 수 있다고 밝히고, 커뮤니티 피드백이 최종 형태를 결정할 것이라고 덧붙였다.
읽기 목록은 이 브라우저에 저장됩니다.
출처
- Spring AI 2.1.0-M1 Available Now — Spring Blog
이 글은 위 출처를 근거로 자동 생성된 뒤 발행됐습니다. 원문을 함께 확인해 주세요. 교차 보도 없이 단독 출처로 작성됐습니다.