Portfolio
BlessFlow / BibleCard AI β κΈ°μ ν¬νΈν΄λ¦¬μ€
μ±κ²½ 묡μμ AI μ΄λ―Έμ§μ κ²°ν©ν΄ λ§μμΉ΄λλ₯Ό λ§λλ μΉ μλΉμ€. κΈ°νλΆν° μ΄μκΉμ§ 1μΈ κ°λ°.
- biblecardai.blessflow.com
- 2025.04 ~ νμ¬
- μ 체 νλ‘μ° λ°λͺ¨
1
2
3
Cloudflare CDN β Edge Proxy β Next.js Γ 3 + FastAPI (ν΅ν© λ°±μλ)
Celery Worker, PostgreSQL + pgvector
GPT-4o-mini, DALL-E 3, SeaweedFS
Hetzner λ¨μΌ μλ²μ k3s 10κ° Pod.
RAG μμ€ν
μ±κ²½ 31,102μ μ OpenAI text-embedding-3-smallλ‘ λ²‘ν°ννκ³ pgvector(IVFFlat)λ‘ μ½μ¬μΈ μ μ¬λ κ²μμ ꡬμΆνμ΅λλ€. 묡μμ μμ±νλ μ€μ κ΄λ ¨ ꡬμ μ΄ μ€μκ°μΌλ‘ μΆμ²λ©λλ€.
μΈκΈ° 2,296κ° κ΅¬μ μ GPT-4o-miniλ‘ 6μΆ λ©νλ°μ΄ν°(μ°λ Ήλ/μν©/μ κΈ°/μ μμν/μμ μ£Όμ /κ°μ )λ₯Ό νκΉ νλλ°, μΆμ² κ²°κ³Όκ° λ€μλ μν΄μ μ§μ νλ μ΄μ ν 130κ° κ΅¬μ λ‘ μ ννμ΅λλ€. μλνκ° νμ λ΅μ μλμμ΅λλ€.
κ΅¬μΆ λΉμ© 1.57λ¬λ¬ (μΌνμ±). κ²μ λΉμ© νλΉ 0.00001λ¬λ¬
LLM νμ΄νλΌμΈ
μ¬μ©μ 묡μ β GPT-4o-miniκ° ν둬ννΈλ‘ λ³ν β DALL-E 3κ° μ΄λ―Έμ§ μμ±.
μ€νμΌμ 7κ°μ§(μμ±ν, μ¬μ§, μ ν, μΌλ¬μ€νΈ, λΌμΈμνΈ, μ€ν μΈλκΈλΌμ€, λ°λ‘ν¬) μ€ μ ν. 200μ₯μ μ§μ μμ±νκ³ κ²μνλ©΄μ ν둬ννΈ μμΉμ μ 리νμ΅λλ€. μ¬λ μΌκ΅΄ ν΄λ‘μ¦μ μ AI κΈ°νμ΄ λμ€λ νΌνκ³ , μΆμμ ννμ μκ°μ μμ λ‘ λ°κΎΈλ μμ λλ€.
AI μμ±μ΄ μ€ν¨νλ©΄ μ΄λ―Έμ§ νμμ μ μ¬ μ΄λ―Έμ§λ₯Ό λ§€μΉνκ³ , κ·Έκ²λ μ λλ©΄ νλ‘ νΈ ν΄λ°± μ΄λ―Έμ§λ₯Ό μλλ€. 3λ¨κ³.
λΉλκΈ° μ²λ¦¬λ Celery + Redis. λκΈ°μ΄ μμΉλ₯Ό μ€μκ°μΌλ‘ 보μ¬μ€λλ€.
μ΄λ―Έμ§ μΆμ²
208μ₯ μ΄λ―Έμ§ νμ 3μΆ(μλ/μμ¬/λΆμκΈ°)μΌλ‘ νκΉ νκ³ , 묡μ ν μ€νΈμμ ν€μλλ₯Ό μΆμΆν΄μ μ€μ½μ΄λ§ν©λλ€.
ꡬ체μ μμ¬κ° μΈκΈλλ©΄ μμ¬ κ°μ€μΉλ₯Ό λμ΄κ³ , μΆμμ 묡μμ΄λ©΄ μλμ λΆμκΈ° κ°μ€μΉλ₯Ό λμ λλ€. μ΅κ·Όμ μμ±λ μ΄λ―Έμ§λ κ°μ ν΄μ κ°μ μ΄λ―Έμ§κ° λ°λ³΅ μΆμ²λμ§ μκ² νμ΅λλ€.
AIλ‘ λ§λ μ΄λ―Έμ§λ μλμΌλ‘ νμ μΆκ°λμ΄μ, μ¬μ©μκ° μΉ΄λλ₯Ό λ§λ€μλ‘ μΆμ²μ΄ λμμ§λ ꡬ쑰μ λλ€.
AdelieAI β μμ LLM νλ₯΄μλ μμ§ (μ€νμμ€)
μμ LLMμ νλ₯΄μλλ₯Ό μ§μ νλ ¨μμΌ ν¨ν€μ§νλ μ€νμμ€ μμ§μ 2026λ 4μμ 곡κ°νμ΅λλ€. κ²μ NPC, λΈλλ νλ₯΄μλ, λλ©μΈ μ컀μ²λΌ βμΊλ¦ν° μ μ§βκ° νμμΈ μ©λλ₯Ό 겨λ₯νμ΅λλ€.
github.com/southglory/AdelieAI Β· μΆμ νκ³
Qwen2.5-7B λ² μ΄μ€ μμ LoRA μ΄λν°λ₯Ό 60~120μ λν λ°μ΄ν°λ‘ νλ ¨ν©λλ€. λ‘컬 3090 ν μ₯μμ 25λΆ μμ ν μΊλ¦ν°κ° λμ€κ³ , GGUF q4_k_mμΌλ‘ μμννλ©΄ 4.4GB λ¨μΌ νμΌλ‘ λ
ΈνΈλΆ CPUμμλ μΆλ‘ μ΄ λ©λλ€. νμ΅ λ μνΌ, κ°μ€μΉ, RAG κ·ΈλΌμ΄λ©, μμ€ν
ν둬ννΈλ₯Ό .adelie νλ₯΄μλ ν© νλλ‘ λ¬Άμ΄μ κ²μμ΄λ λ΄μ κ·Έλλ‘ ν¬μ
ν μ μμ΅λλ€.
νκ°λ LLM-as-judge νλ€μ€λ‘ λ² μ΄μ€μ μ΄μ λ²μ μ μλ λΉκ΅ν©λλ€. κ·Έ μμ EvalGardenerλΌλ μκΈ°κ°μ 5λ¨κ³ 루ν(μΈ‘μ β μ μ λΆμ β μ λ΅ λΆμ β μμ± β Eval-Re)λ₯Ό μΉμ΄ λΌμ΄λλ§λ€ λ€μ μμ μΆ(ν μ€νΈ ν νμ₯, ν둬ννΈ κ°ν, LoRA νμ΅, DPO, λ² μ΄μ€ κ΅μ²΄)μ κ²°μ λ§€νΈλ¦μ€λ‘ μΆμ²ν©λλ€.
DPO νμ΅μ© λ°μ΄ν°λ μ±ν
UIμ 3ν°μ΄ + dismiss νμ μμ ―μΌλ‘ μ§μ μνν©λλ€. κ°μ ν둬ννΈμ μ’μ μλ΅κ³Ό λμ μλ΅μ΄ λμμ μμ΄λ©΄ (chosen, rejected) νμ΄λ‘ λ¨μ΄μ Έμ TRL DPOTrainerμ λ°λ‘ λ€μ΄κ°λλ€.
HuggingFaceμ λ ννλ‘ κ³΅κ°νμ΅λλ€.
- LoRA + FP16 (165MB, GPU): ramyun/adelie-qwen-roleplay-v2-lora
- GGUF q4_k_m (4.4GB, CPU): ramyun/adelie-qwen-roleplay-v2-gguf
λΌμ΄μ μ€λ μ½λ Apache 2.0, κ°μ€μΉ Tongyi Qianwen v1(Qwen2.5 μμ).
AI Agent System Template μ€νμμ€ λ ν¬μ§ν 리 μ΄μ
μ¬λ¬ μμ΄μ νΈλ₯Ό μ¬μ©ν΄μ νλ‘μ νΈλ€μ μ§νν λ μμ΄μ νΈ κ°μμ λ©λͺ¨λ¦¬μλ§ μμ‘΄ν κ²½μ°μ λ¬Έμ λ μμ΄μ νΈλ€μ΄ μλ‘μ μν¬νλ‘μ°λ₯Ό 곡μ νμ§ λͺ»νλ€λ μ μ λλ€.
κ·Έλμ μ΄ Agent System Template νλ‘μ νΈλ₯Ό λ§λ€μμ΅λλ€. λμ μΌλ‘ λ΄μ μν΄ μμ±λλ μ΄ μμ€ν μ μν¬νλ‘μ° μμ λ¬Έμλ ν μμ΄μ νΈμ λ©λͺ¨λ¦¬μ μμ‘΄νμ§ μμΌλ©° μμ΄μ νΈλ€λΌλ¦¬ μμ μν¬νλ‘μ° μ§νμν©μ λΆλͺ νκ² μν΅νλ κ³Όμ μ κ±°μΉλ©° λͺ μμ μΌλ‘ κΈ°λ‘ν΄λκ°λλ€.
λν μ΄ μμ€ν μ κ°λ°μλ€ κ° νμ μλ λμμ΄ λ©λλ€. κ°μμ μν¬νλ‘μ°λ₯Ό λ€λ₯Έ κ°λ°μλ€κ³Ό 곡μ ν λ, μμ νλ¦μ΄ λκΈ°μ§ μκ³ μνν μ΄μ΄μ§κ² λ©λλ€.
λ§μ§λ§μΌλ‘, ν μμ΄μ νΈλ₯Ό μ¬μ©νλλΌλ μμ΄μ νΈκ° λ©λͺ¨λ¦¬ λ°κΉ₯μμ λͺ μμ μΌλ‘ μκΈ°μ νμ€ν¬λ₯Ό μμ±, μ λ°μ΄νΈ, μλ£μ²λ¦¬ νλ μν¬νλ‘μ°κ° μ¬μ ν κ΄λ¦¬νκΈ°μ μ μ©ν©λλ€.
κ°λ¨ν κΈ°λ₯ μ€λͺ μ μλμ κ°μ΅λλ€.
- μ¬λ¬ μν μ ν λΉν μμ΄μ νΈλ€μ ν΄μ λ‘ μ΄μν©λλ€.
- μμ΄μ νΈλΌλ¦¬ μ±ν λ°©μμ λ©μμ§λ₯Ό μ£Όκ³ λ°κ³ , λ΄μ΄ λ©μμ§λ₯Ό νμ±ν΄μ μμ 보λλ₯Ό μλμΌλ‘ μ λ°μ΄νΈν©λλ€.
- μμ΄μ νΈλ μ±ν λ©μμ§λ‘λ§ λ³κ²½ μμ²μ νκ³ λ΄μ΄ μ€μ¬ν΄μ μμ 보λλ₯Ό μ λ°μ΄νΈν©λλ€.
보μ
묡μ ν μ€νΈλ AES-256-GCMμΌλ‘ μνΈνν΄μ DBμ μ μ₯ν©λλ€. κ³΅κ° κ°€λ¬λ¦¬μμλ 묡μ λ΄μ©μ΄ 보μ΄μ§ μμ΅λλ€. μ΄μ©μ½κ΄κ³Ό κ°μΈμ 보μ²λ¦¬λ°©μΉ¨μλ λͺ μνμ΅λλ€.
μΈνλΌ
- k3s + Helm + ArgoCD (GitOps)
- GitHub Actions CI/CD β SSHλ‘ μλ² μ μ, docker build, k3s ctr images import (λ μ§μ€νΈλ¦¬ μμ΄ λ°°ν¬)
- Sentry μλ¬ μΆμ + Discord Bot μλ¦Ό
- PostgreSQL 15 + pgvector, Redis, SeaweedFS (S3 νΈν), Cloudflare CDN
λΈλ‘κ·Έ κ°λ° λ‘κ·Έ
μ½ 3λ μ§Έ κ΄μ¬μλ λΆμΌμ κ°λ°μ΄λ μ°κ΅¬λ₯Ό νλ©° κ²½νν κ²μ μ μ€μ€λ‘ λλμλ³΄κ³ μ°Ύμ보기 μν΄ κΈ°λ‘νλ λΈλ‘κ·Έλ₯Ό μ΄μ΄μ€κ³ μμ΅λλ€.
λ€μμ μ΅κ·Ό μ¬μ΄λνλ‘μ νΈμ λν κ΄λ ¨ ν¬μ€ν μ λλ€.
BibleCardAI μ 체 νλ‘μ° λ°λͺ¨
ꡬμ μ ν β 묡μ μμ± β μ€νμΌ μ ν β AI μ΄λ―Έμ§ μμ± β μΉ΄λ μμ±κΉμ§μ μ 체 κ³Όμ μ μμμΌλ‘ μ 리νμ΅λλ€.
31,102μ μ±κ²½μ 벑ν°λ‘ β RAGλ‘ λ¬΅μ λμ°λ―Έ λ§λ€κΈ°
μ±κ²½ 31,102μ μ λ²‘ν° μλ² λ©νκ³ pgvectorλ‘ μλ§¨ν± κ²μμ ꡬμΆνμ¬, 묡μ μμ± μ€ κ΄λ ¨ ꡬμ μ μ€μκ°μΌλ‘ μΆμ²νλ μμ€ν μ λλ€.
DALL-Eλ‘ 200μ₯ λ§λ€λ©΄μ λ°°μ΄ ν둬ννΈ μμΉ
200μ₯μ AI μ΄λ―Έμ§λ₯Ό μμ±νκ³ κ²μνλ©΄μ μ 리ν ν둬ννΈ μμΉκ³Ό κΈμ§ λͺ©λ‘, 7κ°μ§ μ€νμΌλ³ μ§μμ¬νμ μ 리νμ΅λλ€.
μΉ΄ν‘μ²λΌ μ±κ²½ ꡬμ μ κ³ λ₯΄κ² νλ€
66κΆ 1,189μ₯μ μ±κ²½μμ μνλ ꡬμ μ μ½κ² μ°Ύμ μ μλλ‘ λνν 3λ¨κ³ UIλ₯Ό μ€κ³ν κ³Όμ μ λλ€.
λ§λμμ 겨μμ¨κΉμ§ β μ±κ²½ μΈκ³κ΄μΌλ‘ ν ν° μ€κ³
AI μμ± λΉμ©μ μ±κ²½μ λ§λ μ΄μΌκΈ°μμ μ°©μν ν ν° μμ€ν μΌλ‘ μ€κ³ν κ³Όμ μ λλ€.