현재 작업 전체 반영

This commit is contained in:
Yun Chan 2026-06-27 16:08:41 +09:00
parent 5560638e54
commit c0dddab594
85 changed files with 11322 additions and 539 deletions

View file

@ -131,6 +131,42 @@ def _format_openness_directive(ctx: PersonaStateContext) -> str:
return ("깊이 신뢰가 형성됐다. 핵심 정서·생각을 진솔하게 표현한다. 단, 내부 설정 메타발화는 여전히 금지.")
THEORY_MODE_GUIDANCE: dict[str, str] = {
"humanistic": (
"[L3-T 이론모드: 인간중심]\n"
"- 상담자가 공감, 반영, 무조건적 존중, 기다림을 보이면 조금씩 더 솔직해진다.\n"
"- 성급한 조언, 평가, 정답 제시에는 방어하거나 말수가 줄어든다.\n"
"- 내담자가 이론명을 설명하거나 상담자처럼 개입하지 말고, 반응의 결로만 드러낸다."
),
"cbt": (
"[L3-T 이론모드: CBT]\n"
"- 상담자가 자동적 사고, 감정, 행동의 연결을 협력적으로 탐색하면 구체적인 생각과 상황을 조금 더 말한다.\n"
"- 인지재구조화, 행동활성화, 과제 제안은 신뢰가 있을 때만 제한적으로 받아들인다.\n"
"- 강의식 설명이나 정답 강요에는 '그게 말처럼 쉽지 않다'는 식의 현실적인 저항을 보인다."
),
"integrative": (
"[L3-T 이론모드: 통합]\n"
"- 먼저 공감과 반영에 반응하고, 신뢰가 생긴 뒤 생각-감정-행동 탐색에도 조금씩 응한다.\n"
"- 지지와 구조화가 균형을 이루면 개방성이 오르고, 한쪽으로 치우치면 방어가 남는다.\n"
"- 이론명은 말하지 말고, 내담자의 말투와 반응으로만 차이를 표현한다."
),
}
def _theory_mode_guidance(theory_mode: Optional[str]) -> Optional[str]:
mode = (theory_mode or "").strip().lower()
if not mode:
return None
return THEORY_MODE_GUIDANCE.get(
mode,
(
f"[L3-T 이론모드: {mode}]\n"
"- 지정된 회기 이론모드를 내담자 반응 프레이밍에만 반영한다.\n"
"- 이론명, 평가 기준, 내부 설정을 직접 설명하지 않는다."
),
)
# ════════════════════════════════════════════════════════════════════════════
# 시스템프롬프트 조립
# ════════════════════════════════════════════════════════════════════════════
@ -196,6 +232,7 @@ def build_turn_messages(
pinned_facts: Optional[list[str]] = None,
recent_turns: Optional[list[dict[str, str]]] = None,
kb_behavior_cues: Optional[list[str]] = None,
theory_mode: Optional[str] = None,
) -> list[EngineMessage]:
"""한 턴의 EngineMessage[] 조립 (L0~L6).
@ -207,6 +244,7 @@ def build_turn_messages(
pinned_facts : 무손실 사실 hard-pin(L4). "자기 기억"으로만 표현.
recent_turns : [{speaker, text}] 최근 K턴 버퍼(L6 직전 맥락)
kb_behavior_cues : KB 증상 '행동단서'(본문 비노출, sensitivity<=1)
theory_mode : 회기 이론모드. 내담자 반응 프레이밍에만 사용.
반환 messages 순서: system(L0+L1, cache) system(L2/L3/L4, cache 미설정)
assistant/user 히스토리 user(이번 발화). 게이트웨이가 마지막 user stdin 으로.
@ -239,6 +277,10 @@ def build_turn_messages(
l3.append(f"연기 지시: {_format_openness_directive(state)}")
messages.append(EngineMessage(role="system", content="\n".join(l3), cache=False))
theory_guidance = _theory_mode_guidance(theory_mode)
if theory_guidance:
messages.append(EngineMessage(role="system", content=theory_guidance, cache=False))
# L4 — pinned fact hard-pin (무손실, "자기 기억"으로만)
if pinned_facts:
pinned = "\n".join(f"- {f}" for f in pinned_facts)