🧠 SL5 Aura ハイブリッド モード: ローカル LLM 統合¶
ステータス: 実験的 / 安定版 テクノロジー: Ollama (Llama 3.2) + Python サブプロセス プライバシー: 100% オフライン
コンセプトは「アーキテクト&インターン」¶
伝統的に、Aura は高速、正確、予測可能な決定論的ルール (RegEx) に依存しています。こちらは**「建築家」**です。ただし、ユーザーは 「ジョークを教えてください」 や 「このテキストを要約してください」 など、「あいまいな」質問や創造的な質問をしたい場合があります。
ここで ローカル LLM プラグイン (「インターン」) が登場します。
Aura (正規表現) は、最初にすべての厳密なコマンド (「ライトをオンにする」、「アプリを開く」) をチェックします。
AND/ OR に一致するものがない場合、特定のトリガー ワード (例: 「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」の正規表現を変更してください。
真のキャッチオールの例 (Aura が知らないすべて):
r'^(.*)$'(注意: スコアを調整してください!)
モデルの交換¶
ask_ollama.py 内のモデルを簡単に交換できます (たとえば、より複雑なロジックの場合は mistral に切り替えることができますが、より多くの RAM が必要になります)。
cmd = ["ollama", "run", "mistral", full_prompt]
システムプロンプト (ペルソナ)¶
system_instruction を調整することで、Aura に個性を与えることができます。
「あなたは SF 映画の皮肉たっぷりなアシスタントです。」
⚠️ 既知の制限事項¶
レイテンシ: ブート後の最初のリクエストでは、モデルが RAM に読み込まれるまでに 1 ~ 3 秒かかる場合があります。後続のリクエストは高速になります。
競合: 正規表現が広すぎる (
.*) 場合、適切なフォルダー構造がなければ、標準コマンドを飲み込んでしまう可能性があります。アルファベット順 (z_...) は必須です。ハードウェア: 約 1 個のハードウェアが必要です。 Llama 3.2 用の 2GB の空き RAM。