dify Sandbox截断了响应的一部分,

htrmnn0y  于 6个月前  发布在  其他
关注(0)|答案(7)|浏览(159)

自检

  • 这仅用于提交错误报告,如果您想提问,请访问 Discussions
  • 我已在 search for existing issues 中搜索了现有问题,包括已关闭的问题。
  • 我确认我使用英语提交此报告(我已阅读并同意 Language Policy )。
  • 请不要修改此模板 :) 并填写所有必填字段。

Dify版本

0.6.10

云或自托管

自托管(源代码)

重现步骤

创建一个带有代码块(Python)的工作流,并将输入变量字符串设置为大文本

✔️ 预期行为

在沙箱中正确执行代码并解析响应

❌ 实际行为

关闭沙箱中的部分响应,这就是为什么 transform_response 函数中的正则表达式不起作用(响应中与关闭 RESULT 标签的部分被截断),并且出现错误“CodeBlock_name run failed: Failed to parse result”。
沙箱中存在问题。

5us2dqdw

5us2dqdw1#

你好,@dailydaniel!我在这里帮助你解决仓库中的任何错误、问题或贡献。在你等待人工维护者时,我会协助你。

你在使用大型文本字符串作为输入变量时遇到的沙盒截断响应的问题可能是由于 CODE_MAX_STRING_LENGTH 配置引起的。根据提供的 docker-compose.yaml 文件,CODE_MAX_STRING_LENGTH 被设置为80000。

要解决这个问题,你可以将 CODE_MAX_STRING_LENGTH 增加到一个更高的值,以适应你的输入大小。以下是如何修改 docker-compose.yaml 文件的方法:

services:
  api:
    environment:
      # other configurations...
      CODE_MAX_STRING_LENGTH: 160000  # Increase this value as needed
      # other configurations...
  worker:
    environment:
      # other configurations...
      CODE_MAX_STRING_LENGTH: 160000  # Ensure this matches the api service
      # other configurations...
  sandbox:
    environment:
      # other configurations...
      CODE_MAX_STRING_LENGTH: 160000  # Ensure this matches the api and worker services
      # other configurations...

在进行此更改后,重新启动服务以应用新的配置。这应该可以防止沙盒截断响应,并允许 transform_response 函数正确解析结果。

此外,确保在你的 code_executor.py 文件中适当设置 CODE_EXECUTION_TIMEOUT 以处理可能需要的较长执行时间:

CODE_EXECUTION_TIMEOUT = (10, 60)  # Adjust the timeout values as necessary

此外,code_node.py 文件包含 MAX_STRING_LENGTH 常量,用于验证字符串的长度。请确保此常量设置正确:

MAX_STRING_LENGTH = int(os.environ.get('CODE_MAX_STRING_LENGTH', '80000'))

通过在环境中配置 CODE_MAX_STRING_LENGTH,你应该能够在不截断的情况下处理较大的输入字符串,从而避免与 transform_response 函数 1(https://github.com/langgenius/dify/blob/main/docker/docker-compose.yaml)2(https://github.com/langgenius/dify/blob/main/api/core/helper/code_executor/code_executor.py)3(https://github.com/langgenius/dify/blob/main/api/core/workflow/nodes/code/code_node.py) 相关的问题。

  • 要继续与 Dosu 对话,请提及 @dosu。*
7cjasjjr

7cjasjjr2#

在沙箱部分的docker-compose.yaml中没有CODE_MAX_STRING_LENGTH。我在各个地方(环境和其他文件)都增加了这个变量,结果没有改变。

cnh2zyt3

cnh2zyt33#

要解决沙盒截断响应部分的问题,即使在所有相关地方增加了 CODE_MAX_STRING_LENGTH 后,你也应该考虑以下几点:

  1. 验证沙盒配置:确保沙盒服务本身已配置为处理大型字符串。具体来说,请检查 WORKER_TIMEOUT 设置在 docker-compose.yaml 文件中,以便为处理大型字符串留出足够的时间。
sandbox:
  image: langgenius/dify-sandbox:0.2.1
  restart: always
  environment:
    API_KEY: dify-sandbox
    GIN_MODE: 'release'
    WORKER_TIMEOUT: 60  # Increase this value if needed
    ENABLE_NETWORK: 'true'
    HTTP_PROXY: 'http://ssrf_proxy:3128'
    HTTPS_PROXY: 'http://ssrf_proxy:3128'
    SANDBOX_PORT: 8194
  volumes:
    - ./volumes/sandbox/dependencies:/dependencies
  networks:
    - ssrf_proxy_network
  1. 检查最大有效载荷大小:确保沙盒服务或其他 Dify 基础设施的其他部分中没有配置其他最大有效载荷大小或请求大小限制。 CODE_MAX_STRING_LENGTHTEMPLATE_TRANSFORM_MAX_LENGTH 应适当设置。
CODE_MAX_STRING_LENGTH: 160000
TEMPLATE_TRANSFORM_MAX_LENGTH: 160000
  1. 日志记录和调试:启用详细日志记录,以便更多地了解为什么响应会被截断。请将沙盒服务配置中的 GIN_MODE 更改为 'debug'
GIN_MODE: 'debug'
  1. Nginx 配置:确保 Nginx 配置允许大型请求体。 client_max_body_size 应设置为可以容纳您的大型文本字符串的值。
client_max_body_size 15M;
  1. 代码调整:验证 code_executor.pycode_node.py 文件是否正确处理 CODE_MAX_STRING_LENGTH 设置。确保 code_node.py 中的 _check_string 方法已正确配置。
MAX_STRING_LENGTH = int(os.environ.get('CODE_MAX_STRING_LENGTH', '160000'))
def _check_string(self, value: str, variable: str) -> str:
    if not isinstance(value, str):
        raise ValueError(f"Output variable `{variable}` must be a string")

    if len(value) > MAX_STRING_LENGTH:
        raise ValueError(f'The length of output variable `{variable}` must be less than {MAX_STRING_LENGTH} characters')

    return value.replace('\x00', '')

通过确保这些配置和设置正确应用,你应该能够处理较大的输入字符串而不会被截断,从而避免了与 transform_response 函数 1(https://github.com/langgenius/dify/blob/main/docker/docker-compose.yaml)2(https://github.com/langgenius/dify/blob/main/api/core/workflow/nodes/code/code_node.py) 相关的问题。

  • 要继续与 Dosu 交谈,请提及 @dosu。*
cu6pst1q

cu6pst1q4#

我对于长数据也有同样的问题。

nlejzf6q

nlejzf6q6#

尝试设置这个环境变量:
dify/api/configs/app_config.py
第60行 c436454
| | HTTP_REQUEST_NODE_MAX_TEXT_SIZE: int=1024*1024 |

xxe27gdn

xxe27gdn7#

它不能正常工作。

相关问题