Files
variet-agent/docs/design/debate-room-v2.md

4.8 KiB

AI Debate Room — 설계서 v4

확정 구조: 파일 기반 토론 + Wiki 동기화

아키텍처

사용자 (관전/개입/방향지시)
  ↕ Discord #variet-debate (펜딩 시에만 질문)
사회자 (Gemini CLI Flash)
  ├→ AG 로컬 폴더에서 response.md 읽기
  ├→ 상대 AG 로컬 폴더에 input.md 쓰기
  ├→ 양쪽 wiki/ 폴더 동기화
  ├→ Wiki.js에 합의 기록
  ├→ 합의 감지 → Wiki 기록 + 사용자에게 검토 요청
  └→ 펜딩 감지 → 사용자에게 질문
  ↕                    ↕
AG(Gemini)           AG(Claude/Opus)
debate_gemini/       debate_opus/

각 AG 로컬 폴더 구조

debate_gemini/                  debate_opus/
  GEMINI.md (참여자 프롬프트)      GEMINI.md (참여자 프롬프트)
  response.md  ← AG가 Output     response.md
  input.md     ← 사회자가 Input   input.md
  wiki/        ← Wiki 미러링      wiki/
    agenda.md                       agenda.md
    working_document.md             working_document.md
    ...                             ...
파일 작성자 소비자 용도
response.md AG 사회자 AG의 전문 답변 (길이 무제한)
input.md 사회자 AG 상대 의견 + 사회자 해설 + 방향 지시
wiki/ 사회자 AG Wiki.js 페이지 미러 (현재 합의 상태)
GEMINI.md 사전 세팅 AG 참여자 역할 + 행동 규칙

턴 흐름 (자동 반복)

flowchart TD
    S[!debate-start 주제] --> M1[사회자: 첫 발언자 선택]
    M1 --> W1[input.md 작성 + wiki/ 동기화]
    W1 --> D1[Discord 시그널 전송]
    D1 --> AG1[AG 발언: response.md 작성]
    AG1 --> M2[사회자: response.md 읽기]
    M2 --> WIKI[Wiki.js 업데이트]
    WIKI --> CHECK{합의 판정}
    CHECK -->|대립 중| W2[상대 input.md 작성 + wiki/ 동기화]
    W2 --> D2[Discord 시그널]
    D2 --> AG2[상대 AG 발언]
    AG2 --> M2
    CHECK -->|합의| DONE[Wiki 최종 기록 + 사용자 검토 요청]
    CHECK -->|펜딩| ASK[사용자에게 질문]
    ASK --> USER[사용자 응답]
    USER --> W2

사용자 개입 시점

상황 트리거 사회자 행동
합의 완료 양쪽 agree 2+ 연속 Wiki 최종 기록 → Discord에 "검토 요청"
의견 필요 양쪽 모두 user_input 요구 Discord에 질문 → 응답 대기
중간 업데이트 N 라운드마다 Wiki Working-Document 업데이트 + Discord 요약
사용자 임의 개입 !debate-inject 의견 다음 턴 input.md에 반영
방향 전환 주제 이탈 감지 사회자가 redirect 지시

합의 판정 기준

사회자(Flash)가 매 턴 후 판정:

{
  "decision": "continue | ask_user | conclude",
  "agreement_level": "disagree | partial | agree",
  "reason": "판정 근거",
  "wiki_update": true/false
}
  • continue: 자동 다음 턴
  • ask_user: Discord에 질문 → 응답 올 때까지 대기
  • conclude: 합의 완료 → Wiki 최종 기록

Wiki.js 구조

/Debates/{주제}/
  Agenda              ← 토론 의제 + 범위
  Working-Document    ← 진행 중 합의 사항 (라이브)
  Round-Log           ← 라운드별 요약 기록
  Conclusion          ← 최종 합의 (종료 후)
  • 사회자만 Wiki 쓰기 권한
  • 매 라운드 후 Working-Document 업데이트
  • AG는 로컬 wiki/ 폴더에서 읽기만

Discord 채널 역할

채널 용도
#variet-debate 사용자 커맨드 + 요약 게시 + 승인 요청
#ag-debate_gemini AG(Gemini)에게 시그널 전송
#ag-debate_opus AG(Opus)에게 시그널 전송

Discord 메시지는 시그널 용도만. 전문은 모두 로컬 파일로 전달.

과금 구조 (변경 없음)

역할 모델 과금
사회자 Gemini Flash (CLI) 무료/구독 쿼터
토론자 A AG (Gemini 3.1 Pro) 구독 쿼터
토론자 B AG (Claude Opus) 구독 쿼터

구현 파일

파일 역할
handlers/debate_handler.py 세션 관리, 파일 읽기/쓰기, 턴 관리
prompts/debate/participant_base.md AG 참여자 프롬프트 (→ GEMINI.md로 복사)
prompts/debate/moderator.md 사회자 프롬프트
api/discord_bot.py 커맨드 + AG 메시지 감지
tools/wiki_helper.py Wiki.js 연동

미결 사항

  1. AG가 response.md에 쓰라는 지시를 확실히 따르는지 검증 필요
  2. UTF-8 인코딩 — debate_handler.py에서 파일 읽기/쓰기 시 명시
  3. Wiki.js 페이지 → 로컬 폴더 동기화 함수 구현 (wiki_helper.py)
  4. 합의 판정 Flash 프롬프트 정교화
  5. 컨텍스트 창 관리 — 토론이 길어질 때 히스토리 압축 전략