Skip to content
 
 

Repository files navigation

Sentra Agent - 智能对话机器人框架

Node.js License PRs Welcome

全栈 AI Agent 解决方案 | 多平台适配 | 工具增强 | 知识图谱 | 拟人化交互

特性快速开始架构文档贡献


项目简介

Sentra Agent 是一个功能完整、高度模块化的 AI 智能对话机器人框架,专为构建生产级对话 AI 应用而设计。它整合了多个强大的子系统,提供从消息适配、工具调用、知识检索到拟人化交互的完整解决方案。

设计理念

  • 高度模块化 - 每个功能独立封装,按需组合使用
  • 平台无关 - 支持多种即时通讯平台(QQ、微信等)
  • 工具增强 - 内置 80+ 工具,支持文件处理、网络爬取、数据分析等
  • 知识驱动 - 基于 Neo4j 的知识图谱和向量数据库
  • 拟人化交互 - 智能消息合并、自然发送间隔、情感感知回复
  • 高性能 - Redis 缓存、并发控制、流式输出
  • 可观测性 - 完整的日志系统、性能监控、调试工具

核心特性

智能交互系统

拟人化对话

  • 消息合并 CD - 等待用户发完再回复(默认 5 秒)
  • 智能回复判断 - 使用 OpenAI tools 确保 100% 准确判断
  • 并发控制 - 一次只处理一个对话,更拟人
  • 发送间隔 - 模拟真人打字速度和思考时间
  • 回复策略 - 智能决定是否使用回复功能
  • 失败优雅跳过 - AI 生成失败时自然跳过,不卡住

上下文管理

  • 全局历史记录 - 每个会话保留最近 100 条对话
  • 工具任务历史 - 记录近期工具调用总结(最近 15 条)
  • 消息队列 - 智能累积和处理未回复消息
  • 对话引用 - 自动引用和关联历史消息

智能判断

  • 独立判断模型 - 使用 gpt-4o-mini 等快速模型
  • OpenAI Tools - 100% 返回结构化 JSON
  • 多维度评估 - 置信度、理由、上下文分析
  • 成本优化 - 判断和回复分离,节省 89% 成本

Sentra MCP - 工具调用框架

基于 Model Context Protocol (MCP) 的强大工具系统,支持 80+ 内置工具。

Plan-and-Execute 架构

用户请求 → 智能规划 → 工具选择 → 并行执行 → 结果汇总 → 生成回复

核心能力

  • 智能规划 - 自动分解任务为可执行步骤
  • 工具丰富 - 80+ 内置工具,涵盖各种场景
  • 并行执行 - 支持工具并发调用,提升效率
  • 流式输出 - 实时反馈执行进度和结果
  • Redis 集成 - 缓存、指标监控、执行历史

内置工具分类

文档处理

  • PDF、Word、Excel、PPT 解析和生成
  • Markdown、CSV、JSON、XML 转换
  • 文本提取、格式转换、内容分析

网络工具

  • 网页爬取(Puppeteer + Readability)
  • API 调用(GET、POST、GraphQL)
  • 搜索引擎集成
  • RSS 订阅解析

数据操作

  • Redis 读写操作
  • Neo4j 图数据库查询
  • SQL 数据库操作
  • 向量数据库检索

多媒体

  • 图片分析(OCR、物体识别、情感分析)
  • 图片生成和编辑
  • 视频信息提取
  • 音频处理

时间和日期

  • 自然语言时间解析(中英文)
  • 时区转换
  • 日期计算
  • 定时任务管理

实用工具

  • 代码执行(安全沙箱)
  • 数学计算
  • 单位转换
  • 加密解密
  • 正则表达式测试

Sentra RAG - 知识检索系统

基于 Neo4j 和向量数据库的多模态知识检索系统。

核心功能

  • 文本知识库 - 向量化存储,语义搜索
  • 图像知识库 - 图片特征提取和相似度检索
  • 知识图谱 - Neo4j 存储实体关系
  • 混合检索 - 向量 + 关键词 + 图谱联合检索
  • 情感分析 - 图片和文本情感识别

