Adala: 정답 데이터로 스스로 학습하는 자율 데이터 라벨링 에이전트 프레임워크

Adala 소개

Adala는 이름 그대로 Autonomous DAta (Labeling) Agent, 즉 자율 데이터 라벨링 에이전트를 만들기 위한 프레임워크입니다. 데이터 처리, 특히 다양한 형태의 데이터 라벨링 작업에 특화된 에이전트를 구현하는 데 초점을 맞추고 있습니다. 대규모 데이터셋에 라벨을 붙이는 작업은 반복적이고 비용이 많이 드는데, Adala는 이 과정을 사람이 직접 규칙을 다듬는 대신 에이전트가 스스로 학습하며 개선하도록 설계했습니다.

Adala 에이전트가 자율적이라는 것은, 사람이 매번 프롬프트를 손보지 않아도 에이전트가 하나 이상의 스킬(skill)을 반복 학습으로 스스로 습득한다는 의미입니다. 이 학습 과정은 에이전트가 놓인 환경(environment)과 관찰, 반영(reflection)에 영향을 받습니다. 사용자는 정답 데이터셋(ground truth dataset)을 제공해 환경을 정의하고, 에이전트는 이를 기준으로 자신의 예측을 검증하며 스킬을 다듬습니다. 각 에이전트가 스킬을 학습하고 적용하는 실행 공간을 Adala에서는 런타임(runtime)이라 부르며, 이는 LLM과 같은 의미로 사용됩니다.

Adala는 AI 엔지니어가 모듈화된 스킬로 프로덕션 수준의 에이전트 시스템을 설계하거나, 머신러닝 연구자가 복잡한 문제 분해와 인과 추론을 실험하거나, 데이터 과학자가 파이썬 노트북에서 대용량 데이터프레임을 전처리·후처리하는 등 다양한 용도로 활용할 수 있습니다. 본 게시물에서는 Adala의 자율 학습 방식과 스킬 실행 구조, 그리고 설치 및 기본 사용법을 정리합니다.

Adala의 자율 학습 방식

Adala의 핵심은 에이전트가 정답 데이터를 기준으로 자신의 스킬을 반복해서 개선하는 학습 루프에 있습니다. 아래 그림은 분류(Classification) 스킬을 학습하는 과정을 보여줍니다.

학습 단계에서 환경은 입력으로 작동하며 에이전트에 정답 데이터셋을 제공합니다. 에이전트는 현재 스킬의 지시문(instructions)에 따라 예측을 생성하고, 이 예측을 외부 시스템에서 전달된 정답 데이터와 대조해 검증합니다. 예측이 정답과 어긋나면(예를 들어 예측은 Negative인데 정답은 Positive인 경우) 에이전트는 그 오류를 분석해 경험을 쌓고, 학습한 내용을 바탕으로 스킬의 지시문을 다듬습니다. 이때 실행되는 코드는 런타임 안에서 동작하고, 오류에서 얻은 경험은 장기 메모리에 저장되어 이후 판단에 활용됩니다. 이렇게 예측과 검증, 분석, 개선이 반복되면서 스킬의 지시문이 정답 데이터에 맞게 조정됩니다.

이 구조 덕분에 Adala 에이전트는 정답 데이터라는 근거 위에서 동작합니다. 사용자는 스킬마다 원하는 출력 형식과 제약을 지정할 수 있어, 특정 지침을 엄격히 따르게 하거나 학습에 따라 더 유연하게 결과를 내도록 조절할 수 있습니다. 하나의 스킬을 여러 런타임에 배치할 수 있다는 점도 특징으로, 서로 다른 런타임을 학생과 교사(student/teacher) 역할로 나누는 구성도 가능합니다.

Adala의 스킬 실행과 결과물

학습이 끝난 스킬은 환경 밖의 새로운 데이터에 적용되어 예측 엔진처럼 동작합니다. 아래 그림은 스킬을 실행하는 구조입니다.

