jevchat은 Jev를 (형편없는) 챗봇으로 만듭니다 – 기능, 모드 및 커뮤니티 반응

TL;DR

jevchat은 *"사용자의 질문과 지금까지 작성된 답변을 고려할 때, 다음으로 올 기호는 무엇인가?"*라고 반복적으로 질문함으로써 Jev API를 단계별 챗봇으로 변환하는 오픈 소스 래퍼입니다. 이 도구는 여러 알파벳, 샘플링 전략 및 빔 서치를 지원하지만, 이 방식은 비용이 많이 들며 주로 재미를 위한 실험적 성격이 강합니다.


jevchat의 작동 방식

  • 각 생성 단계에서 jevchat은 Jev에게 *"현재 부분 답변 뒤에 어떤 기호가 와야 하는가?"*라는 단일 선택 질문을 보냅니다.
  • Jev는 선택된 알파벳에 대한 확률 분포를 반환하며, 샘플러가 정규화된 분포에서 다음 기호를 추출합니다.
  • 이 과정은 특수 STOP 기호가 선택될 때까지 반복되어 최종 답변을 생성합니다.
  • 이 도구는 실시간 통계(기호/초, 문자/초, API 호출당 지연 시간)와 각 단계별 상위 점수 기호를 표시하여 사용자가 실시간으로 분포를 확인할 수 있게 합니다.

설치 및 기본 사용법

# Poetry를 통해 의존성 설치
poetry install

# Jev API 키를 .env에 저장 (또는 JEV_API_KEY / TYPESAFE_API_KEY 환경 변수 사용)
# .env 내용 예시:
# api_key="YOUR_KEY"

# 대화형 채팅
poetry run jevchat

# 일회성 쿼리
poetry run jevchat ask "do people need water?"

# 사용 가능한 알파벳 목록 확인
poetry run jevchat alphabets

# 모든 모드 벤치마크 (실제 API 호출)
poetry run jevchat bench

현재 요청이 완료된 후 중지하려면 Ctrl-C를 한 번 누르고, 즉시 중단하려면 두 번 누르십시오.


샘플링 전략

전략 작동 방식 일반적인 명령어
choice (기본값) 전체 알파벳에 대해 하나의 질문을 던짐. jevchat -s choice ask "how many eyes do people have?"
choice – no shuffle Jev의 위치 편향을 완화하는 알파벳 재정렬을 비활성화함 (최악의 품질 생성). jevchat -s choice --no-shuffle-criteria ask "…"
choice – ensemble 서로 다른 알파벳 순서로 N개의 병렬 질문을 보내고 결과를 평균화함. jevchat -s choice --ensemble 4 ask "…"
bisect 알파벳을 재귀적으로 절반으로 나누어 작은 그룹이 남을 때까지 예/아니오 질문을 던진 후 최종 선택함. jevchat -s bisect ask "…"
bisect – larger cuts 최종 선택 전 그룹 크기를 늘려 API 호출 수를 줄임. jevchat -s bisect --bisect-cutoff 32 --no-bisect-swap ask "…"
buckets 큰 알파벳을 여러 버킷으로 나누고 각 버킷에 OTHER 탈출구를 둠; 255개 이상의 기호를 지원하는 유일한 전략. jevchat -a bpe5k -s buckets --bucket-size 127 ask "…"
refine buckets를 사용한 후 승리한 버킷에 대해 2단계 선택을 수행하며, 선택적으로 뉴클리어스 재점수를 수행함. jevchat -a words1k -s refine --refine-nucleus 6 --refine-rounds 2 ask "…"

프레젠테이션 모드

  • hypothesis (기본값): 각 옵션은 완성된 텍스트 조각입니다. Jev가 완성된 문자열의 점수를 직접 매깁니다. 이는 문자 알파벳에서 약 3배의 top-1 개선 효과를 냅니다.
  • symbol: 각 옵션은 단일 기호입니다. Jev는 점수를 매기기 전에 연결된 결과를 상상해야 합니다.

빔 서치

poetry run jevchat -b 3 ask "what is the opposite of hot?"

N개의 후보 답변을 동시에 유지합니다. 각 빔은 단계마다 하나의 점수를 발생시키며, 전통적인 temperature/top-p/top-k 설정은 무시됩니다. 빔은 순수하게 확률에 의해 순위가 매겨집니다.


알파벳

알파벳 설명 사용 시기
lower26 a-z 및 공백 간단한 문자 전용 데모
ascii 전체 출력 가능한 ASCII 모든 텍스트 생성
tokens 전체 단어 토큰 자연어 쿼리
words1k 가장 많이 쓰이는 1,000개 단어 ( buckets 필요) 제한된 어휘 실험
bpe2k, bpe5k 2k / 5k 토큰의 바이트 페어 인코딩 어휘 더 크지만 제한된 어휘

성능 하이라이트 (jevchat bench 기준)

  • 기본 알파벳을 사용하는 choice는 모든 기호마다 별도의 요청을 보내기 때문에 가장 느립니다.
  • bisect는 품질을 유지하면서 API 호출을 대략 절반으로 줄입니다.
  • buckets와 refine은 지연 시간이 약간 증가하지만 255개 이상의 기호를 사용할 수 있게 합니다.
  • beam width >1은 비용을 선형적으로 증가시키지만(단계당 라이브 빔 하나당 점수 하나) 일관성을 향상시킬 수 있습니다.

Hacker News 커뮤니티 반응

  • Eric PrUitt은 이 경험을 *"죽음의 수정과 대화하는 모티(Morty)"*에 비유했습니다. 모델이 자신의 종말을 지켜보며 답변을 반복적으로 다듬기 때문입니다.
  • OtherShrezzing은 유머러스한 측면을 강조했습니다. 모델의 출력이 종종 농담처럼 읽히며, 실제로 재미있는 짧은 이야기를 만들어낸다는 점입니다.
  • boodleboodle은 이 프로젝트를 "BERT는 입이 있고 말해야 한다"(arXiv:1902.04094)라는 오래된 아이디어와 연결하며 토큰 단위 생성의 계보를 언급했습니다.
  • yipinwong은 이 시스템을 Jev의 시스템 1 스타일을 반영하여 끊임없이 생각을 바꾸는 *"ADHD가 심한 친구"*에 비유했습니다.
  • fen_wick은 Jev의 구조화된 데이터 형식이 채팅 스타일 인터페이스의 빠른 프로토타이핑에 도움이 되는지 방해가 되는지 궁금해했습니다.
  • K0IN은 왜 이 접근 방식을 단순한 임베딩 유사도 조회로 줄일 수 없는지 물으며, 기호별 명시적 의사 결정의 필요성에 대한 논의를 촉발했습니다.
  • petercooper는 매우 제한된 어휘가 필요한 실용적인 용도(예: SQL 생성)를 제안했으며, jevchat이 합리적인 쿼리를 생성할 수 있다고 보고했습니다. 다만 린팅이 포함된 전통적인 LLM이 여전히 더 우수하다고 덧붙였습니다.
  • IceDane은 파이썬 패키징을 위해 Poetry를 사용하는 것을 비판했으며, 이는 커뮤니티 내의 일반적인 정서를 반영합니다.
  • nowittyusername은 이 아키텍처의 제약 조건이 비텍스트 출력에 적합할 수 있다며 이모지 전용 봇을 제안했습니다.

제한 사항 및 비용 고려 사항

  • 각 기호마다 별도의 API 호출(또는 ensemble 사용 시 소규모 배치)이 필요하므로 긴 답변의 경우 비용이 비쌉니다.
  • 품질은 선택한 전략과 알파벳에 따라 크게 달라집니다. 기본 choice 모드는 노이즈가 많을 수 있으며, refine이 가장 좋은 균형을 제공합니다.
  • 실시간 상호 작용은 네트워크 지연 시간과 Jev의 기호별 점수 매기기 오버헤드에 의해 제한됩니다.

테스트 및 신뢰성

  • 이 저장소에는 모의 HTTP 클라이언트와 가짜 생성 루프를 사용하는 158개의 오프라인 테스트가 포함되어 있습니다. 이 테스트에는 API 키가 필요하지 않습니다.
  • jevchat bench 명령어만이 실제 Jev 서비스에 연결되는 유일한 부분이며, 이를 통해 개발자는 실제 비용과 지연 시간을 측정할 수 있습니다.

결론

jevchat은 언어 모델이 *"다음으로 올 기호는 무엇인가?"*라고 반복적으로 질문함으로써 결정론적인 기호 수준의 챗봇으로 강제될 수 있음을 보여줍니다. 이 프로젝트는 다양한 샘플링 전략, 알파벳 구성 및 빔 서치를 선보이며 Jev를 재미있지만 비용이 많이 드는 대화형 장난감으로 바꿉니다. 커뮤니티 피드백은 이 접근 방식의 참신함과 실용적인 제약 조건을 모두 강조하며, 엄격하게 제한된 어휘가 유리한 틈새 응용 분야를 암시합니다.

Sources

관련

  • Dispatch
  • 프로젝트
  • 프로젝트
  • Dispatch
  • 프로젝트