Smoothie-Qwen3-8B-DTRO-Edition

๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ 3ํ˜ธ์„  ์ „๋ ฅ์„ค๋น„ ์ „๋ฌธ๊ฐ€ AI ๋ชจ๋ธ
Fine-tuned for Daegu Metro Line 3 Power Facility Expert System

License Model Language


๐ŸŽฏ ๋ชจ๋ธ ๊ฐœ์š”

๋ณธ ๋ชจ๋ธ์€ ์žฅ์•  ๋ถ„์„ ํ”„๋กœ๊ทธ๋žจ์—์„œ RAG(๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ)์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ์ „๋ ฅ์„ค๋น„ ์ „๋ฌธ AI ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์˜๋„

  • ๋ฌธ์ œ ์ธ์‹: RAG๋งŒ์œผ๋กœ๋Š” ์ •ํ™•๋„์™€ ์ „๋ฌธ์„ฑ์ด ๋ถ€์กฑ
  • ํ•ต์‹ฌ ์•„์ด๋””์–ด: ํŒŒ์ธํŠœ๋‹ + RAG ๊ฒฐํ•ฉ์œผ๋กœ ์‹œ๋„ˆ์ง€ ์ฐฝ์ถœ
  • ๋ชฉ์ : ์žฅ์•  ๋ถ„์„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜ธ์ถœ ์‹œ ์ „๋ฌธ๊ฐ€ ์ˆ˜์ค€์˜ ์ •ํ™•ํ•œ ๋‹ต๋ณ€ ์ƒ์„ฑ
  • ๊ฐœ๋ฐœ ์ฃผ์ฒด: ๊ฐœ์ธ ์—ฐ๊ตฌ ๊ฒฐ๊ณผ๋ฌผ (๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ ๊ณต์‹ ์ž…์žฅ๊ณผ ๋ฌด๊ด€)

์ฃผ์š” ํŠน์ง•

  • โœ… ๋„๋ฉ”์ธ ์ „๋ฌธ์„ฑ: ์ „๋ ฅ๊ณ„ํ†ต, ๊ธ‰์ „๊ณ„ํ†ต, ์ „์ฐจ์„ ๋กœ, ์ˆ˜๋ฐฐ์ „์„ค๋น„, ๋ณ€์ „์†Œ ์šด์˜ ๊ด€๋ฆฌ
  • โœ… ์‹ค์ „ ๊ฒ€์ฆ ์™„๋ฃŒ: Gemma-3n-4EB ๋Œ€๋น„ ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ ํ™•์ธ
  • โœ… ํ˜„์žฅ ํŠนํ™”: ์‹ค์ œ ์žฅ๋น„๋ช…(K50, DCP2, RTU HUB ๋“ฑ) ๋ฐ ์šด์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ˜์˜
  • โœ… ์ฆ‰์‹œ ํ™œ์šฉ ๊ฐ€๋Šฅ: ์žฅ์•  ๋ถ„์„, ์›์ธ ์ง„๋‹จ, ์กฐ์น˜ ๋ฐฉ๋ฒ• ์•ˆ๋‚ด
  • โœ… ์ˆœ์ˆ˜ ํ•œ๊ธ€ ์‘๋‹ต: ํ•œ์ž ์—†์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ•œ๊ธ€๋กœ ๋‹ต๋ณ€

๊ฐœ๋ฐœ ๋ฐฐ๊ฒฝ

4์ฐจ๋ก€์˜ ํŒŒ์ธํŠœ๋‹ ์‹œ๋„ ๋์— ์„ฑ๊ณตํ•œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค:

์‹œ๋„ ๋ชจ๋ธ ๊ฒฐ๊ณผ ๋น„๊ณ 
1์ฐจ Gemma-3n-4EB โŒ ์‹คํŒจ ํŒŒ์ธํŠœ๋‹ ์‹คํŒจ
2์ฐจ kanana-1.5-2.1b โŒ ์‹คํŒจ ๋‹ต๋ณ€ ํ’ˆ์งˆ ๋ถˆ๋Ÿ‰
3์ฐจ Llama3 Bllossom-3B โŒ ์‹คํŒจ ๋‹ต๋ณ€ ๋ฏธ์ƒ์„ฑ
4์ฐจ Smoothie-Qwen3-8B โœ… ์„ฑ๊ณต Gemma-3n-4EB ๋Œ€๋น„ ์šฐ์ˆ˜

๐Ÿ’ธ ๊ฐœ๋ฐœ ๋น„ํ•˜์ธ๋“œ ์Šคํ† ๋ฆฌ

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ: ์ง‘์—์„œ ๊ฐœ์ธ GPU๋กœ ํ•™์Šต
  • ์ „๋ ฅ ์†Œ๋น„: 1~3์ฐจ ์‹œ๋„ ์‹œ ์›” 1,000kWh ์ „๊ธฐ ์‚ฌ์šฉ (์ „๊ธฐ๋ฃŒ ๋ถ€๋‹ด)
  • ์ค‘๋‹จ ๊ธฐ๊ฐ„: ์ „๊ธฐ๋ฃŒ ๋ถ€๋‹ด์œผ๋กœ ํ•œ๋™์•ˆ ์‹œ๋„ ์ค‘๋‹จ
  • ์žฌ๊ฐœ ๊ณ„๊ธฐ: 2026๋…„ 1์›” 11์ผ ๊ฒจ์šธ, ๋‚œ๋ฐฉ ๊ฒธ์šฉ์œผ๋กœ GPU ๊ฐ€๋™ ๐Ÿ˜„
  • 4์ฐจ ์‹œ๋„: ๊ฒจ์šธ์ฒ  ์ „๊ธฐ ํžˆํ„ฐ ๋Œ€์‹  GPU ํ•™์Šต์œผ๋กœ ์ผ์„์ด์กฐ
  • ์ตœ์ข… ์„ฑ๊ณต: RTX 3080 Ti๋กœ ์•ฝ 4์‹œ๊ฐ„ ํ•™์Šต ์™„๋ฃŒ

ํ•ต์‹ฌ ์ธ์‚ฌ์ดํŠธ (๊ฐœ์ธ ์—ฐ๊ตฌ ์„ฑ๊ณผ)

"๊ธฐ์ˆ  ์ง€์‹์œผ๋กœ ํŒŒ์ธํŠœ๋‹ + ๋™์ผ ๊ธฐ์ˆ  ์ง€์‹์œผ๋กœ RAG ๋ถ„์„ = ์ตœ์ ์˜ ์‹œ๋„ˆ์ง€"

  • ํŒŒ์ธํŠœ๋‹: ๋„๋ฉ”์ธ ์ง€์‹ ๋‚ด์žฌํ™” (Long-term Memory)
  • RAG: ์‹ค์‹œ๊ฐ„ ์ปจํ…์ŠคํŠธ ๋ณด๊ฐ• (Short-term Memory)
  • ์‹œ๋„ˆ์ง€: RAG ๋‹จ๋… ๋Œ€๋น„ ์ •ํ™•๋„ ๋ฐ ์ „๋ฌธ์„ฑ ๋น„์•ฝ์  ํ–ฅ์ƒ
  • ์ ์šฉ: ์žฅ์•  ๋ถ„์„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‹ค์‹œ๊ฐ„ ํ˜ธ์ถœํ•˜์—ฌ ์‹ฌ์ธต ๋ถ„์„ ์ˆ˜ํ–‰

๐Ÿ“Š ์„ฑ๋Šฅ ๋น„๊ต

์›๋ณธ ๋ชจ๋ธ vs ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ

๋น„๊ต ํ•ญ๋ชฉ ์›๋ณธ ๋ชจ๋ธ ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ
์ฃผ์š” ํŠน์ง• ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ์™€ ํ‘œ์ค€ ๊ธฐ์ˆ  ์šฉ์–ด ์ค‘์‹ฌ ํ˜„์žฅ ํŠนํ™” ๋ฐ์ดํ„ฐ ๋ฐ ์šด์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ค‘์‹ฌ
์žฅ์น˜ ๋ช…์นญ HSCB, SCADA, PLC ๋“ฑ ์ผ๋ฐ˜ ๋ช…์นญ K50, K10/K11 Port, DCP2, S-RTU ๋“ฑ ์ƒ์„ธ ๋ช…์นญ
๋ถ„์„ ๊นŠ์ด ์ „๊ธฐ๊ณตํ•™์  ํ˜„์ƒ ์„ค๋ช… ์œ„์ฃผ ์‹œ์Šคํ…œ ๊ฐ„ ๋กœ์ง ๋ฐ ์‹œํ€€์Šค ์˜ํ–ฅ ๋ถ„์„
์‹ค์šฉ์„ฑ ์‹ ์ž…/์ผ๋ฐ˜ ์ •๋น„์› ๊ต์œก์šฉ์œผ๋กœ ์ ํ•ฉ ์ˆ™๋ จ๋œ ํ˜„์žฅ ์ „๋ฌธ๊ฐ€ ๋ฐ ์šด์˜ ์„ค๊ณ„์šฉ์œผ๋กœ ์ ํ•ฉ

