苍穹 GPT 使用记录 (更新:根据表单实体生成 查询SQL 语句)原创
金蝶云社区-周立思
周立思
1人赞赏了该文章 520次浏览 未经作者许可,禁止转载编辑于2024年05月09日 17:26:15

更新 

0509:使用百度 ERNIE-Bot ,根据表结构生成查询 SQL 语句

0508:自定义操作服务实现单据审核自动获取附件创建知识库


苍穹 GPT

百度千帆大模型

模型社区手册:https://vip.kingdee.com/link/s/lX1pQ 

【知识库】知识库社区手册:https://vip.kingdee.com/link/s/lX1vX 

如下图索引方式,主要是用 Embedding

image.png

测试是用的百度 Embedding-V1 ,按照社区文档配置【算法服务】【服务实例】,新建知识库选择配置的索引方式,上传文档保存,点击【文档处理】等待完成即可。(上传附件报错可参考本文章相关内容处理)

社区文档中注意事项:附件支持50M以内,可解析的pdf、txt格式。单次上传最多支持20个文件

image.png


文心一言,根据表结构生成 SQL 语句

配置【服务实例】使用 ERNIE-Bot

image.png

配置 【GPT 提示】

提示词如下图

image.png

配置【GPT 任务】

生成表结构节点使用插件根据当前表单实体生成 Markdown 

image.png

生成表结构节点示例代码,表结构使用 Markdown 描述

public class DemoCreateTableGPTAction implements IGPTAction {
    @Override
    public Map<String, String> invokeAction(String s, Map<String, String> map) {
        String pageId=map.get("PAGE_ID");
        IFormView formView=SessionManager.getCurrent().getView(pageId);
        String entityId= MetadataDao.getIdByNumber(formView.getEntityId(), MetaCategory.Entity);
        EntityMetadata entityMetadata=(EntityMetadata) MetadataDao.readRuntimeMeta(entityId, MetaCategory.Entity);
        String tableSchema=TableSchemaUtil.buildSchema(entityMetadata,formView.getPageCache());
        Map<String, String> returnData=new HashMap<>();
        returnData.put("table",tableSchema);
        return returnData;
    }
}

image.png

效果图

单据使用发布的【生成查询 SQL 语句】技能

image.png

拷贝 SQL 语句到查询分析器测试

image.png


知识库微服务-单据审核附件自动创建知识库

使用平台模型扩展-自定义操作服务。实现单据审核后执行操作服务,自动获取单据附件创建知识库。

知识库微服务,社区手册:https://vip.kingdee.com/link/s/lXWPu 

模型扩展-自定义操作服务,社区资料:https://vip.kingdee.com/link/s/lXWgl 


创建自定义操作服务

如下图,实现类需要继承 AbstractOpBizRuleAction

image.png

审核操作代码配置操作服务

image.png

image.png

获取附件请求 GPT 微服务

image.png

示例代码如下:

public class GaiRepoAutoOpBizRule extends AbstractOpBizRuleAction {

    @Override
    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
        if (getOperationResult().isSuccess()) {
            for (DynamicObject data : e.getDataEntities()) {
                invokeGaiService(data);
            }
        }
    }
    private void invokeGaiService(DynamicObject data) {
        DynamicObjectType dynamicObjectType = data.getDynamicObjectType();
        if (dynamicObjectType instanceof BillEntityType) {
            BillEntityType billEntityType = (BillEntityType) dynamicObjectType;
            MainOrgProp mainOrgProp = billEntityType.getMainOrgProperty();
            Long userOrg = mainOrgProp == null ? RequestContext.get().getOrgId() : (Long) data.getDynamicObject(mainOrgProp).getPkValue();
            JSONObject jsonObject = new JSONObject();
            String number = billEntityType.getName();
            jsonObject.put("name", number + "#" + data.getPkValue());
            String name = dynamicObjectType.getDisplayName().getLocaleValue();
            jsonObject.put("desc", name + " 审核自动生成知识库#" + data.getPkValue());
            jsonObject.put("indexMethod", "BAIDU_EMBEDDING_V1");
            jsonObject.put("type", "qa");
            jsonObject.put("useOrg", userOrg);
            List<Map<String, Object>> attachments = AttachmentServiceHelper.getAttachments(number, data.getPkValue().toString(), "attachmentpanel");
            JSONArray fileInfos = new JSONArray();
            for (Map<String, Object> attachment : attachments) {
                String type = (String) attachment.get("type");
                if ("pdf".equals(type) || "txt".equals(type)) {
                    JSONObject fileInfo = new JSONObject();
                    fileInfo.put("fileName", attachment.get("name"));
                    fileInfo.put("fileType", type);
                    fileInfo.put("filePath", attachment.get("relativeUrl"));
                    fileInfo.put("fileSize", attachment.get("size"));
                    fileInfos.add(fileInfo);
                }
            }
            jsonObject.put("fileInfos", fileInfos);
            Map<String, Object> result = (Map<String, Object>) DispatchServiceHelper.invokeBizService("ai", "gai", 
                    "GaiRagService", "createRepo", jsonObject.toJSONString());
            if (result != null) {
                if (!"0".equals(result.get("errCode"))) {
                    String errorMessage = result.get("errMsg").toString();
                    OperationResult operationResult = getOperationResult();
                    operationResult.setShowMessage(true);
                    operationResult.setMessage(errorMessage);
                }
            }
        }
    }
}

效果图

image.png

社区文档描述:通过微服务接口来实现知识库创建,并自动完成对知识库的处理(文档加载、切分、向量化)

image.png


敏感词审查

社区手册:https://vip.kingdee.com/link/s/lX139 

例如:校园咨询助手利用敏感词审查机制,识别特殊情况给予正向引导。

image.png

image.png


MinIO 文件服务器

向量数据库安装后,可切换文件服务器为 MinIO

参考资料:https://vip.kingdee.com/link/s/lVFSA 


知识库上传附件报错 org.apache.commons.lang3.math.NumberUtils

参考资料:https://vip.kingdee.com/link/s/lXXsj 


如何开启查看详细的错误信息,如下图操作路径:【基础服务云】-【公共设置】-【参数配置】-【系统参数】-【公共参数】-开启显示异常堆栈信息 

image.png



官方文档补全


语雀文档:升级开发环境(GPT 补丁包)下图中右侧红框【升级设置】勾选需要修改增加【执行应用仓库升级】【执行静态资源升级】

image.png

【升级设置】正确勾选项如下图

image.png

赞 1