ai-json-fixer: LLM이 생성한 잘못된 형식의 JSON 출력을 수정하는 도구

ai-json-fixer: LLM이 생성한 잘못된 형식의 JSON 출력을 수정하는 도구

ChatGPT, Claude 등 대형 언어 모델(LLM)과 함께 개발하는 일이 늘어나면서, 종종 잘못된 형식의 JSON을 출력받는 경우가 많습니다. 이런 JSON을 일일이 손으로 수정하는 데 지치셨다면, ai-json-fixer가 해결책이 될 수 있습니다. 이 툴은 자바스크립트/타입스크립트 환경에서 사용할 수 있는 경량 라이브러리로, 깨진 JSON을 자동으로 복구해주는 기능을 제공합니다. 이 글에서는 ai-json-fixer의 기능과 활용법을 자세히 살펴봅니다.

LLM의 출력값을 활용해 자동화된 워크플로우를 구축하려 할 때, 예상치 못한 문제가 발생하곤 합니다. LLM이 생성한 JSON이 포맷 오류, 누락된 쉼표, 인용부호 오류 등 다양한 문제를 포함하고 있기 때문입니다. 이런 문제로 인해 파서 에러가 발생하거나, 파이프라인이 중단되는 경우도 빈번합니다.

ai-json-fixer는 이러한 문제에 대응하기 위한 라이브러리로, LLM이 생성한 JSON 텍스트에서 잘못된 부분을 자동으로 탐지하고 수정합니다. 특히 마크다운 블록 안에 삽입된 JSON, 설명 문장과 섞인 JSON, 단일 혹은 다중 라인에서 쉼표가 빠진 구조 등 다양한 형태의 오류를 자동으로 복원해주는 기능이 핵심입니다.

이 프로젝트는 별도의 의존성이 없는 순수 TypeScript/JavaScript로 구현되어 있어, 다양한 프로젝트에 손쉽게 통합할 수 있습니다. 테스트도 충분히 커버되어 있어 신뢰할 수 있는 결과를 제공합니다. 기존에는 jsonrepair와 같은 유사한 유틸리티가 존재하지만, 대부분은 마크다운 문서에서 JSON을 추출하거나 LLM 특유의 출력 패턴을 고려하지 못하는 경우가 많았습니다. ai-json-fixer는 이런 문제를 정확히 겨냥해, 실제 ChatGPT 등의 출력에서 자주 발생하는 오류들을 기반으로 설계되었습니다. 게다가 TypeScript 타입 지원과 다양한 파싱 옵션을 제공하여, 상황에 따라 엄격한(strict) 모드에서 관대한(aggressive) 모드까지 선택적으로 사용할 수 있다는 점이 큰 차별점입니다.

ai-json-fixer의 주요 기능

  • 마크다운 블록 추출: ```json 형식의 코드 블록 또는 인라인 JSON에서 내용을 자동 추출합니다.
  • 불필요한 설명 제거: JSON 이후에 붙은 설명 텍스트를 제거해 깔끔한 JSON만 파싱합니다.
  • 인용부호 오류 수정: 잘못된 쌍따옴표나 빠진 escape 문자를 자동으로 수정합니다.
  • 쉼표 누락 감지 및 보정: {"a": 1 "b": 2} 같은 구조에서 빠진 쉼표를 자동 추가합니다.
  • 단일 및 다중 라인 모두 지원: 한 줄로 된 JSON뿐만 아니라 줄바꿈이 포함된 형식도 복구합니다.
  • 다양한 파싱 모드 제공: strict, standard, aggressive 모드를 통해 유연하게 설정 가능.

ai-json-fixer 사용법

설치는 매우 간단합니다:

npm install ai-json-fixer

기본 사용 예시는 다음과 같습니다:

import { LLMJSONParser } from 'ai-json-fixer';

const parser = new LLMJSONParser();
const result = parser.parse(`
Here's the data:

\`\`\`json
{"name": "Alice", "age": 30}
\`\`\`

Enjoy!
`);
console.log(result);
// 출력: { name: "Alice", age: 30 }

쉼표가 빠진 JSON, 인용부호 오류가 있는 JSON도 다음과 같이 복구할 수 있습니다:

const input = '{"message": "He said "hello" to me"}';
const result = parser.parse(input);
// 출력: { message: 'He said "hello" to me' }

또는:

const input = '{"a": 1 "b": 2 "c": 3}';
const result = parser.parse(input);
// 출력: { a: 1, b: 2, c: 3 }

라이선스

ai-json-fixer 프로젝트는 MIT License로 공개 및 배포되고 있습니다. 상업적 이용을 포함하여 자유롭게 사용할 수 있으며, 저작권 및 라이선스 고지를 유지해야 합니다.

:github: ai-json-fixer GitHub 저장소




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

1개의 좋아요

gemma function call이 prompting을 이용한거라, 딱 필요한 녀석이네요.

1개의 좋아요

사용해보시고 괜찮으시면 후기 부탁드립니다!! :smiley: