Skip to main content

새로운 Claude 3.5 Sonnet으로 LLM 기반 Python 디버깅 에이전트 구축

Claude 3.5 Sonnet로 AI 기반 코딩 에이전트 만들기! 이 글은 AI로 번역되었습니다. 오역이 의심되는 부분이 있으면 댓글로 알려주세요.
Created on September 12|Last edited on September 12
이 프로젝트에서는 Code Watchdog이라는 CLI 기반 AI Python 디버거 에이전트를 만들고 있습니다. 이 AI 에이전트 Anthropic의 업그레이드된 기능을 활용합니다 Claude 3.5 Sonnet API 로그, 최근 콘솔 출력, 오류 트레이스를 분석해, 사용자가 명시적으로 실행을 지시했을 때 코딩 문제에 대한 해결책을 생성합니다. 이를 통해 개발자가 문제 해결을 위해 맥락을 수동으로 모으고 복잡한 프롬프트를 구성해야 하는 필요를 줄여 줍니다.
이런 유형의 프로젝트는 너무 복잡한 기능을 많이 넣기 전에 단순한 버전부터 시작하는 것이 가장 좋다는 것을 경험적으로 알게 되었습니다. 처음에는 비에이전트 형태로 구축하면 테스트와 제품 검증이 수월해지고, 에이전트 지향 기능을 과하게 확장하기 전에 핵심 기능이 견고한지 확인할 수 있습니다.
Jump to the tutorial


코드 워치독 경계 중

목차



새로운 Claude 3.5 Sonnet: 에이전트 API인가?

Claude 3.5 Sonnet은 코딩과 워크플로 자동화에 초점을 두고 설계되어, 다음과 같은 범용 모델과 차별화됩니다 GPT-4GPT-4와 같은 모델이 폭넓은 대화 능력에서 뛰어나다면, Claude는 에이전트 지향 작업에 특화되어 자율적 문제 해결과 코드 중심 워크플로에서 강점을 보입니다. 이 때문에 우리 Debugger Agent와 통합할 때 특히 효과적입니다.
Claude 3.5 Sonnet과 Haiku는 코딩 성능에서 큰 향상을 제공합니다. Sonnet의 SWE-bench 점수는 33.4%에서 49.0%로 상승했으며, OpenAI의 o1-preview를 앞지르고 소프트웨어 워크플로와 계획 작업에서 뛰어난 성능을 보입니다이러한 발전은 Claude 모델을 우리 코드 디버거에 최적화된 선택으로 만들어, 정확한 수정안 제공, 매끄러운 자동화, 그리고 코딩 환경 내에서 곧바로 활용할 수 있는 실행 가능한 인사이트를 더 나은 성능으로 제공합니다.
도구 우리는 만들어 갈 것입니다, 라는 Code Watchdog, 전통적인 중단점 기반 디버거처럼 코드를 멈추는 방식이 아닙니다. 대신 백그라운드에서 파일 변경 사항을 자동으로 감시하고, 활동 로그를 기록하며, 오류를 포착합니다. 필요할 때 수집된 로그를 바탕으로 AI 기반 수정안과 인사이트를 제공하도록 도구를 호출할 수 있습니다. 이 방식은 코드 실행 후에 나타나는 오류나 버그를 진단하는 데 특히 유용합니다.
이 도구는 또한 …와 통합되며 W&B Weave이는 코드의 함수 입력과 출력을 시각화하고 분석하여 GenAI 앱에서 누락된 컨텍스트나 문제를 신속하게 파악하도록 돕는 도구입니다. 이 도구는 워크플로를 방해하지 않고도 프로덕션 동작을 원활하게 모니터링하고, 심지어 코드를 디버그할 수 있게 해 줍니다.

작동 방식 미리 보기

Code Watchdog를 사용하면 도움을 받기 위해 더 이상 코드를 ���사해 붙이거나 오류 메시지를 AI 채팅 인터페이스에 넣을 필요가 없습니다. 대신 이 도구가 필요한 로그와 오류를 실시간으로 자동 수집합니다. 준비가 되면 터미널에서 짧은 명령만 실행해 AI 기반 해결책을 바로 생성할 수 있습니다.
예를 들어 버그를 발견했거나 최근 변경 사항을 분석하고 싶다면, 다음과 같은 명령만 실행하면 됩니다(여기서 cw는 Code Watchdog의 약자입니다).
cw 3 “Please solve the bug”
이 명령은 최근의 로그를 수집합니다 수정되었거나 생성되었거나 실행된 Python 파일, 이전 콘솔 출력과 직전 오류 메시지를 모아 Anthropic의 Claude 3.5 API에 질의하여 수정안을 생성합니다몇 초 만에 현재 문제에 맞춘 실행 가능한 인사이트와 코드 스니펫을 받아볼 수 있습니다. 터미널을 벗어나지 않고 모든 작업을 처리하세요.
응답을 받으면 Code Watchdog는 해결책을 터미널에 출력하는 데서 그치지 않고, 생성된 수정안을 VS Code에서 바로 열어 쉽게 확인하고 이어서 편집할 수 있게 해줍니다.

우리가 코딩 에이전트를 만드는 이유

디버깅은 소프트웨어 개발에서 가장 시간이 많이 드는 작업 중 하나입니다. 개발자들은 무엇이 잘못되었는지, 어떻게 고칠 수 있는지 파악하기 위해 콘솔 로그, 오류 추적, 코드 변경 사항을 수시간에 걸쳐 샅샅이 살펴보곤 합니다. 전통적인 디버거도 유용하지만, 실행을 중단하고 브레이크포인트를 설정하는 방식에 크게 의존하므로 개발 흐름을 자주 끊습니다. 또한 GitHub Copilot 같은 코드 자동완성 도구는 새 코드를 작성하는 데는 도움을 주지만, 기존 코드를 디버깅하거나 트러블슈팅하는 데에는 한계가 있어, 결국 개발자가 직접 오류를 찾아 해결해야 하는 경우가 많습니다.
우리는 이 문제를 해결하기 위해, 필요한 컨텍스트 제공 작업을 자동화하는 Code Watchdog를 만들고 있습니다 대형 언어 모델 디버깅에 사용됩니다. 개발자가 변경 사항과 오류를 수동으로 추적하도록 강제하는 대신, Code Watchdog는 백그라운드에서 조용히 동작하며 파일 활동과 런타임 로그를 수집합니다. 문제가 발생하면, 개발자는 수집된 데이터를 바탕으로 인사이트와 수정안을 생성해 달라고 이 도구에 요청할 수 있습니다.
목표는 디버깅 과정을 자동화해 마찰을 줄이고, 문제를 손수 쫓아다니는 지루한 작업을 없애는 것입니다. 로그 분석을 위한 Weave와 AI 기반 해결책을 위한 Anthropic의 Claude 3.5 API 같은 도구를 통합함으로써, Code Watchdog는 개발자가 워크플로를 방해하지 않고도 빠르게 문제를 식별하고 해결할 수 있도록 보장합니다. 이를 통해 개발에는 더 많은 시간을, 버그 진화에는 더 적은 시간을 들일 수 있습니다.

Code Watchdog 백엔드 요약

이제 이 프로젝트의 핵심 구성 요소는 파일 수정, 스크립트 실행, 콘솔 출력, 오류 로그와 같은 모든 관련 코드 활동을 포착하여 구조화된 방식으로 저장하는 메커니즘입니다.이를 통해 문제가 발생했을 때 Code Watchdog가 의미 있는 인사이트를 제공하여 디버깅을 매끄럽고 효율적으로 진행할 수 있습니다. 개발자가 이 정보를 일일이 추적하거나 로그로 남길 필요 없이, 백엔드 인프라가 이를 자동으로 처리하므로 코딩에 집중할 수 있습니다.
백엔드를 어떻게 구현하는지에 대한 자세한 내용은 여기서 다루지 않겠습니다., 관심 있다면 레포를 자유롭게 살펴보세요 여기, 모든 동작 방식을 이해하는 데 필요한 스크립트와 파일이 들어 있습니다. 추가로, 새 Conda 환경에서 필요한 내용을 모두 자동으로 설정해 주는 간단한 설정 스크립트도 제공했으니, 번거로움 없이 Code Watchdog를 바로 사용해 볼 수 있습니다.
이제 Code Watchdog의 백엔드가 프로그래밍 중 활동을 자동으로 기록하는 방식에 대해 간단히 설명하겠습니다. 여기서 다루는 로깅 메커니즘 가운데 몇 가지가 낯설어도 걱정하지 마세요. 보통은 Conda 프로젝트를 유지보수했거나 유사한 프로젝트를 진행해 본 경우가 아니라면 접할 일이 거의 없기 때문입니다.
모니터링과 로깅은 두 가지 핵심 구성 요소로 구현합니다. `sitecustomize.py`와 Conda 활성화 스크립트입니다. sitecustomize.py 파일은 Python이 시작될 때마다 자동으로 실행되는 훅으로 동작하여 파일 활동과 오류를 기록할 수 있게 합니다. 추가로, 우리는 …에 있는 스크립트를 사용합니다. activate.d Conda 환경이 활성화될 때 실행되는 디렉터리의 스크립트입니다. 이 스크립트들은 실시간으로 파일 변경 사항을 모니터링하는 백그라운드 프로세스를 시작합니다. 이 조합을 통해 사용자의 수동 개입 없이도 모든 파일 변경이나 실행이 빠짐없이 포착되고, 로그가 자동으로 생성됩니다.
이 도구는 최근 활동을 추적하기 위해 여러 로그 파일을 유지합니다. output.log 파일에는 실행된 스크립트의 최신 콘솔 출력이 저장되고, error_output.log 오류 메시지와 스택 트레이스를 수집해 문제 해결을 더 쉽게 해 줍니다. 또 다른 로그인 python_file_changes.log, 작업 디렉터리에서 생성되거나 수정되거나 실행된 Python 파일 목록을 유지합니다. 이 데이터를 수집해 두면, Code Watchdog는 저장된 정보를 바탕으로 필요할 때마다 유용한 인사이트를 제공하고 수정 방법을 제안할 수 있습니다.

Code Watchdog 설치

시스템에 Code Watchdog를 설치하는 과정은 간단합니다. Mac과 Linux 모두에서 동작하며, 한 줄 명령으로 설정할 수 있습니다. 저장소를 클론하고 Conda 환경을 구성하며, psutil, watchdog, Weave, Anthropic 같은 필수 의존성을 설치하는 작업은 다음 명령 한 번으로 처리됩니다:
git clone https://github.com/bdytx5/code_watchdog.git && cd code_watchdog && sh setup.sh
설치는 로깅 인프라와 모니터링 스크립트도 자동으로 설정합니다. 설치 과정의 일부로 다음에 대한 bash 별칭을 추가합니다. fix.py 스크립트를 통해 AI 기반 디버깅 프로세스를 손쉽게 호출할 수 있습니다.
설치 명령 외에는 다음 명령으로 이름이 “code_watchdog”인 Conda 환경을 활성화하는 것만 실행하면 됩니다. conda activate code_watchdog, 그리고 다음 명령으로 Anthropic API 키를 내보냅니다: export ANTHROPIC_API_KEY=“your_api_key”. 설치를 최대한 간단하게 만드는 것이 목표였습니다. 설치 중 문제가 생기면 GitHub 저장소에 이슈를 올려 주세요. 바로 확인하고 해결하겠습니다.
설치가 완료되고 `code_watchdog` 환경을 활성화했으며 Anthropic API 키까지 설정했다면, 이제 터미널에서 Code Watchdog을 다음과 함께 사용할 수 있습니다. cw 명령어(유명한 cd 명령어에서 영감을 받았습니다)입니다. 이 명령어를 사용하면 코드에서 문제가 발생할 때마다 도구를 빠르고 간편하게 실행하여 AI 기반 수정안을 생성할 수 있습니다.
이 도구는 파일 생성, 수정, 실행과 같은 활동을 추적합니다이 로그는 최근 활동이 우선하도록 정렬됩니다. 파일 생성, 수정, 실행 여부와 관계없이 가장 최근 항목이 큐의 맨 위에 배치되어 컨텍스트로 사용되며, 컨텍스트가 필요할 때 먼저 포함되도록 보장합니다.
Code Watchdog은 콘솔 출력도 두 종류로 캡처합니다. 표준 출력과 오류 출력입니다. 표준 출력은 print 문과 프로그램 결과를 포함하며 `output.log`에 저장되어 마지막 실행에서 코드가 무엇을 생성했는지 쉽게 확인할 수 있습니다. 오류, 예외, 스택 트레이스는 `error_output.log`에 기록되어 터미널에서 오류 메시지를 일일이 복사하지 않아도 런타임 문제를 명확하게 파악할 수 있습니다.

핵심 로직

Code Watchdog의 핵심 로직은 다음에 있습니다 fix.py 스크립트로, Anthropic의 Claude 3.5 API와 Weave를 사용해 로그, 컨텍스트, 최근 코드 변경을 기반으로 AI 기반 수정안을 생성하고 분석합니다. 이 스크립트는 수집된 데이터를 바탕으로 오류에 대한 실행 가능한 제안을 제공하는 도구의 두뇌 역할을 합니다. `cw` 명령을 사용할 때마다 `fix.py`가 실행됩니다.
fix.py 스크립트는 초점을 지정하기 위해 여러 명령줄 인수를 받습니다. 첫 번째 인수는 <n> 최근에 수정되었거나 실행된 파일 중 얼마나 많은 항목을 분석할지 결정합니다. 선택적인 두 번째 인수로 “0으로 나누는 오류가 발생하지 않도록 코드를 리팩터링해줘”와 같은 구체적인 지시를 AI에 전달할 수 있습니다. 추가로, 세 번째 인수를 사용해 `err` 또는 `console` 키워드로 오류 로그에 집중할지 콘솔 출력에 집중할지 지정할 수 있습니다. 예를 들어, 다음 명령어는 cw 5 "Fix the bug" err 최근에 수정된 파일 5개를 분석하고, 오류 로그 파일만 사용하며, 제공한 지시를 바탕으로 해결책을 생성합니다.
다음은 Code Watchdog을 구동하는 핵심 로직 스크립트로, 매번 실행될 때마다 동작합니다. cw 명령이 호출되면:
import anthropic
import sys
from pathlib import Path
import os
import re
import subprocess
import weave; weave.init("cw")
import os
import anthropic

client = anthropic.Client(
api_key=os.getenv("ANTHROPIC_API_KEY")
)

# Define the log file paths
log_dir = os.path.expanduser("~/.cw")
log_file_path = os.path.join(log_dir, "output.log")
error_log_path = os.path.join(log_dir, "error_output.log")
monitor_log = Path("~/.cw/python_file_changes.log").expanduser()
solution_file_path = Path("~/.cw/solution.py").expanduser() # Path to the solution file

def get_last_n_lines(file_path, n=40):
"""Read the last n lines of a file."""
try:
with open(file_path, 'r') as f:
return ''.join(f.readlines()[-n:])
except Exception as e:
print(f"Error reading {file_path}: {e}")
return ""

def get_unique_files_from_log(n):
"""Extract the last n unique modified Python files from the monitor log."""
if not monitor_log.exists():
print(f"Log file not found: {monitor_log}")
sys.exit(1)

unique_files = []
seen_files = set()

with open(monitor_log, 'r') as f:
lines = f.readlines()

# Iterate over the log lines in reverse to get the most recent first
for line in reversed(lines):
parts = line.split()
if len(parts) > 1 and parts[0] in ["Modified:", "Created:", "Executed:"]:
file_path = parts[1]
if file_path not in seen_files and 'fix.py' not in file_path and 'file_monitor.py' not in file_path:
seen_files.add(file_path)
unique_files.append(file_path)

if len(unique_files) >= n:
break

return unique_files

def read_file_contents(file_paths):
"""Read and return the contents of the specified files."""
contents = ""
for file_path in file_paths:
try:
with open(file_path, 'r') as f:
contents += f"\n--- {file_path} ---\n{f.read()}"
except Exception as e:
print(f"Error reading {file_path}: {e}")
return contents

@weave.op
def generate_fix_with_anthropic(error_log: str, recent_output: str, file_contents: str, instruction: str = "") -> str:
"""Query the Anthropic API with the error log, recent files content, and optional instruction."""

# Prepare the user content for the message
user_content = [
{"type": "text", "text": f"I encountered the following error:\n\n{error_log}"},
{"type": "text", "text": f"Here is the most recent console output:\n\n{recent_output}"},
{"type": "text", "text": f"Here are the contents of some recent Python files:\n\n{file_contents}"}
]

if instruction:
user_content.append({"type": "text", "text": f"Additional instruction: {instruction}"})

# Create the message using the Messages API
message = client.messages.create(
model="claude-3-5-sonnet-latest",
max_tokens=1024,
temperature=0,
system="You are an expert Python programmer. Help resolve code errors efficiently.",
messages=[
{
"role": "user",
"content": user_content
}
]
)

return message.content[0].text # Correct access to the response content



def parse_claude_output(output: str) -> str:
"""Parse Claude's output into Python code and comments."""
code_lines = []
comment_lines = []

code_block_start = re.compile(r"```python")
code_block_end = re.compile(r"```")

inside_code_block = False

for line in output.splitlines():
if code_block_start.match(line.strip()):
inside_code_block = True
continue # Skip the start marker
elif code_block_end.match(line.strip()):
inside_code_block = False
continue # Skip the end marker

if inside_code_block:
code_lines.append(line)
else:
if line.strip(): # Avoid adding empty comment lines
comment_lines.append(f"# {line}")

if code_lines:
return "\n".join(comment_lines + ["\n"] + code_lines)
else:
return output

def save_to_solution_file(content: str, file_path: Path):
"""Save the generated content to the solution.py file."""
file_path.parent.mkdir(parents=True, exist_ok=True) # Ensure directory exists
with open(file_path, 'w') as f:
f.write(content)
print(f"Saved solution to {file_path}")

def open_file_in_vscode(file_path: Path):
"""Open the specified file in VSCode."""
try:
subprocess.run(["code", str(file_path)], check=True)
print(f"Opened {file_path} in VSCode")
except subprocess.CalledProcessError as e:
print(f"Failed to open {file_path} in VSCode: {e}")
except FileNotFoundError:
print("VSCode executable 'code' not found. Make sure VSCode command line tools are installed.")




if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python read_last_modified.py <n> [<instruction>] [err|console]")
sys.exit(1)

try:
n = int(sys.argv[1])
except ValueError:
print("Error: <n> must be an integer.")
sys.exit(1)

# Optional instruction parameter
instruction = ""
log_type = ""

# Determine if the second argument is instruction or log type
if len(sys.argv) > 2:
if sys.argv[2] in ["err", "console"]:
log_type = sys.argv[2]
else:
instruction = sys.argv[2]

# Check for log_type in the third argument if not already set
if not log_type and len(sys.argv) > 3:
log_type = sys.argv[3]

# Get the last n unique modified files
unique_files = get_unique_files_from_log(n)
print(unique_files)
file_contents = read_file_contents(unique_files) if unique_files else ""

# Read the last 40 lines of output.log and error_output.log
recent_output = get_last_n_lines(log_file_path, 40)
error_log = get_last_n_lines(error_log_path, 40)

if error_log.strip() or recent_output.strip():
print("\n--- Generating Fix with Anthropic ---")
if log_type == "err":
fix = generate_fix_with_anthropic(error_log, "", file_contents, instruction)
elif log_type == "console":
fix = generate_fix_with_anthropic("", recent_output, file_contents, instruction)
else:
fix = generate_fix_with_anthropic(error_log, recent_output, file_contents, instruction)

print(f"\n--- Suggested Fix ---\n{fix}")

# Parse the fix and check if it contains Python code
parsed_content = parse_claude_output(fix)

if "```python" in fix:
save_to_solution_file(parsed_content, solution_file_path)
open_file_in_vscode(solution_file_path)
else:
print("\n--- Solution ---")
print(parsed_content)
else:
print("\nNo recent output or errors found.")
이 스크립트는 로그와 최근 파일 변경 내역에서 컨텍스트를 수집해, 정확한 해결책을 생성하는 데 필요한 관련 정보를 확보합니다. 다음 위치에서 읽어옵니다 python_file_changes.log 가장 최근에 변경되었거나 실행된 Python 파일을 추적하고, 다음 위치에서 정보를 가져옵니다 output.logerror_output.log 최근 콘솔 출력과 오류를 파악하기 위해서입니다. 이러한 로그 조합은 fix.py 해결책을 생성하기 전에 필요한 모든 컨텍스트를 수집합니다.
관련 컨텍스트를 모두 수집하면, fix.py Anthropic의 Claude 3.5 API를 호���해 정보를 분석하고 해결책을 생성합니다. 최근 콘솔 출력 또는 오류, 최근에 수정된 파일의 내용, 그리고 사용자가 제공한 추가 지침을 함께 전송합니다. AI는 이 데이터를 처리한 뒤 코드 스니펫부터 문제 해결을 위한 상세 설명에 이르기까지 다양한 형태의 제안된 수정안을 반환합니다.
여기에서 API를 호출합니다:
@weave.op
def generate_fix_with_anthropic(error_log: str, recent_output: str, file_contents: str, instruction: str = "") -> str:
"""Query the Anthropic API with the error log, recent files content, and optional instruction."""


# Prepare the user content for the message
user_content = [
{"type": "text", "text": f"I encountered the following error:\n\n{error_log}"},
{"type": "text", "text": f"Here is the most recent console output:\n\n{recent_output}"},
{"type": "text", "text": f"Here are the contents of some recent Python files:\n\n{file_contents}"}
]


if instruction:
user_content.append({"type": "text", "text": f"Additional instruction: {instruction}"})


# Create the message using the Messages API
message = client.messages.create(
model="claude-3-5-sonnet-latest",
max_tokens=1024,
temperature=0,
system="You are an expert Python programmer. Help resolve code errors efficiently.",
messages=[
{
"role": "user",
"content": user_content
}
]
)


return message.content[0].text # Correct access to the response content
Weave의 역할은 개발 전반에서 컨텍스트 데이터를 시각화하고 추적하는 데 초점이 맞춰져 있습니다. 저는 Code Watchdog을 초기 단계에서 구축할 때에도 Weave를 적극적으로 활용할 수 있었습니다. 누락되었거나 불완전한 컨텍스트 파일이 반복적으로 발생해 문제 해결을 복잡하게 만들었습니다Weave를 로깅 및 시각화 도구로 사용하면 누락된 파일을 빠르게 탐지하고 AI가 정확한 컨텍스트를 받도록 보장하는 데 도움이 되었습니다. 또한 파일 변경과 오류의 순서를 파악할 수 있어 로깅 인프라를 디버그하기가 훨씬 쉬워졌습니다. 이를 추가함으로써 @weave.op 데코레이터를 사용하면 Weave 내부에서 모델 호출을 자동으로 시각화할 수 있습니다.
도구를 사용한 뒤에는 Weave로 이동해 모델에 전달된 정확한 입력을 시각화하고, 모델의 성능을 모니터링할 수 있습니다. 예를 들어, 간단한 코딩 오류에 대해 제가 실행한 Code Watchdog 명령의 Weave 트레이스를 보여드리겠습니다. 먼저 다음 명령을 실행했습니다:
cw 1 err
그다음 Weave로 이동하면 다음과 같은 로그를 확인할 수 있습니다:

또한 Code Watchdog은 아래와 같이 VSCode에서 로컬로 솔루션 파일을 실행합니다:


Code Watchdog의 CLI 인자 이해하기

사용하려면 cw 명령을 효과적으로 사용하려면, 전달할 수 있는 인자를 이해하는 것이 중요합니다. 여기에는 컨텍스트 파일 개수 지정, 선택적인 사용자 지침 제공, 그리고 오류 로그 또는 콘솔 출력 중 무엇에 집중할지 선택하는 항목이 포함됩니다. 각 인자는 가장 관련성 높은 정보를 바탕으로 AI의 응답을 맞춤화하는 데 중요한 역할을 합니다.
첫 번째 인자는 최근 파일을 몇 개 분석할지 결정합니다. 도구는 로그에서 가장 최근에 생성되었거나 수정되었거나 실행된 파일을 지정한 개수만큼 가져옵니다. 최근 작업이 우선시되므로, 마지막으로 실행하거나 수정하거나 생성한 파일이 자동으로 큐의 맨 위에 배치되어 분석에 반드시 포함됩니다.
예를 들어, 다음을 실행하면 cw 3 최근 작업 내역을 기준으로 마지막 세 개의 파일을 분석하며, cw 5 은 최근 파일 다섯 개까지 컨텍스트를 확장합니다. 다음 명령을 실행할 수도 있습니다 cw 0 사소한 pip 오류처럼 컨텍스트 파일이 필요 없는 문제만 디버그하려는 경우에 해당합니다. 이 인자도 선택 사항이며, 지정하지 않으면 최근 컨텍스트 파일 수로 3이 기본값으로 사용됩니다.
두 번째 인자는 AI에 선택적인 사용자 지정 지침을 전달할 수 있도록 해 주며, 생성되는 해결책을 더 알맞게 조정하는 데 도움이 됩니다. 특정 버그를 해결하거나 코드 일부를 최적화해야 할 때 유용합니다. 예를 들어, 다음을 실행하면 cw 4 "Fix the division by zero error" 는 마지막 네 개의 파일을 분석하고, 해당 특정 이슈에 집중하라고 AI에 지시합니다. 마찬가지로, cw 3 "Refactor the code for better readability" AI에게 마지막으로 수정하거나 실행된 세 개의 파일 전반에서 코드 가독성을 개선하기 위한 제안을 생성하도록 요청합니다.
세 번째이자 마지막 인자(이 또한 선택 사항)는 도구가 오류 로그에 집중할지, 콘솔 출력에 집중할지를 지정할 수 있게 합니다. 기본적으로 AI는 두 가지를 모두 분석합니다 error_output.logoutput.log 이전에 발생한 오류와 콘솔 출력을 기반으로 포괄적인 해결책을 제공하기 위해서입니다. 다만, 모델에 제공할 컨텍스트의 범위를 좁히고 싶다면 사용할 로그 유형을 지정할 수 있습니다. 예를 들어, cw 3 err 오류 로그만 고려해 수정안을 생성하도록 AI에 지시하며, cw 2 console 최신 콘솔 출력으로만 분석을 제한합니다. 이러한 유연성 덕분에 각 디버깅 세션에 가장 관련 있는 데이터를 선택할 수 있습니다.
이 인자들을 조합해 더 정밀한 명령을 만들 수도 있습니다. 예를 들어, cw 3 "Resolve the IndexError" err 마지막 세 개의 파일을 분석하고, 오류 로그에 집중하며, IndexError에 특화된 해결책을 제공합니다. 또 다른 예시는 cw 2 "Optimize the loop logic" console최근 컨텍스트 파일 두 개를 수집하고 콘솔 출력을 분석한 뒤, 반복문 로직 개선안을 AI에 요청합니다.
다음 예시는 다음을 사용하는 방법을 보여줍니다 cw 명령을 통해 AI 기반 해결책을 자신의 요구에 맞게 정렬할 수 있습니다. 컨텍스트 파일 개수를 조정하고, 사용자 지침을 추가하며, 분석할 로그를 선택하면 생성되는 해결책의 정확성과 적합성을 보장할 수 있습니다.

파이썬 디버거 데모: Claude 기반 버그 수정을 위한 Code Watchdog 활용

이제 Code Watchdog을 설치하고 코딩 버그를 해결하는 데 사용하는 방법을 살펴보겠습니다. 덧붙여, Weave와의 연동 방식도 보여 드려 Code Watchdog 사용 내역을 모두 추적하는 방법을 함께 안내하겠습니다. Code Watchdog은 현재 Linux와 Mac에서만 동작합니다. 또한 파일 모니터링 시스템은 Desktop 디렉터리 하위의 모든 파일을 감시하므로, 실행할 스크립트는 반드시 시스템의 Desktop 내부에 위치한 하위 디렉터리에 있어야 합니다.

1단계: Conda와 API 키를 설정했는지 확인하기

계속하기 전에 Conda가 설치되어 있는지 확인하세요. 설치되어 있지 않다면 다음 안내를 따라 설치할 수 있습니다. Miniconda 웹사이트 설정하려면

2단계: Code Watchdog 설치

Conda가 설치되고 API 키를 설정했다면, 터미널을 열어 다음 명령을 실행해 code_watchdog을 설치하세요:
git clone https://github.com/bdytx5/code_watchdog.git && cd code_watchdog && sh setup.sh
이 명령은 저장소를 클론하고, 새 Conda 환경을 설정한 뒤 psutil, weave, anthropic 같은 필요한 모든 종속성을 설치하고, 로깅 인프라를 구성합니다. 설치가 끝나면 다음을 실행해 새 환경을 활성화하세요:
conda activate code_watchdog
또한 Anthropic API 키를 설정해야 합니다. 이 키는 code_watchdog이 Anthropic의 Claude API와 상호작용하여 해결책을 생성할 수 있도록 합니다. 다음 명령으로 API 키를 설정하세요:
export ANTHROPIC_API_KEY="your-api-key-here"
바꾸기your-api-key-here실제 API 키로 바꾸세요. 매번 키를 설정하지 않으려면 `export` 명령을 `.bashrc` 또는 `.zshrc` 구성 파일에 추가하면 됩니다.

3단계: 버그가 있는 Python 파일 만들기

Code Watchdog이 실제로 어떻게 동작하는지 보려면, 의도적으로 오류가 있는 작은 Python 스크립트를 만들어 보세요. 이렇게 하면 도구를 트리거하고 해결책을 생성할 수 있습니다. 다음 명령으로 파일을 생성하세요:
echo "x = 1 / 0" > buggy_script.py
이 파일에는 도구를 테스트하기 위해 사용할 ZeroDivisionError가 포함되어 있습니다.

4단계: 버그가 있는 스크립트 실행하기

오류를 트리거하고 Code Watchdog이 이를 기록하도록 스크립트를 실행하세요:
python buggy_script.py
터미널에 다음과 같은 오류 메시지가 표시되어야 합니다:
Traceback (most recent call last):
File "buggy_script.py", line 1, in <module>
x = 1 / 0
ZeroDivisionError: division by zero

5단계: Code Watchdog으로 수정안 생성하기

이제 오류가 기록되었으니, 다음을 실행하세요 cw 문제를 분석하고 해결책을 생성하는 명령:
cw 1 err
추가 지시를 따로 주지 않았다는 점에 주목하세요. 괜찮습니다. Claude 3.5 Sonnet은 문제를 충분히 추론하고, 그에 대한 간단한 설명을 제공할 만큼 똑똑합니다. 전반적으로 이 명령은 도구에게 최신 파일을 분석하라고 지시합니다 (buggy_script.py), 최신 오류 로그만 검토하고 ZeroDivisionError에 대한 해결책을 제공하세요.
Weave 내부에서 Code Watchdog 호출 내역을 확인할 수 있습니다:

여기에서 확인할 수 있듯이 recent_ouput 필드는 비어 있습니다. 그 이유는 우리가 "err" 인수는 cw 명령으로, 최신 오류 로그만 모델에 포함합니다. Weave를 사용해 이 정확한 트레이스를 그대로 활용하여 Code Watchdog 로깅 백엔드의 몇 가지 오류를 빠르게 디버깅할 수 있었고, 솔직히 엄청난 시간을 절약했습니다. 이 프로젝트를 하기 전에는 Weave가 디버깅에도 유용하다는 걸 몰랐는데, 실제로 매우 도움이 됐습니다.

에이전트의 미래

이 도구는 AI 기반 솔루션과 패시브 로깅을 결합해 강력한 코드 디버깅 방식을 제공합니다. Anthropic의 Claude 3.5 Sonnet과 W&B Weave 같은 도구를 통합해, 개발자가 워크플로를 방해하지 않고도 효율적으로 문제를 해결할 수 있게 합니다. 이 도구는 최근 작업 내역을 수집하고, 오류와 출력을 분석한 뒤, 간단한 명령 한 번으로 목표 지향적인 해결책을 제공합니다.
Anthropic이 함께 공개한 멋진 기능 하나는 컴퓨터 제어이는 모델이 사람처럼 소프트웨어 인터페이스와 상호작용하도록 해 주어 버튼을 클릭하고, 타이핑하고, 프로그램을 탐색할 수 있게 합니다. 아직은 실험 단계이지만, 이 능력은 자동화의 새로운 가능성을 열어 주며 AI가 디지털 환경과 능동적으로 상호작용하도록 합니다.
몇 가지 간단한 수정만으로도 Code Watchdog을 자율적으로 활용하는 데 초점을 맞춘 우리만의 컴퓨터 제어 버전을 만들 수 있다고 생각합니다. 컨텍스트가 바뀔 때마다 모델 호출을 수행하도록 하면, 이 도구가 실행 여부를 판단해 cw 명령을 실행하고 사용할 인수를 결정합니다. 이렇게 하면 Code Watchdog이 사용자 입력을 기다리지 않고도 선제적으로 조치를 취할 수 있습니다. 피드백 메커니즘을 추가하면 도구를 더욱 정교화하여, 개발자가 동작을 유도하고 시간이 지남에 따라 의사 결정 능력을 개선할 수 있습니다. 이러한 개선을 통해 Code Watchdog은 완전한 자율형 도우미로 발전하여 실시간으로 코드를 모니터링하고 수정할 수 있으며, 핸즈프리 코딩의 미래에 한 걸음 더 다가갈 수 있습니다..
읽어 주셔서 감사합니다. AI 코딩 에이전트를 구축하는 과정이 흥미로우셨길 바랍니다. 앞으로의 업데이트와 AI 기반 개발의 새로운 가능성도 기대해 주세요. 레포지토리도 자유롭게 확인해 보세요. 여기.

관련 문서





이 글은 AI가 번역한 기사입니다. 오역이 의심되는 부분이 있으면 댓글로 알려 주세요. 원문 링크는 다음과 같습니다: 원문 보기