目錄
一、問題描述
?二、解決方法
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