Skip to content

[AI优化] 增量上下文更新 - 多轮对话性能优化 #94

@hrygo

Description

@hrygo

问题描述

当前每次对话都完整重建上下文:

// ai/context/builder_impl.go
func (b *contextBuilderImpl) Build(ctx context.Context, req *ContextRequest) (*ContextResult, error) {
    // 每次都完整构建
    shortTerm := b.shortTermExtractor.Extract(ctx, req)
    longTerm := b.longTermExtractor.Extract(ctx, req)
    retrieval := b.formatRetrievalResults(req.RetrievalResults)
    // ...
}

在多轮对话中,这导致:

  • 重新计算所有 Token 估算
  • 重新排序所有上下文片段
  • 重新截断到预算
  • 浪费计算资源(实际只有最新消息变化)

建议方案

实现增量上下文构建:

type IncrementalContextBuilder struct {
    lastResult   *ContextResult
    lastReqHash  string
    dirty        map[string]bool  // 标记需要更新的部分
}

type DeltaInfo struct {
    OnlyNewMessage     bool // 仅添加了新消息
    RetrievalUnchanged bool // 检索结果未变化
    PrefsUnchanged     bool // 用户偏好未变化
}

func (b *IncrementalContextBuilder) Build(req *ContextRequest) (*ContextResult, error) {
    delta := b.computeDelta(req)
    
    switch {
    case delta.OnlyNewMessage && delta.RetrievalUnchanged:
        // 最优路径: 仅追加新消息
        return b.appendOnly(req)
        
    case delta.RetrievalUnchanged:
        // 部分重建: 仅更新会话历史
        return b.updateConversationOnly(req)
        
    default:
        // 完整重建
        return b.fullRebuild(req)
    }
}

func (b *IncrementalContextBuilder) appendOnly(req *ContextRequest) (*ContextResult, error) {
    result := b.lastResult.Clone()
    
    // 仅添加最新的用户消息
    newMessage := req.CurrentQuery
    newTokens := EstimateTokens(newMessage)
    
    // 检查预算
    if result.TotalTokens + newTokens > req.MaxTokens {
        // 需要截断最早的消息
        result = b.truncateOldest(result, newTokens)
    }
    
    result.ConversationContext += "\nUser: " + newMessage
    result.TotalTokens += newTokens
    
    return result, nil
}

性能提升预估

场景 当前耗时 优化后 提升
首轮对话 50ms 50ms -
第2轮对话 50ms 15ms 70%
第5轮对话 55ms 10ms 82%

文件变更

  • ai/context/incremental_builder.go - 新增增量构建器
  • ai/context/incremental_builder_test.go - 单元测试
  • ai/context/builder_impl.go - 添加增量模式支持
  • ai/context/builder.go - 接口扩展

验收标准

  • 多轮对话场景构建耗时减少 >50%
  • 结果与完整构建保持一致 (校验测试)
  • 内存使用不显著增加
  • 支持强制完整重建的选项
  • 增量失效机制 (检测到数据变化时自动切换)

预估工时

3-5 天

技术风险

  • 增量状态管理复杂度高
  • 需要仔细处理边界条件

相关 Issue

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions