AI 모델 및 플랫폼

에이전트 옵스와 자율 주체: 관찰 가능성, 추적 가능성, 그리고 그 이상을 위한 에이전트 어플리케이션

mm
Unite.AI를 Google의 선호 소스에 추가

파운데이션 모델(FM) 기반의 자율 주체의 성장은 복잡한 문제를 해결하는 새로운 방법을 제공했습니다. 이러한 에이전트는 고객 지원부터 소프트웨어 엔지니어링까지 다양한 작업을 수행하며, 복잡한 워크플로우를 통해 推論, 툴 사용, 메모리를 결합합니다.

그러나 이러한 시스템이 능력과 복잡성으로 성장함에 따라, 관찰 가능성, 신뢰성, 및 규정 준수와 관련된 도전이 나타납니다.

이것이 에이전트 옵스가 필요한 이유입니다. 에이전트 옵스는 DevOps와 MLOps를 모델로 하여 파운데이션 모델 기반 에이전트의 수명주기를 관리하기 위한 개념입니다.

에이전트 옵스와 그 임팩트에 대한 기초적인 이해를 제공하기 위해, Liming Dong, Qinghua Lu, 및 Liming Zhu의 최근 논문 에이전트 옵스를 위한 추적 가능한 아티팩트의 분류에서 얻은 통찰력을 제공했습니다. 이 논문은 에이전트 옵스의 포괄적인 탐구를 제공하며, 에이전트의 수명주기를 관리하는 데 필요한 에이전트 옵스의 중요성을 강조합니다. 저자들은 추적 가능한 아티팩트를 분류하고, 관찰 가능성 플랫폼을 위한 주요 기능을 제안하며, 의사 결정 복잡성 및 규제 준수와 같은 도전을 해결합니다.

에이전트 옵스(도구)는 모니터링, 디버깅, 및 최적화를 위한 주요 도구 중 하나로 인식되고 있습니다. 이 도구는 개발자에게 에이전트 워크플로우에 대한 통찰력을 제공하며, 세션 재생, LLM 비용 추적, 및 규정 준수 모니터링과 같은 기능을 제공합니다.

이후에, 우리는 에이전트 옵스의 기능을 튜토리얼 형식으로 살펴보겠습니다.

에이전트 옵스가 무엇인가?

에이전트 옵스는 파운데이션 모델 기반의 자율 주체를 프로덕션에서 설계, 배포, 모니터링, 및 최적화하기 위한 프로세스, 도구, 및 프레임워크를 말합니다. 에이전트 옵스의 목표는 다음과 같습니다:

  • 관찰 가능성: 에이전트의 실행 및 의사 결정 프로세스에 대한 완전한 가시성을 제공합니다.
  • 추적 가능성: 에이전트의 수명주기 동안의 자세한 아티팩트를 캡처하여 디버깅, 최적화, 및 규정 준수를 위한 것입니다.
  • 신뢰성: 모니터링 및 강건한 워크플로우를 통해 일관된 출력을 보장합니다.

에이전트 옵스의 핵심은 전통적인 MLOps를 넘어서, 반복적인 워크플로우, 툴 통합, 및 적응형 메모리를 강조하며, 엄격한 추적 및 모니터링을 유지합니다.

에이전트 옵스가 해결하는 주요 도전

1. 에이전트 시스템의 복잡성

자율 주체는 광범위한 액션 공간에서 작업을 수행하며, 각 단계에서 의사 결정을 요구합니다. 이러한 복잡성은 정교한 계획 및 모니터링 메커니즘을 필요로 합니다.

2. 관찰 가능성 요구 사항

고위험 사용 사례(예: 의료 진단 또는 법적 분석)에서는 세부적인 추적 가능성이 필요합니다. EU AI 법과 같은 규정 준수 또한 강력한 관찰 가능성 프레임워크의 필요성을 강조합니다.

3. 디버깅 및 최적화

다중 단계 워크플로우에서 오류를 식별하거나 중간 출력을 평가하는 것은 에이전트의 동작에 대한 자세한 추적이 없으면 어려운 일입니다.

4. 확장성 및 비용 관리

프로덕션을 위한 에이전트 확장은 지연 시간, 토큰 사용량, 및 운영 비용과 같은 메트릭을 모니터링하여 효율성을 보장하는 데 필요합니다.

에이전트 옵스 플랫폼의 핵심 기능

1. 에이전트 생성 및 사용자 정의

개발자는 구성 요소 레지스트리를 사용하여 에이전트를 구성할 수 있습니다:

  • 역할: 책임을 정의합니다(예: 연구자, 계획자).
  • 가드레일: 에이전트의 행동을 제한하기 위한 제약을 설정합니다.
  • 툴킷: API, 데이터베이스, 또는 지식 그래프와의 통합을 가능하게 합니다.

에이전트는 특정 데이터셋, 툴, 및 프롬프트와 상호 작용하도록 설계되며, 사전 정의된 규칙을 준수합니다.

2. 관찰 가능성 및 추적

