์ด์ Spring AI์ ๋ํ ๊ธ์ ์์ฑํ ํ, ๊ฐ์ฌํ๊ฒ๋ ์๊ฐ๋ณด๋ค ๋ง์ ๋ถ์ด ๊ธ์ ์ฐพ์์ฃผ์ จ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋์ค, ๊ฐ์๊ธฐ Spring AI ๋ฉ์ธ README์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ์ฌ๋ผ์์ต๋๋ค.
Spring AI์ ๋ณ๊ฒฝ ์ฌํญ ๊ณต์ง
ํต์ฌ ๋จผ์ ๋ง์๋๋ฆฌ๋ฉด, ์๋์ ๊ฐ์ด ๋ฐ๋๊ฒ ๋์์ต๋๋ค.
- 1๏ธโฃ ์๋ก์ด ChatClient๋ ChatModel ์ธ์คํด์ค๋ฅผ ์ทจํฉ๋๋ค. ์ด๊ฒ์ RestClient, WebClient, JdbcClient ๋ฑ๊ณผ ๊ฐ์ ์คํ๋ง ์ํ๊ณ์ ํด๋ผ์ด์ธํธ๋ค๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ํ๋กฌํํธ๋ฅผ ์คํํ ์ ์๋๋ก fluent API ๋ฐฉ์์ ์ง์ํฉ๋๋ค.
- 2๏ธโฃ ChatClient, ImageClient ๋ฑ ...Client๋ก ๋๋ฌ๋ ํ์ผ๋ค์ด ์ด์ ๋ ...Model๋ก ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค.
- ๋ฐ๋ผ์ ์ด์ ์๋ ChatClient๊ฐ ModelClient๋ฅผ ์์๋ฐ์์ง๋ง, ์ด์ ๋ ChatModel์ด Model์ ์์๋ฐ๊ฒ ๋ฉ๋๋ค.
- Model ์ธํฐํ์ด์ค๋ Spring AI API์ AI ๋ชจ๋ธ API ๊ฐ์ ๋ณํ์ ํํํฉ๋๋ค.
์ค์ ๋ก ์ด๋ป๊ฒ ๋ฐ๋์๋ ํ์ธํด ๋ณด์
๊ทธ๋ ๋ค๋ฉด, ์ค์ ๋ก ์ด๋ป๊ฒ ๋ฐ๋์๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
ChatModel
- ์ด์ ์ ์๋ String call(String message), String call(Message... messages)๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ๋ฐ๋ผ์ ๊ธฐ์กด ์ฌ์ฉ์ ๋ถ๋ค์ ChatModel๋ฅผ ์์ฑํ๋ค๋ ์ ๋ง ์ ์ธํ๋ฉด ๊ทธ๋๋ก ์ฌ์ฉํ์ค ์ ์์ต๋๋ค.
- ChatResponse๋ฅผ ๋ด์ call(Prompt prompt) ๋ฉ์๋๋ ๋์ผํ๊ฒ ์์ต๋๋ค.
- ChatOptions๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ getDefaultOptions() ๋ฉ์๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
ChatClient (์ดํ)
์๋ก ์๊ธด ChatClient์์๋ ๋น๋ ํจํด์ ์ฌ์ฉํ ์ ์์์ด ๋ณด์ ๋๋ค.
์ค์ต ๋น๊ต - ์ ๋ฐ์ดํธ ์ด์ ๋ฒ์ vs ์ ๋ฐ์ดํธ ์ดํ ๋ฒ์
ํ์ ์ ๋ฌธ๊ฐ๋ผ๊ณ ์ ์ํ ๋ค, ํ์์ ๋ํด ์๋ ค๋ฌ๋ผ๊ณ ์ง๋ฌธํด ๋ณด๊ฒ ์ต๋๋ค.
์ ๋ฐ์ดํธ ์ด์ ๋ฒ์
์ ๋ฐ์ดํธ ์ด์ ๋ฒ์ ์์๋ SystemMessage์ UserMessage ๋ฑ ์ฌ๋ฌ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ List<Message> ํ์ ์ messages๋ฅผ ๋ง๋ค๊ณ , ์ด๊ฒ์ ์ด์ฉํ์ฌ Prompt๋ฅผ ๋ง๋ ๋ค ChatClient์๊ฒ ํธ์ถํ๋๋ก ํด์ผ ํ์ต๋๋ค.
์ ๋ฐ์ดํธ ์ดํ ๋ฒ์
๋ฐ๋ฉด, ์ ๋ฐ์ดํธ ์ดํ์์๋ ํ ๋ฒ์ ๋น๋ ํจํด์ผ๋ก ์ ์ํ ์ ์๊ฒ ๋ฉ๋๋ค. ๊ฐ์ธ์ ์ธ ์ถ์ธก์ผ๋ก๋ ์ด๋ ๊ฒ ๋ ์์ธํ๊ฒ ํ๋กฌํํธ๋ฅผ ๋ง๋ค๊ณ ํธ์ถํด์ผ ํ๋ ์ํฉ์์, ๋ฒ๊ฑฐ๋ก์ ๋ ๋ฐฉ์์ ๋น๋ ํจํด์ผ๋ก ์ฝ๊ฒ (fluent API) ๋ง๋ค๊ธฐ ์ํด ์ด๋ฐ ๋ฆฌํฉํฐ๋ง ์์ ์ ํ์ง ์์์๊น ์๊ฐ์ด ๋ญ๋๋ค.
์์ ์ฝ๋๋ฅผ ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
- ChatClient์ Builder์์๋ ๋ด๋ถ์ ์ผ๋ก ChatClientRequest์ ChatModel์ ๊ฐ์ง๋๋ค.
- ChatModel์ ์์ ๋ง์๋๋ฆฐ ChatGPT ๋ฑ์ AI ๋ชจ๋ธ์ ๋ปํฉ๋๋ค.
- ChatClientRequest๋ ์์คํ ํ ์คํธ (์์คํ ์๊ฒ ์ ์ํ ์ญํ ๋ฑ), ์ ์ ํ ์คํธ (์ ์ ๊ฐ ๋ณด๋ผ ํ๋กฌํํธ ๋ฌธ๊ตฌ) ๋ฑ์ ๊ฐ์ง๋๋ค.
๋ค์์ ChatClientRequest์ ๋ด๋ถ์ ๋๋ค. ๋น๋ ์์ฑ์ ๋ฉ์๋์์ ๋ณด์ จ๋ฏ, ๋น๋ ํด๋์ค์์ ๊ฐ์ง๊ณ ์๋ ChatModel์ ๊ทธ๋๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค. (์ด๋ ์์ ์๋ mutate ๋ฉ์๋์์ ์ฌ์ฉ๋๊ธฐ ์ํจ์ ๋๋ค. mutate ๋ฉ์๋๋ ํด๋น ChatClientRequest ํด๋์ค๋ก๋ถํฐ ์ธํ ๊ฐ์ ๋ณต์ ํ์ฌ ์๋ก์ด ChatClient๋ฅผ ๋ง๋ค๊ธฐ ์ํ ChatClient.Builder๋ฅผ ๋ฐํํฉ๋๋ค.)
์ดํ build๊ฐ ์๋ฃ๋๊ณ ChatClient๊ฐ ๋ง๋ค์ด์ง๋ฉด, prompt ๋ฉ์๋๋ฅผ ํตํด ChatClientRequest๋ฅผ ๊ฐ์ ธ์จ ๋ค์ ChatClientRequest์ call ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ CallResponseSpec ํด๋์ค๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
CallResponseSpec ๋ด์ฉ๋ถํฐ๋ ์๋ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ด๋ก์จ ChatClient์ ChatModel๋ก ๊ตฌ๋ถํ ์ด์ ๋ README ๋ด์ฉ๋๋ก ์์คํ ๋ฉ์์ง์ ์ ์ ๋ฉ์์ง๋ฅผ ์ฝ๊ฒ, fluent API ๋ฐฉ์์ผ๋ก ํ ๋ฒ์ AI ๋ชจ๋ธ์๊ฒ ํธ์ถํ๊ฒ ํ๊ธฐ ์ํจ์์ ์๊ฒ ๋์์ต๋๋ค. (๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๊ตฌํ ๋ฐฉ์์ ๊ฐ๋ฐํ Christian Tzolov์ Mark Pollack์ ๊ฒฝ์๋ฅผ ํํฉ๋๋ค..)
์ถ๊ฐ: ๋ฐ๋ ํ๋ฆํ
์ ๋ฐ์ดํธ์ ์ํด, ์ด์ ๊ธ์์ ์๊ฐ๋๋ ธ๋ ํ๋ฆํ ๋ํ ๋ฐ๋๊ฒ ๋์์ต๋๋ค. ํฐ ํ๋ฆ์ ๋ฐ๋์ง ์์์ผ๋, ์๋ฆฌ๋ฅผ ์ตํ๊ณ ์ถ์ผ์ ๋ถ๋ค์ ๋ค์ ์์ ์ผ ํ ๊ฒ ๊ฐ์ ๊ณต์ ๋๋ฆฝ๋๋ค.
๊ฒฐ๋ก : ๋๋ ์
- ChatClient์ ChatModel๋ก ๊ตฌ์ฑ๋ ๊ฒ์ ๋ณด๋ฏ์ด, ์ด์ ๋ฒ์ ๋ณด๋ค ๋ ๊ตฌ์ฒด์ ์ด๊ณ ์ ์ฉํ๊ฒ ๋ฐ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋งํผ ์ดํดํด์ผ ํ๋ ์ฝ๋๊ฐ ๋์ด๋ ๊ฒ ๊ฐ์ ์ด๋ฒ ๊ธ์ ์์ฑํ๋ฉด์๋ ๋ด๋ถ์ ์ผ๋ก ์๊ธด ํด๋์ค ๋ฑ ๋งค๋๋ฝ๊ฒ ์ดํด๋์ง ์๋ ๋ถ๋ถ๋ ์์์ต๋๋ค. ์์๋ณด๋ค ๋ ๋ง์ ์๊ฐ์ ํฌ์ํด์ ๋ณธ ํ๋ก์ ํธ๋ฅผ ์ดํดํด์ผ๊ฒ ๋ค๊ณ ๋๋ผ๊ฒ ๋์์ต๋๋ค.
- ์ ๋ฆฌ ๊ธ์ ์์ฑํ ์ง ์ฝ 3์ฃผ ๋ง์ ์ด๋ ๊ฒ ๋ณ๊ฒฝ์ด ์๊ธด ๊ฒ์ ๋ณด๋ฉด์, ๋น๊ต์ ์ ์ ๊ธฐ์ ์ธ ๊ฒ์ ๋์ ์ ์ ์คํ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ, ์กฐ๊ธ ์์ ํ๊ฐ ์งํ๋ ๋ค ๋์ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค๊ฒ ๋ ๊ณ๊ธฐ์์ต๋๋ค.
Spring AI์ ๋ํ ๋ค์ ๊ธ๋ก๋ ๋จ์ํ ์ง๋ฌธ ํ๋กฌํํธ๋ง ๋์ง๋ ๊ฒ ๋ง๊ณ ๋ ํ ํ๋ฆฟ (template)์ ์ ์ฉํ๋ ๋ฑ Spring AI์ ๋ค๋ฅธ ํด๋์ค๋ค์ ์๊ฐํด๋ณด๋ ๊ธ์ ์์ฑํ๋๋ก ํ๊ฒ ์ต๋๋ค.