File tree Expand file tree Collapse file tree 1 file changed +15
-1
lines changed
Expand file tree Collapse file tree 1 file changed +15
-1
lines changed Original file line number Diff line number Diff 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 }
You can’t perform that action at this time.
0 commit comments