From 131022eb123f49f024a64d0408df8476f0e52d4d Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Mon, 6 Apr 2026 14:02:33 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=8F=84=EA=B5=AC=20=EA=B2=B0=EA=B3=BC?= =?UTF-8?q?=20=ED=8F=AC=EB=A7=B7=ED=8C=85=EC=97=90=20=ED=8F=89=EB=AC=B8=20?= =?UTF-8?q?=ED=94=84=EB=A1=AC=ED=94=84=ED=8A=B8=20=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=E2=80=94=20JSON=20=EC=B6=9C=EB=A0=A5=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 분류기 system prompt가 JSON 강제라서 결과 포맷도 JSON으로 나옴. 도구 결과 정리 시 별도 평문 프롬프트를 messages로 직접 전달. Co-Authored-By: Claude Opus 4.6 (1M context) --- nanoclaude/services/worker.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/nanoclaude/services/worker.py b/nanoclaude/services/worker.py index 119782c..cf1198a 100644 --- a/nanoclaude/services/worker.py +++ b/nanoclaude/services/worker.py @@ -265,22 +265,27 @@ async def run(job: Job) -> None: collected.append(response) await state_stream.push(job.id, "result", {"content": response}) else: - # 결과를 EXAONE에 전달하여 자연어로 정리 + # 결과를 EXAONE에 전달하여 자연어로 정리 (평문 프롬프트 사용) tool_json = json.dumps(result["data"], ensure_ascii=False) if len(tool_json) > MAX_TOOL_PAYLOAD: tool_json = tool_json[:MAX_TOOL_PAYLOAD] + "...(truncated)" - format_input = f"[도구 결과]\n{tool_json}\n\n위 데이터를 바탕으로 사용자에게 자연스럽고 간결하게 답해." + format_messages = [ + {"role": "system", "content": "너는 이드, 상냥한 AI 어시스턴트야. 도구 결과를 사용자에게 자연스럽고 간결하게 전달해. JSON이나 코드블록 없이 순수 텍스트로만 답해. 날짜와 시간을 명확히 포함해."}, + {"role": "user", "content": f"아래 도구 결과를 사용자에게 자연스럽게 전달해줘:\n\n{tool_json}"}, + ] try: response = await _complete_with_heartbeat( - backend_registry.classifier, format_input, job.id, + backend_registry.classifier, "", job.id, + messages=format_messages, beat_msg="결과를 정리하고 있습니다..." ) - # 포맷팅 응답이 JSON으로 올 수도 있으니 파싱 시도 - try: - parsed = json.loads(response) - response = parsed.get("response", response) - except (json.JSONDecodeError, AttributeError): - pass + # 혹시 JSON 잔재가 있으면 추출 + if response.strip().startswith("{"): + try: + parsed = json.loads(response) + response = parsed.get("response", response) + except (json.JSONDecodeError, AttributeError): + pass except Exception: response = result.get("summary", "결과를 조회했습니다.") collected.append(response)