HowtoAI
ai-guide2026-03-19 5 min read

๐Ÿš€ 2026๋…„ ์ตœ์‹ ! Gemini API ํ•จ์ˆ˜ ํ˜ธ์ถœ ์™„๋ฒฝ ๊ฐ€์ด๋“œ: AI ์ฑ—๋ด‡ ํ•œ๊ณ„ ๋ŒํŒŒ & ์‹ค์‹œ๊ฐ„ ์ •๋ณด ์ˆ˜์ตํ™” ์‹ค์ „ ๋…ธํ•˜์šฐ

๐Ÿค–
HowtoAI ํŽธ์ง‘ํŒ€AI ์ „๋ฌธ ์—๋””ํ„ฐ

AI ๊ธฐ์ˆ ์„ ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ค์ „ ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ChatGPT, Claude, AI ์ž๋™ํ™”, SEO ๋ถ„์•ผ๋ฅผ ์ „๋ฌธ์œผ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๐Ÿ“… 2026-03-19โฑ๏ธ 5 min read๐ŸŒ how-toai.com
๋ชฉ์ฐจ ๋ณด๊ธฐ
ํ•ต์‹ฌ ์š”์•ฝ (3์ค„ ์š”์•ฝ)
  • Gemini API ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ AI ์ฑ—๋ด‡์˜ 'ํ•™์Šต ๋ฐ์ดํ„ฐ ํ•œ๊ณ„'๋ฅผ ๋›ฐ์–ด๋„˜์–ด ์‹ค์‹œ๊ฐ„ ์ •๋ณด ์กฐํšŒ, ์™ธ๋ถ€ ์„œ๋น„์Šค ์—ฐ๋™์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.
  • AI ๋ชจ๋ธ์€ ์‚ฌ์šฉ์ž ๋Œ€ํ™” ๋งฅ๋ฝ์— ๋งž์ถฐ ํ•„์š”ํ•œ ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ๋Šฅ๋™์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ  ํ˜ธ์ถœ์„ ์ œ์•ˆํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ์‹คํ–‰ํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ชจ๋ธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋”์šฑ ์ •ํ™•ํ•˜๊ณ  ์œ ์šฉํ•œ '์‚ด์•„์žˆ๋Š”' AI ์‘๋‹ต์„ ์ œ๊ณตํ•˜์—ฌ, ์ฑ—๋ด‡์˜ ์ˆ˜์ตํ™” ๋ฐ ํ™œ์šฉ ๊ฐ€์น˜๋ฅผ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‹ ๋ชฉ์ฐจ


AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์ฑ—๋ด‡์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด, ๋ชจ๋ธ์ด ํ•™์Šต ๋ฐ์ดํ„ฐ๋งŒ์œผ๋กœ๋Š” ๊ฐˆ์ฆ์„ ๋А๋‚„ ๋•Œ๊ฐ€ ๋นˆ๋ฒˆํ•ฉ๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ์ •๋ณด๊ฐ€ ์ ˆ์‹คํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์„œ๋น„์Šค์™€ ๋งค๋„๋Ÿฝ๊ฒŒ ์—ฐ๋™ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ ๋ง์ด์ฃ . ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ ๊ฐ์—๊ฒŒ ์ตœ์‹  ๋‚ ์”จ๋ฅผ ์•Œ๋ ค์ฃผ๊ฑฐ๋‚˜, ํŠน์ • ์ƒํ’ˆ์˜ ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ ๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•  ๋•Œ, ์•„์‰ฝ๊ฒŒ๋„ ๋ชจ๋ธ์€ ์Šค์Šค๋กœ ์ด๋Ÿฐ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์ด๋•Œ, Gemini API์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ(Function Calling) ๊ธฐ๋Šฅ์ด ์ง„๊ฐ€๋ฅผ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Gemini ๋ชจ๋ธ์ด ์–ด๋–ป๊ฒŒ ์™ธ๋ถ€ ๋„๊ตฌ์™€ '๋Œ€ํ™”'ํ•˜๋ฉฐ ๊ธฐ๋Šฅ์„ ํ˜์‹ ์ ์œผ๋กœ ํ™•์žฅํ•˜๋Š”์ง€, ๊ทธ ์‹ค์ „ ๋…ธํ•˜์šฐ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ๋ช…ํ™•ํžˆ ์•ˆ๋‚ดํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Gemini API ํ•จ์ˆ˜ ํ˜ธ์ถœ(Function Calling)์ด๋ž€?

