华为云用户手册

  • 条件(Condition) 条件(Condition)是自定义SCP生效的特定条件,包括条件键和运算符。 条件键表示SCP语句的Condition元素中的键值。根据适用范围,分为全局级条件键和服务级条件键。 全局级条件键(前缀为g:)适用于所有操作,在鉴权过程中,云服务不需要提供用户身份信息,系统将自动获取并鉴权。详情请参见:全局条件键。 服务级条件键(前缀为服务缩写,如iam:)仅适用于对应服务的操作,详情请参见表4。 单值/多值表示API调用时请求中与条件关联的值数。单值条件键在API调用时的请求中最多包含一个值,多值条件键在API调用时请求可以包含多个值。例如:g:SourceVpce是单值条件键,表示仅允许通过某个 VPC终端节点 发起请求访问某资源,一个请求最多包含一个VPC终端节点ID值。g:TagKeys是多值条件键,表示请求中携带的所有标签的key组成的列表,当用户在调用API请求时传入标签可以传入多个值。 运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,SCP才能生效。支持的运算符请参见:运算符。 IAM 定义了以下可以在SCP的Condition元素中使用的条件键,您可以使用这些条件键进一步细化SCP语句应用的条件。 表4 IAM支持的服务级条件键 服务级条件键 类型 单值/多值 说明 iam:PolicyURN string 单值 按照身份策略的URN筛选访问权限。 iam:ServicePrincipal string 单值 按照服务关联委托传递的云服务对应的服务标识筛选访问权限。
  • 条件(Condition) 条件(Condition)是SCP生效的特定条件,包括条件键和运算符。 条件键表示SCP语句的Condition元素中的键值。根据适用范围,分为全局级条件键和服务级条件键。 全局级条件键(前缀为g:)适用于所有操作,在鉴权过程中,云服务不需要提供用户身份信息,系统将自动获取并鉴权。详情请参见:全局条件键。 服务级条件键(前缀为服务缩写,如smn:)仅适用于对应服务的操作,详情请参见表4。 单值/多值表示API调用时请求中与条件关联的值数。单值条件键在API调用时的请求中最多包含一个值,多值条件键在API调用时请求可以包含多个值。例如:g:SourceVpce是单值条件键,表示仅允许通过某个VPC终端节点发起请求访问某资源,一个请求最多包含一个VPC终端节点ID值。g:TagKeys是多值条件键,表示请求中携带的所有标签的key组成的列表,当用户在调用API请求时传入标签可以传入多个值。 运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,SCP才能生效。支持的运算符请参见:运算符。 SMN 定义了以下可以在SCP的Condition元素中使用的条件键,您可以使用这些条件键进一步细化SCP语句应用的条件。 表4 SMN支持的服务级条件键 服务级条件键 类型 单值/多值 说明 smn:TargetOrgPath string 单值 主题策略授权的组织路径。 smn:TargetOrgId string 单值 主题策略授权的组织ID。 smn:TargetAccountId string 单值 主题策略授权的账号ID。 smn:Protocol string 单值 订阅终端协议。 smn:Endpoint string 单值 订阅终端地址。
  • 条件(Condition) 条件(Condition)是SCP生效的特定条件,包括条件键和运算符。 条件键表示SCP语句的Condition元素中的键值。根据适用范围,分为全局级条件键和服务级条件键。 全局级条件键(前缀为g:)适用于所有操作,在鉴权过程中,云服务不需要提供用户身份信息,系统将自动获取并鉴权。详情请参见:请参考全局条件键。 服务级条件键(前缀通常为服务缩写,如pca:)仅适用于对应服务的操作,详情请参见表 PCA支持的服务级条件键。 单值/多值表示API调用时请求中与条件关联的值数。单值条件键在API调用时的请求中最多包含一个值,多值条件键在API调用时请求可以包含多个值。例如:g:SourceVpce是单值条件键,表示仅允许通过某个VPC终端节点发起请求访问某资源,一个请求最多包含一个VPC终端节点ID值。g:TagKeys是多值条件键,表示请求中携带的所有标签的key组成的列表,当用户在调用API请求时传入标签可以传入多个值。 运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,SCP才能生效。支持的运算符请参见:运算符。 PCA定义了以下可以在SCP的Condition元素中使用的条件键,您可以使用这些条件键进一步细化SCP语句应用的条件。 表4 PCA支持的服务级条件键 服务级条件键 类型 单值/多值 说明 pca:CommonName string 单值 根据请求参数中的证书通用名称过滤访问。
  • 通过离线文档方式上传/更新/删除交付件 在“交付件管理”页面的交付件列表中,在无文档的交付件所在行的“操作”列单击“创建文档”。 在“上传文档”对话框,选择“交付方式”为“离线文档”,单击“添加文件”将本地已准备好的文档进行上传(只能上传ZIP、RAR、DOCX、DOC、XLS、XLSX格式的文件,且文件大小不能超过50MB)。 单击“确定”,上传离线文档成功。 (可选)如需更新离线文档,具体操作如下: 返回“交付件管理”页面的交付件列表中,在“交付方式”为“离线文档”的交付件所在行的“操作”列单击“更新文档”。 在“更新文档”对话框中,鼠标移至已有文档所在行并单击。 在“删除文件”对话框,单击“确认”,删除旧离线文档。 单击“添加文件”,将本地已准备好的新文档进行上传。 单击“确定”,更新离线文档成功。 (可选)如需删除离线文档,具体操作如下: 返回“交付件管理”页面的交付件列表中,在“交付方式”为“离线文档”的交付件所在行的“操作”列单击“删除文档”。 在“删除文件”对话框,单击“确认”,即可删除不需要的离线文档。
  • 数据库兼容模式 场景:在数据库中查询空串结果不一致。 database1(TD兼容模式): 1 2 3 4 5 td=# select '' is null; isnull -------- f (1 row) database2(ORA兼容模式): 1 2 3 4 5 ora=# select '' is null; isnull -------- t (1 row) 原因分析: 查询空串结果不同是由于不同数据库兼容模式下空串与null语法有差异导致。 目前, GaussDB (DWS)支持三种数据库兼容模式:Oracle、TD和MySql,不同兼容模式下语法和行为存在差异,兼容性差异说明可参考Oracle、Teradata和MySQL语法兼容性差异。 不同兼容模式下的database表现出不同的兼容性行为属于正常现象。可以通过查看select datname, datcompatibility from pg_database;确认数据库兼容性设置是否相同。 解决方法: 这种场景下只能将两个database的兼容性模式设置为一致的才能解决。Database的DBCOMPATIBILITY属性不支持ALTER,只能通过新建数据库的方法,在创建数据库时指定相同的DBCOMPATIBILITY属性解决。
  • 数据库兼容性行为配置项behavior_compat_options设置不同 场景:add_months函数计算结果不一致。 database1: 1 2 3 4 5 SELECT add_months('2018-02-28',3) from dual; add_months --------------------- 2018-05-28 00:00:00 (1 row) database2: 1 2 3 4 5 SELECT add_months('2018-02-28',3) from dual; add_months --------------------- 2018-05-31 00:00:00 (1 row) 原因分析: 数据库兼容性配置项behavior_compat_options不同会导致部分行为不同,该参数选项可参考behavior_compat_options中的相关选项描述。 此场景中behavior_compat_options配置项中的end_month_calculate参数控制add_months函数计算逻辑配置项。设置end_month_calculate配置项时,如果param1的日期(Day字段)为月末,并且param1的日期(Day字段)比result月份的月末日期比小,计算结果中的日期字段(Day字段)和result的月末日期保持一致。 解决方法: 需要将数据库中参数behavior_compat_options的兼容性配置项设置为一致。该参数类型为USERSET类型,可session级别设置或集群级修改。
  • 使用UN LOG GED表 场景: 使用unlogged表后,在集群重启后,关联查询结果集异常,查看unlogged表缺少部分数据。 原因分析: 如果设置max_query_retry_times为0,且在建表时指定UNLOGGED关键字,则创建的表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是非日志表在冲突、执行操作系统重启、强制重启、切断电源操作或异常关机后会被自动截断,会造成数据丢失的风险。非日志表中的内容也不会被复制到备服务器中。在非日志表中创建的索引也不会被自动记录。因此当集群发生异常重启(进程重启、节点故障、集群重启)时,会导致部分内存中的数据未及时落盘,造成部分数据丢失,从而导致结果集异常。 解决方法: unlogged表在集群异常情况下的安全性无法保证,一般不能作为业务表使用,更多的场景是作为临时表使用。当出现集群故障后,为了保证数据正常,需要重建unlogged表或将数据备份后重新导入数据库。
  • 自定义函数属性设置不合理 场景:自定义函数get_count()并调用该函数出现结果不一致场景。 1 2 3 4 5 6 7 8 9 10 11 CREATE FUNCTION get_count() returns int SHIPPABLE as $$ declare result int; begin result = (select count(*) from test); --test表是hash表 return result; end; $$ language plpgsql; 调用该函数。 1 2 3 4 5 6 7 8 9 10 11 SELECT get_count(); get_count ----------- 2106 (1 row) SELECT get_count() FROM t_src; get_count ----------- 1032 (1 row) 原因分析: 由于该函数指定了SHIPPABLE的函数属性,因此生成计划时该函数会下推到DN上执行,该函数下推到DN后,由于函数定义中的test表是hash表,因此每个DN上只有该表的一部分数据,所以select count(*) from test; 返回的结果不是test表全量数据的结果,而是每个DN上部分数据的结果,因此导致加上from表后函数返回预期发生变化。 解决方法: 以下两种方法任选其一即可(推荐第一种方法): 将函数改为不下推:ALTER FUNCTION get_count() not shippable; 将函数中用到的表改为复制表,这样每个DN上都是一份该表的全量数据,即使下推到DN执行,也能保证结果集符合预期。
  • 使用string_agg 场景:使用string_agg查询表employee,出现查询结果不一致。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 SELECT * FROM employee; empno | ename | job | mgr | hiredate | sal | comm | deptno -------+--------+---------+------+---------------------+-------+------+-------- 7654 | MARTIN | SALEMAN | 7698 | 2022-11-08 00:00:00 | 12000 | 1400 | 30 7566 | JONES | MANAGER | 7839 | 2022-11-08 00:00:00 | 32000 | 0 | 20 7499 | ALLEN | SALEMAN | 7698 | 2022-11-08 00:00:00 | 16000 | 300 | 30 (3 rows) SELECT count(*) FROM (select deptno, string_agg(ename, ',') from employee group by deptno) t1, (select deptno, string_agg(ename, ',') from employee group by deptno) t2 where t1.string_agg = t2.string_agg; count ------- 2 (1 row) SELECT count(*) FROM (select deptno, string_agg(ename, ',') from employee group by deptno) t1, (select deptno, string_agg(ename, ',') from employee group by deptno) t2 where t1.string_agg = t2.string_agg; count ------- 1 (1 row) 原因分析: String_agg函数的作用是将组内的数据合并成一行,但是如果某用户的用法是string_agg(ename, ',') ,结果集就是不稳定的,因为没有指定组合的顺序。例如,上述语句中,对于select deptno, string_agg(ename, ',') from employee group by deptno; 输出结果既可以是: 1 30 | ALLEN,MARTIN 也可能是: 1 30 |MARTIN,ALLEN 两个结果都是合理的,因此上述关联场景下,有可能出现t1这个subquery中的结果和t2这个subquery中的结果对于deptno=30时的输出结果不一致。 解决方法: String_agg中增加order by排序,保证按顺序拼接。 1 SELECT count(*) FROM (select deptno, string_agg(ename, ',' order by ename desc) from employee group by deptno) t1 ,(select deptno, string_agg(ename, ',' order by ename desc) from employee group by deptno) t2 where t1.string_agg = t2.string_agg;
  • 子查询limit 场景:子查询中使用limit,两次查询结果不一致。 1 2 3 4 5 6 7 8 9 10 11 SELECT * FROM (select a from test limit 1 ) order by 1; a --- 5 (1 row) SELECT * FROM (select a from test limit 1 ) order by 1; a --- 1 (1 row) 原因分析: 子查询中的limit会导致获取随机结果,从而最终查询结果为随机提取。 解决方法: 要保证最终查询结果的稳定,需避免在子查询中使用limit。
  • 窗口函数中使用排序后取部分结果 场景: 窗口函数row_number()中使用排序后查询表t3的c列,两次查询结果不同。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 SELECT * FROM t3 order by 1,2,3; a | b | c ---+---+--- 1 | 2 | 1 1 | 2 | 2 1 | 2 | 3 (3 rows) SELECT c,rn FROM (select c,row_number() over(order by a,b) as rn from t3) where rn = 1; c | rn ---+---- 1 | 1 (1 row) SELECT c,rn FROM (select c,row_number() over(order by a,b) as rn from t3) where rn = 1; c | rn ---+---- 3 | 1 (1 row) 原因分析: 如上所示,执行同一条语句:select c,rn from (select c,row_number() over(order by a,b) as rn from t3) where rn = 1; 两次查询结果不同,因为在窗口函数的排序列a、b上存在重复值1、2且重复值在c列上的值不同,就会导致每次按照a,b列排序结果取第一条时,所取的数据是随机的,造成结果集不一致。 解决方法: 该场景需要将取值列c列也加到排序中,使排序结果获取的第一条数据固定。 1 2 3 4 5 SELECT c,rn FROM (select c,row_number() over(order by a,b,c) as rn from t3) where rn = 1; c | rn ---+---- 1 | 1 (1 row)
  • 子视图/子查询中使用排序 场景: 创建表test和视图v后,子查询中使用排序查询表test,出现查询结果不一致。 1 2 3 4 5 6 CREATE TABLE test(a serial ,b int); INSERT INTO test(b) VALUES(1); INSERT INTO test(b) SELECT b FROM test; … INSERT INTO test(b) SELECT b FROM test; CREATE VIEW v as SELECT * FROM test ORDER BY a; 问题SQL: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 SELECT * FROM v limit 1; a | b ---+--- 3 | 1 (1 row) SELECT * FROM (select * from test order by a) limit 10; a | b ----+--- 14 | 1 (1 row) SELECT * FROM test order by a limit 10; a | b ---+--- 1 | 1 (1 row) 原因分析: 对于子视图和子查询中order by是无效的。 解决方法: 不建议在子视图和子查询中使用order by,若要保证结果有序,需在最外层查询中使用order by。
  • 查询分区边界 1 2 3 4 5 6 7 8 9 SELECT relname, partstrategy, boundaries FROM pg_partition where parentid=(select parentid from pg_partition where relname='my_table'); relname | partstrategy | boundaries -------------+--------------+------------ my_table | r | my_table_p1 | r | {600} my_table_p2 | r | {800} my_table_p3 | r | {950} my_table_p4 | r | {1000} (5 rows)
  • 查询数据在各DN分布 1 2 3 4 5 6 7 8 9 10 SELECT table_skewness('my_table'); table_skewness ------------------------------------ ("dn_6007_6008 ",3,50.000%) ("dn_6009_6010 ",2,33.333%) ("dn_6003_6004 ",1,16.667%) ("dn_6001_6002 ",0,0.000%) ("dn_6005_6006 ",0,0.000%) ("dn_6011_6012 ",0,0.000%) (6 rows)
  • 查询某一有数据分布DN上分区P1所对应的cudesc和delta表名称 1 2 3 4 5 6 EXECUTE DIRECT ON (dn_6003_6004) 'select a.relname from pg_class a, pg_partition b where (a.oid=b.reldeltarelid or a.oid=b.relcudescrelid) and b.relname=''my_table_p1'''; relname ---------------------- pg_delta_part_60317 pg_cudesc_part_60317 (2 rows)
  • 场景一:返回结果集很大 以行存表的Seq Scan和Index Scan为例: Seq Scan:按照表的记录的排列顺序从头到尾依次检索扫描,每次扫描要取到所有的记录。这也是最简单最基础的扫表方式,扫描的代价比较大。 Index Scan:对于指定的查询,先扫描一遍索引,从索引中找到符合要求的记录的位置(指针),再定位到表中具体的Page去获取,即先走索引,再读表数据。 因此,根据两种扫描方式的特点可知,多数情况下,Index Scan要比Seq Scan快。但是如果获取的结果集占所有数据的比重很大时(超过70%),这时Index Scan因为要先扫描索引再读表数据反而不如直接全表扫描的速度快。
  • 列转行 使用union all,将各科目(math、physics和literature)整合为一列,示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 SELECT * FROM ( SELECT name, 'math' AS subject, math AS score FROM students_info1 union all SELECT name, 'physics' AS subject, physics AS score FROM students_info1 union all SELECT name, 'literature' AS subject, literature AS score FROM students_info1 ) order by name; name | subject | score ------+------------+------- jack | math | 90 jack | physics | 95 jack | literature | 95 lily | math | 95 lily | physics | 80 lily | literature | 92 matu | math | 75 matu | physics | 90 matu | literature | 85 (9 rows)
  • 动态行转列 8.1.2及以上集群版本可使用GROUP_CONCAT生成列存语句。 1 2 3 4 5 6 7 8 9 10 SELECT group_concat(concat('sum(IF(subject = ''', subject, ''', score, 0)) AS "', name, '"'))FROM students_info; group_concat ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------ sum(IF(subject = 'literature', score, 0)) AS "jack",sum(IF(subject = 'literature', score, 0)) AS "lily",sum(IF(subject = 'literature', score, 0)) AS "matu",sum(IF(subject = 'math', score, 0)) AS "jack",sum(IF (subject = 'math', score, 0)) AS "lily",sum(IF(subject = 'math', score, 0)) AS "matu",sum(IF(subject = 'physics', score, 0)) AS "jack",sum(IF(subject = 'physics', score, 0)) AS "lily",sum(IF(subject = 'physics ', score, 0)) AS "matu" (1 row) 8.1.1及更低版本中可用LISTAGG生成列存语句。 1 2 3 4 5 6 7 8 SELECT listagg(concat('sum(case when subject = ''', subject, ''' then score else 0 end) AS "', subject, '"'),',') within GROUP(ORDER BY 1)FROM (select distinct subject from students_info); listagg ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- sum(case when subject = 'literature' then score else 0 end) AS "literature",sum(case when subject = 'physics' then score else 0 end) AS "physics",sum(case when subject = 'math' then score else 0 end) AS "math " (1 row) 再通过视图动态重建: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE OR REPLACE FUNCTION build_view() RETURNS VOID LANGUAGE plpgsql AS $$ DECLARE sql text; rec record; BEGIN sql := 'select LISTAGG( CONCAT( ''sum(case when subject = '''''', subject, '''''' then score else 0 end) AS "'', subject, ''"'' ) ,'','' ) within group(order by 1) from (select distinct subject from students_info);'; EXECUTE sql INTO rec; sql := 'drop view if exists get_score'; EXECUTE sql; sql := 'create view get_score as select name, ' || rec.LISTAGG || ' from students_info group by name'; EXECUTE sql; END$$; 执行重建: 1 CALL build_view(); 查询视图: 1 2 3 4 5 6 7 SELECT * FROM get_score; name | literature | physics | math ------+------------+---------+------ matu | 85 | 90 | 75 lily | 92 | 80 | 95 jack | 95 | 95 | 90 (3 rows)
  • 静态行转列 静态行转列需要手动指定每一列的列名,如果存在则取其对应值,否则将赋其默认值0。 1 2 3 4 5 6 7 8 9 10 SELECT name, sum(case when subject='math' then score else 0 end) as math, sum(case when subject='physics' then score else 0 end) as physics, sum(case when subject='literature' then score else 0 end) as literature FROM students_info GROUP BY name; name | math | physics | literature ------+------+---------+------------ matu | 75 | 90 | 85 lily | 95 | 80 | 92 jack | 90 | 95 | 95 (3 rows)
  • 场景介绍 以学生成绩为例: 老师会按照学科录入成绩,每科老师都会单独录入每个学生对应学科的成绩,而每位学生只关注自己各科的成绩。如果把老师录入数据作为原始表,那么学生查看自己的成绩就要用到行转列;如果让学生自己填写各科的成绩并汇总,然后老师去查自己学科所有学生的成绩,那就是列转行。 行转列与列转行的示意图如下: 图1 示意图 行转列 将多行数据转换成一行显示,或将一列数据转换成多列显示。 列转行 将一行数据转换成多行显示,或将多列数据转换成一列显示。
  • 示例表 创建行存表students_info并插入数据。 1 2 3 4 5 6 7 8 9 10 CREATE TABLE students_info(name varchar(20),subject varchar(100),score bigint) distribute by hash(name); INSERT INTO students_info VALUES('lily','math',95); INSERT INTO students_info VALUES('lily','physics',80); INSERT INTO students_info VALUES('lily','literature',92); INSERT INTO students_info VALUES('matu','math',75); INSERT INTO students_info VALUES('matu','physics',90); INSERT INTO students_info VALUES('matu','literature',85); INSERT INTO students_info VALUES('jack','math',90); INSERT INTO students_info VALUES('jack','physics',95); INSERT INTO students_info VALUES('jack','literature',95); 查看表students_info信息。 1 2 3 4 5 6 7 8 9 10 11 12 SELECT * FROM students_info; name | subject | score ------+------------+------- matu | math | 75 matu | physics | 90 matu | literature | 85 lily | math | 95 lily | physics | 80 lily | literature | 92 jack | math | 90 jack | physics | 95 jack | literature | 95 创建列存表students_info1并插入数据。 1 2 3 4 CREATE TABLE students_info1(name varchar(20), math bigint, physics bigint, literature bigint) with (orientation = column) distribute by hash(name); INSERT INTO students_info1 VALUES('lily',95,80,92); INSERT INTO students_info1 VALUES('matu',75,90,85); INSERT INTO students_info1 VALUES('jack',90,95,95); 查看表students_info1信息。 1 2 3 4 5 6 7 SELECT * FROM students_info1; name | math | physics | literature ------+------+---------+------------ matu | 75 | 90 | 85 lily | 95 | 80 | 92 jack | 90 | 95 | 95 (3 rows)
  • 为什么GaussDB(DWS)使用一段时间后执行SQL很慢? 数据库在使用一段时间后,随着业务的增加使得表数据增加,或者对表数据经常进行增、删、改之后,引发数据膨胀和统计信息不准造成性能下降。 建议对于频繁增、删、改的表,定期执行vacuum full和analyze操作。操作步骤如下: 默认每30000条数据收集100条做统计信息,当数据量大的时候,发现sql时快时慢,一般是执行计划发生了变化,统计信息的需要调整采样率。set default_statistics_target可以提高采样率,对优化器生成最优计划有所帮助。 重新执行analyze。详细信息请参见ANALYZE | ANALYSE。 若用户想要知道是否是磁盘碎片的问题影响了数据库的性能,可以使用以下函数进行查询: SELECT * FROM pgxc_get_stat_dirty_tables(30,100000); 父主题: 数据库性能
  • 操作步骤 在AI原生应用引擎工作台的左侧导航栏选择“资产中心”。 在“资产中心”页面可依次展开平台预置的AI应用、技能、大模型、数据集、提示语模板页签,可执行如表1所示的操作。 表1 AI应用广场支持的操作 分类 支持的操作 说明 AI应用 快速筛选 选择“AI应用”页签,在左侧“筛选”区域,进行不同维度的快速筛选、查看和搜索。 查看应用详情 单击应用卡片上的应用名称,进入应用详情页面,可查看应用的基础信息、应用组成、接口信息、套件介绍、原理介绍等信息。 收藏应用 通过如下两种方法,将自己关注或后续计划使用的应用收藏后,可便捷的在创建及管理Agent中对应用进行运行调试等操作。 方法一:鼠标光标移至应用卡片上,单击卡片右上角(单击可取消收藏)。 方法二:在查看应用详情的页面,单击右上角(单击可取消收藏)。 体验应用 鼠标光标移至应用卡片上单击“体验”,进入“应用体验”页面。 在“应用体验”页面,进行以下相关参数和请求体配置。 选择应用部署:无需配置,默认为平台预置的应用部署。 选择应用:无需配置,默认为当前选择的应用。 选择接口API:在下拉列表选择调试应用的接口API。 请求体:输入应用接口中的请求体内容。示例如下: { "query": "请详细说明AppStage平台有哪些大模型", "file_id": [] } 在“应用体验”页面右侧“API调测”区域,单击查看调测结果。 说明: 对话框中输入API调试语句也可进行调测。 单击右上角可清空历史调试语句。 大模型 快速筛选 选择“大模型”页签,在左侧“筛选”区域,进行不同维度的快速筛选。 查看大模型详情 单击模型卡片,进入模型详情页面,查看模型信息(模型类型、来源、发布者、上架状态、更新时间等)和模型介绍等。 收藏大模型 通过如下两种方法,将自己关注或后续计划使用的模型收藏后,可便捷的在模型训练、模型部署时使用。 方法一:鼠标光标移至模型卡片上,单击卡片右上角(单击可取消收藏)。 方法二:在查看模型详情的页面,单击右上角(单击可取消收藏)。 体验大模型 鼠标移至大模型卡片并单击“体验”,进入模型调测页面。 部署大模型 鼠标移至大模型卡片并单击“部署”,进入“创建推理服务”页面,参见创建及管理模型服务将模型部署为在线服务,对在线服务进行预测和调用。 调优大模型 鼠标移至大模型卡片并单击“调优”,进入“创建微调任务”页面,参见创建模型微调流水线调整大型语言模型的参数以适应特定任务。 设置鉴权 第三方的大模型需要设置鉴权信息,鼠标移至第三方大模型卡片单击“设置鉴权”,弹出“设置鉴权信息”对话框,在对话框中可根据提示链接跳转至第三方模型官网获取相应API Key。 如果未设置API Key,在“设置鉴权信息”对话框输入API Key,单击“保存”。 如果已设置API Key,在“设置鉴权信息”对话框单击“移除”可清除已存在的API Key;鼠标移至模型卡片再次单击“设置鉴权”,在“设置鉴权信息”对话框重新输入API Key,单击“保存”即可。 数据集 快速筛选 选择“数据集”页签,在左侧“筛选”区域,进行不同维度的快速筛选、查看和搜索。 查看数据集详情 鼠标移至数据集卡片并单击数据集名称,进入“数据概况”页面,可查看数据预览、基础信息(数据集用途、格式、来源、创建时间等)、数据介绍(如数据结构、数据使用注意事项等)信息。 收藏数据集 通过如下两种方法,将自己关注或后续计划使用的数据集收藏后,可便捷的在模型训练、数据标注、创建知识库时使用。 方法一:鼠标光标移至数据集卡片上,单击卡片右上角(单击可取消收藏)。 方法二:在查看数据集详情的页面,单击右上角(单击可取消收藏)。 提示语模板 快速筛选 选择“提示语”页签,在左侧“筛选”区域,进行不同维度的快速筛选、查看和搜索。 查看提示语模板详情 鼠标移至提示语卡片并单击模板名称,进入提示语详情页面,查看提示语的基础信息(适用行业、适用任务类型、更新时间等)及提示语信息(适用模型服务、提示语内容、变量)。 收藏提示语模板 通过如下两种方法,将自己关注或后续计划使用的提示语收藏后,可便捷的在创建应用、调测模型中快速使用。 方法一:鼠标光标移至提示语卡片上,单击卡片右上角(单击可取消收藏)。 方法二:在查看提示语详情的页面,单击右上角(单击可取消收藏)。 测试提示语 单击提示语卡片上的“去测试”,进入“模型调测”页面,在调测文本对话类型模型时,可引用提示语模板预览效果,具体请参见引用已有提示语模板。 复制内容 鼠标移至提示语卡片并单击“复制内容”,可一键复制提示语模板的全部内容。
  • 修改个人华为账号的密码 适用于修改个人华为账号(包括购买AppStage的租户开通者的个人华为账号、通过邀请成员加入组织的个人华为账号)的密码。为保障账号安全,建议定期更新密码。 鼠标光标移至右上角登录的用户名,弹出“账号信息”页面。 在“账号信息”页面,单击“修改密码”,进入华为账号的“帐号与安全”页面。 在“安全中心”区域单击“重置帐号密码”右侧“重置”。 在“重置帐号密码”页面,输入旧密码、新密码及再次输入新密码,单击“确定”。 密码需满足以下要求: 至少8个字符。 至少包含字母和数字,不能包含空格。 密码强度:勿使用其他账号的密码。 如果忘记旧密码,可通过如下操作找回密码: 单击“忘记旧密码”。 在“找回密码”页面,输入华为账号(注册账号的手机号或邮件地址)。 输入图形验证码,单击“下一步”。 单击“获取验证码”,输入相应的邮件验证码或手机验证码,再单击“下一步”。 设置新密码并确认新密码,单击“确定”。 密码需满足以下要求: 至少8个字符。 至少包含字母和数字,不能包含空格。 密码强度:勿使用其他账号的密码。 如果您有其他设备使用此账号,设置新密码后需重新登录,以确保正常使用华为服务。
  • 修改成员账号密码(通过OrgID创建的成员账号) 适用于通过添加成员加入组织的成员账号修改密码。为保障账号安全,建议定期更新密码。 在开发中心工作台,鼠标光标移至右上角登录的用户名,弹出“账号信息”页面。 在“账号信息”页面,单击“修改密码”。 为确认本人操作需进行身份验证,可选择手机短信验证码方式或邮件验证码方式。 如果该账号已同时绑定手机号码和邮箱,则可使用手机短信验证码方式或邮件验证码两种方式。 如果该账号仅绑定手机号码或邮箱其中一个,则相应的只需使用手机验证码方式或邮政验证码一种方式。 手机短信验证码验证方式的操作如下: 单击“获取验证码”。 输入手机上收到的短信验证码,单击“确定”。 邮件验证码验证方式的操作如下: 单击“选择其他验证方式”。 勾选使用邮箱的方式,单击“下一步”。 单击“获取验证码”。 输入邮箱收到的邮件验证码,单击“确定”。 在“重置帐号密码”页面,输入旧密码、新密码及再次输入新密码,单击“确定”。 密码需满足以下要求: 至少8个字符。 至少包含字母和数字,不能包含空格。 密码强度:勿使用其他账号的密码。 如果忘记旧密码,可通过如下操作找回密码: 单击“忘记旧密码”。 在“找回密码”页面,输入华为账号(注册账号的手机号或邮件地址)。 输入图形验证码,单击“下一步”。 单击“获取验证码”,输入相应的邮件验证码或手机验证码,再单击“下一步”。 设置新密码并确认新密码,单击“确定”。 密码需满足以下要求: 至少8个字符。 至少包含字母和数字,不能包含空格。 密码强度:勿使用其他账号的密码。 如果您有其他设备使用此账号,设置新密码后需重新登录,以确保正常使用华为服务。
  • 操作须知 该功能仅对组织管理员可见。 组织管理员可将任一用户添加为开发中心用户,已添加的用户不可重复添加。 添加至开发中心“用户管理”中的用户称为开发中心用户,未添加至开发中心“用户管理”中的用户称为非开发中心用户。 开发中心的“项目经理”、“开发人员”、“测试人员”、“浏览者”角色仅开发中心用户可申请。 仅开发中心用户才能被添加至团队空间成员。 组织管理将用户从开发中心用户中删除时,会同步删除该用户在开发中心中所有的角色权限。 非组织管理员且非开发中心用户访问开发中心时,不可查看团队列表,不可关注团队,需要在开发中心概览页根据页面提示进行申请,申请时可选择任一组织管理员审批(申请电子流将生成待办推送至业务控制台由审批人进行审批)。 开发中心用户总人数只能小于等于总配额,超过用户总配额可联系AppStage开通者在AppStage管理控制台购买开发人员增量包来扩展开发中心用户数。
  • 操作步骤 登录AppStage管理控制台。 在AppStage管理控制台“总览”页顶部根据提示单击“去配置”或在左侧导航栏选择“开发中心”。 在开发中心详情页“使用向导”区域的“关联CodeArts”节点,单击“去关联”,如图1所示。 图1 关联CodeArts 在“关联CodeArts”面板关联CodeArts服务,存在以下情况: 所选区域已开通CodeArts:在“关联CodeArts”对话框中“关联的CodeArts区域”下拉列表中选择需要关联的区域,如图2所示,单击“关联”,在“关联CodeArts”对话框对将要关联的区域进行二次确认,单击“确定”。 图2 所选区域已开通CodeArts 当所选区域CodeArts被冻结后,可能导致开发中心部分功能不可使用。 所选区域未开通CodeArts(包括未订购或退订CodeArts场景):单击“前往开通”前往开通CodeArts的链接完成开通,再返回“关联CodeArts”对话框单击“CodeArts开通情况”右侧刷新CodeArts开通情况显示“已开通”,以未订购CodeArts场景如图3所示(退订CodeArts的场景与此相似),单击“关联”,在“关联CodeArts”对话框对将要关联的区域进行二次确认,单击“确定”。 图3 所选区域未开通CodeArts 所选区域的CodeArts已被冻结:需要先解冻CodeArts(可参考资源冻结)后,再返回“关联CodeArts”对话框单击“CodeArts开通情况”右侧刷新CodeArts开通情况显示“已开通”,单击“关联”,在“关联CodeArts”对话框对将要关联的区域进行二次确认,单击“确定”。
  • 编排Agent的流程 图1 编排Agent的流程 表1 编排Agent的流程详解 序号 流程环节 说明 1 创建数据集 创建微调数据集/创建知识库数据集 用户根据需要创建微调数据集、知识库数据集,分别用于模型微调、创建知识库。 标注数据 用户可以将数据集中的某些元素进行标记或分类,以便模型可以更好地理解和使用这些数据。 2 创建提示语 选择平台预置提示语或自定义提示语 用户根据需要选择平台预置的提示语模板或自定义提示语模板,可在创建Agent、调测模型中快速引用。 优化提示语 针对提示语进行结构、排版、内容等维度的优化和改进,将大模型的输入限定在一个特定的范围中,进而更好地控制模型的输出。 3 创建模型服务 模型需要部署成功后才可正式提供模型推理服务,平台支持将微调后的模型、系统预置的模型以及通过自建模型服务接入的模型发布为模型服务。调测模型、应用调用均需先部署模型(即部署模型服务)。 4 创建知识库 自定义创建并管理知识库,创建的知识库启用后可在创建Agent时引用。 5 编排Agent 创建及发布Agent 将准备好的模型服务、提示语、知识库等编排Agent应用,以及将应用程序和相关的组件发布,使其能够正常运行。
  • 调优大模型的流程 图2 调优大模型的流程 表2 调优大模型的流程详解 序号 流程环节 说明 1 创建数据集 创建微调数据集 用户根据需要创建微调数据集,用于模型微调。 标注数据 用户可以将数据集中的某些元素进行标记或分类,以便模型可以更好地理解和使用这些数据。 2 创建提示语 选择平台预置提示语或自定义提示语 用户根据需要选择平台预置的提示语模板或自定义提示语模板,可在创建Agent、调测模型中快速引用。 优化提示语 针对提示语进行结构、排版、内容等维度的优化和改进,将大模型的输入限定在一个特定的范围中,进而更好地控制模型的输出。 3 调优大模型 创建模型微调流水线 通过选择合适的数据集,调整参数,训练平台预置的模型以提高模型效果,可通过训练过程/结果指标初步判断训练效果。 创建模型服务 训练好的模型需要部署后才可提供推理服务(在线测试模型、应用调用均需先部署模型)。 调测模型 通过调测模型,检验模型的准确性、可靠性及反应效果,发现模型中存在的问题和局限性。
  • 工作空间 在AI原生应用引擎工作台左侧导航栏选择“工作空间” ,进入工作空间页面,可获得系统中各资源数据概览及产品的相关快速指引。 工作空间页面分为数据统计、选择应用创建类型、操作指引三个区域,如图1所示,各区域的功能说明如表1所述。 图1 工作空间 表1 AI工作空间页面说明 序号 区域 说明 1 创建Agent快捷入口 在该区域单击“创建Agent”可快速进入一站式创建Agent页面,详细介绍请参见一站式创建Agent。 2 平台资产 在“平台资产”区域,可查看下述信息数据: Agent数据 模型数据 数据集数据 提示语数据 技能数据 知识库数据 3 我的空间 在“我的空间”区域,可查看下述信息数据: Agent:当前账号创建的、收藏的、订阅的Agent个数 模型:当前账号部署的、收藏的、接入的模型个数 数据集:当前账号创建的微调数据集个数、知识库数据集个数 提示语:当前账号创建的、收藏的提示语个数 技能:当前账号创建的、收藏的、订阅的技能个数 知识库:当前账号创建的知识库个数 4 操作指引 在“操作指引”区域,可概览各使用场景的流程指引: 零代码应用开发:详细流程说明请参见零代码应用开发。 全码化应用开发:详细流程说明请参见全码化应用开发。 模型调用与优化:详细流程说明请参见创建模型微调流水线、调测模型、创建及管理模型服务。 提示语优化工程:详细流程说明请参见创建提示语、优化提示语。 知识库构建:详细流程说明请参见创建及管理知识库。 5 为您推荐 为您推荐的热门Agent、热门模型。 单击“换一批”可查看更多推荐的热门Agent、热门模型。 6 我的任务 分别展示我创建的模型微调任务、数据标注任务状态统计,包括如下: 进行中、已完成、异常状态的模型微调任务数 进行中、已完成状态的标注数据数 父主题: AI原生应用引擎
共100000条