Skip to content

Commit 5f3eb88

Browse files
author
xcssa
committed
修改记忆裁剪问题
1 parent a64cc3b commit 5f3eb88

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

sharpclaw/Chat/SlidingWindowChatReducer.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,27 @@ public async Task<IEnumerable<ChatMessage>> ReduceAsync(
108108
if (conversationMessages.Count > _windowSize + _overflowBuffer)
109109
{
110110
var cutIndex = Math.Max(0, conversationMessages.Count - _windowSize);
111+
var originalCutIndex = cutIndex;
112+
var searchLimit = Math.Min(cutIndex + _overflowBuffer, conversationMessages.Count - 1);
111113

112-
while (cutIndex < conversationMessages.Count &&
114+
// 向前搜索最近的 User 消息边界,但限制搜索范围避免裁剪过多
115+
while (cutIndex < searchLimit &&
113116
conversationMessages[cutIndex].Role != ChatRole.User)
114117
{
115118
cutIndex++;
116119
}
117120

121+
// 如果向前没找到,向后搜索
122+
if (conversationMessages[cutIndex].Role != ChatRole.User)
123+
{
124+
cutIndex = originalCutIndex;
125+
while (cutIndex > 0 &&
126+
conversationMessages[cutIndex].Role != ChatRole.User)
127+
{
128+
cutIndex--;
129+
}
130+
}
131+
118132
trimmedMessages = conversationMessages.Take(cutIndex).ToList();
119133
conversationMessages = conversationMessages.Skip(cutIndex).ToList();
120134
}

0 commit comments

Comments
 (0)