快速结论:当你在 RAGFlow 的 Agent 里给 Retrieval 工具设置 retrieval_from: "memory" 并同时配置了 cross_languages 时,该参数会被接口接受并持久化,但在内存检索路径中被静默忽略,不会触发跨语言翻译。优先排查你当前使用的是 dataset 路径还是 memory 路径。
适用环境:Issue 中确认到的版本为 RAGFlow v0.26.4,涉及 agent/tools/retrieval.py,问题在 main 分支代码中同样存在。Issue 未提供操作系统、Python、CUDA、显卡或依赖版本信息。
最快修复方案:暂无确认的一步修复方案。Issue 讨论中给出的建议是在 _retrieve_memory() 的 query_message 调用前补上与 _retrieve_kb() 一致的 cross_languages 翻译步骤,或在 retrieval_from == "memory" 时隐藏/禁用该参数。这些均属于源码级修改建议,尚未有官方补丁或发版验证。
注意事项:上述补丁会额外引入一次 LLM 调用(dataset 路径实测约 245 tokens、约 1.9 秒),会拉长工具调用耗时并增加成本。若选择隐藏参数的方案,则需确认前端表单与后端 DSL 校验同步修改,否则历史 Agent 中已存的 cross_languages 仍会保留。
问题场景
在 RAGFlow 中搭建 Agent,并向其添加 Retrieval 工具,将检索来源设置为 retrieval_from: "memory" 并选定一个 memory,同时在该工具上设置 cross_languages: ["English"] 后保存 Agent。
通过 GET /api/v1/agents/<id> 读取 DSL 时,cross_languages 会正常出现在配置里,说明参数被接受并持久化。但用非英语提问并查看工具调用前后的 Agent 日志,可以发现没有任何翻译行为发生,表现等同于该参数不存在。
报错原文
[Bug]: Retrieval tool accepts cross_languages in memory mode and silently ignores it
Expected: either the query is translated before the memory search, or the parameter is rejected or visibly disabled for this mode.
Actual: no translation happens and there is no indication that the setting is inert.
原因分析
Retrieval 工具有两条执行路径,由 retrieval_from 决定:
retrieval_from == "dataset"时走_retrieve_kb(),其中在检索前调用了cross_languages(...)完成查询翻译。retrieval_from == "memory"时走_retrieve_memory(),该函数从查询格式化直接进入memory_message_service.query_message(...),没有等价的翻译步骤。
因此 cross_languages 在 memory 路径下被接受、写入 DSL 并在 API 返回,但从未被应用,属于“配置可见但行为静默无效”的问题。Issue 中还提到 memory 的 system_prompt / user_prompt 存在同类问题(已单独提交),即配置被存储却未传给抽取用的 LLM。
环境排查
- 确认 RAGFlow 版本:Issue 在 v0.26.4 上复现,
main分支代码同样确认存在该问题。 - 确认目标 Agent 中 Retrieval 工具的
retrieval_from取值是memory还是dataset;只有 memory 路径会触发本问题。 - 通过
GET /api/v1/agents/<id>检查 DSL 中cross_languages是否存在及其值,确认参数确实已保存。 - 检查 Agent 日志中
[ToolCall] invoke与[ToolCall] done之间是否出现额外的 LLM 翻译调用;memory 路径下不会出现。 - Issue 未提供操作系统、Python、CUDA、显卡与依赖版本信息,这些项目无需作为本问题排查重点。
解决步骤
- 先确认问题是否命中 memory 路径:将同一工具改为
retrieval_from: "dataset",在日志中观察[ToolCall] invoke与[ToolCall] done之间是否新增一次 LLM 调用(Issue 实测约 245 tokens、约 1.9 秒)。若 dataset 路径有翻译而 memory 路径没有,则确认是该缺陷。 - 若需要继续使用 memory 检索且必须跨语言,可优先尝试在源码中为
_retrieve_memory()补上翻译步骤:在query = self.string_format(query_text, vars)之后、query_message(...)调用之前,加入与_retrieve_kb()对应的cross_languages翻译逻辑,使用已获取的 memory 对象的tenant_id。cross_languages函数在该文件中已被导入,一般不需要新增 import。 - 如果不希望 memory 检索引入额外 LLM 调用,可优先尝试在
retrieval_from == "memory"时隐藏或禁用cross_languagesUI 选项,使前端展示、存储配置与运行时行为保持一致。 - 修改后重启相关服务,重新加载 Agent 配置,再重复第 1 步的对比验证。
验证方法
- 用非英语向 Agent 提问,检查 Agent 日志中 memory 检索工具调用内部是否出现翻译相关调用;如果补丁生效,应在
query_message之前产生一次翻译调用。 - 若采用 UI 禁用方案,确认在
retrieval_from: "memory"时表单不再展示或不允许编辑cross_languages,且新保存的 Agent DSL 中不再携带该参数。 - 复测
retrieval_from: "dataset"路径,确认原有翻译行为未受影响、无重复翻译调用。 - 确认新增翻译调用带来的 token 与耗时增量在可接受范围内(dataset 路径参考值约为 245 tokens、约 1.9 秒)。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[SAP provider] cache_control is stripped from messages — Anthropic prompt caching unusable](https://www.chat-gpts.plus/wp-content/uploads/2026/10/34797-cf3f6cac-768x403.jpg)
![[Bug]: Azure DeepSeek-V4.1-Flash cost map prices both Foundry paths from the Fireworks meter](https://www.chat-gpts.plus/wp-content/uploads/2026/10/43473-1e596b08-768x403.jpg)