Skip to content

Repository files navigation

RAGOps Hub

RAGOps Hub 是一个面向 B2B SaaS 售后客服的多租户 RAG + Agent 工程样板。它把客户会话、订单订阅、 知识检索和技术工单放进同一个客服工作台,重点解决“客服能否安全、可追溯地使用企业知识和业务工具”。

产品预览

1. 企业售后客服工作台

企业售后客服工作台:会话队列、Agent 对话、客户和订单上下文

左侧展示分配给当前客服的客户会话;中间是支持 SSE 流式事件和引用溯源的 Agent 对话;右侧聚合 客户画像、订单、服务期、套餐权益和待确认工单。订单查询会校验租户、客服角色和 Case 分配, 创建工单必须经过人工确认。每个 Case 会加载最近对话,长会话自动生成摘要,重新打开页面也能继续 处理,升级工单时会附带交接信息;右侧还会展示当前客户的历史工单和相似已解决问题。

2. 知识运营与检索验收

知识运营:文档上传、权限范围和 Hybrid Retrieval 检索验收

知识管理员可以上传 PDF、Word、Markdown 和 TXT,设置部门、企业公开或个人可见范围;右侧使用 真实客服问法验证 Dense、BM25、RRF 与轻量重排的召回结果,并可继续打开原始 Chunk 核验来源。

3. 运行状态、离线评测与审计

运行评测:服务健康度、离线检索指标和操作审计

运行页面展示数据库和向量后端健康度、文档与 Chunk 数量、待处理会话、开放工单和审计事件; 离线基线明确区分技术验证与生产效果,工具调用、工单确认和安全操作均保留审计轨迹。

业务场景

客服处理登录失败、套餐权益、退款政策或 API 接入问题时,需要同时核对客户、订单、服务期和知识库。 RAGOps Hub 将这条链路设计为:

分配给客服的客户会话
        ↓
加载客户 + 订单 + 最近对话 + 历史摘要
        ↓
检索当前客户的历史工单 + 相似处理结果
        ↓
权限过滤后的 Hybrid RAG / 只读订单工具
        ↓
带来源的答复建议
        ↓
需要升级时生成待确认工单
        ↓
冻结 Case 交接摘要
        ↓
人工确认 → 幂等写入 → 审计

当前仓库提供一套可运行的脱敏示例数据,并保留 CRM、订单系统、IAM、Helpdesk 和企业文档源的适配边界。 场景和数据模型详见 docs/BUSINESS_SCENARIO.md

能力概览

  • 客服工作台:会话队列、客户画像、订单订阅、套餐权益和 SLA 上下文。
  • Case 级会话记忆:最近消息、追问指代、自动摘要、页面恢复和工单交接快照。
  • 客户历史工单:按当前 Case 权限读取同一客户的历史工单,FTS5 推荐相似已解决问题与处理结果。
  • 多格式知识:PDF、DOCX、Markdown、TXT,支持哈希去重、版本和生命周期状态。
  • Hybrid RAG:Milvus Dense + SQLite FTS5/BM25 + RRF + 轻量重排。
  • 权限控制:Tenant、Department、Owner、Public/Department/Private 可见范围。
  • 受控工具:订单查询按租户、角色和案件分配校验;工单创建必须人工确认。
  • 安全与治理:Prompt Injection 防护、工单幂等、结构化审计和引用溯源。
  • 流式交互:SSE 返回检索、工具、确认、正文、引用、错误和结束事件。
  • 知识运营:文档入库、文档列表、检索验收和来源预览。
  • 运行评测:服务健康度、业务计数、审计轨迹和离线检索基线。
  • 双运行模式:零外部依赖的本地模式,或 Docker Compose + Milvus Standalone。

架构

客服工作台 / 知识运营 / 运行评测
                |
                v
FastAPI + Principal(Tenant / User / Department / Roles)
                |
                v
