- Truss는 최근 6개월간 LLM 중심 기능을 운영하며 OpenAI 모델로 5억 토큰 이상을 처리했고, B2B 텍스트 요약·분석·추출에서 실제로 부딪힌 한계를 정리함
- 프롬프트는 세부 지시를 많이 넣을수록 안정적이지 않았고, GPT가 이미 아는 상식은 짧고 덜 구체적인 지시가 더 나은 결과를 낸 경우가 있었음
- Langchain, JSON mode, function calling, assistants 없이도
chatAPI와 JSON 추출 함수 하나로 여러 기능을 운영했으며, 핵심 코드는 40줄짜리 함수와 오류 처리·자동 잘라내기 정도였음 - GPT는 “없으면 빈 값 반환” 같은 귀무가설(null hypothesis) 처리와 긴 출력에 약했고, GPT-4의 128k 입력 창과 별개로 출력은 4k 수준에 머무름
- RAG와 벡터 DB는 Truss의 제한된 텍스트 추출 업무에는 잘 맞지 않았고, 전체 문맥을 넣는 분석·요약·추출은 신뢰도가 높지만 입력이 비어 있거나 관련 정보가 없을 때 문제가 커짐
사용 범위와 전제
- Truss는 지난 6개월 동안 LLM 중심 기능 몇 가지를 출시했고, 사용량은 추정상 5억 토큰을 조금 넘음
- 사용 모델은 OpenAI 계열이며, 토큰 사용량은 GPT-4 85%, GPT-3.5 15% 임
- 다루는 데이터는 텍스트뿐이며
gpt-4-vision, Sora, Whisper 같은 비텍스트 기능은 포함하지 않음 - 제품 맥락은 B2B이고, 주요 작업은 요약·분석·추출임
- 5억 토큰은 약 75만 페이지 분량의 텍스트에 해당함
프롬프트는 덜 구체적일 때 나아질 수 있음
- GPT가 이미 아는 일반 지식에 대해 정확한 목록과 지시를 과하게 넣으면 결과가 더 나빠질 수 있었음
- 한 파이프라인은 텍스트 블록이 미국 50개 주 또는 연방정부 중 어디와 관련되는지 분류해야 했음
- 초기 프롬프트는
locality_id필드에 50개 주와federal의 ID 목록을 JSON 형태로 넣고 선택하게 함 - 이 방식은 대략 98% 이상 동작했지만, 실패가 충분히 많아 추가 조사가 필요했음
- 초기 프롬프트는
- 다른 필드인
name은 명시적으로 요구하지 않았는데도 올바른 주의 전체 이름을 안정적으로 반환했음- 이후
name에 나온 문자열을 검색해 주를 찾는 방식으로 바꾸자 잘 동작함
- 이후
- 더 나은 접근은 “50개 주를 알고 있으니 해당 주의 전체 이름 또는 Federal을 반환하라”처럼 상식에 맡기는 프롬프트였음
- 부가 관찰도 있었음
- 실패는 Maryland, Maine, Massachusetts, Michigan 같은 M으로 시작하는 주에서 더 자주 나타남
- ID를 목록에서 고르게 할 때, 각 주를 한 줄씩 둔 보기 좋은 JSON이 쉼표로 이어진 목록보다 덜 혼란스러웠음
API와 추상화는 단순하게 유지됨
- Langchain은 이 사례에서 섣부른 추상화에 가까웠고, 수백만 토큰과 3~4개의 다양한 프로덕션 기능 이후에도
openai_service파일에는 40줄짜리 함수 하나만 남음 - 실제로 사용한 API는
chat뿐임- 항상 JSON을 추출함
- JSON mode, function calling, assistants는 필요하지 않았음
- system prompt도 사용하지 않음
gpt-4-turbo가 출시됐을 때는 코드베이스에서 문자열 하나만 바꿈
- 함수 대부분은 OpenAI API의 500 오류나 소켓 종료 같은 오류 처리를 담당함
- 이런 오류는 개선됐고, OpenAI의 부하를 감안하면 놀랍지 않다고 봄
- 컨텍스트 길이 제한은 자체 자동 잘라내기로 처리함
- 문자열 길이가
model_context_size * 3보다 크면 잘라냄 - 마침표나 숫자가 매우 많을 때는 토큰 비율이 문자 3개당 1토큰보다 작아져 실패할 수 있음
context_length_exceeded가 나오면model_context_size * 3 / 1.3기준으로 다시 잘라 재시도함
- 문자열 길이가
스트리밍 UX는 과소평가하기 어려움
- 스트리밍 API로 지연 시간을 줄이고, 사용자에게 가변 속도로 입력되는 글자를 보여주는 방식은 처음에는 장난처럼 보였음
- 실제 사용자는 가변 속도 “타이핑” 표시를 매우 긍정적으로 받아들임
- 이 경험은 AI에서 마우스·커서 UX에 해당하는 순간처럼 느껴졌음
빈 결과와 긴 출력이 약점임
- “찾지 못하면 빈 출력 반환”은 가장 오류가 많았던 프롬프트 문구에 가까웠음
- 실제로 아무것도 출력하지 말라는 뜻이 아니라
{value: ""}같은 빈 값 표현을 반환하게 한 것임 - 문제는 출력 제한 실패가 아니라 귀무가설 판별 자체의 어려움에 가까웠음
- 실제로 아무것도 출력하지 말라는 뜻이 아니라
- GPT는 빈 값을 반환해야 할 때 환각을 선택하기도 했고, 반대로 자신감이 낮아져 빈 값을 너무 자주 반환하기도 했음
- 텍스트 블록이 비어 있을 수 있는 버그가 있었을 때 환각이 심하게 발생함
- 예시로 Sunshine Bakery, Golden Grain Bakery, Bliss Bakery 같은 가짜 베이커리 이름이 나옴
- 해결은 텍스트가 없으면 프롬프트를 아예 보내지 않는 방식이었음
- GPT-4는 입력에 대해 128k 토큰 창을 가질 수 있지만, 출력 창은 여전히 4k 수준임
- “context window”라는 표현은 입력과 출력을 혼동하게 만듦
- JSON 객체 목록을 반환하게 할 때, 간단한 객체여도 10개를 넘기기 어려웠음
- 15개를 요청하면 약 15% 정도만 성공하는 것으로 추정함
- 10개 수준에서 멈출 때도 출력은 700~800토큰 정도에 불과했음
- 한 번에 하나씩 요청하고 이전 결과를 다시 넣는 방식으로 출력 한계를 우회할 수는 있지만, GPT와 전화 게임을 하는 형태가 되고 Langchain 같은 도구를 다루게 됨
RAG와 벡터 DB는 이 사용 사례에 잘 맞지 않음
- 벡터 DB와 RAG/임베딩은 Truss의 사례에서는 대부분 쓸모가 없었음
- 벡터 DB와 RAG는 검색, 그것도 Google·Bing 같은 진짜 검색에 더 잘 맞는다고 봄
- 핵심 문제는 관련성 기준임
- 관련성에 명확한 컷오프가 없음
- Cohere의 rerank 같은 해법이나 자체 휴리스틱이 있을 수 있지만 안정적이지 않음
- 관련 없는 결과로 검색 결과가 오염되거나, 너무 보수적으로 잡아 중요한 결과를 놓칠 위험이 있음
- 벡터를 일반 데이터와 떨어진 전문·독점 DB에 저장하는 것도 손실이 큼
- Google·Bing 규모가 아니라면 문맥 손실이 트레이드오프를 정당화하지 못한다고 봄
- 비즈니스 앱 안의 검색에서는 사용자가 도메인 전문가인 경우가 많음
- 사용자가 직접 입력하지 않은 의미까지 추측해 반환하는 의미 검색을 좋아하지 않는다고 봄
- 대부분의 검색 사례에서는 LLM을 일반 completion prompt로 써서 사용자 검색어를 faceted search, 복잡한 쿼리, SQL로 바꾸는 방식이 더 나을 수 있음
- 이 방식은 RAG가 아님
환각은 문맥이 충분할 때 크게 줄어듦
- Truss의 사용 사례는 대부분 “텍스트 블록을 주고 거기서 무언가를 추출”하는 형태임
- 텍스트에 언급된 회사명을 달라고 하면, GPT는 보통 임의의 회사를 반환하지 않음
- 단, 텍스트에 회사가 없을 때는 귀무가설 문제가 다시 나타남
- 코드에서도 GPT는 전달한 코드 블록을 다시 쓰는 중에 변수를 지어내거나 중간에 오타를 임의로 넣는 의미의 환각은 잘 하지 않음
- 다만 어떤 것을 만들어 달라고 하면 표준 라이브러리 함수의 존재를 지어낼 수 있음
- 이 역시 “모른다”고 말하지 못하는 문제에 가깝다고 봄
- 전체 문맥을 제공하고 분석·요약·추출하게 하는 작업에서는 매우 신뢰할 만했음
- 좋은 데이터를 넣으면 좋은 GPT 토큰 응답이 나오는 구조에 가까움
향후 전망에 대한 판단
- 현재의 transformer, 인터넷 데이터, 수십억 달러 규모 인프라 접근만으로는 AGI에 도달하지 못한다고 봄
- GPT-4는 마케팅이 아니라 100% 유용한 기술이며, 아직 인터넷 초기와 비슷한 단계라고 봄
- 모두를 해고할 기술은 아님
- 이전에는 Google만 접근 가능했던 ML/AI의 진입 장벽을 낮추는 효과가 큼
- Claude, Gemini 등은 엄밀한 A/B 테스트를 하지는 않았음
- 일상적인 코딩에서 테스트했을 때는 의도를 직관하는 미묘한 부분에서 GPT-4에 가깝지 않다고 느낌
- LLM/AI 흐름을 모두 따라갈 필요는 없다고 봄
- The Bitter Lesson에 비춰 일반 모델 성능 향상이 특화 개선보다 중요하다면, GPT-5 출시 여부만 신경 쓰면 된다는 판단임
- Sora 같은 별도 영역을 제외하면 OpenAI의 중간 릴리스는 대부분 잡음에 가깝다고 봄
- GPT-5는 모든 것을 바꾸기보다 점진적 개선일 가능성이 큼
- GPT-3에서 GPT-3.5로 갈 때는 훈련 강도를 2배로 올리면 성능이 2.2배 좋아지는 초선형 개선을 기대했음
- 실제로는 로그형 개선처럼 보이고, 점진적 개선을 위해 토큰 속도와 토큰당 비용이 기하급수적으로 커지는 상황으로 봄
- GPT-4는 현재의 작업 세트에서는 최적점일 수 있음
- GPT-3.5 대비 GPT-4에 20배 비용을 낼 의향은 있었지만, GPT-4에서 GPT-5로 가기 위해 토큰당 20배를 내지는 않을 것 같다고 봄
- GPT-5가 이를 깰 수도 있고, iPhone 4에서 iPhone 5로 가는 정도일 수도 있음