コンテンツにスキップ
Zenn Dev Karaage0703 Articles 89631872ca5a86

ローカルLLM用の簡易版スキルとしてトリガーという機能を考えてみました

  • URL: https://zenn.dev/karaage0703/articles/89631872ca5a86
  • 日付: 2026-06-26
  • Tier: Tier 3
  • 要旨: ローカルLLMがAgent Skillsをうまく扱えない問題への対処として、triggersディレクトリにシェルスクリプトを置くだけでLLMにカスタムツールを追加できる「トリガー」機能を自作AIアシスタントフレームワークxangiに実装した提案記事だ。スキルとFunction Callingの中間的な位置づけで、trigger.yamlで名前・説明・実行スクリプトを定義し、LLMがユーザー入力に応じてFunction Callingでシェルスクリプトを呼び出し、stdoutをLLMに返して自然言語で応答する仕組みだ。天気予報やテックニュース取得などのシェルスクリプト実例も示されている。Qwen3.6-35B-A3Bの性能向上でスキルが直接使えるようになりつつあるとも言及しており、低性能LLMのツール活用策としての位置付けが明確だ。

詳細

トリガーの動作フロー

  1. xangi起動時にワークスペースのtriggers/をスキャンしてツール定義を自動生成
  2. LLMにカスタムツールとして登録(Function Calling経由)
  3. ユーザー入力に応じてLLMがトリガーを呼び出す
  4. handler.shが実行され、stdoutがLLMに返される
  5. LLMが結果を踏まえて自然な文章で応答

ディレクトリ構成 workspace/triggers/{trigger-name}/trigger.yaml + handler.sh

trigger.yamlのフィールド

  • name(必須): ツール名(LLMがFunction Callingで呼ぶ名前)
  • description(任意、具体例を含めて書くと精度向上): ツールの説明
  • handler(必須): 実行スクリプトのファイル名

handler.shの仕様

  • cwd=ワークスペースルートでbash handler.sh [引数...]実行
  • 引数はLLMのFunction Callingがargsとしてスペース区切りで渡す
  • stdoutがLLMへの返り値

実例

  • 天気予報: curl -s "wttr.in/${1:-Tokyo}?format=3&lang=ja"
  • テックニュース: RSSをcurlで取得してPython+xml.etree.ElementTreeで上位5件をパース(uv runで仮想環境不要)

スキルとの比較

  • トリガー: 確実な再現性、低い柔軟性
  • スキル: 高い柔軟性、高性能LLM必要
  • トリガーはスキルとFunction Callingの中間的な仕組み

xangiのDocker quickstart

  • git clone https://github.com/karaage0703/xangi.git && cd xangi && ./quickstart.sh
  • デフォルトはGemma4:26b、localhost:18888でブラウザからアクセス可能