Skip to main content
Glama

trigsight

自分の仕事に対して、証明できない主張を一切行わないAIアシスタント。

生成されるすべての事実的主張は、ビルド時に、それを裏付ける正確な文に結び付けられる。引用をクリックすると、ソースページがその文までスクロールし、ハイライトされる。引用した箇所がソース文書に存在しないならば、ビルドは失敗する——検証できない主張は出荷できないのだ。

なぜこれがあるのか

ポートフォリオ用チャットボットは、作者の能力について主張を行う。読者にはそれを検証する手段がなく、検証しないのにはそれなりの理由がある。一般的なAI検索の引用誤り率は60%を超え、生成された文のうち引用元に完全に裏付けられているのはわずか51.5%しかない。そのため主張は割り引かれ、機能もただの飾りになる。

よくある修正方法は、モデルをコーパスに接地して祈ることだ。それで幻覚は減るが、検証にはならない。読者は、まるごと1ページ分のリンクだけを渡され、特定の主張の裏づけとなっている箇所を探さなければならない。

この仕組みは、信頼のモデルを逆転させる。モデルは決してリンクを書かない。モデルはある箇所を指定する。ビルドがそれを「文書が実際に述べていること」の索引と突き合わせて解決するか、あるいは出荷を拒否するかだ。

Related MCP server: footnote

計測結果

比較対照のポートフォリオ

trigsight

Lighthouse パフォーマンス(モバイル)

62

100

アクセシビリティ · ベストプラクティス · SEO

100 · 100 · 100

100 · 100 · 100

Largest Contentful Paint

3.9 s

1.9 s

Total Blocking Time

1,540 ms

~20 ms

初期 JavaScript(brotli)

380.9 KB

133.9 KB

WebGL シーン

なし

搭載済み

ソースと照合された引用数

—

34 / 34

JavaScriptは2.8分の1、それでいて3Dシーンは動作したままだ。どちらの数字も、デプロイされたサイトズからの実測の配線を走るbrotli転送量であり、同じ計測ハーネス(bench/baseline/measure-payload.sh)で3回ずつ測り取った。ふたつの側面を別々の方法で測ると3.4倍とオーバーステートになる理由は、docs/05-results.mdを参照のこと。

検索性能、手書きの30本のゴールデンクエリ、k=5:

設定

recall@5

MRR

語彙のみ(BM25)

0.933

0.729

ハイブリッド(BM25 + ローカル代用、RRF k=60)

0.967

0.831

ハイブリッド(BM25 + 実際の埋め込み)

0.967

0.889

実際の埋め込みは、text-embedding-3-small、1536次元、コサイン距離で、Upstash Vector経由。3回同じ条件で実行した。変わったのはここだ:再現率は上がっていないが、順位は上がっている。 このコーパス規模では、実際の埋め込みは単純に関連性の高いチャンクをより多く見つけているのではなく、見つけたものを上に持ってきている——上位6件だけがモデルに渡るので、これこそが重要な指標である。

もしもこの保証がどう働くか

flowchart TB
  subgraph build["BUILD"]
    MDX["content/*.mdx"] --> N["normalise: collapse whitespace, casefold"]
    N --> IDX["passage index"]
    IDX --> VER{"every cited passage present exactly once?"}
    VER -->|no| FAIL["EXIT 1 — build fails"]
    VER -->|yes| OK["allowlist.json"]
  end
  subgraph run["REQUEST"]
    Q["question"] --> R["hybrid retrieve: BM25 + vector, RRF"]
    R --> M["model"]
    M -->|emits a cite token| RES{"in allowlist?"}
    OK --> RES
    RES -->|yes| CHIP["chip with text-fragment deep link"]
    RES -->|no| DROP["dropped"]
  end

モデルにはURLを生成する仕組みが存在しない。だから、誤ったURLを生成することも、存在しえない。「プロンプトの指示はお願いである」のに対し、「欠けている能力」は項も変わらない真実である。

見た目より難しかった部分

ブラウザの#:~:text=マッチングは、レンダリング済みのテキストに対して行われ、ディレクティブのそれぞれの部品が単一の要素の中に収まっていなければならない。これに原因する現実のデバッグを費やした帰結が以下のとおりである:

  • 生のソースに対して比較すると、ブラウザが問題なく見つけられる7つのパッセージのうちの3つが失敗する。改行をまたいだパッセージ、空白が畳まれているパッセージ、大文字と小文字が異なるパッセージが該当する。偽の失敗を出し測るシバリは、人から「これを無効にしよう」と思わせる。

  • インラインのマークアップをまたいだパッセージは、複数のDOMノードに分かれて描画されるため、フラット化後のテキストは含んでいいても、どうしても一致マッチしない。シフトしているのに実用上は一致不能だった先行が34件中2件あった。検出に成功したのは、ビルド済みのページをすべて取得し、そのテキストを検索して初めてのもだ。

この両方はいま都度、回帰テストとして強制している。検証器はまた、各パッセージが厳密ただ1回だけ出現することも要求し、きちんと1回でなければプレフィックスをつけて曖昧さを解消する。それがないと、ブラウザは静かに誤った出現位置ままスクロールしてしまう。これは成功に見えかえって誤ってしまう正当性バグだ。

