文件总数
{{ dash.document_count }}
存储占用
{{ humanBytes(dash.storage_bytes) }}
今日上传
{{ dash.uploads_today }}
待处理任务
{{ dash.pending_jobs }}
失败任务
{{ dash.failed_jobs }}
已索引
{{ dash.index_indexed }}
处理中
{{ dash.index_processing }}
用户数
{{ dash.user_count }}
最近 30 天上传趋势
文件类型分布
最近上传
{{ d.name }}{{ d.created_at }}
暂无数据
热门下载
{{ d.name }}{{ d.download_count }}次
暂无数据
📁 目录 + 新建
全部目录
文档总数 {{ overview.document_count }}
知识库占用 {{ humanBytes(overview.storage_bytes) }}
💾 磁盘使用 {{ overview.disk_percent }}% · 可用 {{ humanBytes(overview.disk_free) }} / 共 {{ humanBytes(overview.disk_total) }}
上传文件 卡片 表格
全选本页 已选 {{ docs.selected.length }} ⬇ 下载 📂 移动 🔄 重新处理 🏷️ AI打标签 💬 对比提问 🗑 删除 取消选择
{{ fileIcon(d.extension) }} {{ (d.extension || '—').toUpperCase() }} {{ expiryBadge(d).text }} {{ statusLabel(d.status) }}
{{ d.name }}
{{ humanBytes(d.size) }} {{ (d.updated_at || '').slice(0,10) }}
搜索
{{ it.extension }} · {{ humanBytes(it.file_size) }} · {{ it.updated_at }}
会话历史 新建
{{ s.title || '新会话' }}
{{ s.updated_at }} 删除
⚠️ {{ errorTitle(m.errorKind) }}
{{ m.error }}
已收到的部分内容:
{{ m.content }}
💭 {{ m.streaming && !m.content ? '思考中…' : '已思考' }}({{ m.reasoning.length }} 字) {{ m.showReasoning ? '收起 ▴' : '展开 ▾' }}
{{ m.reasoning }}
{{ m.content }}
{{ qa.stageMsg || '正在处理...' }}
引用来源:共 {{ m.citations.length }} 份文档(点击可定位到原文)
🔎 [{{ c.index }}] {{ c.document_name }} {{ c.chunk_count }} 处片段 · {{ c.section_title }} · 第 {{ c.pages.join('、') }} 页
📊 对比 {{ qa.compareDocs.length }} 篇: {{ d.name }} 清除
发送 停止
恢复选中 彻底删除选中
用户管理 角色权限 目录管理 分类管理 标签管理 任务日志 审计日志 登录日志 下载日志 搜索日志 系统设置 索引维护 数据库备份

用户管理

新增用户

角色权限

新增角色

目录管理

新增目录

分类管理

新增分类

标签管理

新增标签

任务日志

等待中 运行中 成功 失败

审计日志

登录日志

下载日志

搜索日志

系统设置

保存配置

运行时信息(来自 .env / config,只读)

{{ admin.system.runtime?.php_version }} {{ admin.system.runtime?.storage_root }} {{ humanBytes(admin.system.runtime?.max_upload_size || 0) }} {{ humanBytes(admin.system.runtime?.user_quota_bytes || 0) }} {{ admin.system.runtime?.deepseek?.model }} {{ admin.system.runtime?.embedding?.model }} {{ admin.system.runtime?.embedding?.dim }} {{ admin.system.runtime?.ocr?.enabled ? '是' : '否' }} {{ admin.system.runtime?.opensearch?.host }}:{{ admin.system.runtime?.opensearch?.port }} {{ admin.system.runtime?.qdrant?.host }}:{{ admin.system.runtime?.qdrant?.port }} {{ admin.system.runtime?.retrieval?.top_k }} {{ admin.system.runtime?.chunk?.token_size }} 敏感配置(API Key / 密码 / 服务地址)请在服务器 .env 中修改后重启容器生效。这里改的是站点级配置,立即生效。

索引维护

⏳ {{ reindexJob.label }} 进行中… {{ reindexJob.done }} / {{ reindexJob.total }} · 失败 {{ reindexJob.failed }}
重建索引会重新提取所有文件正文、生成 embedding 并写入 OpenSearch / Qdrant,耗时较长,建议在系统空闲时段执行。
重建全部索引
为系统内所有文件重新提取正文、生成全文索引和向量索引(耗时较长,会重算 embedding)
开始重建
只重建检索索引(快)
仅用已提取的正文重建 OpenSearch 全文索引,不重算向量。分词器或自定义词典变更后用这个,秒级、零 API 消耗。
只重建检索索引
AI 批量打标签
尚未打标签的文档调用大模型自动生成主题标签(新上传的文档默认会自动打标签)。
为未打标签文档生成标签
健康检查
检查依赖服务(MySQL / Redis / OpenSearch / Qdrant / 存储)的连接状态
立即检查
{{ k }}: {{ v.ok ? 'OK' : (v.error || 'FAIL') }}

数据库备份

备份的是 MySQL 全库(文档元数据、用户、权限、标签、任务、问答记录等)。备份文件保存在服务器 {{ backup.dir || 'storage/backups' }},请定期下载到本地或异地保存。 OpenSearch / Qdrant 索引可在「索引维护」中从原文重建,无需备份。
立即备份
导出当前数据库并压缩为 .sql.gz,秒级完成。
立即备份
备份列表
共 {{ backup.count }} 个 · 占用 {{ humanBytes(backup.total_size) }} 刷新
「恢复」会用所选备份整库覆盖当前数据,恢复后这之后产生的所有数据都会丢失。系统会在恢复前自动生成一份当前库的快照以备回滚。