Gemini API์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ AI ๋ชจ๋ธ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋‘” ์™ธ๋ถ€ ํ•จ์ˆ˜๋‚˜ API๋ฅผ ๋งˆ์น˜ ์‚ฌ๋žŒ์ฒ˜๋Ÿผ '์š”์ฒญ'ํ•˜๊ณ  '์‹คํ–‰'ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์‚ฌ์šฉ์ž์™€์˜ ๋Œ€ํ™” ๋งฅ๋ฝ์„ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ , ์™ธ๋ถ€ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•œ ์‹œ์ ์„ ์ •๊ตํ•˜๊ฒŒ ํŒ๋‹จํ•˜์—ฌ ํ•ด๋‹น ๋„๊ตฌ์˜ ํ˜ธ์ถœ ์ŠคํŽ™์„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ตฌ์กฐํ™”๋œ ํ˜•ํƒœ๋กœ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ด ์ „๋ฐ˜์ ์ธ ๊ณผ์ •์€ ํฌ๊ฒŒ ๋‹ค์Œ ๋‹ค์„ฏ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. ํ•จ์ˆ˜ ์ •์˜ (๊ฐœ๋ฐœ์ž): ๊ฐœ๋ฐœ์ž๋Š” AI ๋ชจ๋ธ์ด '์–ด๋–ค ๊ธฐ๋Šฅ'์„ '์–ด๋–ป๊ฒŒ' ํ˜ธ์ถœํ• ์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•จ์ˆ˜ ๋ชฉ๋ก(์ด๋ฆ„, ์ƒ์„ธ ์„ค๋ช…, ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ)์„ JSON ์Šคํ‚ค๋งˆ ํ˜•ํƒœ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ˜ธ์ถœ ์ œ์•ˆ (Gemini ๋ชจ๋ธ): ์‚ฌ์šฉ์ž๊ฐ€ ์งˆ๋ฌธ์„ ๊ฑด๋„ค๋ฉด, Gemini ๋ชจ๋ธ์€ ๋Œ€ํ™” ๋งฅ๋ฝ์„ ๋ฉด๋ฐ€ํžˆ ๋ถ„์„ํ•˜์—ฌ ์ •์˜๋œ ํ•จ์ˆ˜ ์ค‘ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๊ฐ€์žฅ ์ž˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„์ง€ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์ŠคํŽ™(ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜)์„ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๊ตฌ์กฐํ™”๋œ ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœ์ž์—๊ฒŒ '๋Šฅ๋™์ ์œผ๋กœ' ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.
  3. ์‹ค์ œ ํ•จ์ˆ˜ ์‹คํ–‰ (๊ฐœ๋ฐœ์ž): ๊ฐœ๋ฐœ์ž๋Š” ๋ชจ๋ธ์ด ์ œ์•ˆํ•œ ํ•จ์ˆ˜ ์ŠคํŽ™์„ ๋ฐ›์•„ ์‹ค์ œ ์™ธ๋ถ€ ํ•จ์ˆ˜(์˜ˆ: ์‹ค์‹œ๊ฐ„ ๋‚ ์”จ API ํ˜ธ์ถœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ, ์‚ฌ๋‚ด ์‹œ์Šคํ…œ ์—ฐ๋™ ๋“ฑ)๋ฅผ ๋ฐฑ์—”๋“œ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฒฐ๊ณผ ์ „๋‹ฌ (Gemini ๋ชจ๋ธ): ์™ธ๋ถ€ ํ•จ์ˆ˜ ์‹คํ–‰ ํ›„ ์–ป์€ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ Gemini ๋ชจ๋ธ์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋‚˜์•„๊ฐˆ ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
  5. ์ตœ์ข… ๋‹ต๋ณ€ ์ƒ์„ฑ (Gemini ๋ชจ๋ธ): ๋ชจ๋ธ์€ ์ „๋‹ฌ๋ฐ›์€ ํ•จ์ˆ˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ์œ ์šฉํ•œ ์ตœ์ข… ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜์—ฌ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์žฅ์  (Pros)
  • AI์˜ ๊ธฐ๋Šฅ ํ™•์žฅ
  • ์‹ค์‹œ๊ฐ„ ์ •๋ณด ํ™œ์šฉ ๊ฐ€๋Šฅ
  • ๋ณต์žกํ•œ ์ž‘์—… ์ž๋™ํ™”
๋‹จ์  (Cons)
  • ์ดˆ๊ธฐ ์„ค์ • ๋ฐ ์Šคํ‚ค๋งˆ ์ •์˜ ํ•„์š”
  • ์™ธ๋ถ€ ํ•จ์ˆ˜ ์‹คํ–‰ ๋กœ์ง ๊ตฌํ˜„ ๋ถ€๋‹ด
  • ๋ณด์•ˆ ๊ณ ๋ ค ์‚ฌํ•ญ ์ฆ๊ฐ€

Gemini API ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์ž‘๋™ ๊ณผ์ •์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ํ๋ฆ„๋„. ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋ธ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ œ์•ˆ, ์‹ค์ œ ํ•จ์ˆ˜ ์‹คํ–‰, ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข… ์‘๋‹ต๊นŒ์ง€์˜ ๋‹จ๊ณ„๋ฅผ ํ™”์‚ดํ‘œ๋กœ ์—ฐ๊ฒฐ

Gemini Function Calling์„ ํ™œ์šฉํ•˜๋Š” ์ด์œ 

Gemini Function Calling์€ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ž ์žฌ๋ ฅ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ๋‹จ์ˆœํžˆ ํ•™์Šต๋œ ์ง€์‹์— ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ์‹ค์‹œ๊ฐ„์œผ๋กœ ์™ธ๋ถ€ ์„ธ๊ณ„์™€ ๋Šฅ๋™์ ์œผ๋กœ '๋Œ€ํ™”'ํ•˜๋ฉฐ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • AI ์ •๋ณด์˜ '์‹œ์ฐจ' ๊ทน๋ณต: AI ๋ชจ๋ธ์€ ํŠน์ • ์‹œ์ ๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šต๋˜๊ธฐ์—, ์‹ค์‹œ๊ฐ„ ์ •๋ณด(์˜ˆ: ํ˜„์žฌ ์ฃผ๊ฐ€, ์ตœ์‹  ๋‰ด์Šค ํ—ค๋“œ๋ผ์ธ, ํŠน์ • ์ง€์—ญ ๋‚ ์”จ)๋‚˜ ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์—†๋Š” ๋ฏผ๊ฐํ•œ ์‚ฌ๋‚ด ์ •๋ณด๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋Š” '์ •๋ณด์˜ ์‹œ์ฐจ' ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ์ด๋Ÿฐ ์ตœ์‹  ์ •๋ณด๋ฅผ ์™ธ๋ถ€ API๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ€์ ธ์™€ AI์˜ ์ง€ํ‰์„ ๋„“ํ˜€์ค๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ์„œ๋น„์Šค์™€์˜ '๋งค๋„๋Ÿฌ์šด' ์—ฐ๋™: ์ฑ—๋ด‡์ด๋‚˜ AI ์—์ด์ „ํŠธ๊ฐ€ ์™ธ๋ถ€ ์„œ๋น„์Šค(์˜ˆ: ์˜ˆ์•ฝ ์‹œ์Šคํ…œ, ๊ฒฐ์ œ ์‹œ์Šคํ…œ, ๊ณ ๊ฐ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ)์™€ ๋งˆ์น˜ ํ•œ ๋ชธ์ฒ˜๋Ÿผ ์—ฐ๋™ํ•˜์—ฌ ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ์ž‘์—…์„ ๋Šฅ๋™์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. "๋‹ค์Œ ์ฃผ ํ™”์š”์ผ ์˜คํ›„ 3์‹œ์— ํšŒ์˜์‹ค ์˜ˆ์•ฝํ•ด์ค˜"์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ์š”์ฒญ๋„ AI๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ .
  • ๋ณตํ•ฉ์ ์ธ ์ž‘์—…์˜ '์ง€๋Šฅ์ ์ธ' ์ฒ˜๋ฆฌ: ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๋ณต์žกํ•˜๊ณ  ๊ท€์ฐฎ์€ ์ž‘์—…(์˜ˆ: ํ•ญ๊ณต๊ถŒ ๊ฒ€์ƒ‰ ํ›„ ๋ฐ”๋กœ ์˜ˆ์•ฝ, ์ƒํ’ˆ ์žฌ๊ณ  ํ™•์ธ ํ›„ ์ž๋™ ์ฃผ๋ฌธ)์„ AI๊ฐ€ ์ฃผ๋„์ ์ด๊ณ  ์ง€๋Šฅ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ์ด ๊ธฐ๋Šฅ์€ ์‹ค์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์Šค๋งˆํŠธ ์ฑ—๋ด‡, ์™ธ๋ถ€ ์‹œ์Šคํ…œ์„ ๋Šฅ์ˆ™ํ•˜๊ฒŒ ์ œ์–ดํ•˜๋Š” AI ์—์ด์ „ํŠธ, ๋˜๋Š” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ˜์‹ ์ ์œผ๋กœ ์ž๋™ํ™”ํ•˜๋ ค๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•„์ˆ˜์ ์ธ ๊ฐ•๋ ฅํ•œ ๋ฌด๊ธฐ๊ฐ€ ๋  ๊ฒ๋‹ˆ๋‹ค.

