DEV Community

matias yoon
matias yoon

Posted on

터미널 AI 에이전트 구축 (v8)

터미널 AI 에이전트 구축 (v8)

터미널에서 직접 작동하는 AI 에이전트를 구축하는 것은 개발자들이 직면하는 현실적인 문제를 해결할 수 있는 강력한 도구입니다. 특히 로컬 환경에서 AI를 활용하면서도 성능과 보안을 고려해야 하는 상황에서는 더욱 중요합니다. 이번 가이드에서는 로컬 LLM API를 활용하여 개발자 친화적인 터미널 AI 에이전트를 구축하는 방법을 단계별로 설명합니다.


1. CLI AI 에이전트 랜드스케이프

현재 터미널 기반 AI 에이전트는 다음과 같은 주요 도구들로 구성됩니다:

  • Aider: GitHub Copilot처럼 코드 생성을 위한 터미널 기반 에이전트.
  • Continue.dev: VS Code와 유사한 기능을 제공하며, 로컬 LLM과 연동 가능.
  • OpenCode: 커뮤니티 기반 코드 생성 도구.
  • Custom scripts: 직접 개발한 Python/Go 기반 터미널 스크립트.

이러한 도구들은 대부분 오픈소스이며, 로컬 LLM과의 연동이 가능합니다. 다만 대부분의 경우 외부 API를 사용하는 것이 일반적이므로, 로컬에서 작동하는 간단한 에이전트를 직접 구축하는 것이 더 효율적입니다.


2. 로컬 LLM API 엔드포인트 설정

로컬 LLM을 사용하기 위해 llama.cppFastAPI를 활용하여 간단한 API 서버를 구축합니다.

2.1 LLaMA.cpp 설치

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make
Enter fullscreen mode Exit fullscreen mode

2.2 모델 다운로드 및 서버 실행

# 모델 다운로드 (예: llama3-8B)
wget https://huggingface.co/QuantFactory/Meta-Llama-3-8B-Instruct-Quantized-GGUF/resolve/main/Meta-Llama-3-8B-Instruct.Q4_K_M.gguf

# 서버 실행
./server -m ./Meta-Llama-3-8B-Instruct.Q4_K_M.gguf -c 2048 --port 8080
Enter fullscreen mode Exit fullscreen mode

이제 http://localhost:8080에서 로컬 LLM API를 사용할 수 있습니다.


3. Python CLI 에이전트 구축 (함수 호출 기능 포함)

다음은 간단한 Python 기반 CLI 에이전트입니다. 이 에이전트는 LLM API와 연동하여 코드를 생성하거나 파일을 수정할 수 있습니다.

3.1 설치 및 의존성

pip install requests python-dotenv
Enter fullscreen mode Exit fullscreen mode

3.2 Python 스크립트

# aider.py
import requests
import json
import os
from dotenv import load_dotenv

load_dotenv()

API_URL = "http://localhost:8080/completion"
HEADERS = {"Content-Type": "application/json"}

def call_llm(prompt, max_tokens=512):
    data = {
        "prompt": prompt,
        "max_tokens": max_tokens,
        "temperature": 0.5,
        "stop": ["\n\n"]
    }
    response = requests.post(API_URL, headers=HEADERS, json=data)
    return response.json()['content'].strip()

def generate_code(file_path, description):
    prompt = f"Create code for {description} in {file_path}:\n"
    code = call_llm(prompt)
    with open(file_path, "w") as f:
        f.write(code)
    print(f"✅ Generated {file_path}")

if __name__ == "__main__":
    import sys
    if len(sys.argv) < 3:
        print("Usage: python aider.py <file_path> <description>")
        sys.exit(1)
    generate_code(sys.argv[1], sys.argv[2])
Enter fullscreen mode Exit fullscreen mode

3.3 실행 예시

python aider.py app.py "a simple Flask app"
Enter fullscreen mode Exit fullscreen mode

4. tmux와 통합

터미널에서 코드 작업을 효율적으로 하기 위해 tmux를 활용하여 에이전트를 자동화할 수 있습니다.

4.1 tmux 스크립트 예시

# tmux_session.sh
tmux new-session -d -s ai_agent
tmux send-keys -t ai_agent "python aider.py main.py 'a simple echo server'" Enter
tmux attach -t ai_agent
Enter fullscreen mode Exit fullscreen mode

4.2 실행

chmod +x tmux_session.sh
./tmux_session.sh
Enter fullscreen mode Exit fullscreen mode

5. 커스텀 툴 개발 (코드 검색, Git, 파일 작업)

5.1 코드 검색 툴

# searcher.py
import os
import re

def search_code(pattern, root_dir="."):
    matches = []
    for root, dirs, files in os.walk(root_dir):
        for file in files:
            if file.endswith((".py", ".js", ".go")):
                file_path = os.path.join(root, file)
                with open(file_path, "r") as f:
                    content = f.read()
                    if re.search(pattern, content):
                        matches.append(file_path)
    return matches
Enter fullscreen mode Exit fullscreen mode

5.2 Git 연동

import subprocess

def git_diff():
    result = subprocess.run(["git", "diff"], capture_output=True, text=True)
    return result.stdout

def git_commit(message):
    subprocess.run(["git", "add", "."])
    subprocess.run(["git", "commit", "-m", message])
Enter fullscreen mode Exit fullscreen mode

6. 컨텍스트 윈도우 관리

대규모 코드베이스에서 LLM의 입력 제한을 해결하기 위해 컨텍스트 윈도우를 줄이는 전략이 필요합니다.

6.1 최근 변경 파일만 포함

def get_context_files():
    # 최근 10개 파일만 가져오기
    result = subprocess.run(["git", "diff", "--name-only", "HEAD~10"], capture_output=True, text=True)
    return result.stdout.strip().split("\n")
Enter fullscreen mode Exit fullscreen mode

7. 로컬 vs API 모델의 성능 및 비용 최적화

요소 로컬 API
비용 0 $0.1~0.3/1K tokens
성능 고속 (GPU 기반) 느림 (네트워크 지연)
보안 최고 낮음
자원 사용 높음 낮음

로컬 모델을 사용하면 빠르고 보안적인 작업이 가능하므로, 개발 환경에서는 로컬 모델을 우선적으로 사용하는 것이 좋습니다.


8. 실전 워크플로우 예시

8.1 단계별 워크플로우

  1. 파일 생성: python aider.py server.py "create a simple HTTP server"
  2. 코드 검색: python searcher.py "def.*login"
  3. Git 상태 확인: git status
  4. 코드 리뷰: git diff
  5. 커밋: python aider.py commit "add login logic"

8.2 자동화 스크립트

# workflow.sh
python aider.py server.py "simple HTTP server"
python searcher.py "def.*login"  # 코드 검색
git diff  # 변경 사항 확인
python aider.py commit "add login logic"
Enter fullscreen mode Exit fullscreen mode

결론

터미널 AI 에이전트는 로컬 환경에서 높은 성능과 보안을 제공합니다. 위의 가이드를 통해 직접적으로 사용할 수 있는 간단한 에이전트를 구축하고, tmux와 연동하여 실전 워크플로우를 자동화해 보세요. 이 접근 방식은 특히 개발 환경에서 코드 생성, 검색, Git 연동 등 다양한 작업을 효율적으로 처리할 수 있도록 도와줍니다.


추가 도전

  • GPU 최적화: CUDA/ROCm를 활용한 로컬 LLM 가속화
  • Go로 재구현: 성능과 메모리 효율성을 고려한 CGO-free Go 라이브러리 개발
  • 웹 API 확장: REST API 서버를 통해 외부에서 에이전트를 제어 가능하게 구성

이러한 기능들을 기반으로 터미널 기반 AI 에이전트를 확장해 나가면, 자신만의 커스터마이징된 개발 도구를 만들 수 있습니다.


📥 Get the full guide on Gumroad: https://gumroad.com/l/auto ($5)

Top comments (0)