Jump to content

토큰 길이


Recommended Posts

안녕하세요,

HCX를 활용한 통화 분석을 테스트해보고 있는 유저입니다. 다름이 아니라, HCX 활용 중에 질문이 생겨 문의드리게 되었습니다.

 

우선 제 현 상황에 대해 말씀드리겠습니다.

HCX의 통화 분석 성능을 확인하기 위해 플레이그라운드에서 아래와 같이 총 2400자 가량의 프롬프트를 작성하였고, 플레이그라운드 상에서 이뤄진 대화는 준수한 답변을 얻었습니다.

역할 정의

평가 지표

<답변 예시>

사용자: <질문>

AI:  <답변>

위 프롬프트를 기반으로 생성된 테스트 앱에서 아래와 같이 preset_text가 생성됐습니다. 저는 user 입력을 추가해 새로운 질문에 대한 답변을 요청했습니다.

{"role":"system","content": <역할 정의> <평가 지표>},
{"role":"user","content": <사용자 질문>},
{"role":"assistant","content": <예시 답변>},
 
{"role":"user","content": <Input 질문>}

그러나 질문을 입력하고 실행했을 때, 텍스트 길이 초과로 에러가 발생하였습니다. 맥스 토큰은 최대인 4096으로 설정한 상태입니다.

event:error
data:{"status":{"code":"40003","message":"Text too long"}}

 

여기서 몇 가지 질문이 있는데요,

1. 플레이그라운드와 API로 호출한 HCX의 토큰 제한에 차이가 있나요? API에선 플레이그라운드에서 작성한 프롬프트만 입력해도 Text too long 에러가 발생합니다. 

1-1. 토큰의 길이에 프리셋 텍스트 내용도 포함되는 걸까요? 플레이그라운드 설명에 "결괏값을 생성할 때~" 라고 설명되어 입력 토큰 제한은 없다고 생각했습니다. 만약 그렇다면, 프롬프트 설명이 길고 상세할수록 답변은 상대적으로 짧아질 수 밖에 없지 않나요?

2. HCX가 {"role":"assistant", "content": <예시 답변>}에서 예시 답변과 동일한 포맷의 답변을 반환하길 원해서 system -> user -> assistant -> user(실제 input) 순으로 프리셋 텍스트를 설정했습니다. 간단히 답변 형식만 정해주는 수준이라면 올바른 사용 방식이 맞나요? 텍스트 초과로 답변을 볼 수 없었지만, 플레이그라운드 상에선 프롬프트의 예시만으로 원하는 형식으로 답변이 잘 출력되긴 했습니다.

3. 현 상황에서 튜닝이 필요한지에 대한 고민이 있습니다. 튜닝을 하면 예시 답변을 넣지 않아 토큰 절약에 도움은 될 것 같습니다. 그러나 1. 답변 형식이 단순해서 프롬프트만으로 출력이 가능하다는 점, 2. 튜닝을 할만큼 많은 데이터가 없다는 점, 3. 예시 답변의 길이가 길지 않고 역할 정의와 평가 지표에 대한 설명이 길다는 점 등으로 그 효용이 크진 않을 것 같다는 것이 개인적인 생각입니다. 이 부분에 대해 어떻게 생각하시는지 궁금합니다.

4. 입력으로 통화 내역을 넣다보니 Input 자체가 길다는 특징이 있습니다. 이렇게 토큰이 초과되는 상황은 어떻게 핸들링해야 할까요? 사용 가능한 최대 토큰을 더 늘릴 수는 없을까요?

 

지식이 짧아 두서 없이 많은 질문을 드리게 됐습니다. 아무쪼록 답변 주시면 많은 도움이 될 것 같습니다.

감사합니다.

 
링크 복사
다른 사이트에 공유하기

안녕하세요, @삼앤정님, 괌심을 가지고 클로바 스튜디오를 이용해주셔서 감사드립니다.

문의주신 내용들에 대하여 답변드립니다.

1. 플레이그라운드와 Chat Completions API의 스펙은 동일합니다. HCX의 Context window(토큰 길이)는 입력과 출력을 합쳐 총 4096입니다.
만약 'Text too long' 오류가 발생했다면, 현재 maxTokens 값이 얼마로 설정되어 있는지 확인해주세요.
텍스트가 입력되어 있고, maxTokens 값이 4096으로 설정되어 있다면, maxTokens 값을 줄여야 합니다.

1-1. 앞서 말씀드린 대로, 시스템 프롬프트와 사용자 입력 모두 포함하여 계산됩니다. 프롬프트의 길이가 길더라도 출력 결과의 길이는 작업 유형에 따라 달라질 뿐, 짧아지지 않습니다.

2. 일반적인 경우, 이전 턴의 대화를 포함할 필요는 없으며, 시스템 프롬프트만 구성하시면 됩니다. 시스템 프롬프트에 대화 예시를 추가하면 도움이 될 수 있습니다.

