FinGraph / src /utils /analysis_results.md
dev-yuje's picture
feat: ν™”λ©΄ λ ˆμ΄μ•„μ›ƒ ꡬ성 개편 (GNB, μ‚¬μ΄λ“œλ°”, 메인 챗봇 뢄리) 및 뢄석 리포트 μΆ”κ°€
6c92d06
# λŒ€μš©λŸ‰ 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 μ‹ λ’°μ„±**을 증λͺ…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.