LangChain 에이전트를 위한 사전 예산 확인 도구 개발
Built a pre-flight budget check for LangChain agents. stops expensive runs before they hit the API
핵심 요약
LangChain 에이전트 실행 전 예산을 미리 확인해 과도한 비용 지출을 방지하는 데코레이터 도구를 개발함.
- 사전 예산 확인 — 에이전트 실행 전 예산을 검사해 비용 초과를 방지함.
- 데코레이터 방식 — 함수를 감싸는 방식으로 LangChain, LangGraph 등 어디에나 적용 가능함.
- 오픈소스 공개 — 누구나 사용할 수 있도록 GitHub에 코드를 공개함.
- 비용 관리 고민 — 사후 청구 방식의 한계를 극복하기 위해 사전 차단 방식을 도입함.
유료 고객을 대상으로 LangChain 에이전트를 운영하면서 계속 같은 문제에 부딪혔습니다. 간단한 쿼리에는 0.40달러, 복잡한 쿼리에는 18달러까지 비용이 발생하더군요. 저는 고정 월 요금을 받고 있었는데, 비용이 많이 발생하는 달에는 손해를 보고 있었습니다.
해결책은 명확해 보였습니다. 바로 사용량 기반 과금이죠. 하지만 제가 시도했던 모든 도구(Stripe metered, Metronome)는 사용량을 사후에 기록합니다. 청구가 기록될 때쯤이면 이미 비싼 작업은 완료된 상태죠.
그래서 저는 에이전트 함수를 감싸고 LangChain 체인이 실행되기 전에 예산을 확인하는 데코레이터를 만들었습니다.
from agentbill import meter, BudgetExhaustedError
@meter(event="research_run", customer_id_from="customer_id", preflight=True)
async def run_agent(customer_id: str, query: str) -> str:
chain = prompt | llm | parser
return await chain.ainvoke({"query": query})
# 고객의 크레딧이 0이면 chain.ainvoke() 실행 전에 BudgetExhaustedError 발생
# 성공하면 자동으로 1 크레딧 기록
어떤 LangChain 체인, LangGraph 워크플로우, 혹은 원시 LLM 호출과도 작동합니다. 데코레이터는 함수 내부가 무엇인지 신경 쓰지 않습니다.
성공 시에만 과금하고 싶다면 결과 기반 과금도 지원합니다.
@meter(
event="ticket_resolved",
customer_id_from="customer_id",
units=lambda result: 5 if result["resolved"] else 0
)
async def resolve_ticket(customer_id: str, ticket_id: str) -> dict:
...
오픈소스: github.com/marketinglior-pixel/agentbill pip install agentbill-sdk
다른 분들은 프로덕션 환경에서 비용 관리를 어떻게 하고 계신지 궁금합니다. 사전 확인을 하고 계신가요, 아니면 사후에 레이트 리미트만 걸고 계신가요?


