概述
Ollama是用于在本地环境运行大型语言模型(LLM)的开源平台。 Fess 的Ollama集成功能以插件 fess-llm-ollama 的形式提供,适合在私有环境中使用。
使用Ollama,可以在不将数据发送到外部的情况下使用AI搜索模式功能。
主要特点
本地执行: 数据不发送到外部,确保隐私
多种模型: 支持Llama、Mistral、Gemma、CodeLlama等多种模型
成本效益: 无API成本(仅硬件成本)
可定制: 可使用自行微调的模型
支持的模型
Ollama可用的主要模型:
llama3.3:70b- Meta公司的Llama 3.3(700亿参数)gemma4:e4b- Google公司的Gemma 4(E4B参数,默认)mistral:7b- Mistral AI公司的Mistral(70亿参数)codellama:13b- Meta公司的Code Llama(130亿参数)phi3:3.8b- Microsoft公司的Phi-3(38亿参数)
Note
可用模型的最新列表请查阅 Ollama Library。
前提条件
使用Ollama前,请确认以下内容。
安装Ollama: 从 https://ollama.com/ 下载安装
下载模型: 将要使用的模型下载到Ollama
启动Ollama服务器: 确认Ollama正在运行
安装Ollama
Linux/macOS
Windows
从官网下载安装程序并运行。
Docker
下载模型
插件安装
Ollama集成功能以插件的形式提供。 使用Ollama需要安装 fess-llm-ollama 插件。
下载 fess-llm-ollama-15.7.0.jar。
将其放置到 Fess 安装目录下的
app/WEB-INF/plugin/目录。
重启 Fess。
Note
插件版本请与 Fess 版本保持一致。
基本配置
LLM相关配置分布在多个配置文件中。
最小配置
``system.properties``(也可在管理界面 > 系统 > 通用中配置):
app/WEB-INF/conf/fess_config.properties:
Note
LLM提供商的配置也可以通过管理界面(管理界面 > 系统 > 通用)设置 rag.llm.name。
推荐配置(生产环境)
``system.properties``(也可在管理界面 > 系统 > 通用中配置):
app/WEB-INF/conf/fess_config.properties:
配置项
Ollama客户端可用的所有配置项。 rag.llm.name 以外的所有配置均在 fess_config.properties 中设置。
| 属性 | 说明 | 默认值 |
|---|---|---|
rag.llm.ollama.api.url | Ollama服务器的基础URL | http://localhost:11434 |
rag.llm.ollama.model | 使用的模型名称(已下载到Ollama的模型) | gemma4:e4b |
rag.llm.ollama.timeout | 请求超时时间(毫秒) | 60000 |
rag.llm.ollama.availability.check.interval | 可用性检查间隔(秒)。指定 0 或以下时禁用定期可用性检查 | 60 |
rag.llm.ollama.max.concurrent.requests | 最大并发请求数 | 5 |
rag.llm.ollama.chat.evaluation.max.relevant.docs | 评估最大相关文档数 | 3 |
rag.llm.ollama.concurrency.wait.timeout | 并发控制许可获取的等待超时(毫秒) | 30000 |
rag.llm.ollama.connect.timeout | TCP连接超时(毫秒)。可独立于 rag.llm.ollama.timeout 单独指定 | 5000 |
rag.llm.ollama.retry.max | HTTP重试的最大尝试次数( 429 及 5xx 系错误时) | 3 |
rag.llm.ollama.retry.base.delay.ms | 指数退避的基准延迟时间(毫秒) | 2000 |
详细配置
与历史记录及上下文大小相关的详细配置项。
| 属性 | 说明 | 默认值 |
|---|---|---|
rag.llm.ollama.chat.evaluation.description.max.chars | 评估时说明的最大字符数 | 500 |
rag.llm.ollama.history.max.chars | 对话历史的最大字符数 | 4000 |
rag.llm.ollama.intent.history.max.messages | 意图判定时历史的最大消息数 | 6 |
rag.llm.ollama.intent.history.max.chars | 意图判定时历史的最大字符数 | 3000 |
rag.llm.ollama.history.assistant.max.chars | 助手响应历史的最大字符数 | 500 |
rag.llm.ollama.history.assistant.summary.max.chars | 助手摘要历史的最大字符数 | 500 |
并发控制
使用 rag.llm.ollama.max.concurrent.requests 可以控制对Ollama的并发请求数。 默认值为5。请根据Ollama服务器的资源进行调整。 并发请求数过多时,会给Ollama服务器增加负担,导致响应速度下降。
按提示词类型配置
Fess 中可以按提示词类型自定义LLM参数。 配置在 fess_config.properties 中记述。
按提示词类型可设置以下参数:
rag.llm.ollama.{promptType}.temperature- 生成时的temperaturerag.llm.ollama.{promptType}.max.tokens- 最大token数(映射到Ollama API的num_predict)rag.llm.ollama.{promptType}.context.max.chars- 上下文最大字符数rag.llm.ollama.{promptType}.thinking.budget- 思考预算(布尔形式的思考控制。详见”思考模型支持”)rag.llm.ollama.{promptType}.thinking.level- 思考级别(high/medium/low字符串形式。详见”思考模型支持”)rag.llm.ollama.{promptType}.top.p- Top-P采样的值rag.llm.ollama.{promptType}.top.k- Top-K采样的值rag.llm.ollama.{promptType}.num.ctx- 上下文窗口大小
各参数按以下顺序解析: rag.llm.ollama.{promptType}.<param> (按提示词类型的配置)→ rag.llm.ollama.default.<param> (所有提示词类型通用的回退值)→ 各提示词类型硬编码的默认值。在请求中显式指定的值始终优先。
可用的提示词类型:
| 提示词类型 | 说明 |
|---|---|
intent | 判定用户意图的提示词 |
evaluation | 评估搜索结果的提示词 |
unclear | 针对不明确查询的响应提示词 |
noresults | 无搜索结果时的提示词 |
docnotfound | 文档未找到时的提示词 |
answer | 生成回答的提示词 |
summary | 生成摘要的提示词 |
faq | 生成FAQ的提示词 |
direct | 直接响应的提示词 |
queryregeneration | 查询重新生成的提示词 |
各提示词类型在省略配置时适用硬编码的默认值。
| 提示词类型 | temperature | max.tokens | thinking.budget | context.max.chars |
|---|---|---|---|---|
intent | 0.1 | 256 | 0 | 6000 |
evaluation | 0.1 | 512 | 0 | 6000 |
unclear | 0.7 | 512 | 0 | 6000 |
noresults | 0.7 | 512 | 0 | 6000 |
docnotfound | 0.7 | 512 | 0 | 6000 |
answer | 0.5 | 8192 | (未设置) | 10000 |
summary | 0.3 | 8192 | (未设置) | 10000 |
faq | 0.7 | 4096 | (未设置) | 6000 |
direct | 0.7 | 4096 | (未设置) | 6000 |
queryregeneration | 0.3 | 256 | 0 | 6000 |
配置示例:
Ollama模型选项
可在 fess_config.properties 中设置Ollama的模型参数。 以 rag.llm.ollama.default.<param> 的形式指定时,作为所有提示词类型通用的回退值使用。 default 的回退不仅适用于 top.p / top.k / num.ctx,也适用于 temperature / max.tokens / thinking.budget / thinking.level。
| 属性 | 说明 | 默认值 |
|---|---|---|
rag.llm.ollama.default.top.p | Top-P采样的值(0.0〜1.0)。可通过 rag.llm.ollama.{promptType}.top.p 按提示词类型覆盖 | (未设置) |
rag.llm.ollama.default.top.k | Top-K采样的值。可通过 rag.llm.ollama.{promptType}.top.k 按提示词类型覆盖 | (未设置) |
rag.llm.ollama.default.num.ctx | 上下文窗口大小。可通过 rag.llm.ollama.{promptType}.num.ctx 按提示词类型覆盖 | (未设置) |
rag.llm.ollama.default.temperature | 生成时temperature的回退值。可通过 rag.llm.ollama.{promptType}.temperature 按提示词类型覆盖 | (未设置) |
rag.llm.ollama.default.max.tokens | 最大token数的回退值。可通过 rag.llm.ollama.{promptType}.max.tokens 按提示词类型覆盖 | (未设置) |
rag.llm.ollama.default.thinking.budget | 思考预算的回退值。可通过 rag.llm.ollama.{promptType}.thinking.budget 按提示词类型覆盖 | (未设置) |
rag.llm.ollama.default.thinking.level | 思考级别( high / medium / low )的回退值。可通过 rag.llm.ollama.{promptType}.thinking.level 按提示词类型覆盖 | (未设置) |
rag.llm.ollama.options.* | 直接传递给Ollama API的全局选项。后缀作为选项名使用(例: rag.llm.ollama.options.repeat_penalty=1.1)。值会自动转换为Integer、Double、Boolean、String类型 | (未设置) |
配置示例:
思考模型支持
使用gemma4或qwen3等思考模型(thinking model)时, Fess 支持设置思考预算(thinking budget)。
思考预算按提示词类型在 fess_config.properties 中设置:
通过设置思考预算,可以控制模型在生成回答前用于”思考”步骤的token数。
Note
在Ollama中,思考预算会被转换为布尔标志(值大于0时为 think: true,等于0时为 think: false)。由于Ollama API的限制,无法按token数进行精细控制。
思考级别(thinking level)
gpt-oss等部分模型会忽略布尔形式的 think 标志,需要使用 high / medium / low 字符串形式来指定思考级别。 此类模型请使用 rag.llm.ollama.{promptType}.thinking.level。
thinking.level 可设置的值为 high / medium / low 之一(不区分大小写)。指定无效值时将被忽略并输出警告日志。
Note
同时设置了 thinking.level (字符串形式)和 thinking.budget (布尔形式)时, thinking.level 优先。GPT-OSS系模型请使用 thinking.level,其他思考模型请使用 thinking.budget。
网络配置
Docker配置
Fess 官方的 docker-fess 中附带了Ollama用的overlay文件 compose-ollama.yaml。最小步骤如下。
compose-ollama.yaml 配置为使用NVIDIA GPU(需要NVIDIA Container Toolkit)。内容如下。
要点:
FESS_PLUGINS=fess-llm-ollama:15.7.0使启动脚本自动获取插件JAR并放置到 ``app/WEB-INF/plugin/``(版本请与您使用的 Fess 保持一致)-Dfess.config.rag.chat.enabled=true启用AI搜索模式-Dfess.config.rag.llm.ollama.api.url=...指定Ollama服务器的URL(在Docker Compose网络内可使用ollama01等服务名进行解析)LLM提供商(
rag.llm.name)的默认值为ollama,因此仅使用Ollama时无需显式指定。从其他提供商切换时,可在FESS_JAVA_OPTS中添加-Dfess.system.rag.llm.name=ollama,或在启动后通过管理界面”系统 > 通用”的RAG区段进行设置deploy.resources.reservations.devices块是使用GPU的配置。不使用GPU(仅CPU运行)时,请删除此块
Note
RAG_CHAT_ENABLED 或 RAG_LLM_NAME 等大写蛇形命名的环境变量不会被 Fess 直接识别。配置值必须在 FESS_JAVA_OPTS 中以 -Dfess.config.<key> ( fess_config.properties 系列)或 -Dfess.system.<key> ( system.properties 系列)的形式传递。
远程Ollama服务器
在与Fess不同的服务器上运行Ollama时:
Warning
Ollama默认没有认证功能,如果要从外部访问, 请考虑网络级别的安全措施(防火墙、VPN等)。
通过HTTP代理使用
Ollama客户端会共享 Fess 整体的HTTP代理配置。当连接Ollama服务器需要经过代理时(例如使用远程Ollama服务器时),请在 fess_config.properties 中指定以下属性。
| 属性 | 说明 | 默认值 |
|---|---|---|
http.proxy.host | 代理主机名(空字符串时不使用代理) | "" |
http.proxy.port | 代理端口号 | 8080 |
http.proxy.username | 代理认证的用户名(可选。指定后启用Basic认证) | "" |
http.proxy.password | 代理认证的密码 | "" |
Note
由于Ollama通常运行在本地或内部网络,需要代理配置的情况仅限于特定场景(例如使用仅能通过公司代理到达的远程Ollama服务器等)。 此配置同样会影响爬虫等 Fess 整体的HTTP访问。
模型选择指南
根据使用目的的模型选择指南。
| 模型 | 大小 | 所需VRAM | 用途 |
|---|---|---|---|
phi3:3.8b | 小 | 4GB以上 | 轻量环境、简单问答 |
gemma4:e4b | 小~中 | 8GB以上 | 平衡的通用用途、支持思考模式(默认) |
mistral:7b | 中 | 8GB以上 | 需要高质量回答 |
llama3.3:70b | 大 | 48GB以上 | 最高质量回答、复杂推理 |
GPU支持
Ollama支持GPU加速。使用NVIDIA GPU可显著提高推理速度。
故障排除
连接错误
症状: 聊天功能出错、显示LLM不可用
检查事项:
确认Ollama正在运行:
确认模型已下载:
检查防火墙设置
确认
fess-llm-ollama插件已放置到app/WEB-INF/plugin/
模型未找到
症状: 日志输出”Configured model not found”
解决方法:
确认模型名称正确(可能需要包含
:latest标签):下载所需模型:
超时
症状: 请求超时
解决方法:
延长超时时间:
考虑使用更小的模型或GPU环境
调试设置
调查问题时,可调整 Fess 日志级别输出Ollama相关的详细日志。
app/WEB-INF/classes/log4j2.xml:
参考信息
LLM 集成概述 - LLM集成概述
AI搜索模式功能配置 - AI搜索模式功能详情