AI
-
SpringAI - 이미지 생성하기 실습AI/인공지능 2025. 9. 27. 23:38
이미지 생성 async function generateImage() { const message = document.getElementById("message").value; const model = document.getElementById("model").value; const n = document.getElementById("n").value; if (!message.trim()) { alert("이미지 생성을 위한 상세 메시지(프롬프트)를 입력해 주세요."); document.getElementById("message").focus(); ..
-
SpringAi - 이미지 생성 핵심 구조 및 이해AI/인공지능 2025. 9. 27. 23:16
1. Spring AI 이미지 생성의 핵심 구조 이해Spring AI에서 이미지 생성 기능은 다음 네 가지 주요 인터페이스와 클래스로 구성되어 있습니다. 이 구조 덕분에 OpenAI 외에 다른 AI(예: Stability AI)로 쉽게 교체할 수 있습니다. 구성 요소역할필수 여부ImageModel (인터페이스)이미지 생성 기능을 정의하는 최상위 계약. (예: OpenAiImageModel이 이 인터페이스를 구현)필수ImagePromptAI 모델에 전달할 요청 데이터 (프롬프트, 옵션)를 담는 객체.필수ImageOptions모델, 크기, 품질 등 세부 설정을 정의하는 객체. (예: OpenAiImageOptions)선택 (기본값 사용 가능)ImageResponse이미지 생성의 결과를 담아 ImageMode..
-
SpringAI - 챗 메모리 어드바이저(Chat Memory Advisor)AI/인공지능 2025. 9. 24. 10:15
챗 메모리 어드바이저(Chat Memory Advisor) "챗 메모리 어드바이저(Chat Memory Advisor)"는 대규모 언어 모델(LLM)이 이전 대화 내용을 기억하고 활용하여 맥락을 유지하는 데 도움을 주는 도구 또는 구성 요소를 의미합니다. 특히 Spring AI 프레임워크에서 중요한 역할을 합니다.주요 기능 및 역할맥락 관리: LLM은 기본적으로 이전 대화를 기억하지 못하는 'stateless' 상태입니다. 사용자가 "그래서 그건 어떻게 됐어?"라고 물었을 때, LLM은 앞선 대화의 "그것"이 무엇인지 알지 못합니다. 챗 메모리 어드바이저는 이러한 문제점을 해결하여 LLM이 대화의 흐름을 파악하고 더 자연스럽고 일관된 답변을 생성하도록 돕습니다.프롬프트 수정: 챗 메모리 어드바이저는 사용..
-
SpringAI - RAG, Vector Store 파헤치기AI/인공지능 2025. 9. 23. 15:11
1) RAG (Retrieval-Augmented Generation)란?📝 기본 아이디어**기존 LLM(챗GPT 같은 모델)**은 학습할 때 본 데이터로만 답변합니다.하지만 최신 정보나 회사 내부 문서 같은 건 모델이 모를 수 있죠.그래서 “검색(Retrieval) + 생성(Generation)”을 합친 방식이 RAG예요.👉 즉,먼저 외부 데이터베이스에서 관련 문서를 검색해서그 내용을 모델에게 넣어주고모델이 그 문맥을 바탕으로 답변을 만드는 구조입니다.2) RAG의 기본 구성요소질문(Query)사용자가 “JAVA가 뭐야?” 같은 질문을 합니다.Retriever (검색기)질문을 벡터화(숫자 표현)해서 Vector Store에서 비슷한 문서를 찾습니다.Vector Store (벡터 저장소)문서들을 쪼개..
-
Spring AI Advisor (3편): JSON 포맷 강제와 DTO 매핑 실습AI/인공지능 2025. 9. 21. 22:31
LLM 응답을 JSON/DTO로 안전하게 매핑하기 LLM은 기본적으로 자연어 텍스트를 출력합니다.하지만 실무에서는 종종 “JSON으로 결과를 받고 싶다 → DTO에 매핑해서 안전하게 사용하고 싶다”는 요구가 많습니다. Spring AI에서는 Advisor + OutputConverter를 활용해 응답 포맷을 강제할 수 있습니다.1. 기본: 문자열로 받는 경우String response = chatClient.prompt() .user("미국의 주요 도시 3개를 알려줘") .call() .content();System.out.println(response);출력 예시:뉴욕, 로스앤젤레스, 시카고👉 그냥 텍스트이기 때문에, 파싱이 어렵습니다.2. JSON 포맷을 강제하..
-
Spring AI Advisor (2편): 무상태 vs 메모리 대화 완벽 비교AI/인공지능 2025. 9. 21. 22:26
무상태 vs 메모리 대화, 무엇이 다를까? 지난 1편에서는 Advisor가 무엇인지, 그리고 대화 메모리를 관리하는 MessageChatMemoryAdvisor를 살펴봤습니다.이번 글에서는 Advisor를 켠 경우와 끄고 쓰는 경우의 차이를 실제 코드와 함께 비교해보자.1. 무상태(Stateless) 모드 기본적으로 ChatClient는 이전 대화 이력을 기억하지 않습니다.즉, 한 번의 요청 = 한 번의 답변으로 끝나는 원샷(One-shot) Q&A 형태죠.@Beanpublic ChatClient chatClient(ChatClient.Builder builder) { return builder.build(); // 아무 Advisor도 적용하지 않음}사용 예시:String res1 = chatCl..
-
Spring AI Advisor (1편): 대화 메모리와 프롬프트 미들웨어AI/인공지능 2025. 9. 21. 22:23
Advisor란 뭐지? Advisor = LLM 요청/응답에 끼어들어 전·후처리하는 미들웨어입니다.요청 전: 프롬프트에 공통 규칙 붙이기, 대화 이력(메모리) 합치기, 출력 포맷 지시 등응답 후: 포맷 검증/후처리, 로그/통계 수집 등스프링 MVC의 Filter/Interceptor를 떠올리면 이해가 조금 쉬울지도 모르겠다.언제, 왜 Advisor를 쓰나대화 기억(메모리): 앞에서 나눈 말을 다음 요청에 자동으로 포함(멀티턴 대화 UX)공통 시스템 규칙: 모든 요청에 “너는 친절한 조수야” 같은 System 프롬프트 자동 부착출력 포맷 강제: “JSON만 반환해” 같은 지시를 매 호출마다 자동 삽입감사/로깅: 요청·응답을 한 곳에서 기록적용 위치 2가지1) 전역 기본값으로 등록@Beanpublic Cha..
-
SpringAI - LLM 응답을 Java Record List로 매핑AI/인공지능 2025. 9. 21. 21:57
1. 컨트롤러@GetMapping("chatmovie")public List chatmovie(String directorName) { return chatService.chatmovie(directorName);} /chatmovie?directorName=... 로 요청하면,서비스의 chatmovie를 호출하고 List 형태로 JSON 응답을 돌려줍니다.ex)[ { "title": "Inception", "year": "2010" }, { "title": "Dunkirk", "year": "2017" }] 2. 엔티티 (레코드 DTO)public record Movie(String title, String year) {}Java 16+에서 도입된 record로, 불변 DTO를 간단히 정의한..