-
Notifications
You must be signed in to change notification settings - Fork 3.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Python: Improve/Simplify the Assistant Agents #10666
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot reviewed 58 out of 58 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
python/samples/concepts/agents/assistant_agent/assistant_agent_streaming.py:54
- The 'MenuPlugin' is referenced but not defined or imported; please ensure it is properly defined or imported in this file.
plugins=[MenuPlugin()]
python/samples/concepts/agents/assistant_agent/assistant_agent_structured_outputs.py
Outdated
Show resolved
Hide resolved
python/semantic_kernel/agents/open_ai/open_ai_assistant_agent.py
Outdated
Show resolved
Hide resolved
if self.plugins: | ||
for plugin in self.plugins: | ||
name = self._get_plugin_name(plugin) | ||
self.kernel.add_plugin(plugin, plugin_name=name) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we need to check if a plugin already exists?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I want to document that if providing plugins
via the constructor, they will take precedence over any existing plugins (with the same name) that are contained in the kernel (if passed in).
Motivation and Context
The current abstractions we have around the Semantic Kernel Assistant Agents are considered to be "fully-wrapped." This is beneficial in that SK provides a tight/complete abstraction over the agent; however, it doesn't scale well when new features are added to the underlying APIs (OpenAI) - it requires updates from SK to make each and every update. It also adds a lot more complexity in terms of needing to handle everything in SK, requires more code coverage, and chances for bugs to surface due to these complexities.
Similar to how the
AzureAIAgent
was created, we're moving to a "less-wrapped" abstraction around the OpenAI Assistant v2 APIs. We do have some "convenience methods" on the Agents, via class methods, to configure things like the code interpreter tool and resource, file search tool and resource, the clients required to interact with the Assistants, as well as being able to easily configure structured outputs, similar to how it is done with a ChatCompletion (either provide the Pydantic model or the Python class).To work with Assistant Agents now, it's as simple as:
I will create a migration guide (issue) showing what needs to be updated from the previous usage to this new pattern.
Description
This PR provides the new abstractions for the
AzureAssistantAgent
/OpenAIAssistantAgent
classes.Samples will be updated accordingly to show new patterns.
Contribution Checklist