Tool and Agent Registry
도구·에이전트 레지스트리
문제의 배경
에이전틱 생태계가 자라면 전문 에이전트와 가용 도구의 수가 빠르게 늘어난다. 에이전트들이 서로의 기능을 미리 아는 정적이고 하드코딩된 방식은 부서지기 쉽고 유지가 불가능해진다.
맥락
느슨한 결합을 촉진하고 시스템이 진화하도록 하려는 모든 멀티 에이전트 또는 도구 중심 시스템에 근본적이다. 에이전트가 설계 시점에 명시적으로 프로그래밍되지 않은 역량을 동적으로 발견하고 활용하게 하는 기반이다.
문제
새 도구와 에이전트가 끊임없이 추가되는 크고 진화하는 시스템에서, 에이전트가 과업 완수에 필요한 역량을 갖춘 올바른 도구나 다른 에이전트를 어떻게 찾을 것인가.
해법 — 세 단계
- 등록 — 각 도구와 에이전트가 get_supplier_quote 같은 역량 이름, 무엇을 하는지에 대한 자연어 설명, 입출력 스키마, 네트워크 엔드포인트를 등록한다.
- 발견 — 역량이 필요하면 하드코딩된 호출 대신 레지스트리에 질의한다. 이름으로 찾을 수도 있고, 더 강력하게는 의미로 찾을 수도 있다(예: 항공편을 예약할 수 있는 도구를 찾아라).
- 호출 — 레지스트리가 일치하는 서비스와 엔드포인트 목록을 돌려준다. 요청한 에이전트가 이 정보로 서비스를 직접 호출한다.
이 패턴은 역량에 대한 지식을 그 구현으로부터 효과적으로 분리한다.
사례 — 동적 조달 시스템
ProcurementAgent가 특정 부품의 가격 견적을 받아야 한다. 회사에는 우대 벤더용 내부 API와 공개 사이트용 웹 스크래핑 도구 등 여러 방법이 있다.
다음 달에 InternationalVendorAPITool이 추가되어도 ProcurementAgent는 한 줄도 고칠 필요가 없다. 새 도구가 등록되는 즉시 에이전트가 그것을 발견해 자동으로 쓴다.
구현 예시 · Python
# --- 1. 중앙 도구 레지스트리 정의 --- class ToolRegistry: def __init__(self): # 레지스트리는 도구를 역량으로 색인해 저장한다 self.registry = {} def register_tool(self, capability, name, description, endpoint, schema): self.registry.setdefault(capability, []).append({ "name": name, "description": description, "endpoint": endpoint, "schema": schema }) def discover(self, capability): """역량으로 도구를 발견한다.""" return self.registry.get(capability, []) GLOBAL_REGISTRY = ToolRegistry() GLOBAL_REGISTRY.register_tool("get_quote", "PreferredVendorAPITool", ...) GLOBAL_REGISTRY.register_tool("get_quote", "WebScrapingQuoteTool", ...) # --- 4. 에이전트 구현 --- procurement_agent = ProcurementAgent(registry=GLOBAL_REGISTRY) procurement_agent.get_best_price("Part #XYZ")
장점
- 모듈성과 확장성 — 고도로 모듈적이고 확장 가능한 아키텍처를 촉진한다. 기존 에이전트의 코드를 한 줄도 바꾸지 않고 시스템에 새 역량을 더할 수 있다.
- 회복력 — 특정 도구나 에이전트 인스턴스가 죽으면 레지스트리가 대안을 제공해 시스템이 장애를 우회하게 한다.
단점
- 단일 실패 지점 — 레지스트리 자체가 단일 실패 지점이 될 수 있다. 고가용성과 회복력을 갖추도록 설계해야 한다.
- 부담 — 발견을 위한 네트워크 홉이 하나 더 붙어 약간의 지연이 생긴다. 레지스트리 자체도 유지·관리해야 한다.
구현 지침
단순한 경우라면 공유 데이터베이스나 잘 관리된 JSON 파일로도 레지스트리 노릇을 할 수 있다. 기업 시스템에는 Consul이나 etcd 같은 전용 서비스 디스커버리 도구가 더 견고하다. 레지스트리 성공의 열쇠는 역량을 서술하는 잘 정의되고 풍부한 메타데이터 스키마다.