--- title: Understanding the Experimental Attribute in Semantic Kernel description: Learn about experimental attribute in Semantic Kernel, why they exist, and how to use them. zone_pivot_groups: programming-languages author: shethaadit ms.topic: conceptual ms.author: shethaadit ms.date: 02/21/2025 ms.service: semantic-kernel --- # Experimental Features in Semantic Kernel Semantic Kernel introduces experimental features to provide early access to new, evolving capabilities. These features allow users to explore cutting-edge functionality, but they are not yet stable and may be modified, deprecated, or removed in future releases. ## Purpose of Experimental Features The `Experimental` attribute serves several key purposes: - **Signals Instability** – Indicates that a feature is still evolving and not yet production-ready. - **Encourages Early Feedback** – Allows developers to test and provide input before a feature is fully stabilized. - **Manages Expectations** – Ensures users understand that experimental features may have limited support or documentation. - **Facilitates Rapid Iteration** – Enables the team to refine and improve features based on real-world usage. - **Guides Contributors** – Helps maintainers and contributors recognize that the feature is subject to significant changes. ## Implications for Users Using experimental features comes with certain considerations: - **Potential Breaking Changes** – APIs, behavior, or entire features may change without prior notice. - **Limited Support** – The Semantic Kernel team may provide limited or no support for experimental features. - **Stability Concerns** – Features may be less stable and prone to unexpected behavior or performance issues. - **Incomplete Documentation** – Experimental features may have incomplete or outdated documentation. ### Suppressing Experimental Feature Warnings in .NET In the .NET SDK, experimental features generate compiler warnings. To suppress these warnings in your project, add the relevant diagnostic IDs to your `.csproj` file: ```xml $(NoWarn);SKEXP0001,SKEXP0010 ``` Each experimental feature has a unique diagnostic code (`SKEXPXXXX`). The full list can be found in **[EXPERIMENTS.md](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/docs/EXPERIMENTS.md)**. ## Using Experimental Features in .NET In .NET, experimental features are marked using the `[Experimental]` attribute: ```csharp using System; using System.Diagnostics.CodeAnalysis; [Experimental("SKEXP0101", "FeatureCategory")] public class NewFeature { public void ExperimentalMethod() { Console.WriteLine("This is an experimental feature."); } } ``` ### Experimental Feature Support in Other SDKs - **Python and Java** do not have a built-in experimental feature system like .NET. - Experimental features in **Python** may be marked using warnings (e.g., `warnings.warn`). - In **Java**, developers typically use custom annotations to indicate experimental features. ## Developing and Contributing to Experimental Features ### Marking a Feature as Experimental - Apply the `Experimental` attribute to classes, methods, or properties: ```csharp [Experimental("SKEXP0101", "FeatureCategory")] public class NewFeature { } ``` - Include a brief description explaining why the feature is experimental. - Use meaningful tags as the second argument to categorize and track experimental features. ### Coding and Documentation Best Practices - **Follow Coding Standards** – Maintain Semantic Kernel's coding conventions. - **Write Unit Tests** – Ensure basic functionality and prevent regressions. - **Document All Changes** – Update relevant documentation, including `EXPERIMENTS.md`. - **Use GitHub for Discussions** – Open issues or discussions to gather feedback. - **Consider Feature Flags** – Where appropriate, use feature flags to allow opt-in/opt-out. ### Communicating Changes - Clearly document updates, fixes, or breaking changes. - Provide migration guidance if the feature is evolving. - Tag the relevant GitHub issues for tracking progress. ## Future of Experimental Features Experimental features follow one of three paths: 1. **Graduation to Stable** – If a feature is well-received and technically sound, it may be promoted to stable. 2. **Deprecation & Removal** – Features that do not align with long-term goals may be removed. 3. **Continuous Experimentation** – Some features may remain experimental indefinitely while being iterated upon. The Semantic Kernel team strives to communicate experimental feature updates through release notes and documentation updates. ## Getting Involved The community plays a crucial role in shaping the future of experimental features. Provide feedback via: - **GitHub Issues** – Report bugs, request improvements, or share concerns. - **Discussions & PRs** – Engage in discussions and contribute directly to the codebase. ## Summary - **Experimental features** allow users to test and provide feedback on new capabilities in Semantic Kernel. - **They may change frequently**, have limited support, and require caution when used in production. - **Contributors should follow best practices**, use `[Experimental]` correctly, and document changes properly. - **Users can suppress warnings** for experimental features but should stay updated on their evolution. For the latest details, check **[EXPERIMENTS.md](https://github.com/microsoft/semantic-kernel/blob/main/dotnet/docs/EXPERIMENTS.md)**.