Skip to content

CoolBanHub/aggo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

118 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AGGO - AI Agent Go Framework

Go Version License CloudWeGo Eino

AGGO 是一个基于 Go 语言和 CloudWeGo Eino 框架构建的企业级 AI Agent 框架,提供完整的对话 AI、知识管理、记忆系统、定时任务和工具调用能力。

✨ 核心特性

🤖 智能代理系统

  • React 模式代理: 基于 CloudWeGo Eino ADK 的 ReAct (Reasoning + Acting) 模式实现
  • 工具调用: 原生支持多种工具集成,包括知识库、数据库、Shell 命令等
  • 多轮对话: 上下文感知的多轮对话能力
  • 流式响应: 基于 SSE (Server-Sent Events) 的实时流式输出
  • 定时任务代理: 预配置的 CronAgent,开箱即用的定时任务管理

🧠 记忆管理系统

  • 会话记忆: 自动管理会话级别的对话历史
  • 长期记忆: 支持用户级别的长期记忆存储
  • 智能摘要: 自动生成会话摘要,优化上下文长度
  • 多种检索策略: 支持 LastN、全部、摘要等多种记忆检索模式
  • 灵活存储: 支持内存存储和 SQL 存储(MySQL、PostgreSQL、SQLite)
  • 异步处理: 基于工作池的异步任务处理,提升响应性能
  • 智能清理: 支持定期清理和外部注入的清理策略

⏰ 定时任务系统

  • 多种调度方式: 支持一次性定时(at)、周期定时(every)、Cron表达式(cron)
  • 多种存储后端: 支持文件存储、GORM存储(MySQL、PostgreSQL、SQLite)
  • 分布式锁: 支持分布式环境下的任务锁定
  • 任务数量限制: 支持全局和单用户任务数量上限
  • 自动清理: 一次性任务执行后自动删除

📚 向量数据库集成

  • Milvus: 企业级向量数据库支持,适合大规模生产环境
  • PostgreSQL + pgvector: 轻量级向量搜索方案
  • 统一接口: 提供一致的向量存储和检索 API

🛠️ 丰富的工具生态

  • 知识库工具: 文档加载、语义搜索、向量检索
  • 数据库工具: MySQL、PostgreSQL 操作工具
  • Shell 工具: 安全的系统命令执行
  • 定时任务工具: 添加、查看、删除、启用/禁用定时任务
  • 可扩展: 易于集成自定义工具

🤖 多模型支持

  • OpenAI 兼容模型: 支持 OpenAI、Azure OpenAI 等兼容服务
  • GLM 模型: 原生支持智谱 GLM 系列模型,包含 Thinking 模式
  • 推理强度参数: 支持 low、medium、high 推理强度配置

📊 可观测性

  • Langfuse 集成: AI 应用监控和追踪
  • 日志管理: 结构化日志记录
  • 性能监控: 支持 OpenTelemetry 追踪

🏗️ 系统架构

