首页
/ Semantic Kernel工作流框架深度解析:从入门到实践

Semantic Kernel工作流框架深度解析:从入门到实践

2025-06-19 18:25:08作者:翟江哲Frasier

概述

在现代AI应用开发中,如何将大语言模型(LLM)的能力与业务流程有机结合是一个关键挑战。Semantic Kernel工作流框架(Process Framework)正是为解决这一问题而设计,它提供了一种结构化方法来构建和管理AI驱动的业务流程。

核心概念

工作流框架包含五个核心组件:

  1. 流程(Process):整个工作流的容器,定义了从开始到结束的完整执行路径
  2. 步骤(Step):流程中的独立执行单元,每个步骤完成特定功能
  3. 事件(Event):步骤间通信的触发器,决定流程的走向
  4. 状态(State):贯穿整个流程的共享数据上下文
  5. 运行时(Runtime):负责流程的实际执行引擎

开发环境准备

在开始前,我们需要安装必要的Python包:

!pip install -U semantic-kernel==1.31.0 mermaid-py==0.7.1

然后导入关键模块:

import os
import asyncio
from enum import Enum
import mermaid as md

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.contents import ChatHistory
from semantic_kernel.functions import kernel_function
from semantic_kernel.kernel_pydantic import KernelBaseModel
from semantic_kernel.processes.kernel_process.kernel_process_step import KernelProcessStep
from semantic_kernel.processes.kernel_process.kernel_process_step_context import KernelProcessStepContext
from semantic_kernel.processes.kernel_process.kernel_process_step_state import KernelProcessStepState
from semantic_kernel.processes.local_runtime.local_event import KernelProcessEvent
from semantic_kernel.processes.local_runtime.local_kernel_process import start
from semantic_kernel.processes.process_builder import ProcessBuilder

第一个工作流:Hello World

让我们通过一个简单的"Hello World"示例来理解工作流框架的基本用法。

1. 定义事件枚举

首先,我们需要明确定义流程中可能发生的事件:

class HelloWorldEvents(Enum):
    StartProcess = "startProcess"
    NameReceived = "nameReceived"
    ProcessComplete = "processComplete"

2. 创建状态类

状态类用于在步骤间共享数据:

class HelloWorldState(KernelBaseModel):
    name: str = ""
    greeting: str = ""

3. 实现获取姓名步骤

class GetNameStep(KernelProcessStep[HelloWorldState]):
    def create_default_state(self) -> HelloWorldState:
        """创建默认状态"""
        return HelloWorldState()

    async def activate(self, state: KernelProcessStepState[HelloWorldState]):
        """步骤激活时初始化状态"""
        self.state = state.state or self.create_default_state()
        print("GetNameStep activated")

    @kernel_function(name="get_name")
    async def get_name(self, context: KernelProcessStepContext):
        """获取用户姓名"""
        print("What is your name?")
        name = input("Name: ")

        # 将姓名存储到状态中
        self.state.name = name
        print(f"Name set to: {self.state.name}")

        # 触发NameReceived事件
        await context.emit_event(
            process_event=HelloWorldEvents.NameReceived, data=self.state
        )

4. 实现问候语显示步骤

class DisplayGreetingStep(KernelProcessStep[HelloWorldState]):
    async def activate(self, state: KernelProcessStepState[HelloWorldState]):
        """步骤激活时初始化状态"""
        self.state = state.state or HelloWorldState()
        print("DisplayGreetingStep activated")

    @kernel_function(name="display_greeting")
    async def display_greeting(self, context: KernelProcessStepContext):
        """显示问候语"""
        self.state.greeting = f"Hello, {self.state.name}!"
        print(self.state.greeting)
        
        # 触发ProcessComplete事件
        await context.emit_event(
            process_event=HelloWorldEvents.ProcessComplete, data=self.state
        )

5. 构建并运行流程

async def run_hello_world_process():
    # 创建流程构建器
    builder = ProcessBuilder()
    
    # 添加步骤和事件处理
    builder.add_step(
        step=GetNameStep(),
        on_events=[HelloWorldEvents.StartProcess],
        transition_events=[HelloWorldEvents.NameReceived]
    )
    
    builder.add_step(
        step=DisplayGreetingStep(),
        on_events=[HelloWorldEvents.NameReceived],
        transition_events=[HelloWorldEvents.ProcessComplete]
    )
    
    # 构建流程
    process = builder.build()
    
    # 启动流程
    await start(
        process=process,
        initial_event=HelloWorldEvents.StartProcess,
        initial_state=HelloWorldState()
    )

# 运行流程
await run_hello_world_process()

流程可视化

使用mermaid可以直观展示流程结构:

flowchart LR
    A[Start] --> B[GetName]
    B -- "NameReceived" --> C[Greeting]
    C -- "ProcessComplete" --> D[Stop]

实际应用场景

工作流框架特别适合以下场景:

  1. 多步骤对话系统:管理复杂的对话流程和状态
  2. 内容生成流水线:将内容创作分解为规划、起草、编辑等步骤
  3. 数据处理流程:分阶段处理和分析数据
  4. 决策支持系统:基于条件触发不同处理路径

最佳实践

  1. 保持步骤单一职责:每个步骤应只完成一个明确的任务
  2. 合理设计状态结构:避免状态过于庞大或复杂
  3. 明确事件定义:事件应清晰表达业务含义
  4. 考虑错误处理:为关键步骤添加异常处理逻辑
  5. 模块化设计:使步骤可以在不同流程中复用

总结

Semantic Kernel的工作流框架为构建结构化AI应用提供了强大支持。通过将复杂流程分解为可管理的步骤,开发者可以更高效地实现包含LLM能力的业务逻辑。本文展示的基础示例只是开始,实际应用中可以根据需求扩展出更复杂的流程和功能。

登录后查看全文
热门项目推荐