Rescale ๋ฏธํŒ… ์˜ˆ์•ฝ

AgentOps๋ฅผ ํ†ตํ•œ ์ž์œจ ์—์ด์ „ํŠธ: AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๊ด€์ฐฐ์„ฑ, ์ถ”์ ์„ฑ ๋ฐ ๊ทธ ์ด์ƒ

์ธ๊ณต์ง€๋Šฅ

AgentOps๋ฅผ ํ†ตํ•œ ์ž์œจ ์—์ด์ „ํŠธ: AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๊ด€์ฐฐ์„ฑ, ์ถ”์ ์„ฑ ๋ฐ ๊ทธ ์ด์ƒ

mm
AgentOps: ์ž์œจ ์—์ด์ „ํŠธ์— ๋Œ€ํ•œ ๊ด€์ฐฐ์„ฑ ๋ฐ ์ถ”์ ์„ฑ ํ™œ์„ฑํ™”

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

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ๊ณผ ๋ณต์žก์„ฑ์ด ์ปค์ง€๋ฉด์„œ ๊ด€์ฐฐ์„ฑ, ์•ˆ์ •์„ฑ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜ ์ธก๋ฉด์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์—ฌ๊ธฐ์„œ AgentOps๊ฐ€ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. AgentOps๋Š” DevOps์™€ MLOps๋ฅผ ๋ชจ๋ธ๋กœ ํ•œ ๊ฐœ๋…์ด์ง€๋งŒ FM ๊ธฐ๋ฐ˜ ์—์ด์ „ํŠธ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ๋งž์ถคํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

FM ๊ธฐ๋ฐ˜ ์ž์œจ ์—์ด์ „ํŠธ์— ๋Œ€ํ•œ ๊ด€์ฐฐ์„ฑ๊ณผ ์ถ”์ ์„ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” AgentOps์™€ ๊ทธ ์ค‘์š”ํ•œ ์—ญํ• ์— ๋Œ€ํ•œ ๊ธฐ์ดˆ์ ์ธ ์ดํ•ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ตœ๊ทผ ๋…ผ๋ฌธ์—์„œ ํ†ต์ฐฐ๋ ฅ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. Foundation Model ๊ธฐ๋ฐ˜ ์—์ด์ „ํŠธ์˜ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•œ AgentOps ๋ถ„๋ฅ˜ Liming Dong, Qinghua Lu, Liming Zhu๊ฐ€ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋…ผ๋ฌธ์€ AgentOps์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ํƒ๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ž์œจ ์—์ด์ „ํŠธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์žˆ์–ด AgentOps์˜ ํ•„์š”์„ฑ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ ๋ฐ ์‹คํ–‰์—์„œ ํ‰๊ฐ€ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง๊นŒ์ง€. ์ €์ž๋Š” ์ถ”์  ๊ฐ€๋Šฅํ•œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ณ , ๊ด€์ฐฐ ํ”Œ๋žซํผ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ œ์•ˆํ•˜๋ฉฐ, ์˜์‚ฌ ๊ฒฐ์ • ๋ณต์žก์„ฑ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜์™€ ๊ฐ™์€ ๊ณผ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

DaVinci์—๋Š” A์  ํŠธ์˜ต์Šค (๋„๊ตฌ)๋Š” AI ์—์ด์ „ํŠธ(์˜ˆ:)์˜ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋””๋ฒ„๊น… ๋ฐ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ฃผ์š” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๋กœ์„œ ์ƒ๋‹นํ•œ ์ฃผ๋ชฉ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ ์ƒ์„ฑ, ์Šน๋ฌด์› ai), ์ด ๊ธฐ์‚ฌ๋Š” AI ์šด์˜(Ops)์˜ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๊ฐœ๋…์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค.

์ฆ‰, AgentOps(๋„๊ตฌ)๋Š” ์„ธ์…˜ ๋ฆฌํ”Œ๋ ˆ์ด, LLM ๋น„์šฉ ์ถ”์ , ๊ทœ์ • ์ค€์ˆ˜ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AI์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” Ops ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๋กœ, ์ด ๊ธฐ์‚ฌ์˜ ํ›„๋ฐ˜๋ถ€์—์„œ๋Š” ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•ด ๊ทธ ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

AgentOps๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

AgentOps๋Š” ํ”„๋กœ๋•์…˜์—์„œ FM ๊ธฐ๋ฐ˜ ์ž์œจ ์—์ด์ „ํŠธ๋ฅผ ์„ค๊ณ„, ๋ฐฐํฌ, ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์—”๋“œํˆฌ์—”๋“œ ํ”„๋กœ์„ธ์Šค, ๋„๊ตฌ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

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

AgentOps๊ฐ€ ํ•ด๊ฒฐํ•˜๋Š” ์ฃผ์š” ๊ณผ์ œ

1. ๋ณต์žก์„ฑ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ

์ž์œจ ์—์ด์ „ํŠธ๋Š” ๊ด‘๋Œ€ํ•œ ์•ก์…˜ ๊ณต๊ฐ„์—์„œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋ชจ๋“  ๋‹จ๊ณ„์—์„œ ์˜์‚ฌ ๊ฒฐ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณต์žก์„ฑ์€ ์ •๊ตํ•œ ๊ณ„ํš ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

2. ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ

์˜๋ฃŒ ์ง„๋‹จ์ด๋‚˜ ๋ฒ•์  ๋ถ„์„๊ณผ ๊ฐ™์€ ๊ณ ์œ„ํ—˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์„ธ๋ถ€์ ์ธ ์ถ”์  ๊ฐ€๋Šฅ์„ฑ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. EU AI ๋ฒ•๊ณผ ๊ฐ™์€ ๊ทœ์ •์„ ์ค€์ˆ˜ํ•˜๋ฉด ๊ฒฌ๊ณ ํ•œ ๊ด€์ฐฐ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•„์š”์„ฑ์ด ๋”์šฑ ๊ฐ•์กฐ๋ฉ๋‹ˆ๋‹ค.

3. ๋””๋ฒ„๊น… ๋ฐ ์ตœ์ ํ™”

์—์ด์ „ํŠธ์˜ ์ž‘์—…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ถ”์  ์—†์ด๋Š” ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋œ ์ž‘์—… ํ๋ฆ„์—์„œ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•˜๊ฑฐ๋‚˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

4. ํ™•์žฅ์„ฑ ๋ฐ ๋น„์šฉ ๊ด€๋ฆฌ

ํ”„๋กœ๋•์…˜์„ ์œ„ํ•œ ํ™•์žฅ ์—์ด์ „ํŠธ์—์„œ๋Š” ํ’ˆ์งˆ์„ ๋–จ์–ด๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ๋„ ํšจ์œจ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ง€์—ฐ ์‹œ๊ฐ„, ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰, ์šด์˜ ๋น„์šฉ๊ณผ ๊ฐ™์€ ์ธก์ • ํ•ญ๋ชฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AgentOps ํ”Œ๋žซํผ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

1. ์—์ด์ „ํŠธ ์ƒ์„ฑ ๋ฐ ์‚ฌ์šฉ์ž ์ •์˜

๊ฐœ๋ฐœ์ž๋Š” ๊ตฌ์„ฑ ์š”์†Œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—ญํ•  : ์ฑ…์ž„(์˜ˆ: ์—ฐ๊ตฌ์ž, ๊ณ„ํš์ž)์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚œ๊ฐ„: ์œค๋ฆฌ์ ์ด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ–‰๋™์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ํˆดํ‚ท: API, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” ์ง€์‹ ๊ทธ๋ž˜ํ”„์™€์˜ ํ†ตํ•ฉ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ๋Š” ์‚ฌ์ „ ์ •์˜๋œ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜๋Š” ๋™์‹œ์— ํŠน์ • ๋ฐ์ดํ„ฐ ์„ธํŠธ, ๋„๊ตฌ ๋ฐ ํ”„๋กฌํ”„ํŠธ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋„๋ก ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค.

2. ๊ด€์ฐฐ์„ฑ๊ณผ ์ถ”์ 

AgentOps๋Š” ์ž์„ธํ•œ ์‹คํ–‰ ๋กœ๊ทธ๋ฅผ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.

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

Langfuse๋‚˜ Arize์™€ ๊ฐ™์€ ๊ด€์ฐฐ ๋„๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ์ถ”์  ๋‚ด์šฉ์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด๋‚˜ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

3. ์‹ ์†ํ•œ ๊ด€๋ฆฌ

์‹ ์†ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง์€ ์—์ด์ „ํŠธ ํ–‰๋™ ํ˜•์„ฑ์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฒ„์ „ ๊ด€๋ฆฌ: ์„ฑ๊ณผ ๋น„๊ต๋ฅผ ์œ„ํ•ด ํ”„๋กฌํ”„ํŠธ ๋ฐ˜๋ณต์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์ž… ๊ฐ์ง€: ํ”„๋กฌํ”„ํŠธ์—์„œ ์•…์„ฑ ์ฝ”๋“œ๋‚˜ ์ž…๋ ฅ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์ ํ™” : Chain-of-Thought(CoT)๋‚˜ Tree-of-Thought์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์€ ์ถ”๋ก  ๋Šฅ๋ ฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

4. ํ”ผ๋“œ๋ฐฑ ํ†ตํ•ฉ

๋ฐ˜๋ณต์ ์ธ ๊ฐœ์„ ์„ ์œ„ํ•ด์„œ๋Š” ์ธ๊ฐ„์˜ ํ”ผ๋“œ๋ฐฑ์ด ์—ฌ์ „ํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ช…์‹œ์  ํ”ผ๋“œ๋ฐฑ: ์‚ฌ์šฉ์ž๋Š” ๊ฒฐ๊ณผ๋ฌผ์„ ํ‰๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์˜๊ฒฌ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์•”๋ฌต์  ํ”ผ๋“œ๋ฐฑ: ์ž‘์—… ์‹œ๊ฐ„์ด๋‚˜ ํด๋ฆญ๋ฅ ๊ณผ ๊ฐ™์€ ์ธก์ • ํ•ญ๋ชฉ์„ ๋ถ„์„ํ•˜์—ฌ ํšจ๊ณผ๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋Š” ์—์ด์ „ํŠธ์˜ ์„ฑ๊ณผ์™€ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ํ‰๊ฐ€ ๋ฒค์น˜๋งˆํฌ๋ฅผ ๋ชจ๋‘ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

5. ํ‰๊ฐ€ ๋ฐ ํ…Œ์ŠคํŠธ

AgentOps ํ”Œ๋žซํผ์€ ๋‹ค์Œ ๋ถ„์•ผ์—์„œ ์—„๊ฒฉํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฒค์น˜ ๋งˆํฌ : ์—…๊ณ„ ํ‘œ์ค€๊ณผ ์—์ด์ „ํŠธ ์„ฑ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ๊ณ„๋ณ„ ํ‰๊ฐ€: ์ •ํ™•์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ถค์  ํ‰๊ฐ€: ์—์ด์ „ํŠธ๊ฐ€ ์ทจํ•œ ์˜์‚ฌ๊ฒฐ์ • ๊ฒฝ๋กœ๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

6. ๊ธฐ์–ต๊ณผ ์ง€์‹ ํ†ตํ•ฉ

์—์ด์ „ํŠธ๋Š” ๋งฅ๋ฝ(์˜ˆ: ๋Œ€ํ™” ๊ธฐ๋ก)์„ ์œ„ํ•ด ๋‹จ๊ธฐ ๊ธฐ์–ต์„ ํ™œ์šฉํ•˜๊ณ  ๊ณผ๊ฑฐ ์ž‘์—…์—์„œ ์–ป์€ ํ†ต์ฐฐ๋ ฅ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์žฅ๊ธฐ ๊ธฐ์–ต์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—์ด์ „ํŠธ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋™์ ์œผ๋กœ ์ ์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7. ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ง€ํ‘œ

ํฌ๊ด„์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ํŠธ๋ž™:

  • ๋Œ€๊ธฐ ์‹œ๊ฐ„ : ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์‘๋‹ต ์‹œ๊ฐ„์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ํ† ํฐ ์‚ฌ์šฉ๋ฒ•: ๋น„์šฉ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ์†Œ์Šค ์†Œ๋น„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
  • ํ’ˆ์งˆ ์ง€ํ‘œ: ๊ด€๋ จ์„ฑ, ์ •ํ™•์„ฑ, ๋…์„ฑ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ธก์ • ํ•ญ๋ชฉ์€ ์‚ฌ์šฉ์ž ์„ธ์…˜, ํ”„๋กฌํ”„ํŠธ, ์›Œํฌํ”Œ๋กœ ๋“ฑ์˜ ์ฐจ์›์—์„œ ์‹œ๊ฐํ™”๋˜์–ด ์‹ค์‹œ๊ฐ„ ๊ฐœ์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ถ”์  ๊ฐ€๋Šฅํ•œ ์•„ํ‹ฐํŒฉํŠธ์˜ ๋ถ„๋ฅ˜

์ด ๋…ผ๋ฌธ์€ AgentOps ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์„ ๋’ท๋ฐ›์นจํ•˜๋Š” ์•„ํ‹ฐํŒฉํŠธ์˜ ์ฒด๊ณ„์ ์ธ ๋ถ„๋ฅ˜๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

  • ์—์ด์ „ํŠธ ์ƒ์„ฑ ์•„ํ‹ฐํŒฉํŠธ: ์—ญํ• , ๋ชฉํ‘œ ๋ฐ ์ œ์•ฝ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ.
  • ์‹คํ–‰ ์•„ํ‹ฐํŒฉํŠธ: ๋„๊ตฌ ํ˜ธ์ถœ, ํ•˜์œ„ ์ž‘์—… ๋Œ€๊ธฐ์—ด, ์ถ”๋ก  ๋‹จ๊ณ„์˜ ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • ํ‰๊ฐ€ ์•„ํ‹ฐํŒฉํŠธ: ๋ฒค์น˜๋งˆํฌ, ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„, ์ฑ„์  ์ง€ํ‘œ.
  • ์œ ๋ฌผ ์ถ”์ : ์„ธ๋ถ€์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ์„ธ์…˜ ID, ์ถ”์  ID ๋ฐ ์ŠคํŒฌ.

์ด๋Ÿฌํ•œ ๋ถ„๋ฅ˜๋ฒ•์€ ์—์ด์ „ํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด ์ „์ฒด์—์„œ ์ผ๊ด€์„ฑ๊ณผ ๋ช…ํ™•์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ ๋””๋ฒ„๊น…๊ณผ ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ ์šด์˜ (๋„๊ตฌ) ์—ฐ์Šต

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” AgentOps๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์—ฌ AI ์—์ด์ „ํŠธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: AgentOps SDK ์„ค์น˜

์›ํ•˜๋Š” Python ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AgentOps๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.

pip install agentops

2๋‹จ๊ณ„: AgentOps ์ดˆ๊ธฐํ™”

๋จผ์ € AgentOps๋ฅผ ๊ฐ€์ ธ์™€ API ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. API ํ‚ค๋ฅผ ๋‹ค์Œ ์œ„์น˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. .env ๋ณด์•ˆ์„ ์œ„ํ•œ ํŒŒ์ผ:

# Initialize AgentOps with API Key
import agentops
import os
from dotenv import load_dotenv

# Load environment variables
load_dotenv()
AGENTOPS_API_KEY = os.getenv("AGENTOPS_API_KEY")

# Initialize the AgentOps client
agentops.init(api_key=AGENTOPS_API_KEY, default_tags=["my-first-agent"])

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  LLM ์ƒํ˜ธ์ž‘์šฉ์— ๋Œ€ํ•œ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

3๋‹จ๊ณ„: ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ ์ž‘์—… ๊ธฐ๋ก

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ณ„์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @record_action ๋งค๊ฐœ๋ณ€์ˆ˜, ์‹คํ–‰ ์‹œ๊ฐ„ ๋ฐ ์ถœ๋ ฅ์„ ์ถ”์ ํ•˜๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์˜ˆ์ž…๋‹ˆ๋‹ค.

from agentops import record_action

@record_action("custom-action-tracker")
def is_prime(number):
    """Check if a number is prime."""
    if number < 2:
        return False
    for i in range(2, int(number**0.5) + 1):
        if number % i == 0:
            return False
    return True

์ด์ œ ์ด ๊ธฐ๋Šฅ์€ AgentOps ๋Œ€์‹œ๋ณด๋“œ์— ๊ธฐ๋ก๋˜์–ด ์‹คํ–‰ ์‹œ๊ฐ„๊ณผ ์ž…์ถœ๋ ฅ ์ถ”์ ์— ๋Œ€ํ•œ ์ธก์ • ํ•ญ๋ชฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

4๋‹จ๊ณ„: ์ง€์ •๋œ ์—์ด์ „ํŠธ ์ถ”์ 

๋ช…๋ช…๋œ ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. @track_agent ๋ชจ๋“  ์ž‘์—…๊ณผ ์ด๋ฒคํŠธ๋ฅผ ํŠน์ • ์—์ด์ „ํŠธ์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

from agentops import track_agent

@track_agent(name="math-agent")
class MathAgent:
    def __init__(self, name):
        self.name = name

    def factorial(self, n):
        """Calculate factorial recursively."""
        return 1 if n == 0 else n * self.factorial(n - 1)

์ด ์—์ด์ „ํŠธ ๋‚ด์˜ ๋ชจ๋“  ์ž‘์—… ๋˜๋Š” LLM ํ˜ธ์ถœ์€ ์ด์ œ ๋‹ค์Œ๊ณผ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. "math-agent" ๊ผฌ๋ฆฌํ‘œ.

5๋‹จ๊ณ„: ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์ง€์›

์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ, ๋” ๋‚˜์€ ๊ด€์ฐฐ์„ฑ์„ ์œ„ํ•ด ์—์ด์ „ํŠธ ๊ฐ„์— ์ด๋ฒคํŠธ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์˜ˆ์ž…๋‹ˆ๋‹ค.

@track_agent(name="qa-agent")
class QAAgent:
    def generate_response(self, prompt):
        return f"Responding to: {prompt}"

@track_agent(name="developer-agent")
class DeveloperAgent:
    def generate_code(self, task_description):
        return f"# Code to perform: {task_description}"

qa_agent = QAAgent()
developer_agent = DeveloperAgent()

response = qa_agent.generate_response("Explain observability in AI.")
code = developer_agent.generate_code("calculate Fibonacci sequence")


๊ฐ ํ†ตํ™”๋Š” ํ•ด๋‹น ์—์ด์ „ํŠธ์˜ ์ถ”์  ์•„๋ž˜ AgentOps ๋Œ€์‹œ๋ณด๋“œ์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

6๋‹จ๊ณ„: ์„ธ์…˜ ์ข…๋ฃŒ

์„ธ์…˜ ์ข…๋ฃŒ๋ฅผ ์•Œ๋ฆฌ๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. end_session ๋ฐฉ๋ฒ•. ์„ ํƒ์ ์œผ๋กœ ์„ธ์…˜ ์ƒํƒœ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค(Success or Fail) ๊ทธ๋ฆฌ๊ณ  ์ด์œ .

# End of session
agentops.end_session(state="Success", reason="Completed workflow")

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ AgentOps ๋Œ€์‹œ๋ณด๋“œ์— ๊ธฐ๋ก๋˜๊ณ  ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

7๋‹จ๊ณ„: AgentOps ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‹œ๊ฐํ™”

๋ฐฉ๋ฌธ AgentOps ๋Œ€์‹œ๋ณด๋“œ ํƒ๊ตฌ:

  • ์„ธ์…˜ ๋ฆฌํ”Œ๋ ˆ์ด: ๋‹จ๊ณ„๋ณ„ ์‹คํ–‰ ์ถ”์ .
  • ํ•ด์„ํ•™: LLM ๋น„์šฉ, ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ ์ง€์—ฐ ์‹œ๊ฐ„ ์ธก์ • ํ•ญ๋ชฉ.
  • ์˜ค๋ฅ˜ ๊ฐ์ง€: ์˜ค๋ฅ˜๋‚˜ ์žฌ๊ท€ ๋ฃจํ”„๋ฅผ ์‹๋ณ„ํ•˜์—ฌ ๋””๋ฒ„๊น…ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ•ํ™”๋œ ์˜ˆ: ์žฌ๊ท€์  ์‚ฌ๊ณ  ๊ฐ์ง€

AgentOps๋Š” ๋˜ํ•œ ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์—์„œ ์žฌ๊ท€ ๋ฃจํ”„๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์˜ˆ์ œ๋ฅผ ์žฌ๊ท€ ๊ฐ์ง€๋กœ ํ™•์žฅํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@track_agent(name="recursive-agent")
class RecursiveAgent:
    def solve(self, task, depth=0, max_depth=5):
        """Simulates recursive task solving with depth control."""
        if depth >= max_depth:
            return f"Max recursion depth reached for task: {task}"
        return self.solve(task, depth + 1)

recursive_agent = RecursiveAgent()
output = recursive_agent.solve("Optimize database queries")
print(output)

AgentOps๋Š” ์„ธ์…˜์˜ ์ผ๋ถ€๋กœ ์žฌ๊ท€๋ฅผ ๊ธฐ๋กํ•˜์—ฌ ๋ฌดํ•œ ๋ฃจํ”„๋‚˜ ๊ณผ๋„ํ•œ ๊นŠ์ด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

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

 

์ €๋Š” ์ง€๋‚œ 50๋…„ ๋™์•ˆ ๊ธฐ๊ณ„ ํ•™์Šต๊ณผ ๋”ฅ ๋Ÿฌ๋‹์˜ ๋งคํ˜น์ ์ธ ์„ธ๊ณ„์— ๋ชฐ๋‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €์˜ ์—ด์ •๊ณผ ์ „๋ฌธ โ€‹โ€‹์ง€์‹์€ ํŠนํžˆ AI/ML์— ์ค‘์ ์„ ๋‘” XNUMX๊ฐœ ์ด์ƒ์˜ ๋‹ค์–‘ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋„๋ก ์ด๋Œ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์˜ ๊ณ„์†๋˜๋Š” ํ˜ธ๊ธฐ์‹ฌ์€ ๋˜ํ•œ ๋‚ด๊ฐ€ ๋” ํƒ๊ตฌํ•˜๊ณ  ์‹ถ์€ ๋ถ„์•ผ์ธ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ๋กœ ๋‚˜๋ฅผ ์ด๋Œ์—ˆ์Šต๋‹ˆ๋‹ค.