快速结论:当 RAGFlow 源码运行环境中把 OLLAMA_KEEP_ALIVE 设成 Ollama 官方的时长字符串(如 5m、24h)时,构造 OllamaEmbed 或 OllamaCV 会因 int() 转换失败而崩溃;优先检查该环境变量是否为非整数字符串,或升级到包含修复的版本。
适用环境:RAGFlow 源码运行(main @ 313ca90f6);macOS arm64;Python 3.13(uv sync --frozen);Ollama 0.34.3;模型 bge-m3。
最快修复方案:升级到 0.27.x 中包含 #20224(commit d030cc9)的修复版本;若暂时无法升级,可将 OLLAMA_KEEP_ALIVE 设为纯数字秒数(如 300)作为临时规避。
注意事项:该修复由社区 PR 引入并通过真实 Ollama 实例验证,但 Issue 中未列出升级后所有依赖组合的回归测试结论;临时改为数字秒数会失去 Ollama 原生时长字符串语义,仅作为过渡手段。
问题场景
用户在 macOS arm64 上以源码方式运行 RAGFlow,使用 Ollama 0.34.3 提供 embedding/vision 模型(如 bge-m3)。当按照 Ollama 文档把 OLLAMA_KEEP_ALIVE 设为时长字符串(5m 或 24h)以控制模型驻留时间时,构造 OllamaEmbed 或 OllamaCV 直接抛出单元格转换错误,导致 embedding 和 vision 模型无法初始化。即便同时显式传入 ollama_keep_alive="5m" kwarg,只要环境变量仍是时长字符串,依然会失败。
报错原文
ValueError: invalid literal for int() with base 10: '5m'
原因分析
RAGFlow 在 rag/llm/embedding_model.py 的 OllamaEmbed.__init__ 和 rag/llm/cv_model.py 的 OllamaCV.__init__ 中按如下方式读取 keep-alive:
self.keep_alive = kwargs.get("ollama_keep_alive", int(os.environ.get("OLLAMA_KEEP_ALIVE", -1)))
问题有两层:一是 Ollama 官方把 OLLAMA_KEEP_ALIVE 定义为时长字符串("5m"、"24h"),其 API 也接受同样格式,但这里直接做了 int() 转换;二是 int(os.environ.get(...)) 作为 kwargs.get 的默认值参数会被提前求值,因此即使显式传入 ollama_keep_alive="5m",只要环境变量是时长字符串,仍会在求默认值时先崩溃。该变量由 #9039 引入,目的是避免 Ollama 模型被永久固定在内存中(keep_alive=-1,参见 #8122 的 CPU 相关报告),而用户自然会填入 Ollama 文档推荐的值,结果触发此错误。
环境排查
- 确认
OLLAMA_KEEP_ALIVE当前取值:unset、-1、300可正常工作;5m、24h会触发ValueError。 - 确认 RAGFlow 运行方式与提交版本(Issue 为源码运行 main @ 313ca90f6)。
- 确认 Python 版本(Issue 为 Python 3.13)及依赖安装方式(
uv sync --frozen)。 - 确认 Ollama 版本(Issue 为 0.34.3)及目标模型(
bge-m3)。 - 确认是否同时传入了
ollama_keep_alivekwarg:即使显式传入,只要环境变量为非数字字符串仍会失败。
解决步骤
- 优先升级到包含 #20224(commit d030cc9)的
0.27.x修复版本;该 PR 新增rag/llm/ollama_utils.py辅助模块,由OllamaEmbed与OllamaCV共用:显式 kwarg 优先,否则环境变量为数字时按int解析、非数字时按字符串透传给 Ollama,默认值仍为-1,并附带单元测试(在main上失败、打补丁后通过)。 - 如果暂时无法升级,可先临时规避:把
OLLAMA_KEEP_ALIVE设为纯数字秒数(例如 Issue 验证过的300,表示约 5 分钟),不要设成5m或24h。 - 注意
main分支自 #20289 起已移除该代码路径,因此main不受此问题影响;若你运行的是较旧的源码或0.27.x之前的版本,需按上述方式处理。 - 如果使用的是自定义部署方式而非官方镜像,确认代码中
rag/llm/embedding_model.py与rag/llm/cv_model.py是否已包含ollama_utils的修复逻辑,避免只升级部分文件。
验证方法
修复后,在设置 OLLAMA_KEEP_ALIVE=5m 或 24h 的情况下,构造 OllamaEmbed 并执行 encode_queries('hello') 应能正常返回 embedding,不再抛出 ValueError。Issue 作者在真实 Ollama 上验证:设置 OLLAMA_KEEP_ALIVE=300 时,ollama ps 显示模型约 5 分钟后卸载,而不是一直驻留。你也可以用官方 Ollama 客户端对照确认同样参数可正常调用:Client(host=...).embed(model='bge-m3', input=['x'], keep_alive='5m'),应返回 1024 维向量。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[bug]: What I notice in Invoke 7](https://www.chat-gpts.plus/wp-content/uploads/2026/10/9699-b7a78e29-768x403.jpg)

