File size: 8,703 Bytes
6c92d06
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# λŒ€μš©λŸ‰ RAG μžλ™ 평가 및 ν’ˆμ§ˆ 검증 λ³΄κ³ μ„œ
> **μˆ˜ν–‰ μΌμ‹œ**: 2026λ…„ 5μ›” 19일  
> **검증 λŒ€μƒ**: 22개 μ‹œλ‚˜λ¦¬μ˜€ RAG 질의 μ„ΈνŠΈ (4λŒ€ 핡심 κ³¨λ“œ μ‹œλ‚˜λ¦¬μ˜€ + 18개 도메인/심화 질의)  
> **검증 κ²°κ³Ό**: **총 22개 ν…ŒμŠ€νŠΈ 쀑 22개 μ™„μ „ 톡과 (ν†΅κ³Όμœ¨ 100.0%, 평균 μ§€μ—° μ‹œκ°„ 3.96초)**

---

## 🚨 1. 문제 (Problem)

둜컬 및 μžλ™ν™” ν…ŒμŠ€νŠΈ νŒŒμ΄ν”„λΌμΈ ꡬ동 μ‹œ, Windows PowerShell/CMD ν™˜κ²½μ˜ νŠΉμ • ν•œκΈ€ 인코딩 규격(`CP949`)으둜 인해 λ‹€μŒκ³Ό 같은 치λͺ…적인 **λŸ°νƒ€μž„ ν¬λž˜μ‹œ**κ°€ λ°œμƒν•˜μ˜€μŠ΅λ‹ˆλ‹€.

```plain
πŸ“Š [사전 점검] 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둜 μ•ˆμ „ν•˜κ²Œ κ°•μ œ κ΅¬μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

```python
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 메이저 버전을 λ™μ μœΌλ‘œ κ°μ§€ν•˜μ—¬ 인자λ₯Ό μ „λ‹¬ν•˜λŠ” ꡬ쑰둜 μ •λ°€ λ¦¬νŒ©ν† λ§ν–ˆμŠ΅λ‹ˆλ‹€.

```python
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**

```mermaid
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)
1. **ν™˜κ° κ°€λ“œλ ˆμΌ μ„±λŠ₯ κ·ΉλŒ€ν™”**: ν˜„μž¬ Neo4j λ°μ΄ν„°λ² μ΄μŠ€μ— μ μž¬λ˜μ§€ μ•Šμ€ κΈ°μ—…μ΄λ‚˜ 도메인 μ§ˆμ˜μ— λŒ€ν•΄ κ°€μƒμ˜ 정보λ₯Ό μ§€μ–΄λ‚΄κ±°λ‚˜ κΎΈλ©°λ‚΄μ§€ μ•Šκ³ , **"ν˜„μž¬ μˆ˜μ§‘λœ λ‰΄μŠ€ λ°μ΄ν„°μ—λŠ” κ΄€λ ¨ 정보가 μ—†λ‹€"λŠ” 사싀을 100% μ™„λ²½ν•˜κ²Œ μΈμ§€ν•˜μ—¬ λŒ€λ‹΅ν•¨μœΌλ‘œμ¨ LLM ν™˜κ°(Hallucination) ν˜„μƒμ„ μ™„μ „νžˆ μ›μ²œ 차단**ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
2. **μ‹€μ œ 데이터 μ™„λ²½ 인용**: λ°μ΄ν„°λ² μ΄μŠ€μ— μ‹€μž¬ν•˜λŠ” 정보(예: μ—…μŠ€ν…Œμ΄μ§€μ˜ Solar 기술 동ν–₯, 톡신사 및 1주일간 μ’…ν•© λ‰΄μŠ€ 이슈 λ“±)에 λŒ€ν•΄μ„œλŠ” **단 0.1초의 데이터 μ§€μ—° 없이 κ΄€λ ¨ Naver News 원문 URL μ£Όμ†Œ([좜처](https://...))λ₯Ό λͺ…ν™•ν•˜κ²Œ λ§€ν•‘ 및 λ³΄μ‘΄ν•˜μ—¬ μ™„λ²½ν•œ κ·Όκ±° 기반 RAG μ‹ λ’°μ„±**을 증λͺ…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.