工具交互
在用户进行工具交互前,需要先执行完成前置操作,之后可以使用问答的方式对GaussMaster服务进行提问,后台接口为/v1/api/app/intelligent-interaction。此接口参数“mode”的值必须为“tool_interaction”,即当前模式为工具交互,API详情请参考API: /v1/api/app/intelligent-interaction。工具交互默认支持多轮对话,对话记录长度为1轮。用户可以通过参数"history_len"指定对话记录的长度,可支持的对话记录长度为[1-3],即大语言模型最多可以记住3轮对话历史。
工具交互的流程图如下图1所示:
图 1 工具交互流程图

工具交互约束
- 用户可以使用华为云提供的pangu-38b开源模型工具,识别准确率为90%。也可以指定其他开源模型,通过接口的形式进行调用,使用其他开源模型做工具交互时,识别准确率无法保证。
- 智能运维中工具交互支持参数追问,参数不全时可基于历史内容进行补全。
- DBMind/openGauss组件不可用/升级等场景下,GaussMaster服务会受到影响。
- GaussMaster智能运维不提供前台页面,且目前只支持中文问答。
当前内部已支持的DBmind工具(API)共22个(其中告警查询需要用到DBMind的两个API),如下表:
表 1 API列表
ID | API接口 | 参数 | 关键信息 | 对话示例 |
---|
1 | /v1/api/status/data-directory | - instance:str类型,必要参数,需要查询的数据库的数据节点的ip和port | 数据库实例,数据库数据目录状态。 | 查询10.90.56.xxx:xxx的数据目录状态。 |
2 | /v1/api/app/workload-collection?data_source=dbe_perf.statement_history | - start_time:str类型,必要参数,通过SQL语句的开始时间对SQL语句进行筛选,格式为%Y-%m-%d %H:%M:%S - end_time:str类型,必要参数,通过SQL语句的结束时间对SQL语句进行筛选,格式为%Y-%m-%d %H:%M:%S - database:str类型,非必要参数,通过SQL语句运行的数据库名对SQL语句进行筛选,未指定默认为None - schema: str类型,非必要参数,通过SQL语句运行的数据库模式对SQL语句进行筛选,未指定默认为None | 开始时间、结束时间、数据库名(非必须)、 schema(非必须)。 | 查询test_db数据库中上午10点到11点的sql列表。 |
3 | /v1/api/app/workload-collection?data_source=pg_stat_activity | - database:str类型,非必要参数,通过SQL语句运行的数据库名对SQL语句进行筛选,未指定默认为None - schema: str类型,非必要参数,通过SQL语句运行的数据库模式对SQL语句进行筛选,未指定默认为None | 数据库名,正在执行的SQL。 | 查询test_db数据库中当前正在执行的SQL。 |
4 | /v1/api/summary/sql/top | None | 执行频繁的SQL。 | 查询top SQL。 |
5 | /v1/api/summary/sql/locking | None | 锁等待、阻塞、SQL。 | 查询当前被阻塞的SQL。 |
6 | /v1/api/summary/alarms和/v1/api/summary/cluster-diagnosis | - start_time:str类型,必要参数,用来筛选告警的时间范围的开始时间,格式为%Y-%m-%d %H:%M:%S - end_time:str类型,必要参数,用来筛选告警的时间范围的结束时间,格式为%Y-%m-%d %H:%M:%S | 开始时间、结束时间、查询告警。 | 查询今天10点到12点的告警。 |
7 | /v1/api/agents | None | 查询纳管集群信息。 | 查询当前纳管的所有集群信息。 |
8 | /v1/api/status/instances | None | 数据库实例状态。 | 查询当前数据库实例状态。 |
9 | /v1/api/summary/database-list | None | 查询数据库列表。 | 查询当前实例下所有的数据库列表。 |
10 | /v1/api/summary/knob-recommendation/snapshots | None | 指标快照。 | 查询当前指标快照。 |
11 | /v1/api/summary/knob-recommendation/details | None | 参数推荐详情。 | 查询参数推荐详情。 |
12 | /v1/api/summary/knob-recommendation/warnings | None | 不合理或告警的指标配置。 | 查询当前不合理的指标配置。 |
13 | /v1/api/status/overview | None | 数据库概览信息。 | 查询数据库概览。 |
14 | /v1/api/summary/metrics/pg_settings_setting | - name: str类型,必要参数,需要查询的GUC参数的名称 | GUC参数名。 | 查询GUC参数wdr_snapshot_retention_days的值。 |
15 | /v1/api/summary/metrics/{name} | - name: str类型,必要参数,需要查询的GUC参数的名称 | 指标名、开始时间、结束时间。 | 查询指标os_mem_usage在今天上午8点到9点的数据。 |
16 | /v1/api/app/slow-sql-rca 说明:为了提高工具交互的可用性,简化了原始DBMind的慢SQL诊断接口的入参,与锁事件和等待事件相关的根因,盘溢出根因暂不支持。 | - query: str类型,必要参数,需要进行SQL根因分析的查询语句SQL - db_name: str类型,必要参数,需要进行SQL根因分析的查询语句SQL所在的数据库名 | sql语句、数据库名、慢SQL根因分析。 | 数据库test_db中有一条慢SQL:select * from t1 where id = 10000;请帮我进行根因分析。 |
17 | /v1/api/app/cluster-diagnosis | - start_time:str类型,必要参数,进行集群诊断的时间点,格式为%Y-%m-%d %H:%M:%S | 集群诊断、时间、实例ip地址 | 请帮忙对今天12点集群10.90.56.xxx的状态进行诊断。 |
18 | /v1/api/app/metric-diagnosis-detail | - metric_name:str类型,必要参数,指标名 - alarm_cause:str类型,必要参数,告警原因 - start_time:str类型,必要参数,开始时间,格式为%Y-%m-%d %H:%M:%S - end_time:str类型,必要参数,结束时间,格式为%Y-%m-%d %H:%M:%S - metric_filter:str类型,非必要参数,指标过滤条件,要求格式为:key1=value1,key2=value2 | 指标诊断、指标名、告警原因、开始时间、结束时间、指标过滤条件(非必需)。 | 请帮忙诊断指标xlog_margin在上午8点到10点,发生告警high_xlog_count的原因。 |
19 | /v1/api/app/memory-check | - latest_hours:int类型,非必要参数,对内存进行趋势预测的预测时长,默认值为4小时 | 内存情况,诊断时长。 | 请对最近1小时的内存情况进行分析。 |
20 | /v1/api/app/index-recommendation | - sql:str类型,必要参数,需要进行索引推荐的查询语句SQL - db_name:str类型,必要参数,需要进行索引推荐的查询语句SQL所在的数据库名 | sql语句,数据库名。 | 请对test_db数据库中sql语句select * from t1 where id = 1000;进行索引推荐。 |
21 | /v1/api/app/risk-analysis/{metric} | - metric:str类型,必要参数,用来指定需要被预测的指标名 - warning_hours:int类型,必要参数,需要趋势预测的未来的长度,单位:小时 | 风险分析或指标预测、指标名、预测时长。 | 对指标os_mem_usage未来2小时的状态进行预测。 |
工具交互参考示例
工具交互调用API详情如下:
curl -X 'POST' 'https://x.x.x.x:x/v1/api/app/intelligent-interaction' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{
"query":"数据库test_db中有条sql语句select* from t1 where id = 10000;请帮我进行一下索引推荐",
"mode":"tool_interaction",
"user_id":"user123",
"session_id":"session123",
"history_len ":1
}' --cacert /path/xxx.crt --key /path/xxx.key --cert /path/xxx.crt --pass "***"
工具交互的结果以流式返回,结果中包含多行,每行以“data:”开头,以“\n\n”结尾:
data:{"data":[{"content":"工具匹配中...","type":"progress"}],"success":true}\n\n
data:{"data":[{"content":"提取参数中...","type":"progress"}],"success":true}\n\n
data:{"data":[{"content":"工具调用中...","type":"progress"}],"success":true}\n\n
data:{"data":[{"color":"black","content":"推荐的索引如下表所示:","type":"str"},{"content":{"headers":["索引描述","预计占用","预计提升"],"rows":[["CREATEINDEX idx_t1_id ON public.t1(id);","2.49MB","99.91%"]]},"type":"table"}],"success":true}\n\n
data:{"data":[{"content":"DONE","type":"progress"}],"success":true}\n\n
说明:
在工具交互的过程中,会在日志中记录各阶段的耗时,包括如下4个阶段:
- 推理工具。
- 推理参数。
- 调用工具。
- 调用大语言模型。
日志级别为INFO,用户可以根据需要查看各阶段的耗时。
openGauss 2025-06-29 22:42:49