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가 없으므로 누구나 쉽게 플러그인 시스템을 사용할 수 있습니다.
• 배운 점
- 의존성 주입은 저비용으로 결합성을 제공합니다.
- 시스템 프롬프트는 당신의 API입니다. 이를 일급 코드(first-class code)로 취급하십시오.
- 순환 의존성을 해결하기 위해 지연 임포트(lazy imports)가 필요하다면, 모듈 경계가 잘못된 것입니다. 대신 아키텍처를 수정하십시오.
단순함이 확장성을 만듭니다. 특정 사용 사례에 작동하는 가장 단순한 솔루션을 선택하십시오.
출처: https://dev.to/debmalyasen34/designing-helium-agent-1b39
선택 사항 학습 커뮤니티: https://t.me/GyaanSetuAi