技术栈

  • 向量化: OpenAI Embeddings (text-embedding-3-small)
  • 图数据库: Neo4j 5.x
  • 缓存: Redis + NodeCache
  • 分词: Segment (中文) + Natural (英文)

Sentra Adapter - 多平台适配器

统一的消息适配层,支持多种即时通讯平台。

支持平台

  • QQ: NapCat 适配器(OneBotV11 协议)
  • 微信: 企业微信、个人微信适配
  • 其他: 可扩展的适配器接口

适配器功能

  • 消息收发统一接口
  • 文件上传下载
  • 群组和好友管理
  • 事件监听和处理
  • WebSocket 长连接

Sentra Emo - 情感系统

为 AI 添加情感感知和表达能力。

功能

  • 情感识别 - 识别文本和图片中的情感
  • 情感表达 - 根据情感选择合适的回复风格
  • 情感分析 - 多维度情感评分
  • 表情推荐 - 智能推荐合适的表情符号

Sentra Prompts - 提示词管理

集中化的提示词模板管理系统。

特性

  • 模板库 - 预设各种场景的提示词
  • 变量替换 - 动态参数注入
  • 阶段提示词 - 为不同执行阶段定制提示
  • A/B 测试 - 提示词效果对比

快速开始

前置要求

必需服务

  • Node.js ≥ 18.0.0
  • Redis ≥ 6.0(推荐 7.x)
  • Neo4j ≥ 5.0(用于知识图谱)

可选服务

  • Docker - 用于容器化部署
  • PM2 - 用于进程管理

安装步骤

1. 克隆项目

git clone https://github.com/JustForSO/Sentra-Agent.git
cd sentra-agent

2. 安装依赖

# 安装主项目依赖
npm install

# 安装子模块依赖
cd sentra-mcp && npm install && cd ..
cd sentra-rag && npm install && cd ..

3. 启动 Redis

# 使用 Docker
docker run -d --name redis -p 6379:6379 redis:7-alpine

# 或使用本地安装
redis-server

4. 启动 Neo4j

# 使用 Docker
docker run -d \
  --name neo4j \
  -p 7474:7474 \
  -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/your_password \
  neo4j:5-community

# 访问 http://localhost:7474 确认启动成功

5. 配置环境变量

复制示例配置:

cp .env.example .env
cp test/.env.example test/.env

编辑 test/.env:

# ==================== API 配置 ====================
API_BASE_URL=https://api.openai.com/v1
API_KEY=your-openai-api-key

# 回复模型(主要模型)
MODEL_NAME=gpt-4o
# 判断模型(便宜快速)
JUDGE_MODEL=gpt-4o-mini

# ==================== WebSocket 配置 ====================
WS_URL=ws://localhost:6702

# ==================== Redis 配置 ====================
REDIS_HOST=localhost
REDIS_PORT=6379

# ==================== Neo4j 配置 ====================
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_password

# ==================== 机器人配置 ====================
BOT_NAME=失语
BOT_ALIASES=失语症,小失语

# ==================== 拟人化配置 ====================
ENABLE_MESSAGE_MERGE=true
MESSAGE_MERGE_DELAY=5000
REPLY_CONCURRENCY=1
REPLY_COOLDOWN=2000

6. 启动 NapCat(QQ 适配器)

参考 sentra-adapter/napcat 文档配置 NapCat。

7. 运行测试

npm test

系统架构

┌─────────────────────────────────────────────────────────┐
│                    Sentra Agent 框架                     │
└─────────────────────────────────────────────────────────┘
                            │
        ┌───────────────────┼───────────────────┐
        │                   │                   │
   ┌────▼────┐         ┌────▼────┐        ┌────▼────┐
   │ Adapter │         │   MCP   │        │   RAG   │
   │  适配层  │         │ 工具系统 │        │ 知识检索 │
   └────┬────┘         └────┬────┘        └────┬────┘
        │                   │                   │
  ┌─────┴─────┐       ┌─────┴─────┐      ┌─────┴─────┐
  │ QQ/微信等  │       │ 80+ Tools │      │  Neo4j +  │
  │  平台消息  │       │ Redis集成 │      │  Vectors  │
  └───────────┘       └───────────┘      └───────────┘
        │                   │                   │
        └───────────────────┴───────────────────┘
                            │
                   ┌────────▼────────┐
                   │  智能对话引擎    │
                   │ • 消息合并       │
                   │ • 并发控制       │
                   │ • 历史管理       │
                   │ • 智能判断       │
                   └─────────────────┘

