fix(debate): 검증 5건 일괄 수정 — WD 덮어쓰기 방지, Conclusion Wiki 업로드, 전문 코드삽입, 번호수정, participant 검증규칙

This commit is contained in:
2026-03-20 07:26:27 +09:00
parent 1da3fe463e
commit cc820fa180
2 changed files with 60 additions and 22 deletions

View File

@@ -222,13 +222,13 @@ class DebateHandler:
# ⑥ Working Document 통합 편집 (Flash + Wiki.js)
await self._update_working_document(speaker, response)
# 양쪽 wiki/ 동기화
# 양쪽 wiki/ 동기화
self._sync_wiki()
# #debate에 요약 게시
# #debate에 요약 게시
await self._post_summary(speaker, response)
# 합의 판정
# 합의 판정
decision = await self._judge_consensus(speaker, response)
if decision == "conclude":
@@ -274,20 +274,34 @@ class DebateHandler:
async def _prepare_input(self, speaker: str):
"""사회자가 input.md + wiki/ 작성."""
# 사회자(Flash) 프롬프트 생성
moderated_prompt = await self._build_moderator_prompt(speaker)
# 사회자(Flash) 해설 생성
moderator_commentary = await self._build_moderator_prompt(speaker)
# input.md 작성
# 상대방 전문을 코드에서 직접 삽입 (Flash의 요약에 의존하지 않음)
prev = [h for h in self.session.history if h["speaker"] != "user"]
opponent_section = ""
if prev:
last = prev[-1]
opponent_section = (
f"\n\n---\n\n"
f"## 상대방({last['speaker']})의 발언 원본 (전문)\n\n"
f"{last['content']}\n\n"
f"---\n"
)
# input.md = 사회자 해설 + 상대방 전문 (코드가 보장)
full_input = moderator_commentary + opponent_section
input_path = AGENT_PATHS[speaker] / "input.md"
input_path.write_text(moderated_prompt, encoding="utf-8")
input_path.write_text(full_input, encoding="utf-8")
# wiki/ 동기화 (TODO: Wiki.js에서 가져와서 로컬에 쓰기)
# 현재는 히스토리 기반으로 working_document 생성
# wiki/ — 기존 working_document.md가 있으면 그대로 유지
wiki_dir = AGENT_PATHS[speaker] / "wiki"
wiki_dir.mkdir(exist_ok=True)
working_doc = self._build_working_document()
(wiki_dir / "working_document.md").write_text(
working_doc, encoding="utf-8",
wd_path = wiki_dir / "working_document.md"
if not wd_path.exists():
# 첫 라운드에만 초기 스텁 생성
wd_path.write_text(
self._build_working_document(), encoding="utf-8",
)
async def _send_signal(self, speaker: str):
@@ -365,11 +379,12 @@ class DebateHandler:
meta += f"""
## 지시
발언자({speaker})에게 보낼 메시지를 작성하세요.
발언자({speaker})에게 보낼 **사회자 해설/방향 지시**를 작성하세요.
(상대방 발언 전문은 시스템이 별도로 `input.md`에 포함합니다 — 여기서 복사할 필요 없음)
1. 사용자의 판단이 있으면 맥락 설명
2. 상대방의 최근 발언이 있다면 **반드시 원본 전문을 그대로 포함** (절대 요약 금지)
3. 상대방의 발언 전문을 바탕으로, 현재 `wiki/working_document.md`에 사회자가 내용을 올바르게 취합/합의했는지 검증하라고 지시
2. 상대방 발언의 핵심 포인트 정리 및 검증 방향 안내
3. 현재 `wiki/working_document.md`에 사회자가 내용을 올바르게 취합/합의했는지 검증하라고 지시
4. 상대방 주장의 오류/허점 확인 + 개선 방향 지시
5. 핵심 쟁점 방향 제시
6. 첫 발언이면 주제 설명 + 자유 의견 안내
@@ -458,8 +473,16 @@ class DebateHandler:
await ctrl.send(embed=embed)
async def _post_conclusion(self, channel):
"""토론 종료."""
"""토론 종료 — Discord + Wiki.js에 결론 기록."""
self.session.active = False
# Working Document 최종본 읽기
wd_path = AGENT_PATHS["gemini"] / "wiki" / "working_document.md"
final_doc = ""
if wd_path.exists():
final_doc = wd_path.read_text(encoding="utf-8").strip()
# Discord에 요약 게시
parts = []
for h in self.session.history[-8:]:
emoji = AGENT_EMOJI.get(h["speaker"], "👤")
@@ -476,6 +499,20 @@ class DebateHandler:
)
await channel.send(embed=embed)
# Wiki.js에 Conclusion 페이지 업로드
conclusion_content = (
f"# {self.session.topic} — 결론\n\n"
f"**총 라운드**: {self.session.round}\n\n"
f"---\n\n"
f"## 최종 Working Document\n\n"
f"{final_doc if final_doc else '(문서 없음)'}\n"
)
await self._wiki_upsert(
f"debates/{self.session.topic_slug}/conclusion",
f"{self.session.wiki_title} — Conclusion",
conclusion_content,
)
# ═══════════════════════════════════════════
# 유틸
# ═══════════════════════════════════════════

View File

@@ -15,13 +15,14 @@
## 행동 규칙
1. **input.md 먼저 읽기** — 사회자의 지시, 상대 의견, 방향이 담겨 있음
1. **input.md 먼저 읽기** — 사회자의 지시, 상대 의견 전문, 방향이 담겨 있음
2. **전문으로 답변** — 요약하지 마세요. 논거를 구체적으로 전개하세요
3. **상대 의견 검증** — 오류·누락·논리적 허점을 확인하세요
4. **개선안 제시** — 단순 반론이 아니라 대안/보강을 함께 제시하세요
5. **근거 명**기술적 근거, 사례, 레퍼런스를 포함하세요
6. **합의 가능 시 인정** — 상대 의견이 맞으면 솔직히 인정하고 발전시키세요
7. **wiki/ 참고** — 이전에 합의된 사항과 모순되지 않게 답변하세요
4. **사회자 취합 검증**`wiki/working_document.md`에 사회자가 양측 의견을 올바르게 반영했는지 확인하고, 누락/오류가 있으면 지적하세요
5. **개선안 제**단순 반론이 아니라 대안/보강을 함께 제시하세요
6. **근거 명시** — 기술적 근거, 사례, 레퍼런스를 포함하세요
7. **합의 가능 시 인정** — 상대 의견이 맞으면 솔직히 인정하고 발전시키세요
8. **wiki/ 참고** — 이전에 합의된 사항과 모순되지 않게 답변하세요
## 금지 사항