LLM API ๊ณผ๊ธ ํญํ ๋ง๋ ๋ฒ: ์ผ์ผ ์ํ๊ณผ ์ ๋ถ ํฌ๋ ๋ง ๊ด๋ฆฌ ๊ฒฝํ๊ธฐ
์๋ ํ์ธ์, ์ฝ๋ฉ์๋น ์ ๋๋ค. ์ค๋์ ์ ๊ฐ LLM API๋ฅผ ์ฌ์ฉํ๋ฉด์ ๊ฒช์๋ ์ผ๊ณผ ๊ทธ ํด๊ฒฐ ๊ณผ์ ์ ๊ฒฝํ๋ ธํธ ํ์์ผ๋ก ์ ๋ฆฌํด๋ดค์ต๋๋ค. ์ฒ์ AI ๊ฐ๋ฐ์ ๋ฐ์ ๋ค์ด๋ฉด์ LLM API์ ๊ฐ๋ ฅํจ์ ๋งค๋ฃ๋์๋๋ฐ, ํํธ์ผ๋ก๋ ์์์น ๋ชปํ ๋น์ฉ์ด ๋ฐ์ํ ๊น ๋ด ๋ ๋ง์ ํ๊ตฌ์์ด ๋ถ์ํ๋๊ตฐ์. ํนํ ์ ๋ถ ํฌ๋ ๋ง ๋ฐฉ์์ผ๋ก ์ด์๋๋ API๋ ์์ก์ด ๊ฐ์๊ธฐ ์์ง๋๋ฉด ์๋น์ค๊ฐ ๋ฉ์ถ ์๋ ์์ด์ ๋ ์ ๊ฒฝ์ด ์ฐ์์ต๋๋ค. ์ด๋ฐ ๋ง์ฐํ ๋ถ์๊ฐ์ ํด์ํ๊ณ ์์ ์ ์ผ๋ก LLM ์๋น์ค๋ฅผ ์ด์ํ๊ธฐ ์ํด ์ด๋ค ๋ ธ๋ ฅ์ ํ๋์ง, ์ ๊ฐ ์ง์ ๋ถ๋ชํ๊ณ ํด๊ฒฐํ ์ด์ผ๊ธฐ๋ค์ ํ์ด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ฒ์์ ๊ทธ์ '์ ๋๊ฒ ์ง' ํ๊ณ ์์ํ์ง๋ง, ๊ณง ํ์ค์ ์ธ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ , ์ด๋ฅผ ์์คํ ์ ์ผ๋ก ํด๊ฒฐํด์ผ๊ฒ ๋ค๊ณ ๋ง์๋จน๊ฒ ๋์๋ค์. ์ด ๊ธ์ ํ๊ตญ์ด ์๋ฌธ์ ์ ๋ฆฌํ ๊ฒ์ผ๋ก, ์ฝ๋์ ์ค์ ๊ฐ์ ๊ทธ๋๋ก ์ฌํ ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ฐ ๋ถ๊ป โ LLM API๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋น์ฉ ๊ด๋ฆฌ ๋ฐ ์์ ์ ์ธ ์๋น์ค ์ด์์ ๊ด์ฌ ์๋ ๊ฐ๋ฐ์ ยท ๋์ด๋๋ ์ค๊ธ ์ ๋
์ฌ๊ธฐ์ ํ์ธํ ๊ฒ
- LLM API ์ฌ์ฉ ์ ๋ฐ์ํ ์ ์๋ ๊ณผ๊ธ ์ํ๊ณผ ๊ทธ ์์ธ
- ์์์น ๋ชปํ ๋น์ฉ ์ง์ถ์ ๋ง๊ธฐ ์ํ ์ผ์ผ ๋น์ฉ ์ํ ์ค์ ๋ฐฉ๋ฒ
- ์ ๋ถ ํฌ๋ ๋ง ์์ก์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ ์์คํ ๊ตฌ์ถ
- ๋น์ฉ ์ํ ์ด๊ณผ ๋๋ ํฌ๋ ๋ง ๋ถ์กฑ ์ LLM API ํธ์ถ์ ์๋ ์ ์ดํ๋ ๋ก์ง
- ์์ ์ ์ธ LLM ์๋น์ค ์ด์์ ์ํ ํตํฉ์ ์ธ ๋น์ฉ ๊ด๋ฆฌ ์ ๋ต
LLM API, ํธ๋ฆฌํจ ๋ค์ ์จ๊ฒจ์ง ๊ณผ๊ธ์ ๊ทธ๋ฆผ์
LLM API๋ฅผ ์ฒ์ ์ ํ์ ๋์ ์ค๋ ์ ์ ๋ง ๋๋จํ์ต๋๋ค. ๊ฐ๋จํ ํธ์ถ๋ง์ผ๋ก ๋ณต์กํ ์์ ์ ์ํํ๋ ๋ชจ์ต์ ๋ง์น ๋ง๋ฒ ๊ฐ์์ฃ . ํ์ง๋ง ์ด๋ด ํ์ค์ ์ธ ๊ณ ๋ฏผ์ ๋ถ๋ชํ์ต๋๋ค. ๋ฐ๋ก '๊ณผ๊ธ' ๋ฌธ์ ์์ต๋๋ค. LLM ํธ์ถ ๋น์ฉ์ ์ฌ์ฉ๋๋ ํ ํฐ์ ์์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋๋ฐ, ์ด ํ ํฐ ์ฌ์ฉ๋์ด๋ผ๋ ๊ฒ ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์์๋ ์์ธกํ๊ธฐ๊ฐ ์ ๋ง ์ด๋ ต๋๊ตฐ์. ์๋ก์ด ๊ธฐ๋ฅ์ ์คํํ๋ค ๋ณด๋ฉด ํ ๋ฒ์ ์๋ชป๋ ํธ์ถ์ด๋ ๋ฌดํ ๋ฃจํ ๋๋ฌธ์ ์์๋ณด๋ค ํจ์ฌ ๋ง์ ํ ํฐ์ ์ฌ์ฉํ๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ํญ์ ์์์ต๋๋ค. ์ ์ ๊ฒฝ์ฐ, ์ฒ์์๋ ์๋ฌด๋ฐ ์ ์ฝ ์์ด API๋ฅผ ์ฌ์ฉํ์ต๋๋ค. '์ค๋ง ํฐ๋์ด ๋์ค๊ฒ ์ด?' ํ๋ ์์ผํ ์๊ฐ์ด์์ฃ . ํ์ง๋ง ์ค์ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์์์น ๋ชปํ ํธ์ถ ํจํด์ด ๋ฐ์ํ๊ธฐ ์ฝ๊ณ , ์ด๋ ๊ณง๋ฐ๋ก ๋น์ฉ ์ฆ๊ฐ๋ก ์ด์ด์ง ์ ์๋ค๋ ๊ฑธ ๊นจ๋ฌ์์ต๋๋ค. ๋ง์ฝ ์ ๊ฐ ๊ณ์ ์ด๋ฐ ์์ผ๋ก ์๋ฌด๋ฐ ํต์ ์์ด ์๋น์ค๋ฅผ ์ด์ํ๋ค๋ฉด, ์ด๋ ์๊ฐ '๊ณผ๊ธ ํญํ'์ด๋ผ๋ ๋ฌด์๋ฌด์ํ ์ํฉ์ ๋ง์ดํ์์ง๋ ๋ชจ๋ฆ ๋๋ค. ํนํ Gemini API์ฒ๋ผ ์ ๋ถ(Prepay) ํฌ๋ ๋ง ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์์ก์ด ์์ง๋๋ฉด ์๋น์ค๊ฐ ์๊ณ ์์ด ์ค๋จ๋ ์ ์๋ค๋ ์ ์ด ํฐ ๋ถ์ ์์์์ต๋๋ค. ์์ก ๋ถ์กฑ์ผ๋ก ์ธํด ์ค์ํ ์๋น์ค๊ฐ ๋ฉ์ถฐ๋ฒ๋ฆฌ๋ ์ผ์ ์์๋ง ํด๋ ์์ฐํ๋๊ตฐ์. ์ด๋ฐ ์ํ์ ๊ฐ์ํ๋ฉด์ ์๋น์ค๋ฅผ ์ด์ํ๋ ๊ฒ์ ์ฅ๊ธฐ์ ์ผ๋ก ์ง์ ๋ถ๊ฐ๋ฅํ๋ค๋ ํ๋จ์ด ๋ค์๊ณ , ๋ณด๋ค ์ ๊ทน์ ์ธ ๋น์ฉ ๊ด๋ฆฌ ์์คํ ์ด ํ์ํ๋ค๊ณ ์๊ฐํ๊ฒ ๋์์ต๋๋ค.
์์์น ๋ชปํ ๋น์ฉ ์ง์ถ์ ๋ง๊ธฐ ์ํ ์ฒซ ์๋: ์ผ์ผ ๋น์ฉ ์ํ ๋๊ธฐ
๋ง์ฐํ ๋ถ์๊ฐ์ ํด์ํ๊ธฐ ์ํด ์ ๊ฐ ์ฒ์์ผ๋ก ์๋ํ ๋ฐฉ๋ฒ์ '์ผ์ผ ๋น์ฉ ์ํ'์ ์ค์ ํ๋ ๊ฒ์ด์์ต๋๋ค. ํน์ ๊ธ์ก ์ด์์ ํ๋ฃจ์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ๋ง๋ ์ผ์ข ์ ์์ ์ฅ์น์์ฃ . ์ด๋ ๊ฒ ํ๋ฉด ์ค๋ น ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ํ๋ฃจ์ ๋๊ฐ ์ ์๋ ์ต๋ ๋น์ฉ์ ์ ํํ ์ ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ์ฒ์์๋ ๋จ์ํ '์ผ๋ง ์ด์ ์ฐ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋์ฐ์' ์ ๋์ ์์ด๋์ด์๋๋ฐ, ์ข ๋ ํ์คํ ์ ์ด๊ฐ ํ์ํ๋ค๊ณ ๋๊ปด์ ์์ ํธ์ถ ์์ฒด๋ฅผ ๋ง์๋ฒ๋ฆฌ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ฅ์ ์ก์์ต๋๋ค.
์ด ๋ก์ง์ LLM API ํธ์ถ์ด ๋ฐ์ํ ๋๋ง๋ค ํ์ฌ๊น์ง์ ์ผ์ผ ์ฌ์ฉ๋์ ํ์ธํ๊ณ , ์ค์ ๋ ์ํ์ ์ ๋์ด์๋ฉด ๋ ์ด์ ํธ์ถ์ด ์งํ๋์ง ์๋๋ก ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์ต๋๋ค. ๋๋ต ์ด๋ฐ ํํ๊ฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
DAILY_COST_LIMIT = 10.0 # USD
current_day_cost = get_daily_usage_cost()
if current_day_cost >= DAILY_COST_LIMIT:
raise CostLimitExceededError("์ผ์ผ ๋น์ฉ ์ํ ์ด๊ณผ")
์ด ์ฝ๋๋ LLM API๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ํ์ฌ๊น์ง์ ์ผ์ผ ๋น์ฉ์ ์กฐํํ๊ณ , ๋ฏธ๋ฆฌ ์ ํด๋ DAILY_COST_LIMIT๋ฅผ ์ด๊ณผํ๋ฉด CostLimitExceededError ์์ธ๋ฅผ ๋ฐ์์์ผ API ํธ์ถ์ ์ค๋จ์ํต๋๋ค. ๋ฌผ๋ก get_daily_usage_cost() ํจ์๋ LLM ์ ๊ณต์ฌ์ API๋ฅผ ํตํด ์ฌ์ฉ๋์ ์กฐํํ๊ฑฐ๋, ์์ฒด์ ์ผ๋ก ๋ก๊ทธ๋ฅผ ์์ ๊ณ์ฐํ๋ ๋ฐฉ์ ๋ฑ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๊ตฌํํด์ผ ํฉ๋๋ค. ์ด ๋จ๊ณ๋ฅผ ํตํด ์ต์ํ ํ๋ฃจ ๋จ์์ ๊ณผ๊ธ ํญํ์ ๋ง์ ์ ์๊ฒ ๋ค๋ ํ์ ์ด ๋ค์์ต๋๋ค. ์ด์ ์๋ '์ผ๋ง๋ ์ผ์๊น?' ํ๋ฉฐ ์กฐ๋ง์กฐ๋งํ์ง๋ง, ์ด์ ๋ ์ ํด์ง ์์ฐ ์์์๋ง ์์ง์ธ๋ค๋ ์์ ๊ฐ์ด ์๊ฒผ์ต๋๋ค. ํ์ง๋ง ์ด๊ฒ๋ง์ผ๋ก๋ ์ ๋ถ ํฌ๋ ๋ง์ด ๋ฐ๋ฅ๋๋ ์ํฉ๊น์ง ์๋ฒฝํ๊ฒ ๋ง์ ์๋ ์๋ค๋ ํ๊ณ๊ฐ ์์์ต๋๋ค.
์ ๋ถ ํฌ๋ ๋ง ์์ก ๋ชจ๋ํฐ๋ง: ์๋น์ค ์ค๋จ ๋ฐฉ์ง๋ฅผ ์ํ ์์ ์ฅ์น
์ผ์ผ ๋น์ฉ ์ํ์ ๋๋ ๊ฒ๋ง์ผ๋ก๋ ๋ถ์กฑํ์ต๋๋ค. ์ ๋ถ ํฌ๋ ๋ง ๋ชจ๋ธ์์๋ ํ๋ฃจ ์ง์ถ์ ํต์ ํ๋๋ผ๋ ์ ์ฒด ์์ก์ด ๋ฐ๋ฅ๋๋ฉด ์๋น์ค๊ฐ ์ค๋จ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋์ ๋ค์ ๋จ๊ณ๋ก ํฌ๋ ๋ง ์์ก์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ , ํน์ ์๊ณ์น์ ๋๋ฌํ์ ๋ ์๋์ผ๋ก ๋์ํ๋ ์์คํ ์ ์ถ๊ฐํ๊ธฐ๋ก ํ์ต๋๋ค. ์ด๋ ์๋น์ค ์ฐ์์ฑ์ ํ๋ณดํ๋ ๋ฐ ๊ฒฐ์ ์ ์ธ ์ญํ ์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
์ ๊ฐ ๊ตฌํํ ๋ฐฉ์์ ํฌ๊ฒ ๋ ๊ฐ์ง ์๊ณ์น๋ฅผ ์ค์ ํ๋ ๊ฒ์ด์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ '๊ฒฝ๊ณ ์๊ณ์น(WARNING_THRESHOLD)'๋ก, ์์ก์ด ์ด ์์ค ์ดํ๋ก ๋จ์ด์ง๋ฉด ๊ด๋ฆฌ์์๊ฒ ์๋ฆผ์ ๋ณด๋ด๋ ์ญํ ์ ํฉ๋๋ค. ๋ ๋ฒ์งธ๋ '์ค๋จ ์๊ณ์น(STOP_THRESHOLD)'๋ก, ์์ก์ด ์ด ์์ค ์ดํ๊ฐ ๋๋ฉด ์์ LLM API ํธ์ถ์ ๋นํ์ฑํํ์ฌ ์ถ๊ฐ์ ์ธ ๋น์ฉ ๋ฐ์๊ณผ ์๋น์ค ์ค๋จ์ ๋ฐฉ์งํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด ๋ก์ง์ cron ๊ฐ์ ์ค์ผ์ค๋ฌ๋ฅผ ์ด์ฉํด ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋๋ก ๊ตฌ์ฑํ์ต๋๋ค.
def check_prepay_balance(api_key):
balance = your_llm_api_client.get_credit_balance(api_key)
if balance < WARNING_THRESHOLD:
send_alert("LLM ํฌ๋ ๋ง ๋ถ์กฑ ์๋ฐ!", balance)
if balance < STOP_THRESHOLD:
disable_llm_calls()
your_llm_api_client.get_credit_balance()๋ LLM API ์ ๊ณต์ฌ์ SDK๋ฅผ ํตํด ์ค์ ์์ก์ ์กฐํํ๋ ๋ถ๋ถ์
๋๋ค. send_alert()๋ Slack์ด๋ ์ด๋ฉ์ผ ๋ฑ์ผ๋ก ๊ด๋ฆฌ์์๊ฒ ์๋ฆผ์ ๋ณด๋ด๋ ํจ์์ด๋ฉฐ, disable_llm_calls()๋ LLM API ํธ์ถ์ ๋ง๋ ์ ์ญ ํ๋๊ทธ๋ฅผ ์ค์ ํ๊ฑฐ๋ ์๋น์ค๋ฅผ ์ผ์ ์ค์งํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํฌ๋ ๋ง์ด ์์ง๋๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ์ธ์งํ๊ณ ๋์ํ ์๊ฐ์ ๋ฒ ์ ์์ผ๋ฉฐ, ์ต์
์ ๊ฒฝ์ฐ ์๋น์ค ์ค๋จ์ ์ต์ํํ๊ฑฐ๋ ์ ์ด๋ ๋ฐฉ์์ผ๋ก ์ ํํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด์ ์๋ ์์ก์ด ์ผ๋ง๋ ๋จ์๋์ง ๋งค๋ฒ ํ์ธํด์ผ ํ์ง๋ง, ์ด์ ๋ ์์คํ
์ด ์์์ ๊ด๋ฆฌํด์ฃผ๋ ํจ์ฌ ์์ฌ์ด ๋์์ต๋๋ค.
API ํธ์ถ ์ ์์ ๋ก์ง ์ถ๊ฐ์ ์์ธ ์ฒ๋ฆฌ
์ผ์ผ ๋น์ฉ ์ํ๊ณผ ์ ๋ถ ํฌ๋ ๋ง ๋ชจ๋ํฐ๋ง ์์คํ ์ ๊ตฌ์ถํ ๋ค์์๋, ์ด ์์ ์ฅ์น๋ค์ด ์ค์ LLM API ํธ์ถ ๋ก์ง๊ณผ ์ด๋ป๊ฒ ํตํฉ๋์ด์ผ ํ๋์ง ๊ณ ๋ฏผํ์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ LLM API๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ํญ์ ํ์ฌ ์ํ๋ฅผ ์ ๊ฒํ๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด์์ต๋๋ค. ๋จ์ํ ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์ ๋์ด, ์ฌ์ฉ์ ๊ฒฝํ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๊ณ ๊ด๋ฆฌ์์๊ฒ ์ ํํ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๊ฒ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ์ฃ .
๊ทธ๋์ LLM API๋ฅผ ํธ์ถํ๋ ๋ชจ๋ ์ง์ ์ ์์ ์ธ๊ธํ ์ผ์ผ ๋น์ฉ ์ํ ์ฒดํฌ ๋ก์ง์ ํฌํจ์ํค๊ณ , ๋ง์ฝ ์ํ์ ์ด๊ณผํ์ฌ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฅผ ์ ์ ํ ์ก์์ ์ฒ๋ฆฌํ๋๋ก try-except ๋ธ๋ก์ ๊ตฌ์ฑํ์ต๋๋ค. ๋ํ, ํฌ๋ ๋ง ๋ถ์กฑ์ผ๋ก ์ธํด disable_llm_calls()๊ฐ ํธ์ถ๋ ์ํ๋ผ๋ฉด, LLM ํธ์ถ ์ ํด๋น ํ๋๊ทธ๋ฅผ ํ์ธํ์ฌ ์์ ํธ์ถ ์์ฒด๋ฅผ ์๋ํ์ง ์๋๋ก ํ์ต๋๋ค. ์ด๋ ๋ถํ์ํ API ์์ฒญ์ ์ค์ด๊ณ , ์์ ๋ญ๋น๋ฅผ ๋ง๋ ํจ๊ณผ๋ ์์ต๋๋ค.
try:
# LLM API ํธ์ถ ์ , ์ผ์ผ ๋น์ฉ ์ํ ๋ฐ ํฌ๋ ๋ง ์ํ ํ์ธ ๋ก์ง ํฌํจ
# ์: if is_llm_calls_disabled(): raise ServiceDisabledError("LLM ์๋น์ค ์ค๋จ๋จ")
# if get_daily_usage_cost() >= DAILY_COST_LIMIT: raise CostLimitExceededError("์ผ์ผ ๋น์ฉ ์ํ ์ด๊ณผ")
response = your_llm_api_client.generate_content(prompt)
except CostLimitExceededError as e:
logger.error(f"LLM ํธ์ถ ์ค๋จ: {e}")
# ํด๋ฐฑ ๋ก์ง ๋๋ ์ฌ์ฉ์์๊ฒ ์๋ฆผ (์: "ํ์ฌ AI ์๋น์ค ์ด์ฉ์ด ์ด๋ ต์ต๋๋ค.")
except ServiceDisabledError as e:
logger.error(f"LLM ์๋น์ค ๋นํ์ฑํ: {e}")
# ํด๋ฐฑ ๋ก์ง ๋๋ ์ฌ์ฉ์์๊ฒ ์๋ฆผ
์ด์ฒ๋ผ ์์ธ ์ฒ๋ฆฌ ๋ก์ง์ ํตํด LLM ํธ์ถ์ด ์ค๋จ๋์์ ๋, ๋จ์ํ ์๋ฌ๋ฅผ ๋ด๋ฟ๋ ๊ฒ์ด ์๋๋ผ ์ฌ์ฉ์์๊ฒ๋ 'ํ์ฌ AI ์๋น์ค ์ด์ฉ์ด ์ด๋ ต์ต๋๋ค'์ ๊ฐ์ ์๋ด ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ๊ฐ๋ฐ์์๊ฒ๋ ์์ธํ ๋ก๊ทธ๋ฅผ ๋จ๊ฒจ ๋ฌธ์ ์ํฉ์ ํ์ ํ ์ ์๋๋ก ํ์ต๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์์์น ๋ชปํ ๊ณผ๊ธ ํญํ์ ๋ง๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ์๋น์ค์ ์์ ์ฑ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ๊น์ง ๊ณ ๋ คํ ์์คํ ์ ๊ตฌ์ถํ ์ ์์์ต๋๋ค. ์ด์ ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์๋น์ค ์ ์ฒด๊ฐ ๋ฉ์ถ๊ฑฐ๋ ์ ์ ์๋ ์ค๋ฅ๋ฅผ ๋์ง๋ง, ์ด์ ๋ ๋ช ํํ ์ด์ ๋ฅผ ๊ฐ์ง๊ณ ์ ์ด๋ ๋ฐฉ์์ผ๋ก ๋์ํ๊ฒ ๋ ๊ฒ์ด์ฃ .
.ba-pc{display:none}.ba-mo{display:block}@media (min-width:768px){.ba-pc{display:block}.ba-mo{display:none}}
์ค์ ํ๊ฒฝ์์์ ๊ฒ์ฆ๊ณผ ์กฐ์ฌ์ค๋ฌ์ด ํ ์คํธ ๊ณผ์
์ด๋ ๊ฒ ์์คํ ์ ๊ตฌ์ถํ๊ณ ๋๋, ์ ๋ง ์ ์๋ํ๋์ง ํ์ธํ๋ ๊ณผ์ ์ด ํ์ํ์ต๋๋ค. ํนํ ๋น์ฉ๊ณผ ์ง๊ฒฐ๋๋ ๋ถ๋ถ์ด์ด์ ๋์ฑ ์กฐ์ฌ์ค๋ฝ๊ฒ ์ ๊ทผํ๋ค์. ์ ๋ ๋ช ๊ฐ์ง ์๋๋ฆฌ์ค๋ฅผ ๋ง๋ค์ด ์ค์ ํ๊ฒฝ๊ณผ ์ ์ฌํ ์กฐ๊ฑด์์ ํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค. ๋ฌผ๋ก ์ค์ ๋์ด ๋๊ฐ์ง ์๋๋ก ๋ชจ์(mock) API๋ ํ ์คํธ์ฉ ๊ณ์ ์ ํ์ฉํ๋ ๊ฒ์ด ์ค์ํ์ต๋๋ค.
๋จผ์ , ์ผ์ผ ๋น์ฉ ์ํ์ด ์ ๋๋ก ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ๋์ ์ฌ์ฉ๋์ ์ ๋ฐํ๋ ํ
์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ต๋๋ค. ์งง์ ์๊ฐ ์์ ๋ง์ LLM API ํธ์ถ์ ๋ฐ์์์ผ DAILY_COST_LIMIT์ ๋น ๋ฅด๊ฒ ๋๋ฌํ๋๋ก ๋ง๋ค์์ฃ . ์์๋๋ก ์ํ์ ๋๋ฌํ์๋ง์ CostLimitExceededError๊ฐ ๋ฐ์ํ๊ณ LLM ํธ์ถ์ด ์ค๋จ๋๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค. ์ด ๋ถ๋ถ์ get_daily_usage_cost() ํจ์๋ฅผ ํ
์คํธ์ฉ์ผ๋ก ์กฐ์ํ์ฌ ํ์ฌ ๋น์ฉ์ ๋๊ฒ ์ค์ ํ๋ ๋ฐฉ์์ผ๋ก๋ ๊ฒ์ฆํ์ต๋๋ค. ๋ค์์ผ๋ก๋ ์ ๋ถ ํฌ๋ ๋ง ์์ก ๋ชจ๋ํฐ๋ง ์์คํ
์ ํ
์คํธํ์ต๋๋ค. ์ค์ API ์์ก์ ๋ฎ์ ๊ฐ์ผ๋ก ์ค์ ํ๊ธฐ๋ ์ด๋ ค์ฐ๋, your_llm_api_client.get_credit_balance() ๋ถ๋ถ์ ๋ชจ์(mock) ๊ฐ์ฒด๋ก ๋์ฒดํ์ฌ ์์ก์ด WARNING_THRESHOLD์ STOP_THRESHOLD๋ฅผ ๋๋๋ค๋๋ก ์ค์ ํ์ต๋๋ค. ์์ก์ด ๊ฒฝ๊ณ ์๊ณ์น ์ดํ๋ก ๋จ์ด์ง์๋ง์ Slack์ผ๋ก ์๋ฆผ์ด ์ค๋ ๊ฒ์ ํ์ธํ๊ณ , ์ค๋จ ์๊ณ์น ์ดํ์์๋ disable_llm_calls() ํจ์๊ฐ ํธ์ถ๋์ด LLM API ํธ์ถ์ด ๋นํ์ฑํ๋๋ ๊ฒ์ ๊ฒ์ฆํ์ต๋๋ค.
์ด๋ฐ ๊ณผ์ ์ ํตํด ์ ๊ฐ ๊ตฌ์ถํ ์์คํ ์ด ์์ํ๋ ๋๋ก ๋น์ฉ์ ์ ์ดํ๊ณ , ์๋น์ค ์ค๋จ ์ํ์ ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ ํ์ ํ ์ ์์์ต๋๋ค. ์ฒ์์๋ ๋จ์ํ ์ฝ๋ ๋ช ์ค๋ก ํด๊ฒฐ๋ ์ค ์์๋๋ฐ, ์ค์ ๋ก๋ ๋ชจ๋ํฐ๋ง, ์๋ฆผ, ๊ทธ๋ฆฌ๊ณ ์ค์ ํธ์ถ ๋ก์ง๊ณผ์ ํตํฉ๊น์ง ์ฌ๋ฌ ๋ถ๋ถ์ ๊ผผ๊ผผํ ์ฑ๊ฒจ์ผ ํ๋๊ตฐ์. ์ด ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ '์์ ํ'์ด ์ ๋๋ก ๋ฐํ๋ค๋ ์๋๊ฐ์ ๋๋ ์ ์์์ต๋๋ค.
๋ง์น๋ฉฐ
LLM API๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋น์ฉ ๊ด๋ฆฌ๋ ์ ๋ง ์ค์ํ ๋ถ๋ถ์ด๋ผ๋ ๊ฒ์ ๋ค์ ํ๋ฒ ๋๊ผ์ต๋๋ค. ํนํ ์ ์ฒ๋ผ ์ฒ์ ๊ฐ๋ฐ์ ์์ํ๊ณ , ์์์น ๋ชปํ ๋น์ฉ ๋ฌธ์ ๋ก ๊ณจ๋จธ๋ฆฌ๋ฅผ ์๋ ๋ถ๋ค์ด ๋ง์ ๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค. ๋จ์ํ ๋น์ฉ์ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ ๋์ด, ์ ๊ฐ ์ง์ ๋ถ๋ชํ๊ณ ํด๊ฒฐํ ๊ฒ์ฒ๋ผ ์ผ์ผ ๋น์ฉ ์ํ๊ณผ ์ ๋ถ ํฌ๋ ๋ง ์์ก ๋ชจ๋ํฐ๋ง ์์คํ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ์์์น ๋ชปํ ๊ณผ๊ธ ํญํ์ ๋ง๊ณ ์๋น์ค์ ์์ ์ฑ์ ํ๋ณดํ๋ ๋ฐ ํฐ ๋์์ด ๋ฉ๋๋ค. ์ด ๊ธ์ด LLM API๋ฅผ ํ์ฉํ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ถ๋ค๊ป ์์ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ, ์ ์ ๊ฒฝํ์ด ๋ ๋ค๋ฅธ ์ํ์ฐฉ์ค๋ฅผ ์ค์ด๋ ๋ฐ ๊ธฐ์ฌํ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค. ํญ์ ์๋ก์ด ๊ธฐ์ ์ ๋ฐฐ์ฐ๊ณ ์ ์ฉํ๋ ๊ณผ์ ์ ์ค๋ ๋ฉด์๋ ๋์ ์ ์ธ ๊ฒ ๊ฐ์์. ๋ค์๋ฒ์๋ ๋ ๋ค๋ฅธ ๊ฐ๋ฐ ๊ฒฝํ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค. If the result differs, check the version first โ that is the usual cause.