数据流

1. 接收消息
   ↓
2. Adapter 解析 → 标准化格式
   ↓
3. 消息合并 → 等待用户发完(5秒 CD)
   ↓
4. 智能判断 → 是否需要回复?
   ↓ 需要
5. 记录历史 → 全局历史 + 工具历史
   ↓
6. 构建上下文 → System + 历史 + 当前消息
   ↓
7. MCP 规划 → 分解任务 → 选择工具
   ↓
8. RAG 检索 → 相关知识(如需要)
   ↓
9. 工具执行 → 并行调用 → 获取结果
   ↓
10. 生成回复 → AI 生成最终答案
   ↓
11. 拟人发送 → 分段 + 间隔 + 回复策略
   ↓
12. 记录反馈 → 工具总结 + 对话历史

性能优化

成本优化

智能判断模型分离

传统模式(不判断):
  100 条群聊消息 × gpt-4o = $0.625/天

智能判断模式:
  判断: 100 × gpt-4o-mini = $0.0075
  回复: 10 × gpt-4o = $0.0625
  总计: $0.07/天
  
节省: 89% 成本!

Redis 缓存

  • 工具执行结果缓存
  • 向量检索缓存
  • 知识图谱查询缓存

并发控制

  • 一次处理一个对话
  • 避免过度并发
  • 降低 API 调用频率

响应优化

  • 流式输出 - 实时反馈执行进度
  • 工具并行 - 多个工具同时执行
  • 预加载 - 常用数据提前加载
  • 懒加载 - 按需加载大型模块

项目结构

sentra-agent/
├── agent.js                    # 核心 Agent 类
├── package.json                # 主项目配置
├── .env                        # 环境变量
│
├── test/                       # 测试和主要运行环境
│   ├── smart-agent-test.js    # 主程序入口
│   ├── .env                    # 独立配置
│   ├── .env.example            # 配置模板
│   ├── 1.txt                   # System Prompt
│   ├── README.md               # 测试文档
│   └── *.md                    # 各功能文档
│
├── sentra-mcp/                 # 🛠️ MCP 工具框架
│   ├── src/
│   │   ├── sdk/                # SDK 接口
│   │   ├── mcp/                # MCP 服务器/客户端
│   │   ├── tools/              # 80+ 内置工具
│   │   └── redis/              # Redis 集成
│   └── package.json
│
├── sentra-rag/                 # 🧠 知识检索系统
│   ├── src/
│   │   ├── sdk/                # RAG SDK
│   │   ├── services/           # 核心服务
│   │   │   ├── embedding.js   # 向量化
│   │   │   ├── neo4j.js       # 图数据库
│   │   │   └── vector.js      # 向量检索
│   │   └── storage/            # 数据存储
│   └── package.json
│
├── sentra-adapter/             # 🔌 平台适配器
│   ├── napcat/                 # QQ 适配器
│   │   ├── config.json         # NapCat 配置
│   │   └── README.md           # 使用文档
│   ├── wechat/                 # 微信适配器
│   └── llonebot/               # LLOneBot 适配器
│
├── sentra-emo/                 # 🎭 情感系统
│   ├── emotion-detector.js     # 情感识别
│   └── emotion-expresser.js    # 情感表达
│
├── sentra-prompts/             # 📝 提示词管理
│   ├── templates/              # 提示词模板
│   └── manager.js              # 模板管理器
│
├── src/                        # 核心功能模块
│   ├── config.js               # 配置管理
│   ├── agent.js                # Agent 实现
│   ├── token-counter.js        # Token 计算
│   └── utils.js                # 工具函数
│
├── examples/                   # 示例代码
│   ├── basic-chat.js           # 基础对话
│   ├── tool-usage.js           # 工具使用
│   └── rag-search.js           # 知识检索
│
└── docs/                       # 文档
    ├── API.md                  # API 文档
    ├── TOOLS.md                # 工具列表
    └── DEPLOYMENT.md           # 部署指南