Gemini API ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ตฌํ˜„ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ

์ด์ œ Python SDK๋ฅผ ํ™œ์šฉํ•˜์—ฌ Gemini API ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์„ ์—ฌ๋Ÿฌ๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ฐ€์ด๋“œ์—์„œ๋Š” Google Generative AI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(google-generativeai)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: ํ˜ธ์ถœํ•  ํ•จ์ˆ˜ ์ •์˜ (Tool Definition)

๊ฐ€์žฅ ๋จผ์ €, AI ๋ชจ๋ธ์ด '์ดํ•ดํ•˜๊ณ ' ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šคํ‚ค๋งˆ๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„, ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์„ค๋ช…, ๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ถœ์— ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์ด ์ƒ์„ธํ•œ ์„ค๋ช…์„ ๋ฐ”ํƒ•์œผ๋กœ ํŠน์ • ์ƒํ™ฉ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ถœํ• ์ง€ ์ •๊ตํ•˜๊ฒŒ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ˜„์žฌ ๋‚ ์”จ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” get_current_weather ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

import google.generativeai as glm

# ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
def get_current_weather(location: str, unit: str = "celsius") -> str:
    """
    ์ง€์ •๋œ ์œ„์น˜์˜ ํ˜„์žฌ ๋‚ ์”จ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    Args:
        location: ๋‚ ์”จ๋ฅผ ์•Œ๊ณ  ์‹ถ์€ ๋„์‹œ ๋˜๋Š” ์ง€์—ญ ์ด๋ฆ„. (์˜ˆ: "์„œ์šธ", "๋„์ฟ„")
        unit: ์˜จ๋„์˜ ๋‹จ์œ„. "celsius" (์„ญ์”จ) ๋˜๋Š” "fahrenheit" (ํ™”์”จ) ์ค‘ ํ•˜๋‚˜. ๊ธฐ๋ณธ๊ฐ’์€ "celsius".
    Returns:
        ํ˜„์žฌ ๋‚ ์”จ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด.
    """
    if location == "์„œ์šธ":
        if unit == "celsius":
            return "์„œ์šธ์˜ ํ˜„์žฌ ๋‚ ์”จ๋Š” ๋ง‘๊ณ  ๊ธฐ์˜จ์€ 25๋„(์„ญ์”จ)์ž…๋‹ˆ๋‹ค."
        else:
            return "์„œ์šธ์˜ ํ˜„์žฌ ๋‚ ์”จ๋Š” ๋ง‘๊ณ  ๊ธฐ์˜จ์€ 77๋„(ํ™”์”จ)์ž…๋‹ˆ๋‹ค."
    elif location == "๋ถ€์‚ฐ":
        return "๋ถ€์‚ฐ์€ ํ๋ฆฌ๊ณ  ๋น„๊ฐ€ ์˜ค๋ฉฐ ๊ธฐ์˜จ์€ 20๋„(์„ญ์”จ)์ž…๋‹ˆ๋‹ค."
    else:
        return "ํ•ด๋‹น ์ง€์—ญ์˜ ๋‚ ์”จ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."

# ๋ชจ๋ธ์— ์ „๋‹ฌํ•  ํ•จ์ˆ˜ ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
weather_tool = glm.Tool(
    function_declarations=[
        glm.FunctionDeclaration(
            name="get_current_weather",
            description="์ง€์ •๋œ ์œ„์น˜์˜ ํ˜„์žฌ ๋‚ ์”จ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.",
            parameters=glm.Schema(
                type=glm.Type.OBJECT,
                properties={
                    "location": glm.Schema(type=glm.Type.STRING, description="๋‚ ์”จ๋ฅผ ์•Œ๊ณ  ์‹ถ์€ ๋„์‹œ ๋˜๋Š” ์ง€์—ญ ์ด๋ฆ„"),
                    "unit": glm.Schema(type=glm.Type.STRING, description="์˜จ๋„์˜ ๋‹จ์œ„: 'celsius' ๋˜๋Š” 'fahrenheit'", enum=["celsius", "fahrenheit"]),
                },
                required=["location"],
            ),
        )
    ]
)

์ด weather_tool ๊ฐ์ฒด๋Š” get_current_weather ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋ชจ๋ธ์˜ ์ดํ•ด๋ฅผ ๋•๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: Gemini ๋ชจ๋ธ์— ํ•จ์ˆ˜ ๋“ฑ๋ก ๋ฐ ๋Œ€ํ™” ์‹œ์ž‘

์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ ํˆด ์Šคํ‚ค๋งˆ๋ฅผ Gemini ๋ชจ๋ธ์— ์ „๋‹ฌํ•˜๊ณ , ๋Œ€ํ™”๋ฅผ ์‹œ์ž‘ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์ด ํˆด ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ€ํ™”์˜ ํ๋ฆ„ ์†์—์„œ ์–ธ์ œ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ• ์ง€ ์Šค์Šค๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

import os
# API ํ‚ค ์„ค์ • (์‹ค์ œ ํ™˜๊ฒฝ์—์„œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ถŒ์žฅ)
# os.environ["GOOGLE_API_KEY"] = "YOUR_API_KEY"
glm.configure(api_key=os.environ["GOOGLE_API_KEY"])

# Gemini ๋ชจ๋ธ ์ดˆ๊ธฐํ™” ๋ฐ ํ•จ์ˆ˜(tool) ๋“ฑ๋ก
model = glm.GenerativeModel('gemini-pro', tools=[weather_tool])
chat = model.start_chat()
ํŒ

ํ•จ์ˆ˜ ์„ค๋ช…(description)๊ณผ ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค๋ช…(description)์„ ์ตœ๋Œ€ํ•œ ๋ช…ํ™•ํ•˜๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ํ•จ์ˆ˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ˜ธ์ถœํ•  ํ™•๋ฅ ์ด ๋น„์•ฝ์ ์œผ๋กœ ๋†’์•„์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€, ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋ฉฐ ์–ด๋–ค ๊ฐ’์„ ๊ธฐ๋Œ€ํ•˜๋Š”์ง€ ์ƒ์„ธํ•˜๊ฒŒ ์ž‘์„ฑํ• ์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค.

3๋‹จ๊ณ„: ๋ชจ๋ธ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ œ์•ˆ ์ฒ˜๋ฆฌ

์‚ฌ์šฉ์ž๊ฐ€ ์งˆ๋ฌธ์„ ๋˜์ง€๊ณ  ๋ชจ๋ธ์ด ์‘๋‹ตํ•  ์ฐจ๋ก€๊ฐ€ ๋˜๋ฉด, ๋ชจ๋ธ์€ ๋‹จ์ˆœํžˆ ํ…์ŠคํŠธ ์‘๋‹ต์„ ๋‚ด๋†“๋Š” ๋Œ€์‹ , ์ƒํ™ฉ์— ๋งž๋Š” 'ํ•จ์ˆ˜ ํ˜ธ์ถœ'์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋ธ์˜ ์‘๋‹ต์„ ์„ธ์‹ฌํ•˜๊ฒŒ ํ™•์ธํ•˜์—ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ํ˜ธ์ถœ ์ •๋ณด๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ถ”์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

user_question = "์„œ์šธ ๋‚ ์”จ ์–ด๋•Œ?"
response = chat.send_message(user_question)

# ๋ชจ๋ธ์˜ ์‘๋‹ต ํ™•์ธ
if response.candidates[0].content.parts[0].function_call:
    function_call = response.candidates[0].content.parts[0].function_call
    function_name = function_call.name
    function_args = function_call.args
    print(f"๋ชจ๋ธ์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค: {function_name} with args {function_args}")
    # ์˜ˆ์‹œ ์ถœ๋ ฅ: ๋ชจ๋ธ์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค: get_current_weather with args {'location': '์„œ์šธ'}
elif response.text:
    print(f"๋ชจ๋ธ์˜ ์‘๋‹ต: {response.text}")
else:
    # ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋˜๋Š” ์ถ”๊ฐ€ ๋กœ๊น… (์˜ˆ: ํ›„๋ณด ์‘๋‹ต์ด ์—†๋Š” ๊ฒฝ์šฐ)
    print("๋ชจ๋ธ ์‘๋‹ต์— ํ…์ŠคํŠธ๋‚˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์—†์Šต๋‹ˆ๋‹ค.")

4๋‹จ๊ณ„: ์‹ค์ œ ํ•จ์ˆ˜ ์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

๋ชจ๋ธ์ด ์ œ์•ˆํ•œ ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ์ธ์ž๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์ œ Python ํ•จ์ˆ˜(์˜ˆ: get_current_weather ๋“ฑ)๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์‹คํ–‰์„ ํ†ตํ•ด ์–ป์€ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ชจ๋ธ์— ์ „๋‹ฌํ•˜์—ฌ ๋Œ€ํ™”์˜ ๋งฅ๋ฝ์„ ๋งค๋„๋Ÿฝ๊ฒŒ ์ด์–ด๊ฐ€๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

if function_name == "get_current_weather":
    # ์‹ค์ œ get_current_weather ํ•จ์ˆ˜ ์‹คํ–‰
    weather_info = get_current_weather(**function_args)
    print(f"ํ•จ์ˆ˜ ์‹คํ–‰ ๊ฒฐ๊ณผ: {weather_info}")

    # ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ธ์— ๋‹ค์‹œ ์ „๋‹ฌ
    response = chat.send_message(
        glm.ToolOutput(
            tool_code=[
                glm.ToolCode(
                    name=function_name,
                    result=weather_info
                )
            ]
        )
    )
    # ์˜ˆ์‹œ ์ถœ๋ ฅ: ํ•จ์ˆ˜ ์‹คํ–‰ ๊ฒฐ๊ณผ: ์„œ์šธ์˜ ํ˜„์žฌ ๋‚ ์”จ๋Š” ๋ง‘๊ณ  ๊ธฐ์˜จ์€ 25๋„(์„ญ์”จ)์ž…๋‹ˆ๋‹ค.
์ฃผ์˜

์™ธ๋ถ€ API ํ˜ธ์ถœ ์‹œ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์ด๋‚˜ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ํ•ญ์ƒ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ try-except ๋ธ”๋ก์„ ํ™œ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ํ•จ์ˆ˜ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ๊ฒฌ๊ณ ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฏผ๊ฐํ•œ API ํ‚ค ๊ด€๋ฆฌ ๋“ฑ ๋ณด์•ˆ ์ธก๋ฉด์—๋„ ๊ฐ๋ณ„ํžˆ ์‹ ๊ฒฝ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5๋‹จ๊ณ„: ๋ชจ๋ธ์˜ ์ตœ์ข… ๋‹ต๋ณ€ ๋ฐ›๊ธฐ

ํ•จ์ˆ˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ผ๋Š” ํ•ต์‹ฌ ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ๋ชจ๋ธ์€ ์ด์ œ ์ด ๋ชจ๋“  ๋งฅ๋ฝ์„ ์ข…ํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ์™„๋ฒฝํ•œ ์ตœ์ข… ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# ์ตœ์ข… ์‘๋‹ต ์ถœ๋ ฅ
print(f"๋ชจ๋ธ์˜ ์ตœ์ข… ์‘๋‹ต: {chat.last.text}")
# ์˜ˆ์‹œ ์ถœ๋ ฅ: ๋ชจ๋ธ์˜ ์ตœ์ข… ์‘๋‹ต: ์„œ์šธ์˜ ํ˜„์žฌ ๋‚ ์”จ๋Š” ๋ง‘๊ณ  ๊ธฐ์˜จ์€ 25๋„(์„ญ์”จ)์ž…๋‹ˆ๋‹ค.

Gemini Function Calling์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„๋ณ„ ์ ˆ์ฐจ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ. ๋ชจ๋ธ ์ •์˜, ํ•จ์ˆ˜ ์Šคํ‚ค๋งˆ ๋“ฑ๋ก, ๋ชจ๋ธ์˜ ํ˜ธ์ถœ ์ œ์•ˆ ์ฒ˜๋ฆฌ, ์‹ค์ œ ํ•จ์ˆ˜ ์‹คํ–‰, ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ๋ฐ ์ตœ์ข… ์‘๋‹ต ์ƒ์„ฑ ์ˆœ์„œ

์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ์‹œ๋‚˜๋ฆฌ์˜ค ์˜ˆ์ œ: ์ฃผ์‹ ์ •๋ณด ์กฐํšŒ ์ฑ—๋ด‡

์ด์ œ ์œ„์—์„œ ๋ฐฐ์šด ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐ€์ •ํ•œ '์ฃผ์‹ ์ •๋ณด ์กฐํšŒ ์ฑ—๋ด‡'์„ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ƒ์˜ get_stock_price ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ฃผ์‹ ์ข…๋ชฉ์˜ ํ˜„์žฌ ๊ฐ€๊ฒฉ์„ ์กฐํšŒํ•˜๋Š” ์‹ค์šฉ์ ์ธ ์ƒํ™ฉ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ฃ .

import google.generativeai as glm
import os

glm.configure(api_key=os.environ["GOOGLE_API_KEY"])

# 1. ํ˜ธ์ถœํ•  ํ•จ์ˆ˜ ์ •์˜
def get_stock_price(symbol: str) -> float:
    """
    ์ง€์ •๋œ ์ฃผ์‹ ์ข…๋ชฉ์˜ ํ˜„์žฌ ๊ฐ€๊ฒฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    Args:
        symbol: ์ฃผ์‹ ์ข…๋ชฉ ์ฝ”๋“œ ๋˜๋Š” ์ด๋ฆ„. (์˜ˆ: "AAPL", "์‚ผ์„ฑ์ „์ž")
    Returns:
        ํ˜„์žฌ ์ฃผ์‹ ๊ฐ€๊ฒฉ (์‹ค์ œ๋กœ๋Š” ์™ธ๋ถ€ API์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•จ).
    """
    stock_prices = {
        "์‚ผ์„ฑ์ „์ž": 85000,
        "SKํ•˜์ด๋‹‰์Šค": 170000,
        "LG์ „์ž": 95000,
        "AAPL": 175.50,
        "GOOG": 150.20
    }
    return stock_prices.get(symbol, -1) # -1์€ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ

# ๋ชจ๋ธ์— ์ „๋‹ฌํ•  ํ•จ์ˆ˜ ์Šคํ‚ค๋งˆ ์ •์˜
stock_tool = glm.Tool(
    function_declarations=[
        glm.FunctionDeclaration(
            name="get_stock_price",
            description="์ง€์ •๋œ ์ฃผ์‹ ์ข…๋ชฉ์˜ ํ˜„์žฌ ๊ฐ€๊ฒฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.",
            parameters=glm.Schema(
                type=glm.Type.OBJECT,
                properties={
                    "symbol": glm.Schema(type=glm.Type.STRING, description="์ฃผ์‹ ์ข…๋ชฉ ์ฝ”๋“œ ๋˜๋Š” ์ด๋ฆ„"),
                },
                required=["symbol"],
            ),
        )
    ]
)

# 2. Gemini ๋ชจ๋ธ์— ํ•จ์ˆ˜ ๋“ฑ๋ก ๋ฐ ๋Œ€ํ™” ์‹œ์ž‘
model = glm.GenerativeModel('gemini-pro', tools=[stock_tool])
chat = model.start_chat()

# ์‚ฌ์šฉ์ž ์งˆ๋ฌธ
user_question_1 = "์‚ผ์„ฑ์ „์ž ์ฃผ๊ฐ€ ์•Œ๋ ค์ค˜."
print(f"์‚ฌ์šฉ์ž: {user_question_1}")

# 3. ๋ชจ๋ธ์˜ ์‘๋‹ต ํ™•์ธ (ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ œ์•ˆ)
response_1 = chat.send_message(user_question_1)

if response_1.candidates[0].content.parts[0].function_call:
    function_call = response_1.candidates[0].content.parts[0].function_call
    function_name = function_call.name
    function_args = function_call.args
    print(f"๋ชจ๋ธ (ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ œ์•ˆ): {function_name} with args {function_args}")

    # 4. ์‹ค์ œ ํ•จ์ˆ˜ ์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
    if function_name == "get_stock_price":
        stock_price = get_stock_price(**function_args)
        print(f"ํ•จ์ˆ˜ ์‹คํ–‰ ๊ฒฐ๊ณผ: {stock_price}")

        response_2 = chat.send_message(
            glm.ToolOutput(
                tool_code=[
                    glm.ToolCode(
                        name=function_name,
                        result=stock_price
                    )
                ]
            )
        )
        # 5. ๋ชจ๋ธ์˜ ์ตœ์ข… ๋‹ต๋ณ€ ๋ฐ›๊ธฐ
        print(f"AI ์ฑ—๋ด‡: {chat.last.text}")
        # ์˜ˆ์ƒ ์ถœ๋ ฅ: AI ์ฑ—๋ด‡: ์‚ผ์„ฑ์ „์ž ์ฃผ์‹์€ ํ˜„์žฌ 85000์›์ž…๋‹ˆ๋‹ค.
    else:
        print(f"AI ์ฑ—๋ด‡: ์•Œ ์ˆ˜ ์—†๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค: {function_name}")
else:
    print(f"AI ์ฑ—๋ด‡: {response_1.text}")

print("\n----------------------------------\n")

# ๋‹ค๋ฅธ ์งˆ๋ฌธ ์˜ˆ์‹œ (ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ํ•„์š” ์—†๋Š” ๊ฒฝ์šฐ)
user_question_2 = "์˜ค๋Š˜ ๋‚ ์”จ๋Š” ์–ด๋•Œ?"
print(f"์‚ฌ์šฉ์ž: {user_question_2}")
response_3 = chat.send_message(user_question_2)
if response_3.candidates[0].content.parts[0].function_call:
    print(f"๋ชจ๋ธ (ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ œ์•ˆ): {response_3.candidates[0].content.parts[0].function_call.name}")
else:
    print(f"AI ์ฑ—๋ด‡: {response_3.text}")
    # ์˜ˆ์ƒ ์ถœ๋ ฅ: AI ์ฑ—๋ด‡: ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํ˜„์žฌ ๋‚ ์”จ ์ •๋ณด๋ฅผ ์ง์ ‘ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ด ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๊ธฐ๋Šฅ์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ฐ„๋žตํ™”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” API ํ‚ค ๋ณด์•ˆ ๊ด€๋ฆฌ, ์ƒ์„ธํ•œ ์—๋Ÿฌ ๋กœ๊น…, ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋“ฑ ํ›จ์”ฌ ๋” ๋งŽ์€ ์ถ”๊ฐ€ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€์˜ ์—ฐ๋™์€ ๋ฐ˜๋“œ์‹œ ์‹ค์ œ API ํ˜ธ์ถœ ๋กœ์ง์œผ๋กœ ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์‹ ์ •๋ณด ์กฐํšŒ๋ฅผ ์œ„ํ•ด Gemini Function Calling์ด ์‚ฌ์šฉ๋˜๋Š” ์ฑ—๋ด‡์˜ ์ธํ„ฐํŽ˜์ด์Šค ์˜ˆ์‹œ. ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์‹ ์ข…๋ชฉ์„ ์งˆ๋ฌธํ•˜๊ณ  AI๊ฐ€ ์™ธ๋ถ€ API๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ๋‹ต๋ณ€ํ•˜๋Š” ๋Œ€ํ™” ํ๋ฆ„

Gemini Function Calling์˜ ํ•œ๊ณ„ ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

Gemini API์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ๋ถ„๋ช… ๊ฐ•๋ ฅํ•˜๊ณ  ํ˜์‹ ์ ์ธ ๊ธฐ๋Šฅ์ด์ง€๋งŒ, ์™„๋ฒฝํžˆ ํ™œ์šฉํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ์ดํ•ดํ•˜๊ณ  ๋Œ€๋น„ํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ํ•œ๊ณ„์ ๊ณผ ์ฃผ์˜์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • 'ํ™˜๊ฐ (Hallucination)' ๊ฐ€๋Šฅ์„ฑ: ๋ชจ๋ธ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ '์ƒˆ๋กœ ๋งŒ๋“ค์–ด๋‚ด์–ด' ์ œ์•ˆํ•˜๊ฑฐ๋‚˜, ์‹ค์ œ ์ •์˜๋œ ํ•จ์ˆ˜์™€ ์ „ํ˜€ ๋งž์ง€ ์•Š๋Š” ์ž˜๋ชป๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ์ธ์ž๋ฅผ ๋„˜๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ 'ํ™˜๊ฐ' ํ˜„์ƒ์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด, ํ•จ์ˆ˜ ์Šคํ‚ค๋งˆ์˜ ์„ค๋ช…(description)์„ ์ตœ๋Œ€ํ•œ ๋ช…ํ™•ํ•˜๊ณ  ์ƒ์„ธํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ , ๋ชจ๋ธ์˜ ํ˜ธ์ถœ ์ œ์•ˆ์— ๋Œ€ํ•œ ์ฒ ์ €ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, AI ์ฑ—๋ด‡์˜ ๋น„์ •์ƒ์ ์ธ ๋‹ต๋ณ€(ํ™˜๊ฐ) ์ค„์ด๊ธฐ ๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์น˜๋ช…์ ์ธ ๋ณด์•ˆ ๋ฌธ์ œ: ์™ธ๋ถ€ ํ•จ์ˆ˜๋Š” ๋ฏผ๊ฐํ•œ ์ •๋ณด์— ์ง์ ‘ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด ์‹œ์Šคํ…œ์„ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ชจ๋ธ์ด ์ œ์•ˆํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์—, ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ ์ ˆ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ํšŒ์‚ฌ์˜ ์—„๊ฒฉํ•œ ๋ณด์•ˆ ์ •์ฑ… ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ, ๊ทธ๋ฆฌ๊ณ  ์ฒ ์ €ํžˆ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋„ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ์™„๋ฒฝํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๋ณธ์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋น„์šฉ ์ฆ๊ฐ€: ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ AI ๋ชจ๋ธ์— ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„๋ฅผ ์š”๊ตฌํ•˜๋ฉฐ, ์ด ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ send_message๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜์–ด ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์™ธ๋ถ€ API ํ˜ธ์ถœ ์ž์ฒด์—๋„ ๋น„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋น„์šฉ ํญํƒ„์„ ํ”ผํ•˜๋ ค๋ฉด ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๋น„์šฉ์„ ๋ฉด๋ฐ€ํžˆ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ๊ฐ€ํ•˜๋Š” ๊ตฌํ˜„ ๋ณต์žก์„ฑ: ๋‹จ์ˆœํ•œ ๋Œ€ํ™”ํ˜• AI๋ฅผ ๋„˜์–ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•„์—ฐ์ ์œผ๋กœ ๊ตฌํ˜„ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์˜ ์‘๋‹ต์„ ์ •๊ตํ•˜๊ฒŒ ํŒŒ์‹ฑํ•˜๊ณ , ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ชจ๋ธ์— ๋งค๋„๋Ÿฝ๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์ „์ฒด ํ๋ฆ„์„ ๊ฒฌ๊ณ ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์™€ ๋””๋ฒ„๊น… ๋˜ํ•œ ํ›จ์”ฌ ๋” ๊นŒ๋‹ค๋กœ์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฏผํ•œ ์‘๋‹ต ์†๋„ ์ €ํ•˜: ์™ธ๋ถ€ ํ•จ์ˆ˜(ํŠนํžˆ ์™ธ๋ถ€ API) ํ˜ธ์ถœ์€ ํ•„์—ฐ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์ด๋‚˜ ์™ธ๋ถ€ ์„œ๋น„์Šค์˜ ์‘๋‹ต ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ฑ—๋ด‡์˜ ์ „์ฒด ์‘๋‹ต ์†๋„๋ฅผ ๋ˆˆ์— ๋„๊ฒŒ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์พŒ์ ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•ด ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์บ์‹ฑ ์ „๋žต์ด๋‚˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์ ๊ทน์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

Gemini API์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์€ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ€๋Šฅ์„ฑ์„ ๋ฌดํ•œํžˆ ๋„“ํ˜€์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด์ง€๋งŒ, ์œ„์—์„œ ์–ธ๊ธ‰๋œ ํ•œ๊ณ„์ ๊ณผ ์ฃผ์˜์‚ฌํ•ญ๋“ค์„ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•˜๊ณ  ์ฒ ์ €ํžˆ ๋Œ€๋น„ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡๋ณด๋‹ค ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ณด์•ˆ๊ณผ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ์žˆ์–ด์„œ๋Š” ๊ทธ ์–ด๋–ค ํƒ€ํ˜‘ ์—†์ด ๊ฐ๋ณ„ํžˆ ์‹ ๊ฒฝ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๊ฒฐ๋ก ์ ์œผ๋กœ, Gemini API์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ(Function Calling) ๊ธฐ๋Šฅ์€ AI ๋ชจ๋ธ์ด ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๋™ํ•˜๋ฉฐ ๊ธฐ๋Šฅ์„ ํ˜์‹ ์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ํ•ต์‹ฌ ๋„๊ตฌ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ๋Šฅ์ˆ™ํ•˜๊ฒŒ ํ™œ์šฉํ•˜๋ฉด ์ฑ—๋ด‡์ด ์‹ค์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ •ํ™•ํžˆ ์กฐํšŒํ•˜๊ณ , ์™ธ๋ถ€ ์„œ๋น„์Šค๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ œ์–ดํ•˜๋ฉฐ, ์‹ฌ์ง€์–ด ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๊นŒ์ง€ ์ง€๋Šฅ์ ์œผ๋กœ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์„ค์ •๊ณผ ๊ตฌํ˜„์— ๋ฉด๋ฐ€ํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์˜ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ธฐ์กด์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ๋ฌด๊ถ๋ฌด์ง„ํ•œ ํ™œ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


ํ•จ๊ป˜ ๋ณด๋ฉด ์ข‹์€ ๊ธ€


์ง€๊ธˆ ๋ฐ”๋กœ Gemini API์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ณ , ์—ฌ๋Ÿฌ๋ถ„์˜ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๊ณผ๊ฐํžˆ ๋ฐœ์ „์‹œ์ผœ ๋ณด์„ธ์š”! ์ด ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ AI์˜ ์ƒˆ๋กœ์šด ์ง€ํ‰์„ ์—ด์–ด๊ฐ€์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

โ“ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ (FAQ)

์™ธ๋ถ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹คํŒจ ์‹œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋‚˜์š”?

๊ฐœ๋ฐœ์ž๋Š” ๋ชจ๋ธ์ด ์ œ์•ˆํ•œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜, API ์‘๋‹ต ์˜ค๋ฅ˜ ๋“ฑ์„ ๋Œ€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฅผ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋ชจ๋ธ์— ์‹คํŒจ ๋˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์‹œ ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒํ™ฉ์„ ์•Œ๋ฆฌ๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋Œ€์•ˆ์„ ์ œ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์žฌ์‹œ๋„ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค๋ฅธ ์งˆ๋ฌธ์„ ์œ ๋„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ณด์•ˆ ์‚ฌํ•ญ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ชจ๋ธ์ด ์ œ์•ˆํ•œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „, ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜์—ฌ ์•…์˜์ ์ธ ์ž…๋ ฅ์„ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์™ธ๋ถ€ API ํ‚ค๋‚˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ , ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์ ‘๊ทผํ•˜๋Š” ์™ธ๋ถ€ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ•œ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ์—ฌ๋Ÿฌ ํ•จ์ˆ˜์™€ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜, ์–ด๋–ค ํ•จ์ˆ˜์™€๋„ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

Gemini ๋ชจ๋ธ์€ ์ œ๊ณต๋œ ํ•จ์ˆ˜ ์Šคํ‚ค๋งˆ์™€ ๋Œ€ํ™” ๋งฅ๋ฝ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ œ์•ˆํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์œ ์‚ฌํ•˜๊ฒŒ ์ ํ•ฉํ•˜๋‹ค๋ฉด ๋ชจ๋ธ์˜ ๋‚ด๋ถ€ ์ถ”๋ก ์— ๋”ฐ๋ผ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ํ•จ์ˆ˜์™€๋„ ๋ช…ํ™•ํžˆ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋ธ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ œ์•ˆํ•˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜์ ์ธ ํ…์ŠคํŠธ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ์งˆ๋ฌธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‘๋‹ต ์‹œ๊ฐ„์— ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋„ค, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์€ ๋ชจ๋ธ์ด ํ•จ์ˆ˜๋ฅผ ์ œ์•ˆํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•œ ํ›„ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ชจ๋ธ์— ์ „๋‹ฌํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ํ…์ŠคํŠธ ์ƒ์„ฑ๋ณด๋‹ค ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ API์˜ ์‘๋‹ต ์†๋„, ๋„คํŠธ์›Œํฌ ์ง€์—ฐ, ํ•จ์ˆ˜ ์‹คํ–‰ ๋กœ์ง์˜ ๋ณต์žก์„ฑ ๋“ฑ์ด ์ „์ฒด ์‘๋‹ต ์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ํšจ์œจ์ ์ธ ํ•จ์ˆ˜ ์„ค๊ณ„์™€ ๋น ๋ฅธ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Gemini Function Calling ์‚ฌ์šฉ ์‹œ ๋ณ„๋„์˜ ์š”๊ธˆ ์ •์ฑ…์ด ์ ์šฉ๋˜๋‚˜์š”?

Gemini API์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ž์ฒด์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์ถ”๊ฐ€ ์š”๊ธˆ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋ธ์˜ ์ž…๋ ฅ(ํ”„๋กฌํ”„ํŠธ, ํ•จ์ˆ˜ ์Šคํ‚ค๋งˆ) ๋ฐ ์ถœ๋ ฅ(ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ œ์•ˆ, ์ตœ์ข… ์‘๋‹ต) ํ† ํฐ์— ๋Œ€ํ•ด Gemini ๋ชจ๋ธ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ฅธ ํ‘œ์ค€ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ˜ธ์ถœ๋˜๋Š” ์™ธ๋ถ€ API๋‚˜ ์„œ๋น„์Šค์— ๋”ฐ๋ผ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์š”๊ธˆ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์˜ํ•œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์„ ๋ชจ๋ธ์ด ์ž˜๋ชป ์ดํ•ดํ•˜๊ฑฐ๋‚˜, ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ์ œ์•ˆํ•  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ๋‚˜์š”?

๋ชจ๋ธ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•œ JSON ์Šคํ‚ค๋งˆ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•จ์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ์ƒ์„ธํ• ์ˆ˜๋ก ๋ชจ๋ธ์˜ ์ดํ•ด๋„๊ฐ€ ๋†’์•„์ง€์ง€๋งŒ, ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๋ชจํ˜ธํ•œ ์„ค๋ช…์˜ ๊ฒฝ์šฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž˜๋ชป ํ•ด์„ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ์ œ์•ˆํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ์ง€๋งŒ, ๋“œ๋ฌผ๊ฒŒ ๋ชจ๋ธ์˜ ์ถ”๋ก  ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ •์˜๋˜์ง€ ์•Š์€ ํ•จ์ˆ˜๋ช…์„ ์ œ์•ˆํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…ํ™•ํ•˜๊ณ  ๊ตฌ์ฒด์ ์ธ ํ•จ์ˆ˜ ์„ค๋ช…์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“š ํ•จ๊ป˜ ์ฝ์œผ๋ฉด ์ข‹์€ ๊ธ€ (Related Posts)

AI ์‚ฌ์šฉ๋ฒ• ๊ฐ€์ด๋“œ ๋” ๋ณด๊ธฐ โ†’
Gemini API ์—ฐ๊ฒฐ ์˜ค๋ฅ˜? ๐Ÿ˜ฅ 2024๋…„ ์ตœ์‹  ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ (Python)
ai-guide2026-03-21

Gemini API ์—ฐ๊ฒฐ ์˜ค๋ฅ˜? ๐Ÿ˜ฅ 2024๋…„ ์ตœ์‹  ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ (Python)

Gemini API ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(403, ์ธ์ฆ ์‹คํŒจ) ๋ฐœ์ƒ ์‹œ, API ํ‚ค, ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ๊ถŒํ•œ ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๊ธ€ AI ์ŠคํŠœ๋””์˜ค: ๐Ÿš€ 5๋ถ„ ๋งŒ์— Gemini ํ”„๋กฌํ”„ํŠธ '์ˆ˜์ตํ™”' ์™„๋ฒฝ ๋งˆ์Šคํ„ฐ (2026 ์ตœ์‹  0์› ์‹ค์ „ ๊ฐ€์ด๋“œ)
ai-guide2026-03-20

๊ตฌ๊ธ€ AI ์ŠคํŠœ๋””์˜ค: ๐Ÿš€ 5๋ถ„ ๋งŒ์— Gemini ํ”„๋กฌํ”„ํŠธ '์ˆ˜์ตํ™”' ์™„๋ฒฝ ๋งˆ์Šคํ„ฐ (2026 ์ตœ์‹  0์› ์‹ค์ „ ๊ฐ€์ด๋“œ)

๊ตฌ๊ธ€ AI ์ŠคํŠœ๋””์˜ค Gemini Pro ๋ชจ๋ธ์— ์ตœ์ ํ™”๋œ ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ์˜ ๊ธฐ๋ณธ ์›์น™๊ณผ ์—ญํ•  ๋ถ€์—ฌ, ์˜ˆ์‹œ ์ œ๊ณต ๋“ฑ ๋‹จ๊ณ„๋ณ„ ์ƒ์„ธ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ณต AI ์—…๋ฌด, ์ด์   ์นผํ‡ด! ๐Ÿš€ n8n ChatGPT ์—ฐ๋™ 2026๋…„ ์ตœ์‹  ์™„๋ฒฝ ๊ฐ€์ด๋“œ (๋…ธ์ฝ”๋“œ ์ž๋™ํ™” & ์ˆ˜์ตํ™” ์‹ค์ „ ๋…ธํ•˜์šฐ)
ai-automation2026-03-21

๋ฐ˜๋ณต AI ์—…๋ฌด, ์ด์   ์นผํ‡ด! ๐Ÿš€ n8n ChatGPT ์—ฐ๋™ 2026๋…„ ์ตœ์‹  ์™„๋ฒฝ ๊ฐ€์ด๋“œ (๋…ธ์ฝ”๋“œ ์ž๋™ํ™” & ์ˆ˜์ตํ™” ์‹ค์ „ ๋…ธํ•˜์šฐ)

์ฝ”๋”ฉ ์—†์ด n8n๊ณผ ChatGPT ์—ฐ๋™์œผ๋กœ AI ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. API ํ‚ค ๋ฐœ๊ธ‰๋ถ€ํ„ฐ ์„ค์ •๊นŒ์ง€ ๋ฐ˜๋ณต AI ์ž‘์—… ํšจ์œจ์„ ๋†’์ด๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค.

Zapier ChatGPT ์—ฐ๋™ ์˜ค๋ฅ˜? '๋ด‡ ๋จนํ†ต' ์™„๋ฒฝ ํ•ด๊ฒฐ! ๐Ÿค– 2026๋…„ ์ตœ์‹  ์‹ค์ „ ๋…ธํ•˜์šฐ (Feat. 0์› ๋น„์šฉ ์ ˆ๊ฐ)
ai-automation2026-03-21

Zapier ChatGPT ์—ฐ๋™ ์˜ค๋ฅ˜? '๋ด‡ ๋จนํ†ต' ์™„๋ฒฝ ํ•ด๊ฒฐ! ๐Ÿค– 2026๋…„ ์ตœ์‹  ์‹ค์ „ ๋…ธํ•˜์šฐ (Feat. 0์› ๋น„์šฉ ์ ˆ๊ฐ)

Zapier์™€ ChatGPT ์—ฐ๋™ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ด‡ ์‘๋‹ต ๋ฐ ์˜ค๋ฅ˜ ๋ฌธ์ œ๋ฅผ API ํ‚ค, ํ”„๋กฌํ”„ํŠธ, Zapier ์•ก์…˜ ์„ค์ • ๊ด€์ ์—์„œ ์ง„๋‹จํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.