Table of Contents

SemanticKernelAgent only supports the original ChatMessageContent type via IMessage<ChatMessageContent>. To support more AutoGen built-in message types like TextMessage, ImageMessage, MultiModalMessage, you can register the agent with SemanticKernelChatMessageContentConnector. The SemanticKernelChatMessageContentConnector will convert the message from AutoGen built-in message types to ChatMessageContent and vice versa.

Note

At the current stage, SemanticKernelChatMessageContentConnector only supports conversation for the followng built-in IMessage

Function call message type like ToolCallMessage and ToolCallResultMessage are not supported yet.

var openAIKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY") ?? throw new Exception("Please set OPENAI_API_KEY environment variable.");
var modelId = "gpt-3.5-turbo";
var builder = Kernel.CreateBuilder()
   .AddOpenAIChatCompletion(modelId: modelId, apiKey: openAIKey);
var kernel = builder.Build();

// create a semantic kernel agent
var semanticKernelAgent = new SemanticKernelAgent(
    kernel: kernel,
    name: "assistant",
    systemMessage: "You are an assistant that help user to do some tasks.");

// Register the connector middleware to the kernel agent
var semanticKernelAgentWithConnector = semanticKernelAgent
    .RegisterMessageConnector();

// now semanticKernelAgentWithConnector supports more message types
IMessage[] messages = [
    MessageEnvelope.Create(new ChatMessageContent(AuthorRole.User, "Hello")),
    new TextMessage(Role.Assistant, "Hello", from: "user"),
    new MultiModalMessage(Role.Assistant,
        [
            new TextMessage(Role.Assistant, "Hello", from: "user"),
        ],
        from: "user"),
];

foreach (var message in messages)
{
    var reply = await semanticKernelAgentWithConnector.SendAsync(message);

    // SemanticKernelChatMessageContentConnector will convert the reply message to TextMessage
    reply.Should().BeOfType<TextMessage>();
}