LLM 긴 컨텍스트 JSON 형식 출력 텍스트 예외/브레이크 문제 해결

AI 실습 튜토리얼8 개월 전에 게시 됨 AI 공유 서클
1.9K 00

I. 머리말

현재 대부분의 LLM은 수만 개의 토큰 출력을 지원할 수 있습니다. 그러나 실제로 비즈니스에 적용했을 때 LLM이 지정한 형식대로 출력되지 않는 경우가 종종 발생합니다.

특히 다운스트림 작업을 계속할 수 있도록 결과물을 구조화해야 합니다.

json 형식은 본질적으로 프로 플레인 텍스트이므로 LLM에서 출력을 구조화하려는 경우 일반적으로 json으로 출력한 다음 json을 추출하여 사전으로 변환하고 다운스트림 작업을 계속 진행합니다.

그러나 전체 json 출력을 얻지 못하는 데에는 여러 가지 이유가 있습니다.

 

둘째, Json의 출력 절반은 여러 경우의 수입니다.

2.1 출력은 온라인 토큰에 대한 LLM 지원을 초과합니다.

  1. 입력 컨텍스트가 너무 길어서 LLM이 완전한 답변을 제공하기에는 출력에 남은 위치가 너무 적기 때문에 json이 출력의 절반만 끝나고 종료됩니다.
  2. 작업이 너무 복잡해서 CoT 기법을 사용하기에는 너무 많은 중간 사고 과정을 거쳐야 했고, 그 결과 LLM이 최종 결과를 출력할 수 있는 여지가 많지 않았습니다. 최종 결과물을 얻지 못하거나 결과물이 절반만 출력된 후 멈춥니다.

2.2 민감한 단어 가로채기 LLM 출력

LLM이 악용되어 부적절한 콘텐츠가 출력되는 것을 방지하기 위한 조치입니다. 지역마다 민감한 콘텐츠가 다르기 때문에 결과를 외부로 출력할 때 지역에 따라 민감한 단어는 필터링하거나 차단하는 것이 일반적입니다. 몇 년 전 메타가 전 세계에서 허용되지 않는 범죄 성향을 가진 AI를 내놓은 것처럼 말이죠.

따라서 민감한 콘텐츠를 제어되지 않은 방식으로 출력할 때 LLM이 잘려서 반쪽짜리 결과를 출력할 때도 이런 일이 발생합니다.

2.3 지침을 엄격하게 준수하지 않는 경우

이런 일이 훨씬 더 흔합니다. 아무리 좋은 LLM이라도 스누즈 시간이 있으며, 출력물이 원하는 형식이 될 것이라는 보장은 없습니다.

출력되는 json에서 종종 다음과 같은 상황에 직면하게 됩니다:

  1. 예를 들어, 주요 구두점이 누락되었습니다:{"question":你好吗!} 큰따옴표 없이 이 출력 전체를 구문 분석하는 것은 불가능합니다.
  2. 문장 부호가 올바른 위치에 나타나지 않는 경우, 예를 들어{"question":"你好吗!" ,"answer":"我很好"} 중간에 구두점이 절반 너비가 아닌 전체 너비로 되어 있어 json 출력에 실패합니다.
  3. 이 외에도 다양한 시나리오가 있으므로 모두 나열하지는 않겠지만 이러한 유형의 문제를 해결하는 방법은 다음과 같습니다.

 

III. 오픈 소스 솔루션

위에서 언급한 세 가지 문제를 해결하는 방법에는 일반적으로 세 가지가 있습니다:

  1. json 완성: 주로 json 응답 출력의 절반, 즉 전체가 완전한 json 형식이 아닌 절반의 json에 대해 json 구문 분석의 조건을 갖출 수 있도록 합니다.
  2. json 수정: 주로 구두점이 누락되었거나 구두점이 올바르지 않은 상황에 대한 json 답변 수정
  3. json 콘텐츠의 일부 폐기 : 주로 일부의 json은 특수한 상황을 고려할 수 없으며 정상적인 콘텐츠를 유지하고 불규칙한 콘텐츠를 폐기합니다.

3.1 스트리밍-json-py 솔루션

이 솔루션은 오픈 소스 솔루션이며 다음을 제공합니다.

  • 스트리밍-json-go`
  • 스트리밍-json-py
  • 스트리밍-json-js

다양한 환경의 요구 사항을 충족하기 위해 세 가지 프로그래밍 언어를 사용할 수 있습니다.

실제 결과는 다음과 같습니다.

pip install streamingjson

lexer = streamingjson.Lexer()

# append your JSON segment
lexer.append_string('{"a":')

# complete the JSON
print(lexer.complete_json()) # will print `{"a":null}`

# append more JSON segment
lexer.append_string('[tr')

# complete the JSON again
print(lexer.complete_json()) # will print `{"a":[true]}`

이 오픈 소스 솔루션은 json을 보완하는 데 중점을 둡니다.

대안:잘못된 JSON 문자열을 수정하고 LLM에서 생성된 JSON 데이터에서 발생할 수 있는 서식 지정 오류를 해결합니다.

 

IV. 개선 프로그램

주로 json의 구두점 부족과 잘못된 부분을 감지하여 json 형식을 수정한 다음, json을 완성할 수 있도록 지원하고, 마지막으로 콘텐츠의 json 부분을 추출하여 구조화된 결과를 얻을 수 있도록 자체 개선 체계를 마련했습니다.

두 가지 예가 있습니다.

 

output = '''필요한 답변은 ```jsonn{"question":"2024년 올림픽은 어디에서 열릴까요?"''' n, n "answer": "파리 n''''

여기에는 세 가지 오류가 있습니다:

  • 중국어라서 제대로 구문 분석할 수 없습니다.
  • 巴黎 따옴표가 잘못되었습니다. 따옴표가 누락되었습니다.
  • 누락된 큰따옴표 및}

결국 위의 오류는 완벽하게 수정되어 올바른 출력이 출력되었습니다.

{'question': '2024年奥运会在哪里举办?', 'answer': '巴黎'}
© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...