Helium Agent 설계하기

Helium Agent는 Python으로 구축된 경량 AI 에이전트입니다. 터미널에서 실행되며, 복잡성을 최소화하도록 설계되었습니다.

구축 과정에서의 핵심 설계 결정 사항은 다음과 같습니다:

• 아키텍처 시스템은 플랫(flat) 아키텍처를 사용합니다. 무거운 프레임워크와 깊은 의존성 트리를 피했습니다. OpenAI의 function calling 대신 <action>과 같은 XML 태그를 사용합니다. 이를 통해 에이전트가 특정 모델에 종속되지 않게(model agnostic) 만들었습니다. 어떤 LLM이든 사용할 수 있습니다.

• 의존성 주입을 통한 결합성(Composability) AgenticLoop라고 불리는 단순한 루프를 사용합니다. 이 루프는 모델 호출기(model caller)와 도구 실행기(tool executor)라는 두 가지 입력을 받습니다. 이 한 가지 선택으로 네 가지 모드를 지원할 수 있습니다:

  • 일반 채팅
  • 코딩 워크플로우
  • 하위 에이전트(Subagents)
  • 커스텀 스킬 서브클래스나 복잡한 패턴을 사용하지 않습니다. 그저 두 개의 단순한 함수만 사용합니다.

• 상태 관리(State Management) Helium은 단일 사용자용 도구입니다. 대화 기록과 메모리를 위해 모듈 수준의 싱글톤(singleton)을 사용합니다. 전역 상태(Global state)는 단일 사용자 세션을 표현하는 가장 간단한 방법이며, 과잉 엔지니어링(over-engineering)을 방지합니다.

• 안전 게이트(Safety Gates) 도구 실행을 위해 3단계 시스템을 사용합니다:

  • Safe: 파일 읽기나 검색과 같은 작업을 자동으로 실행합니다.
  • Risky: 파일 쓰기와 같은 작업에 대해 사용자 권한을 요구합니다.
  • Conditional: bash 스크립트와 같은 명령어를 검사하여 위험 여부를 확인합니다. 이를 통해 환각(hallucinating)을 일으키는 모델이 사용자의 파일을 삭제하는 것을 방지합니다.

• 통신 OpenAI SDK 대신 가공되지 않은(raw) HTTP 요청을 사용합니다. 이는 의존성을 줄이고 코드를 투명하게 유지합니다. API로 무엇이 전송되는지 정확히 확인할 수 있습니다.

• 스킬 시스템 스킬은 단순한 Markdown 파일입니다. YAML 프론트매터(frontmatter)가 포함된 텍스트 파일을 작성하여 새로운 스킬을 추가할 수 있습니다. 복잡한 등록 API가 없으므로 누구나 쉽게 플러그인 시스템을 사용할 수 있습니다.

• 배운 점

  1. 의존성 주입은 저비용으로 결합성을 제공합니다.
  2. 시스템 프롬프트는 당신의 API입니다. 이를 일급 코드(first-class code)로 취급하십시오.
  3. 순환 의존성을 해결하기 위해 지연 임포트(lazy imports)가 필요하다면, 모듈 경계가 잘못된 것입니다. 대신 아키텍처를 수정하십시오.

단순함이 확장성을 만듭니다. 특정 사용 사례에 작동하는 가장 단순한 솔루션을 선택하십시오.

출처: https://dev.to/debmalyasen34/designing-helium-agent-1b39

선택 사항 학습 커뮤니티: https://t.me/GyaanSetuAi