dify chatflow
dify chatflow用于设计聊天。 与workflow不同,workflow主要用于单次调用,而chatflow的llm节点里可以启用聊天记忆,并且聊天记忆可以在多个不同的llm节点共享。
下面示例我使用sys.dialogue_count来判断对话轮次,然后根据奇偶轮走不同的llm节点。

llm节点属性设置里打开记忆功能,注意,这个上面那部分system prompt(并且还能手动添加user prompt)是不同的。

从运行日志可以看到,奇偶数轮次对话其实共享了聊天记录。因此,在第2轮(注意,sys.dialogue_count从0开始)我告诉他我的名字后,第3轮他虽然会走到与第2轮不同的llm节点,但他还是记住了我的名字。

我们看一下最后一轮AI接收到的实际的输入内容:

{
"model_mode": "chat",
"prompts": [
{
"role": "user",
"text": "你好呀",
"files": []
},
{
"role": "assistant",
"text": "你好呀!😊 今天过得怎么样呀?有什么想聊的吗?",
"files": []
},
{
"role": "user",
"text": "你是谁?",
"files": []
},
{
"role": "assistant",
"text": "我是通义千问,一个由阿里巴巴集团研发的大型语言模型。我能够帮助你回答问题、创作文字、进行对话等。如果你有任何问题或需要帮助,随时告诉我哦!😊",
"files": []
},
{
"role": "user",
"text": "我叫Roland",
"files": []
},
{
"role": "assistant",
"text": "你好,Roland!很高兴认识你😊 有什么我可以帮你的吗?",
"files": []
},
{
"role": "user",
"text": "我叫什么名字?",
"files": []
}
],
"model_provider": "langgenius/tongyi/tongyi",
"model_name": "qwen3-4b"
}
可以看到,llm节点的输入其实是整个聊天历史记录,再加上这一次用户说话的内容(sys.query)。
llm节点的记忆属性开户后,里面的user prompt是必须要包括sys.query内容的。
比如下面我做个实验,故意不包含sys.query,结果是第二个llm节点其实没有接受到聊天历史记录,即便已打开了记忆属性。

可以看到,运行日志里显示,第二个llm节点并没有接收到历史聊天记录, 即便两个llm节点是串联的。

为了搞清多轮对话到底怎样记录聊天内容,我做如下简单示例:

这个示例中虽然用户的问题会传递给llm节点,并记录历史会话,但是回复节点我用的却是固定的内容,这样每轮会话实际上 AI都会回复固定的内容。
下面我们看看最后一轮的AI节点里AI收到的提示词是什么样子的

可以看到,会话历史记录的内容都是每轮用户的提问(sys.query)加上回复节点输出的内容,而并不是llm节点里实际问AI的以及AI实际回复的内容。

浙公网安备 33010602011771号