# AI Context - Go 上下文管理 > ai-context 是 Go 语言的 AI 上下文管理库,用于管理 AI 对话的上下文和状态。 ## 官方资源 - [GitHub](https://github.com/zeromicro/ai-context) - [文档](https://github.com/zeromicro/ai-context?tab=readme-ov-file) ## 概述 ai-context 提供了一套完整的 AI 上下文管理解决方案,支持对话历史、状态管理和上下文压缩等功能。 ## 核心功能 ### 对话历史管理 - 存储和管理完整的对话历史 - 支持多轮对话追踪 - 消息角色识别(用户、助手、系统) ### 上下文压缩 - 智能摘要生成 - 上下文窗口优化 - 历史消息归档 ### 状态管理 - 会话状态持久化 - 分布式存储支持 - 状态恢复机制 ## 基本使用 ```go package main import ( "context" "github.com/zeromicro/ai-context" ) func main() { // 创建上下文管理器 manager := context.NewManager(context.Config{ Storage: "memory", // 或 "redis" MaxSize: 100, // 最大历史消息数 }) // 创建会话 sessionID := "session-123" ctx := manager.CreateSession(sessionID) // 添加消息 ctx.AddMessage(context.Message{ Role: "user", Content: "你好,今天天气怎么样?", }) ctx.AddMessage(context.Message{ Role: "assistant", Content: "今天天气晴朗,温度适宜。", }) // 获取历史消息 history := ctx.GetHistory() for _, msg := range history { fmt.Printf("%s: %s\n", msg.Role, msg.Content) } // 获取用于 AI 调用的上下文 aiContext := ctx.GetContextForAI() // 使用 aiContext 调用 AI 模型... // 保存会话状态 manager.SaveSession(sessionID) } ``` ## 配置选项 ```go type Config struct { Storage string // 存储类型: memory, redis, database MaxSize int // 最大消息数量 TTL time.Duration // 会话过期时间 Compression bool // 是否启用压缩 Compressor Compressor // 压缩器 StorageConf StorageConfig // 存储配置 } ``` ## Redis 存储 ```go manager, err := context.NewManager(context.Config{ Storage: "redis", StorageConf: context.StorageConfig{ Addr: "localhost:6379", Password: "", DB: 0, }, MaxSize: 100, }) ``` ## 上下文压缩 ```go // 启用自动压缩 manager, _ := context.NewManager(context.Config{ MaxSize: 100, Compression: true, Compressor: context.NewSummarizerCompressor(), }) // 手动压缩 ctx.Compress() ``` ## AI 上下文使用 ```go // 获取格式化的上下文用于 AI 模型 ctx := manager.GetSession("session-123") // 获取完整上下文 prompt := ctx.FormatPrompt(context.FormatOptions{ IncludeSystem: true, MaxTokens: 2000, }) // 或者获取消息列表 messages := ctx.GetMessages() // messages 可以直接传递给 OpenAI API 等 ``` ## 中间件支持 ```go // 使用中间件扩展功能 manager.Use(middleware.SessionLogger()) manager.Use(middleware.MetricsCollector()) manager.Use(middleware.RateLimiter(100)) ``` ## 与 go-zero 集成 ```go // 在 handler 中使用 type MyHandler struct { ctxManager *context.Manager } func (h *MyHandler) ChatHandler(w http.ResponseWriter, r *http.Request) { var req types.ChatRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, err.Error(), 400) return } // 获取或创建会话 session := h.ctxManager.GetOrCreateSession(req.SessionID) // 添加用户消息 session.AddMessage(context.Message{ Role: "user", Content: req.Message, }) // 调用 AI 模型 aiContext := session.GetContextForAI() response := callAI(aiContext) // 添加助手消息 session.AddMessage(context.Message{ Role: "assistant", Content: response, }) // 保存会话 h.ctxManager.SaveSession(req.SessionID) // 返回响应 json.NewEncoder(w).Encode(types.ChatResponse{ Response: response, }) } ```