3. 맞습니다. 말씀하신 대로 튜닝을 통해 예시 답변을 제거하면 비용 절감에 도움이 될 수 있습니다. 하지만 현재 제공되는 튜닝은 지식 주입보다는 형식 구성에 초점을 맞추고 있어, 잘 구성된 시스템 프롬프트만으로도 충분한 성능을 발휘할 수 있습니다. 따라서 데이터셋 구축에 많은 시간과 비용이 소요될 수 있으므로, 튜닝 없이 진행하는 것도 방안이 될 수 있습니다.

4. 하이퍼클로바X 모델의 토큰 길이는 현재 4096 토큰으로 고정되어 있어 늘릴 수 있는 방법은 없습니다.
슬라이딩 윈도우 API를 활용하시거나, 요약 API를 통해서 앞 턴의 대화 내역을 요약시키는 방법도 있을 것 같고, 관련 cookbook 링크를 공유드립니다.

감사합니다.

  • Thanks 1
링크 복사
다른 사이트에 공유하기

안녕하세요,

바쁘실텐데 친절한 설명 감사드립니다. 그런데 제가 아직 답변으로 이해하지 못한 부분이 있어 추가 질문을 드리고자 합니다.

1번에 "텍스트가 입력되어 있고, maxTokens 값이 4096으로 설정되어 있다면, maxTokens 값을 줄여야 합니다." 라고 답변을 주셨는데, 텍스트 초과인 상황에 토큰 크기를 오히려 줄여야 하는지 이해하지 못했습니다;  저는 플레이그라운드에서 4096으로 설정하고 실행했을 때 답변을 얻어서 API에서도 동일한 설정으로 실행했으나 text too long 에러가 발생했습니다.

1-1번에 "시스템 프롬프트와 사용자 입력 모두 포함하여 계산됩니다. 프롬프트의 길이가 길더라도 출력 결과의 길이는 작업 유형에 따라 달라질 뿐, 짧아지지 않습니다." 라고 답변 주셨는데, 최대 4096 토큰을 입력과 출력이 나눠가지는 상황에서 입력(프롬프트와 질문)의 크기가 커졌는데 어떻게 출력의 크기가 작아지지 않는지 이해하지 못했습니다..

2번의 경우 제 질문이 상세하지 못했던 것 같습니다. 플레이그라운의 프롬프트 작성 내용이 API로 변환했을 때 system(문제 정의), user(예시 질문), assistant(예시 답변) 세 가지로 구분되어 나왔습니다. 위 상황에선 이미 프롬프트 상에 제가 넣어준 예시 답변이라 API 호출 시에도 포함돼야한다고 생각했는데, 답변 주신 내용은 system(예시 답변 없는 문제 정의)만 넣고 바로 user에서 실제 질문을 입력해도 제가 원하는 포맷의 답변을 얻을 수 있다는 의미일까요?

번거롭게 해드려 죄송합니다. 답변 미리 감사드립니다.

좋은 하루 되세요,

링크 복사
다른 사이트에 공유하기

안녕하세요, @삼앤정님,

1. 플레이그라운드에서 Maximum tokens를 4096을 설정하셨다면, 기입력된 토큰이 있을 것이기 때문에, 아래 캡처와 같이 '최대 토큰을 초과하였습니다.' 토스트가 발생했을 것입니다.
다시 한번 확인을 부탁드리며, 괜찮으시면 플레이그라운드 상단의 '공유' 버튼을 누르신 후, [문의하기]를 통해 작업 URL과 비밀번호를 함께 전달주시면 자세히 살펴보도록 하겠습니다.

image.png.95e219d02e3a654d38455f2d12d77c28.pngimage.png.35c11eb1b7218e4b736499cfb69e90bf.png

 

1-1. 제가 좀 헷갈리게 말씀드린 것 같습니다. 이해하신대로 4096 토큰을 입력과 출력이 나눠가지는 것이 맞습니다.
앞서 말씀드린 "프롬프트의 길이가 길더라도 출력 결과의 길이는 작업 유형에 따라 달라질 뿐, 짧아지지 않습니다." 은 아래와 같이, 하고자 하는 작업에 따라 출력 길이가 달라진다는 것을 의미합니다.
예를들어,

  • 입력(프롬프트): 긴 문서를 넣고, 출력: 문서의 제목 출력. → 출력 결과는 짧을 것입니다.
  • 입력(프롬프트): 긴 문서를 넣고, 출력: 문서를 번역. → 긴 문서를 번역하는 작업이기 때문에 결과는 길게 나올 것입니다.

 

2. 네, 맞습니다. 시스템 프롬프트에 지시문(문제 정의)을 입력하는 형태로도 가능하며,
필요에 따라 아래와 같이 시스템 프롬프트에 예시를 넣어주는 것이 필요한 경우도 있습니다.

image.png.629b6695aaf057f92137273dd8dabf45.png

 

잘 설명이 되었을지 모르겠습니다.

익스플로러 화면의 샘플 탭에 여러 작업들이 모여있으니, 샘플을 살펴보시는 것도 도움이 될 듯 합니다.

이용하시다가 궁금한 부분이 있다면 언제든 말씀해주세요.

감사합니다.

  • Thanks 1
링크 복사
다른 사이트에 공유하기

게시글 및 댓글을 작성하려면 로그인 해주세요.



로그인
×
×
  • Create New...