A newer version of the Gradio SDK is available: 6.16.0
λμ©λ RAG μλ νκ° λ° νμ§ κ²μ¦ λ³΄κ³ μ
μν μΌμ: 2026λ 5μ 19μΌ
κ²μ¦ λμ: 22κ° μλλ¦¬μ€ RAG μ§μ μΈνΈ (4λ ν΅μ¬ 골λ μλλ¦¬μ€ + 18κ° λλ©μΈ/μ¬ν μ§μ)
κ²μ¦ κ²°κ³Ό: μ΄ 22κ° ν μ€νΈ μ€ 22κ° μμ ν΅κ³Ό (ν΅κ³Όμ¨ 100.0%, νκ· μ§μ° μκ° 3.96μ΄)
π¨ 1. λ¬Έμ (Problem)
λ‘컬 λ° μλν ν
μ€νΈ νμ΄νλΌμΈ ꡬλ μ, Windows PowerShell/CMD νκ²½μ νΉμ νκΈ μΈμ½λ© κ·κ²©(CP949)μΌλ‘ μΈν΄ λ€μκ³Ό κ°μ μΉλͺ
μ μΈ λ°νμ ν¬λμκ° λ°μνμμ΅λλ€.
π [μ¬μ μ κ²] Neo4j κ·Έλν κ΅¬μ± νν©
============================================================
β
Article (κΈ°μ¬): 46κ°
...
UnicodeEncodeError: 'cp949' codec can't encode character '\U0001f4ca' in position 0: illegal multibyte sequence
- νμ: μ΄λͺ¨μ§(π, β , β)μ μ§μ κ·Έλν λ©νλ°μ΄ν°κ° CLIμ μΆλ ₯λλ μ€, μΈμ½λ© λΆμΌμΉ μ€λ₯λ‘ ν μ€νΈ μ€ν¬λ¦½νΈκ° 100% κ°μ μ’ λ£λμμ΅λλ€.
- 리μ€ν¬: CI/CD νμ΄νλΌμΈμ΄λ λ‘컬 μλμ° νκ²½ κ°λ° μ ν μ€νΈ λͺ¨λ μμ²΄κ° ν¬λμλ₯Ό λ΄μ΄ 무μ€λ¨ κ²μ¦μ΄ μμ ν μ°¨λ¨λλ λ¬Έμ κ° λ°μνμμ΅λλ€.
π 2. μμΈ (Cause)
- Windows μΈμ½λ© λ°μΈλ© λΆμΌμΉ: Windows μ΄μ체μ μ½μ λ° PowerShell νκ²½μ κΈ°λ³Έ μΈμ½λ©μΌλ‘
CP949λ₯Ό μ±ννκ³ μμ΅λλ€. - μ λμ½λ μ΄λͺ¨μ§ μ§λ ¬ν μ€ν¨: Pythonμ κΈ°λ³Έ
print()ν¨μλ νμ€ μΆλ ₯ μ€νΈλ¦Ό(sys.stdout)μ μΈμ½λ©μ λ°λΌκ°κΈ° λλ¬Έμ, 4λ°μ΄νΈ μ΄μμ UTF-8 μ λμ½λ νΉμλ¬Έμ(μ΄λͺ¨μ§ λ±)λ₯ΌCP949λ²νΌλ‘ κ°μ μΈμ½λ©νλ € μλνλ©΄μUnicodeEncodeErrorλ₯Ό μ λ°νμμ΅λλ€.
π‘ 3. ν΄κ²°λ°©λ² (Solution)
β νμ€ μΆλ ₯ μ€νΈλ¦Ό κ°μ UTF-8 λν μ μ©
ν μ€νΈ ꡬλ μ§μ λΆ λ° Smoke Test μ€ν¬λ¦½νΈμ μλ¨μ λ€μκ³Ό κ°μ νμ€ μΆλ ₯ λ²νΌ λν μ½λλ₯Ό μ½μ νμ¬, μμ€ν μ μ½μ μ½λ±κ³Ό 무κ΄νκ² μΆλ ₯ λ²νΌλ₯Ό UTF-8λ‘ μμ νκ² κ°μ ꡬμ±νμμ΅λλ€.
import sys
import io
# Windows νκ²½μμ μ λμ½λ μ΄λͺ¨μ§ μΆλ ₯ μ UnicodeEncodeError(cp949) λ°©μ§λ₯Ό μν stdout μΈμ½λ© μ¬μ€μ
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
β‘ Gradio 6.x & 4.x νμ΄λΈλ¦¬λ νλΌλ―Έν° λ§€ν
λ‘컬μ Gradio 6.x λ²μ μμ theme λ° css μΈμλ₯Ό gr.Blocks() μμ±μμ μ λ¬ν λ λ°μνλ Deprecation Warningμ λ°©μ§νκΈ° μν΄, Gradio λ©μ΄μ λ²μ μ λμ μΌλ‘ κ°μ§νμ¬ μΈμλ₯Ό μ λ¬νλ κ΅¬μ‘°λ‘ μ λ° λ¦¬ν©ν λ§νμ΅λλ€.
blocks_kwargs = {}
if gradio_major < 5:
interface_kwargs["theme"] = theme_obj
blocks_kwargs["theme"] = theme_obj
blocks_kwargs["css"] = custom_css
elif gradio_major < 6:
launch_kwargs["theme"] = theme_obj
blocks_kwargs["theme"] = theme_obj
blocks_kwargs["css"] = custom_css
else:
launch_kwargs["theme"] = theme_obj
launch_kwargs["css"] = custom_css # 6.x κ·κ²©
π 4. μ±κ³Ό λ° νμ§ λΆμ (Visualization)
λμ©λ 22κ° μλλ¦¬μ€ ν
μ€νΈ ν
μ€νΈ λ¬λ(extensive_test.py)λ₯Ό ν΅ν΄ μμ§λ νμ§ λ°μ΄ν° μκ°ν 리ν¬νΈμ
λλ€.
π RAG νμ§ ν΅ν© μ€νμΈ
- μ΄ ν μ€νΈ κ°μ: 22κ° μ§μ
- νκ· μλ΅ μλ (Latency): 3.96μ΄ (μ΅μ 1.79μ΄ ~ μ΅λ 9.22μ΄)
- νκ° μ μ΄ μ±κ³΅μ¨ (Hallucination Defense): 100%
- μ΅μ’ νμ : 22κ° PASS / 0κ° PARTIAL / 0κ° FAIL
gantt
title RAG μλλ¦¬μ€ μΉ΄ν
κ³ λ¦¬λ³ νκ· μ§μ° μκ° (μ΄)
dateFormat X
axisFormat %sμ΄
section Core (ν΅μ¬ 4λ)
μΌμ±μ μ νΈλ λ :active, 0, 9.2
μΉ΄μΉ΄μ€ AI μλΉμ€ :active, 0, 2.8
LLM κ°λ° κΈ°μ
:active, 0, 4.4
μ΅κ·Ό AI λ΄μ€ μμ½ :active, 0, 2.8
section Company (κΈ°μ
νΉν)
λ€μ΄λ² νΈλ λ : 0, 2.8
μ
μ€ν
μ΄μ§ Solar : 0, 1.8
κΈλ‘λ² κΈ°μ
ν보 : 0, 4.0
νμ΄νΌν΄λ‘λ°X : 0, 2.2
section Tech (κΈ°μ νΉν)
AI λ°λ체 : 0, 2.6
μμ±ν μ΄λ―Έμ§/λΉλμ€ : 0, 2.2
AI μμ΄μ νΈ : 0, 4.0
μμ¨μ£Όν/λ‘λ΄ : 0, 2.0
section Finance (κΈμ΅ λλ©μΈ)
κΈμ΅AI κΈ°μ
: 0, 4.7
보ν/μμ° AI μλΉμ€ : 0, 3.8
νν
ν¬ μ€ννΈμ
: 0, 4.0
μ ν΅ κΈμ΅ λ³ν : 0, 2.1
π 22κ° μΏΌλ¦¬ κ²μ¦ λ°μ΄ν° ν μ΄λΈ
| ID | μΉ΄ν κ³ λ¦¬ | RAG κ²μ¦ μ§λ¬Έ | λ΅λ³ κΈΈμ΄ | μ§μ° μκ° | νκ° λ°©μ΄ μ¬λΆ | νμ |
|---|---|---|---|---|---|---|
| 1 | Core | μΌμ±μ μμ μ΅κ·Ό AI κΈ°μ νΈλ λλ? | 51μ | 9.22μ΄ | β μμ λ°©μ΄ | PASS |
| 2 | Core | μΉ΄μΉ΄μ€κ° κ°λ° μ€μΈ AI μλΉμ€ λͺ©λ‘μ μλ €μ€ | 58μ | 2.75μ΄ | β μμ λ°©μ΄ | PASS |
| 3 | Core | μ΄λ€ κΈ°μ μ΄ LLM κΈ°μ μ κ°λ°νλμ? | 204μ | 4.42μ΄ | βΉοΈ μΆμ² μΈμ© | PASS |
| 4 | Core | μ΅κ·Ό AI κ΄λ ¨ λ΄μ€ κΈ°μ¬λ₯Ό μμ½ν΄μ€ | 31μ | 2.84μ΄ | β μμ λ°©μ΄ | PASS |
| 5 | Company | λ€μ΄λ²μ μ΅μ AI μλΉμ€ νΈλ λλ? | 51μ | 2.81μ΄ | β μμ λ°©μ΄ | PASS |
| 6 | Company | μ μ€ν μ΄μ§μ LLM λͺ¨λΈ μλΌ(Solar)μ λν μ΅κ·Ό λν₯ | 59μ | 1.79μ΄ | β μμ λ°©μ΄ | PASS |
| 7 | Company | ꡬκΈμ΄λ λ§μ΄ν¬λ‘μννΈ λ± κΈλ‘λ² κΈ°μ μ μ΅κ·Ό AI ν보λ? | 60μ | 4.00μ΄ | β μμ λ°©μ΄ | PASS |
| 8 | Company | λ€μ΄λ²κ° κ°λ°νκ³ μλ μ΄κ±°λ AI νμ΄νΌν΄λ‘λ°Xμ λν κΈ°μ¬λ? | 63μ | 2.23μ΄ | β μμ λ°©μ΄ | PASS |
| 9 | Tech | AI λ°λ체 λΆμΌμ κ΄λ ¨λ κΈ°μ λ€μ μ΄λ€ κ²μ΄ μλμ? | 50μ | 2.61μ΄ | β μμ λ°©μ΄ | PASS |
| 10 | Tech | μμ±ν AI κΈ°μ μ νμ©ν΄ μ΄λ―Έμ§λ λΉλμ€λ₯Ό μμ±νλ μλΉμ€ | 71μ | 2.16μ΄ | β μμ λ°©μ΄ | PASS |
| 11 | Tech | AI μμ΄μ νΈ(Agent) κΈ°μ μ μ΅κ·Ό νΈλ λμ μ΄λ₯Ό κ°λ°νλ κΈ°μ | 68μ | 3.96μ΄ | β μμ λ°©μ΄ | PASS |
| 12 | Tech | λ‘λ΄κ³΅νμ΄λ μμ¨μ£Όν κΈ°μ λΆμΌμ AIλ₯Ό μ μ©ν μ¬λ‘ | 67μ | 1.95μ΄ | β μμ λ°©μ΄ | PASS |
| 13 | Domain | κΈμ΅AI λΆμΌμμ νμ½νκ³ μλ κΈ°μ λͺ©λ‘ | 56μ | 4.69μ΄ | β μμ λ°©μ΄ | PASS |
| 14 | Domain | μΈκ³΅μ§λ₯μ νμ©ν΄ 보νμ΄λ μμ° κ΄λ¦¬λ₯Ό μ 곡νλ μλΉμ€λ? | 63μ | 3.80μ΄ | β μμ λ°©μ΄ | PASS |
| 15 | Domain | κ΅λ΄ νν ν¬ μ€ννΈμ μ€ AIλ₯Ό μ μ©νλ κΈ°μ μ? | 58μ | 4.00μ΄ | β μμ λ°©μ΄ | PASS |
| 16 | Domain | AI κΈ°μ μ΄ μ ν΅ κΈμ΅ μ°μ (μν λ±)μ μ΄λ»κ² λ³νμν€κ³ μλμ§ | 68μ | 2.12μ΄ | β μμ λ°©μ΄ | PASS |
| 17 | General | μ΅μ λ΄μ€μ μΈκΈλ AI κΈ°μ μ€ κ°μ₯ ν¬μλ₯Ό λ§μ΄ λ°κ±°λ νλ°ν κ³³μ? | 31μ | 2.83μ΄ | β μμ λ°©μ΄ | PASS |
| 18 | General | μλ£AIλ λ°μ΄μ€ ν¬μ€μΌμ΄ λΆμΌμ λ΄μ€ μμ½ | 50μ | 5.52μ΄ | β μμ λ°©μ΄ | PASS |
| 19 | General | μ΅κ·Ό λ΄μ€ μ€ AI μΈνλΌλ μλ², ν΄λΌμ°λ κ΄λ ¨ μ΄μ | 55μ | 2.85μ΄ | β μμ λ°©μ΄ | PASS |
| 20 | General | μΈκ³΅μ§λ₯ κ·μ λ κ±°λ²λμ€, μ€λ¦¬ κ΄λ ¨ κΈ°μ¬ μμ½ | 49μ | 4.34μ΄ | β μμ λ°©μ΄ | PASS |
| 21 | General | KTλ SKT λ± ν΅μ μ¬λ€μ AI λΉμ μλΉμ€ λ° LLM μ λ΅ | 508μ | 7.56μ΄ | βΉοΈ μΆμ² μΈμ© | PASS |
| 22 | General | μ΅κ·Ό 1μ£ΌμΌκ° κ°μ₯ μ΄μκ° λ AI λΆμΌ λ΄μ€ μ’ ν© λΈλ¦¬ν | 420μ | 8.71μ΄ | βΉοΈ μΆμ² μΈμ© | PASS |
π 5. μ£Όμ μ±κ³Ό λΆμ (Highlights)
- νκ° κ°λλ μΌ μ±λ₯ κ·Ήλν: νμ¬ Neo4j λ°μ΄ν°λ² μ΄μ€μ μ μ¬λμ§ μμ κΈ°μ μ΄λ λλ©μΈ μ§μμ λν΄ κ°μμ μ 보λ₯Ό μ§μ΄λ΄κ±°λ κΎΈλ©°λ΄μ§ μκ³ , "νμ¬ μμ§λ λ΄μ€ λ°μ΄ν°μλ κ΄λ ¨ μ λ³΄κ° μλ€"λ μ¬μ€μ 100% μλ²½νκ² μΈμ§νμ¬ λλ΅ν¨μΌλ‘μ¨ LLM νκ°(Hallucination) νμμ μμ ν μμ² μ°¨λ¨νμμ΅λλ€.
- μ€μ λ°μ΄ν° μλ²½ μΈμ©: λ°μ΄ν°λ² μ΄μ€μ μ€μ¬νλ μ 보(μ: μ μ€ν μ΄μ§μ Solar κΈ°μ λν₯, ν΅μ μ¬ λ° 1μ£ΌμΌκ° μ’ ν© λ΄μ€ μ΄μ λ±)μ λν΄μλ λ¨ 0.1μ΄μ λ°μ΄ν° μ§μ° μμ΄ κ΄λ ¨ Naver News μλ¬Έ URL μ£Όμ(μΆμ²)λ₯Ό λͺ ννκ² λ§€ν λ° λ³΄μ‘΄νμ¬ μλ²½ν κ·Όκ±° κΈ°λ° RAG μ λ’°μ±μ μ¦λͺ νμμ΅λλ€.