๐Ÿ“บ ์˜์ƒ ์š”์•ฝ ์•„์นด์ด๋ธŒ
โ† ๋ชฉ๋ก

How to Test Your Agents on Real Tasks With Harbor - Xander Song, Arize AI

AI Engineer ยท 2026-10-27 04:00 ยท 56:01

ํ•œ ์ค„ ํ•ต์‹ฌ

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

์‹œ๊ฐ„๋ณ„ ์š”์•ฝ

  1. 0:00
    ์ฆ๊ฑฐ์— ๊ธฐ๋ฐ˜ํ•œ ๋ฐฐํฌ Harbor๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฉ๋ฆฌ๋œ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์—์ด์ „ํŠธ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ, ๋ชฉํ‘œ๋Š” ๊ฐ์ด ์•„๋‹ˆ๋ผ ์ฆ๊ฑฐ๋กœ ์—์ด์ „ํŠธ์™€ ํ•˜๋„ค์Šค๋ฅผ ๋ฐ˜๋ณต ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์žˆ๋‹ค.
  2. 1:28
    Harbor๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž์—ฐ์–ด ์ง€์‹œ๋กœ ์ •์˜ํ•œ ํ˜„์‹ค์ ์ธ ์ž‘์—…์„ ์—์ด์ „ํŠธ์— ์ฃผ๊ณ , ํ™˜๊ฒฝ ๋‚ด๋ถ€์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” verifier๋กœ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ์ฑ„์ ํ•˜๋Š” ๊ตฌ์กฐ๋‹ค. ๊ฐ™์€ ์ž‘์—…๊ณผ ๊ฒ€์ฆ๊ธฐ๋ฅผ ์œ ์ง€ํ•œ ์ฑ„ ๊ตฌํ˜„๋งŒ ๋ฐ”๊พธ๋ฉด ๊ฐœ์„ ๊ณผ ํšŒ๊ท€๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. 3:37
    ์ž‘์—…, ํ™˜๊ฒฝ, ๊ฒ€์ฆ๊ธฐ์˜ ๊ตฌ์กฐ ์ž‘์—…์€ markdown ์ง€์‹œ๋ฌธ, ํ™˜๊ฒฝ์€ Docker file๋กœ ์ •์˜๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋Š” SQLite๋‚˜ git repository์ฒ˜๋Ÿผ ๋ฌด์—‡์ด๋“  ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์ž‘์—…์—๋Š” test directory์˜ ์Šคํฌ๋ฆฝํŠธํ˜• verifier๊ฐ€ ๋ถ™๊ณ , ์—ฌ๋Ÿฌ trial์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋Œ๋ ค ํ™•๋ฅ ์ ์ธ LLM ๋™์ž‘์„ ๋ณด์ •ํ•œ๋‹ค.
  4. 6:08
    Trajectories, job, oracle ATIF๋Š” ์—์ด์ „ํŠธ์˜ ๋‚ด๋ถ€ ๋‹จ๊ณ„๋ฅผ ๊ธฐ๋กํ•˜๋Š” JSON ์ถ”์  ํ˜•์‹์œผ๋กœ, ๋””๋ฒ„๊น…๊ณผ ๋กœ๊ทธ์— ์œ ์šฉํ•˜๋‹ค. ์ „์ฒด ์ž‘์—… ๋ฌถ์Œ๊ณผ ์—ฌ๋Ÿฌ trial, verifier ์‹คํ–‰, trajectory ์ˆ˜์ง‘์„ ํ•ฉ์นœ ์‹คํ–‰ ๋‹จ์œ„๋ฅผ Harbor๋Š” job์œผ๋กœ ๋ถ€๋ฅด๋ฉฐ, oracle์€ ์—์ด์ „ํŠธ ํˆฌ์ž… ์ „์— ๋ฐ์ดํ„ฐยทํ™˜๊ฒฝยท๊ฒ€์ฆ๊ธฐ์˜ ์ •ํ•ฉ์„ฑ์„ ์ ๊ฒ€ํ•˜๋Š” ์ •๋‹ต ์Šคํฌ๋ฆฝํŠธ๋‹ค.
  5. 7:58
    ์‹คํŒจํ•˜๋Š” migration ์ˆ˜์ • ์˜ˆ์‹œ ์‹คํŒจํ•œ migration์„ ๊ณ ์น˜๋Š” ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ์‚ฌ๋ก€๋กœ, ์ง€์‹œ๋ฌธยทSQL/DDLยท์†Œ์Šค์ฝ”๋“œยท๊ฒ€์ฆ ์Šคํฌ๋ฆฝํŠธยท์ •๋‹ต ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜๋˜๋Š”์ง€ ์„ค๋ช…ํ•œ๋‹ค. ๊ฒ€์ฆ๊ธฐ๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ˆ˜์ •ํ•œ ํŒŒ์ผ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ฉฐ, ์‹คํ–‰ ์ค‘์—๋Š” ๊ฒ€์ฆ๊ธฐ์™€ ํ•ด๋‹ต์ด ๋ณด์ด์ง€ ์•Š๋„๋ก ๋ถ„๋ฆฌ๋œ๋‹ค.
  6. 10:48
    ๋ธ”๋ž™๋ฐ•์Šค ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋กœ์„œ์˜ ๊ฒ€์ฆ๊ธฐ ๊ฒ€์ฆ๊ธฐ๋Š” ์—์ด์ „ํŠธ ๊ตฌํ˜„์„ ๋ณด์ง€ ์•Š๊ณ  ๊ฒฐ๊ณผ๋ฌผ๊ณผ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋งŒ ํ‰๊ฐ€ํ•˜๋Š” ๋ธ”๋ž™๋ฐ•์Šค ๋ฐฉ์‹์ด ์ด์ƒ์ ์ด๋ฉฐ, ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค. ์ด ๋•๋ถ„์— ๊ตฌํ˜„์„ ํฌ๊ฒŒ ๋ฐ”๊ฟ”๋„ ์ž‘์—… ์ •์˜์™€ ๊ฒ€์ฆ ๊ธฐ์ค€์„ ๊ณ ์ •ํ•œ ์ฑ„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฆฌํŒฉํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
  7. 14:21
    ๋ณ‘๋ ฌ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ์˜ ๋Œ€๊ทœ๋ชจ ์‹คํ–‰ ์ž‘์—…๊ณผ trial์ด ๋ชจ๋‘ ๋…๋ฆฝ์ ์ด์–ด์„œ Docker๋‚˜ Daytona, Modal, E2B ๊ฐ™์€ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ์™€ ์—ฌ๋Ÿฌ trial์„ ๋ณ‘๋ ฌ๋กœ ๋Œ๋ฆฐ ๋’ค pass@k ๊ฐ™์€ ์ง‘๊ณ„ ์ง€ํ‘œ๋กœ ๋น ๋ฅด๊ฒŒ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.
  8. 17:04
    Phoenix์™€์˜ ์—ฐ๋™ Harbor์˜ dataset, trial, reward, trajectory๋Š” Phoenix์˜ dataset, experiment, evaluation, open inference ํ˜•์‹์œผ๋กœ ๋งคํ•‘๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ถ”์ , ๋ฒ„์ „ ๊ด€๋ฆฌ, ์‹œ๊ฐํ™”, CLI์™€ MCP ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง€๊ณ , Harbor๋งŒ ๋‹จ๋…์œผ๋กœ ์“ธ ๋•Œ๋ณด๋‹ค ์‹คํ—˜ ๊ด€์ฐฐ์„ฑ์ด ๋†’์•„์ง„๋‹ค.
  9. 20:37
    Phoenix ํŒ€์ด Harbor๋ฅผ ์“ฐ๋Š” ๋ฐฉ์‹ Phoenix๋Š” ๋‹จ์ผ ๋…ธ๋“œ ์„œ๋ฒ„, SQLite/Postgres, RESTยทGraphQL, CLIยทMCPยท์„œ๋ฒ„์‚ฌ์ด๋“œ ์—์ด์ „ํŠธ Pixie๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ด ์ „์ฒด๋ฅผ Docker์— ๋„ฃ์–ด Harbor๋กœ ํ‰๊ฐ€ํ•œ๋‹ค. ์‹ค์ œ ์‚ฌ์šฉ์ž ์งˆ๋ฌธ์„ ๋ฐ˜์˜ํ•œ ์ž‘์—…์„ ๋งŒ๋“ค๊ณ , ์ข…๋ฃŒ ํ›„์—๋Š” REST ํ˜ธ์ถœ์ด๋‚˜ SQL ์กฐํšŒ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.
  10. 25:07
    Harbor๊ฐ€ ์‹คํ–‰์„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ์‹ Harbor๋Š” ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์—์„œ ๋™์ž‘ํ•˜๋Š” CLI ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๋กœ, Docker ์ด๋ฏธ์ง€ ์•ˆ์˜ ์ •ํ•ด์ง„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฐพ์•„ ์ž‘์—… ์‹œ์ž‘ยทverifier ์‹คํ–‰ยทoracle ์‹คํ–‰์„ ์กฐ์œจํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ต์‹ฌ ๊ณ„์•ฝ์€ ๊ตฌํ˜„์ด ์•„๋‹ˆ๋ผ ์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์น˜์™€ ์ด๋ฏธ์ง€ ๊ตฌ์กฐ์— ์žˆ๋‹ค.
  11. 29:24
    ๋ณต์žกํ•œ ์‹œ์Šคํ…œ๊ณผ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ด๋‚˜ ๋Œ€ํ˜• ๋ฐ์ดํ„ฐ์…‹์€ ๋‹จ์ผ Docker๋กœ ๊ฐ์‹ธ๊ธฐ ์–ด๋ ค์›Œ Harbor ์ ์šฉ์ด ๋” ๊นŒ๋‹ค๋กญ๊ณ , ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ธํ„ฐํŽ˜์ด์Šค ๊ฒฝ๊ณ„๋ฅผ ์ž˜๋ผ์•ผ ํ•œ๋‹ค. ๋‹ค๋งŒ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ๋„ฃ์„ ํ•„์š”๋Š” ์—†๊ณ , ํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ์งˆ๋ฌธ๊ณผ ํ–‰๋™์— ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ณจ๋ผ์„œ ํ˜„์‹ค์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ๋œ๋‹ค.
  12. 33:21
    SQL ๋„๊ตฌ๋กœ ์œ ๋„ํ•œ ์‚ฌ๋ก€ ์—ฐ๊ตฌ REST๋‚˜ GraphQL๋งŒ์œผ๋กœ๋Š” ์ง‘๊ณ„ ์งˆ๋ฌธ์ด ๋น„ํšจ์œจ์ ์ด์–ด์„œ read-only SQL ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ, ์—์ด์ „ํŠธ๊ฐ€ ์–ธ์ œ๋‚˜ ์˜ฌ๋ฐ”๋ฅธ ๋„๊ตฌ๋ฅผ ๊ณ ๋ฅด์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ์— SQL ์‚ฌ์šฉ ์กฐ๊ฑด์„ ๋ช…์‹œํ•˜๊ณ , synthetic question ๋ฐ์ดํ„ฐ์…‹๊ณผ oracle ๊ธฐ๋ฐ˜ verifier๋กœ ์‹ค์ œ๋กœ SQL ์‚ฌ์šฉ์ด ๋Š˜๊ณ  tool call ์ˆ˜๊ฐ€ ์ค„์—ˆ๋Š”์ง€ ๊ฒ€์ฆํ–ˆ๋‹ค.
  13. 38:34
    Phoenix์—์„œ ๋ฐ์ดํ„ฐ์…‹๊ณผ ์‹คํ—˜ ๋ณด๊ธฐ Phoenix์—์„œ๋Š” ๋ฐ์ดํ„ฐ์…‹ ์˜ˆ์‹œ์™€ ์ •๋‹ต, version history, experiment๋ณ„ reward์™€ ๋น„์šฉ, ์ง€์—ฐ์‹œ๊ฐ„, tool call ์ˆ˜๋ฅผ ํ•œ ํ™”๋ฉด์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” correctness๋Š” ์œ ์ง€๋˜์—ˆ๊ณ , ์ตœ์ ํ™” ๋ชฉํ‘œ์˜€๋˜ tool call ๊ฐ์†Œ์™€ SQL ์‚ฌ์šฉ ์ฆ๊ฐ€๊ฐ€ ์ง€ํ‘œ๋กœ ๋“œ๋Ÿฌ๋‚ฌ๋‹ค.
  14. 44:10
    ์ž‘์—…๋ณ„๋กœ job ๋น„๊ตํ•˜๊ธฐ ๋‘ experiment๋ฅผ ๋‚˜๋ž€ํžˆ ๋†“๊ณ  task ๋‹จ์œ„๋กœ reward, tool count, turn ์ˆ˜, SQL/GraphQL ์‚ฌ์šฉ ๋ณ€ํ™”๋ฅผ ๋น„๊ตํ•ด ๊ฐœ์„  ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ผ๋ถ€ ๊ฒฝ์šฐ์—๋Š” trajectory๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ค ๋„๊ตฌ ํ˜ธ์ถœ ๊ฒฝ๋กœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ์‹œ๊ฐ์ ์œผ๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.
  15. 48:31
    ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์™€ ์Šคํ‚ฌ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋Š” ์•„์ง ์ดˆ๊ธฐ ๋‹จ๊ณ„์ด์ง€๋งŒ, Harbor์—์„œ๋Š” ํŠนํžˆ workflow๋ฅผ ๋‹ด๋Š” skill ๋‹จ์œ„๋กœ happy path๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ์‹์ด ์ž˜ ๋งž๋Š”๋‹ค. ํ•„์š”ํ•˜๋ฉด verifier๊ฐ€ trajectory๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๋Š” ๋” ๊ฒฐํ•ฉ๋œ ํ…Œ์ŠคํŠธ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ flakiness๋ฅผ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

์‹ค๋ฌด ์ธ์‚ฌ์ดํŠธ

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