┌──────────────────────────────────────────────────────────────────┐
│                        AGGO Framework                             │
│                                                                   │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐  │
│  │   Agent Layer   │  │  Memory Layer   │  │   Tool Layer    │  │
│  │                 │  │                 │  │                 │  │
│  │ • ReAct Agent   │◄─┤ • Session Mem   │  │ • Knowledge     │  │
│  │ • CronAgent     │  │ • Long-term Mem │  │ • Database      │  │
│  │ • Multi-turn    │  │ • Auto Summary  │  │ • Shell Exec    │  │
│  │ • Streaming     │  │ • Async Process │  │ • Cron Tools    │  │
│  └────────┬────────┘  └────────┬────────┘  └────────┬────────┘  │
│           │                    │                    │            │
│           └────────────────────┼────────────────────┘            │
│                                │                                 │
│           ┌────────────────────┴────────────────────┐            │
│           │         Storage & Vector Layer          │            │
│           │                                          │            │
│           │  ┌──────────────┐  ┌─────────────────┐  │            │
│           │  │   Vector DB  │  │  Memory Store   │  │            │
│           │  │              │  │                 │  │            │
│           │  │ • Milvus     │  │ • In-Memory     │  │            │
│           │  │ • PostgreSQL │  │ • SQL (GORM)    │  │            │
│           │  └──────────────┘  └─────────────────┘  │            │
│           └──────────────────────────────────────────┘            │
│                                                                   │
│           ┌──────────────────────────────────────────┐            │
│           │         Cron Schedule Layer              │            │
│           │                                          │            │
│           │  • One-time (at)   • Periodic (every)    │            │
│           │  • Cron Expression  • File/GORM Store    │            │
│           └──────────────────────────────────────────┘            │
│                                                                   │
│           ┌──────────────────────────────────────────┐            │
│           │         Model & Embedding Layer          │            │
│           │                                          │            │
│           │  • OpenAI Compatible Chat Models         │            │
│           │  • GLM Models (with Thinking Mode)       │            │
│           │  • OpenAI Compatible Embedding Models    │            │
│           │  • Support Reasoning Parameters          │            │
│           └──────────────────────────────────────────┘            │
│                                                                   │
└──────────────────────────────────────────────────────────────────┘
                                 │
                    ┌────────────┴────────────┐
                    │   Observability Layer   │
                    │                         │
                    │  • Langfuse Tracing     │
                    │  • Structured Logging   │
                    │  • SSE Event Streaming  │
                    └─────────────────────────┘

📦 安装

前置要求

  • Go: >= 1.24.0
  • 向量数据库 (二选一):
  • AI 模型服务:
    • OpenAI API 兼容的服务 (OpenAI, Azure OpenAI, 或其他兼容服务)
  • 可选依赖:

安装框架

go get github.com/CoolBanHub/aggo

安装依赖

go mod download

🚀 快速开始

1. 基础 AI 代理示例

创建一个简单的对话代理:

package main

import (
    "context"
    "log"

    "github.com/CoolBanHub/aggo/agent"
    "github.com/CoolBanHub/aggo/model"
    "github.com/CoolBanHub/aggo/memory"
    memoryStorage "github.com/CoolBanHub/aggo/memory/storage"
    "github.com/cloudwego/eino/schema"
)

func main() {
    ctx := context.Background()

    // 创建聊天模型
    cm, _ := model.NewChatModel(
        model.WithBaseUrl("https://api.openai.com/v1"),
        model.WithAPIKey("your-api-key"),
        model.WithModel("gpt-4"),
    )

    // 创建记忆管理器
    memoryStore := memoryStorage.NewMemoryStore()
    memoryManager, _ := memory.NewMemoryManager(cm, memoryStore, &memory.MemoryConfig{
        MemoryLimit: 10,
        Retrieval:   memory.RetrievalLastN,
    })

    // 创建代理
    agent, _ := agent.NewAgent(ctx, cm,
        agent.WithMemoryManager(memoryManager),
        agent.WithSystemPrompt("你是一个友好的 AI 助手"),
    )

    // 进行对话
    response, _ := agent.Generate(ctx, []*schema.Message{
        schema.UserMessage("你好,介绍一下你自己"),
    })

    log.Printf("AI: %s", response.Content)
}

2. 运行示例程序

# 知识库代理示例
go run example/knowledge_agent_tool_test/main.go

# 记忆系统示例
go run example/mem_agent_test/main.go

# SSE 流式响应示例
go run example/sse/main.go

# ADK 使用示例
go run example/adk_test/main.go

💡 核心功能详解

代理配置选项

AGGO 提供了灵活的代理配置选项:

agent, err := agent.NewAgent(ctx, chatModel,
    agent.WithMemoryManager(memoryManager),       // 设置记忆管理器
    agent.WithSystemPrompt("你是一个AI助手"),      // 设置系统提示词
    agent.WithTools(tools...),                    // 添加工具
    agent.WithMaxStep(10),                         // 设置最大推理步数
)

