llmxray 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.ar.md +305 -302
  2. package/README.fr.md +301 -298
  3. package/README.md +301 -298
  4. package/README.sr.md +301 -298
  5. package/README.zh-CN.md +301 -298
  6. package/dist/assets/{AITrainingPage-BGxiNftI.js → AITrainingPage-E06gN8gf.js} +1 -1
  7. package/dist/assets/{AnalyticsPage-Ct-sjfwM.js → AnalyticsPage-DE1P_0ls.js} +1 -1
  8. package/dist/assets/BenchmarkPage-aPSp8X68.js +31 -0
  9. package/dist/assets/CacheLabPage-DK6ysPiC.js +3 -0
  10. package/dist/assets/{ComparisonPage-BnJNpxsl.js → ComparisonPage-B-TTYJzF.js} +1 -1
  11. package/dist/assets/{CostDashboardPage-B4NDxJsX.js → CostDashboardPage-uaU9LjEe.js} +1 -1
  12. package/dist/assets/{DashboardPage-BGQp7-l9.js → DashboardPage-i7XFboZS.js} +1 -1
  13. package/dist/assets/{EmbeddingsPage-VBfXkb7Z.js → EmbeddingsPage-BIj9zAA3.js} +1 -1
  14. package/dist/assets/{FimPlaygroundPage-DLoI_Bvm.js → FimPlaygroundPage-BQLvqvU_.js} +1 -1
  15. package/dist/assets/{GoogleCallbackPage-Cs3tBy_I.js → GoogleCallbackPage-eAe26FFg.js} +1 -1
  16. package/dist/assets/{JsonTreeNode-BSiw1fzq.js → JsonTreeNode-CWxvNXOX.js} +1 -1
  17. package/dist/assets/{ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-BEGN0dLS.js → ModelCapabilityIcons.vue_vue_type_script_setup_true_lang-B5ZTvJWj.js} +1 -1
  18. package/dist/assets/ProtocolObservatoryPage--sesoYfn.js +2 -0
  19. package/dist/assets/{RAGPage-CnnZW7un.js → RAGPage-CEwQVaIo.js} +1 -1
  20. package/dist/assets/SessionPage-BZ6kBsHI.js +15 -0
  21. package/dist/assets/SettingsPage-CnF1KHWK.js +1 -0
  22. package/dist/assets/{StatusBadge.vue_vue_type_script_setup_true_lang-DO0LFtqz.js → StatusBadge.vue_vue_type_script_setup_true_lang-BGo19Xph.js} +1 -1
  23. package/dist/assets/{StorageGauge.vue_vue_type_style_index_0_lang-BvYHZigP.js → StorageGauge.vue_vue_type_style_index_0_lang-CUFDMHxV.js} +1 -1
  24. package/dist/assets/{SystemPage-BEGyNOxu.js → SystemPage-B6rcHN5S.js} +2 -2
  25. package/dist/assets/{TabBar.vue_vue_type_script_setup_true_lang-BwHA1qGL.js → TabBar.vue_vue_type_script_setup_true_lang-C0hGnp0C.js} +1 -1
  26. package/dist/assets/{TokenStreamDisplay.vue_vue_type_script_setup_true_lang-DyRMkTKm.js → TokenStreamDisplay.vue_vue_type_script_setup_true_lang-CW2jbXwZ.js} +1 -1
  27. package/dist/assets/{ToolWorkshopPage-CNhpkdiG.js → ToolWorkshopPage-DmrV0xap.js} +1 -1
  28. package/dist/assets/{agent-store-Ak5tH3gE.js → agent-store--SqycFe6.js} +1 -1
  29. package/dist/assets/{canvas-ai-db-Bw1M5Zgc.js → canvas-ai-db-Da1vIVOq.js} +1 -1
  30. package/dist/assets/{download-DgBo5doZ.js → download-CUsL7GrM.js} +1 -1
  31. package/dist/assets/format-CKxSMkvr.js +1 -0
  32. package/dist/assets/{generate-service-D1KjeWIo.js → generate-service-BZdEHgFU.js} +1 -1
  33. package/dist/assets/{google-auth-store-Db6JKC8L.js → google-auth-store-DXrzgrLv.js} +1 -1
  34. package/dist/assets/{index-BM7fRtY0.js → index-BPkqt5Qe.js} +1 -1
  35. package/dist/assets/{index-aU4tMz4Z.css → index-C78FkuPP.css} +1 -1
  36. package/dist/assets/{index-YmhR__TY.js → index-C8P_C63i.js} +1 -1
  37. package/dist/assets/{index-S2vqeDf7.js → index-YRiA3BUj.js} +12 -12
  38. package/dist/assets/{info-47X0r1B2.js → info-DH8FG2G3.js} +1 -1
  39. package/dist/assets/{metrics-store-DzujlkfW.js → metrics-store-BCparPrV.js} +1 -1
  40. package/dist/assets/{papaparse.min-D0aQsTQw.js → papaparse.min-Dopi_5A-.js} +1 -1
  41. package/dist/assets/{pencil-B-eZ2Kq9.js → pencil-gkZEyblB.js} +1 -1
  42. package/dist/assets/{play-DT41vD7M.js → play-HRQny-4Y.js} +1 -1
  43. package/dist/assets/{rag-store-gqowRN8t.js → rag-store-D0yMVMjG.js} +3 -3
  44. package/dist/assets/{session-store-BO1u_qJQ.js → session-store-2bGNgO7a.js} +1 -1
  45. package/dist/assets/{share-2-IBretU3M.js → share-2-c3XzX2pt.js} +1 -1
  46. package/dist/assets/{square-CbKkOlNA.js → square-CqZgk1mI.js} +1 -1
  47. package/dist/assets/{storage-store-GsT1cPEh.js → storage-store-BLDOaasz.js} +1 -1
  48. package/dist/assets/stream-handler-BGYCTeOR.js +4 -0
  49. package/dist/assets/{tool-workshop-store-BLoF0Gob.js → tool-workshop-store-DBnJxusu.js} +1 -1
  50. package/dist/assets/{toolcall-store-BEFdRqL-.js → toolcall-store-CJSLkRLe.js} +1 -1
  51. package/dist/assets/{trash-2-BdlHNMOp.js → trash-2-DU091nIw.js} +1 -1
  52. package/dist/index.html +2 -2
  53. package/package.json +9 -1
  54. package/dist/assets/BenchmarkPage-q41YsHY8.js +0 -31
  55. package/dist/assets/ProtocolObservatoryPage-CgunJ_Wi.js +0 -2
  56. package/dist/assets/SessionPage-NE_x02_4.js +0 -15
  57. package/dist/assets/SettingsPage-DTpQIrlG.js +0 -1
  58. package/dist/assets/format-BqVZ9rwM.js +0 -1
  59. package/dist/assets/stream-handler-B5y5PItW.js +0 -4
package/README.zh-CN.md CHANGED
@@ -1,298 +1,301 @@
1
- <p align="center">
2
- <img src="https://raw.githubusercontent.com/LogneBudo/llmxray/master/public/favicon.svg" alt="LLMxRay" width="80" />
3
- </p>
4
-
5
- <h1 align="center">LLMxRay</h1>
6
- <p align="center"><strong>看清您本地 AI 的真实运行状态。</strong></p>
7
- <p align="center">
8
- 面向本地大语言模型的实时词元流、质量分析、性能剖析与成本跟踪。<br/>
9
- 无云端。无 API 密钥。无费用。
10
- </p>
11
-
12
- <p align="center">
13
- <a href="https://www.npmjs.com/package/llmxray"><img src="https://img.shields.io/npm/v/llmxray?color=cb3837&logo=npm&logoColor=white" alt="npm" /></a>
14
- <a href="https://hub.docker.com/r/djovaneli/llmxray"><img src="https://img.shields.io/docker/pulls/djovaneli/llmxray?color=2496ED&logo=docker&logoColor=white" alt="Docker" /></a>
15
- <img src="https://img.shields.io/badge/license-Apache%202.0-blue" alt="License" />
16
- <img src="https://img.shields.io/badge/ollama-local-000?logo=ollama&logoColor=white" alt="Ollama" />
17
- </p>
18
-
19
- <p align="center">
20
- 🌐 <a href="README.md">English</a> &bull;
21
- <a href="README.fr.md">Français</a> &bull;
22
- <strong>中文</strong> &bull;
23
- <a href="README.ar.md">العربية</a> &bull;
24
- <a href="README.sr.md">Srpski</a>
25
- </p>
26
-
27
- <p align="center">
28
- <a href="#快速开始">快速开始</a> &bull;
29
- <a href="#功能特性">功能特性</a> &bull;
30
- <a href="#界面截图">界面截图</a> &bull;
31
- <a href="#适用人群">适用人群</a> &bull;
32
- <a href="CHANGELOG.md">更新日志</a>
33
- </p>
34
-
35
- <p align="center">
36
- <img src="docs/public/screenshots/demo.gif" alt="LLMxRay 演示 — 带置信度着色的实时词元流" width="800" />
37
- </p>
38
-
39
- ---
40
-
41
- ## 快速开始
42
-
43
- **一条命令,30 秒搞定。**
44
-
45
- ```bash
46
- npx llmxray
47
- ```
48
-
49
- 或使用 Docker:
50
-
51
- ```bash
52
- docker run -p 5174:5174 djovaneli/llmxray
53
- ```
54
-
55
- 打开 **http://localhost:5174** 即可开始对话。就这么简单。
56
-
57
- > **前置条件:** 本地运行 [Ollama](https://ollama.com/download),并至少拉取一个模型(`ollama pull llama3.2`)。
58
-
59
- ---
60
-
61
- ## 为什么选择 LLMxRay?
62
-
63
- 您运行了一个本地大语言模型,与它对话,但实际发生了什么?
64
-
65
- - 每个词元生成有多快?模型对哪些词元更有信心?
66
- - 长对话中响应质量是否在下降?
67
- - 如果在云端运行,这次对话要花多少钱?
68
- - 模型是否在重复自己?拒绝回答?生成乱码?
69
- - 在**相同提示**下,温度 0.3 与 0.9 有何区别?
70
-
71
- **LLMxRay 用可视化方式实时免费回答以上所有问题。**
72
-
73
- ---
74
-
75
- ## 功能特性
76
-
77
- ### 实时对话与词元智能
78
- 与任何 Ollama 模型对话,观察词元到达时的**置信度着色** —— 每个词元根据生成速度被染色。支持 Markdown、多轮对话、文件附件、视觉模型与斜杠命令。对于推理模型,可按对话设置思考预算 —— 关闭、由模型自选,或显式指定低 / 中 / 高 / 最大推理强度。
79
-
80
- ### 响应质量门禁
81
- 每条响应都会被自动分析。仅在出现问题时才显示彩色徽章:
82
- - **重复** —— 短语过度重复(4-gram 分析)
83
- - **拒绝** —— "作为一个 AI 语言模型" 等 7 种模式
84
- - **乱码** —— 非 ASCII 比例过高
85
- - **空响应** —— 少于 10 个词
86
- - **截断** —— 在完成前触及词元上限
87
-
88
- ### 模型对比工作台
89
- 最多 **4 个槽位**,每个槽位独立配置模型、温度与系统提示。功能包括并排流式输出、词级别差异高亮、指标对比,以及一键预设(温度扫描、确定性配对、带词元税可视化的语言对比)。
90
-
91
- ### 性能分析
92
- - **延迟百分位**(P50/P95/P99),涵盖总时长与首词元时间
93
- - **错误情报** —— 7 类分类器与时间轴
94
- - **使用热力图** —— 您活跃时段的 7×24 网格
95
- - **设置影响** —— 温度与每秒词元数的散点图
96
- - **冷启动与热启动**跟踪,含模型加载历史
97
-
98
- ### 成本仪表板
99
- 按模型/日统计词元用量,估算等效云端价格。看看您本地运行**节省**了多少。
100
-
101
- ### 外科手术式基准测试
102
- 用多选题套件测试模型知识。通过 OpenAI 兼容端点使用真实 logprobs 进行准确的置信度测量。可视化构建自定义题组,或让 AI 根据主题自动生成。
103
-
104
- ### 嵌入实验室与 RAG 流水线
105
- 嵌入文本、可视化向量、测量余弦相似度。可请求更窄的输出向量,直观看到套娃式截断在相似度上的代价。从 PDF、DOCX 与 CSV 构建本地知识库 —— 分块、嵌入、可搜索。全部存储在 IndexedDB。零成本。
106
-
107
- ### 工具工坊(可视化画布)
108
- 拖拽式节点画布用于构建工具定义。双向代码同步(编辑节点或 TypeScript —— 两边同步更新)。探测 API、自动生成 schema、实时执行测试。
109
-
110
- ### 中段填充游乐场 *(v0.4.7 新增)*
111
- 为 Qwen-Coder、CodeLlama、Codestral、DeepSeek-Coder 与 StarCoder 提供代码补全。两个文本框(前缀 / 后缀),模型填补中间空缺。使用 Ollama 的 `/api/generate` 的 `suffix` 字段。拼接预览展示编辑器中的最终效果。
112
-
113
- ### 协议观察台 *(v0.4.7 新增)*
114
- 将同一提示并行发送至 Ollama 的三种服务协议 —— **原生** `/api/chat`、**OpenAI 兼容** `/v1/chat/completions`、**Anthropic 兼容** `/v1/messages` —— 全部针对您的本地模型运行。并排流式输出、各协议指标对比,以及信封差异标签页,展示各协议如何封装结束原因、词元计数与错误信封。无云端、无 API 密钥 —— 三个端点全部位于 `localhost:11434`。
115
-
116
- ### AI 训练流水线
117
- 从您的对话中筛选训练数据。标记、审查并导出为 JSONL 用于微调。
118
-
119
- ### 本地 AI 历史数据库
120
- 每次实验(基准测试、对比、对话、训练对)都会自动归档到可查询的 IndexedDB 数据库中,支持过滤、趋势、导出与保留策略。
121
-
122
- ### 多语言支持
123
- 完整翻译涵盖英语、法语、塞尔维亚语(拉丁与西里尔)、中文与阿拉伯语。支持 RTL 布局。希伯来语与日语的社区脚手架已就绪。
124
-
125
- ---
126
-
127
- ## Ollama 兼容性
128
-
129
- 针对 **Ollama 0.32.x**(2026 年 8 月最新稳定版)进行了测试与验证。LLMxRay 使用以下 Ollama 端点:
130
-
131
- | 端点 | 用途 |
132
- |---|---|
133
- | `/api/chat` | 流式对话(NDJSON,支持 `tools`、`think`、`format` schema) |
134
- | `/api/generate` | 生成与中段填充(通过 `suffix`) |
135
- | `/api/tags` | 模型列表与能力、上下文长度、嵌入维度 |
136
- | `/api/show` | 参数、模板、许可证与架构元数据 |
137
- | `/api/embed` | RAG 的向量嵌入 |
138
- | `/api/pull`、`/api/delete`、`/api/ps`、`/api/version` | 模型管理与状态 |
139
- | `/v1/chat/completions` | OpenAI 兼容路径,外科手术式基准测试用于获取真实 logprobs |
140
- | `/v1/messages` | Anthropic 兼容路径,协议观察台使用 |
141
-
142
- **兼容版本:** Ollama 0.20 及更新版本(更早版本支持对话/生成但缺少 `think` JSON-schema `format`)。**推荐版本:** Ollama 0.32+ —— 能力与上下文长度随模型列表一并返回,`think` 支持分级推理强度,嵌入支持 `dimensions` 维度。
143
-
144
- ---
145
-
146
- ## 界面截图
147
-
148
- <table>
149
- <tr>
150
- <td width="50%">
151
-
152
- **带词元流与置信度的对话**
153
- ![Chat](docs/public/screenshots/chat-diagnostics.png)
154
-
155
- </td>
156
- <td width="50%">
157
-
158
- **模型对比 — 并排**
159
- ![Compare](docs/public/screenshots/compare-sidebyside.png)
160
-
161
- </td>
162
- </tr>
163
- <tr>
164
- <td width="50%">
165
-
166
- **会话深度分析 — 指标与时序**
167
- ![Session](docs/public/screenshots/session-details.png)
168
-
169
- </td>
170
- <td width="50%">
171
-
172
- **基准测试与置信度雷达**
173
- ![Benchmark](docs/public/screenshots/benchmark.png)
174
-
175
- </td>
176
- </tr>
177
- <tr>
178
- <td width="50%">
179
-
180
- **嵌入 — 余弦相似度**
181
- ![Embeddings](docs/public/screenshots/embed-similarity.png)
182
-
183
- </td>
184
- <td width="50%">
185
-
186
- **系统监视器 — 硬件与 Ollama 状态**
187
- ![System](docs/public/screenshots/my-system.png)
188
-
189
- </td>
190
- </tr>
191
- </table>
192
-
193
- ---
194
-
195
- ## 适用人群
196
-
197
- | 您是... | LLMxRay 帮您... |
198
- |---|---|
199
- | **开发者** | 调试提示、剖析延迟、对比模型、检视工具调用、跟踪成本 |
200
- | **研究者** | 在跨模型与温度的一致设置下运行受控实验 |
201
- | **学生 / 教育者** | 可视化探索模型行为 —— 内置教育者工具包含 9 个交互式模块 |
202
- | **AI 团队负责人** | 了解本地集群的质量趋势、错误模式与资源使用情况 |
203
-
204
- ---
205
-
206
- ## 安装方式
207
-
208
- ### npx(推荐)
209
- ```bash
210
- npx llmxray
211
- npx llmxray --port 3000
212
- npx llmxray --ollama-url http://192.168.1.50:11434
213
- ```
214
-
215
- ### Docker
216
- ```bash
217
- docker run -p 5174:5174 djovaneli/llmxray
218
- docker run -p 5174:5174 -e OLLAMA_URL=http://host.docker.internal:11434 djovaneli/llmxray
219
- ```
220
-
221
- ### 从源码构建
222
- ```bash
223
- git clone https://github.com/LogneBudo/llmxray.git
224
- cd llmxray
225
- npm install
226
- npm run dev # http://localhost:5173
227
- ```
228
-
229
- ---
230
-
231
- ## 技术栈
232
-
233
- | 层级 | 技术 |
234
- |---|---|
235
- | 框架 | Vue 3.5 + Composition API |
236
- | 语言 | TypeScript 5.9(严格模式) |
237
- | 构建 | Vite 7.3 |
238
- | 样式 | Tailwind CSS 4.2 |
239
- | 状态管理 | Pinia 3(按关注点拆分 store) |
240
- | 图表 | Chart.js 4、D3.js 7 |
241
- | 画布 | Vue Flow(可视化节点编辑器) |
242
- | 代码编辑器 | CodeMirror 6 |
243
- | 存储 | IndexedDB(浏览器原生) |
244
- | LLM 后端 | Ollama(本地) |
245
-
246
- ---
247
-
248
- ## 架构
249
-
250
- **流式传输** —— 通过 `fetch()` + `ReadableStream` 读取 Ollama NDJSON。词元通过 Pinia store 响应式地更新 UI。
251
-
252
- **词元置信度** —— 根据词元间延迟近似计算(越快 = 越有信心)。明确标注为近似值。基准测试通过 OpenAI 兼容端点使用真实 logprobs。
253
-
254
- **按关注点拆分 store** —— 每个领域都有自己的 Pinia store:tokens、sessions、metrics、reasoning、comparison、embeddings、quality、cost 等。
255
-
256
- **硬件检测** —— 自定义 Vite 插件直接查询操作系统(PowerShell/proc/sysctl)获取准确的硬件规格。
257
-
258
- ---
259
-
260
- ## 开发
261
-
262
- | 命令 | 作用 |
263
- |---|---|
264
- | `npm run dev` | 开发服务器(端口 5173) |
265
- | `npm run build` | 类型检查 + 生产构建 |
266
- | `npm run test` | 单元测试(Vitest) |
267
- | `npm run test:e2e` | 端到端测试(Playwright) |
268
-
269
- ---
270
-
271
- ## 贡献
272
-
273
- 欢迎贡献!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解设置与指南。
274
-
275
- **特别欢迎社区翻译** —— 希伯来语与日语的脚手架文件已就绪。
276
-
277
- ---
278
-
279
- ## 许可证
280
-
281
- [Apache License 2.0](LICENSE)
282
-
283
- ## 商标
284
-
285
- **LLMxRay** 是 Ivan Stankovic([LogneBudo](https://github.com/LogneBudo))的商标。请参阅 [TRADEMARK.md](TRADEMARK.md)。
286
-
287
- ---
288
-
289
- <p align="center">
290
- <strong>如果 LLMxRay 帮助您更好地理解您的 AI,请考虑给项目点亮一颗星。</strong><br/>
291
- 这能帮助更多人发现这个项目。
292
- </p>
293
-
294
- <p align="center">
295
- <a href="https://github.com/LogneBudo/llmxray">
296
- <img src="https://img.shields.io/github/stars/LogneBudo/llmxray?style=social" alt="GitHub stars" />
297
- </a>
298
- </p>
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/LogneBudo/llmxray/master/public/favicon.svg" alt="LLMxRay" width="80" />
3
+ </p>
4
+
5
+ <h1 align="center">LLMxRay</h1>
6
+ <p align="center"><strong>看清您本地 AI 的真实运行状态。</strong></p>
7
+ <p align="center">
8
+ 面向本地大语言模型的实时词元流、质量分析、性能剖析与成本跟踪。<br/>
9
+ 无云端。无 API 密钥。无费用。
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://www.npmjs.com/package/llmxray"><img src="https://img.shields.io/npm/v/llmxray?color=cb3837&logo=npm&logoColor=white" alt="npm" /></a>
14
+ <a href="https://hub.docker.com/r/djovaneli/llmxray"><img src="https://img.shields.io/docker/pulls/djovaneli/llmxray?color=2496ED&logo=docker&logoColor=white" alt="Docker" /></a>
15
+ <img src="https://img.shields.io/badge/license-Apache%202.0-blue" alt="License" />
16
+ <img src="https://img.shields.io/badge/ollama-local-000?logo=ollama&logoColor=white" alt="Ollama" />
17
+ </p>
18
+
19
+ <p align="center">
20
+ 🌐 <a href="README.md">English</a> &bull;
21
+ <a href="README.fr.md">Français</a> &bull;
22
+ <strong>中文</strong> &bull;
23
+ <a href="README.ar.md">العربية</a> &bull;
24
+ <a href="README.sr.md">Srpski</a>
25
+ </p>
26
+
27
+ <p align="center">
28
+ <a href="#快速开始">快速开始</a> &bull;
29
+ <a href="#功能特性">功能特性</a> &bull;
30
+ <a href="#界面截图">界面截图</a> &bull;
31
+ <a href="#适用人群">适用人群</a> &bull;
32
+ <a href="CHANGELOG.md">更新日志</a>
33
+ </p>
34
+
35
+ <p align="center">
36
+ <img src="https://raw.githubusercontent.com/LogneBudo/llmxray/master/docs/public/screenshots/demo.gif" alt="LLMxRay 演示 — 带置信度着色的实时词元流" width="800" />
37
+ </p>
38
+
39
+ ---
40
+
41
+ ## 快速开始
42
+
43
+ **一条命令,30 秒搞定。**
44
+
45
+ ```bash
46
+ npx llmxray
47
+ ```
48
+
49
+ 或使用 Docker:
50
+
51
+ ```bash
52
+ docker run -p 5174:5174 djovaneli/llmxray
53
+ ```
54
+
55
+ 打开 **http://localhost:5174** 即可开始对话。就这么简单。
56
+
57
+ > **前置条件:** 本地运行 [Ollama](https://ollama.com/download),并至少拉取一个模型(`ollama pull llama3.2`)。
58
+
59
+ ---
60
+
61
+ ## 为什么选择 LLMxRay?
62
+
63
+ 您运行了一个本地大语言模型,与它对话,但实际发生了什么?
64
+
65
+ - 每个词元生成有多快?模型对哪些词元更有信心?
66
+ - 长对话中响应质量是否在下降?
67
+ - 如果在云端运行,这次对话要花多少钱?
68
+ - 模型是否在重复自己?拒绝回答?生成乱码?
69
+ - 在**相同提示**下,温度 0.3 与 0.9 有何区别?
70
+
71
+ **LLMxRay 用可视化方式实时免费回答以上所有问题。**
72
+
73
+ ---
74
+
75
+ ## 功能特性
76
+
77
+ ### 实时对话与词元智能
78
+ 与任何 Ollama 模型对话,观察词元到达时的**置信度着色** —— 每个词元根据生成速度被染色。支持 Markdown、多轮对话、文件附件、视觉模型与斜杠命令。对于推理模型,可按对话设置思考预算 —— 关闭、由模型自选,或显式指定低 / 中 / 高 / 最大推理强度。
79
+
80
+ ### 响应质量门禁
81
+ 每条响应都会被自动分析。仅在出现问题时才显示彩色徽章:
82
+ - **重复** —— 短语过度重复(4-gram 分析)
83
+ - **拒绝** —— "作为一个 AI 语言模型" 等 7 种模式
84
+ - **乱码** —— 非 ASCII 比例过高
85
+ - **空响应** —— 少于 10 个词
86
+ - **截断** —— 在完成前触及词元上限
87
+
88
+ ### 模型对比工作台
89
+ 最多 **4 个槽位**,每个槽位独立配置模型、温度与系统提示。功能包括并排流式输出、词级别差异高亮、指标对比,以及一键预设(温度扫描、确定性配对、带词元税可视化的语言对比)。
90
+
91
+ ### 性能分析
92
+ - **延迟百分位**(P50/P95/P99),涵盖总时长与首词元时间
93
+ - **错误情报** —— 7 类分类器与时间轴
94
+ - **使用热力图** —— 您活跃时段的 7×24 网格
95
+ - **设置影响** —— 温度与每秒词元数的散点图
96
+ - **冷启动与热启动**跟踪,含模型加载历史
97
+
98
+ ### 成本仪表板
99
+ 按模型/日统计词元用量,估算等效云端价格。看看您本地运行**节省**了多少。
100
+
101
+ ### 外科手术式基准测试
102
+ 用多选题套件测试模型知识。通过 OpenAI 兼容端点使用真实 logprobs 进行准确的置信度测量。可视化构建自定义题组,或让 AI 根据主题自动生成。
103
+
104
+ ### 嵌入实验室与 RAG 流水线
105
+ 嵌入文本、可视化向量、测量余弦相似度。可请求更窄的输出向量,直观看到套娃式截断在相似度上的代价。从 PDF、DOCX 与 CSV 构建本地知识库 —— 分块、嵌入、可搜索。全部存储在 IndexedDB。零成本。
106
+
107
+ ### 工具工坊(可视化画布)
108
+ 拖拽式节点画布用于构建工具定义。双向代码同步(编辑节点或 TypeScript —— 两边同步更新)。探测 API、自动生成 schema、实时执行测试。
109
+
110
+ ### 中段填充游乐场 *(v0.4.7 新增)*
111
+ 为 Qwen-Coder、CodeLlama、Codestral、DeepSeek-Coder 与 StarCoder 提供代码补全。两个文本框(前缀 / 后缀),模型填补中间空缺。使用 Ollama 的 `/api/generate` 的 `suffix` 字段。拼接预览展示编辑器中的最终效果。
112
+
113
+ ### 缓存实验室 *(v0.6.0 新增)*
114
+ 查明提示为何未命中模型的 KV 缓存,并测量每轮为此付出的代价。本地模型只有在提示从第一个词元起仍然一致时才会复用缓存,因此顶部的一个时间戳会让其下的全部失效。本实验室会找出逐轮变化的值,标出复用中断的确切位置,然后在你自己的守护进程上对每种排布发送两次(其中一次改变该值)来**实测**将其移至末尾究竟能节省多少。在一个真实的 324 词元提示上实测:**时间戳在前时复用 4 个词元、预填充 64.6 毫秒;在后时复用 290 个、仅 18.6 毫秒。字句相同,快 3.5 倍。**需要 Ollama 0.33.3+。
115
+
116
+ ### 协议观察台 *(v0.4.7 新增)*
117
+ 将同一提示并行发送至 Ollama 的三种服务协议 —— **原生** `/api/chat`、**OpenAI 兼容** `/v1/chat/completions`、**Anthropic 兼容** `/v1/messages` —— 全部针对您的本地模型运行。并排流式输出、各协议指标对比,以及信封差异标签页,展示各协议如何封装结束原因、词元计数与错误信封。无云端、无 API 密钥 —— 三个端点全部位于 `localhost:11434`。
118
+
119
+ ### AI 训练流水线
120
+ 从您的对话中筛选训练数据。标记、审查并导出为 JSONL 用于微调。
121
+
122
+ ### 本地 AI 历史数据库
123
+ 每次实验(基准测试、对比、对话、训练对)都会自动归档到可查询的 IndexedDB 数据库中,支持过滤、趋势、导出与保留策略。
124
+
125
+ ### 多语言支持
126
+ 完整翻译涵盖英语、法语、塞尔维亚语(拉丁与西里尔)、中文与阿拉伯语。支持 RTL 布局。希伯来语与日语的社区脚手架已就绪。
127
+
128
+ ---
129
+
130
+ ## Ollama 兼容性
131
+
132
+ 针对 **Ollama 0.33.x**(已在 0.33.3 上验证,2026 年 9 月)进行了测试与验证。LLMxRay 使用以下 Ollama 端点:
133
+
134
+ | 端点 | 用途 |
135
+ |---|---|
136
+ | `/api/chat` | 流式对话(NDJSON,支持 `tools`、`think`、`format` schema) |
137
+ | `/api/generate` | 生成与中段填充(通过 `suffix`) |
138
+ | `/api/tags` | 模型列表与能力、上下文长度、嵌入维度 |
139
+ | `/api/show` | 参数、模板、许可证与架构元数据 |
140
+ | `/api/embed` | RAG 的向量嵌入 |
141
+ | `/api/pull`、`/api/delete`、`/api/ps`、`/api/version` | 模型管理与状态 |
142
+ | `/v1/chat/completions` | OpenAI 兼容路径,外科手术式基准测试用于获取真实 logprobs |
143
+ | `/v1/messages` | Anthropic 兼容路径,协议观察台使用 |
144
+
145
+ **兼容版本:** Ollama 0.20 及更新版本(更早版本支持对话/生成但缺少 `think` 与 JSON-schema `format`)。**推荐版本:** Ollama 0.33.3+ —— 会报告提示缓存复用(`prompt_eval_cached_count`,以及 OpenAI 兼容端点的 `usage.prompt_tokens_details.cached_tokens`),因此预填充吞吐率仅按实际计算的词元统计。0.32 起:能力与上下文长度随模型列表一并返回,`think` 支持分级推理强度,嵌入支持 `dimensions` 维度。
146
+
147
+ ---
148
+
149
+ ## 界面截图
150
+
151
+ <table>
152
+ <tr>
153
+ <td width="50%">
154
+
155
+ **带词元流与置信度的对话**
156
+ ![Chat](https://raw.githubusercontent.com/LogneBudo/llmxray/master/docs/public/screenshots/chat-diagnostics.png)
157
+
158
+ </td>
159
+ <td width="50%">
160
+
161
+ **模型对比 — 并排**
162
+ ![Compare](https://raw.githubusercontent.com/LogneBudo/llmxray/master/docs/public/screenshots/compare-sidebyside.png)
163
+
164
+ </td>
165
+ </tr>
166
+ <tr>
167
+ <td width="50%">
168
+
169
+ **会话深度分析 — 指标与时序**
170
+ ![Session](https://raw.githubusercontent.com/LogneBudo/llmxray/master/docs/public/screenshots/session-details.png)
171
+
172
+ </td>
173
+ <td width="50%">
174
+
175
+ **基准测试与置信度雷达**
176
+ ![Benchmark](https://raw.githubusercontent.com/LogneBudo/llmxray/master/docs/public/screenshots/benchmark.png)
177
+
178
+ </td>
179
+ </tr>
180
+ <tr>
181
+ <td width="50%">
182
+
183
+ **嵌入 — 余弦相似度**
184
+ ![Embeddings](https://raw.githubusercontent.com/LogneBudo/llmxray/master/docs/public/screenshots/embed-similarity.png)
185
+
186
+ </td>
187
+ <td width="50%">
188
+
189
+ **系统监视器 — 硬件与 Ollama 状态**
190
+ ![System](https://raw.githubusercontent.com/LogneBudo/llmxray/master/docs/public/screenshots/my-system.png)
191
+
192
+ </td>
193
+ </tr>
194
+ </table>
195
+
196
+ ---
197
+
198
+ ## 适用人群
199
+
200
+ | 您是... | LLMxRay 帮您... |
201
+ |---|---|
202
+ | **开发者** | 调试提示、剖析延迟、对比模型、检视工具调用、跟踪成本 |
203
+ | **研究者** | 在跨模型与温度的一致设置下运行受控实验 |
204
+ | **学生 / 教育者** | 可视化探索模型行为 —— 内置教育者工具包含 9 个交互式模块 |
205
+ | **AI 团队负责人** | 了解本地集群的质量趋势、错误模式与资源使用情况 |
206
+
207
+ ---
208
+
209
+ ## 安装方式
210
+
211
+ ### npx(推荐)
212
+ ```bash
213
+ npx llmxray
214
+ npx llmxray --port 3000
215
+ npx llmxray --ollama-url http://192.168.1.50:11434
216
+ ```
217
+
218
+ ### Docker
219
+ ```bash
220
+ docker run -p 5174:5174 djovaneli/llmxray
221
+ docker run -p 5174:5174 -e OLLAMA_URL=http://host.docker.internal:11434 djovaneli/llmxray
222
+ ```
223
+
224
+ ### 从源码构建
225
+ ```bash
226
+ git clone https://github.com/LogneBudo/llmxray.git
227
+ cd llmxray
228
+ npm install
229
+ npm run dev # http://localhost:5173
230
+ ```
231
+
232
+ ---
233
+
234
+ ## 技术栈
235
+
236
+ | 层级 | 技术 |
237
+ |---|---|
238
+ | 框架 | Vue 3.5 + Composition API |
239
+ | 语言 | TypeScript 5.9(严格模式) |
240
+ | 构建 | Vite 7.3 |
241
+ | 样式 | Tailwind CSS 4.2 |
242
+ | 状态管理 | Pinia 3(按关注点拆分 store) |
243
+ | 图表 | Chart.js 4、D3.js 7 |
244
+ | 画布 | Vue Flow(可视化节点编辑器) |
245
+ | 代码编辑器 | CodeMirror 6 |
246
+ | 存储 | IndexedDB(浏览器原生) |
247
+ | LLM 后端 | Ollama(本地) |
248
+
249
+ ---
250
+
251
+ ## 架构
252
+
253
+ **流式传输** —— 通过 `fetch()` + `ReadableStream` 读取 Ollama NDJSON。词元通过 Pinia store 响应式地更新 UI。
254
+
255
+ **词元置信度** —— 根据词元间延迟近似计算(越快 = 越有信心)。明确标注为近似值。基准测试通过 OpenAI 兼容端点使用真实 logprobs。
256
+
257
+ **按关注点拆分 store** —— 每个领域都有自己的 Pinia store:tokens、sessions、metrics、reasoning、comparison、embeddings、quality、cost 等。
258
+
259
+ **硬件检测** —— 自定义 Vite 插件直接查询操作系统(PowerShell/proc/sysctl)获取准确的硬件规格。
260
+
261
+ ---
262
+
263
+ ## 开发
264
+
265
+ | 命令 | 作用 |
266
+ |---|---|
267
+ | `npm run dev` | 开发服务器(端口 5173) |
268
+ | `npm run build` | 类型检查 + 生产构建 |
269
+ | `npm run test` | 单元测试(Vitest) |
270
+ | `npm run test:e2e` | 端到端测试(Playwright) |
271
+
272
+ ---
273
+
274
+ ## 贡献
275
+
276
+ 欢迎贡献!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解设置与指南。
277
+
278
+ **特别欢迎社区翻译** —— 希伯来语与日语的脚手架文件已就绪。
279
+
280
+ ---
281
+
282
+ ## 许可证
283
+
284
+ [Apache License 2.0](LICENSE)
285
+
286
+ ## 商标
287
+
288
+ **LLMxRay** 是 Ivan Stankovic([LogneBudo](https://github.com/LogneBudo))的商标。请参阅 [TRADEMARK.md](TRADEMARK.md)。
289
+
290
+ ---
291
+
292
+ <p align="center">
293
+ <strong>如果 LLMxRay 帮助您更好地理解您的 AI,请考虑给项目点亮一颗星。</strong><br/>
294
+ 这能帮助更多人发现这个项目。
295
+ </p>
296
+
297
+ <p align="center">
298
+ <a href="https://github.com/LogneBudo/llmxray">
299
+ <img src="https://img.shields.io/github/stars/LogneBudo/llmxray?style=social" alt="GitHub stars" />
300
+ </a>
301
+ </p>