メインコンテンツまでスキップ

Asgard の組み込みヘルパー

Asgard は Handlebars のテンプレート機構向けに 8 つのヘルパーを提供しています。

📖 Handlebars の基礎
構文そのものについては、まず Handlebars 公式ガイドを読むとよいでしょう。

対話履歴​

history​

指定した索引の範囲で、チャネルの対話履歴を返します。

{{{history 0 2}}}
<!-- 索引 0、1、2 の 3 件を返します -->
{{{history -3 -1}}}
<!-- 末尾から 3 件を返します -->
{{{history 0 -1}}}
<!-- すべてを返します -->

引数:

  • start: 開始位置。0 から始まり、負の値は末尾からの数え方です
  • end: 終了位置。その位置を含みます。負の値は末尾からの数え方です

historySize​

チャネルの対話履歴の件数を返します。

{{{historySize}}} <!-- 出力: 5 -->

データ処理​

toJson​

任意の値を JSON の文字列に変換します。

{{{toJson user}}} <!-- user オブジェクトを JSON 文字列にします -->

urlEncode​

文字列を URL エンコードします。

{{{urlEncode 'hello world'}}}
<!-- 出力: hello%20world -->
{{{urlEncode searchQuery}}}
<!-- 変数を URL エンコードします -->

xpathExtract​

XPath で XML 文書から値を取り出します。

{{{xpathExtract xmlData '/root/item'}}}

引数:

  • xml: XML 文書
  • path: XPath のクエリ

例:

<!-- 入力の XML: <root><item>1</item><item>2</item></root> -->
<!-- 出力: 1\n2 -->

vecToStr​

ベクトルの配列を文字列に変換します。

{{{vecToStr vector '{' '}' ','}}} <!-- [1,2,3] → {1,2,3} -->

引数:

  • vector: ベクトルの配列
  • prefix: 先頭の文字
  • suffix: 末尾の文字
  • delimiter: 区切り文字

日付と時刻​

isoNow​

指定したタイムゾーンの現在の日時を RFC3339 形式の文字列で返します。

{{{isoNow 'Asia/Taipei'}}} <!-- 2025-05-27T01:08:44+08:00 -->

isoToday​

指定したタイムゾーンの現在の日付を RFC3339 形式の文字列で返します。

{{{isoToday 'Asia/Taipei'}}} <!-- 2025-05-27 -->

実用例​

システム状態のレポート​

🤖 システム状態 -
{{{isoNow 'Asia/Taipei'}}}

📊 対話の件数: {{{historySize}}}
件 📝 直近の対話:
{{{history -3 -1}}}

🔧 システム設定:
{{{toJson systemConfig}}}

API 照会の処理​

🔍 照会: {{{urlEncode searchTerm}}}
📄 XML の結果: {{{xpathExtract responseXml '//result/item'}}}
🔢 ベクトル: {{{vecToStr embeddings '[' ']' ','}}}
⏰ 処理時刻: {{{isoNow 'Asia/Taipei'}}}

実践のポイント​

  1. 対話履歴: 文脈を踏まえた応答には history と historySize を使います
  2. 安全性: URL に入る値は必ず urlEncode を通します
  3. タイムゾーン: タイムゾーンは明示的に指定します
  4. JSON: 妥当な JSON を出力するために toJson を使います
  5. XML: XPath の構文が正しいことを確認します
  6. ベクトル: 受け取り側に合わせた区切り文字を選びます

これらのヘルパーにより、Handlebars テンプレートの中で対話履歴、データ変換、整形を扱えます。