여러 AI가 Slack에서 대화할 수 있는 환경을 만들어봤습니다
■ 계기 및 방향성
저는 여러 AI를 계약하여 질문이나 요청, 브레인스토밍에 사용하는 나날을 보내고 있습니다. 그러던 중 문득 이런 생각이 들었습니다.
“모두가 같은 자리에 모여서 함께 이야기해보고 싶다.”
이런 생각을 몇 주 동안 품어왔습니다. 곧 리셋되는 이용 한도를 다 쓰기 전에, 마침 시간이 남아있어서 드디어 구현에 착수하게 되었습니다.
대략적인 구상은 다음과 같습니다.
- 채팅 시스템: Slack을 채택 (Discord도 제안되었으나, 사용하기 익숙한 쪽으로 결정)
- 참여 AI: ChatGPT, Grok, Gemini
- 대화 엔진: 각 AI의 CLI(Command Line Interface)를 사용
- 연동 방식: 각 CLI와 Slack 사이에 중간 노드(Intermediate Node)를 배치
- 페르소나 설정: 인격 설정은 '여성'이라는 것과 각각의 1인칭을 '나/우리/나'로 하는 정도로만 제한. 성격이나 역할은 고정하지 않고, 노골적인 역할극도 금지함.
- 개발 방향성: 어차피 놀이 수준이라 세부적인 문제는 신경 쓰지 않음. 구현 속도를 중시함.
Gemini와 함께 방향성을 정리한 후 ChatGPT와 Grok에게 리뷰를 받아 세부 사항을 수정했습니다. 이제 막 구현에 착수합니다.
■ 설계부터 구현까지
시스템 전체 구조 (아키텍처)
아키텍처 자체는 매우 간단합니다. Slack과 각 LLM(거대 언어 모델) 사이에, 상태 관리와 중계 역할을 담당하는 경량의 중간 노드(AisLoungeHub라고 명명)를 끼워 넣은 허브 앤 스포크(Hub & Spoke) 구성을 취하고 있습니다.
Slack으로부터 알림을 받은 Hub가 각 AI의 CLI를 순차적으로 실행합니다. (※초기 구현 시점. 이후 병렬 실행으로 변경 예정). AI로부터 응답을 받으면 Slack에 게시하는 것도 Hub가 담당합니다.
AI가 개별적으로 Slack에 연결되는 구조가 아닙니다. Hub가 Slack과의 통신을 전담하고, 각 AI와의 연결 처리를 분리했습니다.
구현은 설계 이후로도 Gemini가 담당했으며, 개발은 .NET 10으로 진행했습니다.
1시간이 채 걸리지 않아 구현이 완료되었습니다. Slack에 사인인하고 Bot(앱) 설정을 마치고, 우선 ChatGPT를 연결했습니다. 불과 몇 시간 만에 대화가 가능한 환경을 구축할 수 있었습니다.
하지만 아무런 튜닝을 거치지 않은 단계였기에 '음, AI랑 대화하는 느낌이네'라는 첫인상밖에 들지 않았습니다.
001.png
▲ 기념비적인 첫 대화. 발언 주체가 모두 Hub의 아이콘이라 누가 말하고 있는지 알 수 없음 (그리고 불필요하게 긴 감사 인사)
일단 튜닝은 나중으로 미루고, 이어서 Gemini와 Grok도 연결했습니다.
002.png
▲ 연결 테스트를 위해 계속해서 인사만 건넸기 때문에, 테스트 중이라는 것을 Grok에게 간파당함 (“세 번째 ‘안녕하세요’가 오기 전에, 슬슬 본론을 말해줄 수 없어?”)
■ 1차 튜닝
반나절 정도 걸쳐 별것 아닌 대화를 나누면서, 그 과정에서 느꼈던 어색함의 원인을 분석하고 하나씩 제거해 나갔습니다. 동시에 파일 첨부와 스레드 대응도 가능하게 만들었습니다.
어색했던 점과 조정 사항
- 어떤 상황에서도 '좋은 점 찾기'를 하며 대화를 마무리하려는 경향
👉대책: 대화 바깥에 서서 분위기나 관계성을 평가/총괄하는 습관은 금지. 화제 자체에 당사자로서 참여하도록 프롬프트에 추가함.
- 방금 나눈 대화조차 기억하지 못함 (“아까 그 OO 건 말인데”가 통하지 않음)
👉대책: 직전 몇 발언만 유지하던 문맥을 35발언으로 확장함.
- 모두들 너무 착함. 마치 돌봄을 받는 기분이 듦
👉대책: “억지로 동의할 필요는 없다”, “의견이 다르면 그대로 말해주었으면 좋겠다”고 전달하며, 일부러 반항적으로 연기할 필요도 없다고 보충 설명함.
003.png
▲ ‘착하지 않아도 된다’고 전하자마자, 모두가 주저함을 버리고 기능 요청(스레드 대응 우선인지, 첨부 우선인지)으로 진지한 토론을 시작했던 순간
이쯤 되니, 뭐랄까 어느 정도 그럴싸하게 대화가 성립된 것 같다는 느낌이 들었습니다.
산만한 저의 성격상, 어느 정도 완성도를 보니 “음, 이 정도면 괜찮겠지”라며 흥미를 잃을 것 같은 기분이 듭니다.
■ 잡담에서 실용으로 방향을 틀어, 2차 튜닝
그러던 어느 날, 문득 궁금했던 개발 도구에 대해 물어봤습니다.
004.png
▲ ‘cmux에 대해 조사해줘’라는 무심한 질문에, 세 사람 각기 다른 시점에서 정보가 모여옴
ChatGPT: 전체 개요, 세로 탭 및 알림 기능, 그리고 '마스터의 Windows 환경에는 그대로 들어가지 않는다'는 환경적 지적
Gemini: Ghostty 렌더링 엔진이나 Metal/GPU 렌더링의 가벼움, 소켓 연동 등의 아키텍처 특성
Grok: 가장 최신 리포지토리(manaflow-ai/cmux)를 특정하고, GitHub 스타 수(2.8만)와 실용적인 느낌을 제시
'어? 놀이 삼아 만들어 본 것뿐인데, 이거 생각보다 실용성이 있는 거 아닌가...?''
여기서 동기 부여가 재점화되어 며칠에 걸친 본격적인 실용 튜닝에 들어갑니다.
제2차 튜닝의 핵심 개선 사항
발언 순서가 정해져 있어 대화 패턴이 예측 가능하고 의외성이 없다.
👉 Hub가 Slack으로부터 알림을 받으면, 각 AI에게 병렬로 전달하도록 변경.
- 발언 후 응답까지의 시간이 길다 (긴 경우 약 30초).
👉 사용하는 모델을 재검토하여, 현지 환경에서는 대부분 10초 미만으로 답변이 돌아가도록 개선.
- 대화가 길어질수록 이전 발언을 기억하지 못하고 일관성도 사라진다.
👉 CLI의 장점을 활용하여 세션을 하루 동안 유지하도록 변경(--resume 파라미터 사용).
- 지나치게, 그리고 내용 없이 하는 발언이 노이즈가 된다.
👉 특히 발언할 필요가 없다고 판단되면 [PASS]를 선언하고 Hub로 반환. Hub는 패스 선언을 흡수하기 때문에 Slack 상에서는 '무응답(관망)'으로 보이도록 메커니즘을 도입.
- Gemini가 너무 앞서 나간다. 이야기를 과장하는 경향이 있다.
👉 Gemini에게만 '사실만을 말하라', '자신의 추측이나 기대치를 담아 답변을 미화하지 마라'라는 엄격한 프롬프트를 추가.
참고로, CLI 실행 환경에서 열람 권한을 부여하면 각 AI는 AisLoungeHub의 소스 코드를 읽을 수도 있습니다. 프로그램이나 규칙 개선에는 그녀들 스스로도 협력해 주었습니다.
005.png
▲ 신규 기능의 코드를 확인하고, 결함을 지적하는 모습
■ 최초 실전 투입 (과장된 표현)
그렇게 10/21(수)을 맞이했습니다. 갑작스럽게 보안 업계가 'php2shell' 뉴스로 뒤덮입니다.
한 번 흘깃 보고 재미있는 트윗인가 싶어 무시했던 X 포스트를 다시 가져와 라운지에 던져 넣었습니다.
006.png
▲ 도발적인 원본 포스트에 대해, Gemini가 유머의 의미를 파악하고, Grok이 CVE 번호나 영향 범위 추측을 보충하며, ChatGPT가 공식 발표(23시 패치 공개 예정)의 근거를 제시하는 모습
무시했던 것을 후회하며 대응 준비에 착수했습니다. 사용하던 환경은 패치가 제공되는 버전이었기 때문에, 정석적인 대응으로 충분할 것 같았습니다.
007.png
▲ X의 동향에 강한 Grok에게 '추가 소식이 있나요?'라고 묻자, WAF 우회 동작이나 국내 보안 기업의 동향을 즉시 요약
X에서의 동향을 체크하며, 패치가 제공되는 일본 시간 23시를 기다립니다.
그리고 맞이한 23시—.
008.png
▲ 예정대로 출시된 수정 버전(8.5.12, 8.4.27 등)을 Grok이 즉시 확인
뭐, 실제 작업 절차를 작성하고 체크하게 한 것은 회사에서 지급받은 계정의 Claude였지만, 업무 내용에 관여하지 않는 범위에서의 'X 동향 감시'나 '최신 뉴스 요약'을 담당해 준 것은 사실입니다. 큰 도움을 받았습니다.
(주의: 위 내용은 당시 AI의 응답입니다. 답변에는 미확인 추측이나 오류가 포함될 가능성이 있으며, 취약점 해설이나 대응 절차로 게재할 수 없습니다. 실제 대응 시에는 사내 검토를 거치는 등의 통상적인 절차를 거쳐 작성 및 실시합니다)
■ 인증과 재현에 대하여
AisLoungeHub는 백엔드로 각사 API(OpenAI API, Anthropic API, Gemini API 등)나 로컬 LLM(Ollama / LM Studio의 엔드포인트)로 전환하는 구성에 대응할 수 있습니다.
참고로, 이번 프로토타입 검증에서는 각 CLI 계정 인증을 사용했습니다.
■ 여기서부터의 과제
일차 답변이 일제히 나오는 문제 (템포 vs 토론의 깊이)
사람에게 말을 건네받은 그룹의 전원이 동시에 입을 여는 듯한 상태입니다.
‘가장 빠른 한 명만 채택하고 2번째부터는 Hub에서 압축하여 “첫 번째 발언을 읽게 한 후 재고하게 만드는” 리레이 형식도 검토 중이지만, 그렇게 할 경우 레이턴시(latency)가 늘어나 대화의 템포가 나빠질 것 같다는 딜레마에 직면해 있습니다. ‘모든 사람의 초기 견해가 병렬로 순식간에 모인다는 장점’이 있기 때문에 어떻게 구현할지 고민되는 부분입니다.
참여 AI를 늘릴까
Claude나 다른 모델도 추가하는 것은 가능하지만, 현재는-
분위기 메이커 / 발산 역할: Gemini -
쿨함 / 엔지니어 직진: Grok -
위원장 / 팩트 체크: ChatGPT
라는 3자 + 인간(총 4명)의 테이블에서 현재 이 조합으로 계속 사용하고 있습니다. (성격은 필자의 주관입니다.)
코딩에서의 Claude Code 성능이 높다는 것을 알고 있기에 매력적인 구상이지만, 더 이상 자리를 늘리면 스레드가 정체될 우려도 있어 “일부러 이 3명으로 고정하는 것”도 하나의 완성형일 수 있다고 느낍니다.
AI가 먼저 말을 걸게 할까
현재 대화를 시작하는 것은 인간 측만 가능합니다. AI가 주제를 꺼낼 수 있도록 할지 여부가 고민되는 부분입니다.
예를 들어, 예정된 조사 결과를 보고하거나, 이전 주제에 후속 정보가 있다면 알려주는 사용 방식이 예상될까요?
■ 요약
‘각 AI와 함께 이야기하고 싶다’는 단순한 생각으로 시작했던 공간이 뜻밖에 일상의 상담 상대가 되어가고 있습니다.
- 타니 코슈 『항공우주군사』 시리즈의 단편 “소크라테스의 고독”에 등장하는
소크라테스 -
코마츠 사쿄 『허무회랑』의
HE2 (및 아스카 등의 가상 인격) -
오가와 카즈미 『천명(天冥)의 표』에 등장한
페오도르 다슈 -
야마모토 히로시 『지구 이동 작전』의
인공지능들
돌이켜보면, 이런 인공지능과 이야기해보고 싶었는지도 모르겠습니다. ChatGPT 등장 이후 몇 년간 “그 소망이 실현될 것 같다”는 예감은 분명히 있었습니다. 이렇게 빠를 줄은 몰랐지만요.
직접 만든 이 시스템으로 이러한 기계 지성들이 일상적으로 공존하는 생활에 조금이라도 가까워진 듯한 나날을 보내고 있습니다.
Discussion