Skip to content

Repository files navigation

Enterprise-Support-Agent

基于 LLM 的人机协同客服框架 | LLM-Powered Human-in-the-Loop Customer Service Framework

License: MIT Python 3.11+ Tests

English | 简体中文

📖 项目简介

Enterprise-Support-Agent 是一个创新的企业级智能客服框架,采用**人机协同(Human-in-the-Loop)**架构设计。它不是简单地让 AI 完全自动化客服工作,而是将 AI 的智能响应能力与人工的专业判断完美结合,特别适合需要访问敏感数据或执行关键操作的企业场景。

🎯 核心创新:Agent 主导的数据检索(Agent-Initiated Retrieval)

在传统的 AI 客服系统中,要么完全依赖 AI(可能导致安全风险),要么完全依赖人工(效率低下)。本框架提供了第三种方案:Agent 主动索取数据,人工仅执行。

用户提问 → AI 智能分析 → 需要查询数据?
                          ├─ 否 → AI 直接回复用户
                          └─ 是 → AI 生成 SQL/操作指令 → 挂起请求
                                                    ↓
                                          人工执行并回填结果
                                                    ↓
                                          AI 自动生成最终回复

关键优势:

  • 🔒 数据安全:敏感数据库访问权限保留在人工手中,AI 无直接访问权限
  • ⚡ 高效响应:常见问题由 AI 即时回答,无需人工介入
  • 🎯 精准查询:AI 生成精确的 SQL 查询语句或操作指令,人工只需执行和返回结果
  • 🤖 Agent 主导:AI 主动判断何时需要数据,生成具体的查询指令,而非被动等待审核
  • 🔄 灵活扩展:可根据企业安全策略调整人机协同的边界

这解决了大模型无法直接连接内网核心数据库的安全矛盾。

✨ 主要特性

  • 🤖 多模型支持:支持 Gemini、Qwen、DeepSeek、Kimi、Doubao 等主流 LLM
  • 💬 即时通讯集成:基于 NoneBot2,支持 QQ、微信等 IM 平台
  • 📚 知识库管理:本地知识库 + 动态学习机制
  • 🔐 安全过滤:内置敏感信息检测和 SQL 注入防护
  • 📊 会话管理:智能会话上下文管理,支持多用户并发
  • 🎨 消息缓冲:自动合并连续消息,提升用户体验
  • 🔍 数据库查询:可选的数据库集成,支持人工辅助查询
  • 📝 持续学习:记录人工纠正和经验,不断优化回复质量

🏗️ 系统架构

架构层次图

┌─────────────────────────────────────────────────────────────┐
│                         用户层                               │
│              (QQ群、企业微信、Slack等)                        │
└────────────────────┬────────────────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────────────────┐
│                    消息接入层                                 │
│              (NoneBot2 + OneBot)                            │
│         • 消息接收与发送                                      │
│         • 消息缓冲与合并                                      │
│         • 图片处理                                           │
└────────────────────┬────────────────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────────────────┐
│                   安全过滤层                                  │
│         • 敏感信息检测                                        │
│         • SQL注入防护                                        │
│         • 批量数据请求拦截                                     │
└────────────────────┬────────────────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────────────────┐
│                   AI 智能体层                                 │
│         ┌──────────────────────────────┐                    │
│         │   响应模式决策引擎             │                    │
│         │  • 直接回复模式               │                    │
│         │  • 人工查询模式               │                    │
│         │  • 边界界定模式               │                    │
│         └──────────┬───────────────────┘                    │
│                    │                                         │
│         ┌──────────▼───────────────────┐                    │
│         │   知识库检索                  │                    │
│         │  • 本地知识库                 │                    │
│         │  • 学习知识库                 │                    │
│         │  • 人工经验库                 │                    │
│         └──────────┬───────────────────┘                    │
│                    │                                         │
│         ┌──────────▼───────────────────┐                    │
│         │   LLM 推理                    │                    │
│         │  • 多模型支持                 │                    │
│         │  • 上下文管理                 │                    │
│         │  • 流式输出                   │                    │
│         └──────────┬───────────────────┘                    │
└────────────────────┼────────────────────────────────────────┘
                     │
        ┌────────────┴────────────┐
        │                         │
