阿里云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 实时流式输出,工具调用过程可见
从 Releases 页面下载对应平台的二进制文件:
| 平台 | 文件名 |
|---|---|
| Linux x86_64 | sop-chat-server-linux-amd64 |
| macOS Intel | sop-chat-server-darwin-amd64 |
| macOS Apple Silicon | sop-chat-server-darwin-arm64 |
# 赋予执行权限(macOS / Linux)
chmod +x sop-chat-server
# 启动(首次运行会自动生成默认 config.yaml)
./sop-chat-server** 启动后在终端会输出后台配置的链接地址** 根据配置页面进行配置
在使用前,需要在阿里云侧完成以下授权配置。
{
"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-server、dist/darwin/sop-chat-server、dist/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 客户端
定时任务允许你按计划自动向指定数字员工发起提问,并将回答推送至钉钉、飞书或企业微信群机器人 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 中可对任务进行立即触发测试,无需等待定时到来即可验证配置是否正确。
本项目基于 Apache-2.0 协议开源,详见 LICENSE 文件。