Launch HN: Onyx (YC W24) – 오픈 소스 채팅 UI
요약
Onyx는 모든 LLM과 연동 가능한 오픈 소스 채팅 UI로, 기업 환경에 최적화된 보안과 사용자 경험을 제공합니다. RAG, 웹 검색, MCP, 딥 리서치 등 강력한 도구들을 지원하며, 셀프 호스팅과 엔터프라이즈급 관리 기능을 갖추고 있습니다.
핵심 포인트
- Proprietary 및 Open weight 모델을 모두 지원하는 범용 채팅 인터페이스 제공
- RAG, MCP, 웹 검색, 딥 리서치 등 고급 AI 에이전트 기능 통합
- RBAC, SSO, 온프레미스 호스팅 등 기업용 보안 및 관리 기능 지원
- 소비자용 제품 수준의 직관적이고 매끄러운 UX 구현에 집중
안녕하세요 HN 여러분, Onyx(https://github.com/onyx-dot-app/onyx)의 Chris와 Yuhong입니다. 저희는 모든 LLM(Proprietary 및 Open weight 모델 모두 포함)과 연동되며, 이러한 LLM들이 유용하게 작동하는 데 필요한 도구들(RAG, 웹 검색, MCP, Deep research, 메모리 등)을 제공하는 오픈 소스 채팅을 구축하고 있습니다.
데모:
2년 전, Yuhong과 저는 동일한 문제가 반복되는 것을 경험했습니다. 저희는 성장하는 팀에 속해 있었고, 문서, Slack, 회의록 등에서 적절한 정보를 찾는 것이 터무니없이 어려웠습니다. 기존 솔루션들은 회사의 데이터를 외부로 전송해야 했고, 커스터마이징이 부족했으며, 솔직히 말해서 제대로 작동하지도 않았습니다. 그래서 저희는 셀프 호스팅(Self-hosted)이 가능하고 쉽게 커스터마이징할 수 있도록 설계된 오픈 소스 엔터프라이즈 검색 프로젝트인 Danswer를 시작했습니다.
프로젝트가 성장하면서 흥미로운 트렌드를 발견했습니다. 저희가 명시적으로 검색 앱임에도 불구하고, 사람들은 단지 LLM과 채팅하기 위해 Danswer를 사용하고 싶어 했습니다. 저희는 "커넥터, 인덱싱(Indexing), 검색 기능은 훌륭하지만, 우선 GPT-4o, Claude Sonnet 4, Qwen을 연결하여 팀원들에게 안전하게 사용할 수 있는 방법을 제공하는 것부터 시작하겠다"라는 말을 듣곤 했습니다.
많은 사용자가 나중에 RAG, 에이전트(Agents), 커스텀 도구들을 추가하곤 했지만, 사용량의 상당 부분은 '기본 채팅' 상태로 머물러 있었습니다. 저희는 생각했습니다: "다른 AI 채팅 솔루션들이 존재하는데 왜 사람들은 엔터프라이즈 검색 도구를 전용(Co-opt)해서 사용하려 할까?"
사용자들과 계속 대화를 나누면서, 저희는 두 가지 핵심적인 포인트를 깨달았습니다:
(1) 기업에 훌륭한 UI와 간단한 도구를 갖춘 LLM에 대한 안전한 접근 권한을 제공하는 것만으로도 AI가 제공하는 가치의 큰 부분을 차지한다.
(2) 이것을 '제대로' 제공하는 것은 생각보다 훨씬 더 어려우며, 그 기준(Bar)이 믿기지 않을 정도로 높다.
ChatGPT나 Claude와 같은 소비자용 제품들은 이미 훌륭한 경험을 제공하고 있습니다. 그리고 업무를 위한 AI와의 채팅은 (이상적으로는) 회사 내 모든 구성원이 하루에 10회 이상 사용하는 기능입니다. 사람들은 완전한 기능 세트와 함께 동일하게 빠르고, 단순하며, 직관적인 UX를 기대합니다. 경험을 "이것은 작동한다"에서 "이것은 마법 같다"의 단계로 끌어올리기 위해 수백 가지의 세세한 디테일을 정확하게 맞추는 것은 쉽지 않은 일이며, 이 분야의 다른 어떤 것도 이를 해내지 못했습니다.
그래서 약 3개월 전, 저희는 다음과 같은 기능을 갖춘 오픈 소스 채팅 UI인 Onyx로 피벗(Pivot)했습니다:
-
(진정으로) 세계적인 수준의 채팅 UX (User Experience). AI와 함께 성장한 갓 졸업한 대학생부터 AI 도구를 처음 사용하는 업계 베테랑까지 모두 사용 가능합니다.
-
모든 일반적인 애드온 (Add-ons) 지원: RAG (검색 증강 생성), 커넥터 (Connectors), 웹 검색 (Web search), 커스텀 도구 (Custom tools), MCP (Model Context Protocol), 어시스턴트 (Assistants), 딥 리서치 (Deep research).
-
대규모 기업에서도 사용할 수 있도록 RBAC (역할 기반 액세스 제어), SSO (단일 로그인), 권한 동기화 (Permission syncing), 간편한 온프레미스 (On-prem) 호스팅 지원.
다양한 모델 제공업체(Model providers) 전반에서 작동하는 딥 리서치 및 코드 인터프리터 (Code interpreter)와 같은 기능을 구축하면서, 저희는 Onyx를 작동시키는 핵심이 된 LLM (대규모 언어 모델) 엔지니어링에 관한 수많은 비자명한(Non-obvious) 사실들을 배웠습니다. 그중 특히 흥미로웠던 두 가지를 공유하고자 합니다 (댓글을 통해 더 자세히 논의할 수 있습니다).
첫째, 컨텍스트 관리 (Context management)는 제대로 구현하기 가장 어렵고 중요한 요소 중 하나입니다. 저희는 LLM이 긴 대화 속에서 시스템 프롬프트 (System prompts)와 이전 사용자 메시지를 모두 기억하는 데 실제로 어려움을 겪는다는 것을 발견했습니다. 시스템 프롬프트에 포함된 “X 유형의 소스는 무시하라”와 같은 간단한 지시사항조차 무시되는 경우가 매우 빈번합니다. 이는 방대한 양의 컨텍스트를 주입할 수 있는 여러 번의 도구 호출 (Tool calls)로 인해 더욱 악화됩니다. 저희는 이를 “리마인더 (Reminder)” 프롬프트로 해결했습니다. 이는 사용자 메시지 끝에 삽입되는 1~3문장의 짧은 문구로, LLM이 반드시 준수해야 하는 타협 불가능한 사항들을 설명합니다. 경험적으로 LLM은 컨텍스트 창 (Context window)의 맨 마지막 부분에 가장 집중하기 때문에, 이 위치가 준수 가능성을 가장 높여줍니다.
둘째로, 우리는 특정 모델들이 도구(Tools)를 사용할 때 보이는 "자연스러운 경향(natural tendencies)"을 이해하고, 이를 바탕으로 시스템을 구축해야 했습니다. 예를 들어, GPT 모델 제품군은 Jupyter notebook에서 작동하는 Python 코드 인터프리터(code interpreter)를 사용하도록 미세 조정(fine-tuned)되어 있습니다. 명시적으로 요청하더라도, Jupyter에서는 마지막 줄이 자동으로 표준 출력(stdout)으로 작성되기 때문에, GPT는 마지막 줄 주변에 print()를 추가하는 것을 거부합니다. 다른 모델들은 이러한 강한 선호도를 가지고 있지 않으므로, 우리는 모델 불가지론적(model-agnostic) 코드 인터프리터가 마지막의 단독 줄(bare line)에도 자동으로 print()를 수행하도록 설계해야 했습니다.
지금까지 한 Fortune 100 기업 팀이 Onyx를 포크(fork)하여 1만 명 이상의 직원들에게 단일 인터페이스 내의 모든 모델에 대한 접근 권한을 제공했으며, 각 부서의 업무에 가장 적합한 모델을 사용하는 수천 개의 유스케이스(use-case)별 어시스턴트(Assistants)를 생성했습니다. 우리는 민감한 산업 분야에서 활동하는 팀들이 로컬에 호스팅된 LLM을 사용하여 Onyx를 완전히 에어갭(airgap) 처리함으로써, 이전에는 불가능했을 코파일럿(copilot)을 제공하는 것을 목격했습니다.
Onyx를 직접 사용해보고 싶다면, https://docs.onyx.app/deployment/getting_started/quickstart 를 따라 Docker를 사용하여 15분 이내에 로컬 설정을 완료할 수 있습니다. 클라우드 버전은 https://www.onyx.app/ 에서 확인하세요. 만약 귀하의 ChatGPT Enterprise 또는 Claude Enterprise 구독을 대체하는 것이 당연한 선택(no-brainer)이 될 수 있도록 추가되었으면 하는 기능이 있다면, 언제든 의견을 들려주세요!
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기