TrimMessages 修剪消息列表,保留最近的 N 条消息 如果 maxMessages <= 0,则不修剪
(ctx context.Context, agentID string, maxMessages int)
| 140 | // TrimMessages 修剪消息列表,保留最近的 N 条消息 |
| 141 | // 如果 maxMessages <= 0,则不修剪 |
| 142 | func (js *JSONStore) TrimMessages(ctx context.Context, agentID string, maxMessages int) error { |
| 143 | if maxMessages <= 0 { |
| 144 | return nil // 不修剪 |
| 145 | } |
| 146 | |
| 147 | js.mu.Lock() |
| 148 | defer js.mu.Unlock() |
| 149 | |
| 150 | // 加载现有消息 |
| 151 | var messages []types.Message |
| 152 | path := filepath.Join(js.agentDir(agentID), "messages.json") |
| 153 | if err := js.loadJSON(path, &messages); err != nil { |
| 154 | return err |
| 155 | } |
| 156 | |
| 157 | // 如果消息数量未超过限制,不需要修剪 |
| 158 | if len(messages) <= maxMessages { |
| 159 | return nil |
| 160 | } |
| 161 | |
| 162 | // 保留最近的 maxMessages 条消息 |
| 163 | trimmedMessages := messages[len(messages)-maxMessages:] |
| 164 | |
| 165 | // 保存修剪后的消息 |
| 166 | return js.saveJSON(path, trimmedMessages) |
| 167 | } |
| 168 | |
| 169 | // SaveToolCallRecords 保存工具调用记录 |
| 170 | func (js *JSONStore) SaveToolCallRecords(ctx context.Context, agentID string, records []types.ToolCallRecord) error { |