compressSimple 简单压缩(基于规则)
(ctx context.Context, prompt string, opts *CompressOptions)
| 249 | |
| 250 | // compressSimple 简单压缩(基于规则) |
| 251 | func (s *DefaultCompressionService) compressSimple(ctx context.Context, prompt string, opts *CompressOptions) (*CompressResult, error) { |
| 252 | // 如果设置了底层压缩器,使用它 |
| 253 | if s.compressor != nil { |
| 254 | compressOpts := &PromptCompressOptions{ |
| 255 | TargetLength: opts.TargetLength, |
| 256 | Mode: string(ModeSimple), |
| 257 | Level: int(opts.Level), |
| 258 | PreserveSections: opts.PreserveSections, |
| 259 | } |
| 260 | result, err := s.compressor.Compress(ctx, prompt, compressOpts) |
| 261 | if err != nil { |
| 262 | return nil, err |
| 263 | } |
| 264 | return &CompressResult{ |
| 265 | Compressed: result.Compressed, |
| 266 | OriginalLength: result.OriginalLength, |
| 267 | CompressedLength: result.CompressedLength, |
| 268 | CompressionRatio: result.CompressionRatio, |
| 269 | TokensSaved: result.TokensSaved, |
| 270 | }, nil |
| 271 | } |
| 272 | |
| 273 | // 降级:使用内置的简单压缩逻辑 |
| 274 | compressed := s.simpleCompressInternal(prompt, opts) |
| 275 | |
| 276 | tokensSaved := 0 |
| 277 | if len(prompt) > 0 { |
| 278 | tokensSaved = (len(prompt) - len(compressed)) / 4 // 粗略估算 |
| 279 | } |
| 280 | |
| 281 | compressionRatio := 1.0 |
| 282 | if len(prompt) > 0 { |
| 283 | compressionRatio = float64(len(compressed)) / float64(len(prompt)) |
| 284 | } |
| 285 | |
| 286 | return &CompressResult{ |
| 287 | Compressed: compressed, |
| 288 | OriginalLength: len(prompt), |
| 289 | CompressedLength: len(compressed), |
| 290 | CompressionRatio: compressionRatio, |
| 291 | TokensSaved: tokensSaved, |
| 292 | }, nil |
| 293 | } |
| 294 | |
| 295 | // simpleCompressInternal 内置简单压缩实现 |
| 296 | func (s *DefaultCompressionService) simpleCompressInternal(prompt string, opts *CompressOptions) string { |
no test coverage detected