에이전트 옵스는 에이전트의 워크플로우에 대한 자세한 로그를 캡처합니다:

  • 추적: 에이전트의 워크플로우에서 각 단계를 기록합니다.
  • 스팬: 추적을 더 세분화된 단계로 나눕니다(예: 검색, 임베딩 생성, 툴 호출).
  • 아티팩트: 중간 출력, 메모리 상태, 및 프롬프트 템플릿을 추적하여 디버깅을 지원합니다.

관찰 가능성 툴은 이러한 추적을 시각화하여 병목 현상 또는 오류를 식별하는 데 도움이 됩니다.

3. 프롬프트 관리

프롬프트 엔지니어링은 에이전트의 행동을 형성하는 데 중요한 역할을 합니다. 주요 기능은 다음과 같습니다:

  • 버전 관리: 프롬프트의 반복을 추적하여 성능 비교를 수행합니다.
  • 주입 탐지: 프롬프트 내의 악의적인 코드 또는 입력 오류를 식별합니다.
  • 최적화: 체인-오브-사고(Chain-of-Thought) 또는 트리-오브-사고와 같은 기술을 사용하여 推論 능력을 향상합니다.

4. 피드백 통합

사용자 피드백은 반복적인 개선에 중요합니다:

  • 명시적 피드백: 사용자가 출력을 평가하거나 댓글을 남깁니다.
  • 암시적 피드백: 작업 시간 또는 클릭률과 같은 메트릭을 분석하여 효과를 평가합니다.

이 피드백 루프는 에이전트의 성능과 테스트에 사용되는 평가 기준을 모두 개선합니다.

5. 평가 및 테스트

에이전트 옵스 플랫폼은 다음과 같은 항목에 대한 철저한 테스트를 제공합니다:

  • 벤치마크: 에이전트의 성능을 산업 표준과 비교합니다.
  • 단계별 평가: 워크플로우의 중간 단계를 평가하여 올바름을 보장합니다.
  • 트라제토리 평가: 에이전트가 취한 의사 결정 경로를 검증합니다.

6. 메모리 및 지식 통합

에이전트는 단기 메모리를 사용하여 컨텍스트(예: 대화 기록)를 저장하고, 장기 메모리를 사용하여 과거 작업에서 얻은 통찰력을 저장합니다. 이것은 에이전트가 동적으로 적응하면서 시간이 지남에 따라 일관성을 유지할 수 있도록 합니다.

7. 모니터링 및 메트릭

포괄적인 모니터링은 다음과 같은 항목을 추적합니다:

  • 지연 시간: 최적화를 위한 응답 시간을 측정합니다.
  • 토큰 사용량: 리소스 소비를 모니터링하여 비용을 제어합니다.
  • 품질 메트릭: 관련성, 정확성, 및 유해성과 같은 메트릭을 평가합니다.

이러한 메트릭은 사용자 세션, 프롬프트, 및 워크플로우와 같은 차원에 걸쳐 시각화되어 실시간 개입을 가능하게 합니다.

추적 가능한 아티팩트의 분류

이 논문은 에이전트 옵스의 관찰 가능성을 위한 아티팩트의 체계적인 분류를 도입합니다:

  • 에이전트 생성 아티팩트: 역할, 목표, 및 제약과 관련된 메타데이터입니다.
  • 실행 아티팩트: 툴 호출, 서브태스크 큐, 및 推論 단계의 로그입니다.
  • 평가 아티팩트: 벤치마크, 피드백 루프, 및 평가 메트릭입니다.
  • 추적 아티팩트: 세션 ID, 추적 ID, 및 스팬을 위한 자세한 모니터링을 위한 것입니다.

이 분류는 에이전트의 수명주기 전반에 걸쳐 일관성과 명확성을 보장하여 디버깅과 규정 준수를 더 쉽게 만듭니다.

에이전트 옵스 (도구) 워크스루

이 섹션은 에이전트 옵스를 설정하고 사용하여 에이전트를 모니터링 및 최적화하는 방법에 대한 가이드를 제공합니다.

단계 1: 에이전트 옵스 SDK 설치

에이전트 옵스를 설치하려면 다음 명령을 사용합니다:

pip install agentops

단계 2: 에이전트 옵스 초기화

에이전트 옵스를 초기화하려면 API 키를 사용합니다. API 키를 보안을 위해 .env 파일에 저장합니다.

# 에이전트 옵스 초기화
import agentops
import os
from dotenv import load_dotenv

<p># 환경 변수 로드
load_dotenv()
AGENTOPS_API_KEY = os.getenv(&quot;AGENTOPS_API_KEY&quot;)</p>

<p># 에이전트 옵스 클라이언트 초기화
agentops.init(api_key=AGENTOPS_API_KEY, default_tags=[&quot;my-first-agent&quot;])</p>

이 단계는 모든 LLM 상호작용에 대한 관찰 가능성을 설정합니다.

단계 3: 데코레이터를 사용하여 동작 기록

