ToolCallback이란?이전 글에서 살펴 본 Tool Class가 사용되는 실제 클래스로 다음과 같이 Tool을 ChatClient의 Builder로 선언하게 되면, 내부적으로 ToolCallback 타입의 리스트에 추가되는 것을 알 수 있습니다. chatClient.prompt(prompt) .tools(DateTimeTools()) // 실제 사용 .call() .content(); // DefaultChatClient 내부public ChatClient.ChatClientRequestSpec tools(Object... toolObjects) { Assert.notNull(toolObjects, "toolObje..
Spring Framework/AI
Tool Calling이란?Spring AI 공식 문서에 따르면, Toll Calling이라고 하는 것은 AI 모델과의 요청/응답 간에 외부 API 호출 등의 추가적인 기능 지원을 위해 사용합니다. Tool Calling의 주로 다음 두 가지로 사용된다고 합니다. 정보 추출(Information Retrieval)DB, 검색 엔진, 파일 시스템 등과 같은 외부 소스로 부터 정보 추출을 위해 사용됩니다. 보통 주어진 질문에 대해 단순 답변을 하기 보다, 질문의 내용을 보강하기 위해 외부 소스로 부터 데이터 추출 작업을 진행하게 됩니다. 이는, LLM이 실제로 똑똑하기는 하지만 내부 지식은 학습 시점에 된 데이터를 기반으로 대답하기 때문에 "현재 서울 날씨를 알려줄래?", "현재 엔비디아의 주식이 얼마야?"..
Chat Memeory란?보통 AI 모델에 질의할 때, 이전에 보냈던 메시지를 참고하여 답변하는 것을 보고는 하는데요, AI 모델이 이전 메시지를 참고하기 위해서는 메시지를 보관하기 위한 장치가 필요하고, 이를 메시지시 전송 부 앞 프롬프트에 추가해야 합니다. Chat Memory란, 이전 메시지 맥락을 기억하기 위해 제공하는 기능으로 Chat Memory를 통해 AI 모델에 질의할 때 이전 메시지 기반으로 조금 더 관련성 있는 응답을 받을 수 있다는 특징을 가지고 있습니다. 오늘은 Spring AI에서 이전 대화 맥락을 기억하기 위해 제공하는 Chat Memroy에 대해서 알아보려고 합니다. ChatMemoryRepositoryChat Memory를 사용하면서 가장 많이 접하게 될 Interface로..
Spring을 통해 개발하다 보면, Web 요청이나 응답을 중간에 가로채고 가공하여 전달하는 Interceptor가 존재합니다.Spring AI에서도 AI 모델에 요청을 보내기 전/후로 작업을 진행하는 Interceptor와 비슷한 기능을 하는 Advisor가 존재하는데요, 오늘은 Advisor API에 대해 알아보려고 합니다. Advisor APIAdvisor APi는 AI 모델에 전달하기 전/후 중간에 요청 및 응답을 가로채어, payload를 가공하여 요청/응답을 가공하는 역할을 합니다.이는 Spring의 Web에서 제공하는 Interceptor와 비슷한데요, 사실 이 도메인을 Interceptor로 만들면 어땠을까 하는 생각을 가지고 오늘 포스트를 진행하도록 하겠습니다.CallAdvisorSpri..
Structured Output은 LLM을 사용하는 개발자들의 생산성을 보다 더 높여주기 위한 기능으로, JSON, XML or Java 클래스와 같이 메서드의 반환값으로 특정 타입을 지원해줍니다. Spring AI에서는 이러한 타입을 Converter를 통해서 제공해주는데요, 오늘은 Spring AI에서 제공해주는 Structured Output Converter에 대해 알아보려고 합니다. Structured Output ConverterLLM 모델에 대한 질의 결과로 받는 값을 특정 타입(JSON, XML or Java Class)으로 변환해주는 기능으로, 다음 사진과 같이 LLM 질의 결과를 추출하기 전에 컨버터에 의해서 결과 값을 변환할 수 있게 해주는 기능입니다. AI의 질의 결과 값을 내부 C..
Sprint AI의 Chat Client는 Builder 방식과 객체 생성 방식을 통해 편의성을 제공해주는데요, 각각의 속성에는 어떤 기능이 있는지 살펴보려고 합니다. static 메서드객체 생성 메서드로 create()와 builder()를 제공create()ChatClient 객체를 생성하기 위한 객체로 다음과 같이 기본적으로 ChatModel이 필요합니다.여기서 ObservationRegistry와 ChatClientObservationConvention은 Metric 관련 설정인데, 나중에 깊게 들어갈 때 알아보도록 하겠습니다.create()의 return 값은 ChatClient 객체로, 정적 팩터리 메서드로 사용됨을 알 수 있네요.static ChatClient create(ChatModel..
Spring AI에서는 AI 모델과 통신하기 위해 Prompt와 Message라는 객체를 사용하고 있습니다. 오늘은 Chat Client API에서 요청을 보낼 때 사용되는 Prompt와 Message라는 객체에 대해 알아보려고 합니다. Prompt란?AI 모델에게 사용자 의도를 가이드해 주는 문장을 말 하며, 사용자의 입력과 직간접적으로 연결되어 있기 때문에 Prompt를 잘 작성하는 것이 AI 모델의 응답을 보다 더 정확하게 추출할 수 있습니다.간단히 예를 들면, 사용자가 "사과에 대해 알려줄래?"라고 AI 모델에 요청했을 때, AI 모델은 "사과"라는 단어에 대해 "과일(물체)로서의 사과"와 "행위(감정)으로서의 사과" 이 두 가지 의미를 명확하게 인지하지 못하기 때문에 사용자가 원하는 답변이 나오..
요즘 LLM 기술을 활용한 사례가 많아지면서, 저도 파이썬 Langchain 기반의 LLM 파이프라인을 구성했었는데요,본래, Spring 개발에 더 익숙했던지라, Spring AI를 통한 개발을 진행해보려고 합니다. Chat Client란?Spring AI에서 제공하는 Porterable API로, AI 모델과의 통신을 지원해 주는 도구입니다. 보통 LLM에서 주로 사용하는 용어인 Prompt를 통해 AI 모델과 통신합니다.AI 모델은 두 가지 메시지를 통해 통신하는데요, 사용자가 입력한 메시지와 시스템에 안내하기 위해 생성되는 시스템 메시지입니다.사용자 메시지는 알겠는데.. 시스템 메시지란 뭘까요?시스템 메시지란, 사용자가 입력한 메시지를 AI 모델이 이해하기 쉽도록 개발자가 가이드를 내려주는 메시지를..