실무에 바로 적용하는 Spring AI: Spring 서비스에 챗봇·RAG·MCP 도입하기
안녕하세요! 문서 분할 후 ETL 작업 마무리까지 시간이 오래 걸리길래, 프로파일링 해보니 keywordMetadataEnricher 작업 부분에서 가장 많이 시간이 소요되더라구요. 청크 사이즈를 키워 청크 개수를 줄여서 다시 테스트해보니 소요 시간이 많이 줄어들었습니다! 물론 아무래도 cpu나 gpu자원이 좋을수록 더 최적화할 수 있는 것 같긴 한데요ㅠ.ㅠ 어쨌든 작업 중 궁금한 점이 좀 많이 생겨서 질문 드려봅니다! keywordMetadataEnricher 의 기능이 rag의 검색 성능 등 서비스 활용 시에 사용자가 체감할 수 있는 성능을 많이 좌우할까요? keywordMetadataEnricher 사용을 최적화 하는 방법이 궁금합니다..! 저는 청크 개수를 줄였지만 그만큼 트레이드오프도 존재할 거 같아서, 병렬 처리를 한다든가.. 또 다른 방식이 있을 거 같은데 궁금합니다! (이것도 임베딩 모델과 연관 있을까요?) 추가로, 청크 개수를 줄였을 때의 장단점과 실제 서비스나 실무에서 사용 시, 청크 개수와 오버랩 값을 어떻게 결정할 수 있을지 궁금합니다! 실제로 테스트해보면서+경험론적으로 내가 etl 작업하고자 하는 로우 데이터의 성향에 따라 적절한 값을 찾는 것 밖에 없을까요..? 그 외 강사님께서 생각하시는 spring api 사용 시 ETL 파이프라인의 성능(시간 성능과 검색 성능)을 향상시킬 수 있는 방법도 궁금합니다. 시간 성능의 경우, ETL이라는 것은 무조건 시간이 오래 걸릴 수밖에 없는 작업이라는 생각이 들지만요..! 검색하면 논문도 나올만큼 많은 곳에서 얻을 수 있는 지식이지만,,! 강사님의 노하우나 생각도 궁금해서 질문 남겨봅니당. 항상 감사드립니다 : )
실무에 바로 적용하는 Spring AI: Spring 서비스에 챗봇·RAG·MCP 도입하기
윈도우 환경에서 가상환경 만들기 및 파이썬 MCP 설치 명령어 1. 파이썬 최종 명령어만 정리 인텔리제이 Terminal에서 그대로: py --version py -m venv venv .\venv\Scripts\Activate.ps1 python -m pip install --upgrade pip python -m pip install mcp python -m pip install mcp_weather_server python -m mcp_weather_server 설치 잘 되었는지 확인 방법 확인은 아래 명령어로 해봐. python --version python -m pip show mcp python -m pip show mcp_weather_server Name , Version , Location 이런 정보가 나오면 설치 성공이야. 그리고 실행했을 때: python -m mcp_weather_server 이 명령어 입력 후 아무 에러 없이 터미널이 멈춘 것처럼 대기 상태 면 정상일 가능성이 높아. MCP 서버가 실행 중이라 입력창이 바로 안 돌아오는 게 맞을 수 있어. 중지하려면: Ctrl + C 정리하면: 1. (venv) 표시 있음 → 가상환경 활성화 성공 2. pip show mcp_weather_server 결과 나옴 → 설치 성공 3. python -m mcp_weather_server 실행 후 에러 없이 대기 → 서버 실행 성공
@McpPrompt 를 이용해서 prompt를 제공하도록 mcp server 단에서 만들었으므로, mcp client 에서 mcp server 의 prompt 를 사용하는게 적절할듯 한데 , client 에서 다시 프롬프트를 재작성하는 예제코드를 소개해주시고 계십니다. client 에서 server 의 prompt, resource 들을 검색하고 그중 적절한 것을 골라서 사용하는 방법이 있을까요?
안녕하세요 강사님. 혹시 상품 관련 추천을 구현하기 위해 pgvector를 구현하고 싶은 취준생입니다. 상품 데이터 안에 브랜드, 카테고리, 가격, 이전에 조회한 상품들, 이후에 조회한 상품들 등 이러한 필드를 이용해서 이걸 Document로 만든 다음 코사인 유사도를 구해도 괜찮을까요 아니면 Document는 text만 가능한가요?
안녕하세요. 강의를 듣고있는 사람입니다. 버전이 변경되다보니 강의 내용을 그대로 수행한다면 정상적으로 작동하는 Project들이 몇 없네요.. DALL-E 2 모델로 이미지를 생성하는 경우 오류 발생 DALL-E 2 모델에서는 withQuality("hd")와 같은 옵션을 지원하지 않는다고합니다. 해당 라인을 제거해주시면 정상작동합니다. DALL-E 3 의 경우 withQuality를 지원하는데, 지정하지 앟는다면 standard 값이 기본으로 들어가며 hd를 원하시는 경우 따로 if ("dall-e-3".equals(model)) { optionsBuilder.withQuality("hd"); } 위와같이 옵션을 주입하여 사용하시면 될것같습니다.
@Service @RequiredArgsConstructor public class ImageService { private final OpenAiImageModel openAiImageModel; public ImageResponse getImageGen(ImageRequestDTO request) { ImageResponse imageResponse = openAiImageModel .call(new ImagePrompt(request.getMessage(), OpenAiImageOptions.builder() .model(request.getModel()) .quality("hd") .N(request.getN()) .height(1024) .width(1024) .build() )); return imageResponse; } } 선생님 강의와 같이 해당 코드를 작성했는데 이미지 생성에 실패했다는 오류가 뜹니다. spring 공식 문서에서는 .quality("hd")가 없어 동일하게 제거하고 재부팅해도 이미지 생성에 실패하네요 ㅠ 혹시 원인을 알 수 있을까요?
public String chatMessage(String message) { return chatClient.prompt() .user(message) .call() .chatResponse() .getResult() .getOutput() .getText(); } 선생님 현재 스프링 ai 1.0.1버전을 사용중입니다. 그러면 getText()가 아닌 getContent()를 사용해서 프롬프트를 생성해야되는거 아닌가요?! 왜 getConetent()를 사용할 수 없는걸까요?!
완전 초보입니다. 온라인 강의 들으면서, 하나하나 단계별로 따라하고 있는데, Gradle 동기화 오류가 발생하고 있습니다. ChatGPT 답변에 따라 계속 해 봤는데, 해결이 안되고 있습니다. 처음에는 한글명으로 되어 있어서 문제인가 싶어서,, "한글명" --> yunkkim 으로 변경했는데, 그것도 해결책이 아닌거 같고, gradle.properties 파일을 추가해 보기도 하고,, 어찌 해결 해야 할까요? Multiple build operations failed. Could not move temporary workspace (C:\Users\yunkkim\.gradle\caches\8.14.3\transforms\dab9c5aa8765a6befd44e49da2bac9d1-1b58f335-d72b-448f-a093-89ca330d8ea9) to immutable location (C:\Users\yunkkim\.gradle\caches\8.14.3\transforms\dab9c5aa8765a6befd44e49da2bac9d1) Could not move temporary workspace (C:\Users\yunkkim\.gradle\caches\8.14.3\transforms\cfc6584c7a788e7d4dba5168f57ef3f7-cdad1752-221b-4e79-8033-98f49d023da3) to immutable location (C:\Users\yunkkim\.gradle\caches\8.14.3\transforms\cfc6584c7a788e7d4dba5168f57ef3f7) >
.getResult() .getOutput() .getText(); } .getoutput 다음 getContent가 있어야 하는데 gettext만 있습니다. getContent는 생성이 되지 않습니다. 똑같이 수업보면서 했는데 왜그런지 모르겠습니다. 물론 결과값은 설명하신 대로 똑같이 나오는기는 하는데 차이가 없나요?