상주형 AI 챗 에이전트가 동시 진행되는 여러 주제를 혼동하지 않는 문맥 특정 설계
요약
팀 채널에 상주하는 AI 에이전트는 여러 주제가 동시에 진행될 때 문맥 혼동 문제가 발생합니다. 본 글은 이러한 문제를 해결하기 위해, 메시지를 '주제 클러스터'로 동적으로 그룹화하고 응답 전에 어떤 주제인지 명시적으로 선언하는 4가지 설계 패턴을 제시하며, 시스템 아키텍처적 접근이 필요함을 강조합니다.
핵심 포인트
- 단순히 '최근 N건'의 메시지를 사용하는 방식은 병렬 진행되는 여러 주제에서 문맥 혼동을 야기합니다.
- 메시지들을 동적으로 '주제 클러스터'로 그룹화하고 관련도 점수를 활용하는 것이 핵심입니다.
- LLM에게 답변 생성을 요청하기 전, 어떤 주제에 대한 응답인지 내부 단계로 명시 선언해야 합니다.
- 전체 대화를 하나의 FIFO 큐가 아닌, 클러스터별 독립적인 큐를 사용해야 합니다.
1대1로 한 세션이 완료되는 챗봇과 달리, 팀 채널에 상주하는 AI 에이전트는 '하나의 채널에서 여러 주제가 동시에 병렬적으로 진행된다'는 상황을 피할 수 없습니다. A가 프로젝트 X의 진행 상황을 묻고 있는 도중에 B가 완전히 다른 프로젝트 Y의 질문을 던지고, C가 그 사이에 잡담을 끼어드는—이는 활발한 채널에서는 일상적인 일입니다. 이 글에서는 상주 에이전트가 '현재 발언이 어느 주제의 연장인지'를 혼동하지 않고 응답하기 위한 문맥 특정 설계를 정리합니다.
무엇이 문제인가: '최근 N건'으로는 주제가 섞인다
많은 구현은 응답 생성 시 '최근 N개의 메시지'를 그대로 프롬프트에 쌓는 단순한 방식에서 시작됩니다. 하나의 주제만 진행되는 채널에서는 이것으로 충분히 작동하지만, 여러 주제가 병렬적으로 진행되면 다음 사고가 발생합니다.
- 프로젝트 X의 질문에 답하려 했으나, 최근 N건에 혼재되어 있던 프로젝트 Y의 문맥을 근거로 사용하여 엉뚱한 답변을 반환함
- 스레드 기능(답장 스레드)을 사용하지 않고 모두가 채널 직하단에 게시하는 팀 운영에서는 발언의 '부모-자식 관계' 자체가 존재하지 않음
- 주제가 한 번 끊겼다가 수십 분 후에 재개되었을 때, 그 사이에 끼어든 무관한 발언이 '최근 N건'에 섞여 들어가 오래된 주제에 대한 답변 정확도가 떨어짐
네이티브 스레드 기능에 의존하는 설계는 스레드를 규칙적으로 사용하는 팀에서만 성립할 수 있습니다. Slack/Teams/Chatwork 어느 곳에서든 실제 운영에서는 채널 직하단에 평면적으로 대화가 진행되는 경우가 많기 때문에, 에이전트 측에서 주제를 재구성한다는 전제가 필요합니다. 유사한 불안감으로 여러 창구(채널)를 통해 같은 상담을 했을 때 답변이 달라질까 봐 걱정하는 경우가 있지만, 이는 창구(채널)를 넘나드는 문맥 공유의 문제이며, 본 기사에서 다루는 것은 하나의 채널 내에서 주제 자체가 여러 개 병렬로 진행되는 경우입니다.
패턴 1: 메시지를 '주제 클러스터'로 동적으로 그룹화하기
네이티브 스레드의 유무와 관계없이, 에이전트 측에서 발언을 주제 클러스터에 할당합니다. 판정 재료는 주로 두 가지입니다.
type TopicCluster = {
id: string;
lastActiveAt: Date;
...
}
핵심은 관련도 점수가 임계치를 밑돌았을 때 억지로 기존 클러스터에 밀어 넣지 않고, 신규 클러스터로 취급하는 것입니다. '둘 중 하나로 기울게' 판단을 강제하면 혼동 사고율이 높아집니다.
패턴 2: 응답 전에 '어떤 주제에 대한 응답인지'를 내부 단계로 선언시키기
LLM(Large Language Model)에게 직접 답변 생성을 시키기 전에, 먼저 '이 발언은 어떤 오픈 중인 주제 클러스터의 연장인지, 아니면 신규 주제인지'를 명시적으로 출력시키는 단계를 삽입합니다.
| 출력 | 거동 |
|---|---|
| 기존 클러스터 ID 1개 반환 | 해당 클러스터의 문맥만을 프롬프트에 쌓아 응답 생성 |
| ... | |
| 3번째 '확인하고 반환'이라는 선택지를 준비하는 것이 중요합니다. 판정할 수 없는 상태에서 다수결이나 최신 우선으로 밀어붙이면, 오발된 답변이 '확인 한마디'보다 더 많은 노력을 필요로 합니다. |
패턴 3: 주제 클러스터별로 큐를 분리하고 글로벌 FIFO(First-In, First-Out)로 사용하지 않기
여러 주제가 동시에 에이전트에게 질문을 포함할 경우, 전체를 하나의 FIFO 큐로 처리하면, 처리 중인 주제 X의 응답 생성 프롬프트에 주제 Y의 발언이 섞여 들어갈 위험이 있습니다. 주제 클러스터 단위로 큐를 분리하고, 클러스터별로 독립적인 문맥으로 응답을 구성하도록 합니다. 하나의 채널에 대해 에이전트가 여러 개의 '병렬 사고'를 가진다는 설계적 타협입니다.
패턴 4: 주제 클러스터의 종료 및 타임아웃
주제 클러스터는 방치하면 계속 늘어나기 때문에, 일정 시간(예: 30~60분) 동안 발언이 없으면 종료 처리합니다. 이는 종료된 후 유사한 어휘를 사용하는 무관한 발언이 와도 실수로 오래된 클러스터를 부활시키지 않기 위함입니다. 다만 '감사합니다', '알겠습니다'와 같은 짧은 확인 응답만으로 클러스터가 바로 종료되면, 직후의 추가 질문을 신규 주제로 오판할 수 있으므로, 종료 판정은 경과 시간을 주축으로 하고 발언 내용만으로는 조기 확정하지 않도록 합니다.
요약
- 여러 주제가 병렬하는 채널에서는 '최근 N건을 그대로 쌓는' 설계는 주제 혼동을 야기합니다.
- 네이티브 스레드 기능에 의존하지 않고, 시간적 근접성과 주제의 관련도에서 주제 클러스터를 동적으로 구성해야 합니다.
- 응답 생성 전에 '어떤 클러스터에 대한 응답인지'를 명시적으로 판정하게 하고, 판정할 수 없다면 한마디 확인을 반환하는 선택지를 남겨두어야 합니다.
- 클러스터 단위로 큐를 분리하고, 종료는 타임아웃 기준으로 진행해야 합니다.
상주 에이전트가 다루는 채널이 활발해질수록, 이 '화제 혼동'은 발생 빈도가 높아집니다. 응답 정확도를 모델의 지능에만 의존하지 않고, 어떤 문맥을 근거로 했는지를 구조적으로 분리해 두는 것이 운영 안정성으로 이어집니다.
필자는 Slack / Teams / Chatwork에 상주하며 채팅, 이메일, 캘린더, 회의록을 자동으로 수집하여 매일 아침 보고서를 전달하는 AI 에이전트 HACH를 개발했습니다. 다중 채널 동시 대응이나 다중 채널에서 발생하는 중복 질문 통합과 더불어, 하나의 채널 내에서 화제가 혼선되지 않도록 하는 문맥 특정 역시 상주 운영에서 은근히 중요한 관점이라고 생각합니다.
논의 (Discussion)

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