知识库管理
去问答

投喂资料

支持 docx / xlsx / pptx / txt / md / csv。相同内容的文件只会入库一次,重复投喂会自动跳过。
正在上传解析…
把文件拖到这里,或点击选择文件
单个文件上限 {{ maxUploadMB }} MB
粘贴入库 扫描 inbox 目录

已入库资料({{ docs.length }} 篇 / {{ stats.chunkCount || 0 }} 个片段)

{{ stats.loadError }}

批量投喂:inbox 目录

把文件拷进项目下的 inbox/ 文件夹,然后点这里同步。这个方式不受网页上传的体积限制,适合一次投喂几十份制度文件。文件会留在原地,可反复同步(已入库的自动跳过)。
{{ inboxDir || 'inbox' }}
扫描并增量入库
新增 {{ inboxResult.added.length }} 篇,跳过 {{ inboxResult.skipped.length }} 篇,失败 {{ inboxResult.failed.length }} 篇
· {{ f.name }}:{{ f.error }}
· 已入库 {{ a.name }}({{ a.chunkCount }} 片段)

检索调试

只做检索、不调用大模型(不花钱)。用它检查「问题能不能召回到正确的片段」, 调不动的时候可以改 config.json 里的 chunkSize / topK / candidates。 当前模式:{{ stats.retrievalMode || 'bm25' }}
检索
分词:{{ t }} 候选池 {{ searchRes.candidateCount }} 个片段
关键词命中(原始分数):
{{ h.title }}第 {{ h.index + 1 }} 段 · BM25 {{ h.score }}
{{ h.preview }}
命中词:{{ h.matched.join(' / ') }}
一个片段都没命中。说明知识库里确实没有相关词,或者问法用词和资料差太远。换个说法试试。
融合后送进提示词的上下文块(去重并合并相邻片段):
[{{ i + 1 }}]{{ b.title }}第 {{ b.from + 1 }} 至 {{ b.to + 1 }} 段 · 相关度 {{ b.rel }}%
{{ b.text.slice(0, 600) }}

试问一下

走完整问答链路(会调用大模型,消耗额度)。用于确认最终回答是否忠实于资料。
提问
回答耗时 {{ askRes.ms }} ms · 模式 {{ askRes.mode }}
{{ askRes.answer }}
引用:[{{ s.no }}] {{ s.title }}

API Token

外部系统用这个 Token 调用 /v1/chat/completions(与 OpenAI 接口一致)。 明文只在创建时显示一次,配置里只存散列,忘了就删掉重建。
新建 Token
新 Token 已生成,关掉就看不到了,请立刻复制保存:
{{ freshToken }}
复制

怎么接入

本服务的 /v1/chat/completions 与 OpenAI 完全一致(含流式),任何支持 OpenAI 接口的客户端把地址指过来即可。
方式一:改 portal-lite 门户智能体的配置(只改三行)
{{ portalSnippet }}
方式二:自己写脚本调用
{{ curlSnippet }}

大家都在问什么

重点看标红的「未命中」:这些是知识库里缺的资料,是下一步该补什么的方向。

操作审计

谁在什么时候入库、删除了什么资料。

运行状态

资料篇数
{{ stats.docCount || 0 }}
片段数
{{ stats.chunkCount || 0 }}
已向量化
{{ stats.embeddedChunks || 0 }}
资料总字数
{{ (stats.totalChars || 0).toLocaleString() }}

大模型与检索

向量检索已停用:embedding 模型换过但没重建向量
{{ stats.embedding.mismatchNote }}
{{ (stats.agent && stats.agent.model) || '未配置' }} {{ (stats.agent && stats.agent.provider) || '-' }} {{ stats.retrievalMode || 'bm25' }} {{ (stats.embedding && stats.embedding.model) || '未启用(纯 BM25)' }} {{ stats.chunking && stats.chunking.chunkSize }} 字 / 重叠 {{ stats.chunking && stats.chunking.chunkOverlap }} 字 {{ stats.chunking && stats.chunking.topK }} 段(候选 {{ stats.chunking && stats.chunking.candidates }}) {{ rateText }} {{ stats.stats && stats.stats.dataFile }}
探测网关能力 重建向量 重建向量只在配置了 embedding 模型后可用
chat:{{ probeRes.agent && probeRes.agent.ready ? '可用(' + probeRes.agent.model + ')' : '不可用' }}
embedding:{{ probeRes.embedding.ok ? '可用(' + probeRes.embedding.model + ',' + probeRes.embedding.dim + ' 维)' : '不可用:' + probeRes.embedding.reason }}

企业微信对接

未启用。想让同事在企业微信里直接问知识库,按 README 第十五节配置 config.json 的 wecom 段, 然后把 enabled 改成 true 并重启服务。

支持的文件格式

其余格式(尤其 PDF)需要先转成 docx 再投喂。
.{{ s }}
{{ docDlgRow.kind }} · {{ docDlgRow.chunkCount }} 个片段 · {{ (docDlgRow.chars || 0).toLocaleString() }} 字
第 {{ c.index + 1 }} 段{{ c.chars }} 字 · 已向量化
{{ c.text }}
问题
{{ chatDlgRow.question }}
回答
{{ chatDlgRow.answer || '(未命中,没有调用大模型)' }}
引用:[{{ s.title }} 第 {{ s.from + 1 }} 段]

登录

管理页仅对授权人员开放