记忆管理配置

memoryConfig := &memory.MemoryConfig{
    EnableSessionSummary: true,              // 启用会话摘要
    EnableUserMemories:   true,              // 启用用户长期记忆
    MemoryLimit:          10,                // 记忆条数限制
    Retrieval:            memory.RetrievalLastN,  // 检索策略
}

memoryManager, err := memory.NewMemoryManager(
    chatModel,
    memoryStore,
    memoryConfig,
)

记忆检索策略:

  • RetrievalLastN: 返回最近 N 条记忆
  • RetrievalAll: 返回所有记忆
  • RetrievalSummary: 仅返回摘要

定时任务系统

创建定时任务代理

import (
    "github.com/CoolBanHub/aggo/agent/cron_agent"
)

// 使用文件存储
cronAgent, _ := cron_agent.New(ctx, chatModel,
    cron_agent.WithFileStore("/path/to/cron_jobs.json"),
)

// 使用 GORM 存储
cronAgent, _ := cron_agent.New(ctx, chatModel,
    cron_agent.WithGormStore(gormDB),
    cron_agent.WithMaxJobsPerUser(20),  // 单用户最多20个任务
)

// 启动服务
cronAgent.Start()
defer cronAgent.Stop()

// 使用代理
response, _ := cronAgent.Generate(ctx, []*schema.Message{
    schema.UserMessage("10分钟后提醒我开会"),
})

调度方式

类型 说明 示例
at 一次性定时 10分钟后执行一次
every 周期性定时 每2小时执行一次
cron Cron表达式 每天9点执行

自定义任务触发

cronAgent, _ := cron_agent.New(ctx, chatModel,
    cron_agent.WithFileStore("/path/to/cron_jobs.json"),
    cron_agent.WithOnJobTriggered(func(job *cronPkg.CronJob) {
        // 自定义处理逻辑
        fmt.Printf("任务触发: %s\n", job.Payload.Message)
    }),
)

向量数据库集成

Milvus 配置

import (
    "github.com/CoolBanHub/aggo/database/milvus"
    "github.com/milvus-io/milvus/client/v2/milvusclient"
)

// 创建 Milvus 客户端
client, _ := milvusclient.New(ctx, &milvusclient.ClientConfig{
    Address: "127.0.0.1:19530",
    DBName:  "",  // 使用默认数据库
})

// 创建向量数据库实例
vectorDB, _ := milvus.NewMilvus(milvus.MilvusConfig{
    Client:         client,
    CollectionName: "knowledge_vectors",
    EmbeddingDim:   1024,
    Embedding:      embeddingModel,
})

PostgreSQL + pgvector 配置

import "github.com/CoolBanHub/aggo/database/postgres"

vectorDB, _ := postgres.NewPostgres(postgres.PostgresConfig{
    Client:          gormDB,  // GORM 数据库实例
    CollectionName:  "knowledge_vectors",
    VectorDimension: 1024,
    Embedding:       embeddingModel,
})

模型配置

聊天模型

import "github.com/CoolBanHub/aggo/model"

chatModel, _ := model.NewChatModel(
    model.WithBaseUrl("https://api.openai.com/v1"),
    model.WithAPIKey("your-api-key"),
    model.WithModel("gpt-4"),
    model.WithReasoningEffort("medium"),  // 推理强度: low, medium, high
)

嵌入模型

embeddingModel, _ := model.NewEmbModel(
    model.WithBaseUrl("https://api.openai.com/v1"),
    model.WithAPIKey("your-api-key"),
    model.WithModel("text-embedding-3-large"),
    model.WithDimensions(1024),
)

工具集成

知识库工具

import "github.com/CoolBanHub/aggo/tools"

knowledgeTools := tools.GetKnowledgeTools(vectorDB, retriever, &retriever.Options{
    TopK:           utils.ValueToPtr(10),
    ScoreThreshold: utils.ValueToPtr(0.1),
})

功能:

  • 文档加载 (支持文件和 URL)
  • 语义搜索
  • 向量检索

数据库工具

// MySQL 工具
mysqlTool := tools.GetMySQLTool(mysqlDB)

// PostgreSQL 工具
postgresTool := tools.GetPostgresTool(postgresDB)

Shell 工具

shellTool := tools.GetShellTool()  // 安全的系统命令执行

SSE 流式响应

import "github.com/CoolBanHub/aggo/pkg/sse"

// 创建 SSE 写入器
writer := sse.NewSSEWriter(w, r)
defer writer.WriteDone()

// 流式生成
agent.Stream(ctx, messages,
    agent.WithStreamCallback(func(chunk string) {
        writer.WriteData(chunk)
    }),
)

🔧 环境变量配置

创建 .env 文件配置必要的环境变量:

# OpenAI API 配置
OPENAI_API_KEY=your-api-key
OPENAI_BASE_URL=https://api.openai.com/v1

# Milvus 配置
MILVUS_ADDRESS=127.0.0.1:19530

# Langfuse 配置 (可选)
LANGFUSE_SECRET_KEY=sk-lf-...
LANGFUSE_PUBLIC_KEY=pk-lf-...
LANGFUSE_HOST=https://cloud.langfuse.com

🛠️ 开发指南

项目结构

aggo/
├── agent/                      # AI 代理系统
│   ├── agent.go                   # ReAct 代理实现
│   ├── option.go                  # 代理配置选项
│   ├── utils.go                   # 工具函数
│   ├── agent_memory.go            # 代理记忆管理
│   └── cron_agent/                # 定时任务代理
│       └── cron_agent.go             # CronAgent 实现
│
├── memory/                     # 记忆管理系统
│   ├── manager.go                 # 记忆管理器
│   ├── storage.go                 # 存储接口
│   ├── types.go                   # 类型定义
│   ├── prompt.go                  # 提示词模板
│   ├── session_summary_generator.go  # 会话摘要生成器
│   ├── summary_trigger_manager.go    # 摘要触发管理器
│   ├── user_memory_analyzer.go       # 用户记忆分析器
│   └── storage/                   # 存储实现
│       ├── memory.go                 # 内存存储
│       ├── file.go                   # 文件存储
│       ├── sql.go                    # SQL 存储 (GORM)
│       ├── sql_models.go             # 数据模型
│       ├── sql_session.go            # 会话存储
│       ├── sql_summary.go            # 摘要存储
│       └── sql_user_memory.go        # 用户记忆存储
│
├── cron/                       # 定时任务系统
│   ├── model.go                   # 任务模型定义
│   ├── service.go                 # 调度服务
│   ├── store.go                   # 存储接口
│   ├── store_file.go              # 文件存储实现
│   └── store_gorm.go              # GORM 存储实现
│
├── database/                   # 向量数据库
│   ├── database.go                # 数据库接口
│   ├── milvus/                    # Milvus 实现
│   │   ├── milvus.go                 # Milvus 客户端
│   │   ├── option.go                 # 配置选项
│   │   └── utils.go                  # 工具函数
│   └── postgres/                  # PostgreSQL + pgvector 实现
│       ├── postgres.go               # PostgreSQL 客户端
│       ├── option.go                 # 配置选项
│       └── utils.go                  # 工具函数
│
├── model/                      # AI 模型封装
│   ├── chat.go                    # 聊天模型 (支持推理强度参数)
│   ├── embedding.go               # 嵌入模型
│   ├── option.go                  # 模型配置选项
│   └── glm/                       # GLM 模型支持
│       ├── chatmodel.go              # GLM 聊天模型
│       ├── option.go                 # 配置选项
│       └── types.go                  # 类型定义
│
├── tools/                      # 工具集
│   ├── tools.go                   # 工具函数
│   ├── knowledge/                 # 知识库工具
│   │   ├── knowledge.go             # 知识库操作
│   │   └── reasoning.go             # 知识推理
│   ├── database/                  # 数据库工具
│   │   └── database.go              # MySQL/PostgreSQL 操作
│   ├── shell/                     # Shell 工具
│   │   ├── shell.go                 # Shell 执行
│   │   ├── shell_process_unix.go    # Unix 进程管理
│   │   └── shell_process_windows.go # Windows 进程管理
│   └── cron/                      # 定时任务工具
│       └── cron.go                  # Cron 操作工具
│
├── pkg/                        # 公共包
│   ├── sse/                       # Server-Sent Events
│   │   ├── sse.go                    # SSE 核心实现
│   │   ├── event.go                  # 事件定义
│   │   └── writer.go                 # SSE 写入器
│   └── langfuse/                  # Langfuse 可观测性
│       └── langfuse.go               # Langfuse 客户端
│
├── utils/                      # 工具函数
│   ├── utils.go                   # 通用工具
│   ├── uuid.go                    # UUID 生成
│   ├── ulid.go                    # ULID 生成
│   ├── float.go                   # 浮点数处理
│   └── convert.go                 # 类型转换
│
├── state/                      # 状态管理
│   └── chat.go                    # 聊天状态
│
├── config/                     # 配置管理
│   └── config.go                  # 配置定义
│
└── example/                    # 示例代码
    ├── knowledge_agent_tool_test/ # 知识库代理示例
    ├── mem_agent_test/            # 记忆系统示例
    ├── sse/                       # SSE 流式响应示例
    ├── adk_test/                  # ADK 使用示例
    ├── callback_test/             # 回调示例
    ├── tool_test/                 # 工具测试示例
    ├── cron_test/                 # 定时任务示例
    ├── vision_test/               # 视觉能力示例
    ├── generate_img_test/         # 图像生成示例
    ├── skill_agent_test/          # 技能代理示例
    └── claw/                      # Claw 示例

