Skip to content

全体構成と責務 ​

PDF Agent Stack は、互いに依存しない 4 つの MCP サーバーと、それらを呼ぶ順番と結果の読み方を決める 3 つの Skill で構成されます。各 MCP は単独で動きます。

全体構成 ​

図中の形は要素の種別を表します(→ 図の読み方)。

エージェントは MCP を直接呼んでもよいですし、Skill を入れてもかまいません。Skill を入れると、複数の MCP をどの順に呼び、返ってきた判定をどう読み、どの形式のレポートにまとめるかが決まります。

外部依存は 2 つだけです。pdf-spec は仕様 PDF のコーパス(手元に集めた仕様原文の束。再配布不可のため同梱しない)を、pdf-verify は PDF/A・PDF/UA の判定を委ねる veraPDF を必要とします。reader と writer は外部に依存しません。

4 層モデル — どの Skill がどの MCP を呼ぶか ​

層サーバー返すものやらないこと
正典(= 判定の基準となる規格の原文)pdf-spec規格条文・要求事項(shall/should/may)検証対象の PDF を開かない(読むのは自分の仕様コーパスだけ)。準拠判定しない
実体(= ファイルに実際に入っているもの)pdf-reader観測結果(テキスト・構造・署名フィールド)合否を言わない。暗号検証しない
真正性・準拠性pdf-verify判定(署名・改ざん・PDF/A・PDF/UA・4 値ポリシー)規格どおりであることは証明しない — 条文に反する箇所を見つけることしかできない
生成pdf-writer新規・編集済み PDF署名しない。ラベルは書けるが規格どおりにはできない

境界ルール(1 行) ​

ISO 規格等に照らした compliant / valid / pass-fail を返すなら verify、観測を返すだけなら reader。

宣言・準拠・検証の三区別 ​

PDF Agent Stack のすべてのツールと Skill が、この 3 つを区別して書き分けます。

  • 宣言 (declaration) — ファイルが自分で書いたラベル。「私は PDF/A です」とメタデータに書いてあるだけ。書いてあることは、証拠にならない
  • 準拠 (conformance) — 規格どおりであること。全部を証明する手段はなく、条文に反する箇所を見つけることしかできない
  • 検証 (validation) — 検証器(veraPDF など)が、自分の持っている検査項目で見た結果。パスは「この検査では落ちなかった」であり、規格に準拠している、ではない

したがって writer の ensure_pdfa は XMP に宣言を書くツールであり、書いたあとは必ず verify の validate_conformance で測ります。

検証器の出力は証拠ではなく判定です ​

外部の設計論では、「証拠(何を見たか)」の例として「検証器の出力」「署名検証」を挙げることがあります。PDF Agent Stack ではこの 2 つを分けます。

誰が出すか例
観測 (証拠)readerXMP に pdfaid の宣言がある。増分更新が 2 回ある。文書内に失効情報が無い
判定verifyuse_with_caution。firedRules は POL-CAUTION-REVOCATION-UNKNOWN

veraPDF の結果も観測ではありません。「veraPDF がこのプロファイルで違反を報告しなかった」は観測ですが、それを受入プロファイルに照らして値にするのは evaluate_policy です。

次の 3 行は別のことを言っています。混ぜると、一番下だけが残ります。

  • 観測: XMP に PDF/A の宣言があり、veraPDF が当該プロファイルで違反を報告しなかった
  • 判定: この検査では落ちなかった(use_with_caution。検査項目の外は測っていない)
  • 誤った要約: PDF/A に準拠している

4 値を 3 値にまとめると何が消えるか ​

evaluate_policy の値は 4 つです。yes / no / unknown の 3 値にまとめると、次の 2 行が消えます。

4 値3 値にまとめると消えるもの
trust_and_useyes—
use_with_cautionyes用途制限。留意事項付きで使う、が「そのまま使える」になる
human_review_requiredunknown「証拠が無い」と「基準が書けない」の区別。後者が人に届かなくなる
rejectno—

3 行目が要点です。human_review_required は「判定に必要な事実が欠けている」と「基準が書けない領域」の両方を受けます。unknown の 1 値にまとめると、後者が「事実を足せば解決する項目」として扱われ、いつまでも人に回りません。3 値からは 4 値に戻せません。

受け取る PDF と作る PDF は、どちらも verify を通る ​

全体構成図の 3 本の入力のうち 2 本(受け取った PDF / 作りたい PDF)は、最後に pdf-verify の判定を受けます。

入力Skill流れreject のとき
受け取った PDFpdf-trust監査 → 4 値判定 → 利用・保存使わない。Trust Report に理由を書く
作りたい PDFpdf-publishwrite → read-back → verify(品質ゲート) → 納品納品しない。Publish Report に理由を書く

3 本目の入力(読みたいだけの PDF)は verify を通りません。pdf-read が読み方を選び、読んだ範囲と読めなかった箇所を Read Report に書きます。受け入れるかどうかも納品するかどうかも決めないので、verify の判定は要りません。

4 値判定(trust_and_use / use_with_caution / human_review_required / reject)は evaluate_policy のルールエンジンが返します。決定論的、つまり同じ入力なら常に同じ結果です。LLM が書くのは、その判定の説明と推奨アクションだけで、判定そのものを LLM は変えません。

言い切り強度(T1/T2/T3) ​

検証結果を「準拠している」と断定できるか、検証器の判定文を引くだけにとどめるかは、規格の原文が手元にあるかで変わります。この等級を言い切り強度と呼びます。

Tier規格言える強さ
T1ISO 32000-1/-2, ISO 14289 (PDF/UA)条文を引用して言い切る
T2ISO 19005 (PDF/A)「veraPDF が COMPLIANT と判定した」とだけ言う
T3ETSI PAdES構造の観測として「B-LT 相当の構造」と言う。準拠とは言わない

本サイトの文章もこのルールに従って書かれています。

MIT Licensed