본문으로 건너뛰기
버전: 0.1.0

OpenWebUI로 RAG 챗봇 서빙하기

NuFi LLM Serving 앞에 OpenWebUI 를 붙여서, 별도 코드 작성 없이 ChatGPT 스타일의 채팅 화면과 문서 기반 답변(RAG) 을 같이 사용합니다. NuFi Serving이 OpenAI 호환 API(/v1/chat/completions)를 제공하므로 OpenWebUI를 그대로 연결할 수 있고, 문서 검색은 OpenWebUI에 내장된 Knowledge 기능을 사용합니다.


구성

Serving: qwen-instruct-tutorial-v1-original ← OpenAI 호환 LLM 백엔드 (vLLM, 사전 조건에서 배포)
└─ /v1/chat/completions

Volume: openwebui-volume ← OpenWebUI 설정/사용자 DB + 업로드 문서 + 내장 인덱스 저장
└─ /app/backend/data

Serving: tutorial-openwebui ← 외부 노출 지점
└─ ghcr.io/open-webui/open-webui:main
└─ LLM Serving을 OpenAI 호환 백엔드로 연결
└─ Knowledge 컬렉션에 문서 업로드 → 채팅에서 # 으로 참조

OpenWebUI는 사용자 계정, 대화 이력, 업로드한 문서, 내장 임베딩 인덱스를 모두 컨테이너 내부 /app/backend/data에 저장합니다. Pod이 재시작돼도 데이터가 유지되도록 NuFi Volume을 마운트합니다.


사전 조건

  • Lab에서 RAG 챗봇 구성하기의 사전 조건에 따라 vLLM 기반 LLM Serving이 Running 상태.
  • LLM Serving 배포 시 사용한 모델 ID 확인 (Serving 상세의 Command/Args에서 --model 뒤 값)
  • 테스트용 영어 텍스트 문서 1~2개 (.md, .txt, .pdf 등)
본문에서 사용하는 이름 규칙

환경변수와 URL에 등장하는 값은 본인 환경에 맞게 바꿔서 사용해야 합니다. 주요 위치는 다음과 같습니다.

  • 프로젝트 네임스페이스 — NuFi 대시보드 상단 헤더의 프로젝트 네임스페이스 영역에서 확인할 수 있습니다. 본문에서는 rag 라는 가정으로 예시를 작성했습니다.
  • LLM Serving 이름Development > Serving 목록에 표시되는 이름. Quick Deploy 시 <model-name>-<version>-<artifact> 형식으로 자동 생성됩니다. 본문에서는 사전 조건에서 준비한 qwen-instruct-tutorial-v1-original 을 기준으로 예시를 작성했습니다.
  • OpenWebUI Serving 이름 — 본 튜토리얼에서 직접 입력하는 값으로, tutorial-openwebui 를 사용합니다.

1. OpenWebUI 데이터용 Volume 생성

Volume 생성 절차는 사용 가이드 > 스토리지 > Volume 생성을 참고합니다. 아래 값으로 생성하세요.

필드입력값
Volume Nameopenwebui-volume
Size10Gi

업로드할 문서가 많거나 대화 이력을 길게 유지할 계획이라면 Size를 더 크게 잡아도 됩니다. 생성 후 Volume 목록에서 Ready 상태인지 확인합니다.

왜 Volume이 필요한가요?

OpenWebUI는 사용자 계정·채팅 이력·워크스페이스 설정뿐 아니라 Knowledge에 업로드한 문서와 내장 임베딩 인덱스 까지 모두 /app/backend/data 경로 안에 저장합니다. Volume 없이 띄우면 Pod이 재시작될 때 문서와 인덱스가 전부 날아갑니다.


2. OpenWebUI Serving 배포

Serving 생성 방법과 각 필드 의미는 사용 가이드 > Serving > Serving 생성 문서를 참고하세요. 본문에서는 이 튜토리얼에 필요한 값만 다룹니다.

Development > Serving > Create로 이동하여 OpenWebUI를 배포합니다.

Step 1 — 기본 정보

필드입력값
Service Nametutorial-openwebui
DescriptionOpenWebUI chat UI with Knowledge
Service TemplateCustom

Step 2 — 상세 설정

필드입력값
Imageghcr.io/open-webui/open-webui:main
CPU2
Memory8
Accelerator TypeNone
Replicas1
Inference Port8080

Volume Mount

필드입력값
Volumeopenwebui-volume
Mount Path/app/backend/data

Environment Variables

OPENAI_API_BASE_URL=http://qwen-instruct-tutorial-v1-original.rag.svc:80/v1
OPENAI_API_KEY=unused
WEBUI_AUTH=true
ENABLE_OLLAMA_API=false
ENABLE_RAG_HYBRID_SEARCH=true
  • OPENAI_API_BASE_URLhttp://<llm-service-name>.<project-namespace>.svc:80/v1 형식의 LLM Serving 내부 호출 URL. <llm-service-name><project-namespace> 는 사전 조건 안내에 따라 본인 환경 값으로 치환합니다.
  • OPENAI_API_KEY — 임의의 문자열을 넣습니다 (NuFi 내부 Serving은 키 검증을 하지 않음).
  • WEBUI_AUTHtrue로 두면 첫 가입자가 자동으로 관리자가 됩니다. 사내 공유용이면 그대로 둡니다.
  • ENABLE_OLLAMA_API — Ollama 백엔드는 사용하지 않으므로 끕니다.
  • ENABLE_RAG_HYBRID_SEARCH — Knowledge 검색을 벡터 + BM25 하이브리드로 수행해 단순 벡터 검색보다 정확도가 올라갑니다.
외부에서 회원가입을 막고 싶다면

배포 후 첫 번째 계정으로 가입해 관리자가 된 다음, OpenWebUI Admin Settings > General > Enable New Sign Ups를 꺼서 외부 가입을 차단할 수 있습니다.

배포 후 Development > Serving 목록에서 tutorial-openwebuiRunning 상태가 될 때까지 기다립니다. 첫 시작 시 임베딩 모델을 다운로드하기 때문에 1~3분 정도 걸릴 수 있습니다.


3. OpenWebUI 접속 및 초기 설정

1. Connect URL 열기

Serving 목록에서 tutorial-openwebui를 선택하고 Connect 버튼을 눌러 외부 URL을 엽니다.

Serving 목록 — tutorial-openwebui Connect

2. 관리자 계정 생성

처음 접속하면 회원가입 화면이 뜹니다. 이름, 이메일, 비밀번호를 입력해 첫 계정을 만듭니다. 첫 가입자가 자동으로 관리자가 됩니다.

비밀번호 분실 시

사용자 정보는 openwebui-volume 안에 들어 있으므로, 비밀번호를 잃어버린 경우 Lab에서 해당 볼륨을 마운트해 사용자 테이블을 직접 손봐야 합니다. 가급적 비밀번호를 안전한 곳에 기록해 두세요.


4. LLM Serving 연결 확인

환경변수(OPENAI_API_BASE_URL)로 이미 연결돼 있어야 합니다. UI에서 확인합니다.

1. 모델 선택 드롭다운 열기

상단 좌측의 모델 선택 드롭다운을 열면 OPENAI_API_BASE_URL이 가리키는 LLM Serving이 노출하는 모델 ID가 보입니다. 사전 조건에서 확인한 --model (또는 --served-model-name) 값과 같은지 확인합니다.

OpenWebUI 모델 선택 드롭다운

2. 모델이 보이지 않을 때

다음 순서로 점검합니다.

  1. 우측 상단 내 아바타 → Admin Panel 클릭 → 상단의 Settings 탭 → 좌측 메뉴의 ConnectionsOpenAI API 항목으로 이동합니다.
  2. 입력된 URL이 환경변수 OPENAI_API_BASE_URL 값과 같은지 확인하고, URL 우측의 새로고침 버튼을 눌러 모델 목록을 다시 가져옵니다.
  3. 그래도 비어 있으면 LLM Serving 상세 → Logs 탭에서 vLLM이 준비됐는지 확인합니다.

5. 한국어 임베딩 안내

OpenWebUI 기본 임베딩 모델은 영어 위주로 학습돼 있어, 한국어 문서를 정확히 검색하려면 별도로 다국어 임베딩 모델로 교체하는 작업이 필요합니다. 이 튜토리얼에서는 해당 과정을 생략하고 영어 문서를 업로드해 동작을 확인합니다.


