Docs
참고 자료
아키텍처

Gemini CLI 아키텍처 개요 (Gemini CLI Architecture Overview)

이 문서는 Gemini CLI 아키텍처에 대한 높은 수준의 개요를 제공합니다.

핵심 구성 요소 (Core components)

Gemini CLI는 주로 두 개의 기본 패키지와 명령줄 입력을 처리하는 과정에서 시스템이 사용할 수 있는 도구 모음으로 구성됩니다.

  1. CLI 패키지 (packages/cli):

    • 목적: 초기 사용자 입력 처리, 최종 출력 제공, 전반적인 사용자 경험 관리 등 Gemini CLI의 사용자 대면 부분을 포함합니다.
    • 패키지에 포함된 주요 기능:
  2. Core 패키지 (packages/core):

    • 목적: Gemini CLI의 백엔드 역할을 합니다. packages/cli에서 보낸 요청을 수신하고, Gemini API와의 상호 작용을 조율하며, 사용 가능한 도구의 실행을 관리합니다.
    • 패키지에 포함된 주요 기능:
      • Google Gemini API와 통신하기 위한 API 클라이언트
      • 프롬프트 구성 및 관리
      • 도구 등록 및 실행 로직
      • 대화 또는 세션의 상태 관리
      • 서버 측 구성
  3. 도구 (Tools) (packages/core/src/tools/):

    • 목적: 로컬 환경(예: 파일 시스템, 쉘 명령, 웹 가져오기)과 상호 작용할 수 있도록 하여 Gemini 모델의 기능을 확장하는 개별 모듈입니다.
    • 상호 작용: packages/core는 Gemini 모델의 요청에 따라 이러한 도구를 호출합니다.

상호 작용 흐름 (Interaction flow)

Gemini CLI와의 일반적인 상호 작용은 다음 흐름을 따릅니다.

  1. 사용자 입력: 사용자가 터미널에 프롬프트나 명령을 입력하면 packages/cli가 이를 관리합니다.
  2. Core로 요청: packages/cli는 사용자 입력을 packages/core로 보냅니다.
  3. 요청 처리: Core 패키지는 다음을 수행합니다.
    • 대화 기록 및 사용 가능한 도구 정의를 포함하여 Gemini API에 적절한 프롬프트를 구성합니다.
    • 프롬프트를 Gemini API로 보냅니다.
  4. Gemini API 응답: Gemini API는 프롬프트를 처리하고 응답을 반환합니다. 이 응답은 직접적인 답변이거나 사용 가능한 도구 중 하나를 사용하라는 요청일 수 있습니다.
  5. 도구 실행 (해당하는 경우):
    • Gemini API가 도구를 요청하면 Core 패키지는 실행을 준비합니다.
    • 요청된 도구가 파일 시스템을 수정하거나 쉘 명령을 실행할 수 있는 경우, 사용자에게 도구 및 인수에 대한 세부 정보가 먼저 제공되며 사용자는 실행을 승인해야 합니다.
    • 파일 읽기와 같은 읽기 전용 작업은 진행하기 위해 명시적인 사용자 확인이 필요하지 않을 수 있습니다.
    • 확인 후 또는 확인이 필요하지 않은 경우 Core 패키지는 관련 도구 내에서 관련 작업을 실행하고, Core 패키지에 의해 결과가 Gemini API로 다시 전송됩니다.
    • Gemini API는 도구 결과를 처리하고 최종 응답을 생성합니다.
  6. CLI로 응답: Core 패키지는 최종 응답을 CLI 패키지로 다시 보냅니다.
  7. 사용자에게 표시: CLI 패키지는 응답을 포맷하고 터미널의 사용자에게 표시합니다.

주요 설계 원칙 (Key design principles)

  • 모듈성 (Modularity): CLI(프론트엔드)와 Core(백엔드)를 분리하여 독립적인 개발과 잠재적인 미래 확장(예: 동일한 백엔드에 대한 다른 프론트엔드)을 가능하게 합니다.
  • 확장성 (Extensibility): 도구 시스템은 확장 가능하도록 설계되어 새로운 기능을 추가할 수 있습니다.
  • 사용자 경험 (User experience): CLI는 풍부하고 상호 작용적인 터미널 경험을 제공하는 데 중점을 둡니다.