Skip to content

aliyun/sop-chat

Repository files navigation

SOP Chat

阿里云SLS智能问答助手(SOP Agent) 的客户端应用,提供独立的 Web UI 界面,并支持钉钉、飞书、企业微信机器人接入,让你无需开发即可快速使用 SOP 智能对话能力。

主要功能

  • 独立 Web UI — 开箱即用的聊天界面,支持 Markdown 渲染、多会话管理
  • 多平台机器人对接 — 支持钉钉、飞书、企业微信三大 IM 平台接入 SOP Agent,同一服务可同时运行多个机器人实例
    • 钉钉 — 基于 DingTalk Stream SDK,无需公网 IP,支持群内 @机器人 及单聊
    • 飞书 — 基于飞书 WebSocket 长连接,无需公网 IP,支持群聊与单聊
    • 企业微信 — 基于回调模式,支持应用消息接收
  • 定时任务(Cron) — 支持配置多个定时任务,定期向指定数字员工发起提问,并将回答自动推送至钉钉、飞书或企业微信 Webhook
  • OpenAI 兼容接口 — 暴露 /openai/v1/chat/completions 接口,方便使用 Cherry Studio、ChatBox 等兼容 OpenAI 协议的聊天客户端直接接入
  • 可视化配置管理 — 内置 /config 页面,启动后直接在浏览器中完成所有配置,无需手动编辑文件
  • 用户认证 — 基于 JWT 的本地用户管理,支持角色权限
  • 流式对话 — SSE 实时流式输出,工具调用过程可见

快速开始(推荐)

1. 下载二进制

Releases 页面下载对应平台的二进制文件:

平台 文件名
Linux x86_64 sop-chat-server-linux-amd64
macOS Intel sop-chat-server-darwin-amd64
macOS Apple Silicon sop-chat-server-darwin-arm64

2. 启动服务

# 赋予执行权限(macOS / Linux)
chmod +x sop-chat-server

# 启动(首次运行会自动生成默认 config.yaml)
./sop-chat-server

** 启动后在终端会输出后台配置的链接地址** 根据配置页面进行配置


阿里云前置配置

在使用前,需要在阿里云侧完成以下授权配置。

1. AK账号需要的权限策略(AccessKey 所属账号):

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cms:CreateChat",
        "cms:GetDigitalEmployee",
        "cms:ListDigitalEmployees",
        "cms:GetThread",
        "cms:GetThreadData",
        "cms:ListThreads",
        "cms:CreateDigitalEmployee",
        "cms:UpdateDigitalEmployee",
        "cms:DeleteDigitalEmployee",
        "cms:CreateThread",
        "cms:UpdateThread",
        "cms:DeleteThread"
      ],
      "Resource": [
        "acs:cms:*:*:digitalemployee/*",
        "acs:cms:*:*:digitalemployee/*/thread/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "ram:PassRole",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "acs:Service": "cloudmonitor.aliyuncs.com"
        }
      }
    }
  ]
}

提示:可将 ram:PassRole 的 Resource 限制为第一步创建的 RAM 角色 ARN。


手动构建

环境要求

  • Go 1.23+
  • Node.js 18+

一键构建(推荐)

# 构建当前平台的单一二进制(前端已嵌入)
make build

# 或使用构建脚本
./build.sh

# 多平台构建(Linux + macOS)
./build-all.sh

产物:

  • 单平台:backend/sop-chat-server
  • 多平台:dist/linux/sop-chat-serverdist/darwin/sop-chat-serverdist/darwin/sop-chat-server-arm64

分开构建

# 后端
cd backend
go build -o sop-chat-server cmd/sop-chat-server/main.go

# 前端
cd frontend
npm install
npm run build

开发模式

# 后端(热重载)
cd backend
go run cmd/sop-chat-server/main.go

# 前端(Vite 开发服务器,http://localhost:5173)
cd frontend
npm install
npm run dev

架构说明

┌──────────────────────────────────────────────────────────────┐
│          用户 / 钉钉群 / 飞书群 / 企业微信                    │
└───┬──────────────┬──────────────┬──────────────┬─────────────┘
    │ HTTP/SSE      │ DingTalk     │ Feishu       │ WeCom
    │               │ Stream SDK   │ WebSocket    │ Callback
    ▼               ▼              ▼              ▼
┌──────────────────────────────────────────────────────────────┐
│                      SOP Chat Server                         │
│                                                              │
│  ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌──────────┐  │
│  │  Web UI    │ │  钉钉机器人 │ │  飞书机器人 │ │企业微信  │  │
│  │ (内嵌前端) │ │(Stream模式)│ │(WebSocket) │ │机器人    │  │
│  └────────────┘ └────────────┘ └────────────┘ └──────────┘  │
│                                                              │
│  ┌──────────────────────────────────────────────────────┐   │
│  │       认证 / 配置管理 / API 路由 / OpenAI 兼容接口    │   │
│  └──────────────────────────────────────────────────────┘   │
└──────────────────────────┬───────────────────────────────────┘
                           │ API Calls
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                        SOP Agent                            │
│                     (阿里云云监控)                           │
│                                                             │
│  ┌──────────────────────────────────────────────────────┐  │
│  │              ReAct Loop(Agent 运行时)               │  │
│  │                                                      │  │
│  │    ┌────────┐         ┌──────────────────────┐     │  │
│  │    │        │────────▶│   SOP 知识库          │     │  │
│  │    │  AI    │         └──────────────────────┘     │  │
│  │    │ Agent  │                                       │  │
│  │    │ (角色) │         ┌──────────────────────┐     │  │
│  │    │        │────────▶│  SLS & OpenAPI 工具   │     │  │
│  │    └────────┘         └──────────────────────┘     │  │
│  │                                                      │  │
│  │         (推理 → 行动 → 观察)                       │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                             │
│  认证方式:RAM 角色                                          │
└─────────────────────────────────────────────────────────────┘

核心组件:

组件 说明
SOP Chat Frontend React 前端,构建后嵌入二进制
SOP Chat Server Go 后端,负责认证、会话管理、多平台机器人对接
配置管理页面 内置 /config 页面,支持无文件化配置
SOP Agent 阿里云云监控数字员工,基于 ReAct 框架
钉钉机器人 通过 DingTalk Stream SDK 接入,无需公网 IP,支持串行会话隔离
飞书机器人 通过飞书 WebSocket 长连接接入,无需公网 IP,支持群聊与单聊
企业微信机器人 通过回调 Webhook 接入,支持应用消息,需公网可达
定时任务调度器 基于 cron 表达式定时提问数字员工,结果推送至 Webhook
OpenAI 兼容接口 暴露标准 /openai/v1/chat/completions,可对接第三方工具

项目结构

sop-chat/
├── backend/
│   ├── cmd/
│   │   ├── sop-chat-server/   # 服务端入口
│   │   └── sop-chat-cli/      # CLI 调试工具
│   ├── internal/
│   │   ├── api/               # HTTP 路由与处理器
│   │   ├── auth/              # 认证逻辑
│   │   ├── config/            # 配置结构
│   │   ├── dingtalk/          # 钉钉机器人
│   │   ├── feishu/            # 飞书机器人
│   │   ├── scheduler/         # 定时任务调度器(cron)
│   │   └── wecom/             # 企业微信机器人
│   └── pkg/sopchat/           # SOP Agent SDK 封装
└── frontend/
    └── src/
        ├── components/        # React 组件
        └── services/          # API 客户端

定时任务(Cron)

定时任务允许你按计划自动向指定数字员工发起提问,并将回答推送至钉钉、飞书或企业微信群机器人 Webhook。

在配置管理 UI 的 「定时任务」 标签页中可直接管理,也可手动编辑 config.yaml

scheduledTasks:
  - name: daily-standup          # 任务唯一标识
    enabled: true
    cron: "0 9 * * 1-5"          # 工作日 09:00,标准 5 字段 cron 表达式
    prompt: "今天有哪些需要关注的告警?"
    employeeName: apsara-ops     # 数字员工名称
    webhook:
      type: dingtalk             # 平台:dingtalk | feishu | wecom
      url: "https://oapi.dingtalk.com/robot/send?access_token=xxx"
      msgType: text              # text | markdown(钉钉/飞书);text | markdown | post(飞书)

cron 表达式说明(5 字段,秒级可选):

示例 含义
*/5 * * * * 每 5 分钟
*/15 * * * * 每 15 分钟
0 9 * * * 每天 09:00
0 9 * * 1-5 工作日 09:00
0 9,18 * * 1-5 工作日 09:00 和 18:00

支持的 Webhook 类型:

type 说明
dingtalk 钉钉自定义机器人,支持 text / markdown 消息类型
feishu 飞书自定义机器人,支持 text / post / markdown 消息类型
wecom 企业微信群机器人,支持 text / markdown 消息类型

在配置管理 UI 中可对任务进行立即触发测试,无需等待定时到来即可验证配置是否正确。


License

本项目基于 Apache-2.0 协议开源,详见 LICENSE 文件。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors