์ด ํํ ๋ฆฌ์ผ์ ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ๋ก ์์ฑ๋์์ผ๋ฉฐ Open WebUI ํ์์ ์ง์ํ์ง ์์ต๋๋ค. ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ง๊ฒ Open WebUI๋ฅผ ์ฌ์ฉ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ฐ๋ชจ๋ก๋ง ์ ๊ณต๋ฉ๋๋ค. ๊ธฐ์ฌ๋ฅผ ์ํ์ญ๋๊น? ๊ธฐ์ฌ ํํ ๋ฆฌ์ผ์ ํ์ธํด๋ณด์ธ์.
[!WARNING] ์ด ๋ฌธ์๋ ํ์ฌ ๋ฒ์ (0.5.16)์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์์ผ๋ฉฐ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๊ณ ์ ์ต๋๋ค.
Jupyter Notebook ํตํฉ
v0.5.11๋ถํฐ Open-WebUI๋ ์ฝ๋ ํด์๊ธฐ์์ Jupyter Notebook ์ง์
์ด๋ผ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ์ํ์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ Open-WebUI์ Jupyter๋ฅผ ํตํฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํ์ ๋ฆด๋ฆฌ์ค์์ ์ด ๊ธฐ๋ฅ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ์ฌํญ์ด ์์์ผ๋ฏ๋ก ๋ฆด๋ฆฌ์ค ๋
ธํธ ๋ด์ฉ์ ์ฃผ์ ๊น๊ฒ ๊ฒํ ํ์ญ์์ค.
์ด ํํ ๋ฆฌ์ผ์ ๋ ์๋น์ค ๊ฐ์ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๊ธฐ์ด์ ๋ํด ์๋ดํฉ๋๋ค.
Jupyter Notebook์ด๋ ๋ฌด์์ธ๊ฐโ
Jupyter Notebook์ ์คํ ๊ฐ๋ฅํ ์ฝ๋, ๊ณต์, ์๊ฐํ ๋ฐ ์์ ํ ์คํธ๊ฐ ํฌํจ๋ ๋ฌธ์๋ฅผ ์์ฑํ๊ณ ๊ณต์ ํ ์ ์๋๋ก ํ๋ ์คํ ์์ค ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ์ด๋ ํนํ ๋ฐ์ดํฐ ๊ณผํ, ๊ณผํ ๊ณ์ฐ ๋ฐ ๊ต์ก์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, Python, R, Julia์ ๊ฐ์ ์ธ์ด๋ก ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์ค๋ช ํ ์คํธ, ์ด๋ฏธ์ง ๋ฐ ์ธํฐ๋ํฐ๋ธ ์๊ฐํ์ ํ๋์ ๋ฌธ์๋ก ๊ฒฐํฉํ ์ ์๊ฒ ํด ์ค๋๋ค. Jupyter Notebook์ ์ฌ์ฉ์๊ฐ ๋ถ์ ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํฌ๊ด์ ์ด๊ณ ๊ณต์ ๊ฐ๋ฅํ ๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ ๋์์ ์ฝ๋ ๋๋ฒ๊น ๋ฐ ์คํ์ ์ฝ๊ฒ ์ํํ ์ ์๋๋ก ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ํ๊ตฌ์ ํนํ ์ ์ฉํฉ๋๋ค.
Jupyter ์น์ฌ์ดํธ์์ ๋ ๋ง์ ์ ๋ณด๋ฅผ ํ์ธํ์ธ์: Project Juptyer
๋จ๊ณ 0: ์ค์ ์์ฝโ
์ด ํํ ๋ฆฌ์ผ์ ํตํด ์ค์ ํ๋ ค๋ ๋ชฉํ ๊ตฌ์ฑ์ ์๋์ ํ์ํฉ๋๋ค.
๋จ๊ณ 1: OUI์ Jupyter ์คํ
docker-compose
๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์๋น์ค์ ๋ด LLM์ ํฌํจํ๋ ์คํ์ ์คํํ์ต๋๋ค. ๋ณ๋์ ๋์ปค ์ปจํ
์ด๋๋ฅผ ๊ฐ๊ฐ ์คํํด๋ ์๋ํด์ผ ํฉ๋๋ค.
version: "3.8"
services:
open-webui:
image: ghcr.io/open-webui/open-webui:latest
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open-webui:/app/backend/data
jupyter:
image: jupyter/minimal-notebook:latest
container_name: jupyter-notebook
ports:
- "8888:8888"
volumes:
- jupyter_data:/home/jovyan/work
environment:
- JUPYTER_ENABLE_LAB=yes
- JUPYTER_TOKEN=123456
volumes:
open-webui:
jupyter_data:
์์ ์คํ์ docker-compose
ํ์ผ์ด ์ ์ฅ๋ ๋๋ ํ ๋ฆฌ์์ ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ์์ํ ์ ์์ต๋๋ค:
docker-compose up -d
์ด์ ๋ค์ URL์์ ๋ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์์ด์ผ ํฉ๋๋ค:
์๋น์ค | URL |
---|---|
Open-WebUI | http://localhost:3000 |
Jupyter | http://localhost:8888 |
Jupyter ์๋น์ค๋ฅผ ์ด์ฉํ ๋ ์์์ ์ ์ํ JUPYTER_TOKEN
์ด ํ์ํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ 123456
์ด๋ผ๋ ๋๋ฏธ ํ ํฐ ๊ฐ์ ์ ํํ์ต๋๋ค.
๋จ๊ณ 2: Jupyter๋ฅผ ์ํ ์ฝ๋ ์คํ ๊ตฌ์ฑ
์ด์ Open-WebUI์ Jupyter๋ฅผ ์คํํ์ผ๋, Open-WebUI์ ์ฝ๋ ์คํ์ Admin Panel -> Settings -> Code Execution์์ Jupyter๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. Open-WebUI๋ ์ง์์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ๊ฐ์ ํ๊ณ ์์ผ๋ฏ๋ก, ์ต์ ์ค์ ์ ํ์ธํ๊ธฐ ์ํด configs.py
ํ์ผ์ ํญ์ ๊ฒํ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. v0.5.16 ๊ธฐ์ค์ผ๋ก ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
Open-WebUI ํ๊ฒฝ ๋ณ์ | ๊ฐ |
---|---|
ENABLE_CODE_INTERPRETER | True |
CODE_EXECUTION_ENGINE | jupyter |
CODE_EXECUTION_JUPYTER_URL | http://host.docker.internal:8888 |
CODE_EXECUTION_JUPYTER_AUTH | token |
CODE_EXECUTION_JUPYTER_AUTH_TOKEN | 123456 |
CODE_EXECUTION_JUPYTER_TIMEOUT | 60 |
CODE_INTERPRETER_ENGINE | jupyter |
CODE_INTERPRETER_JUPYTER_URL | http://host.docker.internal:8888 |
CODE_INTERPRETER_JUPYTER_AUTH | token |
CODE_INTERPRETER_JUPYTER_AUTH_TOKEN | 123456 |
CODE_INTERPRETER_JUPYTER_TIMEOUT | 60 |
๋จ๊ณ 3: ์ฐ๊ฒฐ ํ ์คํธโ
์ฐ์ Jupyter ๋๋ ํ ๋ฆฌ์ ๋ฌด์์ด ์๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ ์ด๋ฏธ์ง์์ ๋ณผ ์ ์๋ฏ์ด ํ์ฌ๋ ๋น work
ํด๋๋ง ์์ต๋๋ค.
CSV ํ์ผ ์์ฑโ
์ฒซ ๋ฒ์งธ ํ๋กฌํํธ๋ฅผ ์คํํด ๋ด
์๋ค. Code Execution
๋ฒํผ์ ์ ํํ๋์ง ํ์ธํ์ธ์.
ํ๋กฌํํธ: ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ CSV ํ์ผ์ ์์ฑํ์ธ์. ์ฒซ ๋ฒ์งธ CSV๋ ๊ธฐ๋ณธ ํ์ด์ฌ์ ์ฌ์ฉํ์ฌ ์์ฑํ๊ณ , ๋ ๋ฒ์งธ CSV๋ pandas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ์ธ์. CSV ํ์ผ ์ด๋ฆ์ ๊ฐ๊ฐ data1.csv์ data2.csv๋ก ํ์ธ์.
CSV ํ์ผ์ด ์์ฑ๋์์ผ๋ฉฐ ํ์ฌ Jupyter์์ ์ก์ธ์คํ ์ ์์์ ํ์ธํ ์ ์์ต๋๋ค.
์๊ฐํ ์์ฑโ
๋ ๋ฒ์งธ ํ๋กฌํํธ๋ฅผ ์คํํด ๋ด
์๋ค. ๋ค์ ํ ๋ฒ, Code Execution
๋ฒํผ์ ์ ํํ๋์ง ํ์ธํ์ธ์.
ํ๋กฌํํธ: matplotlib๊ณผ seaborn์ ์ฌ์ฉํ์ฌ ํ์ด์ฌ์์ ์ฌ๋ฌ ๊ฐ์ง ์๊ฐํ๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ jupyter์ ์ ์ฅํ์ธ์.
์๊ฐํ๊ฐ ์์ฑ๋์์ผ๋ฉฐ ํ์ฌ Jupyter์์ ์ก์ธ์คํ ์ ์์์ ํ์ธํ ์ ์์ต๋๋ค.
๋ ธํธ๋ถ ์์ฑโ
๋ง์ง๋ง ํ๋กฌํํธ๋ฅผ ํจ๊ป ์คํํด ๋ด ์๋ค. ์ด๋ฒ ํ๋กฌํํธ์์๋ ํ๋กฌํํธ๋ง ์ฌ์ฉํ์ฌ ์์ ํ ์ ๋ ธํธ๋ถ์ ์์ฑํฉ๋๋ค.
ํ๋กฌํํธ: json ํ์ผ์ ์ฝ๊ณ ์ฐ๋ ํ์ด์ฌ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ notebook.ipynb๋ผ๋ ์ด๋ฆ์ ๋ด ๋
ธํธ๋ถ์ ์ ์ฅํ์ธ์.
์๊ฐํ๊ฐ ์์ฑ๋์์ผ๋ฉฐ ํ์ฌ Jupyter์์ ์ก์ธ์คํ ์ ์์์ ํ์ธํ ์ ์์ต๋๋ค.
์ํฌํ๋ก์ฐ์ ๋ํ ์ฐธ๊ณ ์ฌํญโ
์ด ๊ธฐ๋ฅ์ ํ ์คํธํ๋ฉด์ Open-WebUI์์ ์์ฑ๋ ์ฝ๋๋ ์ถ๋ ฅ์ ๋ด Jupyter ์ธ์คํด์ค์ ์๋์ผ๋ก ์ ์ฅํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์ฌ๋ฌ ๋ฒ ์์์ ์๊ฒ ๋์์ต๋๋ค. ์ ๊ฐ ์์ฑํ ํ์ผ/ํญ๋ชฉ์ ์ถ๋ ฅํ๋๋ก ๊ฐ์ ํ๋ ค๋ฉด, ๋จผ์ ์ํ๋ ์ฝ๋ ์ํฐํฉํธ๋ฅผ ์์ฑํ ๋ค์ ์ด๋ฅผ Jupyter ์ธ์คํด์ค์ ์ ์ฅํ๋๋ก ์์ฒญํ๋ ๋ ๋จ๊ณ์ ์ํฌํ๋ก๋ฅผ ์์ฃผ ๋ฐ๋์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๊ณ ๊ณ์ ๊ฐ์?โ
Code Execution ๊ธฐ๋ฅ๊ณผ/๋๋ Jupyter๋ฅผ ์ฌ์ฉ ์ค์ด์ ๊ฐ์? ๊ทธ๋ ๋ค๋ฉด ๊ผญ ์ฐ๋ฝ ์ฃผ์ธ์. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ฉ์ง ๋ฐฉ๋ฒ์ ์๋ฅผ ์ด ํํ ๋ฆฌ์ผ์ ๊ณ์ ์ถ๊ฐํ ์ ์๋๋ก ์ฌ๋ฌ๋ถ์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ฃ๊ณ ์ถ์ต๋๋ค!