You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.1 KiB
4.1 KiB
AI Context - Go 上下文管理
ai-context 是 Go 语言的 AI 上下文管理库,用于管理 AI 对话的上下文和状态。
官方资源
概述
ai-context 提供了一套完整的 AI 上下文管理解决方案,支持对话历史、状态管理和上下文压缩等功能。
核心功能
对话历史管理
- 存储和管理完整的对话历史
- 支持多轮对话追踪
- 消息角色识别(用户、助手、系统)
上下文压缩
- 智能摘要生成
- 上下文窗口优化
- 历史消息归档
状态管理
- 会话状态持久化
- 分布式存储支持
- 状态恢复机制
基本使用
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)
}
配置选项
type Config struct {
Storage string // 存储类型: memory, redis, database
MaxSize int // 最大消息数量
TTL time.Duration // 会话过期时间
Compression bool // 是否启用压缩
Compressor Compressor // 压缩器
StorageConf StorageConfig // 存储配置
}
Redis 存储
manager, err := context.NewManager(context.Config{
Storage: "redis",
StorageConf: context.StorageConfig{
Addr: "localhost:6379",
Password: "",
DB: 0,
},
MaxSize: 100,
})
上下文压缩
// 启用自动压缩
manager, _ := context.NewManager(context.Config{
MaxSize: 100,
Compression: true,
Compressor: context.NewSummarizerCompressor(),
})
// 手动压缩
ctx.Compress()
AI 上下文使用
// 获取格式化的上下文用于 AI 模型
ctx := manager.GetSession("session-123")
// 获取完整上下文
prompt := ctx.FormatPrompt(context.FormatOptions{
IncludeSystem: true,
MaxTokens: 2000,
})
// 或者获取消息列表
messages := ctx.GetMessages()
// messages 可以直接传递给 OpenAI API 等
中间件支持
// 使用中间件扩展功能
manager.Use(middleware.SessionLogger())
manager.Use(middleware.MetricsCollector())
manager.Use(middleware.RateLimiter(100))
与 go-zero 集成
// 在 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,
})
}