개념 2026-09-08

자동화에서 LLM 다루기

출력 필드를 늘리는 법, LLM에게 시키면 안 되는 일(긴 목록에서 값 옮겨 적기), 도피로를 주지 않기, 표기 흔들림 정규화, 호출 합치기.

자동화 한복판에 AI를 끼워 넣으면서 배운 것들입니다. 핵심은 AI는 판단은 잘하지만 정확한 옮겨 적기는 못 한다 — 그건 프로그램의 일이다. → 상위: 개발 지식 지도

출력 필드를 하나 늘릴 때 체크리스트 (n8n Structured Output)

  1. 프롬프트에 새 필드의 판정 기준을 명시
  2. Structured Output Parser 스키마에도 같은 필드 추가 — 안 하면 파서가 새 필드를 버린다
  3. 그 필드를 쓰는 다운스트림 노드(경로 분기 등) 수정
  4. 워크플로 수동 실행으로 실제 값이 갈리는지 확인

예: 용어 사전에 용어 아닌 게 섞이자 유형(용어/이슈) 한 칸을 추가해서 저장 위치를 자동으로 갈랐다.

출처: 봇에게 “용어 vs 이슈”를 가르친 하루

Basic LLM Chain의 함정 두 개

  • Source for Prompt가 기본값 Connected Chat Trigger Node로 되어 있다 → Define below로 바꿔야 직접 쓴 프롬프트가 들어간다.
  • 그러면 아래에 빈 Prompt 1이 자동으로 생기는데, 이걸 삭제하지 않으면 실행 에러가 난다.
  • 형식을 강제하려면 Require Specific Output Format 토글을 켜고 Structured Output Parser를 연결한다.

LLM이 줄바꿈을 글자 \n으로 답할 때

프롬프트를 붙잡고 씨름하지 말고, 마지막에 한 줄로 정리한다:

{{ $json.text.replace(/\\n/g, '\n') }}

LLM에게 시키면 안 되는 일

  1. 긴 목록에서 짧은 ID·URL·코드를 옮겨 적게 하기.
    • 130줄짜리 기사 목록에서 URL을 받아 적게 했더니, LFP 배터리 항목에 K9 자주포 기사 링크가 붙었다. 지어낸 게 아니라 다른 기사의 링크를 잘못 가져온 것.
    • URL 생김새별 오배정률: 날짜가 박힌 URL(ZDNet ?no=20260903...)은 2.5%, 5자리 숫자만 다른 URL(디일렉 ?idxno=61717)은 62%. AI가 맥락으로 검산할 수 있는 값인지가 갈랐다.
    • 해결: AI에게 URL을 아예 안 보여준다. 각 줄 앞에 [번호]만 붙여 보여주고, 기사번호기사제목만 받는다. 진짜 링크는 Code 노드가 원본 배열에서 조회한다. 제목도 같이 받는 게 핵심 — 번호가 틀려도 제목으로 다시 찾는 안전망.
  2. 정확히 맞아야 하는 값을 자유 텍스트로 출력하게 하기 — 숫자 하나만 틀려도 조용히 잘못된 결과가 된다.
  3. “없으면 없다고 해”라는 쉬운 도피로 주기 — 130건 중 디일렉만 50건인데도 배터리 섹터가 “없음”으로 왔다. 도피로가 있으면 쓴다. 기준을 구체적으로: “정말로 조금이라도 관련된 기사가 단 하나도 없을 때만 없음으로 답하세요” + 섹터별 포함 범위를 넓게 나열.

출처: 근거 기사 링크 전수 검증기

AI는 같은 대상을 매번 다르게 표기한다

## 차세대 HBM(High Bandwidth Memory)
## 차세대 HBM (Processing-in-Memory)   ← 같은 용어인데 매일 새 항목으로 갈라짐

매칭하기 전에 정규화한다:

// 괄호 안을 통째로 잘라내고
용어: d.용어.replace(/\s*[((].*?[))]\s*/g, '').trim(),

// 문장부호·공백·대소문자를 전부 무시하고 글자·숫자만 남겨 비교
const norm = s => (s || '').toLowerCase().replace(/[^0-9a-z가-힣]/g, '');

말줄임표 하나(U+2026)를 AI가 마침표 세 개로 옮겨 적어도 대조가 실패한다 — 그래서 글자와 숫자만 남긴다.

같은 걸 두 번 묻지 않는다

텔레그램용·위키용 LLM 노드가 같은 기사 목록을 두 번 물어보고 있었다. 하나로 합쳤다:

  • Claude 호출 하루 6번 → 3번 (비용 절반)
  • 텔레그램과 위키가 항상 같은 키워드를 말하게 됨