Wednesday, July 16, 2025

Semantic Kernel C# Musings

To connect to a existing AI Foundry Agent

using Azure.AI.Agents.Persistent;

using Azure.Identity;

using Microsoft.Extensions.Options;

using Microsoft.SemanticKernel;

using Microsoft.SemanticKernel.Agents;

using Microsoft.SemanticKernel.Agents.AzureAI;

using Microsoft.SemanticKernel.ChatCompletion;

using Microsoft.SemanticKernel.Connectors.OpenAI;

#pragma warning disable SKEXP0110

    public class UnivusService : IUnivusService

    {

        private readonly PersistentAgent _bookSearchAgent;

        private readonly AzureAIAgent _bookSearchSKAgent;

        public UnivusService(IOptions<FoundryConfig> foundryConfig)

        {

            PersistentAgentsClient client = AzureAIAgent.CreateAgentsClient(foundryConfig.Value.AZURE_FOUNDRY_PROJECT_ENDPOINT, new AzureCliCredential());

            _bookSearchAgent = client.Administration.GetAgent("asst_GfnTEQKSc...");

            // Create a Semantic Kernel agent based on the agent definition

            _bookSearchSKAgent = new(_bookSearchAgent, client);

        }


        public async Task<string> ChatCompletionAsync(string userInput)

        {

            AzureAIAgentThread agentThread = new(_bookSearchSKAgent.Client);

            try

            {

                ChatMessageContent message = new(AuthorRole.User, userInput);

                await foreach (ChatMessageContent response in _bookSearchSKAgent.InvokeAsync(message, agentThread))

                {

                    return response.Content;

                }

            }

            finally

            {

                await agentThread.DeleteAsync();                

            }


            return string.Empty;

        }

    }