Prompt Guard -> Case Memory -> Intent Router
                    |
                    +-> Recent Messages + Deterministic Summary + CRM Context
                    +-> Customer Ticket History + Similar Resolutions
      |              |                         |
      |              |                         +-> Ticket Tool -> Confirm -> Idempotent Write
      |              +-> Order Tool -> Case Assignment + Tenant ACL -> Audit
      v
Hybrid Retriever
  |          |
  v          v
Dense      FTS5/BM25
Milvus     SQLite Persistent Inverted Index
  \          /
   RRF Fusion -> Lightweight Rerank -> Grounded Answer -> SSE + Citations

更完整的技术设计见 docs/ARCHITECTURE.md,实现顺序见 docs/IMPLEMENTATION_STEPS.md,设计审查记录见 docs/DESIGN_REVIEW.md

快速启动

方式一:本地离线模式

不需要 Docker、Milvus 或模型密钥。

python3 -m venv .venv
.venv/bin/pip install -e '.[dev]'
cp .env.example .env
.venv/bin/python -m scripts.bootstrap_demo
.venv/bin/uvicorn app.main:app --reload

访问:

脱敏示例:会话 CASE-1001、客户王晨、订单 ORD-1001。工作台使用客服身份:

Tenant: demo-company
User: agent-chenyu
Department: customer-service
Roles: support_agent,knowledge_admin

内存模式只是不持久化 Dense 向量;文档、Chunk、工单及两类 FTS5 倒排索引保存在 SQLite。应用重启时 会为所有 ready Chunk 重新生成 Embedding 并装载内存向量库。

这里的内存向量库与 Agent Memory 是两件事。Case 消息、历史摘要和待确认动作会持久化在 SQLite; Agent 每次只加载当前 tenant_id + user_id + case_id 可访问的最近消息。默认保留最近 8 条进入 上下文,累计 12 条消息后把更早内容压缩成摘要:

MEMORY_RECENT_MESSAGES=8
MEMORY_SUMMARY_TRIGGER_MESSAGES=12
MEMORY_SUMMARY_MAX_CHARS=1600

摘要只保存有来源的对话内容,不替代 CRM、订单和工单系统中的业务事实,也不建立跨 Case 的自由用户 画像。

客户历史同样不是自由长期记忆:系统先通过当前 Case 的租户和客服分配校验,再以当前客户为范围读取 历史 Ticket;相似推荐只检索该客户已有工单的主题、描述和已记录的处理结果,不会跨客户召回。

方式二:一键 Docker Compose

完整容器模式会启动 etcd、MinIO、Milvus、样例入库任务和 API:

docker compose --profile full up -d --build
docker compose --profile full ps

应用健康后可访问:

停止环境:

docker compose --profile full down

资源受限时,可只启动第三方中间件,让 API 在宿主机运行:

docker compose up -d etcd minio milvus

然后在 .env 中配置:

VECTOR_BACKEND=milvus
MILVUS_URI=http://localhost:19530
EMBEDDING_PROVIDER=hash
EMBEDDING_DIMENSION=384
LLM_ENABLED=false

接入真实模型

任何支持 OpenAI-compatible API 的服务都可以通过配置接入:

EMBEDDING_PROVIDER=openai
EMBEDDING_DIMENSION=1024
EMBEDDING_MODEL=your-embedding-model
LLM_ENABLED=true
CHAT_MODEL=your-chat-model
OPENAI_BASE_URL=https://your-endpoint/v1
OPENAI_API_KEY=your-key

切换 Embedding 模型时必须使用新的 Milvus Collection 并重新入库,不能混用不同向量空间。

API 示例

列出分配给当前客服的会话:

curl http://127.0.0.1:8000/api/v1/support/cases \
  -H 'X-Tenant-ID: demo-company' \
  -H 'X-User-ID: agent-chenyu' \
  -H 'X-Department-ID: customer-service' \
  -H 'X-Roles: support_agent,knowledge_admin'

上传文档:

