我只对GPT开发的相关插件进行讲解,因为我的是插件开发教程,关于GPT的一些提示词的写法,GPT任务的配置,请去金蝶云苍穹的文档和社区内学习。
GPT自定义操作的代码的类要实现 IGPTAction 这个接口,这个接口下只有一个要实现的方法,invokeAction方法,GPT自定义操作的业务功能便是在这个方法内写。
- public class GetBooksInfo implements IGPTAction {
- @Override
- public Map
invokeAction(String action, Map params) { -
- }
- }
先对invokeAction的参数列表进行讲解:
第一个String类型的参数action指的是自定义操作的操作名称,第二个参数params指的是这个GPT操作的输入参数,要获取输入参数只要params.get("输入参数名")就可以获取到对应的参数值。
返回值类型是一个Map类型的变量,在其中的元素中,一个元素就是一个输出参数,key就是输出参数的名称,value就是对应的参数值。
通常,如果是返回给输出参数一个数据,则使用JsonObject类型的变量来储存,只要用其put方法,将要存入的信息放进去就行。最后将这个JsonObject类型的变量用toJsonString变成json信息存到输出参数。
如果是返回给输出参数一组数据,则使用则使用JsonObject类型的变量来储存一个数据,再使用JsonArray来存储一个个JsonObject变量,就完成了一组数据的存储,最后将这个JsonArray类型的变量用toJsonString变成json信息存到输出参数。
注:记得JsonArray和JsonObject要import阿里的fastjson的
案例:找对应书籍的书籍类型的所有数据:
- /**
- * 用于查询书籍信息的插件
- */
- public class DemoTask implements IGPTAction {
- @Override
- public Map
invokeAction(String action, Map params) { - Map
result = new HashMap<>(); - //如果操作名称相等
- if ("GET_Library_Books".equalsIgnoreCase(action)) {
- //获取书籍名称
- String type = params.get("type");
- //获取DynamicObject列表,将要获取的字段信息注入
- DynamicObject[] dys = BusinessDataServiceHelper.load("abq2_books_info",
- "number," +
- "abq2_textfield," +
- "type," +
- "group," +
- "name," +
- "abq2_introduction",
- (new QFilter("type", QCP.equals, type)).toArray());
- //创建一个JsonArray
- JSONArray jsonArray = new JSONArray();
- for (DynamicObject dynamicObject : dys) {
- //将每一个书籍的信息加入JSONArray
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("number", dynamicObject.getString("number"));
- jsonObject.put("abq2_textfield", dynamicObject.getString("abq2_textfield"));
- jsonObject.put("name", dynamicObject.getString("name"));
- jsonObject.put("group", dynamicObject.getString("group"));
- jsonObject.put("abq2_introduction", dynamicObject.getString("abq2_introduction"));
- jsonArray.add(jsonObject);
- }
- System.out.println(jsonArray.toJSONString());
- //加入resultDynamicObject参数,将JsonArray加入到这个参数当中,然后返回
- result.put("resultDynamicObject", jsonArray.toJSONString());
- }
- return result;
- }
- }
微服务调用是将数据给GPT提示或GPT任务,GPT提示和GPT任务便会根据数据进行执行,然后可以获取到执行后的结果,即将GPT的运行隐形在代码中。
通常有时候会要获取指定的GPT任务的id和GPT提示的id,其实GPT提示和GPT任务也是基础资料,也根据相应的方式获取就行,我这有可以现成的可以复制粘贴过去用的自定义方法,可以参照一下:
获取GPT提示:
- //获取GPT提示的id
- public long getPromptFid(String billNo) {
- DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("gai_prompt",
- "number," +
- "id",
- (new QFilter("number", QCP.equals, billNo)).toArray());
- return dynamicObject.getLong("id");
- }
获取GPT任务:
- //获取GPT任务的id
- public long getProcessFid(String billNo) {
- DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("gai_process",
- "number," +
- "id",
- (new QFilter("number", QCP.equals, billNo)).toArray());
- return dynamicObject.getLong("id");
- }
参数都是指定的GPT提示编码和GPT任务编码。
我这里只讲三个微服务调用的方法:
这个是调用GPT提示的API,我先展示源码的参数列表:
public Map syncCall(long promptId, String input, Map varParams) {
第一个参数是指定GPT提示的id,第二个参数是用户的输入信息(就是对话框要输入的),第三个参数是GPT提示的输入参数的集合(输入参数和这个集合中的元素要对应,不然会报错)。
GPT提示的执行和输出信息的获取:
- Map
result = DispatchServiceHelper.invokeBizService("ai", "gai", "GaiPromptService", "syncCall", params); - JSONObject jsonObjectResult = new JSONObject(result);
- JSONObject jsonObjectData = jsonObjectResult.getJSONObject("data");
- String llmValue = jsonObjectData.getString("llmValue")
GPT提示的执行是靠DispatchServiceHelper.invokeBizService反射执行的,最后的llmValue就是GPT提示的输出信息
案例:日任务总结:
- /**
- * 用于智能总结日任务情况
- */
- public class EvaluateSum extends AbstractBillPlugIn {
- @Override
- public void registerListener(EventObject e) {
- //注册点击事件
- super.registerListener(e);
- this.addItemClickListeners("tbmain");
- }
-
- public void itemClick(ItemClickEvent e) {
- super.itemClick(e);
- if (e.getItemKey().equalsIgnoreCase("abq2_evaluate")) {
- //获取日任务信息,并且以JSON字符串的形式展现
- JSONObject jsonResultObject = new JSONObject();
- jsonResultObject.put("taskName", this.getModel().getValue("name").toString());
- jsonResultObject.put("createTime", this.getModel().getValue("abq2_task_create_time").toString());
- //获取当前页面的单据体的数据
- DynamicObjectCollection dynamicObjectCollection = this.getModel().getEntryEntity("abq2_task_entryentity");
- JSONArray jsonTaskArray = new JSONArray();
- for (DynamicObject dynamicObjectSingle : dynamicObjectCollection) {
- JSONObject jsonObjectSingle = new JSONObject();
- jsonObjectSingle.put("taskContent", dynamicObjectSingle.getString("abq2_task_context"));
- jsonObjectSingle.put("expectTime", dynamicObjectSingle.getString("abq2_expect_minute"));
- jsonObjectSingle.put("diff", dynamicObjectSingle.getString("abq2_diff"));
- jsonObjectSingle.put("finishTime", dynamicObjectSingle.getString("abq2_true_minute"));
- jsonObjectSingle.put("finishSituation", dynamicObjectSingle.getString("abq2_finish"));
- jsonTaskArray.add(jsonObjectSingle);
- }
- jsonResultObject.put("taskIntroduction", jsonTaskArray);
-
- //调用GPT开发平台微服务
- Map
variableMap = new HashMap<>(); - variableMap.put("taskResult", jsonResultObject.toJSONString());
-
- Object[] params = new Object[] {
- //GPT提示编码
- getPromptFid("prompt-24052235A7AD28"),
- "",
- variableMap
- };
- Map
result = DispatchServiceHelper.invokeBizService("ai", "gai", "GaiPromptService", "syncCall", params); - JSONObject jsonObjectResult = new JSONObject(result);
- JSONObject jsonObjectData = jsonObjectResult.getJSONObject("data");
-
- //设置值
- this.getModel().setValue("abq2_evaluate_and_sum", jsonObjectData.getString("llmValue"));
- Markdown mk = this.getView().getControl("abq2_markdownap");
- mk.setText(jsonObjectData.getString("llmValue"));
- }
-
- }
-
- //获取GPT提示的Fid
- public long getPromptFid(String billNo) {
- DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("gai_prompt",
- "number," +
- "id",
- (new QFilter("number", QCP.equals, billNo)).toArray());
- return dynamicObject.getLong("id");
- }
-
- @Override
- public void afterBindData(EventObject eventObject) {
- Markdown mk = this.getView().getControl("abq2_markdownap");
- mk.setText(this.getModel().getValue("abq2_evaluate_and_sum").toString());
- }
- }
剩下两个是GPT任务相关的:
DispatchServiceHelper.invokeBizService("ai", "gai", "GaiService","selectProcessInSideBar",pkValue,pageId,"……(GPT提示信息)");
这个是在页面中执行后就会弹出GPT对话框,并自动选择好相应的GPT任务的技能的方法。
pkValue就是GPT任务的id,pageId就是当前页面的pageId
示例:(这里的id的获取方式可以参照上面的获取GPT任务的id的自定义方法)
- /**
- * 基础资料插件
- */
- public class FastShowSchedule extends AbstractBasePlugIn implements Plugin {
- @Override
- public void beforeDoOperation(BeforeDoOperationEventArgs e) {
- super.beforeDoOperation(e);
- String operateKey = ((FormOperate) e.getSource()).getOperateKey();
- if (operateKey.equals("showai")){
- String pageId = this.getView().getMainView().getPageId();
- //GPT任务的id编码
- Object pkValue = Long.parseLong("1954601799130295296");
- DispatchServiceHelper.invokeBizService("ai", "gai", "GaiService","selectProcessInSideBar",pkValue,pageId,"请输入你的日任务内容");
- }
- }
- }
DispatchServiceHelper.invokeBizService("ai", "gai", "GaiService","startProcessInSideBar",pkValue,pageId,new HashMap(),"……(用户的输入信息)");
中间的那个map是GPT任务要的输入参数,如果没有输入参数可以给个空的集合,使用这个之后,GPT任务会自动运行,但是,弹窗不会自动打开,我也没找到能一起打开弹窗的办法,但是打开弹窗能看到GPT任务已经在对话框输出了,只能先打开对话框,再执行相应的GPT任务。
示例:
- @Override
- public void beforeDoOperation(BeforeDoOperationEventArgs e) {
- super.beforeDoOperation(e);
- String operateKey = ((FormOperate) e.getSource()).getOperateKey();
- if (operateKey.equals("showai")){
- String pageId = this.getView().getMainView().getPageId();
- //GPT任务的id编码
- Object pkValue = Long.parseLong("1969087472054844416");
- DispatchServiceHelper.invokeBizService("ai", "gai", "GaiService","startProcessInSideBar",pkValue,pageId,new HashMap(),"帮我分析食堂数据");
- }
- }