┌───────▼────────┐      ┌────────▼──────────┐
│  直接回复用户   │      │  生成查询指令      │
│                │      │  (发送给人工)      │
└────────────────┘      └────────┬──────────┘
                                 │
                        ┌────────▼──────────┐
                        │   人工执行查询     │
                        │  • 数据库查询      │
                        │  • 后台操作        │
                        │  • 结果返回        │
                        └────────┬──────────┘
                                 │
                        ┌────────▼──────────┐
                        │  AI 整合结果       │
                        │  回复用户          │
                        └───────────────────┘

人机协同时序图

以下时序图展示了 Agent 主导的数据检索流程:

sequenceDiagram
    participant User as 用户
    participant Agent as AI 智能体
    participant Human as 人工客服
    participant DB as 业务数据库

    User->>Agent: 帮我查下订单 PO20260101 的状态
    Agent->>Agent: 分析意图 (需要查询数据库?)
    Agent->>Agent: 生成 SQL 查询指令
    
    Note over Agent: 【挂起请求】<br/>生成内部指令
    
    Agent-->>Human: 【内部指令】<br/>SQL: SELECT order_id, status, updated_at<br/>FROM orders WHERE order_id = 'PO20260101'<br/>后台路径: 订单管理 → 订单查询
    Agent-->>User: 稍等,正在为您查询订单信息...
    
    Note right of Human: 人工确认权限<br/>并执行查询
    
    Human->>DB: 执行 SQL 查询
    DB-->>Human: 返回结果:<br/>{order_id: "PO20260101",<br/>status: "已发货",<br/>updated_at: "2026-01-02 10:30"}
    
    Human-->>Agent: 回填查询结果 (JSON)
    
    Agent->>Agent: 整合数据生成回复
    Agent->>User: 您的订单 PO20260101 当前状态为"已发货",<br/>更新时间:2026-01-02 10:30
    
    Note over User,Agent: 完整闭环完成
Loading

关键特点:

  • Agent 主动生成具体的 SQL 语句,而非模糊的"帮我查一下"
  • 人工只需执行指令并回填结果,无需理解业务逻辑
  • Agent 自动将结构化数据转换为用户友好的自然语言回复

🚀 快速开始

环境要求

  • Python 3.11+
  • 支持的 LLM API(至少配置一个):
    • Gemini API
    • 阿里云通义千问 API
    • 字节跳动豆包 API
    • Moonshot Kimi API
    • DeepSeek API
  • (可选)即时通讯平台:QQ、微信等
  • (可选)企业数据库访问权限

💡 Mock 模式说明:本项目内置了 Mock 数据库模式。Agent 会生成真实的 SQL 语句(如 Oracle SQL),Mock 引擎会拦截并模拟返回虚拟数据,无需配置真实数据库即可体验完整的人机协同流程。这使得项目可以立即运行和演示,同时也是生产环境的安全实践。

安装步骤

  1. 克隆项目
git clone https://github.com/LouisUltra/Enterprise-Support-Agent.git
cd enterprise-support-agent
  1. 创建虚拟环境
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# 或
.venv\Scripts\activate  # Windows
  1. 安装依赖
pip install -e .
  1. 配置环境变量

复制示例配置文件并编辑:

cp .env.example .env

编辑 .env 文件,至少配置一个 LLM 模型:

# 选择当前使用的模型
ACTIVE_MODEL=qwen

# 配置通义千问(示例)
QWEN_API_KEY=your_qwen_api_key_here
QWEN_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1
QWEN_MODEL=qwen-vl-max

# 配置 IM 平台(可选)
ONEBOT_WS_URLS=["ws://127.0.0.1:3001"]
QQ_GROUPS=[123456789]
ADMIN_QQ=987654321
  1. 准备知识库

将 knowledge_base_examples/ 中的示例文件复制到实际知识库目录,并根据您的业务定制:

