langflow 需要提出一些问题,

tktrz96b  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(24)

Bug描述

我需要使用ToolCallAgent组件来制作一个会议预订系统和一个车站预订系统,并分别使用不同的过程完成这两个系统。然后我使用ToolCallAgent加上Flow作为工具来完成通话,并使用AI来确定要使用哪个系统。当我将其交给Flow作为工具进行呼叫时,遇到了几个问题,希望能得到解答或解决。1. 在使用Flow作为工具调用其他程序时如何传递参数。

重现步骤

我需要使用ToolCallAgent组件来制作一个会议预订系统和一个车站预订系统,并分别使用不同的过程完成这两个系统。然后我使用ToolCallAgent加上Flow作为工具来完成通话,并使用AI来确定要使用哪个系统。当我将其交给Flow作为工具进行呼叫时,遇到了几个问题,希望能得到解答或解决。1. 在使用Flow作为工具调用其他程序时如何传递参数。

预期行为

我需要使用ToolCallAgent组件来制作一个会议预订系统和一个车站预订系统,并分别使用不同的过程完成这两个系统。然后我使用ToolCallAgent加上Flow作为工具来完成通话,并使用AI来确定要使用哪个系统。当我将其交给Flow作为工具进行呼叫时,遇到了几个问题,希望能得到解答或解决。1. 在使用Flow作为工具调用其他程序时如何传递参数。

谁能帮忙?

  • 无响应*

操作系统

Windows

Langflow版本

1.0.14

Python版本

None

截图

  • 无响应*

Flow文件

  • 无响应*
5kgi1eie

5kgi1eie1#

要在使用FlowTool调用其他程序时传递参数,您可以使用位置参数或关键字参数。以下是如何操作的:

使用位置参数

确保位置参数的数量与工具期望的输入数量相匹配。工具将这些参数Map到相应的输入名称。

# Assuming the tool expects two inputs: "input1" and "input2"
result = flow_tool_instance._run("value1", "value2")

使用关键字参数

您可以将参数作为关键字参数传递,其中键是输入名称。

# Assuming the tool expects two inputs: "input1" and "input2"
result = flow_tool_instance._run(input1="value1", input2="value2")

代码解释

FlowTool中的_run方法处理参数的方式如下:

  • 首先使用get_arg_names(self.inputs)获取输入名称。
  • 如果位置参数的数量与输入名称的数量相匹配,则相应地Map它们。
  • 如果位置参数的数量不匹配,它会引发异常并建议使用关键字参数。
  • 然后从参数构建一个调整字典,并使用这些调整运行流程。

以下是相关代码的部分:

def _run(
    self,
    *args: Any,
    **kwargs: Any,
) -> str:
    """Use the tool."""
    args_names = get_arg_names(self.inputs)
    if len(args_names) == len(args):
        kwargs = {arg["arg_name"]: arg_value for arg, arg_value in zip(args_names, args)}
    elif len(args_names) != len(args) and len(args) != 0:
        raise ToolException(
            "Number of arguments does not match the number of inputs. Pass keyword arguments instead."
        )
    tweaks = {arg["component_name"]: kwargs[arg["arg_name"]] for arg in args_names}

    run_outputs = syncify(run_flow, raise_sync_error=False)(
        tweaks={key: {"input_value": value} for key, value in tweaks.items()},
        flow_id=self.flow_id,
        user_id=self.user_id,
    )
    if not run_outputs:
        return "No output"
    run_output = run_outputs[0]

    data = []
    if run_output is not None:
        for output in run_output.outputs:
            if output:
                data.extend(build_data_from_result_data(output, get_final_results_only=self.get_final_results_only))
    return format_flow_output_data(data)

此方法确保在运行流程1(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/base/tools/flow_tool.py)2(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/prototypes/FlowTool.py)之前正确传递和验证参数。

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

nvbavucw2#

根据我目前的了解,Flow作为工具仅在使用被调用的流程中的聊天输入和聊天输出组件时才能工作,因此您不能使用TWEAKS(除非您自己进行一些hacky的操作)。

我不推荐这个解决方案,但是一个可行的方法是将流程的聊天输入设置为JSON字符串(LLMs对JSON很熟悉),然后解析该字符串并相应地处理每个字段。

相关问题