본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 03. 02:14

Kong을 사용하여 CrewAI 에이전트별 과금 설정하는 방법

요약

CrewAI 멀티 에이전트 시스템에서 각 에이전트별 토큰 사용량을 추적하고 Kong Konnect Metering & Billing을 통해 개별 과금하는 방법을 다룹니다. 에이전트별 역할에 따른 비용 차이를 정확히 반영하여 SaaS 제품의 수익화 모델을 구축하는 가이드를 제공합니다.

핵심 포인트

  • CrewAI 에이전트별 토큰 사용량 추적 및 개별 과금 구현
  • Kong Konnect Metering & Billing을 활용한 사용량 기반 과금 체계 구축
  • 멀티 에이전트 SaaS 제품의 정교한 수익화 모델 설계 방법
  • 에이전트 역할별 비용 불균형 문제 해결

단일 AI 에이전트에 대한 과금(Billing)을 설정하는 것은 쉽습니다. 에이전트가 토큰(Tokens)을 사용하면, 여기에 가격을 곱하여 인보이스(Invoice)를 보내면 됩니다. 하지만 CrewAI 크루(Crew)에 대한 과금을 설정하는 것은 더 어렵습니다. 크루는 여러 에이전트가 함께 작동합니다. 각 에이전트는 토큰을 서로 다르게 사용합니다. 이 모든 것을 하나의 숫자로 합쳐버리면 어떤 에이전트가 비용을 발생시켰는지 알 수 없습니다.

이 튜토리얼에서는 CrewAI 멀티 에이전트 앱을 위한 에이전트별 토큰 과금 시스템을 구축할 것입니다. CrewAI의 각 에이전트 역할(Role)별 토큰 사용량을 추적하고, 이 사용량을 Kong Konnect Metering & Billing (OpenMeter의 관리형 버전)으로 전송하여, 하나의 크루 실행을 에이전트당 하나씩 총 세 개의 인보이스 항목(Line items)으로 변환할 것입니다.

이것이 중요한 이유는 다음과 같습니다. 제가 연구 중인 CrewAI 리서치 크루의 경우, Writer 에이전트는 Researcher 에이전트보다 약 두 배 많은 토큰을 사용합니다. 토큰당 단일 가격을 적용하면 Researcher 중심의 실행은 과다 청구되고, Writer 중심의 실행은 과소 청구됩니다. 에이전트별 과금은 이 문제를 해결합니다. 각 에이전트는 자신만의 미터 슬라이스(Meter slice), 자신만의 필터, 그리고 자신만의 가격을 갖게 됩니다.

이는 모든 멀티 에이전트 SaaS (Multi-agent SaaS) 제품, **CrewAI 에이전트를 수익화(Monetize)**하려는 팀, 그리고 **AI 에이전트를 위한 사용량 기반 과금 (Usage-based billing)**을 설정하려는 모든 팀에게 공통적인 요구사항입니다. 동일한 패턴은 LangChain 에이전트, AutoGen 크루, 또는 호출당 토큰 사용량을 노출하는 모든 멀티 에이전트 프레임워크에 적용될 수 있습니다.

이 튜토리얼을 마칠 때쯤이면, Kong Metering and Billing에서 여러분의 CrewAI 각 에이전트에 대한 과금이 다음과 같이 표시되는 것을 확인할 수 있습니다.

전체 앱은 약 200줄의 Python 코드로 구성되어 있습니다. 설정에는 처음부터 끝까지 약 30분이 소요됩니다.

전체 참조 리포지토리(Repo): github.com/tejakummarikuntla/Billing-CrewAI-with-KongMB. 작동하는 코드를 먼저 훑어보고 싶다면 클론(Clone)하거나, 아래 단계를 따라 파일별로 직접 구축해 보세요.

git clone https://github.com/tejakummarikuntla/Billing-CrewAI-with-KongMB.git
cd Billing-CrewAI-with-KongMB

아키텍처 (Architecture)

모든 LLM 호출은 두 개의 이벤트를 생성합니다. 하나는 프롬프트 (Prompt, 입력) 토큰을 위한 것이고, 다른 하나는 완성 (Completion, 출력) 토큰을 위한 것입니다. 두 이벤트 모두 agent_role을 포함합니다. Kong의 미터 (Meter)는 에이전트별로 토큰 사용량을 그룹화합니다. 각 기능 (Feature)은 미터에서 특정 에이전트의 할당량을 가져옵니다. 플랜 (Plan)은 각 기능에 토큰당 가격을 부착합니다. 결과적으로 인보이스 (Invoice)에는 에이전트당 하나씩, 총 세 개의 항목 (Line items)이 생성됩니다.

구축하게 될 내용

이 튜토리얼은 두 부분으로 구성됩니다: CrewAI를 사용하는 Python 앱과 Kong Konnect Metering & Billing에서 구성할 리소스 세트입니다.