クイックスタート

npm ci
npm run dev          # http://localhost:3000

認証は一切不要。AI_GATEWAY_API_KEYが無ければ、チャット・エンドポイントがは回答の代わりに取得済みの文脈を返す。したがって、検索機能を単体で試すことも可能だ。

上記の主張を自分で検証する

npm run verify:citations                 # the gate: exits 1 on any unbound claim
npx tsx bench/citations/verify.ts --demo # watch it reject a fabricated passage
npm run eval:retrieval                   # recall@5 and MRR over the golden set
./bench/payload/measure.sh 3990 150      # initial JS against the budget
npm test                                 # 91 tests

上の数字は、すべてこれらに由来する。bench/はコミットされつづけ、gitignoreされることも一切ない。コミットされていないハーネスは、実測の結果を検証不能な主張へと成り下がれてしまう。

MCP サーバー

POST /api/mcp — ステートレスなStreamable HTTP、仕様2026-07-28。説明用ツールではなく、読み取り専用の検証ツールを、次の4つを提供する:

ツール

これは返す物

list_work

検証済みかどうかフラグ付きメトリックと共に、文書化されている内容

find_evidence

ある主張を支えるパッセージが出か、それとも単に出てきた何もないのか。

check_stack

ある技術が散文内で論じられているか、それともスタックに掲載されているだけかを正しく

read_work

1 ケーススタディーの全文

find_evidenceは元のやつ、*"イオントラップを使った量子暗号研究"*という言い分をそのまま確認していた。ベクトル腿は最近傍探索である:どれだけ無関係でも、常に最も近いチャンクが返る。それを信じたエージェントは、信じ「捏造された経歴」をそのまま繰り返す。現在は、真に語彙が重なることを要求し、手書きの主張セットに対して正陽率8/10・偽陰性0/6になるように較正している。

制限・限界

はつまり書く。なぜなら、マーケティングみたいに読める制約のセクションは、無意味だからだ。

  • 語彙のみからの差は、クエリ1つ分しかない。 34チャンク・30ゴールデンクエリでは、1クエリがrecall 0.033ぶんにあたる。つまり、語彙処理とハイブリッドの間のrecall差 0.034 は、たった1つのクエリ相当なのだ。この表は「ハイブリッド全般に優りる」と読まないこと。このコーパスで、ハイブリッドはある点で劣らず、順位だけが良い、ということを示している。

  • 私の予測の1つは裏切られた、しかもその理由には教訓がある。 私は本当の埋め込みを使えば、あともう1本のクエリも取れると予測していた。それをはしなかった。ベクター腿を単体で検査してみると、正しいチャンクはそれがベスト5にすら入らない。このチャンクは1,340文字で5つの話題をかかえており、答えはその中の871文字分の前提節でしかないのに。そのチャンクの1つのベクターとは、5つのアイデアの平均、というだけである。これはチャンク分割の問題であり、埋め込みの問題ではないので、どんなモデルも修正だけれない。今チャンク分割を変えると、この表を存在させている比較を壊してしまう。だから修正となずけたっ、ちゃんと記録として残み。bench/retrieval/results/real-embeddings-2026-08-21.mdを参照よ。

  • 認証情報がなければ、ベクター腿は決定論的な代替=Vライドに退化してしまう。 これはセマンティック・モデルない。検索はそれでもBM25で答えるが、品質は確かに下がる。ハーネスは毎回の実行でバックエンドを名指しするため、どの数も、バックエンド名抜きでは語言てきしない。

  • テキストフラグメントは故意に脆い。 引用した文を言いba通すと、そのリンクが壊れる。それこそがビルドゲートの意味だ——壊れたままで出荷できない——だが、散文を編集して引きがながることも当然ある、というです。

  • 引用は一つのブロック要素の中に収まっている必要がある。 テーブルの行と段落の両方にまたがって初めて支えられる主張は、単一のパッセージとして引用できない。

  • コーパスは小規模である(文書6件、チャンク34)。ここでの検索性能値は、大規模コーパスでの予測値だと思って解釈してはならない。

  • ストリーム中の引用解決には未対応。 チップはメッセージが完了して初めて描画され、帯で有効ではない。

スタック

Next.js 16.3.1 · React 19.2.8(固定——R3F 9 の peer は >=19 <19.3) · TypeScript · Tailwind v4.3.3 · Velite + Zod · three 0.185.1 + R3F 9.7.0(固定) · Vercel AI Gateway

ライセンス

MIT — LICENSEを参照。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables per-claim citation verification for AI-generated text by fetching cited sources and judging whether they support the claim, with verdicts and evidence quotes.
    52 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to verify their own output mid-task by checking every claim against provided sources, returning supported, partial, unsupported, or contradicted verdicts with exact citations.
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables revision-bound source audits with exact article fingerprinting, claim-to-source mapping, quotation verification, and immutable JSON evidence reports for prepublication review.
    9
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to create verifiable, replayable citations, search private knowledge bases, and publish Markdown with verified citation markers.
    MIT