前言
上一回我们整理了语义搜索的概念。 本文将在此基础上,使用 RAG(Retrieval-Augmented Generation)构建企业内部 AI 助手。
RAG 是一种”通过搜索找到相关文档,再由 LLM(大语言模型)基于文档内容生成回答”的机制。 由于回答基于企业内部文档生成,因此能够应对通用聊天 AI 无法回答的企业特有问题。
目标读者
对构建企业内部 AI 助手感兴趣的人员
希望学习 RAG 实现方法的人员
希望了解 LLM 集成选项的人员
RAG 的工作原理
RAG 流水线
Fess 的 AI 搜索模式通过以下流水线运行:
意图分析(Intent):分析用户的问题并分类意图(搜索、摘要、FAQ、不明确)
搜索(Search):从 Fess 索引中检索相关文档(零命中时自动重新生成查询并重新搜索)
评估(Evaluate):LLM 评估检索到的文档的相关性
全文获取(Fetch):获取高相关性文档的全文
回答生成(Answer):LLM 基于文档内容生成带引用的流式回答
该流水线能够减轻 LLM”看似合理但不准确的回答(幻觉)”问题,提供有企业内部文档支撑的回答。
Fess 的 AI 搜索模式不需要向量搜索(嵌入模型)。 它直接利用现有的全文搜索索引,由 LLM 负责搜索结果的评估和回答生成。 因此,无需选择嵌入模型或构建向量数据库等额外的基础设施准备,即可立即引入基于 RAG 的 AI 搜索。
LLM 提供商的选择
Fess 支持三种 LLM 后端。 下面整理各提供商的特点和选择标准。
| 提供商 | 插件 | 成本 | 特点 |
|---|---|---|---|
| OpenAI | fess-llm-openai | API 按量计费 | 高回答质量、支持 GPT-4o、易于上手 |
| Google Gemini | fess-llm-gemini | API 按量计费 | 支持扩展思考、长上下文 |
| Ollama | fess-llm-ollama | 硬件成本 | 本地运行、数据不外传、注重隐私 |
选择标准
选择云端 API(OpenAI / Gemini)的情况
希望降低初始成本
无法准备 GPU 服务器
将回答质量作为最高优先级
允许将数据发送到外部
选择本地运行(Ollama)的情况
不允许将企业内部数据发送到外部
安全和隐私要求严格
能够准备 GPU 服务器
希望降低运营成本(大量使用时)
AI 搜索模式的设置
插件安装
安装与所选 LLM 提供商对应的插件。
在管理界面中选择 [系统] > [插件]
安装对应的插件(例如:
fess-llm-openai)
启用 AI 搜索模式
在 Fess 的设置中启用 AI 搜索模式。
在管理界面的设置或配置文件中设置 rag.chat.enabled=true。
LLM 连接设置
根据各 LLM 提供商配置连接信息。
OpenAI 的情况
API 密钥
使用的模型(gpt-4o、gpt-4o-mini 等)
最大 token 数
Ollama 的情况
Ollama 服务器 URL
使用的模型名称
通过 Docker Compose 添加服务
services:
ollama:
image: ollama/ollama
volumes:
- ollama-data:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
AI 聊天体验
聊天界面
启用 AI 搜索模式后,Fess 的搜索界面将增加 AI 搜索模式。 用户可以在关键词搜索和 AI 聊天之间切换使用。
问答示例
问题:”请告诉我带薪休假的申请方法”
AI 回答:
带薪休假的申请按以下步骤进行:
访问企业内部门户的”考勤管理”页面
在”休假申请”菜单中选择”带薪休假”
输入日期,选择上级后提交申请
请在休假前 3 个工作日之前完成申请。
参考:[就业规则 第15条](https://portal/rules/chapter15.html)
回答中包含信息来源链接,用户可以查看原始文档。
Chat API(SSE)的使用
从程序中使用 AI 搜索模式时,请使用 Chat API。 Chat API 通过 Server-Sent Events(SSE)返回流式响应。
使用流式响应(SSE)的情况:
GET /api/v1/chat/stream?message=带薪休假的申请方法
获取非流式 JSON 响应的情况:
POST /api/v1/chat
Content-Type: application/x-www-form-urlencoded
message=带薪休假的申请方法
通过 SSE,每当生成回答时都会实时发送给客户端。 用户无需等待回答完全生成,即可开始阅读逐渐显示的回答。
对话历史
Chat API 支持基于会话的对话历史。 可以基于前一个问题的上下文进行追加提问。
示例:
Q1:”请告诉我带薪休假的申请方法”
A1:(上述回答)
Q2:”如果超过了申请期限该怎么办?”
A2:(基于 Q1 上下文的回答)
RAG 调优
回答质量的改善
RAG 的回答质量受以下因素影响:
搜索质量
RAG 基于搜索结果生成回答,因此搜索质量直接影响回答质量。 通过第8回介绍的调优周期来改善搜索质量,也能带动 RAG 质量的提升。
文档质量
如果搜索目标文档本身过时、不准确或含糊,RAG 的回答质量也会下降。 文档的定期更新和质量管理非常重要。
提示词设置
通过调优发送给 LLM 的提示词(指令文本),可以调整回答的风格和精确度。
安全性考量
提示词注入防护
Fess 的 RAG 功能内置了提示词注入防御机制。 能够防范通过恶意输入试图操控 LLM 行为的攻击。
信息泄露防止
RAG 基于搜索结果生成回答,与基于角色的搜索(第5回)结合使用,可确保仅生成与用户权限相匹配的回答。 用户无权访问的文档内容不会包含在 RAG 的回答中。
总结
本文介绍了使用 Fess 的 AI 搜索模式构建企业内部 AI 助手的方法。
RAG 流水线的工作原理(意图分析 -> 搜索 -> 评估 -> 回答生成)
三种 LLM 提供商(OpenAI、Gemini、Ollama)的选择标准
AI 搜索模式的设置与体验
通过 Chat API(SSE)从程序中使用
回答质量调优与安全性考量
借助基于企业内部文档的 AI 助手,知识利用方式将从”搜索”转变为”提问”。
下一回将介绍如何将 Fess 作为 MCP 服务器集成到 AI 代理中。