CompressSystemPrompt 压缩 System Prompt
(ctx context.Context, prompt string, opts *CompressOptions)
| 154 | |
| 155 | // CompressSystemPrompt 压缩 System Prompt |
| 156 | func (s *DefaultCompressionService) CompressSystemPrompt(ctx context.Context, prompt string, opts *CompressOptions) (*CompressResult, error) { |
| 157 | startTime := time.Now() |
| 158 | |
| 159 | // 设置默认选项 |
| 160 | if opts == nil { |
| 161 | opts = &CompressOptions{ |
| 162 | Mode: ModeHybrid, |
| 163 | Level: LevelModerate, |
| 164 | Language: "zh", |
| 165 | UseCache: true, |
| 166 | } |
| 167 | } |
| 168 | |
| 169 | // 检查缓存 |
| 170 | if opts.UseCache { |
| 171 | cacheKey := s.generateCacheKey(prompt, opts) |
| 172 | if cached := s.cache.Get(cacheKey); cached != nil { |
| 173 | s.updateStats(cached, true) |
| 174 | cached.CacheHit = true |
| 175 | return cached, nil |
| 176 | } |
| 177 | } |
| 178 | |
| 179 | // 执行压缩 |
| 180 | var result *CompressResult |
| 181 | var err error |
| 182 | |
| 183 | switch opts.Mode { |
| 184 | case ModeSimple: |
| 185 | result, err = s.compressSimple(ctx, prompt, opts) |
| 186 | case ModeLLM: |
| 187 | result, err = s.compressLLM(ctx, prompt, opts) |
| 188 | case ModeHybrid: |
| 189 | result, err = s.compressHybrid(ctx, prompt, opts) |
| 190 | default: |
| 191 | return nil, fmt.Errorf("unsupported compression mode: %s", opts.Mode) |
| 192 | } |
| 193 | |
| 194 | if err != nil { |
| 195 | return nil, err |
| 196 | } |
| 197 | |
| 198 | // 设置结果信息 |
| 199 | result.Duration = time.Since(startTime) |
| 200 | result.Mode = string(opts.Mode) |
| 201 | result.CacheHit = false |
| 202 | |
| 203 | // 缓存结果 |
| 204 | if opts.UseCache { |
| 205 | cacheKey := s.generateCacheKey(prompt, opts) |
| 206 | s.cache.Set(cacheKey, result) |
| 207 | } |
| 208 | |
| 209 | // 更新统计 |
| 210 | s.updateStats(result, false) |
| 211 | |
| 212 | return result, nil |
| 213 | } |