パイプライン
- Markdown を IR に解析(
markdownToIR)- プレーンテキストとスタイルスパン (太字、斜体、取り消し線、コード、コードブロック、スポイラー、引用ブロック、 見出し 1~6)、およびリンクスパン。オフセットは UTF-16 コード単位なので、Signal のスタイル 範囲をその API に直接合わせられます。テーブルは、チャネルが テーブルモードを有効にした場合のみ解析されます。 - IR をチャンク分割(
chunkMarkdownIR/renderMarkdownIRChunksWithinLimit)- 分割はレンダリング前の IR テキストに対して行われるため、インラインスタイルと リンクは境界をまたいで分断されず、チャンクごとに切り分けられます。
- チャネルごとにレンダリング(
renderMarkdownWithMarkers)- スタイルマーカーのマップが スパンをチャネルのネイティブマークアップに変換します。
IR の例
入力 Markdown:テーブルの処理
markdown.tables は、チャネルが Markdown テーブルを変換する方法を、チャネルごと、
必要に応じてアカウントごとに制御します。
チャネル別 Plugin のデフォルト:Signal、WhatsApp、Matrix のデフォルトは
bullets、Mattermost のデフォルトは off、Telegram のデフォルトは block です(アカウントで
richMessages が有効でない限り、code に解決されます)。明示的な Plugin のデフォルトがない
チャネルは code にフォールバックします。
チャンク分割のルール
- チャンク制限はチャネルアダプター/設定から取得され、レンダリングされた出力ではなく IR テキストに適用されます。
- フェンス付きコードブロックは、チャネルが終了フェンスを正しくレンダリングできるよう、 末尾の改行を含む 1 つのブロックとして維持されます。
- リストと引用ブロックの接頭辞は IR テキストの一部であるため、チャンク分割によって 接頭辞の途中で分断されることはありません。
- インラインスタイルがチャンク間で分断されることはありません。レンダラーは、次のチャンクの 先頭で継続中のスタイルを再開します。
リンクポリシー
- Slack:
[label](url)→<url|label>。裸の URL はそのまま維持されます。 - Telegram:
[label](url)→<a href="url">label</a>(HTML 解析モード)。 - Signal: ラベルがすでに URL と一致している場合を除き、
[label](url)→label (url)。
スポイラー
スポイラーマーカー(||spoiler||)は Signal(SPOILER の
スタイル範囲にマッピング)と Telegram(<tg-spoiler> にマッピング)で解析されます。その他のチャネルでは、
||...|| はプレーンテキストとして扱われます。
チャネルフォーマッターの追加または更新
- チャネルに適したオプション(
autolink、headingStyle、blockquotePrefix、tableMode)を渡し、markdownToIR(...)で一度だけ解析します。 - スタイルマーカーのマップ(または
Signal のようなトランスポート向けのカスタムスタイル範囲ロジック)と
renderMarkdownWithMarkers(...)でレンダリングします。 - 各チャンクをレンダリングする前に、
chunkMarkdownIR(...)またはrenderMarkdownIRChunksWithinLimit(...)でチャンク分割します。 - 送信処理から新しいチャンク分割処理とレンダラーを呼び出すよう、アダプターを接続します。
- チャネルがチャンク分割を行う場合は、書式テストと送信配信テストでテストします。
よくある落とし穴
- Slack の山括弧トークン(
<@U123>、<#C123>、<https://...>)は エスケープ後も維持する必要があります。生の HTML も引き続き安全にエスケープする必要があります。 - Telegram HTML では、マークアップの破損を避けるため、タグ外のテキストをエスケープする必要があります。
- Signal のスタイル範囲は、コードポイントのオフセットではなく UTF-16 オフセットを使用します。
- 終了マーカーが独立した行に配置されるよう、フェンス付きコードブロックの末尾の改行を維持します。
関連項目
ストリーミングとチャンク分割
送信ストリーミングの動作、チャンク境界、チャネル固有の配信。
システムプロンプト
挿入されたワークスペースファイルを含め、会話の前にモデルが参照する内容。