Rust 命令行工具和库  /  MIT

找出模型没把握的词。

把带有 token 对数概率(logprobs)的 LLM 回答交给它。它会标出模型置信度下降的词,并显示模型差点说出口的其他候选。既可以离线分析保存下来的响应,也可以实时调用任何 OpenAI 兼容 API。

cargo install llm-token-visualizer

下载 Windows 版 (.exe)

已安装 Rust 的话,也可以用上面的命令。macOS 和 Linux 版本请到最新发布页下载。

被标出的片段,以及模型考虑过的候选

以上是 Llama 3.1 8B Instruct 的真实响应,收录在 examples/logprobs/ 中。检测在你的浏览器里运行,规则与 CLI 完全相同;鼠标悬停或点按任意词,即可查看它的概率和候选词。也可以用 OpenAI、OpenRouter 或 Together 的密钥,直接在浏览器里问你自己的问题。

在终端中使用

一条命令,无需 API 密钥。

指向一个保存好的 Chat Completions 响应即可。回答会以热力图显示,每个被标出的片段都会列出其最弱 token 处的候选词;加上 --fail-on-flag,它就成了 CI 关卡。

cuyp 示例的终端输出:回答中 Aelbert 和 Dordrecht 带下划线,下方是候选词的条形图:A 0.49、The 0.43、D 0.08,以及 ord 0.57、üsseldorf 0.39、elf 0.03。
llm-token-visualizer --logprobs-file examples/logprobs/cuyp.json --threshold 0.6
git clone https://gitlab.com/mattbusel/LLM-Hallucination-Detection-Script
# offline, on a bundled real response
cargo run -- --logprobs-file examples/logprobs/cuyp.json --threshold 0.6

# all four samples through the library API
cargo run --example detect

# live: ask a model, analyze its answer
export OPENAI_API_KEY=sk-...
cargo run -- --live "Who was the second person to walk on the Moon?" \
  --save answer.json

实时模式内置预设:--provider openai、openrouter、together、vllm 或 ollama(本地运行,无需密钥)。其他任何返回 logprobs 的服务器都可以通过 --base-url 使用。Anthropic 的 API 不返回 logprobs。

工作原理

四条规则,不依赖额外模型。

不用第二个 LLM,不用向量嵌入,离线模式下也不发任何网络请求。只是仔细读懂模型本来就给你的那些数字。

动画示意图:真实 Llama 3.1 回答中的每个 token 得到 p = e^logprob,并按从红到灰着色;token 拼成词,含有低于 0.6 阈值 token 的词会被标出(Aelbert p 0.49,Dordrecht p 0.57);每个被标出的片段列出模型考虑过的候选:The 0.43 和 üsseldorf 0.39。
它做不到的事

模型也会自信满满地答错。

token 概率低只是提示你该看哪里,并不是事实核查。下面这个示例回答是错的,而检测器没有发现。

错误的名字没有被标出

第二个登上月球的人是 Buzz Aldrin。模型给 Pete Conrad 的每个 token 的概率都至少是 0.72,而且在这些位置返回的前 3 个候选里都没有 Aldrin。

实际被标出的是什么

措辞用词。标记只用来决定先看哪里,绝不能用来证明回答正确。

输出格式

终端、HTML、Markdown、JSON。

同一份报告,按你的工作流需要的形式输出。四种格式都由 CLI 基于同一次检测生成。

--format html

单个自包含页面:没有脚本,没有外部资源,支持浅色和深色模式。鼠标悬停任意词即可查看候选。

eiffel 示例的深色模式 HTML 报告,含四个被标出的片段和概率条。
llm-token-visualizer --logprobs-file answer.json --format html -o report.html

--format markdown

可直接粘贴到 Pull Request、Issue 或 $GITHUB_STEP_SUMMARY 中。


      

--format json 和 --fail-on-flag

输出机器可读的片段;只要有内容被标出就以退出码 2 结束,流水线可以据此把回答转去人工审核。

llm-token-visualizer --logprobs-file answer.json \
  --fail-on-flag --format json -o report.json