재귀적 신경기호 제어 역전
- 2025-08-21 (modified: 2025-08-23)
- 별칭: RNS-IoC
- 저자: AK
AI 에이전트와 전통적인 로직 사이의 재귀적인 제어 역전(IoC)을 통해 두 시스템 사이의 장점을 취하는 패턴에 대한 생각을 정리했다. 최근에 했던 두 가지 시도(반구조적 소프트웨어 명세서 (s4), 과정에 담긴 가치의 증강)에 담긴 공통점이기도 하다.
AI 에이전트의 도구 사용과 제어 역전
전통적 코드가 LLM을 호출하는 방식이 순방향의 제어라면 LLM이 코드를 호출하는 방식, 즉 AI 에이전트가 도구를 활용하는 방식은 제어 역전이라고 볼 수 있다. 전통적 코드는 심볼릭 계산이고 LLM은 인공신경망이니, AI 에이전트의 도구 활용은 신경기호 제어 역전 패턴이라고 부를 수 있다.
재귀적인 제어 역전
반구조적 소프트웨어 명세서의 s4
는 특정 형식을 따르는 yaml 명세서(s4.yaml
)와 소스 코드를 정적 분석하여 다음에 해야할 일이 무엇인지를 출력하는 전통적인 CLI 프로그램이다.
s4
를 실행하면
- 명세서에 내적 일관성이 있는지(모든 비즈니스 목표에 한 개 이상의 구체적 기능이 존재하는지, 기능 사이의 의존 관계에 순환이 없는지, 모든 기능에 한 개 이상의 인수 기준이 존재하는지 등)
- 명세서와 코드 사이가 일치하는지(명세서 상 인수 기준에 대응되는 인수 테스트가 코드에 존재하는지)
- 명세서에 등록된 모든 검사(인수 테스트, 단위 테스트, 커버리지, 타입 검사 등)를 통과하는지를
검사한 후 문제가 발견되면 가장 먼저 해결해야할 문제가 무엇인지, 해당 문제를 해결하기 위해 필요한 뭘 하면 되는지 등을 출력한다.
이 도구를 AI 에이전트에게 줘어주면 재미난 일이 일어난다.
- 사용자가 에이전트에게 자연어로 명령을 내린다.
- 가장 추상적인 상위 수준의 제어는 AI 에이전트가 담당한다. 에이전트는 언제
s4
를 호출할지를 결정한다. s4
는 정해진 로직에 따라 각종 검사를 수행하고 그 결과를 출력한다.- AI 에이전트는
s4
의 출력을 참고하여 구체적 작업을 수행한다. 이 단계에서 에이전트는 또다른 하위 단계의 도구들(diff, patch, MCP server 등) 사용한다.
3-4 단계에서 사이에서 벌어지는 일이 흥미로운데, s4
는 구체적인 작업(즉, 실질적인 코딩)을 직접 하지 않는다. 대신 AI 에이전트가 뭘 해야하는지 알려줄 뿐이다. 기술적으로만 보자면 s4
는 그저 분석 결과를 텍스트로 출력할 뿐이고 AI 에이전트는 이를 참고할 뿐이지만, 실제로 일어나는 일을 의미적으로 해석해보면 s4
가 AI 에이전트에게 다음에 해야할 일을 지시하고 에이전트가 이에 따라 가장 구체적인 하위 수준의 작업(코딩)을 수행한다고 볼 수 있다.
sequenceDiagram
autonumber
actor U as User
participant S as s4
participant A as Agent
U ->>+ A: 명령
loop s4가 끝났다고 할 때까지
A ->>+ S: 호출
S -->>- A: 작업 지시
A ->> A: 지시에 따라 작업 수행
end
A -->>- U: 완료 보고
분산된 기능적 분해라는 관점에 따라 해석해보면 s4
가 에이전트를 호출하여 일을 시키는 방향으로 다시한번 제어 역전이 일어난 것이다.
일반적인 AI 에이전트의 도구 사용 패턴(재귀적이지 않은 신경기호 제어 역전)은 아래와 같다;
sequenceDiagram
autonumber
actor U as User
participant C as Code
participant A as Agent
U ->>+ A: 명령
loop Agent가 끝났다고 판단할 때까지
A ->>+ C: 호출
C -->>- A: 결과
end
A -->>- U: 생성된 출력
또다른 사례
과정에 담긴 가치의 증강에서는 위키 정원 관리를 하는 맥락에서 전통적인 그래프 분석 알고리즘과 LLM을 섞어 쓴 사례를 소개한다.
- 사용자가 AI 에이전트에게 추상적인 수준의 명령을 내리면(“위키를 개선하고 싶어”), 에이전트는 그래프 분석을 수행하는 CLI 스크립트를 호출한다.
- CLI 스크립트는 그래프 분석 결과 가장 멀리 떨어진 두 문서를 이어주는 경로를 맥락과 함께 출력하고 AI 에이전트가 특정 작업(리버스 사전 탐색)을 수행하도록 유도한다.
- AI 에이전트는 CLI의 출력이 유도하는대로 구체적 작업을 수행한다.
이 사례에서도 마찬가지로 재귀적 제어 역전이 일어났다.
일반화
두 사례를 일반화해보면 일반적인 에이전트-도구 사이의 인터랙션과 재귀적 제어 역전이 일어나는 방식 사이의 차이를 알 수 있다.
에이전트가 호출하는 도구가 단지 수동적으로 정보를 제공하는 역할을 하는지, 에이전트의 특정 행동을 강하게 유도하는(그래서 기능적으로는 에이전트를 호출하는 것과 동일한) 역할을 하는지가 유일한 차이점이다. 전자가 “신경-기호 제어 역전Neuro-symbolic IoC”이라면 후자는 “재귀적 신경-기호 제어 역전Recursive neuro-symbolic IoC”이라고 부를 수 있겠다.
에이전트가 도구의 호출 여부를 제어하고, 호출된 도구는 에이전트가 잘 하지 못하는 종류의 작업을 수행한 뒤에 도구가 잘 하지 못하는 종류의 작업을 다시 에이전트에게 지시하여 에이전트의 작업을 촉발하는 패턴이다. 이때 에이전트는 다시 다른 도구들(예: git diff
, grep
, MCP 서버 등)을 호출해가며 작업을 수행하게 되므로 재귀적이다.
기술적으로는 아주 작은 차이지만 활용 가치가 큰 패턴이라고 생각한다. 결정론적 특성의 전통적 도구와 확률적 생성 모델의 일종인 LLM 기반 AI 에이전트를 상호보완적인 방식으로 결합할 수 있는 패턴 중 하나로 다양하게 써먹을 수 있겠다.