chainlit
무엇인가
Chainlit은 LLM 애플리케이션의 대화 계층을 담당하는 파이썬 프레임워크다. 사용자 입력 수신, 모델 호출, 중간 과정 표시, 응답 스트리밍, 세션 이력 저장처럼 채팅 앱마다 반복되는 부분을 프레임워크가 맡고 개발자는 에이전트·RAG·도구 호출 로직만 작성한다. React 프론트엔드와 실시간 서버를 처음부터 조립하는 자리를 대체한다.
어떻게 동작하나
백엔드는 FastAPI와 Socket.IO로, 프론트엔드는 React 애플리케이션으로 구성된다. `chainlit run`은 두 요소를 한 프로세스에서 서빙하고 브라우저는 Socket.IO 연결로 메시지와 스트리밍 토큰을 주고받는다. 개발자는 `@cl.on_chat_start`, `@cl.on_message`, `@cl.step` 데코레이터로 핸들러를 등록한다. `@cl.step`으로 감싼 구간은 접고 펼칠 수 있는 중간 단계로 화면에 나타난다. 이미지·PDF·파일·텍스트는 `cl.Image`, `cl.Pdf`, `cl.File`, `cl.Text` 같은 Element로 메시지에 붙는다. 대화 이력과 요소는 SQLAlchemy 데이터 계층에 저장되고 기본값은 SQLite이며 `DATABASE_URL`로 다른 데이터베이스를 지정한다.
무엇과 다른가
Streamlit이나 Gradio는 스크립트를 다시 실행해 화면을 그리는 범용 앱 도구이고, Chainlit은 세션을 유지한 채 이벤트 핸들러를 호출하는 구조다. 그래서 사용자마다 독립된 대화 상태를 가질 수 있고 같은 세션에서 이어지는 후속 질문이 동일한 컨텍스트를 공유한다. React와 FastAPI를 직접 조립하는 방식과 비교하면 두 층이 이미 연결되어 있고 확장점은 파이썬 쪽에 열려 있다.
어떻게 쓰나
설치는 `pip install chainlit`이다. 핸들러를 정의한 앱 파일을 만든 뒤 `chainlit run app.py -w`로 실행하면 기본 포트 8000에서 서버가 뜨고 브라우저에 채팅 화면이 열린다. `-w`는 파일 변경 시 자동 재시작을 켠다. UI 문구·테마·기능 토글은 `.chainlit/config.toml`에서, 첫 화면에 보이는 안내 문서는 `chainlit.md`에서 관리한다. 인증이 필요하면 `@cl.password_auth_callback`이나 `@cl.oauth_callback`을 등록한다.
전제와 한계
파이썬 런타임과 pip가 필요하고 UI는 CLI가 서빙하는 웹 화면이므로 브라우저가 전제된다. 화면 구조는 채팅 패러다임에 고정되어 임의 레이아웃 구성은 범위 밖이다. 인증·데이터 영속화·세션 재개 같은 기능은 각각 콜백과 데이터 계층 설정을 켜야 동작한다. 배포할 때는 호스트·포트 옵션을 주어 실행하거나 컨테이너 이미지로 패키징한다.
유사 도구
- CopilotKit에이전트 백엔드와 UI 사이를 잇는 TypeScript 프론트엔드 SDK다. AG-UI 프로토콜로 생성형 UI·공유 상태·휴먼 인 더 루프를 React, Angular, Slack에 연결한다.
- AstrBotQQ·텔레그램·슬랙 등 메신저에 LLM 에이전트를 붙이는 파이썬 올인원 챗봇 플랫폼이다. 플러그인과 WebUI로 페르소나·지식베이스·샌드박스를 관리한다.
- agentscope모델의 추론과 도구 사용 능력을 그대로 살려 에이전트를 조립하는 Python 프레임워크다. FastAPI 에이전트 서비스와 터미널 콘솔을 포함한다.
- OpenLLM오픈소스 LLM을 한 줄 명령으로 OpenAI 호환 API 서버로 띄우는 Python CLI다. 내장 채팅 UI와 Docker·Kubernetes·BentoCloud 배포 경로를 함께 갖춘다.
- LLM-API-Key-ProxyOpenAI·Anthropic 호환 엔드포인트를 하나 띄워 여러 LLM 제공자를 provider/model 형식으로 중계하는 자체 호스팅 FastAPI 프록시다.