실행 단계에서는 데이터프레임이나 비정형 데이터가 입력으로 들어오고, Adala 에이전트가 분류·요약·데이터 생성 같은 스킬을 적용해 구조화된 출력을 만들어냅니다. 복잡하거나 모호한 작업에서는 라벨링 도구, Slack 같은 채팅, 외부 지식 등 환경에 피드백을 요청해 출력을 검증할 수 있습니다. 출력은 예측 결과와 점수를 담은 표 형태로 정리됩니다. Adala가 기본으로 제공하는 스킬에는 텍스트를 미리 정의된 라벨로 분류하는 분류 스킬, 사고 사슬(Chain-of-Thought) 추론을 활용하는 분류 스킬, 요약, 질의응답, 번역, 텍스트 생성, 여러 스킬을 순서대로 연결하는 스킬 세트, 텍스트 예시에서 온톨로지를 추론하는 스킬 등이 있습니다.

Adala 설치 및 사용법

Adala는 Python 3.8부터 3.11까지를 지원하며, pip으로 설치합니다.

pip install adala

최신 변경 사항을 바로 쓰려면 GitHub에서 직접 설치할 수 있고, 개발용으로는 저장소를 클론한 뒤 poetry install 로 설치합니다. 기본 런타임으로 OpenAI를 사용할 경우 OPENAI_API_KEY 환경 변수를 설정합니다.

export OPENAI_API_KEY='your-openai-api-key'

아래는 파이썬 노트북에서 Adala를 라이브러리로 사용하는 예시입니다. 정답이 포함된 학습 데이터셋으로 환경을 만들고, 감정 분류 스킬을 정의한 뒤, 학습을 거쳐 새로운 데이터에 예측을 수행합니다.

import pandas as pd

from adala.agents import Agent
from adala.environments import StaticEnvironment
from adala.skills import ClassificationSkill
from adala.runtimes import OpenAIChatRuntime

# 정답(sentiment)이 포함된 학습 데이터셋
train_df = pd.DataFrame([
    ["It was the negative first impressions, and then it started working.", "Positive"],
    ["Not loud enough and doesn't turn on like it should.", "Negative"],
    ["I don't know what to say.", "Neutral"],
], columns=["text", "sentiment"])

# 라벨이 없는 테스트 데이터셋
test_df = pd.DataFrame([
    "All three broke within two months of use.",
    "The device worked for a long time, can't say anything bad.",
], columns=["text"])

agent = Agent(
    environment=StaticEnvironment(df=train_df),
    skills=ClassificationSkill(
        name='sentiment',
        instructions="Label text as positive, negative or neutral.",
        labels=["Positive", "Negative", "Neutral"],
        input_template="Text: {text}",
        output_template="Sentiment: {sentiment}"
    ),
    runtimes={'openai': OpenAIChatRuntime(model='gpt-4o')},
    teacher_runtimes={'default': OpenAIChatRuntime(model='gpt-4o')},
    default_runtime='openai',
)

agent.learn(learning_iterations=3, accuracy_threshold=0.95)
predictions = agent.run(test_df)

agent.learn() 은 정답 데이터를 기준으로 정확도가 임계값에 도달할 때까지 스킬을 반복 학습하고, agent.run() 은 학습한 스킬을 새 데이터에 적용해 예측을 반환합니다. OpenAI 대신 Claude나 Gemini 등 OpenAI 호환 LLM을 쓰고 싶다면 OpenRouter를 통해 런타임의 base_urlmodel 을 지정하는 방식으로 연결할 수 있습니다. 각 스킬별 예제는 저장소의 examples/ 디렉토리에 Colab 노트북으로 정리되어 있습니다.

Adala의 라이선스

Adala는 Apache License 2.0으로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.

:books: Adala 문서 사이트

:github: Adala 프로젝트 GitHub 저장소




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! 텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. :smiley:

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: