# Gemini CLI 마스터하기(심화): v15 - 나만의 인터랙티브 에이전트 커스터마이징 v14의 GitHub 이슈 분류 예제를 통해, 우리는 Gemini CLI의 인터랙티브 모드가 얼마나 강력한지 확인했습니다. 하지만 만약 GitHub가 아닌 Jira에서 이슈를 관리하고 싶거나, 사내 위키 페이지의 내용을 요약하고 싶다면 어떻게 해야 할까요? 이번 마지막 단계에서는 개발자들을 위해 인터랙티브 에이전트의 내부 동작 원리를 간략히 살펴보고, 이를 바탕으로 자신만의 커스텀 에이전트를 만들기 위한 기본 개념과 아이디어를 소개합니다. 이 파트는 실제 코드 작성 가이드라기보다는, 제공된 코드 스니펫(`interact_environment` 등)을 바탕으로 한 개념적 안내서입니다. --- ## 1. 인터랙티브 에이전트의 핵심 구성 요소 AI 에이전트는 크게 '환경(Environment)'과 '정책(Policy)'이라는 두 가지 핵심 요소로 구성되며, 이 둘은 '상호작용 루프(Interaction Loop)'를 통해 계속 소통합니다. ### 1.1. 환경 (Environment) * **개념:** 에이전트가 상호작용하는 '세상'입니다. 환경은 에이전트가 무엇을 '볼' 수 있는지(관찰, Observation), 그리고 무엇을 '할' 수 있는지(행동 공간, Action Space)를 정의합니다. * **v14 예제에서의 역할:** GitHub 이슈 분류 예제에서 '환경'은 GitHub API와 통신하는 역할을 합니다. * **관찰(Observation):** 특정 이슈의 제목, 본문, 라벨 등의 정보를 API로 가져와 에이전트에게 제공합니다. * **행동(Action):** 에이전트가 결정한 행동(예: 'bug' 라벨 추가)을 받아, 실제로 GitHub API를 호출하여 실행합니다. * **커스터마이징:** * Jira 이슈를 다루고 싶다면, GitHub API 대신 Jira API와 통신하는 `JiraEnv`를 새로 구현해야 합니다. * 웹사이트 정보를 요약하고 싶다면, 웹페이지의 HTML을 가져와 파싱하는 `WebEnv`를 구현할 수 있습니다. ### 1.2. 정책 (Policy) * **개념:** 에이전트의 '뇌'에 해당합니다. 정책은 환경으로부터 '관찰' 정보를 입력받아, 어떤 '행동'을 할지 결정하는 역할을 합니다. * **Gemini 에이전트에서의 역할:** 이 '뇌'의 핵심에는 Gemini와 같은 대규모 언어 모델(LLM)이 있습니다. 정책은 현재의 관찰 정보와 사용자의 목표를 LLM이 이해할 수 있는 프롬프트로 변환하여 전달합니다. 그리고 LLM의 응답(예: "Add 'bug' label")을 해석하여 구체적인 행동으로 변환합니다. * **커스터마이징:** * 에이전트의 행동 방식을 바꾸는 가장 쉬운 방법은 정책이 사용하는 **프롬프트를 수정**하는 것입니다. * 예를 들어, "당신은 5년차 시니어 개발자입니다. 이슈를 분석할 때 기술적인 관점에서만 판단하세요." 와 같이 페르소나를 부여하거나, "절대로 'wontfix' 라벨은 사용하지 마세요." 와 같이 명확한 규칙을 추가하여 에이전트의 의사결정 방식을 변경할 수 있습니다. ### 1.3. 상호작용 루프 (Interaction Loop) `interact_environment` 코드 스니펫이 보여주듯이, 에이전트는 다음과 같은 루프를 계속 반복하며 작업을 수행합니다. 1. **`env.reset()`:** 새로운 작업을 시작하고 초기 환경을 관찰합니다. (예: 42번 이슈 불러오기) 2. **`policy.act()`:** '정책(뇌)'이 현재 관찰된 내용을 바탕으로 다음에 할 행동을 결정합니다. 3. **`env.step()`:** '환경'이 결정된 행동을 실행하고, 그 결과로 변경된 새로운 관찰 내용과 작업의 성공 여부(보상, Reward), 그리고 작업이 끝났는지 여부(`done`)를 '정책'에 다시 전달합니다. 4. 이 과정은 작업이 끝날 때까지(`done`=True) 계속 반복됩니다. ## 2. 나만의 커스텀 에이전트 개발 단계 (개념) 1. **목표 정의:** 해결하고 싶은 구체적인 문제를 정의합니다. (예: "매일 아침 특정 뉴스 사이트의 IT 섹션에서 가장 중요한 기사 3개를 요약하여 슬랙(Slack)으로 보낸다.") 2. **환경 구현:** `BaseEnv`와 같은 기본 클래스를 상속받아 새로운 환경(`NewsAndSlackEnv`)을 구현합니다. * **`observe()`:** 뉴스 사이트의 HTML을 가져오는 기능을 구현합니다. * **`step(action)`:** '기사 요약'과 '슬랙 메시지 전송'이라는 두 가지 행동을 정의하고, 각각 Gemini API와 Slack API를 호출하도록 구현합니다. 3. **정책 커스터마이징 (프롬프트 엔지니어링):** 에이전트의 역할을 정의하는 시스템 프롬프트를 작성합니다. "당신은 IT 전문 에디터입니다. 다음 기사 목록에서 가장 중요한 3개를 골라 각각 세 문장으로 요약하고, 그 결과를 슬랙으로 보내세요." 4. **테스트 및 디버깅:** `INTERACTIVE=1` 모드로 에이전트를 실행하고, `v13`에서 배운 `step`, `edit_action` 등의 고급 명령어를 사용하여 에이전트의 행동을 한 단계씩 검증하고 디버깅합니다. ## 3. 시리즈를 마치며 v1부터 v15까지 이어진 긴 여정을 통해, 우리는 Gemini CLI가 단순한 질의응답 도구를 넘어, 스크립트를 통해 작업을 자동화하고, 궁극적으로는 외부 시스템과 상호작용하는 지능형 AI 에이전트를 구축하고 제어하는 강력한 플랫폼임을 확인했습니다. 이제 여러분은 Gemini CLI의 기본 사용법부터 고급 활용법, 그리고 그 내부 동작 원리에 대한 개념까지 갖추게 되었습니다. 이 지식을 바탕으로 여러분만의 창의적인 아이디어를 더해, 업무와 일상의 생산성을 극대화하는 자신만의 AI 에이전트를 만들어 보시길 바랍니다. AI와의 협업은 이제 시작입니다. Gemini CLI와 함께 더욱 효율적이고 창의적인 미래를 만들어가시길 응원합니다!