详细文档

核心文档

功能文档

子模块文档


开发指南

添加新工具

sentra-mcp/src/tools/ 创建新工具:

export default {
  name: 'my_custom_tool',
  description: '工具描述',
  inputSchema: {
    type: 'object',
    properties: {
      param1: { type: 'string', description: '参数1' }
    },
    required: ['param1']
  },
  async execute(args) {
    // 工具逻辑
    return { result: 'success' };
  }
};

自定义适配器

实现标准适配器接口:

class CustomAdapter {
  async connect() { /* 连接逻辑 */ }
  async sendMessage(msg) { /* 发送消息 */ }
  async onMessage(callback) { /* 接收消息 */ }
}

扩展知识库

添加自定义知识源:

import SentraRAG from 'sentra-rag';

const rag = new SentraRAG();
await rag.init();

// 添加文本知识
await rag.addText('知识内容', { source: 'custom' });

// 添加图片知识
await rag.addImage('/path/to/image.jpg', { tag: 'product' });

故障排除

常见问题

Redis 连接失败

# 检查 Redis 是否运行
redis-cli ping

# 应该返回 PONG

Neo4j 连接失败

# 访问 Neo4j 浏览器
# http://localhost:7474

# 检查用户名密码是否正确

WebSocket 连接失败

# 确认 NapCat 已启动
# 检查端口 6702 是否被占用
netstat -ano | findstr 6702

模型调用失败

  • 检查 API_KEY 是否正确
  • 确认网络可以访问 OpenAI API
  • 查看 API 额度是否充足

调试模式

启用详细日志:

# test/.env
TEST_MODE=true
LOG_LEVEL=debug

监控和日志

日志文件

logs/
├── app.log          # 应用日志
├── error.log        # 错误日志
├── tool.log         # 工具调用日志
└── performance.log  # 性能日志

Redis 监控

查看执行统计:

redis-cli
> KEYS sentra:exec:*
> GET sentra:exec:stats

查看缓存:

> KEYS sentra:cache:*
> TTL sentra:cache:some_key

部署指南

Docker 部署

1. 构建镜像

docker build -t sentra-agent .

2. 使用 Docker Compose

version: '3.8'
services:
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
  
  neo4j:
    image: neo4j:5-community
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=neo4j/password
  
  sentra-agent:
    build: .
    depends_on:
      - redis
      - neo4j
    environment:
      - REDIS_HOST=redis
      - NEO4J_URI=bolt://neo4j:7687
    volumes:
      - ./test/.env:/app/test/.env

3. 启动

docker-compose up -d

PM2 部署

# 安装 PM2
npm install -g pm2

# 启动应用
pm2 start test/smart-agent-test.js --name sentra-agent

# 查看状态
pm2 status

# 查看日志
pm2 logs sentra-agent

# 重启
pm2 restart sentra-agent

贡献指南

我们欢迎所有形式的贡献!

如何贡献

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

贡献类型

  • Bug 修复 - 修复已知问题
  • 新功能 - 添加新特性
  • 文档 - 改进文档
  • 代码优化 - 重构和性能优化
  • 测试 - 添加测试用例
  • 工具 - 新增工具或改进现有工具

许可证

本项目采用 MIT License 开源协议。


致谢

核心依赖

特别感谢

  • 所有贡献者和用户的支持
  • 开源社区的无私分享

联系我们


如果这个项目对你有帮助,请给我们一个 Star!

Made with ❤️ by Sentra Team

About

功能完整、高度模块化的 AI 智能对话agent框架,专为构建生产级对话 AI 应用而设计

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages