์๋ ํ์ธ์. dev_writer์ ๋๋ค.
์๋ Spring AI๊ฐ ์ฒ์ ๋์์ ๋ ๋น์๋ณด๋ค ์๊ฐ์ด ๊ฝค ์ง๋ ๊ฒ ๊ฐ์, ์ค๋๋ง์ Spring AI์ ๋ํ ๊ธ์ ๋ค์ ์ฐ์ฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๊ธ์ ์์ฑํ๋ ์์ ์ธ 25๋ 4์ ๊ธฐ์ค์ผ๋ก ๋ฆด๋ฆฌ์ฆ ๋ 1.0.0-M6 ๋ฒ์ ๊น์ง์ ํ์ฉ๋ฒ์ ๋ค๋ฃฐ ์์ ์ ๋๋ค. ์์ง ์์ ํ๋ ๋ฒ์ ์ด ์๋ ๋งํผ, ์๋ ์ ๊ธ์ฒ๋ผ ๋ณธ ๋ด์ฉ๋ ์ถํ deprecated ๋ ์ ์๋ ๋ถ๋ถ๋ค์ด ์๋ค๋ ์ ์ ๊ฐ์ํด ์ฃผ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ณต์ ๋ฌธ์์ Dan Vega์ Spring AI ์์, ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ธ Spring AI ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ๊ฒ ์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๊ธ์ Spring AI ๊ณต์ ๋ฌธ์์ ์ฒซ ํ์ด์ง๋ถํฐ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Spring AI
Spring AI๋ ์ธ๊ณต์ง๋ฅ ์์ง๋์ด๋ง์ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ ๋๋ค. ์ด ํ๋์์ํฌ์ ๋ชฉํ๋ ์ด์์ฑ๊ณผ ๋ชจ๋ํ ์ค๊ณ์ ๊ฐ์ Spring ์ํ๊ณ์ ์ค๊ณ ์์น์ ์ธ๊ณต์ง๋ฅ ๋ถ์ผ์ ์ ์ฉํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ ์์๋ก์ POJO์ ์ฌ์ฉ์ ์ฅ๋ คํ๋ ๊ฒ์ ๋๋ค.
Spring AI๋ ๊ทผ๋ณธ์ ์ผ๋ก ์ธ๊ณต์ง๋ฅ ํตํฉ์ ํต์ฌ ๊ณผ์ ์ธ ๊ธฐ์ ์ ๋ฐ์ดํฐ์ API๋ฅผ AI ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
ํน์ง
Spring AI๋ ๋ค์ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํฉ๋๋ค:
- Spring AI๋ Anthropic, OpenAI, Microsoft, Amazon, Google, Ollama ๋ฑ ์ฃผ์ AI ๋ชจ๋ธ ์ ๊ณต์๋ฅผ ๋ชจ๋ ์ง์ํฉ๋๋ค. ์ง์๋๋ ๋ชจ๋ธ ์ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- AI ์ ๊ณต์์ ๊ด๊ณ์์ด, ๋๊ธฐ์ ๋ฐ ์คํธ๋ฆฌ๋ฐ API๋ฅผ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ๋ํ ๋ชจ๋ธ ๋ณ ๊ณ ์ ๊ธฐ๋ฅ์ ์ ๊ทผํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
- ๊ตฌ์กฐํ๋ ์ถ๋ ฅ - AI ๋ชจ๋ธ์ ์ถ๋ ฅ์ POJO๋ก ๋งคํ
- Apache Cassandra, Azure Vector Search, Chroma, Milvus, MongoDB Atlas, Neo4j, Oracle, PostgreSQL/PGVector, PineCone, Qdrant, Redis, Weaviate ๋ฑ ์ฃผ์ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ณต์๋ ์ง์
- ๋ฒกํฐ ์ ์ฅ์์ ๊ด๊ณ์์ด ์ผ๊ด๋ API ์ ๊ณต, SQL๊ณผ ์ ์ฌํ ๋ฉํ๋ฐ์ดํฐ ํํฐ API ํฌํจ
- ๋๊ตฌ/ํจ์ ํธ์ถ - ๋ชจ๋ธ์ด ํด๋ผ์ด์ธํธ ์ธก ๋๊ตฌ ๋ฐ ํจ์๋ฅผ ์คํํ๋๋ก ์์ฒญํ ์ ์์ด, ์ค์๊ฐ ์ ๋ณด ์ ๊ทผ ๊ฐ๋ฅ
- ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ - AI ๊ด๋ จ ์์ ์ ๋ํ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ ์ ๊ณต
- ๋ฐ์ดํฐ ์์ง๋์ด๋ง์ ์ํ ๋ฌธ์ ์ฃผ์ ETL ํ๋ ์์ํฌ ์ง์
- AI ๋ชจ๋ธ ํ๊ฐ ๋๊ตฌ - ์์ฑ๋ ์ฝํ ์ธ ๋ฅผ ํ๊ฐํ๊ณ ํ๊ฐ (hallucination)์ ๋ฐฉ์ง
- ChatClient API - WebClient ๋๋ RestClient์ ์ ์ฌํ ํ๋ฃจ์ธํธ API ํํ๋ก AI ์ฑํ ๋ชจ๋ธ๊ณผ ํต์
- Advisors API - ๋ฐ๋ณต๋๋ ์์ฑํ AI ํจํด์ ์บก์ํํ๊ณ , LLM๊ณผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ฉฐ, ๋ค์ํ ๋ชจ๋ธ ๋ฐ ํ์ฉ ์ฌ๋ก์ ๋ํ ์ด์์ฑ ์ ๊ณต
- ์ฑํ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐ RAG (Retrieval Augmented Generation, ๊ฒ์ ์ฆ๊ฐ ์์ฑ) ์ง์
- ๋ชจ๋ AI ๋ชจ๋ธ ๋ฐ ๋ฒกํฐ ์ ์ฅ์์ ๋ํ Spring Boot ์๋ ๊ตฌ์ฑ ๋ฐ ์คํํฐ ์ ๊ณต - start.spring.io์์ ์ํ๋ ๋ชจ๋ธ ๋๋ ๋ฒกํฐ ์ ์ฅ์ ์ ํ ๊ฐ๋ฅ
์ด๋ฌํ ๊ธฐ๋ฅ์ ํตํด ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค:
- ๋ด ๋ฌธ์ ๊ธฐ๋ฐ ์ง๋ฌธ ๋ต๋ณ (Q&A)
- ๋ด ๋ฌธ์์ ์ฑํ ํ๊ธฐ
๋ฌธ์
๊ด๋ฒ์ํ ์ฐธ์กฐ ๋ฌธ์, ์ํ ์ ํ๋ฆฌ์ผ์ด์ , ์ํฌ์/๊ฐ์ข ์๋ฃ
์์ํ๊ธฐ
๊ฐ๋จํ ๋ช ๋จ๊ณ๋ก Spring AI๋ฅผ ์์ํ ์ ์์ต๋๋ค:
1. Spring Initializr๋ฅผ ์ด์ฉํ์ฌ, Spring AI OpenAI Boot Starter ์์กด์ฑ์ด ํฌํจ๋ Spring Boot ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํฉ๋๋ค. (์ํ๋ AI ๋ชจ๋ธ ๋๋ ๋ฒกํฐ ์ ์ฅ์๋ฅผ ์ ํ ๊ฐ๋ฅ)
2. application.properties์ OpenAI ํค๋ฅผ ์ถ๊ฐํฉ๋๋ค:
spring.ai.openai.api-key=<YOUR OPENAI KEY>
3. SpringAiDemoApplication ํด๋์ค์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค:
@Bean
public CommandLineRunner runner(ChatClient.Builder builder) {
return args -> {
ChatClient chatClient = builder.build();
String response = chatClient.prompt("Tell me a joke").call().content();
System.out.println(response);
};
}
4. ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํฉ๋๋ค:
./mvnw spring-boot:run
๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์์ํ๊ณ ์ถ์ผ์๋ค๋ฉด, ์ฐธ์กฐ ๋ฌธ์์ "Getting Started" ์น์ ์ ์ฐธ๊ณ ํ์ญ์์ค.