Bisheng的工作流与编排框架

Bisheng的工作流与编排框架

【免费下载链接】bisheng BISHENG毕昇 是一款 开源 LLM应用开发平台,主攻企业场景。 【免费下载链接】bisheng 项目地址: https://gitcode.com/dataelem/bisheng

Bisheng Workflow 是一个高度灵活且功能强大的工作流编排框架,专为复杂的企业级应用场景设计。其核心设计理念围绕模块化与可扩展性、Human-in-the-Loop、灵活的逻辑控制、高性能与异步支持、状态管理与上下文传递以及丰富的节点类型展开。通过模块化设计,每个节点都是一个独立的逻辑单元,可以自由组合和扩展。同时,框架支持在流程执行过程中引入人工干预,实现多轮对话和动态调整。此外,Bisheng Workflow 还支持复杂的逻辑控制,包括条件分支、并行执行和循环,并通过高效的流程执行引擎实现高性能与异步支持。

Bisheng Workflow的设计理念

Bisheng Workflow 是一个高度灵活且功能强大的工作流编排框架,专为复杂的企业级应用场景设计。其核心设计理念围绕以下几个关键点展开:

1. 模块化与可扩展性

Bisheng Workflow 采用模块化设计,每个节点(Node)都是一个独立的逻辑单元,可以自由组合和扩展。例如,BaseNode 是所有节点的基类,定义了节点的基本行为和接口,而具体的节点类型(如 LLMNodeToolNodeConditionNode 等)则通过继承基类实现特定功能。

mermaid

2. Human-in-the-Loop

Bisheng Workflow 支持在流程执行过程中引入人工干预(Human-in-the-Loop)。例如,InputNodeOutputNode 允许用户在流程的中间阶段输入数据或确认结果,从而实现多轮对话和动态调整。

mermaid

3. 灵活的逻辑控制

Bisheng Workflow 支持复杂的逻辑控制,包括条件分支(ConditionNode)、并行执行(通过 GraphEngine 实现)和循环(通过动态调整节点连接实现)。例如,ConditionNode 可以根据输入数据动态选择下一个节点:

class ConditionNode(BaseNode):
    def route_node(self, state: dict) -> str:
        if state.get("condition"):
            return "next_node_if_true"
        else:
            return "next_node_if_false"

4. 高性能与异步支持

Bisheng Workflow 通过 GraphEngineWorkflow 类实现了高效的流程执行引擎,支持同步和异步模式(runarun)。例如:

class Workflow:
    def __init__(self, workflow_id, user_id, workflow_data, async_mode=False):
        self.async_mode = async_mode

    def run(self, input_data=None):
        if self.async_mode:
            return self.arun(input_data)
        else:
            return self._run(input_data)

5. 状态管理与上下文传递

GraphState 类负责维护工作流的状态和上下文,支持跨节点共享数据。例如,可以通过 set_variableget_variable 方法在不同节点之间传递数据:

class GraphState:
    def set_variable(self, node_id: str, key: str, value: Any):
        self.variables[f"{node_id}.{key}"] = value

    def get_variable(self, node_id: str, key: str) -> Any:
        return self.variables.get(f"{node_id}.{key}")

6. 丰富的节点类型

Bisheng Workflow 提供了多种内置节点类型,覆盖了从数据处理到模型推理的各类需求。以下是部分节点类型的说明:

节点类型功能描述
LLMNode调用大语言模型(LLM)进行文本生成或推理。
ToolNode执行外部工具或脚本,支持动态参数传递。
ConditionNode根据条件动态选择下一个节点。
InputNode接收用户输入数据。
OutputNode输出结果或展示中间数据。
RAGNode实现检索增强生成(Retrieval-Augmented Generation)。

mermaid

通过以上设计理念,Bisheng Workflow 能够满足企业级应用的高复杂度需求,同时保持灵活性和易用性。

工作流的独立性与完备性

Bisheng的工作流框架在设计上充分考虑了独立性与完备性,确保每个工作流能够独立运行且覆盖企业级应用中的多样化需求。以下从多个维度分析其设计特点:

1. 模块化设计

Bisheng的工作流由多个节点(Node)组成,每个节点代表一个独立的功能单元。节点之间通过边(Edge)连接,形成有向无环图(DAG)。这种模块化设计使得工作流可以灵活组合,同时保持每个节点的独立性。

mermaid

2. 节点类型与功能完备性

Bisheng提供了多种节点类型,覆盖了从输入处理到输出生成的全流程需求:

节点类型功能描述
InputNode处理用户输入,支持文件上传、多轮对话等复杂场景。
LLMNode调用大语言模型生成内容,支持多模型切换和参数调优。
ToolNode执行工具调用,支持自定义工具扩展。
ConditionNode实现条件分支逻辑,支持复杂业务规则的动态路由。
OutputNode生成最终输出,支持多格式(文本、文件、API响应等)。

3. 独立性与隔离性

每个节点在运行时具有独立的状态和上下文,确保以下特性:

  • 状态隔离:节点的运行状态(如变量、中间结果)不会影响其他节点。
  • 错误隔离:单个节点的失败不会导致整个工作流崩溃,支持错误捕获和恢复机制。
  • 资源隔离:节点可以独立配置资源(如CPU、内存),避免资源争用。

4. 完备的输入输出支持

Bisheng的工作流支持多类型输入输出,满足企业级应用的复杂需求:

mermaid

5. 动态扩展能力

Bisheng的工作流框架支持动态扩展,用户可以通过以下方式自定义节点:

  • 继承BaseNode:实现自定义节点的核心逻辑。
  • 注册到NodeFactory:通过NodeManage类动态加载新节点类型。
class CustomNode(BaseNode):
    def _run(self, unique_id: str):
        # 自定义逻辑
        pass

6. 完备的调试与日志

每个节点提供详细的运行日志和调试接口,便于问题排查和性能优化:

def parse_log(self, unique_id: str, result: dict) -> Any:
    # 解析并记录节点运行日志
    return result

通过以上设计,Bisheng的工作流框架在独立性和完备性上达到了企业级应用的要求,能够高效支持复杂业务场景的实现。

Human in the loop的实现方式

在Bisheng的工作流与编排框架中,"Human in the loop"(人机交互)是一种关键机制,允许用户在流程执行过程中进行干预和反馈。这种机制不仅增强了工作流的灵活性,还支持多轮对话和复杂场景的交互。以下是其实现方式的技术细节:

1. 用户输入处理

用户输入通过input.py模块中的input节点处理。该节点负责捕获用户输入并将其保存到graph_state中,以便后续节点使用。具体实现如下:

def _run(self, unique_id: str):
    human_input = ""
    for key, value in self.user_input.items():
        if isinstance(value, dict):
            content = value.get('content', '')
            label = value.get('label', key)
            human_input += f"{label}: {content.rstrip(',')}\n"
        else:
            human_input += f"{key}: {value}\n"
    self.graph_state.save_context(content=f'{human_input}', msg_sender='human')
  • 功能:将用户输入格式化为字符串,并保存到graph_state中。
  • 关键点msg_sender='human'标记输入来源为用户,便于后续节点区分。

2. 消息传递与上下文管理

graph_state.py模块负责管理工作流的上下文,包括用户输入和历史记录。以下是其核心方法:

def save_context(self, content: str, msg_sender: str) -> None:
    self.history_memory.add_message(
        HumanMessage(content=content) if msg_sender == 'human' else AIMessage(content=content)
    )
  • 功能:根据msg_sender类型(humanAI)保存消息到历史记录。
  • 关键点:支持多轮对话,保留完整的交互历史。

3. LLM节点中的交互

llm.py模块中,LLM节点通过HumanMessage处理用户输入,并将其与上下文结合生成响应:

human_message = HumanMessage(content=[{
    'type': 'text',
    'text': self._parse_input_variable(input_variable)
}])
human_message = self.contact_file_into_prompt(human_message, self._image_prompt)
inputs.append(human_message)
  • 功能:将用户输入封装为HumanMessage,并与其他上下文数据结合。
  • 关键点:支持文件上传和文本输入的混合处理。

4. 条件分支与用户干预

condition.py模块支持根据用户输入动态调整工作流路径:

def route_node(self, state: dict) -> str:
    if state.get('user_choice') == 'option1':
        return 'node_id_1'
    else:
        return 'node_id_2'
  • 功能:根据用户选择跳转到不同的节点。
  • 关键点:用户干预直接影响工作流的执行路径。

5. 流程图展示

以下是"Human in the loop"的工作流程示意图:

mermaid

6. 表格总结

模块功能关键方法/类
input.py捕获用户输入_run, save_context
graph_state.py管理上下文和历史记录save_context
llm.py处理用户输入生成响应HumanMessage
condition.py动态调整工作流路径route_node

通过以上机制,Bisheng实现了高效、灵活的"Human in the loop"功能,支持复杂的企业级应用场景。

复杂场景下的工作流组合

Bisheng 的工作流编排框架支持在复杂场景下灵活组合多个工作流,以满足企业级应用的需求。本节将介绍如何通过 Bisheng 的 Workflow 类和相关组件实现复杂场景下的工作流组合,包括并行执行、条件分支、循环逻辑等高级功能。

1. 并行执行工作流

在需要同时处理多个独立任务的场景下,Bisheng 支持并行执行多个工作流。通过 Workflow 类的 runarun 方法,可以启动多个工作流实例,并通过回调机制监控其执行状态。

from bisheng.workflow.graph.workflow import Workflow

# 初始化多个工作流实例
workflow1 = Workflow(workflow_id="workflow1", user_id="user1")
workflow2 = Workflow(workflow_id="workflow2", user_id="user1")

# 并行执行
result1 = workflow1.run(input_data={"input_key": "value1"})
result2 = workflow2.run(input_data={"input_key": "value2"})
流程图示例

mermaid

2. 条件分支与动态路由

Bisheng 的 ConditionNodeRouteNode 组件支持根据运行时条件动态调整工作流路径。以下是一个条件分支的示例:

from bisheng.workflow.nodes.condition import ConditionNode

# 初始化条件节点
condition_node = ConditionNode(node_data={"condition": "input_value > 10"})

# 根据条件路由
if condition_node.evaluate(input_data={"input_value": 15}):
    workflow.run(input_data={"path": "high_value_path"})
else:
    workflow.run(input_data={"path": "low_value_path"})
状态图示例

mermaid

3. 循环逻辑与迭代处理

对于需要重复执行的任务,Bisheng 支持通过 LoopNode 实现循环逻辑。以下是一个循环处理数据的示例:

from bisheng.workflow.nodes.loop import LoopNode

# 初始化循环节点
loop_node = LoopNode(node_data={"max_iterations": 5})

# 循环执行任务
for i in range(loop_node.max_iterations):
    workflow.run(input_data={"iteration": i})
时序图示例

mermaid

4. 组合复杂场景

通过将并行、条件和循环逻辑组合,可以实现更复杂的业务场景。例如,以下是一个并行执行多个条件分支的示例:

# 并行执行多个条件分支
workflows = [
    Workflow(workflow_id=f"workflow_{i}", user_id="user1")
    for i in range(3)
]

for wf in workflows:
    if condition_node.evaluate(input_data={"input_value": random.randint(1, 20)}):
        wf.run(input_data={"path": "branch_a"})
    else:
        wf.run(input_data={"path": "branch_b"})
类图示例

mermaid

5. 总结

Bisheng 的工作流编排框架通过灵活的组件和强大的组合能力,能够满足复杂场景下的需求。无论是并行执行、条件分支还是循环逻辑,都可以通过简单的配置和代码实现。开发者可以根据具体业务需求,自由组合这些功能,构建高效、可靠的企业级应用。

总结

Bisheng 的工作流编排框架通过灵活的组件和强大的组合能力,能够满足复杂场景下的需求。无论是并行执行、条件分支还是循环逻辑,都可以通过简单的配置和代码实现。开发者可以根据具体业务需求,自由组合这些功能,构建高效、可靠的企业级应用。该框架在独立性和完备性上达到了企业级应用的要求,支持多类型输入输出、动态扩展能力以及完备的调试与日志功能,能够高效支持复杂业务场景的实现。

【免费下载链接】bisheng BISHENG毕昇 是一款 开源 LLM应用开发平台,主攻企业场景。 【免费下载链接】bisheng 项目地址: https://gitcode.com/dataelem/bisheng

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值