5๋ถ ์์ ์์ํ๊ณ , ์ค์ 1์ค๋ก ์ปดํฌ๋ํธ๋ฅผ ๊ต์ฒดํ๋ Production-ready RAG ๋ฐฑ์๋
๋ผ์ด๋ธ ๋ฐ๋ชจ ์ฒดํํ๊ธฐ ยท ์ ๊ทผ์ฝ๋: 1127
git clone https://github.com/youngouk/OneRAG.git && cd OneRAG && uv sync# ๐ณ Docker ์์ผ๋ฉด โ Full API ์๋ฒ (Weaviate + FastAPI + Swagger UI)
cp quickstart/.env.quickstart .env # GOOGLE_API_KEY๋ง ์ค์
make start # โ http://localhost:8000/docs
# ๐ป Docker ์์ผ๋ฉด โ ๋ก์ปฌ CLI ์ฑ๋ด (์ค์น๋ง์ผ๋ก ๋ฐ๋ก ์คํ)
make easy-start # โ ํฐ๋ฏธ๋์์ ๋ฐ๋ก ๋ํ
# ๐ API ํค ์์ด โ Ollama ๋ก์ปฌ LLM์ผ๋ก ์์ ์คํ๋ผ์ธ ๋์
ollama pull llama3.2 && make easy-startํ๋์ ์ฝ๋๋ฒ ์ด์ค๋ก ๋ชจ๋ RAG ์ปดํฌ๋ํธ๋ฅผ ์กฐ๋ฆฝํฉ๋๋ค.
- ์ค์ ๋ง ๋ฐ๊พธ๋ฉด ๋ โ Vector DB(6์ข
), LLM(5์ข
), Reranker(6์ข
), Cache(3์ข
) ๋ชจ๋
.env๋๋ YAML๋ก ๊ต์ฒด - API ํค ์์ด ์์ โ Ollama ๋ก์ปฌ LLM์ผ๋ก ์ธํฐ๋ท ์์ด๋ ์์ ๋์
- OpenAI SDK ํธํ โ ๊ธฐ์กด OpenAI ์ฝ๋ ๊ทธ๋๋ก OneRAG์ ์ฐ๊ฒฐ (
/v1/chat/completions) - 2,200+ ํ ์คํธ โ ํ๋ก๋์ ๊ฒ์ฆ๋ ์์ ์ฑ, CI/CD ์๋น
- PoC์์ ํ๋ก๋์ ๊น์ง โ ๋์ผํ ์ฝ๋๋ฒ ์ด์ค๋ก ํ์ฅ, ์ฌ๊ตฌ์ถ ๋ถํ์
๋ผ์ด๋ธ ๋ฐ๋ชจ์์ ๋ฐ๋ก ์ฒดํํด๋ณด์ธ์ (์ ๊ทผ์ฝ๋:
1127)
Full API ์๋ฒ (make start) |
CLI ์ฑ๋ด (make easy-start) |
|
|---|---|---|
| Docker | ํ์ | ๋ถํ์ |
| Vector DB | Weaviate (ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์) | ChromaDB (๋ก์ปฌ ํ์ผ) |
| ์ธํฐํ์ด์ค | REST API + Swagger UI | ํฐ๋ฏธ๋ CLI |
| LLM | 5์ข (Gemini, OpenAI, Claude, OpenRouter, Ollama) | Gemini / OpenRouter / Ollama |
| ์ฉ๋ | ํ๋ก๋์ , API ํตํฉ, ํ ๊ฐ๋ฐ | ํ์ต, ์ฒดํ, ๋น ๋ฅธ PoC |
git clone https://github.com/youngouk/OneRAG.git
cd OneRAG && uv sync
cp quickstart/.env.quickstart .env
# .env ํ์ผ์์ GOOGLE_API_KEY ์ค์
# (๋ฌด๋ฃ: https://aistudio.google.com/apikey)
make start๋! http://localhost:8000/docs์์ ๋ฐ๋ก ํ ์คํธํ ์ ์์ต๋๋ค.
make start-down # ์ข
๋ฃDocker ์ค์น ์์ด ํฐ๋ฏธ๋์์ ๋ฐ๋ก RAG ๊ฒ์ + AI ๋ต๋ณ์ ์ฒดํํ ์ ์์ต๋๋ค.
git clone https://github.com/youngouk/OneRAG.git
cd OneRAG && uv sync
make easy-start์ํ ๋ฐ์ดํฐ 25๊ฐ๊ฐ ์๋ ์ ์ฌ๋๊ณ , ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์(Dense + BM25)์ด ๋ฐ๋ก ์๋ํฉ๋๋ค. AI ๋ต๋ณ ์์ฑ์ ์ฌ์ฉํ๋ ค๋ฉด API ํค๋ฅผ ํ๋ ์ค์ ํ์ธ์:
# ์
์ค ํ๋๋ง ์ค์ ํ๋ฉด ๋ฉ๋๋ค
export GOOGLE_API_KEY="๋ฐ๊ธ๋ฐ์ํค" # ๋ฌด๋ฃ: https://aistudio.google.com/apikey
export OPENROUTER_API_KEY="๋ฐ๊ธ๋ฐ์ํค" # https://openrouter.ai/keys
ollama pull llama3.2 # API ํค ์์ด ๋ก์ปฌ LLM ์ฌ์ฉOneRAG๊ฐ ์ฒ์์ด๋ผ๋ฉด?
make easy-start๋ก ์์ํด์ ์ฑ๋ด์๊ฒ ์ง์ ๋ฌผ์ด๋ณด์ธ์. "ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์์ด ๋ญ์ผ?", "RAG ํ์ดํ๋ผ์ธ์ด ์ด๋ป๊ฒ ๋ผ?" โ ์ํ ๋ฐ์ดํฐ์ ๋ต์ด ์์ต๋๋ค.
๊ธฐ์กด OpenAI SDK ์ฝ๋๋ฅผ ์์ ์์ด OneRAG์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
# RAG ๊ฒ์ + AI ๋ต๋ณ ์์ฑ
response = client.chat.completions.create(
model="gemini", # ๋๋ ollama/llama3.2, openrouter/google/gemini-2.0-flash
messages=[{"role": "user", "content": "RAG๋ ๋ฌด์์ธ๊ฐ์?"}],
)
print(response.choices[0].message.content)์ง์ ์๋ํฌ์ธํธ:
POST /v1/chat/completionsโ ์ฑํ ์๋ฃ (์คํธ๋ฆฌ๋ฐ ์ง์)GET /v1/modelsโ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ ๋ชฉ๋ก
๋ชจ๋ธ ์ ํ:
| ํ์ | ์์ | ์ค๋ช |
|---|---|---|
provider |
gemini, ollama, claude |
๊ธฐ๋ณธ ๋ชจ๋ธ ์ฌ์ฉ |
provider/model |
ollama/qwen2.5:3b |
ํน์ ๋ชจ๋ธ ์ง์ |
openrouter/vendor/model |
openrouter/google/gemini-2.0-flash |
OpenRouter ๊ฒฝ์ |
LangChain, Cursor, Open WebUI ๋ฑ OpenAI SDK๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๋๊ตฌ์ ๋ฐ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
.env ๋๋ YAML ์ค์ ๋ง ๋ณ๊ฒฝํ๋ฉด ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ต์ฒดํ ์ ์์ต๋๋ค.
# Vector DB ๊ต์ฒด
VECTOR_DB_PROVIDER=weaviate # ๋๋ chroma, pinecone, qdrant, pgvector, mongodb
# LLM ๊ต์ฒด
LLM_PROVIDER=google # ๋๋ openai, anthropic, openrouter, ollama# ๋ฆฌ๋ญ์ปค ์ถ๊ฐ (app/config/features/reranking.yaml)
reranking:
approach: "cross-encoder" # ๋๋ late-interaction, llm, local
provider: "jina" # ๋๋ cohere, google, openai, openrouter, sentence-transformers
# ๊ธฐ๋ฅ On/Off
cache: { enabled: true, type: "redis" } # ๋๋ memory, semantic
graph_rag: { enabled: true } # ์ง์ ๊ทธ๋ํ ๊ด๊ณ ์ถ๋ก
pii: { enabled: true } # ๊ฐ์ธ์ ๋ณด ๋ง์คํน| ์นดํ ๊ณ ๋ฆฌ | ์ ํ์ง | ๋ณ๊ฒฝ ๋ฐฉ๋ฒ |
|---|---|---|
| Vector DB | Weaviate, Chroma, Pinecone, Qdrant, pgvector, MongoDB | ํ๊ฒฝ๋ณ์ 1์ค |
| LLM | Google Gemini, OpenAI, Anthropic Claude, OpenRouter, Ollama | ํ๊ฒฝ๋ณ์ 1์ค |
| ๋ฆฌ๋ญ์ปค | Jina, Cohere, Google, OpenAI, OpenRouter, Local | YAML 2์ค |
| ์บ์ | Memory, Redis, Semantic | YAML 1์ค |
| ์ฟผ๋ฆฌ ๋ผ์ฐํ | LLM ๊ธฐ๋ฐ, Rule ๊ธฐ๋ฐ | YAML 1์ค |
| ํ๊ตญ์ด ๊ฒ์ | ๋์์ด, ๋ถ์ฉ์ด, ์ฌ์ฉ์์ฌ์ | YAML ์ค์ |
| ๋ณด์ | PII ํ์ง, ๋ง์คํน, ๊ฐ์ฌ ๋ก๊น | YAML ์ค์ |
| GraphRAG | ์ง์ ๊ทธ๋ํ ๊ธฐ๋ฐ ๊ด๊ณ ์ถ๋ก | YAML 1์ค |
| Agent | ๋๊ตฌ ์คํ, MCP ํ๋กํ ์ฝ | YAML ์ค์ |
Query โ Router โ Expansion โ Retriever โ Cache โ Reranker โ Generator โ PII Masking โ Response
| ๋จ๊ณ | ๊ธฐ๋ฅ | ๊ต์ฒด ๊ฐ๋ฅ |
|---|---|---|
| ์ฟผ๋ฆฌ ๋ผ์ฐํ | ์ฟผ๋ฆฌ ์ ํ ๋ถ๋ฅ | LLM/Rule ์ ํ |
| ์ฟผ๋ฆฌ ํ์ฅ | ๋์์ด, ๋ถ์ฉ์ด ์ฒ๋ฆฌ | ์ฌ์ ์ปค์คํ |
| ๊ฒ์ | ๋ฒกํฐ/ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์ | 6์ข DB |
| ์บ์ฑ | ์๋ต ์บ์ | 3์ข ์บ์ |
| ์ฌ์ ๋ ฌ | ๊ฒ์ ๊ฒฐ๊ณผ ์ ๋ ฌ | 6์ข ๋ฆฌ๋ญ์ปค |
| ๋ต๋ณ ์์ฑ | LLM ์๋ต ์์ฑ | 5์ข LLM |
| ํ์ฒ๋ฆฌ | ๊ฐ์ธ์ ๋ณด ๋ง์คํน | ์ ์ฑ ์ปค์คํ |
| ๋จ๊ณ | ๊ตฌ์ฑ | ์ฉ๋ |
|---|---|---|
| Basic | ๋ฒกํฐ ๊ฒ์ + LLM | ๊ฐ๋จํ ๋ฌธ์ Q&A |
| Standard | + ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์ + Reranker | ๊ฒ์ ํ์ง์ด ์ค์ํ ์๋น์ค (๊ถ์ฅ) |
| Advanced | + GraphRAG + Agent | ๋ณต์กํ ๊ด๊ณ ์ถ๋ก , ๋๊ตฌ ์คํ |
Basic์ผ๋ก ์์ํด์, ํ์ํ ๋ ๋ธ๋ก์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
๋ณ๋์ React ๊ธฐ๋ฐ ์น UI๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. **๋ผ์ด๋ธ ๋ฐ๋ชจ**์์ ๋ฐ๋ก ์ฒดํํ๊ฑฐ๋, ๋ก์ปฌ์์ ์คํํ ์ ์์ต๋๋ค.
์ฑ๋ด ์ธํฐํ์ด์ค (๋คํฌ ๋ชจ๋) ยท ๋ฌธ์ ๊ด๋ฆฌ
์ฃผ์ ๊ธฐ๋ฅ:
- WebSocket ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์ฑํ (RAG ๊ฒ์ ๊ฒฐ๊ณผ + AI ๋ต๋ณ)
- ๋๋๊ทธ์ค๋๋กญ ๋ฌธ์ ์ ๋ก๋ (PDF, Word, Excel, Markdown ๋ฑ)
- ๋ฌธ์ ๊ด๋ฆฌ โ ๊ฒ์, ์ ๋ ฌ, ์ผ๊ด ์ญ์ , ์์ธ ์ ๋ณด ์กฐํ
- ๋คํฌ ๋ชจ๋, ๋ชจ๋ฐ์ผ ๋ฐ์ํ ๋ ์ด์์
- Feature Flag ๊ธฐ๋ฐ ๋ชจ๋ ํ์ฑํ/๋นํ์ฑํ
- ๊ด๋ฆฌ์ ๋์๋ณด๋ โ ์ธ์ , ์ฑ๋ฅ, ํ๋กฌํํธ ํตํฉ ๊ด์
# ๋ฐฑ์๋ ์คํ ์ค์ธ ์ํ์์
make frontend-dev # โ http://localhost:5173ํ๋ก ํธ์๋ + ๋ฐฑ์๋ + Weaviate ๋์ ์คํ:
make start-full
easy-start CLI ์ฑ๋ด์ 4๊ฐ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค.
make easy-start LANG=en # English
make easy-start LANG=ja # ๆฅๆฌ่ช
make easy-start LANG=zh # ไธญๆ
make easy-start # ํ๊ตญ์ด (๊ธฐ๋ณธ)๊ฐ ์ธ์ด๋ณ๋ก UI ํ ์คํธ, ์์คํ ํ๋กฌํํธ, ์ํ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ํ์งํ๋์ด ์์ต๋๋ค.
make dev-reload # ๊ฐ๋ฐ ์๋ฒ (์๋ ๋ฆฌ๋ก๋)
make test # ํ
์คํธ ์คํ (2,200+)
make lint # ๋ฆฐํธ ๊ฒ์ฌ
make type-check # ํ์
์ฒดํฌMIT License
์ด ํ๋ก์ ํธ๋ RAG Chat Service PM์ด ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ตฌํํด๋ณด๊ณ ์ถ์๋ ๊ธฐ๋ฅ๋ค์ ๋ชจ์ ๋ง๋ค์์ต๋๋ค.
RAG๋ฅผ ์ฒ์ ์ ํ๋ ๋ถ๋ค์ด ์ฝ๊ฒ PoC๋ฅผ ์งํํ๊ณ , ํ๋ก๋์
๊น์ง ํ์ฅํ ์ ์๋๋ก ์ค๊ณํ์ต๋๋ค.