curl -X POST http://127.0.0.1:8000/api/v1/documents \
  -H 'X-Tenant-ID: demo-company' \
  -H 'X-User-ID: agent-chenyu' \
  -H 'X-Department-ID: customer-service' \
  -H 'X-Roles: support_agent,knowledge_admin' \
  -F 'visibility=department' \
  -F 'version=1' \
  -F 'file=@samples/knowledge/refund-policy.md'

SSE Agent:

curl -N -X POST http://127.0.0.1:8000/api/v1/chat/stream \
  -H 'Content-Type: application/json' \
  -H 'X-Tenant-ID: demo-company' \
  -H 'X-User-ID: agent-chenyu' \
  -H 'X-Department-ID: customer-service' \
  -H 'X-Roles: support_agent,knowledge_admin' \
  -d '{"message":"查询订单 ORD-1001","conversation_id":"CASE-1001","case_id":"CASE-1001"}'

重新发送“这个订单的服务期呢?”时,Agent 会从当前 Case 的受控上下文解析 ORD-1001。SSE 中的 memory_loadedmemory_updated 事件分别表示上下文装载和摘要状态更新。 当请求带有 Case 时,customer_history_loaded 会返回当前客户相似历史工单的数量;真实模型仅将这些 结果作为低信任参考,订单与客户事实仍从业务库读取。

工单流程:

1. 当前客服发送“请基于当前客户问题准备技术支持工单”
2. Agent 汇总客户、订单、Case、历史摘要和最近对话,生成工单交接快照
3. Agent 返回 human_confirmation_required,并在服务端保存 Pending Action
4. 同一客服、同一 CASE conversation_id 发送“确认”
5. Agent 使用幂等键创建工单,将交接快照及业务关联写入工单并记录审计

评测与测试

运行检索评测:

.venv/bin/python -m scripts.evaluate

输出包括 Source Recall@K、MRR、平均检索延迟和每题排名。仓库示例集只有 5 题,仅用于验证链路和 回归基线;业务验收应使用脱敏真实问法,并覆盖无答案、术语、权限和对抗样本。

运行自动化测试和代码检查:

.venv/bin/pytest -q
.venv/bin/ruff check app tests scripts

项目目录

app/
  agent/       意图路由、Case 会话记忆、工作流和受控工具
  api/         FastAPI、身份依赖、SSE 和 Schema
  core/        配置
  domain/      领域实体
  embeddings/  离线与 OpenAI-compatible Embedding
  llm/         抽取式与真实 LLM 回答
  rag/         解析、Chunk、入库、BM25、RRF、Rerank
  security/    Prompt Injection 防线
  storage/     SQLite 与 Milvus 适配器
docs/          业务场景、架构、实现和设计审查
frontend/      客服工作台、知识运营和运行评测
samples/       示例知识和评测集
scripts/       入库、自检与评测
tests/         自动化测试

生产化边界

该仓库提供可运行的企业工程基线,但不声明已经承载大规模生产流量。真实部署通常还需要:

  • 使用 OIDC/JWKS 和企业 IAM 替换演示 Header 与示例 HS256 JWT。
  • 使用 PostgreSQL、迁移工具和连接池替换单机 SQLite。
  • 对接 CRM、订单/计费、Helpdesk 和对象存储;增加同步任务与数据质量校验。
  • 增加病毒扫描、PII/DLP 检测、异步解析队列和完整 Outbox/Saga。
  • 使用专业 Reranker、模型路由、限流、熔断和租户 Token 配额。
  • 接入 OpenTelemetry、Prometheus、结构化日志、SLA 告警和成本看板。
  • 为 SSE 增加心跳、断线续传、任务取消、代理超时和客户端背压。
  • 为会话数据增加保留期限、PII 脱敏、删除接口、摘要质量评测和客服转派策略。
  • 为历史工单增加 Helpdesk 同步、字段级脱敏、客户删除权、处理结果质量标注和持续效果评测。
  • 建立线上反馈、知识过期治理、回滚机制和持续评测集。

About

企业 RAG 系统的工程化运营平台,短、专业,也能体现权限、检索、Agent、评测和运维能力

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages