๐ [Project] AI ๋ด ์ง์ ๋ง๋ค๊ธฐ: Function Calling์ผ๋ก ์คํํ๋ ํ์ง์ ํ์คํ
๐จ AI์ ์ฌ๋ฅ์ '์ฐฝ์'์ด์ง '์ ๋ต'์ด ์๋๋ค
์ฐ๋ฆฌ๊ฐ ํํ ์๋ ์ฌ์ค์ด ์์ต๋๋ค. AI๋ ๋ณธ์ง์ ์ผ๋ก '์ฐฝ์์ฑ'๊ณผ 'ํ๋ฅ ์ ์์ฑ'์ ํนํ๋์ด ์๋ค๋ ์ ์ ๋๋ค.
-
AI์ ํน์ง: ๊ฐ์ ์ง๋ฌธ์๋ ๋งค๋ฒ ๋ค๋ฅธ ๋ต์ ๋ด๋์ผ๋ฉฐ, ๋๋ก๋ 'ํ ๋ฃจ์๋ค์ด์ (ํ๊ฐ)'์ด๋ผ๋ ์ด๋ฆ์ ์ฝฉํธ๋ฅผ ์ ๋ณด์ด๊ธฐ๋ ํฉ๋๋ค.
-
์ ํต์ ์ฝ๋ฉ์ ํน์ง:
Try-Except๊ตฌ๋ฌธ์ผ๋ก 100% ์์ธก ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
๋ง์ฝ ๋น์ฆ๋์ค์์ ๊ท ์งํ ๊ฒฐ๊ณผ๋ฌผ์ด ํ์ํ๋ค๋ฉด, AI์๊ฒ ๋ชจ๋ ๊ฒ์ ๋งก๊ธฐ๊ธฐ๋ณด๋ค ๊ธฐ์กด ์๊ณ ๋ฆฌ์ฆ์ ๋น์ค์ ๋์ด๋ ๊ฒ์ด ์ ๋ฆฌํฉ๋๋ค. ๊ทธ๋์ ์ ๋ ๊ฐํ ๋งํฉ๋๋ค. AI ์๋์ผ์๋ก ์ฝ๋ฉ์ ๋ ๊น๊ฒ ์์์ผ ํ๋ค๊ณ ์. ์ธ๊ฐ๋ง์ด ๊ณ ๋ คํ ์ ์๋ '๋น์ฆ๋์ค ๋ก์ง'๊ณผ '์ฌ๋ฆฌ์ ๋ณ์'๋ฅผ ์๊ณ ๋ฆฌ์ฆ์ ๋ น์ฌ๋ด๋ ๊ฒ์ ์ฌ์ ํ ๊ฐ๋ฐ์์ ๋ชซ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๐ ์ ๋ต์ ์ฐํ: MCP ๋์ Function Calling์ ๋จผ์ ํํ ์ด์
MCP ์๋ฒ ๊ตฌ์ถ ์ค fastapi-mcp ๋ง์ดํธ ์ค๋ฅ๋ผ๋ ๋ฒฝ์ ๋ถ๋ชํ์ต๋๋ค. ์ฐธ๊ณ ์๋ฃ๋ ๋ถ์กฑํ๊ณ , ์ฌ์ง์ด Gemini์กฐ์ฐจ MCP๋ฅผ '๋ง์ธํฌ๋ํํธ'์ ๋ฌด์ธ๊ฐ๋ก ์คํดํ๋ ์ํฉ์ด์์ฃ . ์ฌ๊ธฐ์ ์ ๋ '์ ์๋น ํ์ญ์ต'์ ์์ธ๋ก Function Calling์ ๋จผ์ ๋์
ํ๊ธฐ๋ก ํ์ต๋๋ค.
MCP vs Function Calling, ๋ฌด์์ด ๋ค๋ฅผ๊น?
-
MCP: AI๊ฐ ๋๊ตฌํจ์์ ์ค์ค๋ก ๋๊ตฌ๋ฅผ ์ ํํด ๊ณผ์ ์ ์ํํฉ๋๋ค. ์ ์ฐํ์ง๋ง ๊ฒฐ๊ณผ์ ํ์ง์ด ๊ฐ๋ณ์ ์ผ ์ ์์ต๋๋ค.
-
Function Calling: ๊ฐ๋ฐ์๊ฐ ์ ์ํ ํจ์๋ฅผ AI๊ฐ ํธ์ถํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๊ฐ(JSON)์ ๋ฐํ์ผ๋ก ๋ต๋ณ์ ๊ตฌ์ฑํฉ๋๋ค. ์์คํ ๋ฆฌ์์ค ์ฌ์ฉ์ ์์ด ๊ฐ๋ฐ์๊ฐ ์ค์ ํ ์ ์ฝ ๋ด์์๋ง ํ๋ํ๋ฏ๋ก ํจ์ฌ ์์ ํ๊ณ ๊ท ์งํ ํ์ง์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
์ด๋ฒ ์์ ์ ํตํด TradeNPU_AI๋ฅผ ์ ๋ฉด ๋ฆฌํฉํ ๋งํ๋ฉฐ, ํฅํ MCP ์๋ฒ๋ฅผ ๋ฐ์๋ค์ผ ์ ์๋ 'MCP ํด๋ผ์ด์ธํธ'๋ก์์ ๊ธฐ๋ฐ์ 80% ์ด์ ์์ฑํ์ต๋๋ค.
๐ ๏ธ ์ค์ ๊ธฐ๋ก: Function Calling ํตํฉ ๊ณผ์ ์ 3๊ฐ์ง ํต์ฌ ์ธ์ฌ์ดํธ
์ง์ ์ฝ๋๋ฅผ ์น๊ณ ๋ฏ์ผ๋ฉฐ ์ป์ ๋ผ์ํ ์ค๋ฌด ํ๋ค์ ๋ ๊น์ด ์๊ฒ ๊ณต์ ํฉ๋๋ค.
1. "AI์ ๊ฐ์ค๋ผ์ดํ ์ ์ฃผ์ํ๋ผ": SDK ๋ฒ์ ๊ณผ ๊ณต์ ๋ฌธ์์ ๊ดด๋ฆฌ
AI ๊ธฐ์ ์ ๋ฐ์ ์๋๋ AI ์์ ์ ํ์ต ๋ฐ์ดํฐ ์๋์กฐ์ฐจ ์ถ์ํ๊ณค ํฉ๋๋ค.
-
๋ฌธ์ : Gemini์๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ๋ฒ์ ๋ฌผ์ด๋ณด๋ฉด, ์ด๋ฏธ
Deprecated๋ ์๋ ๋ฐฉ์์ ํด๋์ค๋ ๋ฉ์๋๋ฅผ ์๋ ค์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. "๋๋ ์ด ํจ์๊ฐ ๋ง๋ค๊ณ ๋ฏฟ์ด!"๋ผ๋ AI์ ํ์ ์ ์ฐฌ ๋ต๋ณ์ ์์ ์ ์๊ฐ์ ํ๋นํ ์ ์์ต๋๋ค. -
ํด๊ฒฐ: ๊ฒฐ๊ตญ '๊ณต์ ๋ฌธ์(Docs)'๋ผ๋ ์ฑ๊ฒฝ์ผ๋ก ๋์๊ฐ์ผ ํฉ๋๋ค. ํนํ Python SDK๋ ๋ง์ด๋ ์ ๋ฐ์ดํธ์์๋ ํธ์ถ ๊ท๊ฒฉ์ด ๋ณํ๋ ๊ฒฝ์ฐ๊ฐ ์ฆ์ผ๋, AI์ ๋ต๋ณ์ ๊ฐ์ด๋๋ก๋ง ์ผ๊ณ ์ค์ ๊ตฌํ ์์๋ ์ต์ SDK ๋ฌธ์๋ฅผ ์์ ๋์๋๋ '๊ต์ฐจ ๊ฒ์ฆ'์ด ํ์์ ๋๋ค.
2. "๋ณต์ก์ฑ์ ์๊ณ์ ": ์คํธ๋ฆผ, ๋น์ , ๋ฉ๋ชจ๋ฆฌ์ ์ค์ผ์คํธ๋ ์ด์
๋จ์ํ ํ ์คํธ ์ฑ๋ด์ ๋์ด์ '์ง์ง AI ์ง์'์ ๋ง๋๋ ๊ณผ์ ์ ์ผ์ข ์ ์ค์ผ์คํธ๋ผ ์งํ์ ๊ฐ์ต๋๋ค.
-
ํตํฉ์ ๋์ : ๋ต๋ณ์ ์ค์๊ฐ์ผ๋ก ์์์ฃผ๋ Streaming, ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด๋ด๋ Vision, ๊ณผ๊ฑฐ ๋ํ๋ฅผ ๊ธฐ์ตํ๋ Chat History, ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์๋ฒ์ ๋จ๊ธฐ๋ DB Logging๊น์ง... ์ด ๋ชจ๋ ๋ก์ง์ด ํ ๋ฒ์ API ํธ์ถ(
generate_content) ์์ ๋ น์๋ค์ด์ผ ํฉ๋๋ค. -
Great Leap: ํนํ ์ด๋ฏธ์ง ์ธ์ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ชจ๋ธ ์ค์์นญ ๋ก์ง์ด ๋ค์ด๊ฐ๊ณ , Function Calling์ ๊ฒฐ๊ณผ๊ฐ๊น์ง ๋ค์ ์คํธ๋ฆฌ๋ฐ ์๋ต์ ํ์ฐ๋ ๊ณผ์ ์์ ์ฝ๋์ ๋ณต์ก๋๋ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค. ์ด๋ฒ ๋ฆฌํฉํ ๋ง์ผ๋ก ๊ธฐ๋ฐ์ ๋ฆ์์ง๋ง, ํฅํ ๋์์ ์ธ์์ด๋ STT/TTS๊ฐ ์ถ๊ฐ๋ ๋๋ฅผ ๋๋นํด ๋น์ฆ๋์ค ๋ก์ง์ ์์ ๋จ์๋ก ๋ถ๋ฆฌํ๋ ์ค๊ณ ์ญ๋์ด ํต์ฌ์์ ๊นจ๋ฌ์์ต๋๋ค.
3. "๋๊ตฌํจ์ ์ ๋": Gemini ํน์ ์ Tool ๊ตฌ์ฑ ์ ๋ต
OpenAI์ Gemini๋ Function Calling์ ๋ํ๋ ๋ฌธ๋ฒ ์์ฒด๊ฐ ๋ค๋ฆ ๋๋ค. ํนํ Gemini๋ ๋๊ตฌ ๋ฑ๋ก ๊ณผ์ ์ด ๋ค์ ๊น๋ค๋กญ์ต๋๋ค.
-
๊ตฌ์กฐ์ ์ฐจ์ด: ๋จ์ํ JSON ์คํค๋ง๋ฅผ ๋์ ธ์ฃผ๋ OpenAI์ ๋ฌ๋ฆฌ, Gemini๋
function_declarations๋ฅผ ์ ์ํ ํ ์ด๋ฅผ ๋ค์types.Tool๊ฐ์ฒด๋ก ๋ํํ์ฌ ๋ฆฌ์คํธ๋ก ์ ๋ฌํด์ผ ํฉ๋๋ค. -
์ค๋ฌด์ ํ: ๋๊ตฌ๊ฐ ๋์ด๋ ์๋ก
main์ฝ๋๋ ์ง์ ๋ถํด์ง๋๋ค. ์ ๋ ๋๊ตฌ์ JSON ์คํค๋ง์ ์ค์ ํ์ด์ฌ ํจ์๋ฅผ ๋ณ๋์ ๋ ๋ฆฝ ํ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ํํ์ต๋๋ค.-
์ฅ์ : ์๋ก์ด ๋๊ตฌ ์ถ๊ฐ ์ ๊ธฐ์กด ๋ก์ง์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ํ์ผ๋ง ์ถ๊ฐํ๋ฉด ๋๋ฉฐ, Git์ ํตํ ๋ฒ์ ๊ด๋ฆฌ์ ํ์ (ํน์ ๋์ค์ AI์๊ฒ ์ฝ๋๋ฅผ ์์ ์ํฌ ๋) ์์๋ ํจ์ฌ ๊น๋ํ ๊ฐ๋ ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
-
๐งญ ๋ง์น๋ฉฐ: ๋ณต์ก์ฑ์ด๋ผ๋ ํ๋๋ฅผ ๋์ด์
ํ ์คํธ ์์ฑ๋ถํฐ ์ด๋ฏธ์ง ์ดํด, Function Calling๊น์ง ๋ค์์ธ ๊ฑฐ๋ํ ํจ์๊ฐ ์์ฑ๋์์ต๋๋ค. ์ฝ๋์ ๊ฐ๋ ์ฑ์ ์ ์ ๋ด๋ ค๋์์ง๋ง, TradeNPU_AI์ ๋ฅ๋ ฅ์ ๋น์ฝ์ ์ผ๋ก ์์นํ์ต๋๋ค.
๋ค์ ๊ณผ์ ๋ ์ด๋ฏธ์ง ์์ฑ๊ณผ ๋์์ ์ธ์์ ํตํฉ์ ๋๋ค. ๋ ๋ณต์กํด์ง ์ํคํ ์ฒ๋ฅผ ์ด๋ป๊ฒ ์ ๋ํ ์ง, ๋จธ๋ฆฌ๋ ์ํ์ง๋ง ๋ฉ์ถ ์๋ ์์ต๋๋ค. '๋ด ์ง์'์ด ์ ์ ๋๋ํด์ง๊ณ ์์ผ๋๊น์.
๐ก ์๋ด: ์ด ํฌ์คํ ์ ๊ธฐ์กด ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ์ 9~11ํ์ฐจ ์ฐ์ฌ๋ถ์ ํตํฉ ๋ฐ ์ฌ๊ตฌ์ฑํ ๊ธ์ ๋๋ค. MCP ์๋ฒ ๊ตฌ์ถ ๊ณผ์ ์์์ ์ํ์ฐฉ์ค๋ฅผ ๋ค๋กํ๊ณ , ์ ์ง๊ธ 'Function Calling'์ ์ง์คํด์ผ ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ณผ์ ์์ ์ป์ ๊ธฐ์ ์ ๊ตํ์ ๋ด์์ต๋๋ค.