让AI写你自己封装的Vue组件库的代码(思维链实现版),超神了!

前几天,我用JBoltAI里最简单的智能体配置方式,实现了《让AI写你自己封装的Vue组件库的代码》的教程。

今天,我们换一种更精细控制、编码思维链定制的方式,去实现一个这个功能。

一、什么是JBoltAI 思维链

JBoltAI里的思维链,并不是传统AI大模型里谈的思维链。

JBoltAI里的思维链,是JBoltAI内置的流程编排框架-Java代码版。

也叫事件链,因为底层处理都是基于节点关系和事件总线驱动的机制运行的。

新版的JBoltAI_SpringBoot版里已经添加了可视化编排JBoltAI工作流的能力,底层也是基于事件链驱动的。

二、手写事件链实现:

package cn.jbolt.ai.common.cot;
import cn.jbolt.ai.admin.aiapp.AiAppKit;
import cn.jbolt.ai.common.model.AiApp;
import com.jboltai.capability.message.AIIntention;
import com.jboltai.capability.model.JBoltAI;
import com.jboltai.event.*;
import com.jboltai.event.chain.*;
import com.jboltai.util.share.AIEventThreadShareData;
/**
 * JBoltAI DtgForm组件代码生成专用思维链实现类
 */
public class JBoltAIDtgFormCot extends JBoltAICot{
    @Override
    public Chain execute(AiApp aiApp, Long aiAppSessionId, Long userId, String websocketToken, String websocketCommand, String systemMessage, String prompt, String userOriginMsg, StringBuilder content, Long userMsgId, Long aiMsgId, String aiMsgBoxId) {
        //1、switchCase 判断需求意图类型节点
        CaseChainNode checkNode = new CaseChainNode(chain -> {
            //声明意图
            AIIntention[] intentions = new AIIntention[]{
                    AIIntention.of("dtgForm", "表单生成", "需要生成Form表单", "请帮我设计一个客户信息表", "客户登记表", "表单", "xxx表"),
                    AIIntention.of("normalChat", "其它非表单生成类问题、打招呼、问候语,其他的语气词,普通聊天,短语等", "好吧", "谢谢","再见","bye","感谢","你真棒")};
            //进行意图识别
            AIIntention ret = JBoltAI.recognizeIntention(userOriginMsg, intentions).get();
            if(ret == null || "INNER_NO_MATCH".equals(ret.getKey())){
                return "normalChat";
            }
            //返回意图类型识别结果
            return ret.getKey();
        });
        //2、普通聊天节点
        EventChainNode normalChatNode = new EventChainNode(new EventSupplier() {
            @Override
            public Event supply(Chain chain) {
                return AiAppKit.callNormalChat(content, websocketToken, websocketCommand, userId, aiAppSessionId, userOriginMsg, aiApp, userMsgId, aiMsgId, aiMsgBoxId,false, AIEventThreadShareData::clear);
            }
        }).addPrevWhenCase(checkNode, "normalChat");
        //3、dtgForm代码生成节点
        EventChainNode dtgFormNode = new EventChainNode(chainx ->{
                aiApp.setSystemMessageTpl(SYSTEM_MSG);
                aiApp.setPromptTpl(String.format(PROMPT_TPL, userOriginMsg));
                return AiAppKit.callNormalChat(content, websocketToken, websocketCommand, userId, aiAppSessionId, userOriginMsg, aiApp, userMsgId, aiMsgId, aiMsgBoxId,false, AIEventThreadShareData::clear);
        }).addPrevWhenCase(checkNode, "dtgForm");
        //4、创建一个思维链
        Chain chain = new Chain();
        //5、链上加节点
        chain.addNodes(checkNode,normalChatNode,dtgFormNode);
        //6、返回整条链
        return chain;
    }

    private static final String SYSTEM_MSG = "# 角色\n" +
            "你是一个精通VUE、javascript、html、css、以及dtgForm这个vue组件库的高级前端开发专家\n" +
            "# 你的任务和能力\n" +
            "根据用户提出的表单设计需求,使用dtgForm这个组件库去写出表单实现的代码\n" +
            "# dtgForm组件库的详细使用说明如下\n" +
            "```html\n" +
            "<DtgForm v-bind=\"config\"\"></DtgForm>\n" +
            "```\n" +
            "\n" +
            "### 多选 - checkbox\n" +
            "用来设置多选框 <code>type='checkbox'</code>\n" +
            "\n" +
            "### 日期 - date\n" +
            "设置日期 <code>type='date'</code>\n" +
            "\n" +
            "### 日期范围 - dateRange\n" +
            "设置日期范围 <code>type='dateRange'</code>\n" +
            "\n" +
            "### 单选 - radio\n" +
            "设置单选 <code>type='radio'</code>\n" +
            "\n" +
            "### 下拉选择框 - select\n" +
            "设置下拉选择框 <code>type='select'</code>  \n" +
            "\n" +
            "### 单行文本框 - text\n" +
            "设置单行文本框 <code>type='text'</code>\n" +
            "\n" +
            "### 多行文本框 - textarea\n" +
            "设置多行文本框 <code>type='textarea'</code>\n" +
            "\n" +
            "## 表单项(列)formItem配置演示\n" +
            "> 数据结构为二维数组(与group组件的children属性的数据结构一致),如下:\n" +
            "```js\n" +
            "let config = {\n" +
            "    model: {\n" +
            "        a: '1',\n" +
            "        b: '2',\n" +
            "        c: '3',\n" +
            "        radio: '',\n" +
            "        checkbox: ''\n" +
            "\n" +
            "    },\n" +
            "    formItem: [\n" +
            "        [ // 行数\n" +
            "            { // 列数,对象的数量应该是可被24整除的数,除了以下属性配置,还可支持官方所有的属性和事件配置\n" +
            "                type: 'text', // 表单项类型 可设置的值参考上面列表\n" +
            "                id: 'a', // id的值必须与model对象中的属性值相同,并且rules里的属性也要和id相同\n" +
            "                label: '姓名', // label\n" +
            "                placeholder: '请输入内容', // 提示输入内容 默认''\n" +
            "                span: 4, // 手动设置表单项的网格宽度,当前行的所有列总和不能超过24;如果不设置,当前行所有列平分24\n" +
            "                required: false, // 是否是必填项 默认true;设为false以后,内置组件依然会进行验证只是el-form-item组件的红星会消失,如果要关闭验证可以设置validate: false\n" +
            "                validate: false, // 是否开启验证 默认true;如果设为false,required自动变为false\n" +
            "                attrs: { // 官方属性配置\n" +
            "                    label: '官方属性配置'\n" +
            "                },\n" +
            "            },\n" +
            "            {\n" +
            "                type: 'select',\n" +
            "                id: 'b',\n" +
            "                label: '职位',\n" +
            "                options: [{label: '选项1', value: '1'}, {label: '选项2', value: '2'}],\n" +
            "            },\n" +
            "            {\n" +
            "                type: 'textarea',\n" +
            "                id: 'c', // 支持多层id\n" +
            "                label: '多行文本框'\n" +
            "            },\n" +
            "            {\n" +
            "                type: 'radio',\n" +
            "                id: 'radio',\n" +
            "                label: '单选',\n" +
            "                options: [{label: '开', value: '1'}, {label: '不开', value: '0'}]\n" +
            "            },\n" +
            "            {\n" +
            "                type: 'checkbox',\n" +
            "                id: 'checkbox'\n" +
            "                label: '多选',\n" +
            "                show (model) { // 当id为radio的组件值为1时,该组件才显示;函数接受表单的model参数\n" +
            "                    return model.radio == 1\n" +
            "                },\n" +
            "                options: [{label: '抽烟', value: 1}, {label: '喝酒', value: 2}, {label: '烫头', value: 3}]\n" +
            "            }\n" +
            "        ]\n" +
            "    ]\n" +
            "}\n" +
            "```";
    private static final String PROMPT_TPL = "# 用户的表单设计需求如下\n" +
            "<表单设计需求>\n" +
            "%s\n" +
            "</表单设计需求>\n" +
            "\n" +
            "# 输出要求\n" +
            "你输出的代码要用```html ```包裹起来。\n" +
            "用dtgForm组件库去实现这个表单,只输出代码,不要其他解释内容。\n" +
            "\n" +
            "请一步一步思考后按照要求完成。";
}

