Skip to content
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

.Net Agents - ChatHistory Reducer Pattern #7570

Merged
merged 47 commits into from
Aug 7, 2024

Conversation

crickman
Copy link
Contributor

@crickman crickman commented Jul 31, 2024

Motivation and Context

Introduce ability to reduce the length of the chat-history when using the Agent Framework.

A prolonged agent dialog can exceed the allowed token limit. As such, introducing a technique for managing chat-history is critical. Such a technique must be available for both AgentChat and No-Chat invocation modes.

Note: This consideration only applies to ChatCompletionAgent as the Assistant API manages this internally for OpenAIAssistantAgent.

Description

  • Define IChatHistoryReducer contract
  • Add ChatCompletionAgent.HistoryReducer nullable/optional property
  • Update ChatCompletionAgent.GetChannelKeys() to assign agents to dedicted channels based on reducer.
  • Implement "Top N" truncating reducer: ChatHistoryTruncationReducer
  • Implement summarizing reducer: ChatHistorySummarizationReducer
  • Allow prompt customization for ChatHistorySummarizationReducer
  • Update ChatHistoryChannel to make use of agent-reducer, if present
  • Add ChatCompletion_HistoryReducer sample under Concepts

Contribution Checklist

@crickman crickman self-assigned this Jul 31, 2024
@markwallace-microsoft markwallace-microsoft added the .NET Issue or Pull requests regarding .NET code label Jul 31, 2024
@crickman crickman marked this pull request as ready for review July 31, 2024 04:43
@crickman crickman requested a review from a team as a code owner July 31, 2024 04:43
@crickman crickman requested a review from moonbox3 August 1, 2024 20:36
@crickman crickman changed the title .Net Agents - ChatHistory Reducer Pattern (DRAFT) .Net Agents - ChatHistory Reducer Pattern Aug 1, 2024
@crickman crickman added the PR: ready for review All feedback addressed, ready for reviews label Aug 1, 2024
@crickman crickman added this pull request to the merge queue Aug 7, 2024
Merged via the queue into main with commit 3b0d086 Aug 7, 2024
18 checks passed
@crickman crickman deleted the feature_agent_history_truncation branch August 7, 2024 20:08
@crickman crickman removed PR: ready for review All feedback addressed, ready for reviews PR: in progress Under development and/or addressing feedback labels Aug 7, 2024
LudoCorporateShark pushed a commit to LudoCorporateShark/semantic-kernel that referenced this pull request Aug 25, 2024
### Motivation and Context
<!-- Thank you for your contribution to the semantic-kernel repo!
Please help reviewers and future users, providing the following
information:
  1. Why is this change required?
  2. What problem does it solve?
  3. What scenario does it contribute to?
  4. If it fixes an open issue, please link to the issue here.
-->
Introduce ability to reduce the length of the chat-history when using
the _Agent Framework_.

A prolonged agent dialog can exceed the allowed token limit. As such,
introducing a technique for managing chat-history is critical. Such a
technique must be available for both `AgentChat` and _No-Chat_
invocation modes.

> Note: This consideration only applies to `ChatCompletionAgent` as the
Assistant API manages this internally for `OpenAIAssistantAgent`.

### Description
<!-- Describe your changes, the overall approach, the underlying design.
These notes will help understanding how your code works. Thanks! -->

- Define `IChatHistoryReducer` contract
- Add `ChatCompletionAgent.HistoryReducer` nullable/optional property
- Update `ChatCompletionAgent.GetChannelKeys()` to assign agents to
dedicted channels based on reducer.
- Implement "Top N" truncating reducer: `ChatHistoryTruncationReducer`
- Implement summarizing reducer: `ChatHistorySummarizationReducer`
- Allow prompt customization for `ChatHistorySummarizationReducer`
- Update `ChatHistoryChannel` to make use of agent-reducer, if present
- Add `ChatCompletion_HistoryReducer` sample under _Concepts_

### Contribution Checklist
<!-- Before submitting this PR, please make sure: -->

- [x] The code builds clean without any errors or warnings
- [X] The PR follows the [SK Contribution
Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md)
and the [pre-submission formatting
script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts)
raises no violations
- [X] All unit tests pass, and I have added new tests where possible
- [X] I didn't break anyone 😄
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
agents experimental Associated with an experimental feature .NET Issue or Pull requests regarding .NET code
Projects
Archived in project
4 participants