# 示例文件仅供参考,请根据实际业务定制
cp -r knowledge_base_examples/* your_knowledge_base/
  1. 运行测试
pytest tests/ -v
  1. 启动服务
python -m enterprise_support_agent

📚 使用指南

基础配置

1. LLM 模型配置

在 .env 文件中配置您选择的 LLM 模型:

# 当前激活的模型
ACTIVE_MODEL=qwen

# Qwen 配置
QWEN_API_KEY=sk-xxxxx
QWEN_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1
QWEN_MODEL=qwen-vl-max

支持的模型:

  • Gemini: Google 的多模态模型
  • Qwen: 阿里云通义千问,支持视觉理解
  • DeepSeek: 高性价比的开源模型
  • Kimi: Moonshot 的长文本模型
  • Doubao: 字节跳动的豆包模型

2. 知识库配置

知识库文件放在 knowledge_base_examples/ 目录(可在配置中修改):

knowledge_base_examples/
├── 01_Database_Query_Guide.md      # 数据库查询指南
├── 02_Platform_Operations.md       # 平台操作手册
├── 03_API_Integration.md           # API 集成文档
├── 04_Common_Issues.md             # 常见问题解答
└── 05_Security_Guidelines.md       # 安全规范

定制建议:

  1. 使用您实际的业务术语替换示例中的通用术语
  2. 添加您的数据库表结构和常用查询
  3. 补充您的 API 文档和错误码说明
  4. 记录您的业务流程和操作规范

3. 系统提示词配置

系统提示词位于 prompts/system_prompt.md,定义了 AI 的行为模式:

  • 响应模式:直接回复 vs 人工查询
  • 知识库使用:如何检索和引用知识库
  • 安全边界:哪些请求需要拒绝或转人工

定制要点:

  • 调整响应语气和风格
  • 定义您的业务边界
  • 添加特定场景的处理规则

人机协同工作流程

场景 1:常规问题(AI 直接回复)

用户: "API 返回 401 错误是什么意思?"
  ↓
AI: 检索知识库 → 找到答案
  ↓
AI: "401 错误表示认证失败。请检查:
     1. API Key 是否正确
     2. API Key 是否已过期
     3. 请求头是否包含正确的 Authorization"

场景 2:需要查询数据(人机协同)

用户: "帮我查一下订单 PO20260101 的状态"
  ↓
AI: 分析 → 需要查询数据库
  ↓
AI: 生成内部指令(发送给人工客服):
    【内部查询请求】
    1. 意图:查询订单状态
    2. SQL: SELECT order_id, status, updated_at 
            FROM orders WHERE order_id = 'PO20260101'
    3. 后台路径:订单管理 → 订单查询
    4. 回复策略:根据状态告知用户
  ↓
人工: 执行 SQL → 返回结果
  ↓
AI: 整合结果回复用户:
    "您的订单 PO20260101 当前状态为'已发货',
     更新时间:2026-01-02 10:30"

场景 3:超出范围(边界界定)

用户: "什么时候能收到货款?"
  ↓
AI: 判断 → 属于财务/业务问题
  ↓
AI: "这属于财务结算范畴,技术客服无法查询。
     建议您联系财务部门或查看官网公告。"

高级功能

1. 数据库集成(可选)

如果您的安全策略允许,可以配置数据库连接:

# 企业数据库配置
ENTERPRISE_DB_HOST=your-db-host
ENTERPRISE_DB_PORT=1521
ENTERPRISE_DB_USER=readonly_user
ENTERPRISE_DB_PASSWORD=your_password
ENTERPRISE_DB_NAME=your_database

# 是否自动执行 SQL(谨慎使用)
AUTO_EXECUTE_SQL=false
DB_MAX_ROWS=100

安全建议:

  • 使用只读账号
  • 限制查询结果行数
  • 建议保持 AUTO_EXECUTE_SQL=false,由人工审核后执行

2. 持续学习机制

系统会自动记录以下信息用于持续改进:

  • 人工纠正 (data/corrections.md):记录 AI 回复错误及正确答案
  • 人工经验 (data/human_experience.md):记录人工处理的特殊案例
  • 核心规则 (data/redlines.md):手动维护的关键规则

这些文件会在后续对话中被引用,帮助 AI 不断改进。

3. 会话管理

  • 会话超时:默认 30 分钟无活动自动清除
  • 上下文保留:保留最近 20 条消息作为上下文
  • 多用户隔离:不同用户的会话完全独立

配置项:

SESSION_TIMEOUT_MINUTES=30
MESSAGE_BUFFER_SECONDS=45

🔧 开发指南

项目结构

enterprise-support-agent/
├── src/enterprise_support_agent/
│   ├── bot/                    # 机器人核心
│   │   ├── agent.py           # AI 智能体
│   │   └── message_buffer.py  # 消息缓冲
│   ├── context/               # 会话管理
│   │   └── session.py         # 会话存储
│   ├── database/              # 数据库集成
│   │   └── enterprise_query.py
│   ├── llm/                   # LLM 接口
│   │   ├── base.py           # 基础接口
│   │   ├── gemini.py         # Gemini 实现
│   │   ├── qwen.py           # Qwen 实现
│   │   └── ...
│   ├── security/              # 安全模块
│   │   └── filters.py        # 安全过滤器
│   └── config.py             # 配置管理
├── tests/                     # 测试用例
├── knowledge_base_examples/   # 知识库示例
├── prompts/                   # 系统提示词
├── data/                      # 运行时数据
└── pyproject.toml            # 项目配置

添加新的 LLM 模型

  1. 在 src/enterprise_support_agent/llm/ 创建新文件
  2. 继承 BaseLLM 类
  3. 实现 generate() 和 generate_stream() 方法
  4. 在 config.py 中添加配置项

示例:

from .base import BaseLLM, Message

class YourLLM(BaseLLM):
    def __init__(self, api_key: str, api_base: str, model: str):
        self.api_key = api_key
        self.api_base = api_base
        self.model = model
    
    async def generate(self, messages: list[Message]) -> str:
        # 实现您的 LLM 调用逻辑
        pass
    
    async def generate_stream(self, messages: list[Message]):
        # 实现流式输出
        pass

自定义安全规则

编辑 src/enterprise_support_agent/security/filters.py:

BLOCKED_PATTERNS = [
    # 添加您的拦截规则
    (r"your_pattern", "reason"),
]

WARNING_PATTERNS = [
    # 添加您的警告规则
    (r"your_pattern", "reason"),
]

运行测试

# 运行所有测试
pytest tests/ -v

# 运行特定测试
pytest tests/test_security.py -v

# 查看覆盖率
pytest tests/ --cov=enterprise_support_agent --cov-report=html

🐳 部署指南

Docker 部署(推荐)

  1. 构建镜像
docker build -t enterprise-support-agent:latest .
  1. 运行容器
docker run -d \
  --name support-agent \
  -v $(pwd)/.env:/app/.env \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/knowledge_base:/app/knowledge_base \
  enterprise-support-agent:latest

Docker Compose 部署

docker-compose up -d

生产环境建议

  1. 使用进程管理器(如 systemd、supervisor)
  2. 配置日志轮转
  3. 设置监控告警
  4. 定期备份数据目录
  5. 使用反向代理(如 Nginx)

🤝 贡献指南

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

如何贡献

  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
  • ✨ 提出新功能
  • 📝 改进文档
  • 🎨 优化代码
  • 🌐 添加翻译
  • 🧪 编写测试

详见 CONTRIBUTING.md

📄 开源协议

本项目采用 MIT 协议开源 - 详见 LICENSE 文件

🙏 致谢

  • NoneBot2 - 优秀的 Python 异步机器人框架
  • OneBot - 统一的聊天机器人应用接口标准
  • 所有 LLM 提供商:Google Gemini、阿里云通义千问、DeepSeek、Moonshot、字节跳动豆包

📞 联系方式

🗺️ 路线图

  • 支持更多 LLM 模型(Claude、GPT-4 等)
  • Web 管理界面
  • 多语言支持(英语、日语等)
  • 语音消息支持
  • 知识库可视化编辑器
  • 性能监控面板
  • 插件系统

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

About

Enterprise-grade AI customer support framework featuring Agent-Initiated Retrieval and Human-in-the-Loop workflows.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages