Files
microsoft--semantic-kernel/dotnet/samples/GettingStartedWithProcesses/Step00/Step00_Processes.cs
T
wehub-resource-sync b957a53def
CodeQL / Analyze (csharp) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:21:23 +08:00

71 lines
2.3 KiB
C#

// Copyright (c) Microsoft. All rights reserved.
using Microsoft.SemanticKernel;
using Step00.Steps;
namespace Step00;
/// <summary>
/// Demonstrate creation of the simplest <see cref="KernelProcess"/> and
/// eliciting its response to three explicit user messages.
/// </summary>
public class Step00_Processes(ITestOutputHelper output) : BaseTest(output, redirectSystemConsoleOutput: true)
{
public static class ProcessEvents
{
public const string StartProcess = nameof(StartProcess);
}
/// <summary>
/// Demonstrates the creation of the simplest possible process with multiple steps
/// </summary>
/// <returns>A <see cref="Task"/></returns>
[Fact]
public async Task UseSimplestProcessAsync()
{
// Create a simple kernel
Kernel kernel = Kernel.CreateBuilder()
.Build();
// Create a process that will interact with the chat completion service
ProcessBuilder process = new("ChatBot");
var startStep = process.AddStepFromType<StartStep>();
var doSomeWorkStep = process.AddStepFromType<DoSomeWorkStep>();
var doMoreWorkStep = process.AddStepFromType<DoMoreWorkStep>();
var lastStep = process.AddStepFromType<LastStep>();
// Define the process flow
process
.OnInputEvent(ProcessEvents.StartProcess)
.SendEventTo(new ProcessFunctionTargetBuilder(startStep));
startStep
.OnFunctionResult()
.SendEventTo(new ProcessFunctionTargetBuilder(doSomeWorkStep));
doSomeWorkStep
.OnFunctionResult()
.SendEventTo(new ProcessFunctionTargetBuilder(doMoreWorkStep));
doMoreWorkStep
.OnFunctionResult()
.SendEventTo(new ProcessFunctionTargetBuilder(lastStep));
lastStep
.OnFunctionResult()
.StopProcess();
// Build the process to get a handle that can be started
KernelProcess kernelProcess = process.Build();
// Start the process with an initial external event
await using var runningProcess = await kernelProcess.StartAsync(
kernel,
new KernelProcessEvent()
{
Id = ProcessEvents.StartProcess,
Data = null
});
}
}