package context import ( "context" "fmt" "strings" "time" "github.com/edgeai/gateway/pkg/api" ) // SummaryGenerator 定义摘要生成接口,允许注入不同的实现。 type SummaryGenerator interface { // GenerateSummary 对给定消息生成对话摘要,返回摘要文本。 GenerateSummary(ctx context.Context, messages []api.Message) (string, error) } // Summarizer 使用 LLM 对历史消息生成对话摘要。 type Summarizer struct { generator SummaryGenerator timeout time.Duration } // NewSummarizer 创建一个新的摘要器。 func NewSummarizer(generator SummaryGenerator, timeout time.Duration) *Summarizer { return &Summarizer{ generator: generator, timeout: timeout, } } // Summarize 对被裁剪的老消息生成摘要。 // 如果摘要生成失败,回退到占位符文本。 func (s *Summarizer) Summarize(messages []api.Message) string { if s == nil || s.generator == nil || len(messages) == 0 { return "[Earlier conversation history has been summarized and omitted.]" } ctx, cancel := context.WithTimeout(context.Background(), s.timeout) defer cancel() summary, err := s.generator.GenerateSummary(ctx, messages) if err != nil || strings.TrimSpace(summary) == "" { return "[Earlier conversation history has been summarized and omitted.]" } return fmt.Sprintf("[Earlier conversation summary: %s]", strings.TrimSpace(summary)) }