본문으로 건너뛰기

© 2026 Molayo

Reddit요약2026. 05. 01. 07:13

작은 로컬 모델에 코딩 에이전트를 실행할 때 실제로 고장나는 점에 대한 노트

요약

본 기사는 작은 로컬 및 클라우드 모델을 사용하여 다중 파일 코딩 작업을 수행할 때 발생하는 실제적인 실패 지점들을 공유합니다. 주요 문제점으로는 모델이 코드 출력을 마크다운 펜스(```)로 감싸는 경향, 7B 파라미터 미만 모델의 구조화된 출력 신뢰성 부족, 그리고 프로젝트 맵을 기반으로 파일을 수정할 때 잘못된 파일이나 함수를 편집하는 오류가 있습니다. 이러한 문제들은 프롬프트 개선보다는 포스트-프로세싱 및 오케스트레이션 레이어에서의 강력한 검증 로직 구현을 통해 해결해야 함을 강조합니다.

핵심 포인트

  • 코드 출력 시 모델이 마크다운 펜스(```)를 기본적으로 사용하므로, 후처리 과정에서 이를 제거하는 것이 필수적이다.
  • 7B 파라미터 미만의 작은 모델은 복잡한 다단계 지시사항 하에서 신뢰할 수 있는 구조화된 출력(JSON 등)을 생성하기 어렵다.
  • 모델이 언급하거나 수정한다고 주장하는 파일 경로와 함수 이름은 반드시 오케스트레이션 레이어에서 존재 여부를 검증해야 한다. 모델의 주장을 맹신해서는 안 된다.
  • 작은 모델 사용 시, JSON 파싱 실패에 대비하여 유연한(permissive) 파서로 회귀하거나 재시도하는 등의 우회책이 필요하다.

지난 몇 주 동안 작은 로컬 모델과 무료 티어에 있는 작은 클라우드 모델을 통해 실제 다중 파일 코딩 작업을 수행했습니다. 일부는 나를 놀라게 했기 때문에, 커뮤니티와 공유하여 누군가에게 도움이 되기를 바라는 마음으로 일관되게 나타났던 실패 지점을 공유하고 싶습니다.

마크다운 펜스 (Markdown fences) 는 제가 테스트한 모든 작은 모델에서 가장 흔한 오류입니다.

시스템 프롬프트에 "출력은 원본 코드만, 마크다운 포맷팅 없이"라고 넣을 수 있습니다. 모델이 동의합니다. 하지만 모델은 여전히 응답을 삼중 역따옴표 (triple backticks) 로 감싸버립니다. 특히 코드를 설명하는 것처럼 보이는 요청이 포함되면 더욱 그렇습니다. Qwen3.5:9b 와 gemma4:e4b 는 지시를 따르는 데 가장 일관되지만, 가끔씩도 실수합니다. 제 테스트 결과 다른 모델들은 이 규칙을 자주 위반하여 펜스가 있을 것이라고 기본적으로 가정해야 할 정도입니다.

해결책은 더 나은 프롬프팅이 아닙니다. 기본값으로 포스트-프로세싱에서 펜스를 제거하는 것입니다. 작은 모델을 사용하는 모든 코드 편집 도구는 이를 수행해야 합니다.

제 테스트 결과, 7B 파라미터 미만에서는 구조화된 출력 (structured output) 이 신뢰할 수 없습니다.

에이전트가 작업 목록 (예: 제 사례), 행동 유형 (action types), 또는 기계가 판독 가능한任何东西를 반환하도록 모델을 요구하는 경우, 작은 모델은 벤치마크가 시사하는 것보다 훨씬 더 자주 이러한 작업을 실패합니다. 벤치마크는 모델이 유효한 JSON 을 생성할 수 있는지 측정합니다. 복잡한 다단계 지시사항과 엣지 케이스 (edge cases) 가 포함된 상황에서 유효한 JSON 을 생성하는지 측정하지는 않습니다.

제 테스트 결과, 로컬 모델 중 Gemma4:e4b 가 구조화된 출력에서 가장 신뢰할 만했습니다. Qwen3.5:9B 가 그 뒤를 쫓고 있습니다. Codellama (모든 버전이나 오래됨) 는 어려움을 겪습니다. 클라우드 측면에서는 Groq 의 Llama 3.3 70B 가 구조화된 출력에 있어 매우 견고했습니다 (가장 일관성이 있었습니다). OpenRouter 의 다른 모델들 (예: Nemotron 3 super) 은 일부 특이점을 보였습니다. 예: Nemotron 3 super 는 매우 좋았지만, 토큰 사용량이 100k 에 도달했을 때 openrouter 에서 응답을 멈췄습니다.

실용적인 우회책은 JSON 을 검증하고, 더 명시적인 지시로 한 번 재시도한 다음, 산문으로 감싸진 응답에서 JSON 을 추출할 수 있는 관대 (permissive) 한 파서로 회귀하는 것입니다.

모델이 수정할 파일을 허용하면 잘못된 파일을 편집합니다.
작은 모델에 함수 이름을 언급하고, 유사한 함수 이름을 나열하는 프로젝트 맵 (project map), 그리고 "validateToken 을 verifyToken 으로 이름 변경"과 같은 요청을 주는 경우 (제 테스트의 실제 예시). validateToken 을 올바르게 이름 변경할 수도 있습니다. 하지만 validateUser 를 이름 변경하거나, 해당 함수를 언급하는 주석을 수정하거나, 완전히 잘못된 파일에 이름 변경을 적용할 수도 있습니다. 모델은 프로젝트 맵을 제약조건이 아닌 제안으로 취급합니다.

해결책은 프롬프트가 아니라 오케스트레이션 레이어 (orchestration layer) 에 있습니다. 모델이 언급한 파일 경로가 실제로 존재하는지 검증하세요. 모델이 조작한다고 주장하는 함수 이름이 그들이 있다고 주장하는 파일에 실제로 있는지 검증하세요. 불일치가 있을 때 명확한 오류를 발생시키세요. 작은 모델은 자신감 있게 거짓말을 하고 에이전트는 그들을 신뢰해서는 안 됩니다.

질문과 행동 분류 (question vs action classification) 는 생각보다 어렵습니다.
"utils 에 몇 줄이 있는지"라고 물을 경우...

AI 자동 생성 콘텐츠

본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
3

댓글

0