특정 함수를 데코레이터를 사용하여 기록할 수 있습니다. 데코레이터는 함수의 매개변수, 실행 시간, 및 출력을 추적합니다.

from agentops import record_action

<p>@record_action(&quot;custom-action-tracker&quot;)
def is_prime(number):
&quot;&quot;&quot;소수인지 확인합니다.&quot;&quot;&quot;
if number &amp;lt; 2:
return False
for i in range(2, int(number**0.5) + 1):
if number % i == 0:
return False
return True</p>

이 함수는 이제 에이전트 옵스 대시보드에서 로그로 남습니다.

단계 4: 이름이 지정된 에이전트 추적

이름이 지정된 에이전트를 사용하는 경우, 에이전트와 관련된 모든 동작 및 이벤트를 추적하기 위해 데코레이터를 사용합니다.

from agentops import track_agent

<p>@track_agent(name=&quot;math-agent&quot;)
class MathAgent:
def __init__(self, name):
self.name = name</p>

<p>def factorial(self, n):
&quot;&quot;&quot;요인수를 재귀적으로 계산합니다.&quot;&quot;&quot;
return 1 if n == 0 else n * self.factorial(n - 1)</p>

이 에이전트 내의 모든 동작 또는 LLM 호출은 “math-agent” 태그와 관련됩니다.

단계 5: 다중 에이전트 지원

다중 에이전트를 사용하는 시스템의 경우, 에이전트 간의 이벤트를 추적하여 더 나은 관찰 가능성을 제공할 수 있습니다.

@track_agent(name=&quot;qa-agent&quot;)
class QAAgent:
def generate_response(self, prompt):
return f&quot;응답: {prompt}&quot;

<p>@track_agent(name=&quot;developer-agent&quot;)
class DeveloperAgent:
def generate_code(self, task_description):
return f&quot;# {task_description}을 수행하는 코드&quot;</p>

<p>qa_agent = QAAgent()
developer_agent = DeveloperAgent()</p>

<p>response = qa_agent.generate_response(&quot;에이전트 옵스에 관하여 설명해 주세요.&quot;)
code = developer_agent.generate_code(&quot;피보나치 수열을 계산&quot;)</p>

각 호출은 에이전트 옵스 대시보드에서 해당 에이전트의 추적에 나타납니다.

단계 6: 세션 종료

세션이 종료되었음을 표시하려면 end_session 메서드를 사용합니다. 세션 상태(Success 또는 Fail)와 이유를 포함시킬 수 있습니다.

# 세션 종료
agentops.end_session(state=&quot;Success&quot;, reason=&quot;워크플로우 완료&quot;)

이렇게 하면 모든 데이터가 에이전트 옵스 대시보드에서 로그로 남습니다.

단계 7: 에이전트 옵스 대시보드에서 시각화

에이전트 옵스 대시보드를 방문하여 다음을 탐색합니다:

  • 세션 재생: 단계별 실행 추적.
  • 분석: LLM 비용, 토큰 사용량, 및 지연 시간 메트릭.
  • 오류 감지: 실패 또는 재귀 루프를 식별하고 디버깅합니다.

강화된 예시: 재귀적 사고 감지

에이전트 옵스는 또한 에이전트 워크플로우에서 재귀 루프를 감지하는 기능을 지원합니다. 이전 예시를 재귀 감지로 확장해 보겠습니다:

@track_agent(name=&quot;recursive-agent&quot;)
class RecursiveAgent:
def solve(self, task, depth=0, max_depth=5):
&quot;&quot;&quot;재귀적으로 작업을 해결합니다.&quot;&quot;&quot;
if depth &gt;= max_depth:
return f&quot;최대 재귀 깊이 도달: {task}&quot;
return self.solve(task, depth + 1)

<p>recursive_agent = RecursiveAgent()
output = recursive_agent.solve(&quot;데이터베이스 쿼리 최적화&quot;)
print(output)</p>

에이전트 옵스는 재귀를 세션의 일부로 로그합니다. 이를 통해 무한 루프 또는 과도한 깊이를 식별할 수 있습니다.

결론

파운데이션 모델 기반의 자율 주체는 산업 전반에 걸쳐 복잡한 문제를 해결하는 새로운 방법을 제공했습니다. 그러나 이러한 에이전트의 복잡성은 관찰 가능성, 추적 가능성, 및 신뢰성과 관련된 도전을 가져옵니다. 에이전트 옵스는 이러한 도전을 해결하기 위한 필수적인 프레임워크를 제공하며, 개발자에게 에이전트를 모니터링, 최적화, 및 규정 준수를 위한 도구를 제공합니다.

지난 5년 동안私は Machine Learning과 Deep Learning의 매혹적인 세계에 몰두해 왔습니다.私の熱情と専門知識は私を50以上의多様한 소프트웨어 엔지니어링 프로젝트에 기여하게 했으며, 특히 AI/ML에 중점을 두었습니다.私の継続的な 호기심은 또한私를自然어 처리로 끌어들였습니다.私は이 분야를さらに 탐구하기를熱望합니다.