Skip to main content
Glama

trigsight

ИИ-ассистент, который не может сделать заявление о моей работе, которое не может доказать.

Каждое фактическое утверждение, которое он выдаёт, привязано на этапе сборки к точному предложению, которое его подтверждает. Клик по цитате прокручивает страницу источника к этому предложению и выделяет его. Если цитируемый отрывок не существует в исходном документе, сборка завершается ошибкой — непроверяемое утверждение не может быть выпущено.

Зачем это существует

Портфолио-чатботы делают заявления о компетентности своего автора. У читателя нет способа их проверить, и есть веские причины не пытаться: измеренные показатели ошибок цитирования для общего ИИ-поиска превышают 60%, и только 51,5% сгенерированных предложений полностью подтверждаются цитируемыми источниками. Поэтому заявления обесцениваются, и функция становится украшением.

Обычное решение — ограничить модель корпусом и надеяться. Это помогает с галлюцинациями, но не с проверкой — читатель всё равно получает ссылку на целую страницу и должен искать предложение, подтверждающее конкретное утверждение.

Это переворачивает модель доверия. Модель никогда не пишет ссылку. Она называет отрывок; сборка сопоставляет его с индексом того, что документы на самом деле говорят, или отказывается выпускать.

Related MCP server: CiteGuard

Измеренные результаты

Сопоставимое портфолио

trigsight

Производительность Lighthouse (мобильная)

62

100

Доступность · Лучшие практики · SEO

100 · 100 · 100

100 · 100 · 100

Крупнейшая отрисовка контента

3.9 s

1.9 s

Общее время блокировки

1,540 ms

~20 ms

Начальный JavaScript (brotli)

380.9 KB

133.9 KB

Сцена WebGL

нет

в производстве

Цитаты проверены по источнику

34 / 34

2.8× меньше JavaScript с работающей 3D-сценой. Обе цифры — реальная передача brotli по сети с развёрнутых сайтов, измеренная одним и тем же харнессом (bench/baseline/measure-payload.sh), по три запуска каждый — см. docs/05-results.md о том, почему измерение двух сторон разными способами завышало это до 3.4×.

Поиск, 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. Три идентичных запуска. Обратите внимание, что изменилось: полнота не улучшилась, ранжирование улучшилось. При таком размере корпуса реальные эмбеддинги не находят более релевантные фрагменты, они ранжируют найденные выше — а это метрика, которая имеет значение, поскольку до модели доходят только первые шесть.

Как работает гарантия

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, поэтому она не может создать неправильный. Инструкции в промпте — это просьба; отсутствующая возможность — это инвариант.

Часть, которая оказалась сложнее, чем кажется

Браузер, сопоставляющий #:~:text=, сравнивает с отрисованным текстом, и каждая часть директивы должна находиться внутри одного элемента. Два следствия, которые стоили реальной отладки:

  • Сравнение с исходным кодом не проходит для 3 из 7 отрывков, которые браузер сопоставляет нормально — отрывки, пересекающие новую строку, содержащие схлопнутые пробелы или отличающиеся регистром. Верификатор, который выдаёт ложные сбои, приучает вас отключать его.

  • Отрывок, охватывающий встроенную разметку, отображается как отдельные DOM-узлы и не может быть сопоставлен вообще, даже если уплощённый текст его содержит. Две из 34 цитат были в таком состоянии: сообщалось как привязанные, но на практике не сопоставимые. Обнаружено только при загрузке каждой собранной страницы и поиске её текста.

Оба теперь применяются, с регрессионными тестами. Верификатор также требует, чтобы каждый отрывок встречался ровно один раз, устраняя неоднозначность с помощью префикса, если это не так — иначе браузер молча прокручивает к неправильному вхождению, что является ошибкой корректности, которая выглядит как успех.

Быстрый старт

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/ закоммичен и никогда не игнорируется — незакоммиченный харнесс превращает реальный результат в непроверяемое утверждение.

