dify 当将textarea输入参数传递给代码执行节点时,出现了"Invalid value selector"错误,

6yoyoihd  于 2个月前  发布在  其他
关注(0)|答案(3)|浏览(88)

自检

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

Dify 版本

0.6.11

云或自托管

自托管 (Docker)

重现步骤

我创建了一个工作流,并制作了几个输入参数,其中一些是文本区域:

当我发现文本区域参数包含换行符时,代码执行节点出错:

在我删除 systemMessage 参数后,一切都正常了。

✔️ 预期行为

代码执行节点成功运行。

❌ 实际行为

代码执行节点发生错误:无效的值选择器

k75qkfdt

k75qkfdt1#

你好@all4you!我在这里协助你解决任何bug、问题或贡献。让我们一起解决你正在经历的问题。
convert_body 节点中出现的 "Invalid value selector" 错误可能是由于输入参数的预期结构与实际结构不匹配所致。具体来说,如果 query_variable_selector 与预期格式不匹配,或者选择器中引用的变量在提供的输入参数中找不到,就会出现这个错误。
以下是一些可能的原因和解决方案:

  1. 变量选择器不匹配:
    确保你的节点配置中的 variable_selector 正确匹配输入参数。例如,如果你的 systemMessage 参数预计将在 convert_body 节点中使用,请确保它被正确引用。
  2. 多行文本处理:
    convert_body 节点应正确处理多行文本输入。确保输入参数正确格式化,并对特殊字符(如换行符)进行正确编码。
  3. 验证和解析:
    convert_body 节点使用各种方法来验证和解析输入参数。确保输入参数符合预期的类型和结构。例如,_check_string 方法确保值是字符串,并替换任何空字符( \x00 )。
    以下是测试用例中与 variable_selector 相关的相关代码片段,演示了如何使用 variable_selector :
def test_execute_if_else_result_true():
    node = IfElseNode(
        tenant_id='1',
        app_id='1',
        workflow_id='1',
        user_id='1',
        user_from=UserFrom.ACCOUNT,
        invoke_from=InvokeFrom.DEBUGGER,
        config={
            'id': 'if-else',
            'data': {
                'title': '123',
                'type': 'if-else',
                'logical_operator': 'and',
                'conditions': [
                    {
                        'comparison_operator': 'contains',
                        'variable_selector': ['start', 'array_contains'],
                        'value': 'ab'
                    },
                    # other conditions...
                ]
            }
        }
    )
    # construct variable pool
    pool = VariablePool(system_variables={
        SystemVariable.FILES: [],
        SystemVariable.USER_ID: 'aaa'
    }, user_inputs={})
    pool.append_variable(node_id='start', variable_key_list=['array_contains'], value=['ab', 'def'])
    # other variable appends...

    # Mock db.session.close()
    db.session.close = MagicMock()

    # execute node
    result = node._run(pool)

    assert result.status == WorkflowNodeExecutionStatus.SUCCEEDED
    assert result.outputs['result'] is True

在这个测试中,如果 variable_selector['start', 'array_contains'] 不匹配输入参数中的任何变量,可能会导致 "Invalid value selector" 错误 1(https://github.com/langgenius/dify/blob/main/api/tests/unit_tests/services/workflow/test_workflow_converter.py)。
此外,WorkflowConverter 类中的 _convert_to_knowledge_retrieval_node 方法根据应用程序模式设置 query_variable_selector 并检索配置。如果未提供或提供的 retrieve_config.query_variable 与预期格式不匹配,也可能导致 "Invalid value selector" 错误 2(https://github.com/langgenius/dify/blob/main/api/services/workflow/workflow_converter.py)。
请确保你的输入参数及其选择器正确配置,以避免此错误。

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

5n0oy7gb2#

我发现了一个非常奇怪的问题,当我给textarea输入参数起名为以'sysXX'开头的名称时,例如:systemMessage、sysMessage,会导致bug。当我将其更改为prompt时,一切正常。

当我将其更改为systemPrompt时:

'start'节点丢失了,然后bug就发生了

t0ybt7op

t0ybt7op3#

测试v0.6.12-fix1

  1. message 在代码执行节点和结束节点工作正常

  1. sys_messgae 在代码执行节点工作失败

  1. sysmessge 在代码执行节点工作失败

  1. systemMessage 在代码执行节点工作失败

  1. message 在代码执行工作正常,systemMessage 在结束节点工作失败

相关问题