🧠 SL5 Aura 하이브리드 모드: 로컬 LLM 통합¶
상태: 실험적/안정적 기술: Ollama(Llama 3.2) + Python 하위 프로세스 개인정보 보호: 100% 오프라인
컨셉: “건축가 & 인턴”¶
전통적으로 Aura는 빠르고 정확하며 예측 가능한 결정론적 규칙(RegEx)을 사용합니다. **”건축가”**입니다. 그러나 사용자가 “농담을 말해 보세요” 또는 *”이 텍스트를 요약해 주세요”*와 같이 “모호한” 또는 창의적인 내용을 묻고 싶어하는 경우도 있습니다.
로컬 LLM 플러그인(“인턴”)이 여기에 포함됩니다.
**Aura(RegEx)**는 먼저 모든 엄격한 명령(“조명 켜기”, “앱 열기”)을 확인합니다.
AND/ 또는 특정 유발 단어(예: “Aura …”)와 일치하는 항목이 없으면 대체 규칙이 활성화됩니다.
텍스트가 로컬 AI 모델(Ollama)로 전송됩니다.
응답은 TTS 또는 텍스트 입력을 통해 삭제되고 출력됩니다.
🛠 전제 조건¶
플러그인을 사용하려면 머신에서 로컬로 작동하는 실행 중인 Ollama 인스턴스가 필요합니다.
# Installation (Arch/Manjaro)
sudo pacman -S ollama
sudo systemctl enable --now ollama
# Download model (Llama 3.2 3B - only ~2GB, very fast)
ollama run llama3.2
📂 구조 및 로드 순서¶
플러그인은 의도적으로 z_fallback_llm 폴더에 배치됩니다.
Aura는 플러그인을 알파벳순으로 로드하므로 이 이름을 지정하면 LLM 규칙이 마지막 로드됩니다. 인식할 수 없는 명령에 대한 “안전망” 역할을 합니다.
경로: config/maps/plugins/z_fallback_llm/de-DE/
1. 지도(FUZZY_MAP_pre.py)¶
우리는 **높은 점수(100)**와 유발 단어를 사용하여 Aura가 스크립트에 제어권을 넘겨주도록 합니다.
import re
from pathlib import Path
CONFIG_DIR = Path(__file__).parent
FUZZY_MAP_pre = [
# Trigger: "Aura" + any text
('ask_ollama', r'^\s*(Aura|Aurora|Laura)\s+(.*)$', 100, {
'command_flags': re.IGNORECASE,
# 'skip_list': ['LanguageTool'], # Optional: Performance boost
'on_match_exec': [CONFIG_DIR / 'ask_ollama.py']
}),
]
2. 핸들러(ask_ollama.py)¶
이 스크립트는 Ollama CLI와 통신합니다.
중요: clean_text_for_typing 함수가 포함되어 있습니다. 원시 LLM 출력에는 xdotool 또는 레거시 TTS 시스템과 같은 도구를 충돌시킬 수 있는 이모티콘(😂, 🚀)이나 특수 문자가 포함되는 경우가 많습니다.
# Snippet from ask_ollama.py
def execute(match_data):
# ... (Regex group extraction) ...
# System prompt for short answers
system_instruction = "Answer in German. Max 2 sentences. No emojis."
# Subprocess call (blocks briefly, note the timeout!)
cmd = ["ollama", "run", "llama3.2", full_prompt]
result = subprocess.run(cmd, capture_output=True, ...)
# IMPORTANT: Sanitize output for system stability
return clean_text_for_typing(result.stdout)
⚙️ 사용자 정의 옵션¶
트리거 변경¶
“Aura”를 깨우기 단어로 사용하지 않으려면 FUZZY_MAP_pre.py에서 RegEx를 수정하세요.
진정한 Catch-All의 예(Aura가 모르는 모든 것):
r'^(.*)$'(주의: 점수를 조정하세요!)
모델 교체¶
ask_ollama.py에서 모델을 쉽게 바꿀 수 있습니다(예: 더 많은 RAM이 필요하지만 더 복잡한 논리를 위해 mistral으로).
cmd = ["ollama", "run", "mistral", full_prompt]
시스템 프롬프트(페르소나)¶
system_instruction을 조정하여 Aura에 개성을 부여할 수 있습니다.
“당신은 공상과학 영화에 나오는 비꼬는 조수입니다.”
⚠️ 알려진 제한 사항¶
지연 시간: 부팅 후 첫 번째 요청은 모델이 RAM에 로드될 때 1~3초 정도 걸릴 수 있습니다. 후속 요청이 더 빠릅니다.
충돌: 적절한 폴더 구조 없이 RegEx가 너무 광범위하면(
.*) 표준 명령을 삼킬 수 있습니다. 알파벳 순서(z_...)가 필수적입니다.하드웨어: 대략적인 요구 사항 Llama 3.2용 2GB의 여유 RAM.