跳到主要内容

文档聊天

文档聊天允许 Libre WebUI 搜索上传的文档,并将相关片段加入聊天上下文。

支持的文件

目前支持上传:

  • PDF(记录每页来源)
  • 纯文本和日志
  • Markdown(.md.markdown.mdx,记录每节来源)
  • HTML
  • Word 文档(.docx
  • 演示文稿(.pptx,记录每张幻灯片来源)
  • 电子表格(.xlsx,记录每个工作表来源)及 CSV/TSV
  • 源代码(TypeScript、Python、Go、Rust、SQL、YAML 等常见语言)
  • 图片(.png.jpg.webp.gif)——由已配置的视觉模型读取文本(设置 → 默认设置 → 视觉模型)
  • 音频(.wav.webm)——通过语音转文字提供商转录,与语音输入使用相同的 STT 访问控制
  • 文件最大为 10 MB

Office 格式由仓库内置的受限解析器解包,服务器进程不会运行第三方文档库。在同一范围内重复上传相同字节时会去重,而不会重复摄取。

图片和音频提取会路由到你已配置的提供商。系统不捆绑本地 OCR 或语音引擎;除对所选模型的调用外,任何内容都不会离开实例。没有文本层的 PDF(扫描件)也按相同方式处理:恢复内嵌的 JPEG 页面图片,由视觉模型读取,并记录每页来源。采用其他图片编码(CCITT 传真、JBIG2)的扫描件仍无法生成文本。未配置视觉模型或 STT 提供商时,上传会标记为失败,原因显示在设置 → 文档中。

文件由后端处理,并与其他应用数据一起存储。

搜索模式

Libre WebUI 支持两种检索模式:

模式使用条件说明
关键词搜索始终可用BM25 排名;无需嵌入模型
混合搜索在设置中启用嵌入通过倒数排名融合合并向量排名与 BM25

启用嵌入后,每次查询都会运行并合并两种排名:精确术语匹配可以高于语义相近但更模糊的片段,仍在生成嵌入的片段也可通过词法搜索找到。嵌入失败或关闭时,文档搜索会回退到纯关键词匹配。

词法评分在进程内针对你可访问的片段运行。Libre 有意不为文档片段维护磁盘全文索引,因为片段文本已加密,令牌索引会在密文旁保存明文。片段只有完整包含查询中的至少一个词时才参与词法排名。因此,像 ALPHA_BETA_GAMMA 这样的复合标识符不会显示只匹配其中一部分的文本。

与你共享的知识集合会自动加入两种排名。访问控制直接在向量查询中执行:授权发布到索引 ACL。撤销共享后,下一次搜索立即隐藏相应文档,无需重新生成嵌入。

启用语义搜索

安装嵌入模型:

ollama pull nomic-embed-text

然后打开设置并启用嵌入。可以使用本地 Ollama 嵌入模型,或支持嵌入的提供商插件。

默认嵌入设置:

  • 模型:nomic-embed-text
  • 分块大小:1000 个字符
  • 分块重叠:200 个字符
  • 相似度阈值:0.3

引用与完整文档模式

检索片段携带来源信息:源文件名、片段索引、检索分数,以及对带分段映射的格式,片段所在的页面、幻灯片、工作表或 Markdown 节。聊天上下文会标注每个片段的位置,对话的“来源”栏会在每个文档下列出引用位置。

每个聊天还可从“来源”栏切换到 完整文档模式。此时会随消息发送范围内每个文档的全部提取内容,而非检索片段。令牌保护值(FULL_DOCUMENT_CONTEXT_MAX_TOKENS,默认 32000)保护模型上下文窗口;附件超出时会回退到检索,并在“来源”栏解释原因。

上传与搜索

  1. 从文档控件上传受支持的文件。
  2. 等待处理完成。
  3. 在聊天中提问。
  4. Libre WebUI 为该会话检索相关片段,并将其作为上下文。

示例提示词:

Summarize the uploaded document in five bullets.
What deadlines are mentioned in the PDF?
Find the section that talks about pricing.
Compare the uploaded policy with this proposed change.

API 端点

端点用途
POST /api/documents/upload上传受支持的文档
GET /api/documents列出已上传文档
GET /api/documents/session/:sessionId列出聊天会话的文档
POST /api/documents/search搜索文档
DELETE /api/documents/:documentId删除文档
GET /api/documents/embeddings/status查看嵌入状态
POST /api/documents/embeddings/regenerate重新生成嵌入

最佳实践

  • 仅上传与当前任务相关的内容。
  • 优先使用文本型 PDF;扫描 PDF 可通过视觉模型处理,但每页需要一次模型调用。
  • 更换嵌入模型后重新生成嵌入。
  • 语义搜索漏掉有用内容时降低相似度阈值。
  • 结果噪声过多时提高阈值。

相关文档