按照上图和代码里的6个步骤,写出三个节点,把事件串联起来。

然后在JBoltAI的智能体开发工具箱里绑定思维链即可。

智能体完成发布后,我们体验测试一下:

1、输入一个问候语:你好

思维链走的是普通聊天的节点:

2、输入一个通识问答

JFinal官网地址?

3、输入一个表单设计需求

客户信息登记表:

意图识别到了表单生成需求,就调用了表单生成的节点,输出准确代码。

<template>
  <div class="customer-registration-form">
    <h2>客户信息登记表</h2>
    <DtgForm v-bind="config"></DtgForm>
  </div>
</template>

<script>
export default {
  data() {
    return {
      config: {
        model: {
          name: '',
          gender: '',
          phone: '',
          email: '',
          birthDate: '',
          address: '',
          occupation: '',
          company: '',
          contactPreference: [],
          customerType: '',
          remarks: ''
        },
        formItem: [
          [
            {
              type: 'text',
              id: 'name',
              label: '姓名',
              placeholder: '请输入客户姓名',
              required: true,
              span: 12
            },
            {
              type: 'radio',
              id: 'gender',
              label: '性别',
              required: true,
              span: 12,
              options: [
                { label: '男', value: 'male' },
                { label: '女', value: 'female' }
              ]
            }
          ],
          [
            {
              type: 'text',
              id: 'phone',
              label: '联系电话',
              placeholder: '请输入联系电话',
              required: true,
              span: 12
            },
            {
              type: 'text',
              id: 'email',
              label: '电子邮箱',
              placeholder: '请输入电子邮箱',
              span: 12
            }
          ],
          [
            {
              type: 'date',
              id: 'birthDate',
              label: '出生日期',
              placeholder: '请选择出生日期',
              span: 12
            },
            {
              type: 'text',
              id: 'address',
              label: '联系地址',
              placeholder: '请输入联系地址',
              span: 12
            }
          ],
          [
            {
              type: 'text',
              id: 'occupation',
              label: '职业',
              placeholder: '请输入职业',
              span: 12
            },
            {
              type: 'text',
              id: 'company',
              label: '公司/单位',
              placeholder: '请输入公司或单位名称',
              span: 12
            }
          ],
          [
            {
              type: 'checkbox',
              id: 'contactPreference',
              label: '联系方式偏好',
              span: 12,
              options: [
                { label: '电话', value: 'phone' },
                { label: '短信', value: 'sms' },
                { label: '邮件', value: 'email' },
                { label: '微信', value: 'wechat' }
              ]
            },
            {
              type: 'select',
              id: 'customerType',
              label: '客户类型',
              placeholder: '请选择客户类型',
              span: 12,
              options: [
                { label: '个人客户', value: 'personal' },
                { label: '企业客户', value: 'business' },
                { label: 'VIP客户', value: 'vip' },
                { label: '潜在客户', value: 'potential' }
              ]
            }
          ],
          [
            {
              type: 'textarea',
              id: 'remarks',
              label: '备注信息',
              placeholder: '请输入其他需要说明的信息',
              span: 24
            }
          ]
        ]
      }
    };
  }
};
</script>

<style scoped>
.customer-registration-form {
  max-width: 1000px;
  margin: 0 auto;
  padding: 20px;
}

h2 {
  text-align: center;
  margin-bottom: 20px;
}
</style>

4、代码渲染效果:

JBoltAI,通过定制思维链,意图识别,代码形式实现了深度定制智能体操作流程。

觉得麻烦,后面新版本发布的可视化编排就更爽了!

JBoltAI是Java企业级AI应用开发框架,Java AIGS(AI Generate Service)解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值