Skip to content

lhpqaq/ggbot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GGBot - 多平台 AI 机器人

一个支持 Telegram 和 QQ 的高扩展性 AI 机器人,集成 MCP 工具调用能力和智能对话历史管理。

✨ 功能特性

  • 多平台支持:同时支持 Telegram 和 QQ(群聊 @Bot、私聊)
  • AI 对话:支持与大模型对话(兼容 OpenAI 接口,如通义千问、GPT 等)
  • MCP 工具集成:支持 MCP 协议,可调用搜索、新闻等外部工具
  • 对话历史管理:基于 SQLite 的持久化对话历史,支持用户隔离
  • 上下文窗口配置:可调整对话上下文大小(1-100 条消息)
  • 个性化配置:用户可自定义 API Key、模型、提示词和上下文窗口
  • 女朋友模式:为特定用户配置定制化的温柔提示词 💕
  • 插件化设计:轻松扩展新功能
  • 本地持久化:用户设置和对话历史保存在本地

🚀 快速开始

1. 配置文件

cp config.yaml.example config.yaml

编辑 config.yaml

bot:
  token: "你的_TELEGRAM_BOT_TOKEN"
  qq_app_id: "QQ机器人AppID"
  qq_secret: "QQ机器人Secret"
  log_level: "info"

ai:
  provider: "qwen"
  base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1"
  api_key: "你的API_KEY"
  model: "qwen-plus"
  default_prompt: "你是一个得力的助手。"
  context_window: 10  # 对话上下文窗口大小,默认 10 条历史消息

# 访问控制
allowed_telegram:
  - "123456789"
allowed_qq:
  - "用户OpenID"

# 代理配置
proxy:
  url: "http://127.0.0.1:7890"
  telegram_use_proxy: true
  qq_use_proxy: false

# MCP 工具配置
mcpServers:
  hotnews:
    type: "sse"
    url: "https://dashscope.aliyuncs.com/api/v1/mcps/hotnews/sse"
    use_proxy: false
    headers:
      Authorization: "Bearer ${DASHSCOPE_API_KEY}"

  search:
    type: "stdio"
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-brave-search"]
    use_proxy: true
    env:
      BRAVE_API_KEY: "你的Brave搜索API_KEY"

# 平台特定提示词(用于格式化输出)
platform_prompts:
  telegram: "请用 Markdown 格式回复,支持 **加粗**、*斜体*、`代码`。"
  qq: "请用纯文本回复,不要包含 URL 链接。"

# 女朋友定制配置
girlfriend:
  "QQ:她的OpenID":
    name: "宝贝"
    prompt: |
      你是一个温柔体贴的男朋友助手。
      对话时要温暖、关心、体贴,用简短温柔的语气回复。

2. 编译

go build -o ggbot

3. 运行

./ggbot

📋 指令说明

基础指令

指令 说明 示例
/start 启动机器人 /start
/ping 状态检查 /ping
/info 查看个人信息(含 UserID/OpenID) /info
/help 显示帮助信息 /help

AI 配置指令

指令 说明 示例
/set_ai 配置个人 AI 设置 /set_ai key=sk-xxx model=gpt-4 context=20
/reset_ai 重置为默认配置 /reset_ai
/context_window [size] 查看/设置上下文窗口大小 (1-100) /context_window 15

/set_ai 参数说明:

  • key=<API_KEY> - 设置 API 密钥
  • model=<模型名> - 设置模型(如 gpt-4, qwen-plus)
  • url=<API地址> - 设置 API 地址
  • provider=<服务商> - 设置服务商
  • context=<数字> - 设置上下文窗口大小(1-100)

对话历史管理

指令 说明 示例
/history_list [limit] [offset] 列出聊天历史(默认15条,内容截断) /history_list 20 0
/history_get <ID> 查看完整消息内容 /history_get 42
/history_clear 清除自己的所有聊天历史 /history_clear

功能指令

指令 说明 示例
/news 获取今日新闻摘要(需 MCP) /news
/s <关键词> 搜索并回答问题(需 MCP) /s 今天天气怎么样
直接聊天 发送任何文字,AI 自动回复(带上下文) 你好

管理员指令

指令 说明 示例
/history_delete <ID> 删除指定消息 /history_delete 42
/history_stats 查看所有用户的消息统计 /history_stats

注:管理员功能需要在 Config 中实现 IsAdmin() 方法后启用

🗂️ 对话历史系统

功能特性

  • SQLite 持久化:所有对话保存在 data/conversations.db
  • 用户隔离:每个用户只能查看自己的历史
  • 自动上下文加载:AI 对话时自动加载历史消息作为上下文
  • 可配置窗口:支持 1-100 条消息的上下文窗口
  • 完整记录:记录用户消息、AI回复、工具调用
  • 高性能查询:使用索引优化,支持分页

数据库结构

CREATE TABLE messages (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,           -- 用户数字ID
    username TEXT NOT NULL,             -- 用户名/显示名
    role TEXT NOT NULL,                 -- 'user', 'assistant', 'tool'
    content TEXT NOT NULL,              -- 消息内容
    tool_calls TEXT,                    -- 工具调用(JSON)
    tool_call_id TEXT,                  -- 工具响应ID
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

使用示例

# 查看最近的聊天记录
/history_list

# 查看更多记录(30条,从第10条开始)
/history_list 30 10

# 查看完整消息(如果列表中内容被截断)
/history_get 42

# 清除所有历史(谨慎使用)
/history_clear

# 设置上下文窗口为 20 条消息
/context_window 20

🎯 上下文窗口配置

什么是上下文窗口?

上下文窗口决定了 AI 对话时会加载多少条历史消息作为上下文。更大的窗口可以让 AI 记住更长的对话内容,但会消耗更多的 tokens。

推荐配置

场景 推荐窗口大小 说明
简单问答 5-10 条 节省成本,适合独立问题
日常聊天 10-20 条 平衡记忆和成本
深度对话 30-50 条 保持长对话的连贯性
项目协作 50-100 条 最大化上下文理解

配置方式

全局配置(在 config.yaml 中):

ai:
  context_window: 10

用户个性化配置

/context_window 20
#
/set_ai context=20

🏗️ 项目结构

├── adapter/          # 平台适配器
│   ├── telegram/     # Telegram 适配
│   └── qq/           # QQ 适配
├── botgo/            # QQ Bot SDK (本地)
├── config/           # 配置管理
├── core/             # 核心接口定义
├── plugins/          # 插件
│   ├── ai/           # AI 对话插件
│   │   ├── plugin.go         # 主插件逻辑
│   │   ├── llm.go            # LLM API 调用
│   │   ├── mcp_manager.go    # MCP 管理器
│   │   ├── tool_executor.go  # 工具执行器
│   │   └── history.go        # 对话历史管理
│   └── system/       # 系统指令插件
├── storage/          # 本地存储(用户设置)
├── data/             # 数据目录
│   └── conversations.db  # 对话历史数据库
├── go-sdk/           # MCP SDK (本地)
├── config.yaml       # 配置文件
└── main.go           # 入口

🔧 开发指南

添加新插件

plugins/ 目录下实现 Plugin 接口:

type Plugin interface {
    Name() string
    Init(ctx *Context) error
}

添加新平台

adapter/ 目录下实现 core.Platform 接口:

type Platform interface {
    Name() string
    Start() error
    Stop() error
    RegisterCommand(cmd string, handler Handler)
    RegisterText(handler Handler)
}

添加新的 MCP 工具

config.yaml 中添加 MCP 服务器配置:

mcpServers:
  your-tool:
    type: "stdio"  # 或 "sse", "streamable_http"
    command: "your-mcp-server"
    args: ["arg1", "arg2"]
    use_proxy: false
    env:
      API_KEY: "your-key"

📝 注意事项

平台限制

  • QQ 群消息:机器人只能被动回复(用户 @Bot 后),不支持主动推送
  • QQ URL 过滤:QQ 平台会自动过滤消息中的 URL,建议配置 platform_prompts 提示 AI 不要包含链接
  • Telegram Markdown:支持 Markdown 格式,可配置提示词让 AI 输出格式化文本

代理配置

  • Telegram:建议使用代理(telegram_use_proxy: true
  • QQ:强制直连(qq_use_proxy: false
  • MCP 工具:每个 MCP 服务器可单独配置是否使用代理

性能优化

  • 上下文窗口:根据实际需求调整,避免不必要的 token 消耗
  • 数据库清理:定期使用 /history_clear 清理无用的历史记录
  • 日志级别:生产环境建议设置为 infowarn

安全建议

  • API 密钥:不要将 API 密钥提交到代码仓库
  • 数据库备份:定期备份 data/conversations.db
  • 访问控制:使用 allowed_telegramallowed_qq 限制用户访问
  • 管理员权限:实现 IsAdmin() 方法控制敏感操作

🐛 故障排查

MCP 工具无法连接

  1. 检查 MCP 服务器配置是否正确
  2. 检查代理设置(use_proxy 字段)
  3. 查看日志输出中的错误信息
  4. 确认环境变量是否正确设置

对话历史无法保存

  1. 确认 data/ 目录存在且有写权限
  2. 检查 SQLite 依赖是否正确安装
  3. 查看日志中的数据库错误信息

AI 回复不包含历史上下文

  1. 检查 context_window 配置是否正确
  2. 使用 /history_list 确认历史已保存
  3. 检查日志中的历史加载信息

🔄 更新日志

v2.0 (最新)

  • ✨ 新增对话历史管理系统(SQLite)
  • ✨ 新增可配置的上下文窗口大小
  • ✨ 新增对话历史查看、删除、统计功能
  • 🐛 修复 MCP 工具 schema 兼容性问题
  • 🎨 优化代码质量(替换 interface{}any
  • 📚 完善文档和帮助信息

v1.0

  • ✨ 多平台支持(Telegram + QQ)
  • ✨ MCP 工具集成
  • ✨ 个性化配置
  • ✨ 女朋友模式

📄 License

MIT

🤝 贡献

欢迎提交 Issue 和 Pull Request!


Made with ❤️ by GGBot Team

About

QQ 机器人 & Telegram bot

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages