目录
一、问题描述
二、解决方法
2.1 原因
2.2 修改源码
2.3 重新打包 dify-api 镜像
2.4 修改 docker-compose.yaml 文件
2.5 重启启动镜像
一、问题描述
Dify 0.15.3 是一个比较稳定的版本,Dify 1.0 是一个大版本更新,目前还有很多 Bug。但是,Dify 0.15.3 在【开始】组件中存在一个Bug,即:同一个对话中,输入变量无法被重新赋值。
如上所示,val 变量值在同一会话中多次从 inputs 字段传入参数赋值时,val 一直是最初的值,不会变化。
二、解决方法
2.1 原因
这是因为在 Dify 0.15.3 源码中,处理逻辑是:如果会话存在,则不解析输入参数,只有第一次会话时解析会话参数,原代码如下所示。
conversation_id=conversation.id if conversation else None,
inputs=conversation.inputs
if conversation # 旧会话不解析输入参数
else self._prepare_user_inputs( # 新会话解析输入参数user_inputs=inputs, variables=app_config.variables, tenant_id=app_model.tenant_id
),
query=query,
2.2 修改源码
分别修改api/core/app/apps/advanced_chat/app_generator.py、api/core/app/apps/agent_chat/app_generator.py、api/core/app/apps/chat/app_generator.py 的代码,如下所示。
2.3 重新打包 dify-api 镜像
修改代码后,使用 api/Dockerfile 文件重新打包 api 镜像,执行如下命令。
docker build -t dify-api:0.15.4 .
2.4 修改 docker-compose.yaml 文件
如果 Dify 还在运行中,执行如下命令停止,如下所示。
PS E:\code\code\dify-0.15.3\docker> docker compose down
[+] Running 11/11✔ Container docker-sandbox-1 Removed 0.8s✔ Container docker-weaviate-1 Removed 0.5s✔ Container docker-nginx-1 Removed 10.8s✔ Container docker-worker-1 Removed 5.2s✔ Container docker-ssrf_proxy-1 Removed 11.0s✔ Container docker-web-1 Removed 10.4s✔ Container docker-api-1 Removed 4.2s✔ Container docker-db-1 Removed 0.8s✔ Container docker-redis-1 Removed 0.7s✔ Network docker_ssrf_proxy_network Removed 0.4s✔ Network docker_default Removed 0.2s
PS E:\code\code\dify-0.15.3\docker>
修改 docker/docker-compose.yaml 中使用的 docker 镜像,修改 api 和 worker 使用的镜像为 dify-api:0.15.4,如下所示。
api:image: langgenius/dify-api:0.15.4 # 修改为 0.15.4restart: alwaysenvironment:......# worker service# The Celery worker for processing the queue.
worker:image: langgenius/dify-api:0.15.4 # 修改为 0.15.4restart: alwaysenvironment:......
2.5 重启启动镜像
执行如下命令重启 Dify。
PS E:\code\code\dify-0.15.3\docker> docker compose up -d
[+] Running 11/11✔ Network docker_ssrf_proxy_network Created 0.0s✔ Network docker_default Created 0.0s✔ Container docker-db-1 Started 1.1s✔ Container docker-ssrf_proxy-1 Started 2.0s✔ Container docker-sandbox-1 Started 1.7s✔ Container docker-web-1 Started 1.5s✔ Container docker-redis-1 Started 1.8s✔ Container docker-weaviate-1 Started 1.7s✔ Container docker-worker-1 Started 2.8s✔ Container docker-api-1 Started 2.8s✔ Container docker-nginx-1 Started 3.2s
PS E:\code\code\dify-0.15.3\docker>
执行完以上修改后,开始组件中的变量就可以重新赋值了。
参考链接:
Ensure the 'inputs' field in /chat-messages takes effect every time by Wu-Jiayang · Pull Request #7955 · langgenius/dify · GitHub