파트 1: Python 앱 (CrewAI)

  • 세 명의 에이전트로 구성된 연구 크루 (Research crew). Researcher (연구원), Analyst (분석가), Writer (작가)가 있습니다. 각 에이전트는 고유한 역할 (Role), 목표 (Goal), 그리고 배경 이야기 (Backstory)를 가집니다. 이들은 순차적으로 실행됩니다: Researcher가 사실을 수집하면, Analyst가 핵심 통찰을 추출하고, Writer가 그 통찰을 한 페이지 분량의 브리핑으로 변환합니다.

  • 엔트리 포인트 스크립트 (Entry-point script). API 키를 로드하고, 크루를 구축하여 실행한 뒤, 에이전트별 토큰 요약 정보를 출력합니다.

파트 2: 과금 설정 (Kong Konnect Metering & Billing)

  • 미터 (A meter). 미터는 Kong에게 어떤 유입 이벤트(incoming events)를 카운트할지 알려주는 규칙입니다. 우리는 crewai.llm_call 이벤트를 감시하고 토큰을 합산하는 하나의 미터를 생성합니다.
  • 세 가지 기능, 에이전트 역할당 하나씩 (Three features, one per agent role). 기능(Feature)은 차원 값(dimension value)에 의해 필터링된 미터의 명명된 "슬라이스(slice)"입니다. Researcher 토큰용 기능 하나, Analyst 토큰용 기능 하나, Writer 토큰용 기능 하나를 생성합니다. 각 기능은 agent_role을 통해 미터를 필터링합니다.
  • 세 개의 요금표를 가진 플랜 (A plan with three rate cards). 플랜은 기능들을 그룹화하고 가격을 할당합니다. 우리의 플랜 이름은 CrewAI Research Pro입니다. Researcher 토큰당 $0.0001, Analyst 토큰당 $0.0002, Writer 토큰당 $0.0005를 부과합니다.
  • 고객 및 활성 구독 (A customer and an active subscription). 고객은 acme입니다. 구독은 고객을 플랜에 연결합니다. 그러면 사용량 및 인보이스(invoice) 값이 Konnect 포털에 나타납니다.

repo 내 파일들

파일역할
crew.py세 명의 에이전트(Researcher, Analyst, Writer)를 구축하고, 태스크(tasks)를 정의하며, 이들을 순차적인 Crew로 연결합니다. 에이전트의 role 문자열은 모든 과금 이벤트에 태그로 붙게 됩니다.
main.py엔트리 포인트(Entry point). .env를 로드하고, 리스너(listener)를 인스턴스화하며, 크루(crew)를 구축하고, kickoff()를 실행한 뒤 최종 브리핑과 에이전트별 사용량을 출력합니다.
setup_kong.py일회성 프로비저너(provisioner). Kong M&B API를 통해 미터, 세 개의 필터링된 기능, 플랜, 고객 및 활성 구독을 생성합니다. 재생성 전 이전 실행 결과물을 정리하려면 --teardown을 전달하세요.
requirements.txt세 가지 의존성(deps): crewai, httpx, python-dotenv. LiteLLM이나 LangChain은 포함되지 않습니다.
.env.example네 개의 비밀 값(secrets)과 세 개의 설정 값(config values)을 위한 템플릿입니다.

사전 요구 사항 (Prerequisites)

  • Python 3.10, 3.11, 3.12 또는 3.13 (CrewAI는 Python 3.14 미만 버전이 필요합니다)
  • OpenAI API 키
  • 무료 Kong Konnect 계정: konghq.com
  • Metering & Billing 쓰기 권한이 있는 Konnect 개인 액세스 토큰 (Personal Access Token)

단계 (Steps)

🧑‍💻 Part 1: Python 앱 구축 (CrewAI)

  1. 프로젝트 설정

  2. 리서치 크루 (research crew) 정의

  3. 크루 실행 및 에이전트별 토큰 확인

🧾 Part 2: Kong Metering & Billing에서 과금 설정

  1. 하나의 스크립트로 Kong 프로비저닝 (또는 수동 경로로 건너뛰기)

  2. 미터 (meter) 생성

  3. 에이전트 역할(agent role)당 하나의 기능 (feature) 생성

  4. 세 개의 요금표 (rate cards)를 가진 플랜 (plan) 생성

  5. 크루를 다시 실행하고 사용량 확인

목차

  • 프로젝트 설정

  • 리서치 크루 (research crew) 정의

  • 크루 실행 및 에이전트별 토큰 확인

  • 하나의 스크립트로 Kong 프로비저닝

  • 미터 (meter) 생성

  • 에이전트 역할당 하나의 기능 (feature) 생성

  • 세 개의 요금표 (rate cards)를 가진 플랜 (plan) 생성

  • 크루를 다시 실행하고 사용량 확인

프로젝트 설정

새 폴더와 Python 가상 환경 (virtual environment)을 생성합니다:

mkdir crewai-mb && cd crewai-mb
python3.12 -m venv .venv
source .venv/bin/activate

세 개의 고정된 의존성 (dependencies). LangChain도, LiteLLM도 없으며, 내부적으로 숨겨진 기능도 없습니다.

# requirements.txt
crewai>=1.14.0,<2.0.0
httpx>=0.27.0
...

설치:

pip install -r requirements.txt

코드 옆에 .env.example 파일을 생성합니다. 이곳에 API 키와 기타 설정 정보가 저장됩니다:

# .env.example

# OpenAI API key (https://platform.openai.com/api-keys 에서 발급)
...

KONG_INGEST_URL은 지역(region)별로 다릅니다. 미국(US) 조직은 us.api.konghq.com을 사용하고, 유럽(EU) 조직은 eu.api.konghq.com을, 호주(AU) 조직은 au.api.konghq.com을 사용합니다. 잘못된 지역을 사용하면 이벤트가 조용히 거부됩니다. Konnect 조직 설정에서 본인의 지역을 확인하세요.

.env.example.env로 복사하고 실제 값을 입력합니다. 비밀 정보가 커밋되지 않도록 .gitignore.env를 추가하세요:

# .gitignore
.venv/
__pycache__/
...

리서치 크루 (research crew) 정의

세 명의 에이전트, 세 개의 작업이 순차적으로 실행됩니다. 에이전트의 role (역할)은 가장 중요한 필드입니다. 역할 문자열은 모든 과금 이벤트 (billing event)에 부착되며 인보이스 (invoice)에 표시되는 내용입니다. 고객의 청구서에 표시되었을 때 만족스러울 만한 이름을 선택하세요.

# crew.py
"""3인 에이전트 연구 크루: Researcher -> Analyst -> Writer."""

...

CrewAI에는 내장된 이벤트 버스 (event bus)가 있습니다. 에이전트 내부의 모든 LLM 호출은 LLMCallCompletedEvent를 발생시킵니다. 이 이벤트는 토큰 수 (token count), 모델 이름, 그리고 에이전트의 역할 (role)을 포함합니다. 이를 활용하기 위해 BaseEventListener를 상속받고 핸들러 (handler)를 등록합니다.

# billing.py
"""CrewAI를 위한 에이전트별 토큰 과금 리스너 (listener).

...

이 코드에서 주목할 만한 세 가지 사항은 다음과 같습니다.

LLM 호출당 하나의 이벤트가 아닌 두 개의 이벤트가 발생합니다. 리스너는 입력 토큰 (input tokens)에 대해 하나의 이벤트를, 출력 토큰 (output tokens)에 대해 하나의 이벤트를 보냅니다. 지금 이들을 분리해 두면 나중에 서로 다른 요율 (rates)로 과금할 수 있습니다.

안전한 재시도 (retries)를 위한 고유 이벤트 ID. 각 이벤트 ID는 CrewAI의 call_id, 토큰 유형 (input 또는 output), 그리고 짧은 무작위 문자열로 구성됩니다. Kong은 idsource를 기준으로 이벤트를 중복 제거 (deduplicate)하므로, 이 형식은 입력/출력 분리를 유지하면서도 재시도를 안전하게 만들어 줍니다.

에러는 발생(raise)하지 않고 로그로 기록됩니다. Kong이 잠시 다운되더라도 크루 실행은 계속됩니다. 고객의 실행이 중단되는 것보다는 이벤트 하나가 누락되는 것이 낫습니다. 프로덕션 (production) 환경에서는 누락된 이벤트를 위한 재시도 큐 (retry queue)를 추가하세요.

하단의 from_env() 헬퍼 (helper) 함수는 main.py.env 값으로부터 리스너를 구축할 때 사용합니다.

크루를 실행하고 에이전트별 토큰 확인하기

진입점 (entry-point) 스크립트는 .env를 로드하고, 리스너를 구축하며 (__init__ 과정에서 이벤트 버스에 스스로를 등록함), 크루를 시작합니다.

# main.py
"""연구 크루를 실행하고 에이전트별 토큰 사용량을 Kong M&B로 전송합니다."""

...

마지막에 나오는 에이전트별 요약은 listener.summary()에서 가져옵니다. 리스너는 이벤트가 발생할 때마다 메모리 내에서 토큰을 추적하고, 실행이 끝나면 이를 형식화 (format)합니다.

실행 방법:

python main.py "Strategies for monetizing developer tools with usage-based pricing"

각 에이전트가 사고하는 과정에서 CrewAI의 상세 출력 (verbose output)이 표시된 후, 최종 브리핑 (briefing)과 과금 요약 (billing summary)이 나타납니다. 제가 실행했을 때의 결과 중 하나는 다음과 같습니다:

개별 에이전트 토큰 사용량:
Researcher: 입력= 154, 출력= 453, 총합= 607
Analyst: 입력= 587, 출력= 176, 총합= 763
Writer: 입력= 779, 출력= 421, 총합= 1200
Kong으로 전송된 이벤트들

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0