개요
AnythingLLM은 문서와 대화할 수 있는 올인원 AI 애플리케이션입니다. PDF, Word, 웹페이지 등 모든 문서를 업로드하면 AI가 내용을 이해하고 질문에 답변합니다. RAG(검색 증강 생성), AI 에이전트, 노코드 에이전트 빌더, MCP 호환성을 제공하며, 로컬 LLM(Ollama)부터 클라우드 API(OpenAI, Claude)까지 모든 LLM을 지원합니다.
| 항목 | 내용 |
|---|---|
| GitHub | https://github.com/Mintplex-Labs/anything-llm |
| 공식 사이트 | https://anythingllm.com |
| 문서 | https://docs.anythingllm.com |
| 라이선스 | MIT |
| GitHub Stars | 30K+ |
AnythingLLM이란?
왜 AnythingLLM인가?
❌ 기존 문서 AI의 문제점:
- 복잡한 RAG 파이프라인 구축 필요
- LLM, 벡터DB, 임베딩 각각 설정
- 기술적 지식 필요
✅ AnythingLLM의 해결책:
- 올인원: 드래그 앤 드롭으로 문서 업로드
- 제로 설정: 내장 벡터DB (LanceDB)
- 유연한 LLM: 로컬부터 클라우드까지
- 멀티 유저: 팀 협업 지원
- 에이전트: 노코드로 AI 에이전트 구축
핵심 슬로건
"Chat with your docs"
- 모든 문서를 AI 컨텍스트로 변환
- 워크스페이스로 문서 분류
- 출처 인용 답변
- 완전 오픈소스, 셀프호스팅
아키텍처
┌─────────────────────────────────────────┐
│ AnythingLLM UI │
│ (워크스페이스 + 채팅 + 설정) │
├─────────────────────────────────────────┤
│ Node.js Backend │
│ (문서 처리 + 벡터화 + LLM 연결) │
├──────────────┬──────────────────────────┤
│ LanceDB │ LLM │
│ (내장 벡터DB) │ (Ollama/OpenAI/Claude) │
└──────────────┴──────────────────────────┘
주요 기능
📚 문서 지원
| 형식 | 지원 |
|---|---|
| ✅ | |
| Word (DOCX) | ✅ |
| TXT, Markdown | ✅ |
| HTML, 웹페이지 | ✅ |
| YouTube 자막 | ✅ |
| GitHub 저장소 | ✅ |
| Notion | ✅ |
| Confluence | ✅ |
🤖 LLM 제공자
| 제공자 | 설명 |
|---|---|
| Ollama | 로컬 LLM (Llama, Mistral 등) |
| OpenAI | GPT-4o, GPT-4, GPT-3.5 |
| Anthropic | Claude 3.5, Claude 3 |
| Gemini Pro | |
| Azure OpenAI | 엔터프라이즈 |
| Groq | 초고속 추론 |
| LocalAI | OpenAI 호환 로컬 |
| LM Studio | 로컬 GUI |
| OpenRouter | 모든 모델 통합 |
💾 벡터 데이터베이스
| 벡터DB | 설명 |
|---|---|
| LanceDB | 내장 (기본값, 설정 불필요) |
| Chroma | 로컬 |
| Pinecone | 클라우드 |
| Qdrant | 로컬/클라우드 |
| Weaviate | 로컬/클라우드 |
| Milvus | 대규모 |
🔧 임베딩 엔진
| 엔진 | 설명 |
|---|---|
| 내장 | AnythingLLM 기본 임베더 |
| Ollama | nomic-embed-text 등 |
| OpenAI | text-embedding-3-small |
| Cohere | – |
| LocalAI | 로컬 임베딩 |
🛠️ 고급 기능
| 기능 | 설명 |
|---|---|
| 워크스페이스 | 문서 분류 및 컨텍스트 분리 |
| AI 에이전트 | 도구 사용 에이전트 |
| 노코드 에이전트 빌더 | 드래그 앤 드롭 에이전트 |
| MCP 호환 | Model Context Protocol |
| 임베드 위젯 | 웹사이트에 채팅 위젯 |
| 브라우저 확장 | 웹페이지 수집 |
| Whisper | 음성 입력 |
| TTS | 텍스트 음성 변환 |
🔐 멀티 유저 (Docker)
| 기능 | 설명 |
|---|---|
| 멀티 유저 | 여러 사용자 지원 |
| 권한 관리 | 관리자/일반 사용자 |
| 워크스페이스 공유 | 팀 협업 |
| API 키 | 프로그래밍 접근 |
시스템 요구 사항
| 항목 | 최소 | 권장 |
|---|---|---|
| CPU | 2 코어 | 4+ 코어 |
| RAM | 2GB | 8GB+ |
| 저장소 | 10GB | 50GB+ |
| 포트 | 3001 | – |
Docker 설치
방법 1: 원커맨드 설치 (권장)
# 저장 위치 설정
export STORAGE_LOCATION=$HOME/anythingllm
# 디렉토리 생성
mkdir -p $STORAGE_LOCATION
# Docker 실행
docker run -d -p 3001:3001 \
--cap-add SYS_ADMIN \
-v ${STORAGE_LOCATION}:/app/server/storage \
-e STORAGE_DIR="/app/server/storage" \
--name anythingllm \
mintplexlabs/anythingllm:latest
접속: http://localhost:3001
방법 2: Docker Compose (기본)
# docker-compose.yml
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
restart: unless-stopped
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
environment:
- STORAGE_DIR=/app/server/storage
volumes:
- ./anythingllm_storage:/app/server/storage
방법 3: Ollama 통합 (로컬 LLM)
# docker-compose.yml
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
restart: unless-stopped
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
environment:
- STORAGE_DIR=/app/server/storage
- LLM_PROVIDER=ollama
- OLLAMA_BASE_PATH=http://host.docker.internal:11434
- OLLAMA_MODEL_PREF=llama3.2
- EMBEDDING_ENGINE=ollama
- EMBEDDING_BASE_PATH=http://host.docker.internal:11434
- EMBEDDING_MODEL_PREF=nomic-embed-text:latest
- VECTOR_DB=lancedb
volumes:
- ./anythingllm_storage:/app/server/storage
extra_hosts:
- "host.docker.internal:host-gateway"
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./ollama:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
방법 4: OpenAI 사용
# docker-compose.yml
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
restart: unless-stopped
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
environment:
- STORAGE_DIR=/app/server/storage
- LLM_PROVIDER=openai
- OPEN_AI_KEY=${OPENAI_API_KEY}
- OPEN_MODEL_PREF=gpt-4o
- EMBEDDING_ENGINE=openai
- EMBEDDING_MODEL_PREF=text-embedding-3-small
- VECTOR_DB=lancedb
volumes:
- ./anythingllm_storage:/app/server/storage
방법 5: Anthropic Claude
# docker-compose.yml
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
restart: unless-stopped
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
environment:
- STORAGE_DIR=/app/server/storage
- LLM_PROVIDER=anthropic
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- ANTHROPIC_MODEL_PREF=claude-3-5-sonnet-20241022
- EMBEDDING_ENGINE=openai
- OPEN_AI_KEY=${OPENAI_API_KEY}
- EMBEDDING_MODEL_PREF=text-embedding-3-small
- VECTOR_DB=lancedb
volumes:
- ./anythingllm_storage:/app/server/storage
방법 6: Qdrant 벡터DB
# docker-compose.yml
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
restart: unless-stopped
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
environment:
- STORAGE_DIR=/app/server/storage
- VECTOR_DB=qdrant
- QDRANT_ENDPOINT=http://qdrant:6333
volumes:
- ./anythingllm_storage:/app/server/storage
depends_on:
- qdrant
qdrant:
image: qdrant/qdrant:latest
container_name: qdrant
restart: unless-stopped
ports:
- "6333:6333"
volumes:
- ./qdrant_storage:/qdrant/storage
방법 7: PostgreSQL 데이터베이스
# docker-compose.yml
services:
anythingllm:
image: mintplexlabs/anythingllm:pg
container_name: anythingllm
restart: unless-stopped
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
environment:
- STORAGE_DIR=/app/server/storage
- DATABASE_CONNECTION_STRING=postgresql://anythingllm:password@postgres:5432/anythingllm
volumes:
- ./anythingllm_storage:/app/server/storage
depends_on:
- postgres
postgres:
image: postgres:15
container_name: anythingllm-postgres
restart: unless-stopped
environment:
- POSTGRES_USER=anythingllm
- POSTGRES_PASSWORD=password
- POSTGRES_DB=anythingllm
volumes:
- ./postgres_data:/var/lib/postgresql/data
방법 8: Traefik + HTTPS
# docker-compose.yml
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
restart: unless-stopped
cap_add:
- SYS_ADMIN
environment:
- STORAGE_DIR=/app/server/storage
volumes:
- ./anythingllm_storage:/app/server/storage
networks:
- traefik_network
labels:
- "traefik.enable=true"
- "traefik.http.routers.anythingllm.rule=Host(`ai.example.com`)"
- "traefik.http.routers.anythingllm.entrypoints=websecure"
- "traefik.http.routers.anythingllm.tls.certresolver=letsencrypt"
- "traefik.http.services.anythingllm.loadbalancer.server.port=3001"
networks:
traefik_network:
external: true
환경 변수
기본 설정
| 변수 | 설명 | 기본값 |
|---|---|---|
STORAGE_DIR | 저장 디렉토리 | /app/server/storage |
SERVER_PORT | 서버 포트 | 3001 |
JWT_SECRET | JWT 시크릿 | – |
DISABLE_TELEMETRY | 텔레메트리 비활성화 | false |
LLM 제공자
| 변수 | 설명 |
|---|---|
LLM_PROVIDER | ollama, openai, anthropic, gemini, azure 등 |
OLLAMA_BASE_PATH | Ollama API URL |
OLLAMA_MODEL_PREF | Ollama 모델 |
OPEN_AI_KEY | OpenAI API 키 |
OPEN_MODEL_PREF | OpenAI 모델 |
ANTHROPIC_API_KEY | Anthropic API 키 |
ANTHROPIC_MODEL_PREF | Claude 모델 |
임베딩 엔진
| 변수 | 설명 |
|---|---|
EMBEDDING_ENGINE | native, ollama, openai 등 |
EMBEDDING_BASE_PATH | 임베딩 API URL |
EMBEDDING_MODEL_PREF | 임베딩 모델 |
EMBEDDING_MODEL_MAX_CHUNK_LENGTH | 청크 최대 길이 |
벡터 데이터베이스
| 변수 | 설명 |
|---|---|
VECTOR_DB | lancedb, chroma, qdrant, pinecone 등 |
QDRANT_ENDPOINT | Qdrant URL |
CHROMA_ENDPOINT | Chroma URL |
PINECONE_API_KEY | Pinecone API 키 |
음성
| 변수 | 설명 |
|---|---|
WHISPER_PROVIDER | local, openai |
TTS_PROVIDER | native, openai, elevenlabs |
인증
| 변수 | 설명 |
|---|---|
AUTH_TOKEN | 싱글 유저 인증 토큰 |
PASSWORDMINCHAR | 최소 비밀번호 길이 |
초기 설정
1) 첫 접속
URL: http://localhost:3001
→ 설정 마법사 시작
2) LLM 선택
- Settings → LLM Preference
- 제공자 선택 (Ollama, OpenAI 등)
- API 키 또는 URL 입력
- 모델 선택
3) 임베딩 설정
- Settings → Embedder
- 엔진 선택 (Ollama, OpenAI 등)
- 모델 선택 (nomic-embed-text 등)
4) 첫 워크스페이스 만들기
- New Workspace 클릭
- 이름 지정 (예: “회사 문서”)
- 문서 업로드 (드래그 앤 드롭)
- 채팅 시작
사용 가이드
워크스페이스 이해
워크스페이스는 문서 그룹을 분리하는 컨테이너입니다:
워크스페이스 A: 회사 정책 문서
워크스페이스 B: 기술 문서
워크스페이스 C: 연구 논문
→ 각 워크스페이스는 서로 분리된 컨텍스트
→ 같은 문서를 여러 워크스페이스에 공유 가능
문서 업로드
- 워크스페이스 선택
- 업로드 버튼 클릭 또는 드래그 앤 드롭
- 자동 청킹 및 임베딩
- 완료 후 채팅 가능
채팅 모드
| 모드 | 설명 |
|---|---|
| Chat | 문서 컨텍스트 + LLM 지식 |
| Query | 문서 컨텍스트만 (환각 방지) |
AI 에이전트 사용
- Settings → Agent Skills
- 도구 활성화 (웹 검색, 코드 실행 등)
- 워크스페이스에서
@agent명령
임베드 위젯
웹사이트에 채팅 위젯 추가:
- Settings → Embed Chat
- 워크스페이스 선택
- 코드 생성
- 웹사이트에 붙여넣기
<script src="https://your-server:3001/embed/widget.js"></script>
API 사용
# 채팅 API
curl -X POST "http://localhost:3001/api/v1/workspace/{workspace-slug}/chat" \
-H "Authorization: Bearer {api-key}" \
-H "Content-Type: application/json" \
-d '{
"message": "이 문서의 핵심 내용은?",
"mode": "chat"
}'
백업 및 복원
데이터 구조
./anythingllm_storage/
├── anythingllm.db # SQLite 데이터베이스
├── documents/ # 업로드된 문서
├── vector-cache/ # 벡터 캐시
└── lancedb/ # LanceDB 데이터
백업
# 컨테이너 정지
docker compose down
# 전체 백업
tar -czvf anythingllm-backup-$(date +%Y%m%d).tar.gz anythingllm_storage/
# 재시작
docker compose up -d
복원
tar -xzvf anythingllm-backup.tar.gz
docker compose up -d
업데이트
# 최신 이미지 가져오기
docker pull mintplexlabs/anythingllm:latest
# 재시작
docker compose down
docker compose up -d
트러블슈팅
Ollama 연결 안 됨
Docker 내에서 호스트 접근:
# Linux
OLLAMA_BASE_PATH=http://172.17.0.1:11434
# Mac/Windows
OLLAMA_BASE_PATH=http://host.docker.internal:11434
Linux에서 host.docker.internal 사용:
extra_hosts:
- "host.docker.internal:host-gateway"
권한 오류
UID/GID 확인:
# 현재 사용자 ID 확인
id -u # UID
id -g # GID
# Docker Compose에서 설정
environment:
- UID=1000
- GID=1000
메모리 부족
대용량 문서 처리 시:
- 청크 크기 감소
- 더 작은 임베딩 모델 사용
- RAM 증가
이미지 태그
| 태그 | 설명 |
|---|---|
latest | 최신 안정 버전 |
pg | PostgreSQL 지원 |
대안 비교
| 기능 | AnythingLLM | PrivateGPT | Open WebUI |
|---|---|---|---|
| 문서 RAG | ✅ 내장 | ✅ 내장 | ✅ 플러그인 |
| 워크스페이스 | ✅ | ❌ | ✅ |
| 멀티 유저 | ✅ Docker | ❌ | ✅ |
| 에이전트 | ✅ | ❌ | ✅ |
| 노코드 빌더 | ✅ | ❌ | ❌ |
| MCP | ✅ | ❌ | ❌ |
| 임베드 위젯 | ✅ | ❌ | ❌ |
| 설치 난이도 | 쉬움 | 중간 | 쉬움 |
| LLM 선택 | 다양 | 다양 | Ollama 중심 |
선택 가이드
| 용도 | 추천 |
|---|---|
| 문서 Q&A | AnythingLLM |
| 팀 협업 | AnythingLLM |
| 프라이버시 RAG | PrivateGPT |
| Ollama UI | Open WebUI |
| 임베드 위젯 | AnythingLLM |
활용 사례
1. 회사 지식 베이스
구성:
- 정책 문서, 매뉴얼 업로드
- 워크스페이스별 분류 (HR, IT, 영업)
- 멀티 유저로 팀 접근
결과: 사내 정보 즉시 검색
2. 연구 논문 분석
구성:
- PDF 논문 업로드
- 연구 주제별 워크스페이스
- Query 모드로 정확한 인용
결과: 논문 요약 및 비교
3. 고객 지원 챗봇
구성:
- FAQ, 제품 문서 업로드
- 임베드 위젯으로 웹사이트 배포
- AI 에이전트로 자동 응답
결과: 24/7 고객 지원
4. 코드 문서화
구성:
- GitHub 저장소 연결
- README, 코드 주석 임베딩
- 개발팀 워크스페이스
결과: 코드베이스 Q&A
5. 개인 지식 관리
구성:
- 노트, 북마크, 기사 수집
- 브라우저 확장으로 웹페이지 저장
- 로컬 Ollama로 프라이버시
결과: 개인 AI 비서
마무리
AnythingLLM은 문서와 대화할 수 있는 가장 쉬운 올인원 AI 플랫폼입니다. 드래그 앤 드롭으로 문서를 업로드하고, 내장 LanceDB로 별도 설정 없이 바로 RAG를 사용할 수 있습니다. 로컬 LLM부터 클라우드 API까지 모든 LLM을 지원합니다.
핵심 장점
| 장점 | 설명 |
|---|---|
| 올인원 | RAG + 에이전트 + 채팅 |
| 제로 설정 | 내장 벡터DB (LanceDB) |
| 유연한 LLM | Ollama, OpenAI, Claude 등 |
| 워크스페이스 | 문서 분류 및 컨텍스트 분리 |
| 멀티 유저 | 팀 협업 (Docker) |
| 임베드 위젯 | 웹사이트 배포 |
| 노코드 에이전트 | 드래그 앤 드롭 |
| MCP 호환 | Model Context Protocol |
이런 분께 추천
문서와 대화하고 싶은 분
복잡한 RAG 설정 없이 시작하고 싶은 분
팀용 지식 베이스가 필요한 분
웹사이트에 AI 채팅을 임베드하고 싶은 분
로컬 LLM으로 프라이버시를 지키고 싶은 분