必须用系统变量捕获+轻量检测+条件路由实现语言一致性:先定义会话变量response_language,再通过llm或代码节点检测detected_language,经条件分支赋值后,在最终llm提示词中绑定{{response_language}}强制响应。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中让AI自动识别用户提问语言并用同种语言回答,必须绕过模型“自行猜测”的不可控路径,改用系统变量捕获+轻量检测+条件路由的确定性链路。这套机制不依赖大模型的语言理解能力,避免因短句、混语、术语导致的误判,确保每轮响应语言与输入严格一致。
定义会话语言变量
进入Chatflow编辑界面,在左侧「变量」面板点击「添加变量」→选择类型为「会话变量」→变量名填 【response_language】 →数据类型选String→描述写“AI响应所用语言”。
这一步是整个流程的存储锚点,所有后续分支结果都必须写入该变量,否则LLM节点无法读取。
变量名必须严格为英文+下划线,不能含空格或中文,否则在提示词中引用{{response_language}}时会报错解析失败。
搭建语言检测与路由主干
从开始节点出发,按顺序拖入:开始节点 → LLM节点(语言检测) → 条件分支节点 → 变量赋值节点(x3) → LLM回答节点 → 结束节点。
注意:条件分支节点必须配置为「基于变量值判断」,判断字段填「detected_language」(即上一LLM节点的输出字段名),而非直接写{{response_language}}——因为此时该变量尚未被赋值。
配置语言检测LLM节点
方法一:用轻量提示词强制输出标准标识符
在LLM节点中设置系统提示词:“你是一个语言识别工具,仅分析以下文本的语言种类,输出且仅输出一个标准语言名称,如‘中文’‘English’‘日本語’‘Español’,禁止任何解释、标点或额外字符。”
用户输入填 {{sys.query}}。
关键输出字段设为 detected_language。
方法二:用代码执行节点调用langdetect库(更稳定)
添加「代码执行」节点,语言选Python,代码如下:
from langdetect import detect
try:
lang_code = detect({{sys.query}})
if lang_code == 'zh':
print('中文')
elif lang_code == 'en':
print('English')
else:
print(lang_code.title())
except:
print('中文')
输出字段同样设为 detected_language。
两种方法中,代码执行法对单字、emoji混排、极短问句(如“你好?”“OK?”)识别准确率更高,推荐优先使用。
设置条件分支与语言赋值
第一步:在条件分支节点中,添加三条规则:
① 如果 detected_language 等于 “中文”,则走分支1;
② 如果 detected_language 等于 “English”,则走分支2;
③ 其他情况统一走分支3(默认设为中文)。
第二步:每个分支后接一个「变量赋值」节点,分别将 response_language 设为:
分支1 → 值填 “中文”;
分支2 → 值填 “English”;
分支3 → 值填 “中文”。
第三步:三个变量赋值节点的输出必须全部连到同一个LLM回答节点——不能分三路连三个不同LLM节点,否则会触发三次独立调用,造成响应重复或超时。
编写带语言约束的提示词
在最终的LLM回答节点中,系统提示词开头必须明确声明:
“你是一个多语言助手,严格使用{{response_language}}作答。用户提问语言即为你唯一响应语言,禁止切换、补充其他语言内容。”
用户输入部分写:{{sys.query}}。
这一步是强制生效的关键——如果只在系统提示里写“请用中文回答”,而没绑定变量,模型仍可能根据自身偏好自由发挥。