构建和测试

# 构建项目
go build ./...

# 运行测试
go test ./...

# 运行特定包测试
go test -v ./agent/...
go test -v ./memory/...
go test -v ./database/...

# 运行示例
go run example/knowledge_agent_tool_test/main.go
go run example/mem_agent_test/main.go
go run example/sse/main.go

🐛 故障排除

向量维度不匹配

问题: 向量维度不匹配导致插入失败

解决方案:

  • 确保嵌入模型配置的 Dimensions 与向量数据库的 EmbeddingDim 一致
  • 推荐统一使用 1024 维度 (text-embedding-3-large 模型)

Milvus 连接失败

问题: 无法连接到 Milvus 服务

解决方案:

  • 检查 Milvus 服务是否正常运行: docker ps
  • 使用 DBName: "" 连接默认数据库
  • 确认端口 19530 未被占用

PostgreSQL pgvector 扩展未安装

问题: extension "vector" does not exist

解决方案:

-- 安装 pgvector 扩展
CREATE EXTENSION IF NOT EXISTS vector;

-- 验证安装
\dx vector

记忆管理器未正常关闭

问题: 程序退出时资源未释放

解决方案:

defer memoryManager.Close()  // 确保在创建后立即添加 defer

🤝 贡献

我们欢迎各种形式的贡献!

如何贡献

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

贡献指南

  • 代码需遵循 Go 语言规范
  • 添加必要的单元测试
  • 更新相关文档
  • 保持提交信息清晰明了

📄 许可证

本项目采用 MIT License 开源许可证。

🙏 致谢

📧 联系方式


AGGO - 构建智能 AI Agent 的 Go 语言框架

开始使用 · 查看示例 · 贡献代码

Made with ❤️ by the AGGO Team

About

AGGO 是一个基于 Go 语言和 CloudWeGo Eino 框架构建的企业级 AI Agent 框架,提供完整的对话 AI、知识管理、记忆系统和工具调用能力

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors