TL;DR
모델 자체보다 모델을 둘러싼 하니스가 실제 실행 가능성과 상태 보존을 결정한다. 루프 엔지니어링은 결정적 검증을 가진 반복을 설계해 증명 가능한 종료를 보장하고, 그래프 엔지니어링은 노드별 루프와 라우팅을 통해 복잡한 분기·병렬·승인 과정을 명확히 한다. 실습에서 하니스만으로는 일부 버그만 고쳐졌고, 루프는 정확도를 높이는 대신 지연이 늘었으며, 그래프는 병렬 처리를 통해 전체 시간을 단축했음을 실측값으로 보여준다.
섹션별 상세

- 하니스는 모델 바깥의 실행 환경 전체를 가리키며, 모델이 파일 쓰기·상태 유지·복구를 하려면 하니스가 필요하다. — 본문 설명과 이미지(모델 vs 하니스 다이어그램, 이미지 2)에서 하니스 구성요소로 도구·스토리지·재시도·로그가 나열됨. 출처
def run_loop(agent, task, max_attempts=5):
for attempt in range(max_attempts):
output = agent.act(task)
passed, feedback = verify(output, task.spec)
if passed:
return output
task.context.append(feedback) # specific, not vague
return escalate_to_human(task, output)
def verify(output, spec):
# deterministic check beats "does this look right?"
if spec.type == "code":
return run_tests(output), "tests failed: see diff"
return validate_schema(output, spec.schema)이 함수는 루프 엔지니어링의 핵심 검증 흐름을 보여준다. 입력으로 에이전트와 작업(spec)을 받아 여러 시도에서 에이전트 출력에 대해 결정적 검증(run_tests 등)을 수행하고, 통과하면 출력을 반환한다. 실패 시에는 구체적 피드백을 컨텍스트에 추가하고 최대 시도를 넘기면 사람에게 에스컬레이트한다. 이 코드는 '느낌'에 의존한 반복 대신 증명 가능한 종료 조건을 강조하는 구현 예시로 쓰인다.

- 루프 엔지니어링은 결정적 검증을 통해 반복을 설계해야 하며, 단순한 '그럴듯함' 기반 반복은 피해야 한다. — 본문의 루프 검증 예시 코드와 설명, 이미지(4 types of loops, 이미지 3)가 루프 유형과 검증 패턴을 명확히 제시함. 출처

- 그래프는 각 노드에 독립 컨텍스트와 루프를 두고 라우팅을 명시하면 리뷰어가 새로운 관점으로 결과를 검증할 수 있다. — 본문의 LangGraph 예시 코드와 Before/After 다이어그램(이미지 4)에서 리뷰어 노드가 별도 컨텍스트로 동작함을 보여줌. 출처
# model.py
import os
from anthropic import Anthropic
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
def call_model(prompt: str) -> str:
resp = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{"role": "user", "content": prompt}
],
)
return resp.content[0].text라운드 실험에서 여러 단계가 같은 모델 호출을 재사용하도록 감싼 매우 작은 래퍼다. 환경 변수로 API 키를 읽고 Anthropic 클라이언트를 초기화한 뒤 prompt를 보내고 모델 응답 텍스트를 반환한다. 이 래퍼는 하니스·루프·그래프 실험에서 동일한 모델을 반복 호출해 비교 가능한 조건을 만들기 위해 사용되었다.
def fix_once(file):
passed, log = run_tests(file)
if passed:
return True
code = open(file).read()
prompt = (f"This code fails its test:
{code}
"
f"Test output:
{log}
"
"Return only the fixed code, nothing else.")
open(file, "w").write(call_model(prompt))
passed, _ = run_tests(file)
return passed하니스 전용 라운드에서 각 파일을 한 번만 수정하도록 설계된 루틴이다. 먼저 pytest로 파일을 실행해 실패 로그를 수집하고 모델에 실패 코드와 로그를 보내 수정된 코드를 받아 파일에 덮어쓴다. 검증은 한 번만 수행하므로 재시도나 루프 제어가 없어 하니스만으로 무엇이 가능한지 측정하는 용도로 사용된다.
def run_loop(file, max_attempts=5):
for attempt in range(max_attempts):
passed, log = run_tests(file)
if passed:
return attempt
code = open(file).read()
prompt = f"Fix this failing code:
{code}
Test failure:
{log}"
open(file, "w").write(call_model(prompt))
return None루프 기반 라운드에서 동일 파일에 대해 최대 시도만큼 반복적으로 모델을 호출해 테스트를 통과시키려는 함수다. 각 시도에서 pytest 결과를 확인하고 실패하면 모델에 실패 로그와 코드를 보내 수정을 요청하며, 통과하면 시도 횟수를 반환한다. 이 패턴은 검증 가능한 종료 조건을 갖춘 반복 프로세스를 구현해 재현 가능한 개선 효과를 측정하는 데 쓰인다.
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=3) as pool:
results = list(pool.map(coder_node, FILES))
print(results)
print("full suite passes:", reviewer_node())그래프 라운드에서 각 파일을 병렬 노드로 처리하고 최종적으로 독립된 리뷰어 노드(reviewer_node)가 전체 테스트 스위트를 검사하는 워크플로우의 핵심 실행 부분이다. ThreadPoolExecutor로 병렬화를 수행해 동시 실행의 효과를 측정하고, 최종 검증을 별도의 컨텍스트로 분리해 편향을 줄인다. 이 방식은 그래프가 라우팅과 병렬성을 제공해 전체 지연을 줄일 수 있음을 보여주기 위해 사용되었다.



- 실험 결과 하니스 전용 라운드는 약 10.0초 만에 라운드1 결과를 냈고, 루프 적용 시 약 2.8초가 더 걸렸으며 그래프 병렬화는 전체 시간을 약 6.0초 단축시켰다. — 라운드 실행 로그와 타이밍 출력(이미지 5, 이미지 6, 이미지 7)에서 real 시간 값과 'fixed' 보고가 기록되어 있음. 출처
용어 해설
- 하니스 엔지니어링(Harness Engineering)
- — 모델 바깥에 놓인 코드·도구·스토리지·재시도 로직 등 실행 환경을 설계하고 관리하는 작업으로, 모델의 상태 보존·파일 접근·관찰 가능성 등을 보장해 실제 동작을 가능하게 만든다.
- 루프 엔지니어링(Loop Engineering)
- — 검증·재시도·피드백을 설계해 에이전트가 반복적으로 작업하고 종료 조건을 증명하도록 만드는 과정으로, 목적·시간·턴 기반 등 여러 루프 유형을 명확히 정의한다.
- 그래프 엔지니어링(Graph Engineering)
- — 프로세스를 노드·분기·병합으로 표현해 제어 흐름과 라우팅을 명시적으로 설계하는 방식으로, 각 노드는 자체 루프와 검증 규칙을 가질 수 있다.
- 컨텍스트 지속성(Context Persistence)
- — 에이전트가 이전 세션의 상태·진행 파일·git 히스토리 등을 통해 중단 지점부터 재개할 수 있게 하는 기법으로, 단순한 컨텍스트 축약만으로는 보장되지 않는다.
- 리뷰어 노드(Reviewer Node)
- — 그래프에서 독립된 새로운 컨텍스트로 결과를 검증하는 노드로, 드래프팅 단계의 내부 맥락을 보지 못하게 하여 편향을 줄이고 신뢰성 높은 판단을 도출한다.
기술
- Python
- Anthropic
- Claude Code
- LangGraph
- pytest
활용 사례
- 자동 버그 수정 파이프라인에서 반복 검증과 재시도를 구조화하는 작업.
- 장기 실행 코드를 가진 코딩 에이전트에서 상태 복구와 진행 보존을 보장하는 환경 구성.
- 리서치→작성→독립 리뷰 같은 병렬화가 필요한 문서 생산 워크플로에서 그래프 기반 라우팅 적용.
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.