6. Knowledge 컬렉션 만들기

문서를 묶어 두는 단위가 Knowledge 컬렉션입니다. 한 컬렉션에 여러 파일을 올려두고 채팅에서 컬렉션을 통째로 참조합니다.

Workspace Knowledge 화면

  1. 좌측 사이드바에서 Workspace > Knowledge 로 이동합니다.
  2. 우측 상단 + New Knowledge 클릭.
  3. Create a knowledge base 다이얼로그가 열리면 다음 항목을 입력합니다.
    • What are you working on? (Name your knowledge base): tutorial-docs
    • What are you trying to achieve? (Describe your knowledge base and objectives): 적당히 입력 (예: Dudaji product manuals)
  4. Create 버튼 클릭.

7. 문서 업로드

만든 tutorial-docs 컬렉션을 열고 + Add Content 또는 가운데 드롭존에 파일을 끌어다 놓습니다.

  • 권장 포맷: .md, .txt, .pdf (PDF는 OpenWebUI가 내부에서 텍스트 추출)
  • 한 번에 여러 개 업로드 가능

업로드된 파일은 즉시 청킹·임베딩되어 컬렉션 내부에 적재됩니다. 파일별 StatusProcessed 가 되면 검색에 쓸 수 있습니다.


8. 채팅에서 Knowledge 사용

방법 1 — 일회성으로 컬렉션 참조 (#)

새 채팅에서 메시지 입력창에 # 을 치면 등록된 Knowledge 컬렉션 / 파일 목록이 뜹니다. tutorial-docs 를 선택하고 질문을 작성합니다.

예시 질문 (업로드한 영어 매뉴얼 기준 — 기본 임베딩 모델이 영어 위주이므로 질문도 영어로 작성합니다):

#tutorial-docs What is the maximum load capacity of the Gravity Desk Pro?
#tutorial-docs What does error code E04 on the Claymore K3 mean and how should I handle it?
#tutorial-docs How long does the Claymore K3 self-diagnosis take, and what should I do if the LED blinks red?
#tutorial-docs When does the Gravity Desk Pro require ACS recalibration?

OpenWebUI 채팅 화면 — Knowledge 참조 결과

응답이 끝나면 답변 위쪽에 참조한 문서 청크 목록이 펼침으로 표시됩니다. 클릭하면 원문 청크 내용을 확인할 수 있습니다.

방법 2 — 모델에 Knowledge를 영구 연결

매 채팅마다 #을 치는 게 번거롭다면 모델 단위로 컬렉션을 묶어 둘 수 있습니다.

Workspace Models — + New Model

Model 상세 — Knowledge 연결

  1. Workspace > Models > + New Model 클릭.
  2. Base Model (From) 에서 LLM Serving이 노출한 모델을 선택 (예: /mnt/rag-volume/Qwen2.5-0.5B-Instruct).
  3. Name: qwen 으로 입력합니다.
  4. Knowledge 섹션의 Select Knowledge 를 눌러 tutorial-docs 컬렉션을 추가.
  5. 우측 상단 Save & Create 클릭.

이제 채팅 상단 모델 드롭다운에서 qwen 을 고르면 모든 메시지가 자동으로 tutorial-docs 컬렉션을 거쳐 RAG로 답합니다.


9. 응답 + 출처 확인

업로드한 문서와 관련된 질문을 던지고 답변 + 참조한 문서를 확인합니다.

OpenWebUI 채팅 응답 — Source 버튼

  • 답변 본문은 LLM Serving이 생성합니다.
  • 답변 영역에 Source 버튼이 함께 표시됩니다.
  • Source 버튼을 클릭하면 답변을 만들 때 참조한 문서 청크(파일명, 본문 일부)를 확인할 수 있습니다.
응답 품질 안내

E2E 튜토리얼에서 배포한 Qwen2.5-0.5B-Instruct 는 0.5B급 소형 모델이라 RAG로 검색된 문서를 가져오더라도 답변이 정확하지 않거나 형식이 흔들릴 수 있습니다. 더 큰 모델로 LLM Serving을 교체하면 체감 품질이 크게 좋아집니다.