
연구실 AI 기반 구축 (제1회)
요약
연구실 환경에 최적화된 생성형 AI 운용 기반 구축 방법을 소개합니다. OpenWebUI와 LiteLLM을 활용하여 종량 과금 체계를 구현하고, 다양한 모델을 통일된 인터페이스로 제공하는 환경을 구축하는 법을 다룹니다.
핵심 포인트
- OpenWebUI와 LiteLLM을 조합한 연구실 전용 AI 환경 구축
- 시트 기반 과금 대신 종량 과금(Pay-as-you-go) 방식의 효율적 운영
- LiteLLM을 통한 API 키 통합 관리 및 OpenAI 호환 인터페이스 제공
- 로컬 LLM과 외부 API를 통합하여 용도별 커스텀 모델 운영 가능
본 기사는 「연구실에서 생성형 AI (Generative AI)를 운용하는 기반」을 구축하는 메모 시리즈의 제1회입니다.
단순한 설치 방법 기사는 시중에 넘쳐나기 때문에, 어느 쪽인가 하면 어떻게 사용할 것인가라는 사고방식에 중점을 두고 싶습니다.
이번에는 OpenWebUI + LiteLLM을 사용하여, 연구실 전용 AI를 브라우저에서 이용할 수 있는 환경을 구축하고, 용도별 커스텀 모델을 작성하는 것까지 다룹니다.
생성형 AI (Generative AI)는 좋은 의미로도 나쁜 의미로도, 연구 및 교육 현장에 급속도로 침투하고 있습니다.
학생들에게 이제 AI를 사용하는 것은 당연한 일이 되었으며, 악의 없이 무의식적으로 AI를 이용하고 있습니다 (Google에서 검색하면 Gemini의 답변이 맨 앞에 나옵니다).
금지하더라도 무의식적으로 사용하는 환경에 있다면, 차라리 적극적으로 연구실의 공식 AI 기반을 정비하여, 바람직한 사용을 할 수 있도록 유도하는 방법에 대해 생각했습니다.
이번에는 우선 연구실에서 AI 기반을 운용하려고 할 때 처음에 부딪히는 문제인, 과금 관리 문제에 대해 검토했습니다. 연구실 전체에서 운용하려고 하면 다음과 같은 과제가 보입니다.
- 많은 서비스는 사용자별 시트 과금 (Seat-based billing)
- 실제 이용자가 적어도 매월 고정비가 발생함
- 학생의 교체가 일어날 때마다 라이선스 관리가 필요함
- 연구실에서는 이용 빈도의 편차가 커서, 고정 과금이 수지타산에 맞지 않음
연구실에는 「매일 연구에 대해 AI와 상담하고 싶은 학생」도 있고, 「발표나 논문 작성 시에만 상담하고 싶은 학생」, 애초에 「연구 활동이 완전히 정지되어 있는 학생」도 있습니다. 이러한 환경에서는 시트 과금이 합리적이지 않으며 종량 과금 (Pay-as-you-go) 방식이 더 적합합니다. 종량 과금이 맞지 않을 정도로 헤비하게 이용하는 학생이 나타나면, (사용법이 적절하다는 전제하에) 별도로 시트 과금 AI 멤버로 구성하면 될 일입니다.
그런데 연구실 단위로 종량 과금을 전제로 한 AI 서비스는 의외로 적은 것이 현상태입니다.
게다가 내용에 따라서는 외부 AI에 상담할 수 없는 경우도 있어 로컬 LLM (Local LLM)도 검토하고 싶은 부분입니다.
이번 목표는 학생이 브라우저에서 연구실 전용 채팅 AI를 이용할 수 있는 환경을 만드는 것으로, 연구실 측에서 보면 종량 과금으로 사용한 만큼만 지불하게 하고, 어떤 AI 서비스를 사용할지 혹은 로컬 LLM을 사용할지는 관리자가 설정하며, 이용자인 학생은 어떤 AI라도 통일된 인터페이스로 사용할 수 있게 합니다.
AI 에이전트 (AI Agent), 지식 베이스 (Knowledge Base), SSO 인증 기반 등은 다음 회차에서 다루겠습니다.
본 시리즈가 지향하는 것은 「ChatGPT의 대체 서비스」를 만드는 것이 아닙니다.
용도별로 역할을 가진 AI를 준비하여, 연구실 전체에서 공통으로 이용할 수 있는 환경을 정비하는 것입니다.
예를 들어,
- 프로그래밍 지원 AI
- 논문 첨삭 AI
- TA AI
- 아이디어 발상 AI
와 같은 AI를 용도별로 준비하여, 학생은 「어떤 모델을 사용할까」가 아니라 「무엇을 하고 싶은가」로 AI를 선택할 수 있게 합니다.
이번에 구축하는 구성은 다음과 같습니다.
이용자
│
브라우저
...
OpenWebUI는 다양한 AI 서비스의 API를 묶어서 채팅 화면을 제공하는 Hub로서 기능하며, LiteLLM은 각 LLM의 API를 통일적으로 다루는 프록시 (Proxy)로서 동작합니다.
OpenWebUI만으로도 Hub 기능이 있어 각 사 API로 접속할 수 있습니다.
하지만 연구실 운용에서는 LiteLLM을 사이에 두는 장점이 커집니다.
- API 키를 일원 관리할 수 있음
- OpenAI 호환 API로 통일할 수 있음
- 모델의 추가·변경을 LiteLLM만으로 수행할 수 있음
- 로컬 LLM도 동일한 메커니즘으로 추가할 수 있음
연구실에서는 「운용 용이성」이 중요합니다. 그런 의미에서 LiteLLM은 매우 궁합이 좋은 구성입니다.
이번에는 다음 내용까지 다룹니다.
- OpenWebUI 도입
- LiteLLM 도입
- API 접속
- 커스텀 모델 작성
- 시스템 프롬프트 (System Prompt) 설정
- 파라미터 (Parameter) 설정
이하는 다음 회차 이후에서 다룹니다.
- Authentik을 통한 SSO
- Knowledge / RAG
- VSCode Agent · Continue와의 연동
- 로컬 LLM
- 권한 관리
여기서부터 실제로 OpenWebUI와 LiteLLM을 구축해 나가겠습니다.
OpenWebUI나 LiteLLM에는 여러 가지 설치 방법이 있지만, 여기서는 도입·관리가 용이한 Docker Compose로 구축합니다.
상세한 옵션이나 최신 버전 정보에 대해서는 공식 문서를 참조해 주세요.
여기서는 연구실 AI 기반으로 이용하기 위해 필요한 최소 구성을 만듭니다.
이번에는 다음과 같은 구성으로 합니다.
lab-ai/
├── docker-compose.yml
├── .env
...
역할은 다음과 같습니다.
docker-compose.yml
-
OpenWebUI와 LiteLLM의 기동 설정
.env
-
API 키 및 관리용 비밀번호
litellm/config.yaml
- 이용할 LLM 모델 설정
먼저 공통으로 사용할 환경 변수를 설정합니다.
API 키 등의 비밀 정보는 설정 파일에 직접 작성하지 않고, .env로 관리합니다. .env의 권한(Permission)에도 주의하십시오. 600으로 설정하여, 루트(root) 이외에는 쓰기는 물론 읽기도 금지해 둡니다.
# ===== LiteLLM =====
# LiteLLM의 키, 실제 키로 변경할 것
LITELLM_MASTER_KEY=lab-ai-master-key
...
여기서 중요한 것이 LITELLM_MASTER_KEY입니다.
이것은 OpenAI 등 외부 서비스의 API 키가 아닙니다.
LiteLLM 자체에 접속하기 위한 인증 키입니다.
즉,
OpenWebUI
|
| OPENAI_API_KEY
...
라는 관계가 됩니다.
docker compose를 통해 litellm과 openwebui가 기동되도록 설정합니다.
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
...
이 문서를 작성하는 시점의 최신 버전은 v0.9.6이지만, 일부러 v0.9.4로 다운그레이드합니다. 이는 OpenWebUI를 API로 사용할 경우 v0.9.5 이후 버전에서는 버그가 있어 제대로 작동하지 않기 때문에, v0.9.4로 고정합니다.
이 부분이 조금 혼란스러울 수 있는데, OpenWebUI의
environment:
OPENAI_API_BASE_URL: http://litellm:4000
OPENAI_API_KEY: ${LITELLM_MASTER_KEY}
OPENAI_API_KEY는 OpenAI의 API 키가 아니라, OpenWebUI 입장에서 보면 접속 대상이 LiteLLM이며, OpenAI 호환 API로 접속하기 때문에 이와 같이 설정됩니다.
진짜 OpenAI API 키는 LiteLLM이 .env를 통해 보유합니다.
litellm/config.yaml을 생성합니다.
예:
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
litellm_settings:
...
처음의 master_key를 통해 OpenWebUI에서 LiteLLM으로 연결될 수 있도록 키를 공유합니다.
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
그 뒤의 models에 AI 모델을 설정해 나가면 됩니다. 이때 model_name은 OpenWebUI 측에 표시되는 이름이며, model에 실제 모델명을, api_key에 .env를 통해 API 키를 설정합니다.
대체로 각 회사의 각 사이즈별 모델 중 대표 모델로 설정해 두는 것이 좋습니다. OpenWebUI 측에서는 커스텀 모델(Custom Model)로 사용자에게 알기 쉬운 이름을 제공하므로, 관리자가 모델을 식별할 수 있을 정도의 이름으로 설정해 두는 것이 좋습니다.
회사명 뒤를 와일드카드(Wildcard)로 하여 묶어서 정의할 수도 있지만, OpenWebUI에서 보이는 모델명이 너무 많아지므로 여기서 구체적으로 기입하는 편이 좋습니다.
다음 명령어로 서버를 실행합니다.
docker compose up -d
브라우저로 접속합니다.
최초 접속 시 관리자 계정을 생성합니다.
OpenWebUI의 모델 목록에
gpt-mini
gemini-flash
등, LiteLLM에서 설정한 모델이 표시되면 성공입니다.
여기까지 완료하면,
- 브라우저 UI
- API 키 집중 관리
- 여러 모델 전환
이 가능한 기본적인 연구실 AI 환경이 완성되었습니다.
다음은, 이 모델을 그대로 사용하는 것이 아니라 연구실용 「커스텀 모델 (Custom Model)」로 설정해 나가겠습니다.
OpenWebUI에서는 동일한 LLM이라도 용도별로 커스텀 모델을 생성할 수 있습니다.
예를 들어
- 연구실 프로그래밍 지원 AI
- 논문 첨삭 AI
- TA AI
등이 있습니다. 다음 회차에서는 이러한 커스텀 모델 (Custom Model)을 생성하는 설정, 시스템 프롬프트 (System Prompt)의 예시, AI 파라미터 (Parameter)의 예시를 들어보겠습니다.
이번에는 연구실 AI 기반 구축의 첫걸음으로,
- OpenWebUI
- LiteLLM
까지 구축했습니다.
여기까지 완료되면, 학생들은 브라우저를 통해 연구실 전용 AI를 이용할 수 있게 됩니다.
다음 회차에서는 커스텀 모델을 보다 실전적으로 설계하는 방법을 다룹니다. 시스템 프롬프트와 파라미터에 대한 개념을 심도 있게 살펴보고, 용도별 AI를 어떻게 설계해야 하는지 해설하겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기