ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
๐Ÿš€ SoloEngine v0.3.0 Release โ€” Checkpoint Mechanism & Message Queue
Dev.toDev.to
AI/ML

Checkpoint ๋ฐ Message Queue ๋„์ž…์„ ํ†ตํ•œ LLM ์ŠคํŠธ๋ฆฌ๋ฐ ์ œ์–ด ์ตœ์ ํ™”

๐Ÿš€ SoloEngine v0.3.0 Release โ€” Checkpoint Mechanism & Message Queue

Sh4rlock2026๋…„ 6์›” 29์ผ7๋ถ„advanced

Context

LLM ์ŠคํŠธ๋ฆฌ๋ฐ ์ค‘ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฐจ๋‹จ ๋ฐ ์ƒํƒœ ๋™๊ธฐํ™” ์ง€์—ฐ์œผ๋กœ ์ธํ•œ UX ์ €ํ•˜ ๋ฐœ์ƒ. ๊ธฐ์กด์˜ ๋ณต์žกํ•œ WebSocket ํ•ธ๋“ค๋Ÿฌ ๋กœ์ง๊ณผ ํŒŒํŽธํ™”๋œ Tool Call ํฌ๋งท์œผ๋กœ ์ธํ•ด ์‹œ์Šคํ…œ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€ ๋ฐ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ๋นˆ๋„๊ฐ€ ๋†’์€ ์ƒํƒœ์ž„.

Technical Solution

  • ReActCore ๋‚ด 3๋‹จ๊ณ„ Checkpoint(content_ended, before_tool_calls, after_tool_calls) ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ์‹คํ–‰ ํ๋ฆ„์˜ ์ •๋ฐ€ ์ œ์–ด ๋ฐ ์ƒํƒœ ๋™๊ธฐํ™” ๊ตฌํ˜„
  • async enqueue/drain ๊ธฐ๋ฐ˜์˜ MessageQueue ํด๋ž˜์Šค ๋„์ž…์œผ๋กœ LLM ์‹คํ–‰ ์ค‘์œผ๋กœ ์œ ์ž…๋˜๋Š” ๋ฉ”์‹œ์ง€์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐ ์ˆœ์ฐจ์  ์ž๋™ ์ „์†ก ๊ตฌ์กฐ ์„ค๊ณ„
  • WebSocket ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋‹จ์ˆœ ์ „์†ก ๊ณ„์ธต์œผ๋กœ ์ถ”์ƒํ™”ํ•˜๊ณ  RunContext๊ฐ€ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์†Œ์œ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜์—ฌ ์ฑ…์ž„ ๋ถ„๋ฆฌ
  • ToolUseBlock์„ OpenAI ํ‘œ์ค€์ธ tool_calls ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ToolCallsBlock์œผ๋กœ ํ†ตํ•ฉํ•˜์—ฌ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ํฌ๋งท ์ผ์›ํ™”
  • tiktoken ๊ธฐ๋ฐ˜์˜ ์ฒญํฌ ๋‹จ์œ„ ์‹ค์‹œ๊ฐ„ ํ† ํฐ ์ถ”์ • ๋ฐ API ์ตœ์ข… ๊ฐ’ ๋ฎ์–ด์“ฐ๊ธฐ ๋กœ์ง์„ ํ†ตํ•œ ์ •๋ฐ€ํ•œ ์‚ฌ์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ‚น ๊ตฌํ˜„
  • aclose() ํ˜ธ์ถœ ์‹œ CancelledError๋ฅผ ์ •์ƒ ์ข…๋ฃŒ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์™ธ ํ•ธ๋“ค๋ง ์ตœ์ ํ™”๋กœ ๋ถˆํ•„์š”ํ•œ ์—๋Ÿฌ ์ „ํŒŒ ๋ฐฉ์ง€

- LLM ์ŠคํŠธ๋ฆฌ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„ ์‹œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฐจ๋‹จ ๋Œ€์‹  Message Queue ๋„์ž… ๊ฒ€ํ†  - ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์žฆ์€ AI ์—์ด์ „ํŠธ ํ๋ฆ„์— ๋ช…์‹œ์  Checkpoint๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ธํ„ฐ์…‰ํ„ฐ ์ง€์  ํ™•๋ณด - WebSocket ์„œ๋ฒ„ ์„ค๊ณ„ ์‹œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ณ  ๋‹จ์ˆœ Transport Layer๋กœ ์œ ์ง€ํ•˜๋Š” ์ „๋žต ์ ์šฉ - API ์‘๋‹ต ์ง€์—ฐ ์‹œ tiktoken๊ณผ ๊ฐ™์€ ๋กœ์ปฌ ์ธ์ฝ”๋”๋ฅผ ํ™œ์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์ถ”์ •์น˜ ์ œ๊ณต์œผ๋กœ UX ๊ฐœ์„ 

์›๋ฌธ ์ฝ๊ธฐ