Go Agent 프레임워크 covonaut v1.1.4 공개
MIT 라이선스의 순수 Go 구현 Agent 프레임워크 covonaut가 v1.1.4를 발표하며 롤링 도구 병렬 풀과 멀티모달 읽기 등을 추가했다.
중국어 원문을 AI로 번역했습니다. 고유명사와 수치는 원문 표기를 우선하며, 중요한 판단에는 아래 출처 원문을 함께 확인하세요.
covonaut는 프로덕션 환경을 겨냥한 Go 언어 Agent 프레임워크로, Agent 메인 루프, 도구 호출, 그래프 오케스트레이션, 다중 프로토콜 상호운용 등을 아우르며, 전부 순수 Go로 구현되었고 MIT 라이선스를 채택했다.
v1.1.4 업데이트 내용
1. 롤링 도구 실행 풀: 병렬과 혼합 두 단계 스케줄링
기존의 병렬 실행은 '모든 호출을 한꺼번에 끌어올린 뒤 동시성 상한으로 대기시키는' 방식이어서, 느린 도구 하나가 슬롯을 장시간 점유했다. 이번에는 단일 롤링 풀 스케줄링으로 변경했다.
- 호출은 모델이 제시한 순서를 엄격히 따라 시작되며, 빈 슬롯이 생기면 즉시 채워지고, 느린 호출이 더 이상 이후의 병렬 가능한 호출을 막지 않는다.
- 병렬이 허용되지 않는 호출을 만나면, 먼저 풀에서 실행 중인 작업을 비운 뒤 단독으로 인라인 실행하여 직렬 장벽을 형성한다.
- 결과는 항상 원래 위치에 유지되며, 모델이 보는 반환 순서는 직렬 실행과 완전히 동일하다.
- 각 호출은 panic을 독립적으로 포착하여, 단일 도구의 충돌이 같은 배치의 다른 호출에 영향을 주지 않는다.
스케줄링의 엄격·완화 정도는 도구 자체의 동시성 안전 선언과 실행 모드가 함께 결정한다. 병렬 모드는 가장 완화된 정책을 취하여, 명시적으로 비동시성 안전이라고 선언한 도구만 격리되어 직렬 실행된다. 혼합 모드는 이번에 새로 추가된 것으로 보수적 정책을 취하여, 선언하지 않았거나 선언이 불명확한 작업은 일괄 직렬 처리한다. 개발자는 도구 생태계의 신뢰도에 따라 둘 중에서 선택할 수 있다.
이와 함께, 도구 결과에 멀티모달 콘텐츠 채널이 새로 추가되었다. 스크린샷 등 리치 콘텐츠는 텍스트 결과와 함께, 다중 파트 도구 반환을 지원하는 모델 서비스로 그대로 전달될 수 있으며, 지원하지 않는 서비스는 자동으로 순수 텍스트로 강등된다.
2. 읽기 도구가 파일 유형별로 분기, 하나의 진입점으로 모든 형식 읽기
읽기 도구는 더 이상 텍스트만 처리하지 않고, 확장자와 내용 특징에 따라 텍스트, 이미지, PDF, Jupyter Notebook, 비디오의 다섯 가지 처리 경로로 자동 분기하며, 로컬 경로와 네트워크 링크 모두 직접 읽을 수 있다.
- 텍스트와 Notebook은 줄 또는 셀 단위로 페이지를 나누어 읽기를 지원하며, Notebook은 읽기 쉬운 텍스트로 렌더링된다.
- 이미지는 한 번에 여러 대상(최대 8개)을 제출하여 비교할 수 있으며, 질문을 덧붙여 설명 내용에 집중할 수 있다.
- PDF는 페이지 범위, 최대 페이지 수, 메타데이터만 가져오기의 세 가지 용법을 지원한다.
- 비디오는 추출할 프레임 수와 시간 창을 지정할 수 있다.
- 리치 미디어 처리 로직은 플러그인 가능한 콜백 형태로 제공되며, 미연결 시 조용히 실패하지 않고 명확한 안내를 제공한다.
- 텍스트 출력이 잘릴 경우, 반환 내용 끝에 이어 읽을 위치 안내가 첨부되어 모델이 내용을 잃지 않고 스스로 계속 읽을 수 있다.
- 진짜 바이너리 파일은 더 이상 텍스트로 취급되어 컨텍스트에 밀어 넣어지지 않고, 형식 인식 결과를 반환한다.
3. 삭제 작업을 시스템 휴지통으로 이동, 실수로 삭제해도 복구 가능
삭제 도구와 shell 내 삭제 명령은 더 이상 파일을 직접 영구 삭제하지 않고, 일괄적으로 플랫폼 휴지통으로 이동하도록 변경했다.
- macOS는 시스템 Finder 휴지통을 사용하여 정상적으로 '제자리에 되돌리기'가 가능하며, 이상 시 사용자 휴지통 디렉터리로 폴백한다.
- Linux는 freedesktop 휴지통 인터페이스를 우선 사용하고, 데스크톱 규격에 맞는 수작업 휴지통 디렉터리 구현으로 폴백한다.
- Windows는 시스템 휴지통으로 이동한다.
- 환경 변수를 통해 통합 휴지통 디렉터리를 지정하거나, 직접 이동 방식을 강제할 수 있다.
- 동일 이름 충돌 시 자동으로 타임스탬프 접미사를 붙여, 이미 삭제된 내용을 덮어쓰지 않도록 한다.
- 내장 안전 가드레일: 파일 시스템 루트 디렉터리, 현재 작업 디렉터리, 사용자 홈 디렉터리를 거부하며, 어떠한 경우에도 영구 삭제로 퇴화하지 않는다.
명령 측은 shell 구문 트리를 파싱하여, 최상위·단일·경로가 리터럴인 삭제 명령만 차단한다. 복합 명령, 변수 결합이 포함된 경로, 리다이렉션이 있는 구문은 일괄 통과시켜 실제 shell로 처리하도록 하여, 정상 스크립트를 잘못 건드리지 않는다. 비우기, 분쇄류의 복구 불가 명령은 직접 차단하고 복구 가능한 방식으로 바꿀 것을 안내한다.
4. shell과 터미널 인터페이스 격리, 그리고 몇 가지 강화
- shell 자식 프로세스가 채팅 인터페이스와 완전히 격리된다. 자식 프로세스는 더 이상 제어 터미널을 상속하지 않으며, 마우스·포커스·작업 제어를 빼앗을 수 없어, 인터페이스에서 vim, less 등 대화형 프로그램을 실행해도 렌더링을 흐트러뜨리지 않는다.
- JSON Schema에 따라 구조화 출력을 검증하는 기능이 추가되어, 모델의 JSON 모드 반환과 도구 출력 파라미터 검증에 재사용되며, 스키마가 설정되지 않으면 안전하게 건너뛴다.
- 네트워크 검색의 키 없는 백엔드는 실행 지역에 따라 자동 적응하여 선택되며, 중국어 환경은 Bing을 우선 사용하고 다른 환경은 DuckDuckGo를 우선 사용하며, 지역은 환경 변수, 시스템 언어 또는 시간대에서 추론할 수 있다.
- 영속 터미널 도구군(의사 터미널 기반, 명시적 활성화 필요)이 추가되었다. 작업 디렉터리, 내보낸 변수, 백그라운드 작업이 여러 차례 호출에 걸쳐 유지되며, 매번 프로세스를 새로 만드는 방식과 구별된다. 기본적으로 동시 세션 수를 제한하고 각 세션마다 롤링 출력 버퍼를 유지한다.
업그레이드 방법
모듈 버전을 v1.1.4로 지정하면 되며, 이번에는 파괴적 인터페이스 변경이 없다. 유의할 점은, 병렬 모드의 스케줄링 의미가 '전량 동시 실행'에서 '롤링 풀 + 완화된 진입 허용'으로 조정되었으므로, 보수적 스케줄링을 유지하려면 새로 추가된 혼합 모드로 전환하고 도구에 동시성 안전 선언을 보완해야 한다.
관련 링크
- 프로젝트 주소: https://github.com/covoyage/covonaut
- 오픈소스 라이선스: MIT