OpenFang ๊ตฌ์ถ ํํ ๋ฆฌ์ผ
๋์ด๋: ์ ๋ฌธ | ์์ ์๊ฐ: 15๋ถ | ๋ชฉํ: OpenFang ๋ฐฐํฌ ๋ฐ ๋ชจ๋ธ ์ค์ ๋ง์คํฐ
์๋ก
๊ฐ๋ณ๊ณ ๊ฐ๋ ฅํ AI Agent ํ๋ ์์ํฌ๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด OpenFang์ ์ฃผ๋ชฉํด ๋ณด์ธ์. ์ด๋ Rust๋ก ์์ฑ๋ ์คํ ์์ค Agent Operating System์ผ๋ก, ์์คํ ์ ์ฒด๋ฅผ ์ปดํ์ผํด๋ ํฌ๊ธฐ๊ฐ ์ฝ 32MB์ ๋ถ๊ณผํ์ง๋ง Anthropic Claude, Google Gemini, OpenAI GPT, DeepSeek, Groq ๋ฑ 20๊ฐ ์ด์์ ์ฃผ์ LLM ์ ๊ณต์ ์ฒด๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค.
๊ธฐ์กด ํ๋ ์์ํฌ์ ๋ฌ๋ฆฌ OpenFang์ ๋จ์ํ Chatbot ๋ํผ๊ฐ ์๋๋ผ, ์ฌ์ฉ์๋ฅผ ์ํด ์ค์ ๋ก ์ผํ๋ ์์จํ Agent ์์คํ ์ ๋๋ค. ๋ฏธ๋ฆฌ ์ ํด์ง ๊ณํ์ ๋ฐ๋ผ ์คํ๋๋ฉฐ ์ง์ ๊ทธ๋ํ ๊ตฌ์ถ, ๋ชฉํ ๋ชจ๋ํฐ๋ง, ์ ์ฌ ๊ณ ๊ฐ ์์ฑ, ์์ ๋ฏธ๋์ด ๊ด๋ฆฌ ๋ฑ์ ๋์์ฃผ๊ณ ๊ฒฐ๊ณผ๋ฅผ Dashboard์ ์๋์ผ๋ก ๋ณด๊ณ ํฉ๋๋ค.
์ค๋ ํจ๊ป ๊ตฌ์ถํด ๋ด ์๋ค.
๋์ ๋ ์
- 1~5๋ ์ฐจ ๊ฒฝ๋ ฅ์ ๊ฐ๋ฐ์
- AI Agent์ ๊ด์ฌ์ด ์๋ ๊ธฐ์ ์ธ๋ ฅ
- ๋ก์ปฌ AI ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ๊ณ ์ถ์ ๊ธฐ์ ์ ํธ๊ฐ
ํต์ฌ ์์กด์ฑ ๋ฐ ํ๊ฒฝ
์์ํ๊ธฐ ์ ์ ์์คํ ์ด ๋ค์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋์ง ํ์ธํ์ธ์.
- ์ด์์ฒด์ : Linux, macOS, Windows (WSL2 ๋๋ PowerShell)
- Rust: 1.75+ (rustup ์ฌ์ฉ ๊ถ์ฅ)
- ๋ฉ๋ชจ๋ฆฌ: ์ต์ 4GB RAM
- ๋์คํฌ: ์ต์ 500MB ์ฌ์ ๊ณต๊ฐ
Rust ์ค์น (๋ฏธ์ค์น ์)
# Linux/macOS
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Windows (PowerShell ์ฌ์ฉ)
irm https://sh.rustup.rs | iex
์ค์น ์๋ฃ ํ rustc --version์ ์คํํ์ฌ ๋ฒ์ ์ ํ์ธํฉ๋๋ค.
ํ๋ก์ ํธ ๊ตฌ์กฐ
openfang/
โโโ agents/ # Agent ํ
ํ๋ฆฟ ๋๋ ํ ๋ฆฌ
โ โโโ hello-world/
โ โโโ coder/
โ โโโ researcher/
โ โโโ ...
โโโ crates/ # Rust crates (14๊ฐ)
โ โโโ openfang-cli/ # CLI ์ปค๋งจ๋๋ผ์ธ
โ โโโ openfang-runtime/ # ๋ฐํ์ ์ฝ์ด
โ โโโ openfang-api/ # REST API
โ โโโ ...
โโโ docs/ # ๊ณต์ ๋ฌธ์
โโโ sdk/ # ๋ค๊ตญ์ด SDK
โ โโโ python/
โ โโโ javascript/
โโโ config.toml.example # ์ค์ ์์
๋น ๋ฅธ ์ค์น
๋ฐฉ๋ฒ 1: ๊ณต์ ์ํด๋ฆญ ์ค์น (๊ถ์ฅ)
Linux/macOS:
curl -fsSL https://openfang.sh/install | sh
Windows PowerShell:
irm https://openfang.sh/install.ps1 | iex
์ค์น๊ฐ ์๋ฃ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค:
โ
OpenFang installed successfully!
Run 'openfang init' to get started.
๋ฐฉ๋ฒ 2: ์๋ ์ปดํ์ผ
์์ค ์ฝ๋์์ ์ง์ ๋น๋ํ๊ฑฐ๋ ์ํด๋ฆญ ์ค์น๋ฅผ ์ง์ํ์ง ์๋ ํ๊ฒฝ์ ๊ฒฝ์ฐ:
# ์ ์ฅ์ ๋ณต์
git clone https://github.com/RightNow-AI/openfang.git
cd openfang
# release ๋ฒ์ ์ปดํ์ผ
cargo build --release
# ๋๋ CLI๋ง ์ปดํ์ผ
cargo build --release -p openfang-cli
์ปดํ์ผ์ด ์๋ฃ๋๋ฉด ๋ฐ์ด๋๋ฆฌ ํ์ผ์ target/release/openfang(๋๋ target/release/openfang.exe)์ ์์นํฉ๋๋ค.
์ด๊ธฐ ์ค์
์ค์ ํ์ผ ์์ฑ
์ด๊ธฐํ ๋ช ๋ น์ ์คํํฉ๋๋ค:
openfang init
์ฌ์ฉ์ ํ ๋๋ ํ ๋ฆฌ์ ์ค์ ํด๋๊ฐ ์์ฑ๋ฉ๋๋ค:
~/.openfang/
โโโ config.toml # ๋ฉ์ธ ์ค์ ํ์ผ
์ค์ ํ์ผ ๊ตฌ์กฐ
~/.openfang/config.toml์ ์ด๋ฉด ๊ธฐ์ด ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
# API ์๋น์ค ์ค์
host = "127.0.0.1"
port = 4200
# API ํค (์ ํ ์ฌํญ, ์ด์ ํ๊ฒฝ์์๋ ์ค์ ์ ๊ถ์ฅ)
api_key = ""
# ๊ธฐ๋ณธ ๋ชจ๋ธ ์ค์
[default_model]
provider = "groq"
model = "llama-3.3-70b-versatile"
# Agent ๊ธฐ๋ณธ ์ค์
[agents.defaults]
[!TIP]
์ค์ ํ์ผ์ ๋ชจ๋ ํ๋๋ ์ ํ ์ฌํญ์ด๋ฉฐ, ๋๋ฝ๋ ํ๋๋ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
API Key ์ค์
OpenFang์ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํ API Key ์ค์ ์ ์ง์ํฉ๋๋ค. ๋จผ์ ์ฒดํํด ๋ณด๋ ค๋ฉด Groq(๋ฌด๋ฃ ํ๋)์ด๋ Defapi(๋ฐ๊ฐ)๋ฅผ ์ถ์ฒํฉ๋๋ค:
# ๋ฐฉ๋ฒ 1: Groq (๋ฌด๋ฃ, ์๋ ์ ํ ์์)
export GROQ_API_KEY="gsk_๋น์ ์Groqํค"
# ๋ฐฉ๋ฒ 2: Defapi (๋ฐ๊ฐ, ๊ถ์ฅ)
export DEFAPI_API_KEY="๋น์ ์Defapiํค"
[!WARNING]
API Key๋ฅผ ์ค์ ํ์ผ์ ์ง์ ์์ฑํ์ง ๋ง๊ณ , ํ๊ฒฝ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋๋ก ํ์ธ์.
์๋น์ค ์์
OpenFang ์คํ
openfang start
๋ค์๊ณผ ์ ์ฌํ ์ถ๋ ฅ์ด ํ์๋ฉ๋๋ค:
๐ Starting OpenFang daemon...
๐ก Server listening on http://127.0.0.1:4200
๐ Dashboard: http://127.0.0.1:4200
โ
OpenFang is ready!
์๋น์ค ํ์ธ
# ์ํ ํ์ธ
curl http://127.0.0.1:4200/api/health
# ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ ํ์ธ
curl http://127.0.0.1:4200/api/models
# ์ ๊ณต์
์ฒด ์ํ ํ์ธ
curl http://127.0.0.1:4200/api/providers
Dashboard ์ ์
๋ธ๋ผ์ฐ์ ์์ http://127.0.0.1:4200์ ์ ์ํ๋ฉด OpenFang์ Web Dashboard๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ Agent
๋ด์ฅ ํ ํ๋ฆฟ ์ฌ์ฉ
OpenFang์ agents/ ๋๋ ํ ๋ฆฌ์ ์ฌ๋ฌ ๋ด์ฅ Agent ํ
ํ๋ฆฟ์ ์ ๊ณตํฉ๋๋ค:
# ์ฌ์ฉ ๊ฐ๋ฅํ ํ
ํ๋ฆฟ ๋ชฉ๋ก ํ์ธ
openfang template list
์ฃผ์ ํ ํ๋ฆฟ:
- hello-world: ๊ฐ์ฅ ๋จ์ํ ๋ํํ Agent
- coder: ์ฝ๋ ์์ฑ ๋์ฐ๋ฏธ
- researcher: ์ฐ๊ตฌ ๋ณด์กฐ
- assistant: ๋ฒ์ฉ ๋น์
Agent ์์ฑ
# hello-world ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์์ฑ
openfang agent create hello-world my-first-agent
๋ฉ์์ง ํ ์คํธ
# CLI๋ฅผ ํตํด ๋ฉ์์ง ์ ์ก
openfang agent message my-first-agent "Hello, say hi in 3 words"
๋๋ REST API๋ฅผ ํตํด:
curl -X POST http://127.0.0.1:4200/api/agents/{agent-id}/message \
-H "Content-Type: application/json" \
-d '{"message": "Hello, say hi in 3 words"}'
์ ์์ ์ธ ์๋ต์ด ๋์์จ๋ค๋ฉด Agent๊ฐ ์ ์๋ํ๊ณ ์๋ ๊ฒ์ ๋๋ค!
๋ชจ๋ธ ์ค์ ์ค์
Groq ์ค์ (๋ฌด๋ฃ ํ๋)
Groq์ ๋ฌด๋ฃ ํฐ์ด๋ฅผ ์ ๊ณตํ๋ฉฐ ์๋๊ฐ ๋งค์ฐ ๋นจ๋ผ ๊ฐ๋ฐ ๋ฐ ํ ์คํธ์ ์ ํฉํฉ๋๋ค:
# ~/.openfang/config.toml
[default_model]
provider = "groq"
model = "llama-3.3-70b-versatile"
ํ๊ฒฝ ๋ณ์:
export GROQ_API_KEY="gsk_๋น์ ์ํค"
[!TIP]
Groq ๋ฌด๋ฃ ํฐ์ด๋ ์๋ ์ ํ(Rate Limit)์ด ์์ผ๋ ๊ฐ๋ฐ ํ ์คํธ์ฉ์ผ๋ก ์ ํฉํฉ๋๋ค. ์ด์ ํ๊ฒฝ์์๋ ๋ค๋ฅธ ์ ๊ณต์ ์ฒด ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค.
Defapi ์ค์ (๋ฐ๊ฐ ์ถ์ฒ)
๊ณ ์ฑ๋ฅ ๋ชจ๋ธ์ ์ ๋ ดํ ๊ฐ๊ฒฉ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด Defapi๊ฐ ํ๋ฅญํ ์ ํ์ ๋๋ค. ๊ฐ๊ฒฉ์ด ๊ณต์๊ฐ์ 50% ์์ค์ ๋๋ค:
- Gemini 2.5 Pro: ๊ณต์ $1.25/M โ Defapi ๋จ $0.625/M
- Claude Sonnet 4: ๊ณต์ $3.00/M โ Defapi ๋จ $1.50/M
# ~/.openfang/config.toml
# ์ปค์คํ
์ ๊ณต์
์ฒด ์ถ๊ฐ
[[providers]]
name = "defapi"
base_url = "https://api.defapi.org/v1"
api_key_env = "DEFAPI_API_KEY"
# ๊ธฐ๋ณธ ๋ชจ๋ธ ์ค์
[default_model]
provider = "defapi"
model = "claude-sonnet-4-20250514"
ํ๊ฒฝ ๋ณ์:
export DEFAPI_API_KEY="๋น์ ์Defapiํค"
[!TIP]
Defapi๋ v1/chat/completions, v1/messages, v1beta/models/* ๋ฑ ๋ค์ํ ํ๋กํ ์ฝ์ ์ง์ํ๋ฉฐ OpenFang๊ณผ ์๋ฒฝํ ํธํ๋ฉ๋๋ค.
Anthropic Claude ์ค์
[default_model]
provider = "anthropic"
model = "claude-sonnet-4-20250514"
export ANTHROPIC_API_KEY="sk-ant-๋น์ ์ํค"
Google Gemini ์ค์
[default_model]
provider = "gemini"
model = "gemini-2.5-flash"
# GEMINI_API_KEY ๋๋ GOOGLE_API_KEY ๋ชจ๋ ๊ฐ๋ฅ
export GEMINI_API_KEY="AIza๋น์ ์ํค"
OpenAI ์ค์
[default_model]
provider = "openai"
model = "gpt-4o-mini"
export OPENAI_API_KEY="sk-๋น์ ์ํค"
์์ฃผ ๋ฌป๋ ์ง๋ฌธ(FAQ) ๋ฐ ๋ฌธ์ ํด๊ฒฐ
Q1: API Key๊ฐ ์ ์ฉ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค
ํ์ธ ๋จ๊ณ:
- ํ๊ฒฝ ๋ณ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ด๋ณด๋ด์ก๋์ง ํ์ธ:
echo $GROQ_API_KEY - OpenFang ์๋น์ค ์ฌ์์:
openfang restart - ์ ๊ณต์
์ฒด ์ํ ํ์ธ:
curl http://127.0.0.1:4200/api/providers
Q2: ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ์๋ฉ๋๋ค
๊ฐ๋ฅํ ์์ธ:
- API Key ๋ฏธ์ค์ ๋๋ ํ์ ์ค๋ฅ
- ํด๋น ๋ชจ๋ธ์ด ์ ๊ณต์ ์ฒด ์ง์ ๋ชฉ๋ก์ ์์
- ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฌธ์
ํด๊ฒฐ ๋ฐฉ๋ฒ:
# ์์ธ ๋ชจ๋ธ ๋ชฉ๋ก ํ์ธ
curl http://127.0.0.1:4200/api/models | jq
# ํน์ ์ ๊ณต์
์ฒด ์ฐ๊ฒฐ ํ
์คํธ
curl -X POST http://127.0.0.1:4200/api/providers/groq/test
Q3: 4200 ํฌํธ๊ฐ ์ด๋ฏธ ์ฌ์ฉ ์ค์ ๋๋ค
# ์ ์ ์ค์ธ ํ๋ก์ธ์ค ํ์ธ
lsof -i :4200 # Linux/macOS
netstat -ano | findstr :4200 # Windows
# ์ค์ ํ์ผ์ ์์ ํ์ฌ ๋ค๋ฅธ ํฌํธ ์ฌ์ฉ
# ~/.openfang/config.toml
port = 4201
Q4: ์ปดํ์ผ ์ค๋ฅ ๋ฐ์
Rust ๋ฒ์ ์ด ์ต์ ์ธ์ง ํ์ธํ์ธ์:
rustup update
rustc --version # 1.75 ์ด์์ด์ด์ผ ํจ
์์กด์ฑ ๋ฌธ์ ์ธ ๊ฒฝ์ฐ ๋ค์์ ์๋ํ์ธ์:
cargo clean
cargo build --release
Q5: Windows์์ ๋ช ๋ น์ด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค
OpenFang ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด PATH์ ํฌํจ๋์ด ์๋์ง ํ์ธํ์ธ์:
# ๋ฐ์ด๋๋ฆฌ ๋๋ ํ ๋ฆฌ๋ฅผ PATH์ ์ถ๊ฐ (์๊ตฌ์ )
$env:PATH += ";$env:USERPROFILE\.openfang\bin"
# ๋๋ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ง์ ์ฌ์ฉ
~\.openfang\bin\openfang.exe start
Q6: ๋ก๊ทธ ํ์ธ ๋ฐฉ๋ฒ
# ์ค์๊ฐ ๋ก๊ทธ ํ์ธ
openfang logs
# ๋๋ ๋ก๊ทธ ํ์ผ ์ง์ ํ์ธ
cat ~/.openfang/logs/openfang.log
์ฌํ ๋ฐฉํฅ
Hands: 7๊ฐ์ง ๋ด์ฅ ๋ฅ๋ ฅ ํฉ
OpenFang์ ๊ฐ์ฅ ํฐ ํน์ง์ 7๊ฐ์ง ๊ฐ๋ ฅํ Hands๊ฐ ๋ด์ฅ๋์ด ์๋ค๋ ์ ์ ๋๋ค:
| Hand | ๊ธฐ๋ฅ |
|---|---|
| Clip | YouTube ๋์์ ๋ค์ด๋ก๋, ํธ์ง, ๋๋น, ์์ ๋ฏธ๋์ด ์๋ ๊ฒ์ |
| Lead | ์ผ์ผ ๋ฆฌ๋ ์์ฑ, ๊ณ ๊ฐ ๋ฐ๊ตด, ์ ์ ์ฐ์ , ์ค๋ณต ์ ๊ฑฐ |
| Collector | OSINT ์ ๋ณด ์์ง, ๋ณ๊ฒฝ ๊ฐ์ง, ์ง์ ๊ทธ๋ํ ๊ตฌ์ถ |
| Predictor | ์์ธก ์์ง, ์ ๋ขฐ ๊ตฌ๊ฐ, ์ ํ๋ ์ถ์ |
| Researcher | ์ฌ์ธต ์ฐ๊ตฌ, ๋ค์ค ์์ค ๊ต์ฐจ ๊ฒ์ฆ, APA ํ์ ๋ณด๊ณ ์ |
| ์๋ ํธ์, ๋๋๊ธ ์ํธ์์ฉ, ๊ฒ์ ์ผ์ ๊ด๋ฆฌ | |
| Browser | ์น ์๋ํ, ์์ ์์ฑ, ๋ค๋จ๊ณ ์ํฌํ๋ก์ฐ |
# Researcher Hand ํ์ฑํ
openfang hand activate researcher
# ์ํ ํ์ธ
openfang hand status researcher
# ์ผ์ ์ค์ง
openfang hand pause researcher
์ปค์คํ Agent ๊ฐ๋ฐ
์ปค์คํ Agent๋ฅผ ์์ฑํฉ๋๋ค:
# my-agent.toml
name = "my-agent"
version = "0.1.0"
description = "My custom agent"
author = "you"
[model]
provider = "groq"
model = "llama-3.3-70b-versatile"
[capabilities]
tools = ["file_read", "web_fetch", "bash"]
memory_read = ["*"]
memory_write = ["self.*"]
# ์ปค์คํ
Agent ๋ฐฐํฌ
openfang agent deploy my-agent.toml
MCP ํตํฉ
OpenFang์ MCP (Model Context Protocol)๋ฅผ ์ง์ํ์ฌ ๋ค์ํ ์ธ๋ถ ์๋น์ค์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค:
[[mcp_servers]]
name = "filesystem"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
์์ฝ
์ค๋ ์ฐ๋ฆฌ๋ OpenFang์ ์ ์ฒด ๊ตฌ์ถ ๊ณผ์ ์ ํจ๊ป ์๋ฃํ์ต๋๋ค:
- โ OpenFang ์ค์น (๊ณต์ ์คํฌ๋ฆฝํธ ๋๋ ์๋ ์ปดํ์ผ)
- โ ์ด๊ธฐ ์ค์ (config.toml + ํ๊ฒฝ ๋ณ์)
- โ ์๋น์ค ์์ ๋ฐ ๊ฒ์ฆ
- โ ์ฒซ ๋ฒ์งธ Agent ์์ฑ ๋ฐ ํ ์คํธ
- โ ๋ค์ํ LLM ์ ๊ณต์ ์ฒด ์ค์ (Groq, Defapi, Claude, Gemini)
- โ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ
์ด์ ์์ ํ AI Agent ์คํ ํ๋ซํผ์ ๊ฐ๊ฒ ๋์์ต๋๋ค! ๋ค์ ๋จ๊ณ๋ก ์ด๊ฒ๋ค์ ์๋ํด ๋ณด์ธ์:
- Hands ์ค ํ๋๋ฅผ ํ์ฑํํ์ฌ ์๋ํ ์ ๋ฌด ๋ฅ๋ ฅ์ ์ฒดํํด ๋ณด์ธ์.
- ์ปค์คํ Agent๋ฅผ ์์ฑํ์ฌ ์์ ๋ง์ ๋๊ตฌ์ ๋ฅ๋ ฅ์ ์ ์ํด ๋ณด์ธ์.
- MCP ํตํฉ์ ํ๊ตฌํ์ฌ ๋ ๋ง์ ์ธ๋ถ ์๋น์ค๋ฅผ ์ฐ๊ฒฐํด ๋ณด์ธ์.
์ฆ๊ฑฐ์ด ๊ฐ๋ฐ ๋์๊ธธ ๋ฐ๋๋๋ค!
[!TIP]
์ด์ ํ๊ฒฝ์์๋ Defapi(๋ฐ๊ฐ)๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ๋ฌ Provider๋ฅผ ์ค์ ํ์ฌ ์ฅ์ ์กฐ์น(Failover)๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ์๋น์ค ์์ ์ฑ์ ํ๋ณดํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.