MCP-сервер

POST /api/mcp — stateless Streamable HTTP, спецификация 2026-07-28. Четыре инструмента проверки только для чтения, а не инструменты описания:

Инструмент

Ответы

list_work

Что задокументировано, с метриками, помеченными как проверенные или нет

find_evidence

Какие отрывки подтверждают утверждение — или прямо, что никакие

check_stack

Обсуждается ли технология в прозе или просто перечислена в стеке

read_work

Полный текст одного кейса

find_evidence изначально подтверждал "исследования квантовой криптографии на ионных ловушках". Векторная часть — это поиск ближайших соседей: она всегда возвращает ближайшие фрагменты, какими бы несвязанными они ни были. Агент, потребляющий это, повторил бы сфабрикованное удостоверение. Теперь требуется реальное лексическое совпадение, откалиброванное на 8/10 истинно положительных и 0/6 ложных положительных результатов на наборах утверждений, написанных вручную.

Ограничения

Сказано прямо, потому что раздел ограничений, который читается как маркетинг, бесполезен.

  • Запас над лексическим подходом — один запрос. При 34 фрагментах и 30 золотых запросах один запрос стоит 0,033 полноты — так что разрыв в полноте 0,034 между лексическим и гибридным — это один запрос. Не читайте таблицу как доказательство того, что гибрид в целом лучше. Она показывает, что гибрид не хуже и ранжирует лучше на этом корпусе.

  • Мой прогноз оказался неверным, и причина поучительна. Я предсказал, что реальные эмбеддинги исправят единственный пропущенный запрос. Они не исправили. Проверка векторной части в изоляции показала, что правильный фрагмент никогда не попадает в её топ-5 — потому что этот фрагмент состоит из 1 340 символов, охватывающих пять тем, а ответ — одно предложение из 871 символа. Его единственный вектор — это среднее пяти идей. Это проблема чанкинга, а не эмбеддингов, и никакая модель её не исправит. Зафиксировано, а не исправлено, потому что изменение чанкера сейчас аннулировало бы сравнение, ради которого существует таблица. См. bench/retrieval/results/real-embeddings-2026-08-21.md.

  • Без учётных данных векторная часть деградирует до детерминированной замены, которая не является семантической моделью. Поиск всё ещё отвечает через BM25, но качество действительно ниже — харнесс называет бэкенд при каждом запуске, чтобы число никогда не цитировалось без него.

  • Текстовые фрагменты хрупки по своей природе. Переформулировка цитируемого предложения ломает его ссылку. В этом суть шлюза сборки — вы не можете выпустить поломку — но это означает, что редактирование прозы иногда требует обновления цитаты.

  • Цитаты должны находиться внутри одного блочного элемента. Утверждение, которое лучше всего подтверждается текстом, охватывающим строку таблицы и абзац, не может быть процитировано как единый отрывок.

  • Корпус мал (6 документов, 34 фрагмента). Числа поиска здесь не следует читать как прогнозы для большого корпуса.

  • Нет потокового разрешения цитат. Чипы отображаются после завершения сообщения, а не в середине потока.

Стек

Next.js 16.3.1 · React 19.2.8 (закреплено — R3F 9 требует >=19 <19.3) · TypeScript · Tailwind v4.3.3 · Velite + Zod · three 0.185.1 + R3F 9.7.0 (закреплено) · Vercel AI Gateway

Лицензия

MIT — см. LICENSE.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes a public, read-only professional profile with tools to search resume evidence, fetch curated links, and generate career briefs for LLM agents.
    MIT
  • 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.
    75
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables defining and verifying evidence contracts for claims in READMEs, releases, or product pages using constrained verifiers and generating hash-chained receipts and reports.
    23
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables traceable scholarly literature reviews using free APIs, generating reports where every claim links to evidence IDs.
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Raghu23-dev/trigsight'

If you have feedback or need assistance with the MCP directory API, please join our Discord server