-
[SpringAI] 간단한 Ollama 채팅 클라이언트 만들기AI 2025. 5. 22. 21:52
Ollama 및 LLM 설치
https://yeolmok.tistory.com/47 참고하시면 됩니다.
Springboot 프로젝트 코드
build.gradle
plugins { id 'java' id 'org.springframework.boot' version '3.4.5' id 'io.spring.dependency-management' version '1.1.7' } dependencies { implementation 'org.springframework.ai:spring-ai-starter-model-ollama' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' }
application.properties
spring.application.name=ai-chat spring.main.web-application-type=none spring.ai.ollama.base-url=http://localhost:11434 spring.ai.ollama.chat.model=gemma3:12B
애플리케이션 타입을 설정하고, Ollama 관련 설정을 합니다. 기본적으로 Ollama 로컬 API 서버는 11434 포트를 사용합니다.
AiChatApplication.java
import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.ollama.OllamaChatModel; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import java.util.Scanner; @SpringBootApplication public class AiChatApplication { public static void main(String[] args) { SpringApplication.run(AiChatApplication.class, args); } @Bean public CommandLineRunner run(OllamaChatModel ollamaChatModel) { return args -> { System.out.println("------------------------------------"); ChatClient chatClient = ChatClient.builder(ollamaChatModel) .defaultSystem("You are useful assistant") .build(); try (Scanner scanner = new Scanner(System.in)) { while (true) { System.out.print("\nUser: "); System.out.println("\nAssistant: " + chatClient .prompt(scanner.nextLine()) .call() .content()); } } }; } }
Ollama 외에도 OpenAi, Anthropic 등 ChatModel은 많습니다. 여러 AI 모델로 작업한다면 ChatClient Bean을 각각 정의하고, @Qualifier로 구분해서 사용하면 됩니다.
AiChatApplicationTests.java
@SpringBootTest class AiChatApplicationTests { //@Test //void contextLoads() { //} }
빌드시 테스트에서 Scanner 오류가 발생하지 않도록 주석처리 했습니다.
실행
프로젝트 루트로 가서 다음 명령어로 빌드합니다.
./gradlew build
그 다음, Ollama를 실행하고 jar 파일 경로로 가서 실행해주면 됩니다.
ollama serve cd build/libs java -jar ai-chat-0.0.1-SNAPSHOT.jar
실행 결과
----------------------------------- User: 역대 월드컵 개최지를 알려줘. Assistant: 네, 역대 월드컵 개최지는 다음과 같습니다. 1. **1930년:** 우루과이 (몬테비데오) 2. **1934년:** 이탈리아 (로마, 밀라노, 토리노, 나폴리, 제노바, 팔레르모) 3. **1938년:** 프랑스 (파리, 마르세유, 릴, 보르도, 투르, 몽펠리에, 스트라스부르, 툴루즈) 4. **1950년:** 브라질 (리오데자네이루, 상파울루, 쿠리치바, 포르투알레그레, 벨루오리존치) 5. **1954년:** 스위스 (베른, 취리히, 바젤, 로잔, 윈터투어) 6. **1958년:** 스웨덴 (스톡홀름, 예테보리, 말뫼, 하파르스베리, 링크비, 칼마르) 7. **1962년:** 칠레 (산티아고, 발파라이소, 콘셉시온, 탈카후아노) 8. **1966년:** 잉글랜드 (런던, 버밍엄, 런던, 선덜랜드, 뉴캐슬, 노팅엄, 셰필드) 9. **1970년:** 멕시코 (멕시코시티, 과달라하라, 몬테레이, 푸에블라, 레오폴도수아레스) 10. **1974년:** 서독 (뮌헨, 함부르크, 쾰른, 슈투트가르트, 프랑크푸르트, 뒤셀도르프, 하이델베르크) 11. **1978년:** 아르헨티나 (부에노스아이레스, 로사리오, 코르도바, 라플라타, 멘도사, 산후안) 12. **1982년:** 스페인 (마드리드, 바르셀로나, 빌바오, 세비야, 발렌시아, 산세바스티안, 라코루냐) 13. **1986년:** 멕시코 (멕시코시티, 과달라하라, 몬테레이, 푸에블라, 티후아나, 레오폴도수아레스) 14. **1990년:** 이탈리아 (로마, 나폴리, 토리노, 밀라노, 볼로냐, 제노바, 팔레르모, 안코나) 15. **1994년:** 미국 (샌프란시스코, 시애틀, 워싱턴D.C., 이스트러더포드, 달라스, 캔자스시티, 잭슨빌, 덴버, 오클라호마시티, 애틀랜타) 16. **1998년:** 프랑스 (파리, 마르세유, 리옹, 보르도, 세트, 릴, 툴루즈, 몽펠리에, 생에티엔, 로렌) 17. **2002년:** 대한민국, 일본 (대한민국: 서울, 부산, 대전, 광주; 일본: 요코하마, 도쿄, 오사카, 후쿠오카, 사이타마, 니혼가와) 18. **2006년:** 독일 (베를린, 뮌헨, 슈투트가르트, 함부르크, 도르트문트, 프랑크푸르트, 겔젠키르헨, 라이프치히, 뉘른베르크, 쾰른) 19. **2010년:** 남아프리카 공화국 (요하네스버그, 케이프타운, 포트엘리자베스, 프리토리아, 네덜란드, 드반, 블로에만테) 20. **2014년:** 브라질 (상파울루, 리우데자네이루, 벨루오리존치, 쿠리치바, 브라질리아, 포르투알레그레, 살바도르, 마나우스, 나탈, 고이아니아) 21. **2018년:** 러시아 (모스크바, 상트페테르부르크, 소치, 칼리닌그라드, 볼고그라드, 니즈니노브고로드, 사마라, 예카테린부르크, 로스토프온도누, 카잔) 22. **2022년:** 카타르 (도하, 알라얀, 알와크라, 알코르, 루사일, 알차트, 막데) 23. **2026년:** 미국, 캐나다, 멕시코 (미국: 애틀랜타, 시애틀, 댈러스, 캔자스시티, 샌프란시스코, 로스앤젤레스; 캐나다: 토론토, 밴쿠버; 멕시코: 멕시코시티, 몬테레이, 과달라하라) 혹시 특정 연도나 개최 국가에 대해 더 궁금한 점이 있으신가요?
참고
Spring doc
(https://docs.spring.io/spring-ai/reference/api/chatclient.html)
'AI' 카테고리의 다른 글
[SpringAI] Tool Calling (2) - DB 접근 (0) 2025.06.20 [SpringAI] Tool Calling (1) (0) 2025.05.24 Ollama 설치 및 실행 (0) 2025.05.16