๐Ÿ“Š ์ƒ์„ธ ๋น„๊ต ๋ณด๊ณ ์„œ: model_comparison_report.md

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

์งˆ๋ฌธ: "PLC ํ†ต์‹  ์žฅ์•  ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•์€?"

์›๋ณธ ๋ชจ๋ธ:

  • ์ผ๋ฐ˜์ ์ธ ์ „๊ธฐ๊ณตํ•™ ์›๋ก  ๊ธฐ๋ฐ˜ ๋‹ต๋ณ€
  • "๊ณ ์†๋„์ฐจ๋‹จ๊ธฐ(HSCB)", "์ ˆ์—ฐ ์ €ํ•ญ" ๋“ฑ ํ‘œ์ค€ ์šฉ์–ด ์‚ฌ์šฉ

ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ:

  • Master PLC(K50)์™€ RTU HUB(CU-A) ๊ฐ„์˜ ์ ˆ์ฒด ๋กœ์ง ์ƒ์„ธ ์„ค๋ช…
  • SCADA-FEP-RTU ์—ฐ๋™ ์ฒด๊ณ„ ๋ถ„์„
  • "๊ด€์ œ์—์„œ 89-M_PLC ์ „์› OFF ๋ช…๋ น์„ ํ†ตํ•œ ์ ˆ์ฒด ์‹œ๋„" ๋“ฑ ๊ตฌ์ฒด์  ์šด์˜ ํŒ ์ œ๊ณต

๐Ÿš€ ์‚ฌ์šฉ๋ฒ•

1. Ollama (๊ถŒ์žฅ)

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

# ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ
ollama pull bluejude10/smoothie-qwen3-8b-dtro

# ์‹คํ–‰
ollama run bluejude10/smoothie-qwen3-8b-dtro

# ๋Œ€ํ™” ์˜ˆ์‹œ
>>> PLC ํ†ต์‹  ์žฅ์•  ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•์€?
>>> ํšŒ์ƒ์ œ๋™์ €ํ•ญ์žฅ์น˜ ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?
>>> DCP2 ์„ค์ •๊ฐ’์€ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

2. llama.cpp

GGUF ํŒŒ์ผ์„ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# GGUF ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
wget https://huggingface.co/bluejude10/Smoothie-Qwen3-8B-DTRO-Edition/resolve/main/Smoothie-Qwen3-8B-DTRO-Edition-Q4_K_M.gguf

# ์‹คํ–‰
./llama-cli -m Smoothie-Qwen3-8B-DTRO-Edition-Q4_K_M.gguf \
  -p "PLC ํ†ต์‹  ์žฅ์•  ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•์€?" \
  --temp 0.7 \
  --top-p 0.9 \
  --repeat-penalty 1.1

3. Python (Transformers + PEFT)

LoRA ์–ด๋Œ‘ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ์ถ”๋ก ์ž…๋‹ˆ๋‹ค.

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch

# ๋ฒ ์ด์Šค ๋ชจ๋ธ ๋กœ๋“œ
base_model = AutoModelForCausalLM.from_pretrained(
    "dnotitia/Smoothie-Qwen3-8B",
    torch_dtype=torch.float16,
    device_map="auto",
    trust_remote_code=True
)

# ํ† ํฌ๋‚˜์ด์ € ๋กœ๋“œ
tokenizer = AutoTokenizer.from_pretrained(
    "dnotitia/Smoothie-Qwen3-8B",
    trust_remote_code=True
)

# LoRA ์–ด๋Œ‘ํ„ฐ ๋กœ๋“œ (์„ ํƒ์‚ฌํ•ญ - ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์—…๋กœ๋“œ๋œ ๊ฒฝ์šฐ)
# model = PeftModel.from_pretrained(base_model, "bluejude10/Smoothie-Qwen3-8B-DTRO-Edition")

# ์ถ”๋ก 
prompt = """<|im_start|>system
๋‹น์‹ ์€ ๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ 3ํ˜ธ์„  ์ „๋ ฅ์„ค๋น„ ์ „๋ฌธ๊ฐ€ AI ์–ด์‹œ์Šคํ„ดํŠธ์ž…๋‹ˆ๋‹ค.
<|im_end|>
<|im_start|>user
ํšŒ์ƒ์ œ๋™์ €ํ•ญ์žฅ์น˜ ์žฅ์•  ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•์€?<|im_end|>
<|im_start|>assistant
"""

inputs = tokenizer(prompt, return_tensors="pt").to(base_model.device)
outputs = base_model.generate(
    **inputs,
    max_new_tokens=512,
    temperature=0.7,
    top_p=0.9,
    repetition_penalty=1.1,
    do_sample=True
)

response = tokenizer.decode(outputs[0], skip_special_tokens=False)
print(response)

4. Python (Ollama API)

Ollama๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ Python์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import ollama

def analyze_fault(fault_description: str) -> str:
    """์ „๋ ฅ์„ค๋น„ ์žฅ์•  ๋ถ„์„"""
    response = ollama.chat(
        model='bluejude10/smoothie-qwen3-8b-dtro',
        messages=[{
            'role': 'user',
            'content': f"๋‹ค์Œ ์žฅ์•  ์ƒํ™ฉ์„ ๋ถ„์„ํ•˜๊ณ  ์กฐ์น˜ ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ด์ฃผ์„ธ์š”:\n\n{fault_description}"
        }]
    )
    return response['message']['content']

# ์‚ฌ์šฉ ์˜ˆ์‹œ
fault = "89-M ๋ณ€์ „์†Œ์—์„œ PLC ํ†ต์‹  ์ด์ƒ ์•Œ๋žŒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค."
result = analyze_fault(fault)
print(result)

๐Ÿ“š ํ•™์Šต ๋ฐ์ดํ„ฐ

๋ฐ์ดํ„ฐ์…‹ ์ •๋ณด

  • ๋ฐ์ดํ„ฐ์…‹: ๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ ์ „๋ ฅ์„ค๋น„ ๊ด€๋ จ QnA ๋ฐ ๊ด€๋ จ ์‚ฌ๊ทœ
  • ํ•ญ๋ชฉ ์ˆ˜: 1,273๊ฑด
  • ํฌ๋งท: Alpaca (instruction, input, output)
  • ๋‚ด์šฉ:
    • ์ „๋ ฅ์„ค๋น„ ์žฅ์•  ์œ ํ˜• ๋ฐ ์›์ธ
    • ์ „๋ ฅ๊ณ„ํ†ต ์šด์˜๊ทœ์ •๋“ฑ ๊ด€๋ จ ์‚ฌ๊ทœ
    • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•
    • ์•ˆ์ „ ์ˆ˜์น™ ๋ฐ ์šด์˜ ์ ˆ์ฐจ
    • ์žฅ๋น„๋ณ„ ์šด์˜ ํŒŒ๋ผ๋ฏธํ„ฐ

๋ฐ์ดํ„ฐ ์˜ˆ์‹œ

{
  "instruction": "PLC ํ†ต์‹  ์žฅ์•  ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜์„ธ์š”.",
  "input": "",
  "output": "PLC ํ†ต์‹  ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐ์น˜ํ•ฉ๋‹ˆ๋‹ค:\n\n1. ํ˜„์žฅ ์ƒํƒœ ํ™•์ธ\n- ํ˜„์žฅ ์žฅ๋น„์˜ ๋™์ž‘ ์ƒํƒœ ํ™•์ธ\n- ์ œ์–ด๋ฐ˜ ๋‚ด PLC ๋ฐ I/O ๋ชจ๋“ˆ์˜ LED ์ ๋“ฑ ์ƒํƒœ ํ™•์ธ\n\n2. PLC ์ ˆ์ฒด ๋ฐ ์ด์ค‘ํ™” ์ ˆ์ฒด\n- Master PLC(K50)์™€ RTU HUB(CU-A) ๊ฐ„ ํ†ต์‹  ์ƒํƒœ ํ™•์ธ\n- ํ•„์š” ์‹œ ๊ด€์ œ์—์„œ 89-M_PLC ์ „์› OFF ๋ช…๋ น์œผ๋กœ ์ ˆ์ฒด ์‹œ๋„\n\n3. ์›์ธ ํŒŒ์•… ๋ฐ ์กฐ์น˜\n- PLC ์ด์ƒ ์‹œ ์ œ์กฐ์‚ฌ ์—ฐ๋ฝํ•˜์—ฌ ๋ถ€ํ’ˆ ๊ต์ฒด\n- ํ˜„์žฅ ์žฅ๋น„ ์ด์ƒ ์‹œ ์ ๊ฒ€ ๋ฐ ๋ถ€ํ’ˆ ๊ต์ฒด\n\nโ€ป ์ฃผ์˜: ์ž‘์—… ์‹œ ์•ˆ์ „ ์ˆ˜์น™์„ ์ฒ ์ €ํžˆ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."
}

๐Ÿ”ง ํŒŒ์ธํŠœ๋‹ ์ƒ์„ธ

๊ธฐ์ˆ  ์Šคํƒ

  • ๋ฒ ์ด์Šค ๋ชจ๋ธ: dnotitia/Smoothie-Qwen3-8B
  • ํŒŒ์ธํŠœ๋‹ ๋ฐฉ๋ฒ•: QLoRA (4-bit Quantized Low-Rank Adaptation)
  • ํ”„๋ ˆ์ž„์›Œํฌ:
    • TRL 0.26.2
    • Transformers 4.57.3
    • PEFT (latest)
    • BitsAndBytes (latest)
  • ํ•˜๋“œ์›จ์–ด: NVIDIA RTX 3080 Ti (12GB VRAM)
  • OS: Windows 11

ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ ์„ค๋ช…
LoRA Rank (r) 16 LoRA ํ–‰๋ ฌ์˜ ๋žญํฌ
LoRA Alpha 32 LoRA ์Šค์ผ€์ผ๋ง ํŒฉํ„ฐ (๋ณดํ†ต r์˜ 2๋ฐฐ)
LoRA Dropout 0.05 ๋“œ๋กญ์•„์›ƒ ๋น„์œจ
Target Modules q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj LoRA ์ ์šฉ ๋ ˆ์ด์–ด
Batch Size 1 ๋””๋ฐ”์ด์Šค๋‹น ๋ฐฐ์น˜ ํฌ๊ธฐ
Gradient Accumulation 16 ํšจ๊ณผ์  ๋ฐฐ์น˜ ํฌ๊ธฐ: 16
Learning Rate 2e-4 ํ•™์Šต๋ฅ 
Epochs 20 ์ „์ฒด ์—ํญ ์ˆ˜
Max Sequence Length 1024 ์ตœ๋Œ€ ์‹œํ€€์Šค ๊ธธ์ด
Optimizer paged_adamw_8bit 8๋น„ํŠธ AdamW ์˜ตํ‹ฐ๋งˆ์ด์ €
LR Scheduler cosine ์ฝ”์‚ฌ์ธ ํ•™์Šต๋ฅ  ์Šค์ผ€์ค„๋Ÿฌ
Warmup Steps 50 ์›Œ๋ฐ์—… ์Šคํ… ์ˆ˜

์–‘์žํ™” ์„ค์ •

BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",           # NormalFloat4
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,      # ์ด์ค‘ ์–‘์žํ™”
)

ํ•™์Šต ๊ฒฐ๊ณผ

  • Trainable Parameters: 43,646,976 (0.53% of total 8.2B)
  • Total Steps: 1,600
  • Training Time: ~4 hours (RTX 3080 Ti)
  • Final Loss: ์ˆ˜๋ ด ํ™•์ธ
  • Model Size:
    • LoRA Adapter: ~87MB
    • Merged FP16: ~16GB
    • Q4_K_M GGUF: ~5GB

๐Ÿ“– ์ƒ์„ธ ํŒŒ์ธํŠœ๋‹ ๊ฐ€์ด๋“œ: FINETUNE_GUIDE.md


๐Ÿ”— GitHub ํ”„๋กœ์ ํŠธ ์—ฐ๋™

๋ณธ ๋ชจ๋ธ์€ ๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ 3ํ˜ธ์„  ์ „๋ ฅ๊ด€์ œ ์žฅ์•  ๊ด€๋ฆฌ ํ†ตํ•ฉ ํ”Œ๋žซํผ์—์„œ ํ•ต์‹ฌ AI ์—”์ง„์œผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ค ๊ฐœ๋ฐœ์ž ์ •๋ณด

  • ์†Œ์†: ๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ 3ํ˜ธ์„  ๊ฒฝ์ „์ฒ ๊ด€์ œํŒ€ ์ „๋ ฅ๊ด€์ œ
  • ์„ฑ๋ช…: ๊ฐ•๋™์šฐ (GitHub: @aremany)
  • ๋น„๊ณ :
    • ๋ณธ ๋ชจ๋ธ์€ ๊ฐœ๋ฐœ์ž ๊ฐœ์ธ์˜ ์—ฐ๊ตฌ ๊ฒฐ๊ณผ๋ฌผ์ž…๋‹ˆ๋‹ค.
    • ๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ์˜ ๊ณต์‹ ์ž…์žฅ ๋ฐ ์˜์ง€์™€ ๋ฌด๊ด€ํ•˜๋ฉฐ, ๊ฐœ์ธ์˜ ์˜์ง€์™€ ์•„์ด๋””์–ด๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ๊ฐœ๋ฐœ ๊ณผ์ • ๋ฐ ์„ฑ๊ณผ๋Š” ๊ฐœ์ธ ์—ฐ๊ตฌ ํ™œ๋™์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

๐Ÿ“… ๊ฐœ๋ฐœ ๋ฐฐ๊ฒฝ ๋ฐ ํžˆ์Šคํ† ๋ฆฌ

๋ณธ ๋ชจ๋ธ์€ ์•ฝ 9๊ฐœ์›”๊ฐ„์˜ ๊ฐœ๋ฐœ ๊ณผ์ •(2025.04 ~ 2026.01)์„ ๊ฑฐ์ณ ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค:

์‹œ๊ธฐ ์ฃผ์š” ํ™œ๋™ ์„ฑ๊ณผ
2025.04-06 ๋ฐ์ดํ„ฐ ๋””์ง€ํ„ธํ™” HWP ์žฅ์•  ๋ณด๊ณ ์„œ โ†’ DB ๋ณ€ํ™˜
2025.07-08 ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ฐœ๋ฐœ Inkscape ๋…ํ•™ โ†’ ๊ณ„ํ†ต ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ์ œ์ž‘
2025.09-10 ํ†ตํ•ฉ ํ”Œ๋žซํผ ๊ตฌ์ถ• RAG + Fine-tuning ๊ฒฐํ•ฉ
2025.11 AI ๊ฒฝ์ง„๋Œ€ํšŒ ์ถœํ’ˆ ์™„์„ฑํ˜• ํ”Œ๋žซํผ (์ฑ—๋ด‡ ์ œ์™ธ)
2026.01.03 GraphRAG ์ฑ—๋ด‡ ์™„์„ฑ ์ตœ์ข… ํผ์ฆ ์™„์„ฑ
2026.01.11 Qwen3-8B ํŒŒ์ธํŠœ๋‹ (4์ฐจ ์‹œ๋„) 4์ฐจ ๋งŒ์— ์„ฑ๊ณต - Gemma-3n-4EB ๋Œ€๋น„ ์šฐ์ˆ˜

๐Ÿ’ก ํ•ต์‹ฌ ์ฒ ํ•™

"์žฅ์• ๋Š” 100% ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 100% ๋Œ€๋น„ํ•  ์ˆ˜๋Š” ์žˆ๋‹ค."

  • ์˜ˆ์ธก: GRU/KNN/์„ ํ˜•ํšŒ๊ท€ ๊ธฐ๋ฐ˜ ์žฅ์•  ๋ฐœ์ƒ ์˜ˆ์ธก
  • ํ›ˆ๋ จ: ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•œ ์ด๋ฏธ์ง€ ํŠธ๋ ˆ์ด๋‹
  • ๋ถ„์„: ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ + RAG ๊ธฐ๋ฐ˜ ์‹ฌ์ธต ๋ถ„์„

1. ์žฅ์•  ๋ถ„์„๊ธฐ (Failure Analyzer)

๋…๋ฆฝ ์‹คํ–‰ํ˜• ์žฅ์•  ์›์ธ ๋ถ„์„ ์‹œ์Šคํ…œ

  • ๋ ˆํฌ์ง€ํ† ๋ฆฌ: github.com/aremany/failure-analyzer
  • ๊ธฐ๋Šฅ:
    • ํ†ต๊ณ„ ๋ถ„์„: ์žฅ์•  ๋ฐœ์ƒ ๋นˆ๋„, ์—ฐ๊ฐ„ ์ถ”์ด, ์ฃผ์š” ์›์ธ ํ†ต๊ณ„
    • AI ์‹ฌ์ธต ๋ถ„์„: LLM + RAG ๊ธฐ๋ฐ˜ ์ƒ์„ธ ๋ถ„์„ ๋ณด๊ณ ์„œ ์ž‘์„ฑ
  • ๋ฐ์ดํ„ฐ:
    • incident_reports.db: ์žฅ์•  ์ด๋ ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • dataset_from_data_txt.json: RAG ์ฐธ์กฐ ์ง€์‹ ๋ฐ์ดํ„ฐ

ํ†ตํ•ฉ ์˜ˆ์‹œ:

import ollama
from qdrant_client import QdrantClient

# RAG ๊ฒ€์ƒ‰
def search_knowledge_base(query: str) -> str:
    """๊ธฐ์ˆ  ๋ฌธ์„œ ๊ฒ€์ƒ‰"""
    client = QdrantClient(host="localhost", port=6333)
    results = client.search(
        collection_name="power_facility_docs",
        query_text=query,
        limit=3
    )
    return "\n".join([r.payload['text'] for r in results])

# ์žฅ์•  ๋ถ„์„
def analyze_with_rag(fault_description: str) -> str:
    """ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ + RAG ๊ธฐ๋ฐ˜ ์žฅ์•  ๋ถ„์„"""
    # 1. RAG๋กœ ๊ด€๋ จ ๋ฌธ์„œ ๊ฒ€์ƒ‰
    context = search_knowledge_base(fault_description)
    
    # 2. ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ๋กœ ๋ถ„์„
    prompt = f"""๋‹ค์Œ ์ฐธ๊ณ  ์ž๋ฃŒ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์žฅ์• ๋ฅผ ๋ถ„์„ํ•˜์„ธ์š”:

์ฐธ๊ณ  ์ž๋ฃŒ:
{context}

์žฅ์•  ์ƒํ™ฉ:
{fault_description}

๋ถ„์„ ๊ฒฐ๊ณผ:"""
    
    response = ollama.chat(
        model='bluejude10/smoothie-qwen3-8b-dtro',
        messages=[{'role': 'user', 'content': prompt}]
    )
    
    return response['message']['content']

# ์‚ฌ์šฉ ์˜ˆ์‹œ
if __name__ == "__main__":
    fault = "89-M ๋ณ€์ „์†Œ์—์„œ PLC ํ†ต์‹  ์ด์ƒ ์•Œ๋žŒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค."
    result = analyze_with_rag(fault)
    print(result)

2. ํ†ตํ•ฉ ํ”Œ๋žซํผ (Integrated Platform)

๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ 3ํ˜ธ์„  ์ „๋ ฅ๊ด€์ œ ์žฅ์•  ๊ด€๋ฆฌ ํ†ตํ•ฉ ํ”Œ๋žซํผ

  • ๋ ˆํฌ์ง€ํ† ๋ฆฌ: github.com/aremany/integrated-platform
  • ์ฃผ์š” ๋ชจ๋“ˆ:
    1. ์žฅ์•  ์˜ˆ์ธก๊ธฐ: GRU/KNN/์„ ํ˜•ํšŒ๊ท€ ๊ธฐ๋ฐ˜ ์‹œ๊ณ„์—ด ์˜ˆ์ธก
    2. ์žฅ์•  ๋ถ„์„๊ธฐ: ๋ณธ ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ + RAG ๊ธฐ๋ฐ˜ ์‹ฌ์ธต ๋ถ„์„
    3. ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ: Inkscape ๊ธฐ๋ฐ˜ ๊ณ„ํ†ต ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ (ํ›ˆ๋ จ์šฉ)
    4. ์ง€์‹ ๊ฒ€์ƒ‰๊ธฐ: RAG ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  ๋ฌธ์„œ ๊ฒ€์ƒ‰
    5. GraphRAG ์ฑ—๋ด‡: ๋Œ€ํ™”ํ˜• ์žฅ์•  ์ƒ๋‹ด ์ธํ„ฐํŽ˜์ด์Šค
    6. ๋ณด๊ณ ์„œ ๋ทฐ์–ด: ๊ณผ๊ฑฐ ์žฅ์•  ์ด๋ ฅ ์กฐํšŒ

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         ํ†ตํ•ฉ ํ”Œ๋žซํผ (FastAPI + Streamlit)                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ ์žฅ์• ์˜ˆ์ธก โ”‚  โ”‚ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐโ”‚  โ”‚ ์ง€์‹๊ฒ€์ƒ‰ โ”‚  โ”‚ ์ฑ—๋ด‡    โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚       โ”‚                            โ”‚             โ”‚      โ”‚
โ”‚       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚
โ”‚                    โ–ผ                                     โ”‚
โ”‚         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                        โ”‚
โ”‚         โ”‚   ์žฅ์•  ๋ถ„์„๊ธฐ (Core)  โ”‚                        โ”‚
โ”‚         โ”‚  Fine-tuned Model    โ”‚                        โ”‚
โ”‚         โ”‚  + RAG Engine        โ”‚                        โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  Data Layer: incident_reports.db + knowledge_base.json  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ’ฐ ๊ฐœ๋ฐœ ์„ฑ๊ณผ (Value)

  • โœ… ์ €์‚ฌ์–‘ ์ตœ์ ํ™”: i3-13100, No GPU ํ™˜๊ฒฝ์—์„œ๋„ ์›ํ™œํ•œ Local LLM ๊ตฌ๋™
  • โœ… ์˜ˆ์‚ฐ ์ ˆ๊ฐ: 1์ธ ๊ฐœ๋ฐœ๋กœ ํ†ตํ•ฉ ํ”Œ๋žซํผ ๊ตฌ์ถ• (์™ธ์ฃผ ๋น„์šฉ ์ˆ˜์–ต ์› ์ ˆ๊ฐ)
  • โœ… ์‹ค๋ฌด ์ ์šฉ: ์‹ค์ œ ํ˜„์žฅ์—์„œ ์ฆ‰์‹œ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์˜ ๋‹ต๋ณ€ ํ’ˆ์งˆ

๐ŸŽฏ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€์ด๋“œ

๋ณธ ๋ชจ๋ธ๊ณผ ํ†ตํ•ฉ ํ”Œ๋žซํผ์€ ๋ˆ„๊ตฌ๋‚˜ ์ˆ˜์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ๋ชจ๋ธ ๊ต์ฒด: ollama pull bluejude10/smoothie-qwen3-8b-dtro
  2. ๋ฐ์ดํ„ฐ ๊ต์ฒด:
    • incident_reports.db: ๋ณธ์ธ์˜ ์žฅ์•  ์ด๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ๊ต์ฒด
    • dataset_from_data_txt.json: ์ž์ฒด ๋งค๋‰ด์–ผ/๊ธฐ์ˆ  ๋ฌธ์„œ๋กœ ๊ต์ฒด
  3. UI ์ปค์Šคํ„ฐ๋งˆ์ด์ง•:
    • index.html: ํšŒ์‚ฌ๋ช…/ํƒ€์ดํ‹€ ์ˆ˜์ •
    • io.png: ๋กœ๊ณ  ํŒŒ์ผ ๊ต์ฒด

๐Ÿ’ก ์‚ฌ์šฉ ์˜ˆ์‹œ

์‹ค์ „ ์˜ˆ์‹œ: ์žฅ์•  ๋ถ„์„ ํ”„๋กœ๊ทธ๋žจ ํ†ตํ•ฉ

๋ณธ ๋ชจ๋ธ์€ ์žฅ์•  ๋ถ„์„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค:

import ollama

def generate_fault_analysis_report(
    fault_type: str,
    causes_text: str,
    actions_text: str,
    qa_text: str = ""
) -> str:
    """
    ์žฅ์•  ๋ถ„์„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ์‹ค์ œ ํ•จ์ˆ˜
    
    Args:
        fault_type: ์žฅ์•  ์œ ํ˜• (์˜ˆ: "PLC ํ†ต์‹  ์žฅ์• ")
        causes_text: ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ฃผ์š” ์›์ธ
        actions_text: ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ฃผ์š” ์กฐ์น˜
        qa_text: RAG๋กœ ๊ฒ€์ƒ‰๋œ ๊ณผ๊ฑฐ ์œ ์‚ฌ ์‚ฌ๋ก€ Q&A
        
    Returns:
        ์ƒ์„ธ ๊ธฐ์ˆ  ์ข…ํ•ฉ ๋ณด๊ณ ์„œ
    """
    
    # ์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ”„๋กฌํ”„ํŠธ
    prompt = f"""๋‹น์‹ ์€ 30๋…„ ๊ฒฝ๋ ฅ์˜ ์ฒ ๋„ ์ „๋ ฅ ์„ค๋น„(๋ชจ๋…ธ๋ ˆ์ผ/๊ฒฝ์ „์ฒ  ์ˆ˜๋ณ€์ „ ๋ฐ ์ „์ฐจ์„ ) ์žฅ์•  ๋ถ„์„ ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
๋‹น์‹ ์˜ ์ž„๋ฌด๋Š” ์ œ๊ณต๋œ [ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ]์™€ [๊ณผ๊ฑฐ ์‚ฌ๋ก€(Q&A)]๋ฅผ ์ข…ํ•ฉํ•˜์—ฌ, ๋ชจ๋…ธ๋ ˆ์ผ ๊ฒฝ์ „์ฒ  ์ „๋ ฅ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•œ '{fault_type}' ์žฅ์• ์— ๋Œ€ํ•œ '์ƒ์„ธ ๊ธฐ์ˆ  ์ข…ํ•ฉ ๋ณด๊ณ ์„œ'๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

### 1. ๋ถ„์„ ๋Œ€์ƒ ์ •๋ณด
- **์žฅ์•  ์œ ํ˜•**: {fault_type}
- **๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ฃผ์š” ์›์ธ**:
{causes_text}
- **๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ฃผ์š” ์กฐ์น˜**:
{actions_text}

### 2. ์ฐธ๊ณ  ์ง€์‹ (๊ณผ๊ฑฐ ์œ ์‚ฌ ์‚ฌ๋ก€ Q&A)
{qa_text if qa_text else "(์ฐธ๊ณ ํ•  ๋งŒํ•œ ์œ ์‚ฌ ์‚ฌ๋ก€ Q&A ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ „๋ ฅ ๊ณตํ•™์  ์ง€์‹๊ณผ ๊ฒฝ์ „์ฒ  ์„ค๋น„ ํŠน์„ฑ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๋ถ„์„ํ•˜์‹ญ์‹œ์˜ค.)"}

### 3. ์ž‘์„ฑ ์ง€์นจ
- **์ƒ์„ธ์„ฑ ๊ฐ•ํ™”**: ์š”์•ฝํ•˜์ง€ ๋ง๊ณ , ๊ฐ ํ•ญ๋ชฉ์„ ๋…ผ๋ฆฌ์  ๊ทผ๊ฑฐ์™€ ํ•จ๊ป˜ ์ตœ๋Œ€ํ•œ ์ƒ์„ธํ•˜๊ณ  ๊ธธ๊ฒŒ ์„œ์ˆ ํ•˜์‹ญ์‹œ์˜ค. (๋‹จ๋‹ตํ˜• ์ง€์–‘, ์„œ์ˆ ํ˜• ์ง€ํ–ฅ)
- **์ „๋ฌธ์„ฑ**: ์ „๋ ฅ์„ค๋น„ ์šด์˜ํŒ€๊ณผ ๊ฒฝ์˜์ง„์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ „๋ฌธ์ ์ธ ๊ธฐ์ˆ  ์šฉ์–ด(์˜ˆ: ๋ณดํ˜ธ๊ณ„์ „๊ธฐ, ์ •๋ฅ˜๊ธฐ, SCADA, ์ ˆ์—ฐํŒŒ๊ดด, ๊ณ ์กฐํŒŒ ๋“ฑ)๋ฅผ ์ ๊ทน ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
- **๋„๋ฉ”์ธ ํŠนํ™”**: ์ผ๋ฐ˜์ ์ธ ์ „์‚ฐ ์žฅ์• ๊ฐ€ ์•„๋‹Œ, '์ „๋ ฅ ๊ณต๊ธ‰ ๋ฐ ๋ฐฐ์ „ ์‹œ์Šคํ…œ'์˜ ๊ด€์ ์—์„œ ๋ฌผ๋ฆฌ์ /์ „๊ธฐ์  ์›์ธ์„ ์‹ฌ์ธต ๋ถ„์„ํ•˜์‹ญ์‹œ์˜ค.
- **ํฌ๋งท ์ค€์ˆ˜**: ์•„๋ž˜์˜ [์ถœ๋ ฅ ํ˜•์‹]์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.

### 4. ์ถœ๋ ฅ ํ˜•์‹ (์ด ํ˜•์‹์„ ์—„๊ฒฉํžˆ ๋”ฐ๋ฅผ ๊ฒƒ)

# [{fault_type}] ์ „๋ ฅ ์„ค๋น„ ์žฅ์•  ์ƒ์„ธ ๋ถ„์„ ๋ณด๊ณ ์„œ

## 1. ์ „๊ธฐ๊ณตํ•™์  ์›์ธ ๋ถ„์„ (Root Cause Analysis)
(๋‹จ์ˆœ ๋‚˜์—ด์ด ์•„๋‹Œ, ์žฅ์•  ๋ฐœ์ƒ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์„œ๋ก -๋ณธ๋ก -๊ฒฐ๋ก  ๊ตฌ์กฐ๋กœ **์ตœ์†Œ 15๋ฌธ์žฅ ์ด์ƒ** ์•„์ฃผ ์ƒ์„ธํžˆ ๊ธฐ์ˆ ํ•˜์‹ญ์‹œ์˜ค. ํ†ต๊ณ„์  ์›์ธ๊ณผ ์ „๊ธฐ์  ํŠน์„ฑ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.)

## 2. ๋‹จ๊ณ„๋ณ„ ํ˜„์žฅ ๋Œ€์‘ ๋ฐ ๋ณต๊ตฌ ๊ฐ€์ด๋“œ
(ํ˜„์žฅ ์œ ์ง€๋ณด์ˆ˜ ์š”์›์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์กฐ์น˜๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์ƒ์„ธํžˆ ๊ธฐ์ˆ ํ•˜์‹ญ์‹œ์˜ค. ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ๊ตฌ์ฒด์ ์ธ ์ž‘์—… ๋‚ด์šฉ๊ณผ ์•ˆ์ „ ์ˆ˜์น™์„ ํฌํ•จํ•˜์—ฌ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.)
- **ํ˜„์žฅ ์กฐ์น˜ ๋งค๋‰ด์–ผ(์‘๊ธ‰/๋ณต๊ตฌ)**: ...
- **์žฌ๋ฐœ ๋ฐฉ์ง€ ๋Œ€์ฑ…(์„ค๋น„ ๋ณด๊ฐ•/๊ต์ฒด)**: ...

## 3. ์„ค๋น„ ์šด์˜ ์ „๋ฌธ๊ฐ€ ์ œ์–ธ
(์ „๋ ฅ ์„ค๋น„์˜ ์žฅ๊ธฐ์  ์•ˆ์ •์„ฑ ํ™•๋ณด ๋ฐฉ์•ˆ, ์˜ˆ๋ฐฉ ์ •๋น„ ์ฃผ๊ธฐ ์ตœ์ ํ™”, ์ตœ์‹  ์ง„๋‹จ ๊ธฐ๋ฒ• ๋„์ž… ๋“ฑ ์šด์˜ ํšจ์œจํ™”๋ฅผ ์œ„ํ•œ ์‹ฌ๋„ ์žˆ๋Š” ์ œ์–ธ์„ **์žฅ๋ฌธ์œผ๋กœ** ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.)
"""
    
    # Ollama๋กœ ๋ชจ๋ธ ํ˜ธ์ถœ
    response = ollama.chat(
        model='bluejude10/smoothie-qwen3-8b-dtro',
        messages=[{
            'role': 'user',
            'content': prompt
        }],
        options={
            'temperature': 0.7,
            'top_p': 0.9,
            'num_ctx': 8192  # ๊ธด ๋ณด๊ณ ์„œ ์ƒ์„ฑ์„ ์œ„ํ•œ ์ปจํ…์ŠคํŠธ
        }
    )
    
    return response['message']['content']

# ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ
if __name__ == "__main__":
    # ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ (DB์—์„œ ์กฐํšŒ)
    causes = """
    1. PLC ํ†ต์‹  ์ผ€์ด๋ธ” ๋…ธํ›„ํ™” (35%)
    2. ์ „์› ๊ณต๊ธ‰ ๋ถˆ์•ˆ์ • (25%)
    3. ํ™˜๊ฒฝ ์š”์ธ (์˜จ์Šต๋„, ๋จผ์ง€) (20%)
    4. ์†Œํ”„ํŠธ์›จ์–ด ์˜ค๋ฅ˜ (15%)
    5. ๊ธฐํƒ€ (5%)
    """
    
    actions = """
    1. PLC ์žฌ๋ถ€ํŒ… ๋ฐ ํ†ต์‹  ์ผ€์ด๋ธ” ์ ๊ฒ€
    2. ์ „์› ๊ณต๊ธ‰ ์žฅ์น˜ ์ ๊ฒ€ ๋ฐ ๊ต์ฒด
    3. ํ™˜๊ฒฝ ๊ฐœ์„  (์ฒญ์†Œ, ์˜จ์Šต๋„ ์กฐ์ ˆ)
    4. ํŽŒ์›จ์–ด ์—…๋ฐ์ดํŠธ
    """
    
    # RAG๋กœ ๊ฒ€์ƒ‰๋œ ๊ณผ๊ฑฐ ์‚ฌ๋ก€ (Qdrant์—์„œ ๊ฒ€์ƒ‰)
    qa_cases = """
    Q: PLC ํ†ต์‹  ์žฅ์•  ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•์€?
    A: Master PLC(K50)์™€ RTU HUB(CU-A) ๊ฐ„ ํ†ต์‹  ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ , 
       ํ•„์š” ์‹œ ๊ด€์ œ์—์„œ 89-M_PLC ์ „์› OFF ๋ช…๋ น์œผ๋กœ ์ ˆ์ฒด๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค...
    
    Q: SCADA-FEP-RTU ์—ฐ๋™ ์ฒด๊ณ„๋Š”?
    A: SCADA๋Š” ์ค‘์•™ ๊ด€์ œ ์‹œ์Šคํ…œ์ด๋ฉฐ, FEP๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์„ธ์„œ๋กœ 
       RTU์™€์˜ ํ†ต์‹ ์„ ์ค‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค...
    """
    
    # ๋ณด๊ณ ์„œ ์ƒ์„ฑ
    report = generate_fault_analysis_report(
        fault_type="PLC ํ†ต์‹  ์žฅ์• ",
        causes_text=causes,
        actions_text=actions,
        qa_text=qa_cases
    )
    
    print(report)

์ถœ๋ ฅ ์˜ˆ์‹œ (์ผ๋ถ€):

# [PLC ํ†ต์‹  ์žฅ์• ] ์ „๋ ฅ ์„ค๋น„ ์žฅ์•  ์ƒ์„ธ ๋ถ„์„ ๋ณด๊ณ ์„œ

## 1. ์ „๊ธฐ๊ณตํ•™์  ์›์ธ ๋ถ„์„ (Root Cause Analysis)

PLC(Programmable Logic Controller) ํ†ต์‹  ์žฅ์• ๋Š” ๋ชจ๋…ธ๋ ˆ์ผ ๊ฒฝ์ „์ฒ  ์ „๋ ฅ ์‹œ์Šคํ…œ์—์„œ 
๊ฐ€์žฅ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์žฅ์•  ์œ ํ˜• ์ค‘ ํ•˜๋‚˜๋กœ, ๊ทธ ๊ทผ๋ณธ ์›์ธ์€ ๋ณตํ•ฉ์ ์ด๊ณ  ๋‹ค์ธต์ ์ž…๋‹ˆ๋‹ค. 

ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ฅด๋ฉด PLC ํ†ต์‹  ์ผ€์ด๋ธ” ๋…ธํ›„ํ™”๊ฐ€ ์ „์ฒด ์žฅ์• ์˜ 35%๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ 
๋‚˜ํƒ€๋‚ฌ๋Š”๋ฐ, ์ด๋Š” ๊ฒฝ์ „์ฒ  ์‹œ์Šคํ…œ์˜ ํŠน์„ฑ์ƒ ์ง„๋™๊ณผ ์˜จ๋„ ๋ณ€ํ™”๊ฐ€ ์‹ฌํ•œ ํ™˜๊ฒฝ์— ์ผ€์ด๋ธ”์ด 
์ง€์†์ ์œผ๋กœ ๋…ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ RS-485 ํ†ต์‹  ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๊ฐ„์—์„œ๋Š” 
์ผ€์ด๋ธ”์˜ ํŠน์„ฑ ์ž„ํ”ผ๋˜์Šค ๋ณ€ํ™”๊ฐ€ ์‹ ํ˜ธ ๊ฐ์‡ ๋ฅผ ์œ ๋ฐœํ•˜๋ฉฐ, ์ด๋Š” ๊ฒฐ๊ตญ ํ†ต์‹  ์˜ค๋ฅ˜๋กœ 
์ด์–ด์ง‘๋‹ˆ๋‹ค.

์ „์› ๊ณต๊ธ‰ ๋ถˆ์•ˆ์ •(25%)์€ ๋‘ ๋ฒˆ์งธ ์ฃผ์š” ์›์ธ์œผ๋กœ, Master PLC(K50)์™€ Slave PLC ๊ฐ„์˜ 
์ „์› ํ’ˆ์งˆ ์ฐจ์ด๊ฐ€ ํ†ต์‹  ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ณ€์ „์†Œ์—์„œ ๊ณต๊ธ‰๋˜๋Š” DC 110V 
์ „์›์˜ ๋ฆฌํ”Œ ์ „์••์ด ํ—ˆ์šฉ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ, PLC์˜ ๋‚ด๋ถ€ ํ†ต์‹  ๋ชจ๋“ˆ์ด ์˜ค๋™์ž‘ํ•˜์—ฌ 
SCADA-FEP-RTU ์—ฐ๋™ ์ฒด๊ณ„ ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค...

(์ดํ•˜ 15๋ฌธ์žฅ ์ด์ƒ ๊ณ„์†...)

## 2. ๋‹จ๊ณ„๋ณ„ ํ˜„์žฅ ๋Œ€์‘ ๋ฐ ๋ณต๊ตฌ ๊ฐ€์ด๋“œ

### ํ˜„์žฅ ์กฐ์น˜ ๋งค๋‰ด์–ผ(์‘๊ธ‰/๋ณต๊ตฌ)

**1๋‹จ๊ณ„: ์ฆ‰์‹œ ์กฐ์น˜ (0~5๋ถ„)**
- ๊ด€์ œ์‹ค์— ์ฆ‰์‹œ ๋ณด๊ณ ํ•˜๊ณ  ์žฅ์•  ๋ฐœ์ƒ ์‹œ๊ฐ ๋ฐ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
- SCADA ํ™”๋ฉด์—์„œ ํ•ด๋‹น PLC์˜ ํ†ต์‹  ์ƒํƒœ(Online/Offline)๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
- Master PLC(K50)์˜ LED ์ƒํƒœ๋ฅผ ์›๊ฒฉ์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (RUN, ERR, COMM ๋žจํ”„).

**2๋‹จ๊ณ„: ์›๊ฒฉ ์ง„๋‹จ (5~15๋ถ„)**
- ๊ด€์ œ์—์„œ 89-M_PLC ์ „์› OFF ๋ช…๋ น์„ ํ†ตํ•œ ์†Œํ”„ํŠธ ๋ฆฌ์…‹์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
- RTU HUB(CU-A)์˜ ํ†ต์‹  ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜์—ฌ ํŒจํ‚ท ์†์‹ค๋ฅ ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.
- ์ด์ค‘ํ™” ์ ˆ์ฒด ๊ธฐ๋Šฅ์ด ์ •์ƒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค...

(์ดํ•˜ ์ƒ์„ธ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ ๊ณ„์†...)

## 3. ์„ค๋น„ ์šด์˜ ์ „๋ฌธ๊ฐ€ ์ œ์–ธ

์žฅ๊ธฐ์  ๊ด€์ ์—์„œ PLC ํ†ต์‹  ์žฅ์• ์˜ ๊ทผ๋ณธ์  ํ•ด๊ฒฐ์„ ์œ„ํ•ด์„œ๋Š” ์˜ˆ๋ฐฉ ์ •๋น„ ์ฒด๊ณ„์˜ 
๊ณ ๋„ํ™”์™€ ์„ค๋น„ ํ˜„๋Œ€ํ™”๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์šด์˜ ์ค‘์ธ RS-485 ํ†ต์‹  ๋ฐฉ์‹์€ 
1980๋…„๋Œ€ ๊ธฐ์ˆ ๋กœ, ๋…ธ์ด์ฆˆ์— ์ทจ์•ฝํ•˜๊ณ  ์ „์†ก ์†๋„๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. 

๋”ฐ๋ผ์„œ ์ฐจ์„ธ๋Œ€ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ธ Profinet ๋˜๋Š” EtherCAT์œผ๋กœ์˜ ๋‹จ๊ณ„์  ์ „ํ™˜์„ 
๊ฒ€ํ† ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ†ต์‹  ์†๋„๋ฅผ 100๋ฐฐ ์ด์ƒ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , 
์ง„๋‹จ ๊ธฐ๋Šฅ์„ ๊ฐ•ํ™”ํ•˜์—ฌ ์žฅ์•  ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค...

(์ดํ•˜ ์žฅ๋ฌธ์˜ ์ „๋ฌธ๊ฐ€ ์ œ์–ธ ๊ณ„์†...)

์˜ˆ์‹œ 1: PLC ํ†ต์‹  ์žฅ์•  (๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ)

์ž…๋ ฅ:

PLC ํ†ต์‹  ์žฅ์•  ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•์€?

์ถœ๋ ฅ:

PLC(Programmable Logic Controller) ์žฅ์•  ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

### 1. ํ˜„์žฅ ์ƒํƒœ ํ™•์ธ
- ํ˜„์žฅ ์žฅ๋น„(์˜ˆ: ์ˆ˜์ „๋ฐ˜, ์—ฐ๊ณ„๋ฐ˜, ์ถ•์ „์ง€ ๋“ฑ)์˜ ๋™์ž‘ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
- ์ œ์–ด๋ฐ˜ ๋‚ด PLC ๋ฐ I/O ๋ชจ๋“ˆ์˜ LED ์ ๋“ฑ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

### 2. PLC ์ ˆ์ฒด ๋ฐ ์ด์ค‘ํ™” ์ ˆ์ฒด
- PLC๊ฐ€ ์ด์ƒ ์—†์„ ๊ฒฝ์šฐ ํ˜„์žฅ ์žฅ๋น„์— ์ด์ƒ์ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
- PLC ์ ˆ์ฒด ๋ฐ ์ด์ค‘ํ™” ์ ˆ์ฒด๋ฅผ ํ†ตํ•ด ์ •์ƒ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

### 3. ์›์ธ ํŒŒ์•… ๋ฐ ์กฐ์น˜
- PLC์— ์ด์ƒ์ด ์žˆ์„ ๊ฒฝ์šฐ ์ œ์กฐ์‚ฌ์— ์—ฐ๋ฝํ•˜์—ฌ ๋ถ€ํ’ˆ ๊ต์ฒด๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
- PLC์— ์ด์ƒ์ด ์—†์„ ๊ฒฝ์šฐ ํ˜„์žฅ ์žฅ๋น„๋ฅผ ์ ๊ฒ€ํ•˜๊ณ  ํ•„์š” ์‹œ ๋ถ€ํ’ˆ ๊ต์ฒด๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

### 4. ์‹œ์Šคํ…œ ์ ๊ฒ€ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง
- PLC ๋ฐ ๊ด€๋ จ ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.
- ์žฅ์•  ์˜ˆ๋ฐฉ์„ ์œ„ํ•ด ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

โ€ป ์ฃผ์˜: ์ž‘์—… ์‹œ ์•ˆ์ „ ์ˆ˜์น™์„ ์ฒ ์ €ํžˆ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ 2: ํšŒ์ƒ์ œ๋™์ €ํ•ญ์žฅ์น˜ ์žฅ์• 

์ž…๋ ฅ:

ํšŒ์ƒ์ œ๋™์ €ํ•ญ์žฅ์น˜ ์žฅ์•  ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•์€?

์ถœ๋ ฅ:

ํšŒ์ƒ์ œ๋™์ €ํ•ญ์žฅ์น˜(Regenerative Braking Resistor)๋Š” ์ „๋™์ฐจ์˜ ํšŒ์ƒ์ œ๋™์œผ๋กœ ์ธํ•œ 
์ „์ฐจ์„  ๊ธ‰์ „์ „์•• ์ƒ์Šน์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ์„ค๋น„์ž…๋‹ˆ๋‹ค. 
์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ฆ‰์‹œ ์ •์ „ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜๊ณ  ํ˜„์žฅ ์ ๊ฒ€์„ ์ง€์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์žฅ์•  ์ข…๋ฅ˜ ๋ฐ ์กฐ์น˜ ๋ฐฉ์•ˆ:

โ€ข ํšŒ์ƒ์ €ํ•ญ๊ธฐ ์ ˆ์—ฐ์ €ํ•ญ ์ €ํ•˜
  - ๊ณ ์žฅํ‘œํ˜„: ํšŒ์ƒ์ €ํ•ญ๊ธฐ ์ ˆ์—ฐ์ €ํ•ญ ์ €ํ•˜
  - ์›์ธ๋ถ„์„: ํšŒ์ƒ์ €ํ•ญ๊ธฐ ์ ˆ์—ฐ์ €ํ•ญ ์ €ํ•˜
  - ์กฐ์น˜๋ฐฉ๋ฒ•: ํšŒ์ƒ์ €ํ•ญ๊ธฐ ์ ˆ์ฒด ๋ฐ ์ ˆ์—ฐ์ €ํ•ญ ์ธก์ • / ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ถˆ๋Ÿ‰ ์‹œ ๊ต์ฒด

โ€ข ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ฐ˜๋‚ด ์ฒ ๊ตฌ ์—ดํ™”
  - ๊ณ ์žฅํ‘œํ˜„: ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ฐ˜๋‚ด ์ฒ ๊ตฌ ์—ดํ™”
  - ์›์ธ๋ถ„์„: ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ฐ˜๋‚ด ์ฒ ๊ตฌ ์—ดํ™”
  - ์กฐ์น˜๋ฐฉ๋ฒ•: ์ฒ ๊ตฌ ์—ดํ™” ์ƒํƒœ ํ™•์ธ ๋ฐ ํ•„์š” ์‹œ ๊ต์ฒด

โ€ข ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ฐ˜๋‚ด ์ ˆ์—ฐ๋ฌผ ์—ดํ™”
  - ๊ณ ์žฅํ‘œํ˜„: ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ฐ˜๋‚ด ์ ˆ์—ฐ๋ฌผ ์—ดํ™”
  - ์›์ธ๋ถ„์„: ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ฐ˜๋‚ด ์ ˆ์—ฐ๋ฌผ ์—ดํ™”
  - ์กฐ์น˜๋ฐฉ๋ฒ•: ์ ˆ์—ฐ๋ฌผ ์ƒํƒœ ํ™•์ธ ๋ฐ ํ•„์š” ์‹œ ๊ต์ฒด

โ€ข ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ฐ˜๋‚ด ์˜จ๋„๊ณ„ ์ด์ƒ
  - ๊ณ ์žฅํ‘œํ˜„: ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ฐ˜๋‚ด ์˜จ๋„๊ณ„ ์ด์ƒ
  - ์›์ธ๋ถ„์„: ํšŒ์ƒ์ €ํ•ญ๊ธฐ ๋ฐ˜๋‚ด ์˜จ๋„๊ณ„ ์ด์ƒ
  - ์กฐ์น˜๋ฐฉ๋ฒ•: ์˜จ๋„๊ณ„ ๋™์ž‘์ƒํƒœ ํ™•์ธ ๋ฐ ํ•„์š” ์‹œ ๊ต์ฒด

์˜ˆ์‹œ 3: 64P ์ง€๋ฝ ๊ณ„์ „๊ธฐ ๋™์ž‘

์ž…๋ ฅ:

64P ์ง€๋ฝ ๊ณ„์ „๊ธฐ ๋™์ž‘ ์‹œ ์กฐ์น˜ ๋ฐฉ๋ฒ•์€?

์ถœ๋ ฅ:

64P ์ง€๋ฝ ๊ณ„์ „๊ธฐ๋Š” ๋ณ€์ „์†Œ NBF๋ฐ˜์—์„œ ์ „์ฐจ์„ ๋กœ์˜ ์ง€๋ฝ ์‚ฌ๊ณ ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” 
๋ณดํ˜ธ ์žฅ์น˜์ž…๋‹ˆ๋‹ค. ๋™์ž‘ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐ์น˜ํ•ฉ๋‹ˆ๋‹ค:

### 1. ์ฆ‰์‹œ ์กฐ์น˜
- ๊ด€์ œ์— ์ฆ‰์‹œ ๋ณด๊ณ 
- ํ•ด๋‹น ๊ตฌ๊ฐ„ ์—ด์ฐจ ์šดํ–‰ ์ค‘์ง€
- ํ˜„์žฅ ์•ˆ์ „ ํ™•๋ณด (ํŒจ๋„ ์ ‘์ด‰ ๊ธˆ์ง€ ์ง€์‹œ)

### 2. ์„ค์ •๊ฐ’ ํ™•์ธ
- DCP2 ์„ค์ •๊ฐ’: 150V, 0.4S
- TD B21 ๋™์ž‘ ํ™•์ธ
- ๋ณ€์ „์†Œ NBF๋ฐ˜ ์ƒํƒœ ํ™•์ธ

### 3. ์›์ธ ํŒŒ์•…
- ์ „์ฐจ์„ ๋กœ ์ ˆ์—ฐ ์ƒํƒœ ์ ๊ฒ€
- ์ ‘์ง€ BUS์™€ Negative BUS ๊ฐ„ ์ €ํ•ญ๊ฐ’ ์ธก์ •
- ๊ฐ•์šฐ, ๊ฐ•์„ค ๋“ฑ ๊ธฐ์ƒ ์กฐ๊ฑด ํ™•์ธ

### 4. ๋ณต๊ตฌ ์กฐ์น˜
- ์ง€๋ฝ ์›์ธ ์ œ๊ฑฐ ํ›„ ์ ˆ์—ฐ ์ €ํ•ญ ์ธก์ •
- ์ •์ƒ ํ™•์ธ ํ›„ ์‹œํ—˜ ์†ก์ „
- ์ด์ƒ ์—†์„ ์‹œ ์šดํ–‰ ์žฌ๊ฐœ

โ€ป ์ฃผ์˜: 64P ๋™์ž‘ ์‹œ ๋ฐ˜๋“œ์‹œ ํ˜„์žฅ ์•ˆ์ „ ํ™•๋ณด ํ›„ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โš ๏ธ ์ œํ•œ์‚ฌํ•ญ

๋„๋ฉ”์ธ ํŠนํ™”

  • ๋ณธ ๋ชจ๋ธ์€ ๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ 3ํ˜ธ์„  ์ „๋ ฅ์„ค๋น„์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋„๋ฉ”์ธ(์˜ˆ: ์˜๋ฃŒ, ๋ฒ•๋ฅ , ๊ธˆ์œต)์—์„œ๋Š” ์„ฑ๋Šฅ์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์ฒ ๋„ ๋…ธ์„ ์ด๋‚˜ ์ „๋ ฅ ์‹œ์Šคํ…œ์—์„œ๋„ ์ผ๋ถ€ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์–ด

  • ํ•œ๊ตญ์–ด ์ „์šฉ: ํ•œ๊ตญ์–ด ์‘๋‹ต์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜์–ด๋‚˜ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์งˆ๋ฌธ ์‹œ ๋‹ต๋ณ€ ํ’ˆ์งˆ์ด ๋‚ฎ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Thinking ๋ชจ๋“œ

  • Qwen3์˜ <think> ํƒœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Modelfile์—์„œ enable_thinking=false ์„ค์ •์œผ๋กœ ๋น„ํ™œ์„ฑํ™” ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์•ˆ์ „์„ฑ

  • ๋ณธ ๋ชจ๋ธ์˜ ๋‹ต๋ณ€์€ ์ฐธ๊ณ ์šฉ์ž…๋‹ˆ๋‹ค.
  • ์‹ค์ œ ํ˜„์žฅ ์ž‘์—… ์‹œ ๋ฐ˜๋“œ์‹œ ๊ณต์‹ ๋งค๋‰ด์–ผ ๋ฐ ์•ˆ์ „ ๊ทœ์ •์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘์š”ํ•œ ์˜์‚ฌ๊ฒฐ์ •์€ ๋ฐ˜๋“œ์‹œ ์ „๋ฌธ๊ฐ€์˜ ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“œ ๋ผ์ด์„ ์Šค

๋ชจ๋ธ ๋ผ์ด์„ ์Šค

  • ๋ผ์ด์„ ์Šค: Apache 2.0
  • ์ƒ์—…์  ์ด์šฉ: ๊ฐ€๋Šฅ
  • ์ˆ˜์ • ๋ฐ ์žฌ๋ฐฐํฌ: ๊ฐ€๋Šฅ (๋ผ์ด์„ ์Šค ๋ช…์‹œ ํ•„์š”)

๋ฒ ์ด์Šค ๋ชจ๋ธ

  • dnotitia/Smoothie-Qwen3-8B: ํ•ด๋‹น ๋ชจ๋ธ์˜ ๋ผ์ด์„ ์Šค ์ค€์ˆ˜ ํ•„์š”
  • Qwen3: Alibaba Cloud์˜ Qwen ๋ผ์ด์„ ์Šค ์ค€์ˆ˜ ํ•„์š”

ํ•™์Šต ๋ฐ์ดํ„ฐ

  • ๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ ๋‚ด๋ถ€ ์ž๋ฃŒ: ๊ณต๊ฐœ ๋ถˆ๊ฐ€
  • ๋ชจ๋ธ ๊ฐ€์ค‘์น˜: ์ผ๋ฐ˜ํ™”๋œ ์ง€์‹๋งŒ ํฌํ•จ (์›๋ณธ ๋ฐ์ดํ„ฐ ๋ฏธํฌํ•จ)

๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

๊ธฐ์ˆ  ์ œ๊ณต

  • Qwen Team (Alibaba Cloud): ์šฐ์ˆ˜ํ•œ ๋ฒ ์ด์Šค ๋ชจ๋ธ ์ œ๊ณต
  • dnotitia: Smoothie-Qwen3-8B ํ•œ๊ธ€ ์ตœ์ ํ™” ๋ฒ„์ „ ์ œ๊ณต
  • HuggingFace: TRL, PEFT, Transformers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ๊ณต
  • Microsoft: BitsAndBytes ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ๊ณต
  • ggerganov: llama.cpp ๋ฐ GGUF ํฌ๋งท ์ œ๊ณต

์ปค๋ฎค๋‹ˆํ‹ฐ

  • Korean NLP Community: ํ•œ๊ตญ์–ด AI ๋ฐœ์ „์— ๊ธฐ์—ฌ
  • Open Source Community: ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„ ๋ฐœ์ „

๐Ÿ“ง ๋ฌธ์˜ ๋ฐ ํ”ผ๋“œ๋ฐฑ

๊ฐœ๋ฐœ์ž

  • ์„ฑ๋ช…: ๊ฐ•๋™์šฐ
  • ์†Œ์†: ๋Œ€๊ตฌ๊ตํ†ต๊ณต์‚ฌ 3ํ˜ธ์„  ๊ฒฝ์ „์ฒ ๊ด€์ œํŒ€ ์ „๋ ฅ๊ด€์ œ
  • GitHub: @aremany
  • HuggingFace: @bluejude10
  • Email: bluejude10@naver.com

ํ˜‘์—… ๋ฐ ๊ธฐ์—ฌ

  • ์ด๊ฑดํฌ ์ฃผ์ž„: ํ›ˆ๋ จ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ฒฝ๋ณด์Œ ๋ฐ ์žฅ์•  ์‹œ๋‚˜๋ฆฌ์˜ค ์•„์ด๋””์–ด ์ œ์•ˆ ๋ฐ ์ดˆ๊ธฐ ๊ตฌํ˜„ ๊ธฐ์—ฌ

์ด์Šˆ ๋ฐ ๊ฐœ์„  ์ œ์•ˆ

  • GitHub Issues๋ฅผ ํ†ตํ•ด ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ ๋ฐ ๊ธฐ๋Šฅ ์ œ์•ˆ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • HuggingFace Discussions์—์„œ ๋ชจ๋ธ ์‚ฌ์šฉ ๊ด€๋ จ ์งˆ๋ฌธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”„ ๋ฒ„์ „ ํžˆ์Šคํ† ๋ฆฌ

v1.0 (2026-01-11)

  • โœ… ์ดˆ๊ธฐ ๋ฆด๋ฆฌ์ฆˆ
  • โœ… QLoRA ํŒŒ์ธํŠœ๋‹ ์™„๋ฃŒ (1,273๊ฑด ๋ฐ์ดํ„ฐ)
  • โœ… Q4_K_M GGUF ๋ณ€ํ™˜
  • โœ… Ollama ์ง€์›
  • โœ… ์„ฑ๋Šฅ ๊ฒ€์ฆ ์™„๋ฃŒ (Gemma-3n-4EB ๋Œ€๋น„ ์šฐ์ˆ˜)

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

๊ด€๋ จ ๋ชจ๋ธ

๊ณผ๊ฑฐ ์‹œ๋„ (ํŒŒ์ธํŠœ๋‹ ์‹คํŒจ ์ด๋ ฅ)

๋ฌธ์„œ


Made with โค๏ธ for Daegu Metro Line 3

GitHub HuggingFace

Downloads last month
28
GGUF
Model size
8B params
Architecture
qwen3
Hardware compatibility
Log In to add your hardware

4-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for bluejude10/Smoothie-Qwen3-8B-DTRO-Edition

Base model

Qwen/Qwen3-8B-Base
Finetuned
Qwen/Qwen3-8B
Quantized
(6)
this model