
AI 내부에 AI를 사용하지 않고 AI 에이전트를 위한 자체 검사 도구를 만들었습니다
요약
AI 에이전트의 확증 편향을 방지하기 위해 모델 외부에서 작동하는 자체 검사 도구 'Self-Inspect'를 소개합니다. LLM이나 임베딩 없이 결정론적 휴리스틱과 키워드 매칭을 사용하여 에이전트의 사고 과정에 비판적인 질문을 던집니다.
핵심 포인트
- 에이전트의 자기 성찰 프롬프팅 한계 극복
- LLM 없이 작동하는 결정론적 휴리스틱 방식
- 환각 현상이 없는 투명한 검사 프로세스
- 50개의 검사 렌즈를 통한 메타 사고 유도
우리가 바보 같은 행동을 하기 직전에는 "잠깐, 정말 확실해?"라고 묻는 작은 목소리가 들리곤 합니다. AI 에이전트에게는 그런 목소리가 없습니다.
그래서 에이전트들은 작업의 첫 번째 읽기에 확신을 가져버리고 다시는 검토하지 않습니다. 명시하지 않은 가설들을 쌓아 올립니다. 긴 연쇄 과정 속에서 목표로부터 벗어나고, 그럴듯해 보이는 첫 번째 답변에서 멈추며, 더 많은 증거를 확보하지 못한 채 확신만 더해갑니다. 이 중 어느 것도 지식의 결여 때문이 아닙니다. 모델은 이미 더 나은 답을 알고 있습니다. 단지 멈춰서 질문을 던지지 않을 뿐입니다.
여기서 문제가 발생합니다. 에이전트는 스스로 그 목소리를 신뢰성 있게 키워낼 수 없습니다. 무엇을 성찰할지 결정하는 부분은 이미 확신을 가져버린 부분과 동일하기 때문에, 모델에게 "스스로 재확인해봐"라고 프롬프트(Prompting)를 주는 것은 대부분 동일한 편향을 다시 실행하고 그것을 확신이라고 부르는 것에 불과합니다. 질문은 모델 외부에서 와야 합니다.
그것이 제가 만든 것입니다. 이름은 Self-Inspect입니다.
작동 방식
에이전트는 자신이 무엇을 하고 있는지, 혹은 무엇을 할 것인지에 대한 생각(thought)인 문장을 보냅니다. 그러면 하나의 메타 사고(metathought), 즉 작업을 계속하기 전에 자신의 작업과 가설을 검토하게 만드는 짧은 질문을 돌려받습니다.
thought: "나는 이 아키텍처를 확정하고 고정된 것으로 취급하겠습니다"
metathought: "무엇이 고정되어 있습니까?" (lens: commitment)
thought: "이것이 사실이라는 것에 무엇이 의존합니까?"
metathought: "사실이라는 것에 의존하는 것은 무엇입니까?" (lens: assumption)
조언이 아닙니다. 정답도 아닙니다. 질문입니다. 생각은 여전히 에이전트가 하지만, 도구는 단지 그 생각을 들여다보게 만들 뿐입니다.
사람들이 예상치 못한 부분: 내부에는 모델이 없습니다
LLM, 임베딩(embeddings), 의미론적 유사성(semantic similarity)이 전혀 없습니다. 선택은 약 50개의 "검사 렌즈(inspection lenses)"(137개의 질문: 가설, 확신, 범위, 이탈, 완결성 등)가 담긴 오픈 CSV 파일에 대한 작은 결정론적 휴리스틱(deterministic heuristic)입니다.
하나의 사고(thought)가 주어지면, 시스템은 텍스트를 정규화(normalize)하고, 렌즈(lens) 이름 및 해당 렌즈의 질문들과의 키워드 중첩(keyword overlap)을 통해 각 렌즈에 점수를 매깁니다. 그 후 가장 적합한 렌즈를 선택하여 해당 렌즈의 표준 질문(canonical question)을 반환합니다. 동일한 입력에 대해서는 매번 동일한 질문을 반환합니다. 여러분은 셀렉터(selector, 작은 파일 하나)와 CSV 파일을 읽음으로써 시스템이 왜 특정 결과를 반환했는지 정확히 알 수 있습니다. 시스템 내부에는 환각(hallucinate)을 일으키는 요소가 전혀 없기 때문에, 스스로의 비판에 대해 환각을 일으킬 수도 없습니다.
만약 일치하는 것이 없더라도 실패하지 않습니다. 작업과 가정에 대한 보편적인 질문을 반환하는데, 이는 Self-Inspect라는 도구가 에이전트에게 항상 질문할 거리를 제공해야 하기 때문입니다.
사용 방법 (키 없이 무료로 사용 가능)
무엇에서든 REST 방식으로 호출 가능합니다:
curl -s -X POST https://api.ejentum.com/self-inspect \
-H "Content-Type: application/json" \
-d '{"thought":"I am committing to this architecture and treating it as fixed"}'
-> [{ "label": "commitment", "metathought": "What is fixed?" }]
MCP 서버로서 사용 (Claude Code, Cursor, n8n, 모든 HTTP-MCP 클라이언트), 설치나 키가 필요 없습니다:
{
"mcpServers": {
"self-inspect": {
"type": "http",
"url": "https://api.ejentum.com/self-inspect-mcp"
}
}
}
또한 네트워크를 전혀 사용하지 않고 전체를 오프라인으로 실행할 수 있는 stdio 패키지(SELF_INSPECT_LOCAL=1)도 있습니다.
완전한 개방
리포지토리(repo) 자체가 도구입니다. 그곳에서 읽을 수 있는 CSV와 셀렉터가 실제 라이브 엔드포인트(live endpoint)가 실행하는 정확한 로직입니다. 배포된 엔진이 공개된 소스 코드와 바이트 단위로 일치하지 않으면 드리프트 테스트(drift test)가 빌드를 실패시키므로, "공개된 것 == 배포된 것"은 단순한 약속이 아니라 강제되는 사항입니다.
이 시스템은 완전히 감사 가능(auditable)하도록 의도적으로 단순하게 설계되었습니다. 키워드 라우팅(keyword routing)이 임베딩 기반 라우터(embedding-based router)에 비해 충분히 좋은지에 대해서는 타당한 의문이며, 저 또한 진심으로 피드백을 받고 싶은 부분입니다. 렌즈 세트는 CSV로 구성되어 있으며, 이를 추가하는 것은 풀 리퀘스트(pull request)를 통해 이루어집니다.
Repo: https://github.com/ejentum/self-inspect-mcp
이것은 제가 Ejentum에서 출시한 첫 번째 오픈 소스 (open-source) 도구입니다. 에이전트 루프 (agent loop) 내에서 무언가를 실행하기 직전에 이 도구를 삽입해 보세요. 그리고 이 도구가 여러분의 에이전트에게 무엇을 요구하는지 저에게 알려주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기