Make(Integromat)에서 LLM 응답 Parse JSON이 50번에 한 번씩 깨져서 시나리오 전체가 죽습니다
Make 시나리오에서 RSS로 들어온 글을 LLM에 요약+분류시키고 그 결과를 Notion에 적재하는 흐름을 만들고 있습니다.
LLM에게 {"summary": "...", "category": "..."} 형태로 JSON을 달라고 했고, 다음 모듈 Parse JSON으로 받아 Notion 필드에 매핑합니다. 그런데 한 50번에 한 번씩 시나리오가 멈춰요. 로그 보니까 LLM이 가끔
json ...코드펜스로 감싸서 보내거나- 앞에 "네, 다음은 요약입니다:" 같은 멘트를 붙이거나
- 본문에 따옴표가 들어가서 JSON이 깨지는
경우가 있더라고요. 그때마다 Parse JSON 모듈이 Failed to parse JSON string 뱉고 시나리오 전체가 죽습니다. 매번 history 들어가서 수동 재실행하기 너무 번거로운데, 안정적으로 만드는 방법 없을까요?
답변 2개
- 채택된 답변에디터 검증
이거 Make에서 LLM 붙이면 거의 다 밟는 지뢰예요. 저도 똑같이 당했고, 결국 세 군데 손봐서 잡았습니다.
1. 모델이 구조화 출력 지원하면 그거부터 켜세요. OpenAI 모듈이면 response_format을 json_object(가능하면 json_schema)로, Anthropic이면 tool use로 함수 스키마 정의해서 그 도구를 쓰게 강제. 그러면 코드펜스랑 "네, 다음은 요약입니다" 잡담이 애초에 안 나옵니다. 본문 따옴표 escape 깨지는 것도 모델이 텍스트로 직렬화 안 하니까 같이 해결되고요. 제일 깔끔.
2. 그게 안 되는 모듈이면 사이에 청소 단계를 끼웁니다.
Set variable에 정규식으로 첫{부터 마지막}까지만 잘라내기 ({[\s\S]*}패턴, replace로 캡처). 코드펜스랑 앞뒤 멘트가 이걸로 거의 다 날아가요.3. 근데 진짜 중요한 건 이거 — Parse JSON 모듈에 에러 핸들러 다세요. 모듈 우클릭 → Add error handler → Resume 디렉티브 붙이면, 한 번들이 파싱 실패해도 시나리오 전체가 안 죽고 그 번들만 건너뜁니다. 무인 자동화에서 이거 없으면 50번에 1번 깨질 때마다 RSS로 들어오던 나머지 데이터까지 같이 막혀요. 실패 번들은 Resume 분기에서 Data store나 Slack으로 빼두면 나중에 모아 처리 가능.
프롬프트에 "코드펜스/설명/인사 없이 순수 JSON만" 박는 건 빈도 줄이는 보조일 뿐이고, 1번 → 3번 순으로 가세요. 1번이 안정성, 3번이 무인 운영 생존성입니다.
에러 핸들러 Resume 다는 거 ㄹㅇ 중요합니다. 이거 안 달면 새벽에 한 건 깨졌을 때 그 뒤로 들어온 거 다 밀려서 아침에 보면 난리나 있음.
그리고 본문 따옴표 들어가서 깨지는 건 모델이 JSON 안에서 escape를 제대로 안 해서 그런 건데, 정규식 청소로는 이게 잘 안 잡혀요. 따옴표가 본문에 있는 건지 구분자인 건지 정규식이 모르니까. 결국 tool use(구조화 출력)로 가야 깔끔하게 끝납니다. 직렬화를 모델이 아니라 런타임이 하니까요. 그래서 저도 결론은 1번에 한 표.