概览
知识库运行状况一览
{{ docs.length }}
文档总数
知识库中的文件数
{{ status ? status.chunks : '—' }}
知识块
可检索的文本块
{{ status ? (status.llm_profile || '.env 默认') : '—' }}
启用的模型配置
{{ status ? status.llm_model : '' }}
{{ lastEval ? (lastEval.score * 100).toFixed(1) + '%' : '—' }}
检索质量 Recall@k
{{ lastEval ? `最近一轮 ${lastEval.hits}/${lastEval.total}` : '尚未运行评估' }}
最近上传
服务端持久化记录,处理进度实时更新
| 时间 | 文件 | 状态 | 详情 |
|---|---|---|---|
| {{ fmtTime(t.finished_at || t.started_at) }} | {{ t.file }} | {{ stateLabel(t.state) }} |
{{ progressText(t) }}
{{ taskDetail(t) }}
|
还没有上传记录
进入知识库页面,拖拽文件即可入库
快捷入口
常用操作
知识库
{{ isAdmin ? '上传文档(pdf/docx/md/txt/rst/zip),自动解压、分块、向量化入库' : '浏览知识库文档(当前角色为只读)' }}
资料入库
同名不同内容自动存为时间戳版本;内容完全相同自动跳过;zip 内图片跳过并计数
拖拽文件到此处,或
支持 pdf / docx / md / txt / rst / zip(自动解压);单文件与批量均可
-
{{ u.name }} {{ u.state === 'uploading' ? u.progress + '%' : u.message }}
上传记录
刷新页面记录仍在;处理完成后文档库自动更新
| 时间 | 文件 | 状态 | 详情 |
|---|---|---|---|
| {{ fmtTime(t.finished_at || t.started_at) }} | {{ t.file }} | {{ stateLabel(t.state) }} |
{{ progressText(t) }}
{{ taskDetail(t) }}
|
暂无上传记录
文档库 {{ filteredDocs.length }}/ 共 {{ docs.length }}
{{ isAdmin ? '勾选可批量删除;输入关键词可按文件名过滤' : '输入关键词按文件名过滤' }}
| 文件名 | 块数 | 内容预览 | ||
|---|---|---|---|---|
| {{ d.source }} | {{ d.chunks }} | {{ d.preview }} |
{{ docsPage }} / {{ totalDocsPages }}
没有匹配「{{ docFilter }}」的文档
知识库还是空的
换个关键词试试
把文件拖到上方虚线框,即可完成入库
检索测试
只检索原文片段,不调用大模型(零费用),用于验证资料能否被命中
没有命中的内容,换个说法或先补充资料
{{ i + 1 }} · {{ r.source }} · 块 {{ r.chunk_index }} · 相似度 {{ r.score }}
输入问题后回车,命中片段将在此显示(markdown 与 mermaid 图会渲染)
问答测试
检索 + 大模型生成,流式输出,附引用溯源;模型可在"模型配置"中切换
▍
{{ s }}
我的 API 密钥
供 MCP 客户端(如 ZCode)程序化连接知识库;密钥自动绑定你的部门,只能读取本部门文档,与网页登录互不影响
生成新密钥
最多持有 {{ myKeyLimit }} 个;完整密钥只在生成那一刻显示一次,请立即保存
⚠️ 完整密钥(离开本页前请复制保存)
{{ myNewKey.key }}
MCP 客户端配置示例(ZCode 等,填入你的 MCP 设置)
{{ mcpConfigSnippet() }}
我的密钥({{ myKeys.length }})
| 名称 | 密钥 | 权限 | 创建时间 | |
|---|---|---|---|---|
| {{ k.name }} | {{ k.key }} | 只读@{{ k.department }} | {{ fmtTime(k.created_at) }} |
还没有密钥;生成一个即可让 MCP 客户端连接
模型配置
多套 LLM 配置,启用即热切换(无需重启);修改自动保存
配置列表
当前使用:{{ status ? (status.llm_profile || '.env 默认') : '…' }} · 协议 {{ status ? status.llm_protocol : '…' }}
尚未配置
当前使用 RAG\.env 的默认值;点"新增配置"添加 DeepSeek / Ollama / Claude 等
{{ p.name || '未命名' }}
{{ p.protocol === 'anthropic' ? 'claude' : 'openai' }}
● 使用中
{{ llmSaveState[p.id] }}
{{ llmTestResult[p.id].ok ? ('连通 · ' + llmTestResult[p.id].latency_ms + 'ms') : ('失败:' + llmTestResult[p.id].error) }}
质量评估
评测集 + Recall@k:验证检索质量,知识库变更后跑回归
最近结果
{{ lastEval ? `${lastEval.hits}/${lastEval.total} 命中 · ${fmtTime(lastEval.ts)}` : '尚未运行过评估' }}
{{ (lastEval.score * 100).toFixed(1) }}%
Recall@k
| 问题 | 期望来源 | 命中 |
|---|---|---|
| {{ d.question }} | {{ d.expect.join(' / ') }} | {{ d.hit ? '命中' : '未中' }} |
先在下方添加评测问题,再运行评估
评测集 {{ evalItems.length }}
判定:top-k 结果中出现任一期望来源文件即记命中
| 问题 | 期望来源 | k | |
|---|---|---|---|
| {{ it.question }} | {{ it.expect_sources.join(' / ') }} | {{ it.k }} |
评测集为空
历史趋势
保留最近 50 轮;知识库变更后得分下降就该排查了
| 时间 | 得分 | 命中 |
|---|---|---|
| {{ fmtTime(h.ts) }} | {{ (h.score * 100).toFixed(1) }}% | {{ h.hits }}/{{ h.total }} |
暂无历史
系统管理
部门、用户、API 密钥与操作审计
部门
知识库按部门隔离:用户/密钥只能看到所属部门的内容;"未分类"为默认桶
| 部门 | 文档数 | 块数 | |
|---|---|---|---|
| {{ d.name }} | {{ d.docs }} | {{ d.chunks }} |
用户
admin 全权限;viewer 仅所属部门的检索与问答
| 用户名 | 角色 | 部门 | 创建时间 | |
|---|---|---|---|---|
| {{ u.username }}{{ u.username === user.username ? '(我)' : '' }} | {{ u.role }} | {{ u.department }} | {{ fmtTime(u.created_at) }} |
API 密钥
供 MCP server 等程序调用;把密钥填到 MCP\.env 的 RAG_SERVICE_API_KEY 后重启客户端生效
| 名称 | 密钥 | 创建时间 | |
|---|---|---|---|
| {{ k.name }} | {{ k.key }} | {{ fmtTime(k.created_at) }} |
暂无密钥
审计日志
敏感操作留痕(登录、入库、删除、配置变更),只增不删
| 时间 | 用户 | 操作 | 详情 | 状态 |
|---|---|---|---|---|
| {{ fmtTime(a.ts) }} | {{ a.user }} | {{ a.action }} | {{ a.detail }} | {{ a.ok ? '成功' : '失败' }} |
暂无记录
服务状态
各组件配置与运行参数
运行参数
向量库、检索与生成模型的当前配置
| {{ row[0] }} | {{ row[1] }} |
加载中…