langflow "Flow as Tool"和"Sub Flow" -以相同的方式崩溃

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

我正在使用Render上的Langflow v1.0.14,使用的是标准的流程。
当我尝试添加组件"Flow as Tool"时,它会显示我拥有的流程列表,但是当我尝试选择一个流程时,它只会在下拉菜单旁边放置一个复选框,但不会应用更改。如果我点击刷新流程以再次选择,它会崩溃。
之后,它给出了以下消息。

h22fl7wq

h22fl7wq1#

要解决在渲染上的Langflow中的"Flow as Tool"组件问题,请按照以下步骤操作:

  1. 确保流程名称正确加载:验证 get_flow_names 方法是否正确获取并返回流程名称列表。此方法应填充流程选择下拉框的选项。
  2. 更新构建配置:确保 update_build_config 方法正确使用可用的流程名称更新构建配置。此方法应在需要刷新流程名称时调用。
  3. 处理流程选择:确保流程选择逻辑正确更新内部状态以反映所选流程。这可能涉及调试UI组件以确保其正确处理选择事件。
  4. 错误处理:添加错误处理以捕获并记录在流程刷新过程中发生的任何异常,以防止崩溃。
    以下是一个代码片段,展示了如何更新构建配置和处理流程选择:
from typing import Any, List, Optional
from loguru import logger
from langflow.base.tools.flow_tool import FlowTool
from langflow.custom import CustomComponent
from langflow.field_typing import Tool
from langflow.graph.graph.base import Graph
from langflow.helpers.flow import get_flow_inputs
from langflow.schema import Data
from langflow.schema.dotdict import dotdict

class FlowToolComponent(CustomComponent):
    display_name = "Flow as Tool"
    description = "Construct a Tool from a function that runs the loaded Flow."
    field_order = ["flow_name", "name", "description", "return_direct"]
    trace_type = "tool"
    beta = True

    def get_flow_names(self) -> List[str]:
        flow_datas = self.list_flows()
        return [flow_data.data["name"] for flow_data in flow_datas]

    def get_flow(self, flow_name: str) -> Optional[Data]:
        """
Retrieves a flow by its name.

Args:
flow_name (str): The name of the flow to retrieve.

Returns:
Optional[Text]: The flow record if found, None otherwise.
"""
        flow_datas = self.list_flows()
        for flow_data in flow_datas:
            if flow_data.data["name"] == flow_name:
                return flow_data
        return None

    def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
        logger.debug(f"Updating build config with field value {field_value} and field name {field_name}")
        if field_name == "flow_name":
            build_config["flow_name"]["options"] = self.get_flow_names()

        return build_config

    def build_config(self):
        return {
            "flow_name": {
                "display_name": "Flow Name",
                "info": "The name of the flow to run.",
                "options": [],
                "real_time_refresh": True,
                "refresh_button": True,
            },
            "name": {
                "display_name": "Name",
                "description": "The name of the tool.",
            },
            "description": {
                "display_name": "Description",
                "description": "The description of the tool.",
            },
            "return_direct": {
                "display_name": "Return Direct",
                "description": "Return the result directly from the Tool.",
                "advanced": True,
            },
        }

    async def build(self, flow_name: str, name: str, description: str, return_direct: bool = False) -> Tool:
        FlowTool.update_forward_refs()
        flow_data = self.get_flow(flow_name)
        if not flow_data:
            raise ValueError("Flow not found.")
        graph = Graph.from_payload(flow_data.data["data"])
        inputs = get_flow_inputs(graph)
        tool = FlowTool(
            name=name,
            description=description,
            graph=graph,
            return_direct=return_direct,
            inputs=inputs,
            flow_id=str(flow_data.id),
            user_id=str(self._user_id),
        )
        description_repr = repr(tool.description).strip("'")
        args_str = "\n".join([f"- {arg_name}: {arg_data['description']}" for arg_name, arg_data in tool.args.items()])
        self.status = f"{description_repr}\nArguments:\n{args_str}"
        return tool  # type: ignore

确保 get_flow_names 方法已正确实现,并且适当调用 update_build_config 方法以刷新流程名称。此外,处理在流程刷新过程中可能发生的任何异常,以防止崩溃 1(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/experimental/FlowTool.py)2(https://github.com/langflow-ai/langflow/blob/dev/src/backend/base/langflow/components/prototypes/FlowTool.py)。
对于在Langflow 1.0之前创建的组件,您可能需要向现有流程中添加一些额外的组件,以确保兼容性:

  1. 添加一个可运行的执行器:将其连接到流程中的最后一个组件(链或代理)。
  2. 添加一个聊天输入和一个聊天输出:将它们连接到可运行的执行器。
    这应该有助于稳定组件并使它们与新版本的Langflow 3(https://github.com/logspace-ai/langflow/blob/dev/docs/docs/migration/compatibility.mdx)4(https://github.com/langflow-ai/langflow/blob/dev/docs/docs/migration/compatibility.mdx)兼容。
  • 要继续与 Dosu 交谈,请提及 @dosu。*

相关问题