union-py-app-stream-chat 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -0
- package/config/config.example.yaml +60 -0
- package/knowledge/files/scenario-netunion-runtime-risk-v1.md +111 -0
- package/knowledge/files/severity-netunion-runtime-classification-v1.md +112 -0
- package/knowledge//350/201/224/345/220/210/350/277/220/347/273/264/347/237/245/350/257/206/345/272/223/345/273/272/347/253/213/350/247/204/350/214/203.md +272 -0
- package/main.py +46 -0
- package/package.json +21 -0
- package/pyproject.toml +23 -0
- package/requirements.txt +11 -0
- package/src/api/__init__.py +0 -0
- package/src/api/routes.py +34 -0
- package/src/core/__init__.py +0 -0
- package/src/core/config_loader.py +99 -0
- package/src/manager/toolcall_manager.py +12 -0
- package/src/models/__init__.py +0 -0
- package/src/models/schemas.py +7 -0
- package/src/service/__init__.py +0 -0
- package/src/service/chat_service.py +245 -0
- package/src/service/rag_service.py +154 -0
- package/src/utils/function_utils.py +421 -0
- package/tests/__init__.py +0 -0
- package/tests/test_chat_service.py +75 -0
- package/trainingDocs//347/275/221/347/273/234/346/224/257/344/273/230/346/270/205/347/256/227/345/271/263/345/217/260/350/201/224/345/220/210/350/277/220/347/273/264/350/277/220/350/241/214/345/256/236/350/267/265/346/214/207/345/274/225V1.0.md +33 -0
package/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# GLM 运维智能助手 (OpsAssistant)
|
|
2
|
+
|
|
3
|
+
基于智谱 GLM 大模型的运维平台运行表现问答服务。
|
|
4
|
+
|
|
5
|
+
## 项目结构
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
glm-ops-assistant/
|
|
9
|
+
├── config/
|
|
10
|
+
│ └── config.yaml # 配置文件(API Key、模型参数、过滤规则等)
|
|
11
|
+
├── src/
|
|
12
|
+
│ ├── api/
|
|
13
|
+
│ │ └── routes.py # View 层 - FastAPI 路由接口
|
|
14
|
+
│ ├── service/
|
|
15
|
+
│ │ └── chat_service.py # Service 层 - 业务逻辑(问题筛选、流程编排)
|
|
16
|
+
│ ├── manager/
|
|
17
|
+
│ │ ├── llm_manager.py # Manager 层 - GLM SDK 调用封装
|
|
18
|
+
│ │ └── session_manager.py # Manager 层 - 多轮会话管理
|
|
19
|
+
│ ├── core/
|
|
20
|
+
│ │ └── config_loader.py # 核心工具 - 配置加载(支持环境变量覆盖)
|
|
21
|
+
│ └── models/
|
|
22
|
+
│ └── schemas.py # Pydantic 数据模型
|
|
23
|
+
├── tests/
|
|
24
|
+
│ └── test_chat_service.py # 单元测试
|
|
25
|
+
├── main.py # 服务入口
|
|
26
|
+
├── requirements.txt # 依赖清单
|
|
27
|
+
└── README.md
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 快速开始
|
|
31
|
+
|
|
32
|
+
### 1. 安装依赖
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install -r requirements.txt
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 2. 配置
|
|
39
|
+
|
|
40
|
+
编辑 `config/config.yaml`,填入你的 GLM API Key:
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
llm:
|
|
44
|
+
api_key: "your-api-key-here"
|
|
45
|
+
model: "glm-4-flash"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
或通过环境变量覆盖:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
export LLM_API_KEY="your-api-key"
|
|
52
|
+
export LLM_MODEL="glm-4-flash"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. 启动服务
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
启动后访问文档:`http://localhost:8000/docs`
|
|
62
|
+
|
|
63
|
+
## API 接口
|
|
64
|
+
|
|
65
|
+
| 方法 | 路径 | 说明 |
|
|
66
|
+
|------|------|------|
|
|
67
|
+
| POST | `/api/v1/chat` | 普通对话(非流式) |
|
|
68
|
+
| POST | `/api/v1/chat/stream` | 流式对话(SSE) |
|
|
69
|
+
| POST | `/api/v1/session/clear` | 清空会话历史 |
|
|
70
|
+
| GET | `/api/v1/session/info` | 获取会话信息 |
|
|
71
|
+
| GET | `/api/v1/health` | 健康检查 |
|
|
72
|
+
|
|
73
|
+
## 多轮对话
|
|
74
|
+
|
|
75
|
+
通过 `session_id` 标识会话,系统自动维护上下文历史。历史记录保存在内存中,支持 TTL 过期清理。
|
|
76
|
+
|
|
77
|
+
## 问题筛选
|
|
78
|
+
|
|
79
|
+
服务会自动判断用户问题是否与**系统运行表现**相关(CPU、内存、磁盘、网络、告警、故障等)。
|
|
80
|
+
|
|
81
|
+
不符合条件的问题会被直接拒绝,返回预设提示语。筛选关键词和提示语可在 `config.yaml` 中自定义。
|
|
82
|
+
|
|
83
|
+
## 流式输出
|
|
84
|
+
|
|
85
|
+
调用 `/api/v1/chat/stream` 接口,服务端使用 SSE 协议逐字推送模型生成内容。
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# GLM 运维助手配置文件示例
|
|
2
|
+
|
|
3
|
+
llm:
|
|
4
|
+
api_key: "your-api-key-here"
|
|
5
|
+
model: "glm-4.7-flash"
|
|
6
|
+
base_url: "https://open.bigmodel.cn/api/paas/v4/"
|
|
7
|
+
max_tokens: 4096
|
|
8
|
+
temperature: 0.7
|
|
9
|
+
top_p: 0.9
|
|
10
|
+
|
|
11
|
+
system:
|
|
12
|
+
name: "Uops-Assistant"
|
|
13
|
+
description: "联合运维智能客服"
|
|
14
|
+
system_prompt: |
|
|
15
|
+
你是网络支付清算平台(网联平台)联合运维的智能客服助手,面向联合运维成员单位(银行、支付机构等)提供咨询与指引服务。
|
|
16
|
+
回答时应准确引用《网络支付清算平台联合运维运行实践指引V1.0》中的具体指标阈值和处置策略,用专业但易懂的语言回复。
|
|
17
|
+
|
|
18
|
+
filter:
|
|
19
|
+
enabled: true
|
|
20
|
+
allowed_keywords:
|
|
21
|
+
- "网联"
|
|
22
|
+
- "联合运维"
|
|
23
|
+
- "运维"
|
|
24
|
+
- "生产变更"
|
|
25
|
+
- "变更"
|
|
26
|
+
- "生产运行"
|
|
27
|
+
- "运行"
|
|
28
|
+
- "系统成功率"
|
|
29
|
+
- "业务成功率"
|
|
30
|
+
- "异常"
|
|
31
|
+
- "故障"
|
|
32
|
+
- "定级"
|
|
33
|
+
- "关闭渠道"
|
|
34
|
+
- "联合处置"
|
|
35
|
+
- "大型单位"
|
|
36
|
+
- "中型单位"
|
|
37
|
+
- "小型单位"
|
|
38
|
+
- "银行"
|
|
39
|
+
- "支付"
|
|
40
|
+
- "清算"
|
|
41
|
+
rejection_message: "抱歉,我是联合运维智能客服,只能回答与联合运维相关的问题,例如生产变更、生产运行、故障定级、周期评价、业务范围等。请重新描述您的问题。"
|
|
42
|
+
|
|
43
|
+
tools:
|
|
44
|
+
api_base: "http://localhost:3000/api"
|
|
45
|
+
max_rounds: 5
|
|
46
|
+
|
|
47
|
+
rag:
|
|
48
|
+
enabled: true
|
|
49
|
+
knowledge_dir: "knowledge"
|
|
50
|
+
persist_dir: ".chroma"
|
|
51
|
+
collection: "ops_knowledge"
|
|
52
|
+
embedding_model: "embedding-3"
|
|
53
|
+
embedding_max_chars: 6000
|
|
54
|
+
top_k: 5
|
|
55
|
+
chunk_size: 1200
|
|
56
|
+
rebuild_on_startup: false
|
|
57
|
+
|
|
58
|
+
session:
|
|
59
|
+
max_history: 20
|
|
60
|
+
ttl_seconds: 3600
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
kb_id: "scenario-netunion-runtime-risk-v1"
|
|
3
|
+
title: "网络支付清算平台生产运行风险场景"
|
|
4
|
+
doc_type: "scenario"
|
|
5
|
+
domain: "联合运维"
|
|
6
|
+
business_modules: ["签约", "解约", "快捷支付", "付款", "退款", "代收", "网关支付"]
|
|
7
|
+
source_doc: "网络支付清算平台联合运维运行实践指引V1.0.md"
|
|
8
|
+
source_version: "V1.0"
|
|
9
|
+
source_section: "5.2.1 存在运行风险"
|
|
10
|
+
effective_date: ""
|
|
11
|
+
owner: "联合运维知识库"
|
|
12
|
+
confidentiality: "内部"
|
|
13
|
+
risk_level: "medium"
|
|
14
|
+
applicable_roles: ["网联平台", "异常方", "影响方", "成员单位"]
|
|
15
|
+
tags: ["生产运行", "运行风险", "系统成功率", "业务成功率", "平均耗时", "交易请求数量", "带宽容量"]
|
|
16
|
+
status: "active"
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# 网络支付清算平台生产运行风险场景
|
|
20
|
+
|
|
21
|
+
## 1. 适用范围
|
|
22
|
+
|
|
23
|
+
本条目适用于网络支付清算平台联合运维覆盖的生产运行场景。当生产运行中出现风险隐患,但尚未扩大为明确业务异常时,用于判断是否触发风险关注和排查处置。
|
|
24
|
+
|
|
25
|
+
适用业务包括签约、解约、快捷支付、付款、退款、代收、网关支付等主要业务。
|
|
26
|
+
|
|
27
|
+
## 2. 场景定义
|
|
28
|
+
|
|
29
|
+
“存在运行风险”是指相关运行指标已经出现异常趋势,异常方应重点关注并尽快排查。如果风险持续出现、间歇性多次出现,或异常影响迅速扩大,应升级到业务异常场景进行处置。
|
|
30
|
+
|
|
31
|
+
## 3. 触发条件
|
|
32
|
+
|
|
33
|
+
符合下列任意一项指标,即触发“存在运行风险”处置策略。
|
|
34
|
+
|
|
35
|
+
| 指标 | 大型单位 | 中型单位 | 小型单位 | 持续时间 | 是否系统决策指标 |
|
|
36
|
+
| --- | --- | --- | --- | --- | --- |
|
|
37
|
+
| 平均系统成功率 | `<99.99%` 且系统失败笔数 `>100` | `<99.99%` 且系统失败笔数 `>50` | `<99.99%` 且系统失败笔数 `>10` | `5min` | 是 |
|
|
38
|
+
| 业务成功率 | 与前一分钟正常情况相比下降幅度 `>20%` | 与前一分钟正常情况相比下降幅度 `>20%` | 与前一分钟正常情况相比下降幅度 `>20%` | 无固定持续时间 | 否,参考指标 |
|
|
39
|
+
| 平均耗时 | `>=1000ms` | `>=1000ms` | 未规定 | `2min` | 是 |
|
|
40
|
+
| 交易请求数量 | 与前一分钟正常情况相比下降幅度 `>20%` | 与前一分钟正常情况相比下降幅度 `>20%` | 与前一分钟正常情况相比下降幅度 `>20%` | 无固定持续时间 | 否,参考指标 |
|
|
41
|
+
| 带宽容量 | `>60%` | `>60%` | `>60%` | 无固定持续时间 | 预警指标 |
|
|
42
|
+
|
|
43
|
+
说明:业务成功率和交易请求数量为参考指标,不作为系统自动决策指标。当场景触达参考指标时,应先与相关方排查确认,再进行处置。
|
|
44
|
+
|
|
45
|
+
## 4. 处置策略
|
|
46
|
+
|
|
47
|
+
| 角色 | 处置要求 | 风险说明 |
|
|
48
|
+
| --- | --- | --- |
|
|
49
|
+
| 异常方 | 重点关注相关指标,尽快排查原因,消除运行风险 | 查询、排查类动作可自动辅助;涉及生产变更时需另行确认 |
|
|
50
|
+
| 影响方 | 保持关注,及时同步信息 | 一期仅建议关注和同步,不自动执行降流或关闭渠道 |
|
|
51
|
+
| 网联平台 | 可根据联合运维机制协调异常方和影响方同步信息 | 平台协调动作应保留审计记录 |
|
|
52
|
+
|
|
53
|
+
## 5. 关联指标
|
|
54
|
+
|
|
55
|
+
| 指标 | 口径 |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| 系统失败数量 | 统计时间段内未接收到返回信息,以及系统返回码非 `00000000` 的交易数量总和 |
|
|
58
|
+
| 系统成功率 | `(系统请求数量 - 系统失败数量) / 系统请求数量 * 100%`,保留小数点后 4 位 |
|
|
59
|
+
| 业务成功率 | `(系统请求数量 - 业务失败数量) / 业务请求数量 * 100%`,保留小数点后 4 位 |
|
|
60
|
+
| 平均耗时 | 单笔交易耗时累计总和 / 系统请求数量 |
|
|
61
|
+
|
|
62
|
+
## 6. 关联函数
|
|
63
|
+
|
|
64
|
+
一期可关联以下只读查询类函数:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
function_name: "query_runtime_metrics"
|
|
68
|
+
display_name: "查询运行指标"
|
|
69
|
+
function_type: "read"
|
|
70
|
+
description: "查询指定业务、机构、时间窗口内的系统成功率、业务成功率、平均耗时、交易请求数量、系统失败数量等运行指标。"
|
|
71
|
+
risk_level: "low"
|
|
72
|
+
requires_confirmation: false
|
|
73
|
+
required_permissions: ["metrics:read"]
|
|
74
|
+
input_schema:
|
|
75
|
+
business_module: "业务模块,例如快捷支付、退款、付款"
|
|
76
|
+
org_name: "成员单位名称,可选"
|
|
77
|
+
org_type: "单位分类,可选:大型单位、中型单位、小型单位"
|
|
78
|
+
time_range: "查询时间范围,例如最近5分钟、最近30分钟"
|
|
79
|
+
output_schema:
|
|
80
|
+
system_success_rate: "系统成功率"
|
|
81
|
+
business_success_rate: "业务成功率"
|
|
82
|
+
avg_latency_ms: "平均耗时,单位毫秒"
|
|
83
|
+
request_count: "系统请求数量"
|
|
84
|
+
system_failed_count: "系统失败数量"
|
|
85
|
+
bandwidth_usage_rate: "带宽容量占用率"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 7. 模型回答要求
|
|
89
|
+
|
|
90
|
+
当用户询问运行风险判断时,模型应:
|
|
91
|
+
|
|
92
|
+
1. 先识别单位分类、业务模块和时间窗口。
|
|
93
|
+
2. 如果缺少运行指标数据,应建议或调用只读查询函数获取数据。
|
|
94
|
+
3. 判断是否满足任一触发条件。
|
|
95
|
+
4. 区分系统决策指标和参考指标。
|
|
96
|
+
5. 给出异常方、影响方和平台方的处置建议。
|
|
97
|
+
6. 不得直接执行降流、关闭渠道、重启、回滚等生产操作。
|
|
98
|
+
|
|
99
|
+
## 8. 检索提示
|
|
100
|
+
|
|
101
|
+
用户可能这样提问:
|
|
102
|
+
|
|
103
|
+
1. “系统成功率低于 99.99% 算不算风险?”
|
|
104
|
+
2. “平均耗时超过 1 秒要怎么处理?”
|
|
105
|
+
3. “快捷支付成功率下降 20% 是什么级别?”
|
|
106
|
+
4. “带宽超过 60% 是否需要处置?”
|
|
107
|
+
5. “运行风险阶段异常方和影响方分别要做什么?”
|
|
108
|
+
|
|
109
|
+
## 9. 来源依据
|
|
110
|
+
|
|
111
|
+
本条目基于《网络支付清算平台联合运维运行实践指引V1.0》第 `5.2.1 存在运行风险` 归纳整理,并引用附录 A 中部分运行指标定义。
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
kb_id: "severity-netunion-runtime-classification-v1"
|
|
3
|
+
title: "网络支付清算平台运行故障定级规则"
|
|
4
|
+
doc_type: "severity"
|
|
5
|
+
domain: "联合运维"
|
|
6
|
+
business_modules: ["签约", "解约", "快捷支付", "付款", "退款", "代收", "网关支付"]
|
|
7
|
+
source_doc: "网络支付清算平台联合运维运行实践指引V1.0.md"
|
|
8
|
+
source_version: "V1.0"
|
|
9
|
+
source_section: "5.3 运行故障定级;5.4 故障善后处置"
|
|
10
|
+
effective_date: ""
|
|
11
|
+
owner: "联合运维知识库"
|
|
12
|
+
confidentiality: "内部"
|
|
13
|
+
risk_level: "medium"
|
|
14
|
+
applicable_roles: ["网联平台", "异常方", "影响方", "成员单位"]
|
|
15
|
+
tags: ["生产运行", "故障定级", "异常交易笔数", "异常持续时间", "账务调整"]
|
|
16
|
+
status: "active"
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# 网络支付清算平台运行故障定级规则
|
|
20
|
+
|
|
21
|
+
## 1. 适用范围
|
|
22
|
+
|
|
23
|
+
本条目适用于网络支付清算平台联合运维生产运行过程中,对故障影响程度进行定级,并确定善后处置时限。
|
|
24
|
+
|
|
25
|
+
## 2. 定级原则
|
|
26
|
+
|
|
27
|
+
故障定级依据“异常影响”和“异常持续时间”两个维度判断。两个维度之间是“或”的关系,满足其中任意一项即可定级。当同时满足多个故障定级标准时,按最高级别确定故障等级。
|
|
28
|
+
|
|
29
|
+
## 3. 故障定级标准
|
|
30
|
+
|
|
31
|
+
| 故障级别 | 单位分类 | 异常影响 | 异常持续时间 |
|
|
32
|
+
| --- | --- | --- | --- |
|
|
33
|
+
| 轻微故障 | 大型单位 | 异常交易笔数 `[1000,25000)` | `<10min` |
|
|
34
|
+
| 轻微故障 | 中型单位 | 异常交易笔数 `[1000,10000)` | `<30min` |
|
|
35
|
+
| 轻微故障 | 小型单位 | 异常交易笔数 `[500,5000)` | `<60min` |
|
|
36
|
+
| 一般故障 | 大型单位 | 异常交易笔数 `[25000,50000)` | `[10min,30min)` |
|
|
37
|
+
| 一般故障 | 中型单位 | 异常交易笔数 `[10000,25000)` | `[30min,60min)` |
|
|
38
|
+
| 一般故障 | 小型单位 | 异常交易笔数 `[5000,10000)` | `[60min,120min)` |
|
|
39
|
+
| 严重故障 | 大型单位 | 异常交易笔数 `>=50000` | `>=30min` |
|
|
40
|
+
| 严重故障 | 中型单位 | 异常交易笔数 `>=25000` | `>=60min` |
|
|
41
|
+
| 严重故障 | 小型单位 | 异常交易笔数 `>=10000` | `>=120min` |
|
|
42
|
+
|
|
43
|
+
## 4. 善后处置时限
|
|
44
|
+
|
|
45
|
+
| 故障级别 | 善后处置要求 |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| 轻微故障 | 应在 1 个自然日内完成账务调整 |
|
|
48
|
+
| 一般故障 | 应在 2 个小时内完成账务调整 |
|
|
49
|
+
| 严重故障 | 应在 30 分钟内完成账务调整 |
|
|
50
|
+
|
|
51
|
+
说明:对于账务调整,故障方应在处理完成后第一时间与网联平台同步信息,否则视为未及时调整。
|
|
52
|
+
|
|
53
|
+
## 5. 上报监管参考场景
|
|
54
|
+
|
|
55
|
+
网联平台将根据相关要求,对以下故障情形按日上报至中国人民银行支付结算司:
|
|
56
|
+
|
|
57
|
+
| 场景 | 条件 |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| 场景 1 | 平台或成员机构引起业务影响超过 10 万笔 |
|
|
60
|
+
| 场景 2 | 平台引起的业务影响超过 5 分钟 |
|
|
61
|
+
| 场景 3 | 主要成员机构故障影响超过 10 分钟,含间歇性或未完全恢复 |
|
|
62
|
+
| 场景 4 | 其他成员机构引起业务影响超过 30 分钟,含间歇性或未完全恢复,且故障期间平均系统成功率为日常均值的 50% 以下 |
|
|
63
|
+
| 场景 5 | 其余触发舆情影响的安全事件 |
|
|
64
|
+
|
|
65
|
+
## 6. 关联函数
|
|
66
|
+
|
|
67
|
+
一期可关联以下只读查询类函数:
|
|
68
|
+
|
|
69
|
+
```yaml
|
|
70
|
+
function_name: "query_incident_impact"
|
|
71
|
+
display_name: "查询故障影响"
|
|
72
|
+
function_type: "read"
|
|
73
|
+
description: "查询指定业务、机构、时间窗口内的异常交易笔数、异常持续时间和成功率变化,用于辅助故障定级。"
|
|
74
|
+
risk_level: "low"
|
|
75
|
+
requires_confirmation: false
|
|
76
|
+
required_permissions: ["incident:read", "metrics:read"]
|
|
77
|
+
input_schema:
|
|
78
|
+
business_module: "业务模块"
|
|
79
|
+
org_name: "成员单位名称"
|
|
80
|
+
org_type: "单位分类"
|
|
81
|
+
time_range: "故障或异常时间范围"
|
|
82
|
+
output_schema:
|
|
83
|
+
abnormal_transaction_count: "异常交易笔数"
|
|
84
|
+
abnormal_duration_minutes: "异常持续时间,单位分钟"
|
|
85
|
+
avg_system_success_rate: "故障期间平均系统成功率"
|
|
86
|
+
suggested_severity: "按规则计算出的建议故障级别"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 7. 模型回答要求
|
|
90
|
+
|
|
91
|
+
当用户要求判断故障级别时,模型应:
|
|
92
|
+
|
|
93
|
+
1. 明确单位分类是大型、中型还是小型。
|
|
94
|
+
2. 获取或询问异常交易笔数和异常持续时间。
|
|
95
|
+
3. 按“异常影响或异常持续时间满足其一即可定级”的规则判断。
|
|
96
|
+
4. 若多个条件命中不同级别,按最高级别输出。
|
|
97
|
+
5. 同时给出账务调整时限和是否可能触发监管上报参考场景。
|
|
98
|
+
6. 不得仅凭主观描述定级,缺少关键数据时应说明需要补充。
|
|
99
|
+
|
|
100
|
+
## 8. 检索提示
|
|
101
|
+
|
|
102
|
+
用户可能这样提问:
|
|
103
|
+
|
|
104
|
+
1. “异常交易 3 万笔算什么故障?”
|
|
105
|
+
2. “大型单位异常持续 15 分钟是什么级别?”
|
|
106
|
+
3. “一般故障要多久完成账务调整?”
|
|
107
|
+
4. “严重故障的判断标准是什么?”
|
|
108
|
+
5. “影响超过 10 万笔是否需要上报?”
|
|
109
|
+
|
|
110
|
+
## 9. 来源依据
|
|
111
|
+
|
|
112
|
+
本条目基于《网络支付清算平台联合运维运行实践指引V1.0》第 `5.3 运行故障定级` 和第 `5.4 故障善后处置` 归纳整理。
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# 联合运维知识库建立规范
|
|
2
|
+
|
|
3
|
+
## 1. 建设目标
|
|
4
|
+
|
|
5
|
+
联合运维知识库用于支撑运维智能助手在一期阶段完成“只读问答 + 查询类 Function Call”的能力建设。知识库应帮助系统准确识别用户问题所属的业务模块、运行场景、风险等级、处置策略、可用查询能力和引用依据。
|
|
6
|
+
|
|
7
|
+
一期知识库的核心目标如下:
|
|
8
|
+
|
|
9
|
+
1. 支持 RAG 检索识别业务场景和业务模块。
|
|
10
|
+
2. 支持大模型基于权威资料回答运维制度、指标阈值、处置策略、故障定级等问题。
|
|
11
|
+
3. 支持大模型理解可用的查询类 Function Call,但不直接执行变更类动作。
|
|
12
|
+
4. 支持检索结果可追溯到原始文档、章节和版本。
|
|
13
|
+
5. 支持后续扩展到诊断类、操作类和审批类能力。
|
|
14
|
+
|
|
15
|
+
## 2. 文档分类
|
|
16
|
+
|
|
17
|
+
知识库文档按内容类型分为以下几类:
|
|
18
|
+
|
|
19
|
+
| 类型 | 编码前缀 | 说明 | 示例 |
|
|
20
|
+
| --- | --- | --- | --- |
|
|
21
|
+
| 业务模块 | `biz` | 描述业务范围、业务链路、参与方、上下游依赖 | 快捷支付、退款、付款 |
|
|
22
|
+
| 运行场景 | `scenario` | 描述生产运行风险、业务异常、关闭渠道、恢复等场景 | 成功率下降、耗时升高 |
|
|
23
|
+
| 处置策略 | `sop` | 描述不同角色在不同场景下应采取的动作 | 异常方排查、影响方降流 |
|
|
24
|
+
| 指标规则 | `metric` | 描述指标定义、阈值、计算口径 | 系统成功率、平均耗时 |
|
|
25
|
+
| 故障定级 | `severity` | 描述故障等级、触发条件、善后要求 | 轻微、一般、严重 |
|
|
26
|
+
| 变更管理 | `change` | 描述生产变更评估、通知、异常处置、质量评价 | 变更影响评估 |
|
|
27
|
+
| 函数说明 | `function` | 描述可调用函数的用途、参数、权限、返回值 | 查询告警、查询指标 |
|
|
28
|
+
| 评价规则 | `evaluation` | 描述周期评价对象、周期、指标、权重和定级 | 周/月/年评价 |
|
|
29
|
+
|
|
30
|
+
## 3. 单篇知识文档格式
|
|
31
|
+
|
|
32
|
+
每个知识条目建议使用 Markdown 文件保存,并使用 YAML Front Matter 描述元数据。正文结构应稳定,便于切分、检索和展示。
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
---
|
|
36
|
+
kb_id: "scenario-netunion-runtime-risk-v1"
|
|
37
|
+
title: "网络支付清算平台生产运行风险场景"
|
|
38
|
+
doc_type: "scenario"
|
|
39
|
+
domain: "联合运维"
|
|
40
|
+
business_modules: ["签约", "解约", "快捷支付", "付款", "退款", "代收", "网关支付"]
|
|
41
|
+
source_doc: "网络支付清算平台联合运维运行实践指引V1.0.md"
|
|
42
|
+
source_version: "V1.0"
|
|
43
|
+
source_section: "5.2.1 存在运行风险"
|
|
44
|
+
effective_date: ""
|
|
45
|
+
owner: "联合运维知识库"
|
|
46
|
+
confidentiality: "内部"
|
|
47
|
+
risk_level: "low"
|
|
48
|
+
applicable_roles: ["网联平台", "异常方", "影响方", "成员单位"]
|
|
49
|
+
tags: ["生产运行", "风险", "系统成功率", "平均耗时", "带宽"]
|
|
50
|
+
status: "active"
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
# 标题
|
|
54
|
+
|
|
55
|
+
## 1. 适用范围
|
|
56
|
+
|
|
57
|
+
## 2. 触发条件
|
|
58
|
+
|
|
59
|
+
## 3. 处置策略
|
|
60
|
+
|
|
61
|
+
## 4. 关联指标
|
|
62
|
+
|
|
63
|
+
## 5. 关联函数
|
|
64
|
+
|
|
65
|
+
## 6. 检索提示
|
|
66
|
+
|
|
67
|
+
## 7. 来源依据
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 4. 元数据规范
|
|
71
|
+
|
|
72
|
+
| 字段 | 必填 | 说明 | 示例 |
|
|
73
|
+
| --- | --- | --- | --- |
|
|
74
|
+
| `kb_id` | 是 | 全局唯一 ID,建议使用英文、数字和短横线 | `severity-netunion-runtime-v1` |
|
|
75
|
+
| `title` | 是 | 知识条目标题 | `运行故障定级规则` |
|
|
76
|
+
| `doc_type` | 是 | 文档分类 | `severity` |
|
|
77
|
+
| `domain` | 是 | 所属领域 | `联合运维` |
|
|
78
|
+
| `business_modules` | 是 | 适用业务模块,可为空数组但字段必须存在 | `["快捷支付", "退款"]` |
|
|
79
|
+
| `source_doc` | 是 | 来源文档文件名 | `网络支付清算平台联合运维运行实践指引V1.0.md` |
|
|
80
|
+
| `source_version` | 是 | 来源版本 | `V1.0` |
|
|
81
|
+
| `source_section` | 是 | 来源章节 | `5.3 运行故障定级` |
|
|
82
|
+
| `effective_date` | 否 | 生效日期,未知可留空 | `2026-01-01` |
|
|
83
|
+
| `owner` | 是 | 维护责任方 | `联合运维知识库` |
|
|
84
|
+
| `confidentiality` | 是 | 密级 | `内部` |
|
|
85
|
+
| `risk_level` | 是 | 知识对应的操作风险 | `low` |
|
|
86
|
+
| `applicable_roles` | 是 | 适用角色 | `["异常方", "影响方"]` |
|
|
87
|
+
| `tags` | 是 | 检索标签 | `["故障", "定级"]` |
|
|
88
|
+
| `status` | 是 | 状态 | `active` |
|
|
89
|
+
|
|
90
|
+
`risk_level` 建议枚举:
|
|
91
|
+
|
|
92
|
+
| 值 | 含义 | 一期处理策略 |
|
|
93
|
+
| --- | --- | --- |
|
|
94
|
+
| `low` | 查询、解释、制度说明 | 可直接回答或调用只读函数 |
|
|
95
|
+
| `medium` | 诊断建议、影响判断 | 可回答,可建议查询,不自动变更 |
|
|
96
|
+
| `high` | 涉及降流、关停、重启、扩容、回滚 | 一期只给建议,不执行 |
|
|
97
|
+
| `critical` | 涉及生产高危或不可逆动作 | 必须转人工审批 |
|
|
98
|
+
|
|
99
|
+
## 5. 正文内容规范
|
|
100
|
+
|
|
101
|
+
### 5.1 适用范围
|
|
102
|
+
|
|
103
|
+
说明该知识条目适用于哪些业务、系统、角色和场景。范围要明确,避免出现“所有情况均适用”这类模糊表述。
|
|
104
|
+
|
|
105
|
+
### 5.2 触发条件
|
|
106
|
+
|
|
107
|
+
凡是涉及阈值、时间、比例、数量的内容,必须结构化表达。建议使用表格。
|
|
108
|
+
|
|
109
|
+
示例:
|
|
110
|
+
|
|
111
|
+
| 指标 | 大型单位 | 中型单位 | 小型单位 | 持续时间 | 是否决策指标 |
|
|
112
|
+
| --- | --- | --- | --- | --- | --- |
|
|
113
|
+
| 平均系统成功率 | `<99.99% 且系统失败笔数 >100` | `<99.99% 且系统失败笔数 >50` | `<99.99% 且系统失败笔数 >10` | `5min` | 是 |
|
|
114
|
+
|
|
115
|
+
### 5.3 处置策略
|
|
116
|
+
|
|
117
|
+
处置策略必须按角色拆分,至少区分:
|
|
118
|
+
|
|
119
|
+
1. 平台方。
|
|
120
|
+
2. 异常方。
|
|
121
|
+
3. 影响方。
|
|
122
|
+
4. 变更发起方。
|
|
123
|
+
5. 变更影响方。
|
|
124
|
+
|
|
125
|
+
动作应使用明确动词,例如“通知”“排查”“同步”“降流”“暂停发送”“灰度恢复”。涉及高风险动作时,必须标记“需人工确认”。
|
|
126
|
+
|
|
127
|
+
### 5.4 关联指标
|
|
128
|
+
|
|
129
|
+
指标必须引用统一指标口径。指标定义应尽量沉淀为独立 `metric` 条目,业务条目中只引用。
|
|
130
|
+
|
|
131
|
+
常见指标包括:
|
|
132
|
+
|
|
133
|
+
1. 系统请求数量。
|
|
134
|
+
2. 系统失败数量。
|
|
135
|
+
3. 业务失败数量。
|
|
136
|
+
4. 系统成功率。
|
|
137
|
+
5. 业务成功率。
|
|
138
|
+
6. 平均耗时。
|
|
139
|
+
7. 正常服务时间。
|
|
140
|
+
8. 异常持续时间。
|
|
141
|
+
|
|
142
|
+
### 5.5 关联函数
|
|
143
|
+
|
|
144
|
+
一期只登记查询类函数。函数说明可以进入知识库,但执行权限由 Function Call 层控制。
|
|
145
|
+
|
|
146
|
+
函数说明建议格式:
|
|
147
|
+
|
|
148
|
+
```yaml
|
|
149
|
+
function_name: "query_runtime_metrics"
|
|
150
|
+
display_name: "查询运行指标"
|
|
151
|
+
function_type: "read"
|
|
152
|
+
description: "查询指定业务、机构、时间窗口内的系统成功率、业务成功率、平均耗时和交易量。"
|
|
153
|
+
risk_level: "low"
|
|
154
|
+
requires_confirmation: false
|
|
155
|
+
required_permissions: ["metrics:read"]
|
|
156
|
+
input_schema:
|
|
157
|
+
business_module: "业务模块,例如快捷支付、退款"
|
|
158
|
+
org_type: "单位分类,例如大型单位、中型单位、小型单位"
|
|
159
|
+
time_range: "查询时间范围"
|
|
160
|
+
output_schema:
|
|
161
|
+
system_success_rate: "系统成功率"
|
|
162
|
+
business_success_rate: "业务成功率"
|
|
163
|
+
avg_latency_ms: "平均耗时"
|
|
164
|
+
request_count: "系统请求数量"
|
|
165
|
+
failed_count: "系统失败数量"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 5.6 检索提示
|
|
169
|
+
|
|
170
|
+
为提升 RAG 命中率,每篇知识条目应维护自然语言检索提示,包括用户可能的问法。
|
|
171
|
+
|
|
172
|
+
示例:
|
|
173
|
+
|
|
174
|
+
1. “系统成功率低于多少算运行风险?”
|
|
175
|
+
2. “平均耗时超过 2 秒要怎么处理?”
|
|
176
|
+
3. “大型单位异常交易多少笔需要升级?”
|
|
177
|
+
|
|
178
|
+
### 5.7 来源依据
|
|
179
|
+
|
|
180
|
+
必须记录来源文档、版本和章节。若为人工总结,应标明“基于来源章节归纳”,避免将推理内容伪装成原文。
|
|
181
|
+
|
|
182
|
+
## 6. 内容切分规范
|
|
183
|
+
|
|
184
|
+
为了兼顾召回准确性和上下文完整性,建议按“一个知识点一条文档”的方式切分。
|
|
185
|
+
|
|
186
|
+
切分原则:
|
|
187
|
+
|
|
188
|
+
1. 一个场景一条,例如“存在运行风险”“出现业务异常-联合处置”“出现业务异常-关闭渠道”。
|
|
189
|
+
2. 一个规则一条,例如“运行故障定级”“故障善后处置”。
|
|
190
|
+
3. 一个函数一条,例如“查询运行指标函数说明”。
|
|
191
|
+
4. 单条正文建议控制在 800 到 1500 个中文字符,复杂表格类条目可适当放宽。
|
|
192
|
+
5. 不要把整份制度原文作为一个向量文档直接入库。
|
|
193
|
+
6. 表格必须保留表头,避免阈值脱离适用对象。
|
|
194
|
+
7. 涉及“或”“且”“大于等于”“小于”等逻辑关系时,必须保留原始逻辑。
|
|
195
|
+
|
|
196
|
+
## 7. 命名规范
|
|
197
|
+
|
|
198
|
+
文件名建议格式:
|
|
199
|
+
|
|
200
|
+
```text
|
|
201
|
+
{doc_type}-{domain_or_system}-{topic}-v{version}.md
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
示例:
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
scenario-netunion-runtime-risk-v1.md
|
|
208
|
+
severity-netunion-runtime-classification-v1.md
|
|
209
|
+
function-netunion-query-runtime-metrics-v1.md
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
中文标题可以放在 `title` 字段中,文件名建议使用英文,便于程序处理和跨平台同步。
|
|
213
|
+
|
|
214
|
+
## 8. RAG 入库字段建议
|
|
215
|
+
|
|
216
|
+
入库时建议至少写入以下字段:
|
|
217
|
+
|
|
218
|
+
| 字段 | 来源 | 用途 |
|
|
219
|
+
| --- | --- | --- |
|
|
220
|
+
| `content` | Markdown 正文 | 向量检索 |
|
|
221
|
+
| `title` | Front Matter | 展示和关键词检索 |
|
|
222
|
+
| `doc_type` | Front Matter | 检索过滤 |
|
|
223
|
+
| `business_modules` | Front Matter | 业务模块过滤 |
|
|
224
|
+
| `tags` | Front Matter | 关键词召回 |
|
|
225
|
+
| `source_doc` | Front Matter | 溯源 |
|
|
226
|
+
| `source_section` | Front Matter | 溯源 |
|
|
227
|
+
| `risk_level` | Front Matter | 工具调用安全控制 |
|
|
228
|
+
| `applicable_roles` | Front Matter | 角色匹配 |
|
|
229
|
+
| `status` | Front Matter | 过滤废弃条目 |
|
|
230
|
+
|
|
231
|
+
## 9. 质量校验规范
|
|
232
|
+
|
|
233
|
+
每条知识入库前应检查:
|
|
234
|
+
|
|
235
|
+
1. 是否有唯一 `kb_id`。
|
|
236
|
+
2. 是否能追溯到来源文档和章节。
|
|
237
|
+
3. 是否包含适用范围。
|
|
238
|
+
4. 阈值是否保留单位、比较符和持续时间。
|
|
239
|
+
5. 处置策略是否按角色拆分。
|
|
240
|
+
6. 是否标注风险等级。
|
|
241
|
+
7. 是否存在过期或冲突内容。
|
|
242
|
+
8. 是否包含检索提示。
|
|
243
|
+
9. 是否避免把高风险操作描述成可自动执行。
|
|
244
|
+
10. 是否与已有知识条目重复或冲突。
|
|
245
|
+
|
|
246
|
+
## 10. 一期推荐知识库目录
|
|
247
|
+
|
|
248
|
+
```text
|
|
249
|
+
trainingDocs/
|
|
250
|
+
knowledgeBase/
|
|
251
|
+
联合运维知识库建立规范.md
|
|
252
|
+
samples/
|
|
253
|
+
scenario-netunion-runtime-risk-v1.md
|
|
254
|
+
scenario-netunion-business-exception-joint-handling-v1.md
|
|
255
|
+
scenario-netunion-business-exception-channel-close-v1.md
|
|
256
|
+
severity-netunion-runtime-classification-v1.md
|
|
257
|
+
metric-netunion-runtime-indicators-v1.md
|
|
258
|
+
function-netunion-query-runtime-metrics-v1.md
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
一期建议优先沉淀以下条目:
|
|
262
|
+
|
|
263
|
+
1. 业务范围与单位分类。
|
|
264
|
+
2. 生产运行风险场景。
|
|
265
|
+
3. 业务异常联合处置场景。
|
|
266
|
+
4. 业务异常关闭渠道场景。
|
|
267
|
+
5. 处置升级策略。
|
|
268
|
+
6. 恢复策略。
|
|
269
|
+
7. 运行故障定级。
|
|
270
|
+
8. 故障善后处置。
|
|
271
|
+
9. 运行指标定义。
|
|
272
|
+
10. 查询类函数说明。
|
package/main.py
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""
|
|
2
|
+
GLM 运维助手 - 入口文件
|
|
3
|
+
运行方式:
|
|
4
|
+
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
# 将项目根目录加入 sys.path,确保无论从哪里启动都能找到 src 包
|
|
11
|
+
PROJECT_ROOT = Path(__file__).parent.resolve()
|
|
12
|
+
if str(PROJECT_ROOT) not in sys.path:
|
|
13
|
+
sys.path.insert(0, str(PROJECT_ROOT))
|
|
14
|
+
|
|
15
|
+
from fastapi import FastAPI
|
|
16
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
17
|
+
from src.api.routes import router
|
|
18
|
+
|
|
19
|
+
app = FastAPI(
|
|
20
|
+
title="OpsAssistant",
|
|
21
|
+
description="运维平台运行表现智能助手 - 基于 GLM 大模型",
|
|
22
|
+
version="1.0.0",
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
app.add_middleware(
|
|
26
|
+
CORSMiddleware,
|
|
27
|
+
allow_origins=["*"],
|
|
28
|
+
allow_credentials=True,
|
|
29
|
+
allow_methods=["*"],
|
|
30
|
+
allow_headers=["*"],
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
app.include_router(router, prefix="/api/v1")
|
|
34
|
+
|
|
35
|
+
@app.get("/")
|
|
36
|
+
def root():
|
|
37
|
+
return {
|
|
38
|
+
"service": "OpsAssistant",
|
|
39
|
+
"version": "1.0.0",
|
|
40
|
+
"docs": "/docs",
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
if __name__ == "__main__":
|
|
45
|
+
import uvicorn
|
|
46
|
+
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)
|