- Регистрация
- 1 Мар 2015
- Сообщения
- 1,481
- Баллы
- 155
Integrating Semantic Kernel into ASP.NET applications is straightforward, due to built-in support for Dependency Injection (DI). This makes well-known features such as configuration, logging, and hosting trivial to use for AI Agent development. However, while debugging an agent issue, I discovered that all logging information from the Semantic Kernel was missing! This article explains issue's root cause and how to fix it.
The Original Setup
Here is a simplified version of the code I used to set up and use the Semantic Kernel in my ASP.NET application. Please note how IChatCompletionService and Kernel services are registered within DI container.
We use Agent to complete a chat based on user's prompt. All dependencies are injected into the Agent constructor automatically.
The Problem
After detecting an unrelated issue in request processing, I turned to good old console logs to find the root cause. To my surprise, I noticed no logging information was generated by the Kernel.
At first, I thought it was a configuration issue. But no matter how I configured the logging, nor what scope I set, the Kernel information was missing from the console. I even tried to set the logging level to Debug or Verbose, but nothing worked.
The Solution
It turned out that the issue was not in the Kernel itself, but in the way how underlying AzureOpenAIChatCompletionService was created. Even though the _kernel instance was used to call GetChatMessageContentAsync() method of IChatCompletionService, logging provider registered in DI container was not used. The solution was to provide it during registration of the AzureOpenAIChatCompletionService instance.
And whoila! Now we can see the debug information in the console!
Conclusion
Even though the Semantic Kernel is designed to work with DI, it does not mean other parts of .NET AI stack are. However, in this case, the solution was simple. Just make sure to pass the logging factory to the IChatCompletionService implementation.
The Original Setup
Here is a simplified version of the code I used to set up and use the Semantic Kernel in my ASP.NET application. Please note how IChatCompletionService and Kernel services are registered within DI container.
We use Agent to complete a chat based on user's prompt. All dependencies are injected into the Agent constructor automatically.
The Problem
After detecting an unrelated issue in request processing, I turned to good old console logs to find the root cause. To my surprise, I noticed no logging information was generated by the Kernel.
At first, I thought it was a configuration issue. But no matter how I configured the logging, nor what scope I set, the Kernel information was missing from the console. I even tried to set the logging level to Debug or Verbose, but nothing worked.
The Solution
It turned out that the issue was not in the Kernel itself, but in the way how underlying AzureOpenAIChatCompletionService was created. Even though the _kernel instance was used to call GetChatMessageContentAsync() method of IChatCompletionService, logging provider registered in DI container was not used. The solution was to provide it during registration of the AzureOpenAIChatCompletionService instance.
And whoila! Now we can see the debug information in the console!
Conclusion
Even though the Semantic Kernel is designed to work with DI, it does not mean other parts of .NET AI stack are. However, in this case, the solution was simple. Just make sure to pass the logging factory to the IChatCompletionService implementation.